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 2005/10/21 10:52:58 UTC
svn commit: r327125 - in
/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms: formmodel/ util/
Author: sylvain
Date: Fri Oct 21 01:52:51 2005
New Revision: 327125
URL: http://svn.apache.org/viewcvs?rev=327125&view=rev
Log:
Solidify Collection wrappers, code cleanup
Modified:
cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/FieldDefinitionBuilder.java
cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMap.java
cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMapDefinition.java
cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMapDefinitionBuilder.java
cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinition.java
cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/ContainerWidgetAsMap.java
cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/RepeaterAsList.java
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/FieldDefinitionBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/FieldDefinitionBuilder.java?rev=327125&r1=327124&r2=327125&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/FieldDefinitionBuilder.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/FieldDefinitionBuilder.java Fri Oct 21 01:52:51 2005
@@ -15,7 +15,6 @@
*/
package org.apache.cocoon.forms.formmodel;
-import org.apache.cocoon.forms.FormsConstants;
import org.apache.cocoon.forms.datatype.SelectionList;
import org.apache.cocoon.forms.util.DomHelper;
import org.w3c.dom.Element;
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMap.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMap.java?rev=327125&r1=327124&r2=327125&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMap.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMap.java Fri Oct 21 01:52:51 2005
@@ -28,7 +28,8 @@
* The image's URI can be set or get, or bind via the binding framework, mouse coordinates
* can be either retrieved from the ImageMapEvent triggered or from the widget itself.
*
- * @author Luca Morandini
+ * @version $Id$
+ * @since 2.1.8
*/
public class ImageMap extends AbstractWidget implements ActionListenerEnabled {
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMapDefinition.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMapDefinition.java?rev=327125&r1=327124&r2=327125&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMapDefinition.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMapDefinition.java Fri Oct 21 01:52:51 2005
@@ -23,7 +23,8 @@
* The {@link WidgetDefinition} part of an ImageMap widget, see {@link ImageMap}
* for more information.
*
- * @author Luca Morandini
+ * @version $Id$
+ * @since 2.1.8
*/
public class ImageMapDefinition extends AbstractWidgetDefinition {
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMapDefinitionBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMapDefinitionBuilder.java?rev=327125&r1=327124&r2=327125&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMapDefinitionBuilder.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImageMapDefinitionBuilder.java Fri Oct 21 01:52:51 2005
@@ -25,7 +25,8 @@
/**
* Builds {@link ImageMapDefinition}s.
*
- * @author Luca Morandini
+ * @version $Id$
+ * @since 2.1.8
*/
public class ImageMapDefinitionBuilder extends AbstractWidgetDefinitionBuilder {
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinition.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinition.java?rev=327125&r1=327124&r2=327125&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinition.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinition.java Fri Oct 21 01:52:51 2005
@@ -15,7 +15,6 @@
*/
package org.apache.cocoon.forms.formmodel;
-import org.apache.cocoon.forms.FormContext;
import org.apache.cocoon.forms.event.ActionEvent;
import org.apache.cocoon.forms.event.ActionListener;
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/ContainerWidgetAsMap.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/ContainerWidgetAsMap.java?rev=327125&r1=327124&r2=327125&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/ContainerWidgetAsMap.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/ContainerWidgetAsMap.java Fri Oct 21 01:52:51 2005
@@ -24,6 +24,7 @@
import java.util.Set;
import org.apache.cocoon.forms.formmodel.AbstractContainerWidget;
+import org.apache.cocoon.forms.formmodel.ContainerWidget;
import org.apache.cocoon.forms.formmodel.Repeater;
import org.apache.cocoon.forms.formmodel.Widget;
import org.apache.commons.collections.iterators.AbstractIteratorDecorator;
@@ -35,6 +36,10 @@
* The returned map is non-modifiable, except using the <code>put()</code> method, which much
* refer to an existing child widget, and <code>putAll(Map)</code> that will silently ignore keys
* that don't refer to existing child widgets.
+ * <p>
+ * Also, this map accepts getting and setting values for keys that correspond to value-less widgets
+ * such as {@link org.apache.cocoon.forms.formmodel.Action}. The result in that case is always
+ * <code>null</code>. This is to allow global retrieving or filling of the map values.
*
* @since 2.1.8
* @version $Id$
@@ -67,6 +72,26 @@
}
/**
+ * Get the container widget that is wrapped by this <code>Map</code>.
+ *
+ * @return the wrapped {@link ContainerWidget}
+ */
+ public ContainerWidget getWidget() {
+ return this.container;
+ }
+
+ /**
+ * Get a widget relative to the container wrapped by this <code>Map</code>
+ *
+ * @param path a widget lookup path
+ * @return the widget pointed to by <code>path</code> or <code>null</code> if it doesn't exist.
+ * @see Widget#lookupWidget(String)
+ */
+ public Widget getWidget(String path) {
+ return this.container.lookupWidget(path);
+ }
+
+ /**
* Put a value in a child widget. The value must be compatible with the datatype
* expected by the child widget. In the case of repeaters and containers, this
* datatype is <code>Collection</code> and <code>Map</code> respectively, which
@@ -88,7 +113,7 @@
throw new UnsupportedOperationException(container + " has no child named '" + key + "'");
}
}
-
+
public void putAll(Map map) {
Iterator iter = map.entrySet().iterator();
while(iter.hasNext()) {
@@ -101,7 +126,7 @@
}
}
}
-
+
public Object get(Object key) {
String name = (String)key;
if (lowerCase) name = name.toLowerCase();
@@ -112,17 +137,22 @@
public Set entrySet() {
return new ContainerEntrySet();
}
-
+
private Object asValueOrMap(Widget w) {
if (w instanceof Repeater) {
return new RepeaterAsList((Repeater)w, lowerCase);
} else if (w instanceof AbstractContainerWidget) {
return new ContainerWidgetAsMap((AbstractContainerWidget)w, lowerCase);
} else {
- return w.getValue();
+ try {
+ return w.getValue();
+ } catch (UnsupportedOperationException uoe) {
+ // This widget doesn't hold a value
+ return null;
+ }
}
}
-
+
/**
* Set a widget's value and returns the previous value as required by put().
*/
@@ -145,12 +175,17 @@
result.putAll((Map)value);
return result;
} else {
- Object result = w.getValue();
- w.setValue(value);
- return result;
+ try {
+ Object result = w.getValue();
+ w.setValue(value);
+ return result;
+ } catch (UnsupportedOperationException uoe) {
+ // This widget doesn't hold a value
+ return null;
+ }
}
}
-
+
private class ContainerEntrySet extends AbstractSet {
public Iterator iterator() {
return new ContainerEntryIterator();
@@ -160,7 +195,7 @@
return container.getSize();
}
}
-
+
private class ContainerEntryIterator extends AbstractIteratorDecorator {
public ContainerEntryIterator() {
super(container.getChildren());
@@ -170,7 +205,7 @@
return new ContainerEntry((Widget)super.next());
}
}
-
+
private class ContainerEntry implements Map.Entry {
Widget widget;
public ContainerEntry(Widget w) {
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/RepeaterAsList.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/RepeaterAsList.java?rev=327125&r1=327124&r2=327125&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/RepeaterAsList.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/RepeaterAsList.java Fri Oct 21 01:52:51 2005
@@ -18,7 +18,9 @@
import java.util.AbstractList;
import java.util.Map;
+import org.apache.cocoon.forms.formmodel.AbstractContainerWidget;
import org.apache.cocoon.forms.formmodel.Repeater;
+import org.apache.cocoon.forms.formmodel.Widget;
/**
* A <code>List</code> view of a {@link Repeater}, each element of the list being a <code>Map</code>
@@ -58,6 +60,26 @@
*/
public RepeaterAsList(Repeater repeater) {
this(repeater, true);
+ }
+
+ /**
+ * Get the repeater widget that is wrapped by this <code>List</code>.
+ *
+ * @return the wrapped {@link Repeater}
+ */
+ public Repeater getWidget() {
+ return this.repeater;
+ }
+
+ /**
+ * Get a widget relative to the repeater wrapped by this <code>List</code>
+ *
+ * @param path a widget lookup path
+ * @return the widget pointed to by <code>path</code> or <code>null</code> if it doesn't exist.
+ * @see Widget#lookupWidget(String)
+ */
+ public Widget getWidget(String path) {
+ return this.repeater.lookupWidget(path);
}
public Object get(int index) {