Author: sylvain Date: Sun Feb 20 13:46:41 2005 New Revision: 154564 URL: http://svn.apache.org/viewcvs?view=rev&rev=154564 Log: Merge branches
Added: cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-bind.xml (with props) cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-data.xml (with props) cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-def.xml (with props) Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/ContextJXPathBinding.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBase.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBuilderBase.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBinding.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v2/Form.js cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v2/ScriptableWidget.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v3/Form.js cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v3/ScriptableWidget.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidget.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanField.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Form.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueField.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/SelectableWidget.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Widget.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/util/DomHelper.java cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/util/XMLAdapter.java cocoon/trunk/src/blocks/forms/samples/forms/registration_template.xml cocoon/trunk/src/blocks/forms/samples/swan/forms/xreport_model.xml cocoon/trunk/src/blocks/forms/samples/welcome.xml cocoon/trunk/src/blocks/forms/test/org/apache/cocoon/forms/datatype/convertor/EnumConvertorBuilderTestCase.java Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/ContextJXPathBinding.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/ContextJXPathBinding.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/ContextJXPathBinding.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/ContextJXPathBinding.java Sun Feb 20 13:46:41 2005 @@ -76,6 +76,11 @@ getLogger().debug("done saving " + toString()); } } + + /** To allow child classes to know which path they bind to */ + protected String getXPath() { + return this.xpath; + } public String toString() { return "ContextJXPathBinding [xpath=" + this.xpath + "]"; Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBase.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBase.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBase.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBase.java Sun Feb 20 13:46:41 2005 @@ -16,6 +16,7 @@ package org.apache.cocoon.forms.binding; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import org.apache.avalon.framework.logger.LogEnabled; @@ -155,6 +156,7 @@ throws BindingException { boolean inheritedLeniency = jxpc.isLenient(); applyLeniency(jxpc); + applyNSDeclarations(jxpc); if (this.commonAtts.loadEnabled) { doLoad(frmModel, jxpc); } @@ -194,6 +196,7 @@ throws BindingException{ boolean inheritedLeniency = jxpc.isLenient(); applyLeniency(jxpc); + applyNSDeclarations(jxpc); if (this.commonAtts.saveEnabled) { doSave(frmModel, jxpc); } @@ -219,6 +222,20 @@ private void applyLeniency(JXPathContext jxpc) { if (this.commonAtts.leniency != null) { jxpc.setLenient(this.commonAtts.leniency.booleanValue()); + } + } + + private void applyNSDeclarations(JXPathContext jxpc) + { + if (this.commonAtts.nsDeclarations != null) + { + Iterator keysIter = this.commonAtts.nsDeclarations.keySet().iterator(); + while (keysIter.hasNext()) + { + String nsuri = (String) keysIter.next(); + String pfx = (String) this.commonAtts.nsDeclarations.get(nsuri); + jxpc.registerNamespace(pfx, nsuri); + } } } Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBuilderBase.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBuilderBase.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBuilderBase.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/JXPathBindingBuilderBase.java Sun Feb 20 13:46:41 2005 @@ -15,6 +15,8 @@ */ package org.apache.cocoon.forms.binding; +import java.util.Map; + import org.apache.avalon.framework.logger.LogEnabled; import org.apache.avalon.framework.logger.Logger; import org.apache.cocoon.forms.util.DomHelper; @@ -111,7 +113,22 @@ String leniency = DomHelper.getAttribute(bindingElm, "lenient", null); - return new CommonAttributes(location, direction, leniency); + //TODO: current jxpath is not inheriting registered namespaces over to + // child-relative jxpath contexts --> because of that we can't just + // remember the getLocalNSDeclarations but need the full set from + // getInheritedNSDeclarations + // IMPORTANT NOTE: if jxpath would change this behaviour we would however + // still need to be able to unregister namespace-declarations + // (in a smart way: unhide what is possably available from your parent. + // So both changes to jxpath need to be available before changing the below. + Map nsDeclarationMap = DomHelper.getInheritedNSDeclarations(bindingElm); + // we (actually jxpath) doesn't support un-prefixed namespace-declarations: + // so we decide to break on those above silently ignoring them + if (nsDeclarationMap != null && nsDeclarationMap.values().contains(null)) + throw new BindingException("Error in binding file " + location + + "\nBinding doesn't support having namespace-declarations without explicit prefixes."); + + return new CommonAttributes(location, direction, leniency, nsDeclarationMap); } catch (BindingException e) { throw e; } catch (Exception e) { @@ -143,18 +160,23 @@ * should be operating in lenient mode or not */ final Boolean leniency; + /** + * Array of namespace-declarations (prefix-uri pairs) that need to be set on the jxpath + */ + final Map nsDeclarations; - final static CommonAttributes DEFAULT = new CommonAttributes("location unknown", true, true, null); + final static CommonAttributes DEFAULT = new CommonAttributes("location unknown", true, true, null, null); - CommonAttributes(String location, String direction, String leniency){ - this(location, isLoadEnabled(direction), isSaveEnabled(direction), decideLeniency(leniency)); + CommonAttributes(String location, String direction, String leniency, Map nsDeclarations){ + this(location, isLoadEnabled(direction), isSaveEnabled(direction), decideLeniency(leniency), nsDeclarations); } - CommonAttributes(String location, boolean loadEnabled, boolean saveEnabled, Boolean leniency){ + CommonAttributes(String location, boolean loadEnabled, boolean saveEnabled, Boolean leniency, Map nsDeclarations){ this.location = location; this.loadEnabled = loadEnabled; this.saveEnabled = saveEnabled; this.leniency = leniency; + this.nsDeclarations = nsDeclarations; } /** Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBinding.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBinding.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBinding.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBinding.java Sun Feb 20 13:46:41 2005 @@ -18,6 +18,7 @@ import org.apache.cocoon.forms.formmodel.Struct; import org.apache.cocoon.forms.formmodel.Widget; import org.apache.commons.jxpath.JXPathContext; +import org.apache.commons.jxpath.Pointer; /** * StructJXPathBinding provides an implementation of a [EMAIL PROTECTED] Binding} @@ -30,9 +31,7 @@ * * @version $Id$ */ -public class StructJXPathBinding extends ComposedJXPathBindingBase { - - private final String xpath; +public class StructJXPathBinding extends ContextJXPathBinding { private final String widgetId; @@ -43,9 +42,8 @@ * @param childBindings */ public StructJXPathBinding(JXPathBindingBuilderBase.CommonAttributes commonAtts, String widgetId, String xpath, JXPathBindingBase[] childBindings) { - super(commonAtts, childBindings); + super(commonAtts, xpath, childBindings); this.widgetId = widgetId; - this.xpath = xpath; } /** @@ -55,11 +53,7 @@ */ public void doLoad(Widget frmModel, JXPathContext jxpc) throws BindingException { Struct structWidget = (Struct)selectWidget(frmModel, this.widgetId); - JXPathContext subContext = jxpc.getRelativeContext(jxpc.getPointer(this.xpath)); - super.doLoad(structWidget, subContext); - if (getLogger().isDebugEnabled()) { - getLogger().debug("done loading " + toString()); - } + super.doLoad(structWidget, jxpc); } /** @@ -69,14 +63,10 @@ */ public void doSave(Widget frmModel, JXPathContext jxpc) throws BindingException { Struct structWidget = (Struct)selectWidget(frmModel, this.widgetId); - JXPathContext subContext = jxpc.getRelativeContext(jxpc.getPointer(this.xpath)); - super.doSave(structWidget, subContext); - if (getLogger().isDebugEnabled()) { - getLogger().debug("done saving " + toString()); - } + super.doSave(structWidget, jxpc); } public String toString() { - return "StructJXPathBinding [widget=" + this.widgetId + ", xpath=" + this.xpath + "]"; + return "StructJXPathBinding [widget=" + this.widgetId + ", xpath=" + getXPath() + "]"; } } Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js Sun Feb 20 13:46:41 2005 @@ -115,9 +115,6 @@ throw "Forms do not support custom javascript validators anymore. Declare your validators in the form model file."; } - // Fire any events pending from binding, etc. - this.form.fireEvents(); - do { var k = cocoon.sendPageAndWait(uri, bizData); if (result == null) result = k; Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v2/Form.js URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v2/Form.js?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v2/Form.js (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v2/Form.js Sun Feb 20 13:46:41 2005 @@ -113,10 +113,6 @@ var FormContext = Packages.org.apache.cocoon.forms.FormContext; // this is needed by the FormTemplateTransformer: var javaWidget = this.formWidget_.unwrap(); - - // Fire any events pending from binding, etc. - javaWidget.fireEvents(); - this.formWidget_["CocoonFormsInstance"] = javaWidget; cocoon.request.setAttribute(Packages.org.apache.cocoon.forms.transformation.CFORMSKEY, javaWidget); var wk = cocoon.sendPageAndWait(uri, this.formWidget_, fun, ttl); Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v2/ScriptableWidget.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v2/ScriptableWidget.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v2/ScriptableWidget.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v2/ScriptableWidget.java Sun Feb 20 13:46:41 2005 @@ -683,12 +683,6 @@ } } - public void jsFunction_removeSelectionList() { - if (delegate instanceof SelectableWidget) { - ((SelectableWidget)delegate).removeSelectionList(); - } - } - static final Object[] WIDGET_CLASS_MAP = { Form.class, "Form", Field.class, "Field", Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v3/Form.js URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v3/Form.js?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v3/Form.js (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v3/Form.js Sun Feb 20 13:46:41 2005 @@ -83,9 +83,6 @@ viewData = new Object(); viewData["CocoonFormsInstance"] = this.form; - // Fire any events pending from binding, etc. - this.form.fireEvents(); - var webCont; var finished = false; while (!finished) { Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v3/ScriptableWidget.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v3/ScriptableWidget.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v3/ScriptableWidget.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/v3/ScriptableWidget.java Sun Feb 20 13:46:41 2005 @@ -390,7 +390,7 @@ delegate.setValue(value); } else if (delegate instanceof BooleanField) { BooleanField field = (BooleanField)delegate; - field.setValue(new Boolean(Context.toBoolean(value))); + field.setValue(Boolean.valueOf(Context.toBoolean(value))); } else if (delegate instanceof Repeater) { Repeater repeater = (Repeater)delegate; if (value instanceof NativeArray) { @@ -752,12 +752,6 @@ } } } - } - - public void jsFunction_removeSelectionList() { - if (delegate instanceof SelectableWidget) { - ((SelectableWidget)delegate).removeSelectionList(); - } } static final Object[] WIDGET_CLASS_MAP = { Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidget.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidget.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidget.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidget.java Sun Feb 20 13:46:41 2005 @@ -45,16 +45,6 @@ private Widget parent; /** - * Process request parameters for this widget? - */ - private boolean processMyRequests = true; - - /** - * Process request parameters for children of this widget? - */ - private boolean processChildRequests = true; - - /** * The widget's own state */ private WidgetState state = WidgetState.ACTIVE; @@ -241,31 +231,6 @@ public void setValue(Object object) { throw new RuntimeException("Cannot set the value of widget " + getRequestParameterName()); - } - - /** - * Controls whether [EMAIL PROTECTED] #readFromRequest(FormContext formContext)} - * processes the request parameter(s) for this widget and its children. - */ - public void setProcessRequests(boolean processRequests) { - this.processMyRequests = processRequests; - this.processChildRequests = processRequests; - } - - /** - * Controls whether [EMAIL PROTECTED] #readFromRequest(FormContext formContext)} - * processes the request parameter(s) for this widget. - */ - public void setProcessMyRequests(boolean processMyRequests) { - this.processMyRequests = processMyRequests; - } - - /** - * Controls whether [EMAIL PROTECTED] #readFromRequest(FormContext formContext)} - * processes the request parameter(s) for children of this widget. - */ - public void setProcessChildRequests(boolean processChildRequests) { - this.processChildRequests = processChildRequests; } public boolean isRequired() { Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanField.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanField.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanField.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanField.java Sun Feb 20 13:46:41 2005 @@ -69,12 +69,8 @@ validationError = null; Object oldValue = value; String param = formContext.getRequest().getParameter(getRequestParameterName()); - if (param != null && param.equalsIgnoreCase("true")) - value = Boolean.TRUE; - else - value = Boolean.FALSE; - - if (value != oldValue) { + value = Boolean.valueOf(param); + if (!value.equals(oldValue)) { getForm().addWidgetEvent(new ValueChangedEvent(this, oldValue, value)); } } @@ -148,7 +144,7 @@ Object oldValue = value; value = (Boolean)object; - if (value != oldValue) { + if (!value.equals(oldValue)) { getForm().addWidgetEvent(new ValueChangedEvent(this, oldValue, value)); } } Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java Sun Feb 20 13:46:41 2005 @@ -453,14 +453,6 @@ setSelectionList(getFieldDefinition().buildSelectionListFromModel(model, valuePath, labelPath)); } - /** - * Delete this field's selection list. - */ - public void removeSelectionList() { - this.selectionList = null; - getFieldDefinition().setSelectionList(null); - } - public Datatype getDatatype() { return getFieldDefinition().getDatatype(); } Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Form.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Form.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Form.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Form.java Sun Feb 20 13:46:41 2005 @@ -86,7 +86,7 @@ * Fire the events that have been queued. * Note that event handling can fire new events. */ - public void fireEvents() { + private void fireEvents() { if (this.events != null) { CursorableLinkedList.Cursor cursor = this.events.cursor(); while(cursor.hasNext()) { @@ -248,7 +248,7 @@ * @param redisplayForm indicates if the form should be redisplayed to the user. */ public void endProcessing(boolean redisplayForm) { - this.endProcessing = new Boolean(!redisplayForm); + this.endProcessing = Boolean.valueOf(!redisplayForm); } /** Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueField.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueField.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueField.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueField.java Sun Feb 20 13:46:41 2005 @@ -213,16 +213,6 @@ } /** - * Delete this field's selection list. - */ - public void removeSelectionList() { - this.selectionList = null; - if(this.definition != null) { - this.definition.setSelectionList(null); - } - } - - /** * Set this field's selection list using values from an in-memory * object. The <code>object</code> parameter should point to a collection * (Java collection or array, or Javascript array) of objects. Each object Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/SelectableWidget.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/SelectableWidget.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/SelectableWidget.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/SelectableWidget.java Sun Feb 20 13:46:41 2005 @@ -28,6 +28,4 @@ public void setSelectionList(String uri); public void setSelectionList(Object model, String valuePath, String labelPath); - - public void removeSelectionList(); } Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Widget.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Widget.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Widget.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Widget.java Sun Feb 20 13:46:41 2005 @@ -146,24 +146,6 @@ public Widget lookupWidget(String path); /** - * Controls whether [EMAIL PROTECTED] #readFromRequest(FormContext formContext)} - * processes the request parameter(s) for this widget and its children. - */ - public void setProcessRequests(boolean processRequests); - - /** - * Controls whether [EMAIL PROTECTED] #readFromRequest(FormContext formContext)} - * processes the request parameter(s) for this widget. - */ - public void setProcessMyRequests(boolean processMyRequests); - - /** - * Controls whether [EMAIL PROTECTED] #readFromRequest(FormContext formContext)} - * processes the request parameter(s) for children of this widget. - */ - public void setProcessChildRequests(boolean processChildRequests); - - /** * Lets this widget read its data from a request. At this point the Widget * may try to convert the request parameter to its native datatype (if it * is not a string), but it should not yet generate any validation errors. Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectPipe.java Sun Feb 20 13:46:41 2005 @@ -59,7 +59,7 @@ protected static final int EVENT_END_CDATA =17; protected static final int EVENT_COMMENT =18; - protected class Element { + protected static class Element { public final String prefix; public final String uri; public final String loc; Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/transformation/EffectWidgetReplacingPipe.java Sun Feb 20 13:46:41 2005 @@ -610,13 +610,19 @@ if (isVisible(widget)) { contextWidgets.addFirst(contextWidget); contextWidget = widget; - return this; + //Don't output fi:struct + // out.element(Constants.INSTANCE_PREFIX, Constants.INSTANCE_NS, "union"); + // out.attributes(); + // out.startElement(); + return this; } else { return nullHandler; } case EVENT_ELEMENT: return nestedTemplate(); case EVENT_END_ELEMENT: + // don't output fi:struct + // out.endElement(); contextWidget = (Widget)contextWidgets.removeFirst(); return this; default: @@ -822,7 +828,7 @@ case EVENT_START_ELEMENT: // Insert the continuation id // FIXME(SW) we could avoid costly JXPath evaluation if we had the objectmodel here. - Object idObj = pipeContext.evaluateExpression("$continuation/id"); + Object idObj = pipeContext.evaluateExpression("$cocoon/continuation/id"); if (idObj == null) { throwSAXException("No continuation found"); } Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/util/DomHelper.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/util/DomHelper.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/util/DomHelper.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/util/DomHelper.java Sun Feb 20 13:46:41 2005 @@ -17,6 +17,11 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.ListIterator; +import java.util.Map; import org.apache.avalon.framework.service.ServiceException; import org.apache.avalon.framework.service.ServiceManager; @@ -33,9 +38,11 @@ import org.apache.xerces.xni.XMLAttributes; import org.apache.xerces.xni.XMLLocator; import org.apache.xerces.xni.XNIException; +import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; @@ -58,6 +65,8 @@ */ public class DomHelper { + public static final String XMLNS_URI = "http://www.w3.org/2000/xmlns/"; + /** * Retrieves the location of an element node in the source file from which * the Document was created. This will only work for Document's created @@ -118,8 +127,7 @@ * Returns all Element children of an Element that belong to the given * namespace. */ - public static Element[] getChildElements(Element element, - String namespace) { + public static Element[] getChildElements(Element element, String namespace) { ArrayList elements = new ArrayList(); NodeList nodeList = element.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { @@ -128,7 +136,7 @@ && namespace.equals(node.getNamespaceURI())) elements.add(node); } - return (Element[])elements.toArray(new Element[0]); + return (Element[])elements.toArray(new Element[elements.size()]); } /** @@ -147,7 +155,7 @@ elements.add(node); } } - return (Element[])elements.toArray(new Element[0]); + return (Element[])elements.toArray(new Element[elements.size()]); } /** @@ -390,5 +398,54 @@ node.setUserData("location", location, null); } } + } + + public static Map getLocalNSDeclarations(Element elm) + { + return addLocalNSDeclarations(elm, null); + } + + private static Map addLocalNSDeclarations(Element elm, Map nsDeclarations) + { + NamedNodeMap atts = elm.getAttributes(); + int attsSize = atts.getLength(); + + for (int i = 0; i < attsSize; i++) + { + Attr attr = (Attr)atts.item(i); + if (XMLNS_URI.equals(attr.getNamespaceURI())) + { + String nsUri = attr.getValue(); + String pfx = attr.getLocalName(); + if (nsDeclarations == null) + nsDeclarations = new HashMap(); + nsDeclarations.put(nsUri, pfx); + } + } + return nsDeclarations; } + + public static Map getInheritedNSDeclarations(Element elm) + { + List ancestorsAndSelf = new LinkedList(); + Element current = elm; + while (current != null) + { + ancestorsAndSelf.add(current); + Node parent = current.getParentNode(); + if (parent.getNodeType() == Node.ELEMENT_NODE) + current = (Element)parent; + else + current = null; + } + + Map nsDeclarations = null; + ListIterator iter = ancestorsAndSelf.listIterator(ancestorsAndSelf.size()); + while (iter.hasPrevious()) + { + Element element = (Element) iter.previous(); + nsDeclarations = addLocalNSDeclarations(element, nsDeclarations); + } + + return nsDeclarations; } } Modified: cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/util/XMLAdapter.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/util/XMLAdapter.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/util/XMLAdapter.java (original) +++ cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/util/XMLAdapter.java Sun Feb 20 13:46:41 2005 @@ -307,7 +307,7 @@ // FIXME: BooleanField should implement DataWidget, which // would make this case unnecessary if (widget.getValue() != null) { - data((Boolean)widget.getValue() == Boolean.TRUE ? "true" : "false"); + data(widget.getValue().toString()); } } else if (widget instanceof MultiValueField) { Datatype datatype = ((MultiValueField)widget).getDatatype(); Added: cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-bind.xml URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-bind.xml?view=auto&rev=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-bind.xml (added) +++ cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-bind.xml Sun Feb 20 13:46:41 2005 @@ -0,0 +1,39 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<fb:context xmlns:fb="http://apache.org/cocoon/forms/1.0#binding" + xmlns:fd="http://apache.org/cocoon/forms/1.0#definition" + xmlns:h="http://www.w3.org/1999/xhtml" + path="/" > + +<!-- + | This file binds form data to a namespaced XML + --> + + <fb:context path="h:html/h:head" > + <fb:value id="title" path="html:title" lenient="true" /> + </fb:context> + + <fb:context path="x:stylesheet" xmlns:x="http://www.w3.org/1999/XSL/Transform"> + <fb:value id="template" path="x:template/@name" lenient="true"/> + </fb:context> + + <fb:context path="." xmlns:f="http://www.w3.org/1999/XSL/Format"> + <fb:value id="flowname" path="f:root/f:page-sequence/f:flow/@flow-name" lenient="true"/> + </fb:context> + +</fb:context> Propchange: cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-bind.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-bind.xml ------------------------------------------------------------------------------ svn:keywords = Id Added: cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-data.xml URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-data.xml?view=auto&rev=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-data.xml (added) +++ cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-data.xml Sun Feb 20 13:46:41 2005 @@ -0,0 +1,29 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<test> + <html:html xmlns:html="http://www.w3.org/1999/xhtml"> + <html:head> + <html:title>some title</html:title> + </html:head> + </html:html> + <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + <xsl:template name="template-name"/> + </xsl:stylesheet> + <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> + <fo:page-sequence><fo:flow flow-name="flow-name" /></fo:page-sequence> + </fo:root> +</test> Propchange: cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-data.xml ------------------------------------------------------------------------------ svn:keywords = Id Added: cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-def.xml URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-def.xml?view=auto&rev=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-def.xml (added) +++ cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-def.xml Sun Feb 20 13:46:41 2005 @@ -0,0 +1,35 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<fd:form + xmlns:fd="http://apache.org/cocoon/forms/1.0#definition" + xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> + + <fd:widgets> + <fd:field id="title"> + <fd:label>Enter an HTML title</fd:label> + <fd:datatype base="string" /> + </fd:field> + <fd:field id="template"> + <fd:label>Enter an XSL template name</fd:label> + <fd:datatype base="string" /> + </fd:field> + <fd:field id="flowname"> + <fd:label>And now a XSL:FO flow name</fd:label> + <fd:datatype base="string" /> + </fd:field> + </fd:widgets> +</fd:form> Propchange: cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-def.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: cocoon/trunk/src/blocks/forms/samples/forms/binding/06namespaced-def.xml ------------------------------------------------------------------------------ svn:keywords = Id Modified: cocoon/trunk/src/blocks/forms/samples/forms/registration_template.xml URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/samples/forms/registration_template.xml?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/samples/forms/registration_template.xml (original) +++ cocoon/trunk/src/blocks/forms/samples/forms/registration_template.xml Sun Feb 20 13:46:41 2005 @@ -18,7 +18,8 @@ xmlns:fi="http://apache.org/cocoon/forms/1.0#instance"> <title>Registration</title> <content> - <ft:form-template action="#{$cocoon/continuation/id}.continue" method="POST"> + <ft:form-template action="continue" method="POST"> + <ft:continuation-id/> <fi:group> <fi:styling layout="columns"/> <fi:items> Modified: cocoon/trunk/src/blocks/forms/samples/swan/forms/xreport_model.xml URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/samples/swan/forms/xreport_model.xml?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/samples/swan/forms/xreport_model.xml (original) +++ cocoon/trunk/src/blocks/forms/samples/swan/forms/xreport_model.xml Sun Feb 20 13:46:41 2005 @@ -82,11 +82,11 @@ var union = widget.lookupWidget("../union"); var type = widget.lookupWidget("../type-selector"); if(widget.getValue().equals("edit")) { - union.setProcessRequests(true); - type.setProcessRequests(true); + union.setState(Packages.org.apache.cocoon.forms.formmodel.WidgetState.ACTIVE); + type.setState(Packages.org.apache.cocoon.forms.formmodel.WidgetState.ACTIVE); } else { - union.setProcessRequests(false); - type.setProcessRequests(false); + union.setState(Packages.org.apache.cocoon.forms.formmodel.WidgetState.DISABLED); + type.setState(Packages.org.apache.cocoon.forms.formmodel.WidgetState.DISABLED); } </javascript> </fd:on-value-changed> Modified: cocoon/trunk/src/blocks/forms/samples/welcome.xml URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/samples/welcome.xml?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/samples/welcome.xml (original) +++ cocoon/trunk/src/blocks/forms/samples/welcome.xml Sun Feb 20 13:46:41 2005 @@ -37,6 +37,7 @@ <sample name="Various (Flowscript)" href="form1.flow">The same sample as above using Flowscript.</sample> <sample name="Registration" href="registration">A simple registration form.</sample> <sample name="Car selector" href="carselector">Illustrates programmatically changing selectionlists.</sample> + <sample name="XHR Car selector" href="xhr_carselector">Same sample, using XmlHttpRequest to reduce client/server roundtrips.</sample> <sample name="Country selector" href="countryselector">Illustrates programmatically changing flow-jxpath selectionlists.</sample> <sample name="Upload" href="upload">Shows an upload widget used with Flowscript</sample> <sample name="Form Model GUI" href="form_model_gui.flow">Illustrates the use of Class, New, Struct, and Union.</sample> @@ -60,6 +61,7 @@ <sample name="3. Aggregate Binding" href="binding-03aggregate.flow">fb:aggregate</sample> <sample name="4. Heavy Form" href="binding-04heavy-XML.flow">Form with lots of select boxes - test memory utilization, performance</sample> <sample name="5. Custom Bindings using Java or Javascript" href="binding-05custom.flow">fb:javascript and fb:custom</sample> + <sample name="6. XML binding using namespaces" href="binding-06namespaced-XML.flow">Using XML binding with complex namespaced XML</sample> <!-- TODO: provide more tutorial samples like these: <sample name="6. MultiValue/Repeater Binding" href="binding-03multi.flow">fb:multi-value</sample> <sample name="7. Repeater Binding" href="binding-06repeater.flow">fb:repeater</sample> Modified: cocoon/trunk/src/blocks/forms/test/org/apache/cocoon/forms/datatype/convertor/EnumConvertorBuilderTestCase.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/forms/test/org/apache/cocoon/forms/datatype/convertor/EnumConvertorBuilderTestCase.java?view=diff&r1=154563&r2=154564 ============================================================================== --- cocoon/trunk/src/blocks/forms/test/org/apache/cocoon/forms/datatype/convertor/EnumConvertorBuilderTestCase.java (original) +++ cocoon/trunk/src/blocks/forms/test/org/apache/cocoon/forms/datatype/convertor/EnumConvertorBuilderTestCase.java Sun Feb 20 13:46:41 2005 @@ -39,16 +39,12 @@ * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { + super.setUp(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); parser = factory.newDocumentBuilder(); } - /* (non-Javadoc) - * @see junit.framework.TestCase#tearDown() - */ - protected void tearDown() throws Exception { - } public EnumConvertorBuilderTestCase(String name) { super(name);