You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by si...@apache.org on 2007/02/12 23:21:54 UTC

svn commit: r506699 - in /cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main: java/org/apache/cocoon/forms/binding/ resources/META-INF/cocoon/avalon/

Author: simoneg
Date: Mon Feb 12 14:21:53 2007
New Revision: 506699

URL: http://svn.apache.org/viewvc?view=rev&rev=506699
Log:
A simple binding for trees

Added:
    cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/TreeModelJXPath.java
    cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/TreeModelJXPathBuilder.java
Modified:
    cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/resources/META-INF/cocoon/avalon/cocoon-forms.xconf

Added: cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/TreeModelJXPath.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/TreeModelJXPath.java?view=auto&rev=506699
==============================================================================
--- cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/TreeModelJXPath.java (added)
+++ cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/TreeModelJXPath.java Mon Feb 12 14:21:53 2007
@@ -0,0 +1,59 @@
+package org.apache.cocoon.forms.binding;
+
+import org.apache.cocoon.forms.formmodel.Widget;
+import org.apache.cocoon.forms.formmodel.tree.Tree;
+import org.apache.cocoon.forms.formmodel.tree.TreeModel;
+import org.apache.commons.jxpath.JXPathContext;
+
+public class TreeModelJXPath extends JXPathBindingBase {
+
+    /**
+     * The xpath expression to the objectModel property
+     */
+    private final String xpath;
+
+    /**
+     * The id of the CForms form-widget
+     */
+    private final String fieldId;
+	
+    /**
+     * Constructs FieldJXPathBinding.
+     *
+     * @param convertor may be null
+     */
+    public TreeModelJXPath(JXPathBindingBuilderBase.CommonAttributes commonAtts,
+                              String widgetId,
+                              String xpath) {
+        super(commonAtts);
+        this.fieldId = widgetId;
+        this.xpath = xpath;
+    }
+
+    public String getId() { return fieldId; }
+
+    /**
+     * Actively performs the binding from the ObjectModel wrapped in a jxpath
+     * context to the CForms-form-widget specified in this object.
+     */
+    public void doLoad(Widget frmModel, JXPathContext jxpc) throws BindingException {
+        Widget widget = selectWidget(frmModel, this.fieldId);
+        if (widget == null) {
+            throw new BindingException("The widget with the ID [" + this.fieldId
+                    + "] referenced in the binding does not exist in the form definition.");
+        }
+        if (!(widget instanceof Tree)) throw new BindingException("Widget " + this.fieldId + " is not a Tree!");
+
+        Object value = jxpc.getValue(this.xpath);
+        if (value != null) {
+            if (!(value instanceof TreeModel)) throw new BindingException("Value found in " + this.xpath + " is not a TreeModel, instead it is a " + value.getClass().getName());
+            ((Tree)widget).setModel((TreeModel)value);
+        }
+    }
+
+	public void doSave(Widget frmModel, JXPathContext jxpc)
+			throws BindingException {
+		// Does nothing
+	}
+
+}

Added: cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/TreeModelJXPathBuilder.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/TreeModelJXPathBuilder.java?view=auto&rev=506699
==============================================================================
--- cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/TreeModelJXPathBuilder.java (added)
+++ cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/binding/TreeModelJXPathBuilder.java Mon Feb 12 14:21:53 2007
@@ -0,0 +1,23 @@
+package org.apache.cocoon.forms.binding;
+
+import org.apache.cocoon.forms.binding.JXPathBindingManager.Assistant;
+import org.apache.cocoon.forms.util.DomHelper;
+import org.w3c.dom.Element;
+
+public class TreeModelJXPathBuilder extends JXPathBindingBuilderBase {
+
+	public JXPathBindingBase buildBinding(Element bindingElm, Assistant assistant) throws BindingException {
+        try {
+            CommonAttributes commonAtts = JXPathBindingBuilderBase.getCommonAttributes(bindingElm);
+            String xpath = DomHelper.getAttribute(bindingElm, "path", null);
+            String widgetId = DomHelper.getAttribute(bindingElm, "id", null);
+
+            return new TreeModelJXPath(commonAtts, widgetId, xpath);
+        } catch (BindingException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new BindingException("Error building binding defined at " + DomHelper.getLocation(bindingElm), e);
+        }
+	}
+
+}

Modified: cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/resources/META-INF/cocoon/avalon/cocoon-forms.xconf
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/resources/META-INF/cocoon/avalon/cocoon-forms.xconf?view=diff&rev=506699&r1=506698&r2=506699
==============================================================================
--- cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/resources/META-INF/cocoon/avalon/cocoon-forms.xconf (original)
+++ cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/resources/META-INF/cocoon/avalon/cocoon-forms.xconf Mon Feb 12 14:21:53 2007
@@ -50,6 +50,7 @@
       <binding name="union" src="org.apache.cocoon.forms.binding.UnionJXPathBindingBuilder"/>
       <binding name="expand" src="org.apache.cocoon.forms.binding.ExpandJXPathBindingBuilder"/>
       <binding name="import" src="org.apache.cocoon.forms.binding.ImportJXPathBindingBuilder"/>
+      <binding name="treemodel" src="org.apache.cocoon.forms.binding.TreeModelJXPathBuilder"/>
     </bindings>
   </forms-binding>