bruno 2004/04/27 02:17:01
Modified: src/blocks/forms/java/org/apache/cocoon/forms/formmodel Action.java BooleanField.java Field.java Log: Added instance-level event listeners Revision Changes Path 1.7 +24 -1 cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Action.java Index: Action.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Action.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- Action.java 22 Apr 2004 14:26:48 -0000 1.6 +++ Action.java 27 Apr 2004 09:17:01 -0000 1.7 @@ -19,6 +19,8 @@ import org.apache.cocoon.forms.FormContext; import org.apache.cocoon.forms.event.ActionEvent; import org.apache.cocoon.forms.event.WidgetEvent; +import org.apache.cocoon.forms.event.ActionListener; +import org.apache.cocoon.forms.event.WidgetEventMulticaster; /** * An Action widget. An Action widget can cause an [EMAIL PROTECTED] ActionEvent} to be triggered @@ -33,6 +35,8 @@ */ public class Action extends AbstractWidget { private final ActionDefinition definition; + /** Additional listeners to those defined as part of the widget definition (if any). */ + private ActionListener listener; public Action(ActionDefinition definition) { this.definition = definition; @@ -100,8 +104,27 @@ return ACTION_EL; } + /** + * Adds a ActionListener to this widget instance. Listeners defined + * on the widget instance will be executed in addtion to any listeners + * that might have been defined in the widget definition. + */ + public void addActionListener(ActionListener listener) { + this.listener = WidgetEventMulticaster.add(this.listener, listener); + } + + public void removeActionListener(ActionListener listener) { + this.listener = WidgetEventMulticaster.remove(this.listener, listener); + } + + private void fireActionEvent(ActionEvent event) { + if (this.listener != null) { + this.listener.actionPerformed(event); + } + } public void broadcastEvent(WidgetEvent event) { this.definition.fireActionEvent((ActionEvent)event); + fireActionEvent((ActionEvent)event); } } 1.7 +25 -1 cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanField.java Index: BooleanField.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanField.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- BooleanField.java 22 Apr 2004 14:26:48 -0000 1.6 +++ BooleanField.java 27 Apr 2004 09:17:01 -0000 1.7 @@ -21,6 +21,8 @@ import org.apache.cocoon.forms.FormContext; import org.apache.cocoon.forms.event.ValueChangedEvent; import org.apache.cocoon.forms.event.WidgetEvent; +import org.apache.cocoon.forms.event.ValueChangedListener; +import org.apache.cocoon.forms.event.WidgetEventMulticaster; import org.apache.cocoon.xml.XMLUtils; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; @@ -43,6 +45,8 @@ // event listeners to be triggered at bind time. private Boolean value = Boolean.FALSE; private final BooleanFieldDefinition definition; + /** Additional listeners to those defined as part of the widget definition (if any). */ + private ValueChangedListener listener; public BooleanField(BooleanFieldDefinition definition) { this.definition = definition; @@ -118,7 +122,27 @@ } } + /** + * Adds a ValueChangedListener to this widget instance. Listeners defined + * on the widget instance will be executed in addtion to any listeners + * that might have been defined in the widget definition. + */ + public void addValueChangedListener(ValueChangedListener listener) { + this.listener = WidgetEventMulticaster.add(this.listener, listener); + } + + public void removeValueChangedListener(ValueChangedListener listener) { + this.listener = WidgetEventMulticaster.remove(this.listener, listener); + } + + private void fireValueChangedEvent(ValueChangedEvent event) { + if (this.listener != null) { + this.listener.valueChanged(event); + } + } + public void broadcastEvent(WidgetEvent event) { this.definition.fireValueChangedEvent((ValueChangedEvent)event); + fireValueChangedEvent((ValueChangedEvent)event); } } 1.10 +26 -5 cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java Index: Field.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- Field.java 22 Apr 2004 14:26:48 -0000 1.9 +++ Field.java 27 Apr 2004 09:17:01 -0000 1.10 @@ -19,9 +19,7 @@ import org.apache.cocoon.forms.FormContext; import org.apache.cocoon.forms.datatype.Datatype; import org.apache.cocoon.forms.datatype.SelectionList; -import org.apache.cocoon.forms.event.DeferredValueChangedEvent; -import org.apache.cocoon.forms.event.ValueChangedEvent; -import org.apache.cocoon.forms.event.WidgetEvent; +import org.apache.cocoon.forms.event.*; import org.apache.cocoon.forms.util.I18nMessage; import org.apache.cocoon.forms.validation.ValidationError; import org.apache.cocoon.forms.validation.ValidationErrorAware; @@ -46,8 +44,11 @@ * @version CVS $Id$ */ public class Field extends AbstractWidget implements ValidationErrorAware, DataWidget, SelectableWidget { + /** Overrides selection list defined in FieldDefinition, if any. */ protected SelectionList selectionList; - + /** Additional listeners to those defined as part of the widget definition (if any). */ + private ValueChangedListener listener; + private final FieldDefinition fieldDefinition; protected String enteredValue; @@ -317,7 +318,27 @@ return getFieldDefinition().getDatatype(); } + /** + * Adds a ValueChangedListener to this widget instance. Listeners defined + * on the widget instance will be executed in addtion to any listeners + * that might have been defined in the widget definition. + */ + public void addValueChangedListener(ValueChangedListener listener) { + this.listener = WidgetEventMulticaster.add(this.listener, listener); + } + + public void removeValueChangedListener(ValueChangedListener listener) { + this.listener = WidgetEventMulticaster.remove(this.listener, listener); + } + + private void fireValueChangedEvent(ValueChangedEvent event) { + if (this.listener != null) { + this.listener.valueChanged(event); + } + } + public void broadcastEvent(WidgetEvent event) { getFieldDefinition().fireValueChangedEvent((ValueChangedEvent)event); + fireValueChangedEvent((ValueChangedEvent)event); } }