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/03/22 11:31:25 UTC
svn commit: r158591 - in
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding:
JXPathBindingBase.java MultiValueJXPathBinding.java
Author: sylvain
Date: Tue Mar 22 02:31:24 2005
New Revision: 158591
URL: http://svn.apache.org/viewcvs?view=rev&rev=158591
Log:
merge DOMFactory and the new support for collections
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBase.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/MultiValueJXPathBinding.java
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBase.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBase.java?view=diff&r1=158590&r2=158591
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBase.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBase.java Tue Mar 22 02:31:24 2005
@@ -15,6 +15,7 @@
*/
package org.apache.cocoon.forms.binding;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -24,7 +25,7 @@
import org.apache.cocoon.forms.formmodel.Widget;
import org.apache.cocoon.util.jxpath.DOMFactory;
import org.apache.commons.jxpath.JXPathContext;
-import org.w3c.dom.Node;
+import org.apache.commons.jxpath.Pointer;
/**
* Provides a base class for hooking up Binding implementations that use the
@@ -244,9 +245,7 @@
if (!(objModel instanceof JXPathContext)) {
jxpc = JXPathContext.newContext(objModel);
jxpc.setLenient(true);
- if (objModel instanceof Node) {
- jxpc.setFactory(new DOMFactory());
- }
+ jxpc.setFactory(new BindingJXPathFactory());
} else {
jxpc = (JXPathContext) objModel;
}
@@ -264,5 +263,37 @@
protected Logger getLogger() {
return logger;
+ }
+
+ /**
+ * JXPath factory that combines the DOMFactory and support for collections.
+ */
+ private static class BindingJXPathFactory extends DOMFactory {
+
+ public boolean createObject(JXPathContext context, Pointer pointer, Object parent, String name, int index) {
+ if (createCollectionItem(context, pointer, parent, name, index)) {
+ return true;
+ } else {
+ return super.createObject(context, pointer, parent, name, index);
+ }
+ }
+
+ private boolean createCollectionItem(JXPathContext context, Pointer pointer, Object parent, String name, int index) {
+ // FIXME: don't clearly understand how this works.
+ // see http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=111148567029114&w=2
+ final Object o = context.getValue(name);
+ if (o == null) {
+ return false;
+ }
+ if (o instanceof Collection) {
+ ((Collection)o).add(null);
+ } else if(o.getClass().isArray()) {
+ // not yet supported
+ return false;
+ } else {
+ return false;
+ }
+ return true;
+ }
}
}
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/MultiValueJXPathBinding.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/MultiValueJXPathBinding.java?view=diff&r1=158590&r2=158591
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/MultiValueJXPathBinding.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/MultiValueJXPathBinding.java Tue Mar 22 02:31:24 2005
@@ -104,24 +104,7 @@
Object[] values = (Object[])widget.getValue();
JXPathContext multiValueContext = jctx.getRelativeContext(jctx.createPath(this.multiValuePath));
- multiValueContext.setFactory( new AbstractFactory() {
- public boolean createObject(JXPathContext context, Pointer pointer,
- Object parent, String name, int index) {
- final Object o = context.getValue(name);
- if( o == null ) {
- return false;
- }
- if( Collection.class.isAssignableFrom( o.getClass() ) ) {
- ((Collection)context.getValue(name)).add(null);
- } else if( o.getClass().isArray() ) {
- // not yet supported
- return false;
- } else {
- return false;
- }
- return true;
- }
- });
+
// Delete all that is already present
multiValueContext.removeAll(this.rowPath);