package org.dashbuilder.common.client.widgets;
import com.google.gwt.dom.client.Element;
import com.google.gwt.text.shared.AbstractRenderer;
import com.google.gwt.text.shared.Parser;
import org.gwtbootstrap3.client.ui.base.ValueBoxBase;
/**
* <p>Abstract base class for most character entry widgets. and Support boostrap style.</p>
* <p>This class implementation is same as <code>com.github.gwtbootstrap.client.ui.base.TextBoxBase</code> but using Character types instead of String.</p>
*
* @since 0.3.0
*/
public class CharacterBoxBase extends ValueBoxBase<Character> {
private static final PassthroughRenderer RENDERER_INSTANCE = new PassthroughRenderer();
private static final PassthroughParser PARSER_INSTANCE = new PassthroughParser();
/**
* Creates a text box that wraps the given browser element handle. This is
* only used by subclasses.
*
* @param elem
* the browser element to wrap
*/
protected CharacterBoxBase(Element elem) {
super(elem, RENDERER_INSTANCE, PARSER_INSTANCE);
}
/**
* Overridden to return "" from an empty text box.
*/
@Override
public Character getValue() {
Character raw = super.getValue();
return raw == null
? ' '
: raw;
}
private static class PassthroughRenderer extends AbstractRenderer<Character> {
public PassthroughRenderer() {
}
public String render(Character object) {
return object.toString();
}
}
private static class PassthroughParser implements Parser<Character> {
public PassthroughParser() {
}
public Character parse(CharSequence object) {
if (object.length() > 0) return object.charAt(0);
return null;
}
}
}