001: /*
002: ItsNat Java Web Application Framework
003: Copyright (C) 2007 Innowhere Software Services S.L., Spanish Company
004: Author: Jose Maria Arranz Santamaria
005:
006: This program is free software: you can redistribute it and/or modify
007: it under the terms of the GNU Affero General Public License as published by
008: the Free Software Foundation, either version 3 of the License, or
009: (at your option) any later version. See the GNU Affero General Public
010: License for more details. See the copy of the GNU Affero General Public License
011: included in this program. If not, see <http://www.gnu.org/licenses/>.
012: */
013:
014: package org.itsnat.impl.comp;
015:
016: import java.beans.PropertyVetoException;
017: import org.itsnat.comp.ItsNatLabel;
018: import org.itsnat.comp.ItsNatLabelEditor;
019: import org.itsnat.comp.ItsNatLabelRenderer;
020: import org.itsnat.comp.ui.ItsNatComponentUI;
021: import org.itsnat.comp.ui.ItsNatLabelUI;
022: import org.itsnat.core.event.ParamTransport;
023: import org.itsnat.core.NameValue;
024: import org.itsnat.impl.comp.ui.ItsNatLabelUIImpl;
025: import org.w3c.dom.Element;
026:
027: /**
028: *
029: * @author jmarranz
030: */
031: public abstract class ItsNatLabelImpl extends
032: ItsNatElementComponentImpl implements ItsNatLabel {
033: protected ItsNatLabelRenderer renderer;
034: protected LabelEditorProcessor editorProcessor = new LabelEditorProcessor(
035: this );
036: protected Object oldValue;
037:
038: /**
039: * Creates a new instance of ItsNatLabelImpl
040: */
041: public ItsNatLabelImpl(Element element, NameValue[] artifacts,
042: ItsNatComponentManagerImpl componentMgr) {
043: super (element, artifacts, componentMgr);
044:
045: setItsNatLabelRenderer(componentMgr
046: .createDefaultItsNatLabelRenderer());
047: }
048:
049: public ItsNatLabelUI getItsNatLabelUI() {
050: return (ItsNatLabelUI) compUI;
051: }
052:
053: public Class getStructureClass() {
054: return null;
055: }
056:
057: public Object createDefaultStructure() {
058: return null;
059: }
060:
061: public LabelEditorProcessor getLabelEditorProcessor() {
062: return editorProcessor;
063: }
064:
065: public void enableEventListeners() {
066: // No hay eventos, si el usuario quiere el click por ejemplo que lo añada
067: // al definir un editor automáticamente registra dblclick (o el definido)
068: }
069:
070: public void bindDataModel() {
071: // Nada que hacer
072: }
073:
074: public void unbindDataModel() {
075: // Nada que hacer
076: }
077:
078: public void syncUIWithDataModel() {
079: // No se llama hasta que se llama a setValue(Object) explícitamente
080: ItsNatLabelUI labelUI = getItsNatLabelUI();
081: Object value = getValue();
082: if (value != null) {
083: if (oldValue == null)
084: labelUI.addLabelMarkup(value);
085: else
086: labelUI.setLabelValue(value);
087: } else
088: labelUI.removeLabelMarkup();
089: }
090:
091: public ItsNatComponentUI createDefaultItsNatComponentUI() {
092: return new ItsNatLabelUIImpl(this );
093: }
094:
095: public Object getValue() {
096: return getDataModel();
097: }
098:
099: public void setValue(Object value) throws PropertyVetoException {
100: Object oldValue = getValue();
101:
102: fireVetoableChange("value", oldValue, value); // Si se produce una excepción no se cambiará el valor. Es interesante por ejemplo cuando la etiqueta es cambiada por el usuario via edición, así podemos filtrar valores válidos/no válidos
103:
104: this .oldValue = oldValue;
105: setDataModel(value, true); // Se acepta el caso null
106: this .oldValue = getValue();
107:
108: // Como el data model es un simple objeto así tenemos notificación de cuando cambia
109: firePropertyChange("value", oldValue, value); // Si son iguales no se lanza
110: }
111:
112: public Object createDefaultModelInternal() {
113: return null; // Hace que no se intente renderizar quedando vacío el label
114: }
115:
116: protected ParamTransport[] getParamTransports(String type) {
117: return null;
118: }
119:
120: public ItsNatLabelRenderer getItsNatLabelRenderer() {
121: return renderer;
122: }
123:
124: public void setItsNatLabelRenderer(ItsNatLabelRenderer renderer) {
125: this .renderer = renderer;
126: }
127:
128: public ItsNatLabelEditor getItsNatLabelEditor() {
129: LabelEditorProcessor editorProcessor = getLabelEditorProcessor();
130: return editorProcessor.getItsNatLabelEditor();
131: }
132:
133: public void setItsNatLabelEditor(ItsNatLabelEditor cellEditor) {
134: editorProcessor.setItsNatLabelEditor(cellEditor);
135: }
136:
137: public void startEditing() {
138: getLabelEditorProcessor().startEdition();
139: }
140:
141: public boolean isEditing() {
142: return getLabelEditorProcessor().isEditing();
143: }
144:
145: public String getEditorActivatorEvent() {
146: return getLabelEditorProcessor().getEditorActivatorEvent();
147: }
148:
149: public void setEditorActivatorEvent(String editorActivatorEvent) {
150: getLabelEditorProcessor().setEditorActivatorEvent(
151: editorActivatorEvent);
152: }
153:
154: }
|