package pt.ist.renderers; import org.apache.commons.lang.StringUtils; import pt.ist.renderers.components.HtmlComponent; import pt.ist.renderers.components.HtmlFormComponent; import pt.ist.renderers.components.HtmlTextInput; import pt.ist.renderers.contexts.InputContext; import pt.ist.renderers.layouts.Layout; import pt.ist.renderers.model.MetaSlotKey; import pt.ist.renderers.utils.RenderUtils; /** * This renderer serves as a base for all input renderers that are * based in a text input field. * * @author cfgi */ public abstract class TextFieldRenderer extends InputRenderer { private boolean disabled; private boolean readOnly; private String size; private Integer maxLength; private String formatText; private String bundle; private boolean key; public boolean getDisabled() { return disabled; } /** * Indicates that the field is to be disabled, that is, the user * won't be able to change it's value and it wont be submited. * * @property */ public void setDisabled(boolean disabled) { this.disabled = disabled; } public Integer getMaxLength() { return maxLength; } /** * The max length of the field's input. * * @property */ public void setMaxLength(Integer maxLength) { this.maxLength = maxLength; } public boolean getReadOnly() { return readOnly; } /** * Indicates that the field is read only. The user cannot change * the field's value but the field is submited. * * @property */ public void setReadOnly(boolean readOnly) { this.readOnly = readOnly; } public String getSize() { return size; } /** * The size of the field. * * @property */ public void setSize(String size) { this.size = size; } /** * When the value of the formatText is a key this property indicates * the name of the bundle where the key will be looked for. * * @property */ public void setBundle(String bundle) { this.bundle = bundle; } public boolean isKey() { return this.key; } /** * Indicates the the value of the formatText property is * a key and not the text itself. * * @property */ public void setKey(boolean key) { this.key = key; } public String getFormatText() { return this.formatText; } /** * The value that will be appended next to the input text box. * * @property */ public void setFormatText(String formatText) { this.formatText = formatText; } public String getBundle() { return this.bundle; } @Override protected Layout getLayout(Object object, Class type) { return new TextFieldLayout(); } protected String getFormatLabel() { if (isKey()) { return RenderUtils.getResourceString(getBundle(), getFormatText()); } else if (getFormatText() != null) { return getFormatText(); } return StringUtils.EMPTY; } protected abstract HtmlComponent createTextField(Object object, Class type); protected class TextFieldLayout extends Layout { @Override public HtmlComponent createComponent(Object object, Class type) { HtmlComponent component = createTextField(object, type); InputContext context = getInputContext(); setContextSlot(component, (MetaSlotKey) context.getMetaObject().getKey()); return component; } protected void setContextSlot(HtmlComponent component, MetaSlotKey slotKey) { ((HtmlFormComponent) component).setTargetSlot(slotKey); } @Override public void applyStyle(HtmlComponent component) { super.applyStyle(component); HtmlTextInput textInput = (HtmlTextInput) component; textInput.setMaxLength(getMaxLength()); textInput.setSize(getSize()); textInput.setReadOnly(getReadOnly()); textInput.setDisabled(getDisabled()); } } }