You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by sy...@apache.org on 2004/09/27 22:47:01 UTC
svn commit: rev 47331 - in cocoon/branches/BRANCH_2_1_X: . src/blocks/forms/java/org/apache/cocoon/forms/formmodel src/documentation/xdocs/userdocs/forms
Author: sylvain
Date: Mon Sep 27 13:47:00 2004
New Revision: 47331
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ActionDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/DeleteRowsActionDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Repeater.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RowActionDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RowActionDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/documentation/xdocs/userdocs/forms/widget_repeater_action.xml
cocoon/branches/BRANCH_2_1_X/src/documentation/xdocs/userdocs/forms/widget_row_action.xml
cocoon/branches/BRANCH_2_1_X/status.xml
Log:
Rename 'on-activate' to 'on-action' and call handlers before deleting rows
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ActionDefinition.java
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ActionDefinition.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ActionDefinition.java Mon Sep 27 13:47:00 2004
@@ -22,7 +22,7 @@
/**
* The {@link WidgetDefinition} part of a Action widget, see {@link Action} for more information.
*
- * @version $Id: ActionDefinition.java,v 1.1 2004/03/09 10:33:50 reinhard Exp $
+ * @version $Id$
*/
public class ActionDefinition extends AbstractWidgetDefinition {
private String actionCommand;
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/DeleteRowsActionDefinition.java
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/DeleteRowsActionDefinition.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/DeleteRowsActionDefinition.java Mon Sep 27 13:47:00 2004
@@ -16,13 +16,15 @@
package org.apache.cocoon.forms.formmodel;
import org.apache.cocoon.forms.event.ActionEvent;
-import org.apache.cocoon.forms.event.ActionListener;
/**
* The definition for a repeater action that deletes the selected rows of a sibling repeater.
+ * <p>
+ * The action listeners attached to this action, if any, are called <em>before</em> the rows
+ * are actually removed
*
* @author <a href="http://www.apache.org/~sylvain/">Sylvain Wallez</a>
- * @version CVS $Id: DeleteRowsActionDefinition.java,v 1.2 2004/05/07 16:43:42 mpo Exp $
+ * @version CVS $Id$
*/
public class DeleteRowsActionDefinition extends RepeaterActionDefinition {
@@ -31,17 +33,24 @@
public DeleteRowsActionDefinition(String repeaterName, String selectName) {
super(repeaterName);
this.selectName = selectName;
+ }
+
+ public boolean hasActionListeners() {
+ // we always want to be notified
+ return true;
+ }
+
+ public void fireActionEvent(ActionEvent event) {
+ // Call action listeners, if any
+ super.fireActionEvent(event);
- this.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent event) {
- Repeater repeater = ((RepeaterAction)event.getSource()).getRepeater();
- for (int i = repeater.getSize() - 1; i >= 0; i--) {
- Repeater.RepeaterRow row = repeater.getRow(i);
- if (Boolean.TRUE.equals(row.getChild(DeleteRowsActionDefinition.this.selectName).getValue())) {
- repeater.removeRow(i);
- }
- }
+ // and actually delete the rows
+ Repeater repeater = ((RepeaterAction)event.getSource()).getRepeater();
+ for (int i = repeater.getSize() - 1; i >= 0; i--) {
+ Repeater.RepeaterRow row = repeater.getRow(i);
+ if (Boolean.TRUE.equals(row.getChild(DeleteRowsActionDefinition.this.selectName).getValue())) {
+ repeater.removeRow(i);
}
- });
+ }
}
}
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Repeater.java
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Repeater.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Repeater.java Mon Sep 27 13:47:00 2004
@@ -39,7 +39,7 @@
* <p>Using the methods {@link #getSize()} and {@link #getWidget(int, java.lang.String)}
* you can access all of the repeated widget instances.
*
- * @version $Id: Repeater.java,v 1.14 2004/05/07 20:54:21 mpo Exp $
+ * @version $Id$
*/
public class Repeater extends AbstractWidget
//implements ContainerWidget
@@ -53,7 +53,7 @@
removeRows();
}
- protected WidgetDefinition getDefinition() {
+ public WidgetDefinition getDefinition() {
return definition;
}
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinitionBuilder.java
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinitionBuilder.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinitionBuilder.java Mon Sep 27 13:47:00 2004
@@ -17,6 +17,7 @@
import java.util.Iterator;
+import org.apache.cocoon.forms.Constants;
import org.apache.cocoon.forms.event.ActionListener;
import org.apache.cocoon.forms.util.DomHelper;
import org.w3c.dom.Element;
@@ -49,7 +50,14 @@
definition.setActionCommand(actionCommand);
- Iterator iter = buildEventListeners(widgetElement, "on-activate", ActionListener.class).iterator();
+ // Warn of the mis-named 'on-action' that existed initially
+ Element buggyOnActivate = DomHelper.getChildElement(widgetElement, Constants.DEFINITION_NS, "on-activate", false);
+ if (buggyOnActivate != null) {
+ throw new Exception("Use 'on-action' instead of 'on-activate' on row-action at " +
+ DomHelper.getLocation(buggyOnActivate));
+ }
+
+ Iterator iter = buildEventListeners(widgetElement, "on-action", ActionListener.class).iterator();
while (iter.hasNext()) {
definition.addActionListener((ActionListener)iter.next());
}
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RowActionDefinition.java
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RowActionDefinition.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RowActionDefinition.java Mon Sep 27 13:47:00 2004
@@ -21,7 +21,7 @@
/**
*
* @author <a href="http://www.apache.org/~sylvain/">Sylvain Wallez</a>
- * @version CVS $Id: RowActionDefinition.java,v 1.1 2004/03/09 10:33:50 reinhard Exp $
+ * @version CVS $Id$
*/
public class RowActionDefinition extends ActionDefinition {
@@ -29,19 +29,32 @@
return new RowAction(this);
}
+ /**
+ * Deletes the row containing this action. Action listeners, if any, are called <em>before</em>
+ * the row is deleted.
+ */
public static class DeleteRowDefinition extends RowActionDefinition {
- public DeleteRowDefinition() {
- super.addActionListener(new ActionListener() {
-
- public void actionPerformed(ActionEvent event) {
- Repeater.RepeaterRow row = Repeater.getParentRow(event.getSourceWidget());
- Repeater repeater = (Repeater)row.getParent();
- repeater.removeRow(repeater.indexOf(row));
- }
- });
+
+ public boolean hasActionListeners() {
+ // We always want to be notified
+ return true;
+ }
+
+ public void fireActionEvent(ActionEvent event) {
+ // Call event listeners, if any (the row still exists)
+ super.fireActionEvent(event);
+
+ // and delete the row
+ Repeater.RepeaterRow row = Repeater.getParentRow(event.getSourceWidget());
+ Repeater repeater = (Repeater)row.getParent();
+ repeater.removeRow(repeater.indexOf(row));
}
}
+ /**
+ * Moves up the row containing this action. Action listeners, if any, are called <em>after</em>
+ * the row has been moved.
+ */
public static class MoveUpDefinition extends RowActionDefinition {
public MoveUpDefinition() {
super.addActionListener(new ActionListener() {
@@ -56,6 +69,10 @@
}
}
+ /**
+ * Moves up the row containing this action. Action listeners, if any, are called <em>after</em>
+ * the row has been moved.
+ */
public static class MoveDownDefinition extends RowActionDefinition {
public MoveDownDefinition() {
super.addActionListener(new ActionListener() {
@@ -70,6 +87,10 @@
}
}
+ /**
+ * Adds a row after the one containing this action. Action listeners, if any, are called <em>after</em>
+ * the new row has been created.
+ */
public static class AddAfterDefinition extends RowActionDefinition {
public AddAfterDefinition() {
super.addActionListener(new ActionListener() {
@@ -82,6 +103,4 @@
});
}
}
-
-
}
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RowActionDefinitionBuilder.java
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RowActionDefinitionBuilder.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RowActionDefinitionBuilder.java Mon Sep 27 13:47:00 2004
@@ -17,6 +17,7 @@
import java.util.Iterator;
+import org.apache.cocoon.forms.Constants;
import org.apache.cocoon.forms.event.ActionListener;
import org.apache.cocoon.forms.util.DomHelper;
import org.w3c.dom.Element;
@@ -37,7 +38,14 @@
definition.setActionCommand(actionCommand);
- Iterator iter = buildEventListeners(widgetElement, "on-activate", ActionListener.class).iterator();
+ // Warn of the mis-named 'on-action' that existed initially
+ Element buggyOnActivate = DomHelper.getChildElement(widgetElement, Constants.DEFINITION_NS, "on-activate", false);
+ if (buggyOnActivate != null) {
+ throw new Exception("Use 'on-action' instead of 'on-activate' on row-action at " +
+ DomHelper.getLocation(buggyOnActivate));
+ }
+
+ Iterator iter = buildEventListeners(widgetElement, "on-action", ActionListener.class).iterator();
while (iter.hasNext()) {
definition.addActionListener((ActionListener)iter.next());
}
Modified: cocoon/branches/BRANCH_2_1_X/src/documentation/xdocs/userdocs/forms/widget_repeater_action.xml
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/documentation/xdocs/userdocs/forms/widget_repeater_action.xml (original)
+++ cocoon/branches/BRANCH_2_1_X/src/documentation/xdocs/userdocs/forms/widget_repeater_action.xml Mon Sep 27 13:47:00 2004
@@ -36,9 +36,9 @@
<fd:label>...</fd:label>
<fd:help>...</fd:help>
<fd:hint>...</fd:hint>
- <fd:on-activate>
+ <fd:on-action>
...
- </fd:on-activate>
+ </fd:on-action>
</fd:repeater-action>]]></source>
<p>The <strong>action-command</strong> attribute should have either
@@ -56,10 +56,13 @@
returns a boolean) that is part of the repeater and used to mark
the rows to be deleted.</p>
- <p><strong>fd:on-activate</strong> allows additional event handlers
+ <p><strong>fd:on-action</strong> allows additional event handlers
to be defined, see also <link href="eventhandling.html">Event Handling</link>. The interface to be
implemented for Java event listeners is <code>org.apache.cocoon.forms.event.ActionListener</code>.
- The WidgetEvent subclass is <code>org.apache.cocoon.forms.event.ActionEvent</code>.</p>
+ The WidgetEvent subclass is <code>org.apache.cocoon.forms.event.ActionEvent</code>.
+ The event handlers are called <em>after</em> the action is performed except for the
+ <code>delete-rows</code> action where event handlers are called <em>before</em> the
+ selected rows are deleted.</p>
</s1>
</body>
</document>
Modified: cocoon/branches/BRANCH_2_1_X/src/documentation/xdocs/userdocs/forms/widget_row_action.xml
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/documentation/xdocs/userdocs/forms/widget_row_action.xml (original)
+++ cocoon/branches/BRANCH_2_1_X/src/documentation/xdocs/userdocs/forms/widget_row_action.xml Mon Sep 27 13:47:00 2004
@@ -37,19 +37,22 @@
<fd:label>...</fd:label>
<fd:help>...</fd:help>
<fd:hint>...</fd:hint>
- <fd:on-activate>
+ <fd:on-action>
...
- </fd:on-activate>
+ </fd:on-action>
</fd:row-action>]]></source>
<p>The <strong>action-command</strong> attribute should have either the
value <code>add-after</code>, <code>delete</code>, <code>move-up</code>
or <code>move-down</code>.</p>
- <p><strong>fd:on-activate</strong> allows additional event handlers to
+ <p><strong>fd:on-action</strong> allows additional event handlers to
be defined, see also <link href="eventhandling.html">Event Handling</link>. The interface to be implemented
for Java event listeners is <code>org.apache.cocoon.forms.event.ActionListener</code>.
- The WidgetEvent subclass is <code>org.apache.cocoon.forms.event.ActionEvent</code>.</p>
+ The WidgetEvent subclass is <code>org.apache.cocoon.forms.event.ActionEvent</code>.
+ The event handlers are called <em>after</em> the action is performed except for the
+ <code>delete</code> row action where event handlers are called <em>before</em> the
+ row is deleted.</p>
<p>Where all you want to do is submit a specific row on a repeater,
simply add a fd:submit element to the widgets for the repeater.</p>
Modified: cocoon/branches/BRANCH_2_1_X/status.xml
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/status.xml (original)
+++ cocoon/branches/BRANCH_2_1_X/status.xml Mon Sep 27 13:47:00 2004
@@ -34,7 +34,7 @@
version CDATA #REQUIRED
date CDATA #REQUIRED
>
-<!ELEMENT action (#PCDATA | link | br | code | ul)*>
+<!ELEMENT action (#PCDATA | link | br | code | ul | strong)*>
<!ATTLIST action
context (build | code | docs) #IMPLIED
assigned-to CDATA #IMPLIED
@@ -46,6 +46,7 @@
>
<!ELEMENT code (#PCDATA)>
<!ELEMENT br EMPTY>
+<!ELEMENT strong (#PCDATA)>
<!ELEMENT link (#PCDATA)>
<!ATTLIST link
href CDATA #REQUIRED
@@ -204,6 +205,11 @@
<changes>
<release version="@version@" date="@date@">
+ <action dev="SW" type="fix">
+ Forms block: rename <code>fd:on-activate</code> to <code>fd:on-action</code> on
+ <code>fd:row-action</code> and <code>fd:repeater-action</code> for consistency
+ with <code>fd:action</code> and <code>fd:submit</code>.
+ </action>
<action dev="CZ" type="update">
Cache the mime-type of readers and serializers.
</action>