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) {