You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by mp...@apache.org on 2003/12/16 16:05:55 UTC
cvs commit: cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding InsertBeanJXPathBinding.java InsertNodeJXPathBinding.java RepeaterJXPathBindingBuilder.java JXPathBindingBase.java ContextJXPathBindingBuilder.java SetAttributeJXPathBinding.java DeleteNodeJXPathBinding.java ValueJXPathBinding.java JavaScriptJXPathBinding.java JXpathBindingBuilderBase.java ValueJXPathBindingBuilder.java ContextJXPathBinding.java SimpleRepeaterJXPathBindingBuilder.java SimpleRepeaterJXPathBinding.java JavaScriptJXPathBindingBuilder.java AggregateJXPathBinding.java RepeaterJXPathBinding.java SetAttributeJXPathBindingBuilder.java ComposedJXPathBindingBase.java DeleteNodeJXPathBindingBuilder.java InsertNodeJXPathBindingBuilder.java AggregateJXPathBindingBuilder.java InsertBeanJXPathBindingBuilder.java
mpo 2003/12/16 07:05:55
Modified: src/blocks/woody/java/org/apache/cocoon/woody/binding
InsertBeanJXPathBinding.java
InsertNodeJXPathBinding.java
RepeaterJXPathBindingBuilder.java
JXPathBindingBase.java
ContextJXPathBindingBuilder.java
SetAttributeJXPathBinding.java
DeleteNodeJXPathBinding.java
ValueJXPathBinding.java
JavaScriptJXPathBinding.java
JXpathBindingBuilderBase.java
ValueJXPathBindingBuilder.java
ContextJXPathBinding.java
SimpleRepeaterJXPathBindingBuilder.java
SimpleRepeaterJXPathBinding.java
JavaScriptJXPathBindingBuilder.java
AggregateJXPathBinding.java
RepeaterJXPathBinding.java
SetAttributeJXPathBindingBuilder.java
ComposedJXPathBindingBase.java
DeleteNodeJXPathBindingBuilder.java
InsertNodeJXPathBindingBuilder.java
AggregateJXPathBindingBuilder.java
InsertBeanJXPathBindingBuilder.java
Log:
Adding support for @direction on all attributes.
The value of direction should be one of both(default)|load|save and indicates
which binding directions are active for any given binding.
This new attribute replaces the @readonly that was available on some selected
binding implementations, so this changes previously supported semantics.
Reasoning and discussion for this feature are here:
- use cases: http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=107062380411523&w=2
- @direction choice: http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=107105729827081&w=2
Revision Changes Path
1.3 +4 -3 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/InsertBeanJXPathBinding.java
Index: InsertBeanJXPathBinding.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/InsertBeanJXPathBinding.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- InsertBeanJXPathBinding.java 24 Jul 2003 12:39:17 -0000 1.2
+++ InsertBeanJXPathBinding.java 16 Dec 2003 15:05:54 -0000 1.3
@@ -75,7 +75,8 @@
/**
* Constructs InsertBeanJXPathBinding
*/
- public InsertBeanJXPathBinding(String className, String addMethod) {
+ public InsertBeanJXPathBinding(boolean loadEnabled, boolean saveEnabled, String className, String addMethod) {
+ super(loadEnabled, saveEnabled);
this.className = className;
this.addMethodName = addMethod;
}
@@ -83,7 +84,7 @@
/**
* Do-nothing implementation of the interface.
*/
- public void loadFormFromModel(Widget frmModel, JXPathContext jxpc) {
+ public void doLoad(Widget frmModel, JXPathContext jxpc) {
// doesn't do a thing when loading.
}
@@ -93,7 +94,7 @@
* The factory will insert a new instance of the specified bean (classname)
* inside this object into the target objectmodel.
*/
- public void saveFormToModel(Widget frmModel, JXPathContext jxpc) throws BindingException {
+ public void doSave(Widget frmModel, JXPathContext jxpc) throws BindingException {
jxpc.setFactory(new AbstractFactory() {
public boolean createObject(JXPathContext context, Pointer pointer,
Object parent, String name, int index) {
1.3 +4 -3 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/InsertNodeJXPathBinding.java
Index: InsertNodeJXPathBinding.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/InsertNodeJXPathBinding.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- InsertNodeJXPathBinding.java 24 Jul 2003 12:39:17 -0000 1.2
+++ InsertNodeJXPathBinding.java 16 Dec 2003 15:05:54 -0000 1.3
@@ -75,14 +75,15 @@
/**
* Constructs InsertNodeJXPathBinding
*/
- public InsertNodeJXPathBinding(DocumentFragment domTemplate) {
+ public InsertNodeJXPathBinding(boolean loadEnabled, boolean saveEnabled, DocumentFragment domTemplate) {
+ super(loadEnabled, saveEnabled);
this.template = domTemplate;
}
/**
* Do-nothing implementation of the interface.
*/
- public void loadFormFromModel(Widget frmModel, JXPathContext jxpc) {
+ public void doLoad(Widget frmModel, JXPathContext jxpc) {
// doesn't do a thing when loading.
}
@@ -92,7 +93,7 @@
* The factory will inserts a clone of the 'template' DocumentFragment
* inside this object into the target objectmodel.
*/
- public void saveFormToModel(Widget frmModel, JXPathContext jxpc) {
+ public void doSave(Widget frmModel, JXPathContext jxpc) {
jxpc.setFactory(new AbstractFactory() {
public boolean createObject(JXPathContext context, Pointer pointer,
1.7 +3 -0 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/RepeaterJXPathBindingBuilder.java
Index: RepeaterJXPathBindingBuilder.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/RepeaterJXPathBindingBuilder.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- RepeaterJXPathBindingBuilder.java 5 Dec 2003 14:06:23 -0000 1.6
+++ RepeaterJXPathBindingBuilder.java 16 Dec 2003 15:05:54 -0000 1.7
@@ -102,6 +102,8 @@
JXPathBindingManager.Assistant assistant) throws BindingException {
try {
+ DirectionAttributes directionAtts = JXpathBindingBuilderBase.getDirectionAttributes(bindingElm);
+
String repeaterId = DomHelper.getAttribute(bindingElm, "id");
String parentPath =
DomHelper.getAttribute(bindingElm, "parent-path");
@@ -157,6 +159,7 @@
RepeaterJXPathBinding repeaterBinding =
new RepeaterJXPathBinding(
+ directionAtts.loadEnabled, directionAtts.saveEnabled,
repeaterId, parentPath, rowPath, rowPathForInsert,
uniqueRowId, uniqueRowIdPath,
convertor, convertorLocale,
1.5 +53 -5 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/JXPathBindingBase.java
Index: JXPathBindingBase.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/JXPathBindingBase.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- JXPathBindingBase.java 29 Oct 2003 14:18:16 -0000 1.4
+++ JXPathBindingBase.java 16 Dec 2003 15:05:54 -0000 1.5
@@ -52,8 +52,10 @@
import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.avalon.framework.logger.Logger;
+import org.apache.cocoon.util.jxpath.DOMFactory;
import org.apache.cocoon.woody.formmodel.Widget;
import org.apache.commons.jxpath.JXPathContext;
+import org.w3c.dom.Node;
/**
* Provides a base class for hooking up Binding implementations that use the
@@ -66,13 +68,44 @@
* Avalon Logger to use in all subclasses.
*/
private Logger logger;
+
+ /**
+ * Flag indicating if the nested load-binding on this level should be performed.
+ */
+ private final boolean loadEnabled;
+
+ /**
+ * Flag indicating if the nested save-binding on this level should be performed.
+ */
+ private final boolean saveEnabled;
+
+
+ private JXPathBindingBase() {
+ this(true, true);
+ }
+
+ protected JXPathBindingBase(boolean loadEnabled, boolean saveEnabled) {
+ this.loadEnabled = loadEnabled;
+ this.saveEnabled = saveEnabled;
+ }
+
+ /**
+ * Performs the actual load binding regardless of the flag {@see #loadEnabled}.
+ * Abstract method that subclasses need to implement for specific activity.
+ */
+ public abstract void doLoad(Widget frmModel, JXPathContext jxpc);
/**
* Redefines the Binding action as working on a JXPathContext Type rather
* then on generic objects.
- * Abstract method that subclasses need to implement for specific activity.
+ * Executes the actual loading {@see #doLoad(Widget, JXPathContext)}
+ * depending on the value of {@see #loadEnabled}
*/
- public abstract void loadFormFromModel(Widget frmModel, JXPathContext jxpc);
+ public final void loadFormFromModel(Widget frmModel, JXPathContext jxpc) {
+ if (this.loadEnabled) {
+ doLoad(frmModel, jxpc);
+ }
+ }
/**
* Hooks up with the more generic Binding of any objectModel by wrapping
@@ -87,6 +120,10 @@
JXPathContext jxpc;
if (!(objModel instanceof JXPathContext)) {
jxpc = JXPathContext.newContext(objModel);
+
+ if (objModel instanceof Node) {
+ jxpc.setFactory(new DOMFactory());
+ }
} else {
jxpc = (JXPathContext) objModel;
}
@@ -94,12 +131,23 @@
}
/**
+ * Performs the actual save binding regardless of the flag {@see #saveEnabled}.
+ * Abstract method that subclasses need to implement for specific activity.
+ */
+ public abstract void doSave(Widget frmModel, JXPathContext jxpc) throws BindingException;
+
+ /**
* Redefines the Binding action as working on a JXPathContext Type rather
* then on generic objects.
- * Abstract method that subclasses need to implement for specific activity.
+ * Executes the actual saving {@see #doSave(Widget, JXPathContext)}
+ * depending on the value of {@see #saveEnabled}
*/
- public abstract void saveFormToModel(Widget frmModel, JXPathContext jxpc) throws BindingException;
-
+ public final void saveFormToModel(Widget frmModel, JXPathContext jxpc) throws BindingException{
+ if (this.saveEnabled) {
+ doSave(frmModel, jxpc);
+ }
+ }
+
/**
* Hooks up with the more generic Binding of any objectModel by wrapping
* it up in a JXPathContext object and then transfering control over to
1.3 +2 -1 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ContextJXPathBindingBuilder.java
Index: ContextJXPathBindingBuilder.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ContextJXPathBindingBuilder.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ContextJXPathBindingBuilder.java 24 Jul 2003 12:39:17 -0000 1.2
+++ ContextJXPathBindingBuilder.java 16 Dec 2003 15:05:54 -0000 1.3
@@ -74,11 +74,12 @@
JXPathBindingManager.Assistant assistant) throws BindingException {
try {
+ DirectionAttributes directionAtts = JXpathBindingBuilderBase.getDirectionAttributes(bindingElm);
String xpath = DomHelper.getAttribute(bindingElm, "path");
JXPathBindingBase[] childBindings = assistant.makeChildBindings(bindingElm);
- ContextJXPathBinding contextBinding = new ContextJXPathBinding(xpath, childBindings);
+ ContextJXPathBinding contextBinding = new ContextJXPathBinding(directionAtts.loadEnabled, directionAtts.saveEnabled, xpath, childBindings);
return contextBinding;
} catch (BindingException e) {
throw e;
1.3 +4 -3 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/SetAttributeJXPathBinding.java
Index: SetAttributeJXPathBinding.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/SetAttributeJXPathBinding.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SetAttributeJXPathBinding.java 24 Jul 2003 12:39:17 -0000 1.2
+++ SetAttributeJXPathBinding.java 16 Dec 2003 15:05:54 -0000 1.3
@@ -69,7 +69,8 @@
/**
* Constructs SetAttributeJXPathBinding
*/
- public SetAttributeJXPathBinding(String attName, String attValue) {
+ public SetAttributeJXPathBinding(boolean loadEnabled, boolean saveEnabled, String attName, String attValue) {
+ super(loadEnabled, saveEnabled);
this.name = attName;
this.value = attValue;
}
@@ -77,14 +78,14 @@
/**
* Do-Nothing implementation.
*/
- public void loadFormFromModel(Widget frmModel, JXPathContext jxpc) {
+ public void doLoad(Widget frmModel, JXPathContext jxpc) {
//this does nothing in the loading of things
}
/**
* Sets the attribute value on the passed JXPathContext
*/
- public void saveFormToModel(Widget frmModel, JXPathContext jxpc) {
+ public void doSave(Widget frmModel, JXPathContext jxpc) {
jxpc.setValue("@" + this.name, this.value);
if (getLogger().isDebugEnabled())
getLogger().debug("done saving " + toString());
1.2 +6 -2 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/DeleteNodeJXPathBinding.java
Index: DeleteNodeJXPathBinding.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/DeleteNodeJXPathBinding.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DeleteNodeJXPathBinding.java 22 Jul 2003 11:52:30 -0000 1.1
+++ DeleteNodeJXPathBinding.java 16 Dec 2003 15:05:54 -0000 1.2
@@ -63,8 +63,12 @@
* </ol>
*/
public class DeleteNodeJXPathBinding extends JXPathBindingBase {
+
+ public DeleteNodeJXPathBinding(boolean loadEnabled, boolean saveEnabled) {
+ super(loadEnabled, saveEnabled);
+ }
- public void loadFormFromModel(Widget frmModel, JXPathContext jxpc) {
+ public void doLoad(Widget frmModel, JXPathContext jxpc) {
// doesn't do a thing when loading.
}
@@ -72,7 +76,7 @@
/**
* Removes the current context-bean from the jxpath context.
*/
- public void saveFormToModel(Widget frmModel, JXPathContext jxpc) {
+ public void doSave(Widget frmModel, JXPathContext jxpc) {
// get rid of the contextbean
jxpc.removePath(".");
}
1.7 +42 -49 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ValueJXPathBinding.java
Index: ValueJXPathBinding.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ValueJXPathBinding.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ValueJXPathBinding.java 18 Nov 2003 21:39:17 -0000 1.6
+++ ValueJXPathBinding.java 16 Dec 2003 15:05:54 -0000 1.7
@@ -79,11 +79,6 @@
/**
* Flag indicating if the objectModel-property can be altered or not
*/
- private final boolean readonly;
-
- /**
- * Flag indicating if the objectModel-property can be altered or not
- */
private final JXPathBindingBase updateBinding;
/**
@@ -103,12 +98,12 @@
*
* @param convertor may be null
*/
- public ValueJXPathBinding(String widgetId, String xpath, boolean readonly, JXPathBindingBase[] updateBindings,
+ public ValueJXPathBinding(boolean loadEnabled, boolean saveEnabled, String widgetId, String xpath, JXPathBindingBase[] updateBindings,
Convertor convertor, Locale convertorLocale) {
+ super(loadEnabled, saveEnabled);
this.fieldId = widgetId;
this.xpath = xpath;
- this.readonly = readonly;
- this.updateBinding = new ComposedJXPathBindingBase(updateBindings);
+ this.updateBinding = new ComposedJXPathBindingBase(true, true, updateBindings);
this.convertor = convertor;
this.convertorLocale = convertorLocale;
}
@@ -117,7 +112,7 @@
* Actively performs the binding from the ObjectModel wrapped in a jxpath
* context to the Woody-form-widget specified in this object.
*/
- public void loadFormFromModel(Widget frmModel, JXPathContext jxpc) {
+ public void doLoad(Widget frmModel, JXPathContext jxpc) {
try {
Widget widget = frmModel.getWidget(this.fieldId);
Object value = jxpc.getValue(this.xpath);
@@ -143,53 +138,51 @@
* Actively performs the binding from the Woody-form to the ObjectModel
* wrapped in a jxpath context
*/
- public void saveFormToModel(Widget frmModel, JXPathContext jxpc) throws BindingException {
- if (!this.readonly) {
- try {
- Widget widget = frmModel.getWidget(this.fieldId);
- Object value = widget.getValue();
- if (value != null && convertor != null) {
- value = convertor.convertToString(value, convertorLocale, null);
- }
+ public void doSave(Widget frmModel, JXPathContext jxpc) throws BindingException {
+ try {
+ Widget widget = frmModel.getWidget(this.fieldId);
+ Object value = widget.getValue();
+ if (value != null && convertor != null) {
+ value = convertor.convertToString(value, convertorLocale, null);
+ }
- Object oldValue = jxpc.getValue(this.xpath);
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("value= " + value + "-- oldvalue=" + oldValue);
- }
+ Object oldValue = jxpc.getValue(this.xpath);
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("value= " + value + "-- oldvalue=" + oldValue);
+ }
- boolean update = false;
+ boolean update = false;
- if ((value == null && oldValue != null) || value != null && !value.equals(oldValue)) {
- // first update the value itself
- jxpc.createPathAndSetValue(this.xpath, value);
-
- // now perform any other bindings that need to be performed when the value is updated
- JXPathContext subContext = null;
- try {
- subContext = jxpc.getRelativeContext(jxpc.getPointer(this.xpath));
- } catch (JXPathException e) {
- // if the value has been set to null and the underlying model is a bean, then
- // JXPath will not be able to create a relative context
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("(Ignorable) problem binding field " + widget.getFullyQualifiedId(), e);
- }
- }
- if (subContext != null) {
- this.updateBinding.saveFormToModel(frmModel, subContext);
+ if ((value == null && oldValue != null) || value != null && !value.equals(oldValue)) {
+ // first update the value itself
+ jxpc.createPathAndSetValue(this.xpath, value);
+
+ // now perform any other bindings that need to be performed when the value is updated
+ JXPathContext subContext = null;
+ try {
+ subContext = jxpc.getRelativeContext(jxpc.getPointer(this.xpath));
+ } catch (JXPathException e) {
+ // if the value has been set to null and the underlying model is a bean, then
+ // JXPath will not be able to create a relative context
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("(Ignorable) problem binding field " + widget.getFullyQualifiedId(), e);
}
-
- update = true;
}
-
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("done saving " + toString() + " -- value= " + value + " -- on-update == " + update);
+ if (subContext != null) {
+ this.updateBinding.saveFormToModel(frmModel, subContext);
}
- } catch (Exception e) {
- throw new BindingException("Problem binding field " + this.fieldId +
- " (parent = \"" + frmModel.getFullyQualifiedId() + "\") to xpath " +
- this.xpath + " (context xpath = \"" + jxpc.getContextPointer().asPath() + "\")",
- e);
+
+ update = true;
+ }
+
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("done saving " + toString() + " -- value= " + value + " -- on-update == " + update);
}
+ } catch (Exception e) {
+ throw new BindingException("Problem binding field " + this.fieldId +
+ " (parent = \"" + frmModel.getFullyQualifiedId() + "\") to xpath " +
+ this.xpath + " (context xpath = \"" + jxpc.getContextPointer().asPath() + "\")",
+ e);
}
}
1.3 +5 -4 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/JavaScriptJXPathBinding.java
Index: JavaScriptJXPathBinding.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/JavaScriptJXPathBinding.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- JavaScriptJXPathBinding.java 3 Nov 2003 17:05:02 -0000 1.2
+++ JavaScriptJXPathBinding.java 16 Dec 2003 15:05:54 -0000 1.3
@@ -75,14 +75,15 @@
private final Script loadScript;
private final Script saveScript;
- public JavaScriptJXPathBinding(String id, String path, Script loadScript, Script saveScript) {
+ public JavaScriptJXPathBinding(boolean loadEnabled, boolean saveEnabled, String id, String path, Script loadScript, Script saveScript) {
+ super(loadEnabled && (loadScript != null), saveEnabled && (saveScript != null));
this.id = id;
this.path = path;
this.loadScript = loadScript;
this.saveScript = saveScript;
}
- public void loadFormFromModel(Widget frmModel, JXPathContext jctx) {
+ public void doLoad(Widget frmModel, JXPathContext jctx) {
if (this.loadScript == null) return;
@@ -113,7 +114,7 @@
}
}
- public void saveFormToModel(Widget frmModel, JXPathContext jctx) throws BindingException {
+ public void doSave(Widget frmModel, JXPathContext jctx) throws BindingException {
if (this.saveScript == null) return;
Widget widget = frmModel.getWidget(this.id);
1.4 +69 -1 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/JXpathBindingBuilderBase.java
Index: JXpathBindingBuilderBase.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/JXpathBindingBuilderBase.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- JXpathBindingBuilderBase.java 30 Jul 2003 15:17:43 -0000 1.3
+++ JXpathBindingBuilderBase.java 16 Dec 2003 15:05:54 -0000 1.4
@@ -52,14 +52,24 @@
import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.avalon.framework.logger.Logger;
+import org.apache.cocoon.woody.util.DomHelper;
import org.w3c.dom.Element;
/**
- * Abstract base class enabling the logging.
+ * Abstract base class enabling logging and supporting the intrepretation of
+ * common configuration settings on all specific implementations of
+ * {@see org.apache.cocoon.woody.binding.JXPathBindingBase}.
+ *
+ * Common supported configurations:
+ * <ul>
+ * <li>Attribute direction="load|save|both": {@see #getDirectionAttributes(Element)}</li>
+ * </ul>
*/
public abstract class JXpathBindingBuilderBase implements LogEnabled {
private Logger logger;
+ private static final int LOAD_DIRECTION = 0;
+ private static final int SAVE_DIRECTION = 1;
/**
* Receives the Avalon logger to use.
@@ -90,4 +100,62 @@
Element bindingElm,
JXPathBindingManager.Assistant assistant) throws BindingException;
+ /**
+ * Helper method for interpreting the direction="" attribute which is supported
+ * on each of the Bindings. Direction can hold one of the following values:
+ * <ol><li><code>load</code>: This binding will only load.</li>
+ * <li><code>save</code>: This binding will only save.</li>
+ * <li><code>both</code>: This binding will perform both operations.</li>
+ * </ol>
+ * @param bindingElm
+ * @return an instance of DirectionAttributes
+ * @throws BindingException
+ */
+ static DirectionAttributes getDirectionAttributes(Element bindingElm) throws BindingException {
+ try {
+ String direction = DomHelper.getAttribute(bindingElm, "direction", "both");
+ return new DirectionAttributes(direction);
+ } catch (BindingException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new BindingException("Error building binding defined at " + DomHelper.getLocation(bindingElm), e);
+ }
+ }
+
+ /**
+ * DirectionAttributes is a simple helper class for holding the distinct data
+ * member fields indicating the activity of the sepearate load and save
+ * actions of a given binding.
+ */
+ static class DirectionAttributes{
+ final boolean loadEnabled;
+ final boolean saveEnabled;
+
+ DirectionAttributes(String direction){
+ this(isLoadEnabled(direction), isSaveEnabled(direction));
+ }
+
+ DirectionAttributes(boolean loadEnabled, boolean saveEnabled){
+ this.loadEnabled = loadEnabled;
+ this.saveEnabled = saveEnabled;
+ }
+
+ /**
+ * Interprets the value of the direction attribute into activity of the load action.
+ * @param direction
+ * @return true if direction is either set to "both" or "load"
+ */
+ private static boolean isLoadEnabled(String direction) {
+ return "both".equals(direction) || "load".equals(direction);
+ }
+
+ /**
+ * Interprets the value of the direction attribute into activity of the save action.
+ * @param direction
+ * @return true if direction is either set to "both" or "save"
+ */
+ private static boolean isSaveEnabled(String direction) {
+ return "both".equals(direction) || "save".equals(direction);
+ }
+ }
}
1.3 +3 -2 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ValueJXPathBindingBuilder.java
Index: ValueJXPathBindingBuilder.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ValueJXPathBindingBuilder.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ValueJXPathBindingBuilder.java 29 Oct 2003 14:18:16 -0000 1.2
+++ ValueJXPathBindingBuilder.java 16 Dec 2003 15:05:54 -0000 1.3
@@ -82,7 +82,7 @@
public JXPathBindingBase buildBinding(Element bindingElm, JXPathBindingManager.Assistant assistant) throws BindingException {
try {
- boolean readonly = DomHelper.getAttributeAsBoolean(bindingElm, "readonly", false);
+ DirectionAttributes directionAtts = JXpathBindingBuilderBase.getDirectionAttributes(bindingElm);
String xpath = DomHelper.getAttribute(bindingElm, "path");
String widgetId = DomHelper.getAttribute(bindingElm, "id");
@@ -104,7 +104,8 @@
}
ValueJXPathBinding fieldBinding =
- new ValueJXPathBinding(widgetId, xpath, readonly, updateBindings, convertor, convertorLocale);
+ new ValueJXPathBinding(directionAtts.loadEnabled, directionAtts.saveEnabled,
+ widgetId, xpath, updateBindings, convertor, convertorLocale);
return fieldBinding;
} catch (BindingException e) {
1.5 +6 -6 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ContextJXPathBinding.java
Index: ContextJXPathBinding.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ContextJXPathBinding.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ContextJXPathBinding.java 18 Nov 2003 21:39:17 -0000 1.4
+++ ContextJXPathBinding.java 16 Dec 2003 15:05:54 -0000 1.5
@@ -69,8 +69,8 @@
/**
* Constructs ContextJXPathBinding for the specified xpath sub-context
*/
- public ContextJXPathBinding(String contextPath, JXPathBindingBase[] childBindings) {
- super(childBindings);
+ public ContextJXPathBinding(boolean loadEnabled, boolean saveEnabled, String contextPath, JXPathBindingBase[] childBindings) {
+ super(loadEnabled, saveEnabled, childBindings);
this.xpath = contextPath;
}
@@ -78,11 +78,11 @@
* Actively performs the binding from the ObjectModel wrapped in a jxpath
* context to the Woody-form.
*/
- public void loadFormFromModel(Widget frmModel, JXPathContext jxpc) {
+ public void doLoad(Widget frmModel, JXPathContext jxpc) {
Pointer ptr = jxpc.getPointer(this.xpath);
if (ptr.getNode() != null) {
JXPathContext subContext = jxpc.getRelativeContext(ptr);
- super.loadFormFromModel(frmModel, subContext);
+ super.doLoad(frmModel, subContext);
if (getLogger().isDebugEnabled())
getLogger().debug("done loading " + toString());
} else {
@@ -96,7 +96,7 @@
* Actively performs the binding from the Woody-form to the ObjectModel
* wrapped in a jxpath context.
*/
- public void saveFormToModel(Widget frmModel, JXPathContext jxpc) throws BindingException {
+ public void doSave(Widget frmModel, JXPathContext jxpc) throws BindingException {
Pointer ptr = jxpc.getPointer(this.xpath);
if (ptr.getNode() == null) {
jxpc.createPath(this.xpath);
@@ -104,7 +104,7 @@
ptr = jxpc.getPointer(this.xpath);
}
JXPathContext subContext = jxpc.getRelativeContext(ptr);
- super.saveFormToModel(frmModel, subContext);
+ super.doSave(frmModel, subContext);
if (getLogger().isDebugEnabled()) {
getLogger().debug("done saving " + toString());
}
1.4 +4 -2 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/SimpleRepeaterJXPathBindingBuilder.java
Index: SimpleRepeaterJXPathBindingBuilder.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/SimpleRepeaterJXPathBindingBuilder.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SimpleRepeaterJXPathBindingBuilder.java 3 Nov 2003 17:05:02 -0000 1.3
+++ SimpleRepeaterJXPathBindingBuilder.java 16 Dec 2003 15:05:54 -0000 1.4
@@ -74,6 +74,8 @@
JXPathBindingManager.Assistant assistant) throws BindingException {
try {
+ DirectionAttributes directionAtts = JXpathBindingBuilderBase.getDirectionAttributes(bindingElem);
+
String repeaterId = DomHelper.getAttribute(bindingElem, "id");
String parentPath = DomHelper.getAttribute(bindingElem, "parent-path");
String rowPath = DomHelper.getAttribute(bindingElem, "row-path");
@@ -82,8 +84,8 @@
JXPathBindingBase[] childBindings = assistant.makeChildBindings(bindingElem);
- return new SimpleRepeaterJXPathBinding(repeaterId, parentPath, rowPath, clearOnLoad, deleteIfEmpty,
- new ComposedJXPathBindingBase(childBindings));
+ return new SimpleRepeaterJXPathBinding( directionAtts.loadEnabled, directionAtts.saveEnabled, repeaterId, parentPath, rowPath, clearOnLoad, deleteIfEmpty,
+ new ComposedJXPathBindingBase(true, true, childBindings));
} catch (BindingException e) {
throw e;
} catch (Exception e) {
1.4 +4 -3 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/SimpleRepeaterJXPathBinding.java
Index: SimpleRepeaterJXPathBinding.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/SimpleRepeaterJXPathBinding.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SimpleRepeaterJXPathBinding.java 3 Nov 2003 17:05:02 -0000 1.3
+++ SimpleRepeaterJXPathBinding.java 16 Dec 2003 15:05:54 -0000 1.4
@@ -77,7 +77,8 @@
private final boolean deleteIfEmpty;
public SimpleRepeaterJXPathBinding(
- String repeaterId, String repeaterPath, String rowPath, boolean clearOnLoad, boolean deleteIfEmpty, JXPathBindingBase rowBinding) {
+ boolean loadEnabled, boolean saveEnabled, String repeaterId, String repeaterPath, String rowPath, boolean clearOnLoad, boolean deleteIfEmpty, JXPathBindingBase rowBinding) {
+ super(loadEnabled, saveEnabled);
this.repeaterId = repeaterId;
this.repeaterPath = repeaterPath;
this.rowPath = rowPath;
@@ -86,7 +87,7 @@
this.deleteIfEmpty = deleteIfEmpty;
}
- public void loadFormFromModel(Widget frmModel, JXPathContext jctx) {
+ public void doLoad(Widget frmModel, JXPathContext jctx) {
// Find the repeater and clear it
Repeater repeater = (Repeater) frmModel.getWidget(this.repeaterId);
@@ -127,7 +128,7 @@
getLogger().debug("done loading rows " + toString());
}
- public void saveFormToModel(Widget frmModel, JXPathContext jctx) throws BindingException {
+ public void doSave(Widget frmModel, JXPathContext jctx) throws BindingException {
// Find the repeater
Repeater repeater = (Repeater) frmModel.getWidget(this.repeaterId);
1.2 +15 -12 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/JavaScriptJXPathBindingBuilder.java
Index: JavaScriptJXPathBindingBuilder.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/JavaScriptJXPathBindingBuilder.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- JavaScriptJXPathBindingBuilder.java 3 Oct 2003 13:40:41 -0000 1.1
+++ JavaScriptJXPathBindingBuilder.java 16 Dec 2003 15:05:54 -0000 1.2
@@ -81,7 +81,10 @@
* <li><code>jxpathPointer</code>: the JXPath pointer corresponding to the "path" attribute,
* <li><code>jxpathContext</code> (not shown): the JXPath context corresponding to the "path" attribute
* </ul>
- * The <wb:save-form> snippet should be ommitted if the "read-only" attribute is present.
+ * <b>Notes:</b><ul>
+ * <li>The <wb:save-form> snippet should be ommitted if the "direction" attribute is set to "load".</li>
+ * <li>The <wb:load-form> snippet should be ommitted if the "direction" attribute is set to "save".</li>
+ * </ul>
*
* @author <a href="http://www.apache.org/~sylvain/">Sylvain Wallez</a>
* @version CVS $Id$
@@ -90,24 +93,24 @@
public JXPathBindingBase buildBinding(Element element, Assistant assistant) throws BindingException {
try {
+ DirectionAttributes directionAtts = JXpathBindingBuilderBase.getDirectionAttributes(element);
+
String id = DomHelper.getAttribute(element, "id");
String path = DomHelper.getAttribute(element, "path");
- boolean readOnly = DomHelper.getAttributeAsBoolean(element, "read-only", false);
-
-
- Element loadElem = DomHelper.getChildElement(element, BindingManager.NAMESPACE, "load-form");
- Script loadScript = JavaScriptHelper.buildScript(loadElem);
+ Script loadScript = null;
+ if (directionAtts.loadEnabled) {
+ Element loadElem = DomHelper.getChildElement(element, BindingManager.NAMESPACE, "load-form");
+ loadScript = JavaScriptHelper.buildScript(loadElem);
+ }
- Script saveScript;
- if (readOnly) {
- saveScript = null;
- } else {
+ Script saveScript = null;
+ if (directionAtts.saveEnabled) {
Element saveElem = DomHelper.getChildElement(element, BindingManager.NAMESPACE, "save-form");
saveScript = JavaScriptHelper.buildScript(saveElem);
}
- return new JavaScriptJXPathBinding(id, path, loadScript, saveScript);
+ return new JavaScriptJXPathBinding(directionAtts.loadEnabled, directionAtts.saveEnabled, id, path, loadScript, saveScript);
} catch(Exception e) {
throw new BindingException("Cannot build binding at " + DomHelper.getLocation(element), e);
1.4 +6 -6 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/AggregateJXPathBinding.java
Index: AggregateJXPathBinding.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/AggregateJXPathBinding.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AggregateJXPathBinding.java 18 Nov 2003 21:39:17 -0000 1.3
+++ AggregateJXPathBinding.java 16 Dec 2003 15:05:54 -0000 1.4
@@ -75,8 +75,8 @@
* @param xpath
* @param childBindings
*/
- public AggregateJXPathBinding(String widgetId, String xpath, JXPathBindingBase[] childBindings) {
- super(childBindings);
+ public AggregateJXPathBinding(boolean loadEnabled, boolean saveEnabled, String widgetId, String xpath, JXPathBindingBase[] childBindings) {
+ super(loadEnabled, saveEnabled, childBindings);
this.widgetId = widgetId;
this.xpath = xpath;
}
@@ -86,10 +86,10 @@
* narrows the scope on the object-model to the member xpath-context
* before continuing the binding over the child-bindings.
*/
- public void loadFormFromModel(Widget frmModel, JXPathContext jxpc) {
+ public void doLoad(Widget frmModel, JXPathContext jxpc) {
AggregateField aggregate = (AggregateField) frmModel.getWidget(this.widgetId);
JXPathContext subContext = jxpc.getRelativeContext(jxpc.getPointer(this.xpath));
- super.loadFormFromModel(aggregate, subContext);
+ super.doLoad(aggregate, subContext);
if (getLogger().isDebugEnabled()) {
getLogger().debug("done loading " + toString());
}
@@ -100,10 +100,10 @@
* narrows the scope on the object-model to the member xpath-context
* before continuing the binding over the child-bindings.
*/
- public void saveFormToModel(Widget frmModel, JXPathContext jxpc) throws BindingException {
+ public void doSave(Widget frmModel, JXPathContext jxpc) throws BindingException {
AggregateField aggregate = (AggregateField) frmModel.getWidget(this.widgetId);
JXPathContext subContext = jxpc.getRelativeContext(jxpc.getPointer(this.xpath));
- super.saveFormToModel(aggregate, subContext);
+ super.doSave(aggregate, subContext);
if (getLogger().isDebugEnabled()) {
getLogger().debug("done saving " + toString());
}
1.11 +11 -8 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/RepeaterJXPathBinding.java
Index: RepeaterJXPathBinding.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/RepeaterJXPathBinding.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- RepeaterJXPathBinding.java 5 Dec 2003 14:06:23 -0000 1.10
+++ RepeaterJXPathBinding.java 16 Dec 2003 15:05:54 -0000 1.11
@@ -87,23 +87,26 @@
/**
* Constructs RepeaterJXPathBinding
*/
- public RepeaterJXPathBinding(String repeaterId, String repeaterPath,
+ public RepeaterJXPathBinding(boolean loadEnabled, boolean saveEnabled,
+ String repeaterId, String repeaterPath,
String rowPath, String rowPathForInsert,
String uniqueRowId, String uniqueRowPath,
JXPathBindingBase[] childBindings,
JXPathBindingBase insertBinding, JXPathBindingBase[] deleteBindings) {
- this(repeaterId, repeaterPath, rowPath, rowPathForInsert, uniqueRowId, uniqueRowPath, null, null, childBindings, insertBinding, deleteBindings);
+ this(loadEnabled, saveEnabled, repeaterId, repeaterPath, rowPath, rowPathForInsert, uniqueRowId, uniqueRowPath, null, null, childBindings, insertBinding, deleteBindings);
}
/**
* Constructs RepeaterJXPathBinding
*/
- public RepeaterJXPathBinding(String repeaterId, String repeaterPath,
+ public RepeaterJXPathBinding(boolean loadEnabled, boolean saveEnabled,
+ String repeaterId, String repeaterPath,
String rowPath, String rowPathForInsert,
String uniqueRowId, String uniqueRowPath,
Convertor convertor, Locale convertorLocale,
JXPathBindingBase[] childBindings,
JXPathBindingBase insertBinding, JXPathBindingBase[] deleteBindings) {
+ super(loadEnabled, saveEnabled);
this.repeaterId = repeaterId;
this.repeaterPath = repeaterPath;
this.rowPath = rowPath;
@@ -111,12 +114,12 @@
this.uniqueRowId = uniqueRowId;
this.uniqueRowIdPath = uniqueRowPath;
this.uniqueFieldBinding =
- new ValueJXPathBinding(uniqueRowId, uniqueRowPath, true, null, convertor, convertorLocale);
+ new ValueJXPathBinding(true, true, uniqueRowId, uniqueRowPath, null, convertor, convertorLocale);
this.uniqueRowIdConvertor = convertor;
this.uniqueRowIdConvertorLocale = convertorLocale;
- this.rowBinding = new ComposedJXPathBindingBase(childBindings);
+ this.rowBinding = new ComposedJXPathBindingBase(true, true, childBindings);
this.insertRowBinding = insertBinding;
- this.deleteRowBinding = new ComposedJXPathBindingBase(deleteBindings);
+ this.deleteRowBinding = new ComposedJXPathBindingBase(true, true, deleteBindings);
}
@@ -125,7 +128,7 @@
* objectModelContext and Repeater to the repeated rows before handing
* over to the actual binding-children.
*/
- public void loadFormFromModel(Widget frmModel, JXPathContext jxpc) {
+ public void doLoad(Widget frmModel, JXPathContext jxpc) {
// Find the repeater
Repeater repeater = (Repeater) frmModel.getWidget(this.repeaterId);
repeater.removeRows();
@@ -158,7 +161,7 @@
* updated, inserted or removed. Depending on what happened the appropriate
* child-bindings are alowed to visit the narrowed contexts.
*/
- public void saveFormToModel(Widget frmModel, JXPathContext jxpc) throws BindingException {
+ public void doSave(Widget frmModel, JXPathContext jxpc) throws BindingException {
// Find the repeater
Repeater repeater = (Repeater) frmModel.getWidget(this.repeaterId);
1.3 +3 -1 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/SetAttributeJXPathBindingBuilder.java
Index: SetAttributeJXPathBindingBuilder.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/SetAttributeJXPathBindingBuilder.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SetAttributeJXPathBindingBuilder.java 24 Jul 2003 12:39:17 -0000 1.2
+++ SetAttributeJXPathBindingBuilder.java 16 Dec 2003 15:05:54 -0000 1.3
@@ -76,11 +76,13 @@
JXPathBindingManager.Assistant assistant) throws BindingException {
try {
+ DirectionAttributes directionAtts = JXpathBindingBuilderBase.getDirectionAttributes(bindingElm);
+
String attName = DomHelper.getAttribute(bindingElm, "name");
String attValue = DomHelper.getAttribute(bindingElm, "value");
SetAttributeJXPathBinding attBinding =
- new SetAttributeJXPathBinding(attName, attValue);
+ new SetAttributeJXPathBinding(directionAtts.loadEnabled, directionAtts.saveEnabled, attName, attValue);
return attBinding;
} catch (BindingException e) {
1.3 +4 -3 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ComposedJXPathBindingBase.java
Index: ComposedJXPathBindingBase.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/ComposedJXPathBindingBase.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ComposedJXPathBindingBase.java 24 Jul 2003 12:39:17 -0000 1.2
+++ ComposedJXPathBindingBase.java 16 Dec 2003 15:05:54 -0000 1.3
@@ -67,7 +67,8 @@
*
* @param childBindings sets the array of childBindings
*/
- protected ComposedJXPathBindingBase(JXPathBindingBase[] childBindings) {
+ protected ComposedJXPathBindingBase(boolean loadEnabled, boolean saveEnabled, JXPathBindingBase[] childBindings) {
+ super(loadEnabled, saveEnabled);
this.subBindings = childBindings;
}
@@ -88,7 +89,7 @@
* Actively performs the binding from the ObjectModel to the Woody-form
* by passing the task onto it's children.
*/
- public void loadFormFromModel(Widget frmModel, JXPathContext jxpc) {
+ public void doLoad(Widget frmModel, JXPathContext jxpc) {
if (this.subBindings != null) {
int size = this.subBindings.length;
for (int i = 0; i < size; i++) {
@@ -101,7 +102,7 @@
* Actively performs the binding from the Woody-form to the ObjectModel
* by passing the task onto it's children.
*/
- public void saveFormToModel(Widget frmModel, JXPathContext jxpc) throws BindingException {
+ public void doSave(Widget frmModel, JXPathContext jxpc) throws BindingException {
if (this.subBindings != null) {
int size = this.subBindings.length;
for (int i = 0; i < size; i++) {
1.3 +4 -3 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/DeleteNodeJXPathBindingBuilder.java
Index: DeleteNodeJXPathBindingBuilder.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/DeleteNodeJXPathBindingBuilder.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DeleteNodeJXPathBindingBuilder.java 24 Jul 2003 12:39:17 -0000 1.2
+++ DeleteNodeJXPathBindingBuilder.java 16 Dec 2003 15:05:54 -0000 1.3
@@ -69,8 +69,9 @@
/**
* Creates an instance of {@link DeleteNodeJXPathBinding}.
*/
- public JXPathBindingBase buildBinding(Element bindingElm, Assistant assistant) {
-
- return new DeleteNodeJXPathBinding();
+ public JXPathBindingBase buildBinding(Element bindingElm, Assistant assistant) throws BindingException {
+ DirectionAttributes directionAtts = JXpathBindingBuilderBase.getDirectionAttributes(bindingElm);
+
+ return new DeleteNodeJXPathBinding(directionAtts.loadEnabled, directionAtts.saveEnabled);
}
}
1.5 +3 -1 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/InsertNodeJXPathBindingBuilder.java
Index: InsertNodeJXPathBindingBuilder.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/InsertNodeJXPathBindingBuilder.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- InsertNodeJXPathBindingBuilder.java 5 Sep 2003 10:41:27 -0000 1.4
+++ InsertNodeJXPathBindingBuilder.java 16 Dec 2003 15:05:54 -0000 1.5
@@ -82,6 +82,8 @@
JXPathBindingManager.Assistant assistant) throws BindingException {
try {
+ DirectionAttributes directionAtts = JXpathBindingBuilderBase.getDirectionAttributes(bindingElm);
+
DocumentFragment domTemplate = null;
String src = bindingElm.getAttribute("src");
@@ -124,7 +126,7 @@
}
}
- return new InsertNodeJXPathBinding(domTemplate);
+ return new InsertNodeJXPathBinding(directionAtts.loadEnabled, directionAtts.saveEnabled, domTemplate);
} catch (Exception e) {
throw new BindingException("Error building the insert-node binding defined at " + DomHelper.getLocation(bindingElm), e);
}
1.3 +2 -1 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/AggregateJXPathBindingBuilder.java
Index: AggregateJXPathBindingBuilder.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/AggregateJXPathBindingBuilder.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- AggregateJXPathBindingBuilder.java 24 Jul 2003 12:39:17 -0000 1.2
+++ AggregateJXPathBindingBuilder.java 16 Dec 2003 15:05:54 -0000 1.3
@@ -70,12 +70,13 @@
public JXPathBindingBase buildBinding(Element bindingElm, JXPathBindingManager.Assistant assistant)
throws BindingException {
try {
+ DirectionAttributes directionAtts = JXpathBindingBuilderBase.getDirectionAttributes(bindingElm);
String xpath = DomHelper.getAttribute(bindingElm, "path");
String widgetId = DomHelper.getAttribute(bindingElm, "id");
JXPathBindingBase[] childBindings = assistant.makeChildBindings(bindingElm);
- AggregateJXPathBinding aggregateBinding = new AggregateJXPathBinding(widgetId, xpath, childBindings);
+ AggregateJXPathBinding aggregateBinding = new AggregateJXPathBinding(directionAtts.loadEnabled, directionAtts.saveEnabled, widgetId, xpath, childBindings);
return aggregateBinding;
} catch (BindingException e) {
throw e;
1.3 +3 -1 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/InsertBeanJXPathBindingBuilder.java
Index: InsertBeanJXPathBindingBuilder.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/InsertBeanJXPathBindingBuilder.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- InsertBeanJXPathBindingBuilder.java 24 Jul 2003 12:39:17 -0000 1.2
+++ InsertBeanJXPathBindingBuilder.java 16 Dec 2003 15:05:54 -0000 1.3
@@ -73,12 +73,14 @@
public JXPathBindingBase buildBinding(Element bindingElm, Assistant assistant) throws BindingException {
try {
+ DirectionAttributes directionAtts = JXpathBindingBuilderBase.getDirectionAttributes(bindingElm);
+
String className =
DomHelper.getAttribute(bindingElm, "classname");
String addMethod =
DomHelper.getAttribute(bindingElm, "addmethod");
- return new InsertBeanJXPathBinding(className, addMethod);
+ return new InsertBeanJXPathBinding(directionAtts.loadEnabled, directionAtts.saveEnabled, className, addMethod);
} catch (BindingException e) {
throw e;
} catch (Exception e) {