Author: sylvain
Date: Thu Feb 24 09:02:09 2005
New Revision: 155210
URL: http://svn.apache.org/viewcvs?view=rev&rev=155210
Log:
Many changes to CForms - see status.xml
Removed:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AddRowActionDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/DeleteRowsActionDefinition.java
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/GroupJXPathBinding.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/JavaScriptJXPathBindingBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBinding.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBindingBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/event/CreateEvent.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/event/impl/JavaScriptWidgetListener.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractContainerDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractContainerWidget.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractDatatypeWidgetDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractDatatypeWidgetDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidget.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Action.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ActionDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ActionDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AggregateFieldDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AggregateFieldDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanField.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanFieldDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanFieldDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ClassDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FieldDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FieldDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Form.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FormDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Group.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/GroupDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Messages.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MessagesDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueField.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/NewDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Output.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/OutputDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Repeater.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RepeaterDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/RowActionDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/SelectableWidget.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Struct.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/StructDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/StructDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/SubmitDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/SubmitDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Union.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/UnionDefinition.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/UnionDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Upload.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/UploadDefinitionBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Widget.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionList.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/WidgetState.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/generation/jx-macros.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/util/JavaScriptHelper.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/validation/impl/JavaScriptValidatorBuilder.java
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/dreamteam/sitemap.xmap
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/datasource_chooser.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/datasource_chooser_binding.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/datasource_chooser_template.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/dynamicrepeater.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/form1.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/form2_model.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/form_model_gui_binding.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/form_model_gui_data.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/form_model_gui_model.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/form_model_gui_template.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/multipage_binding.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/multipage_model.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/multipage_template.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/tasktree.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/tasktree_binding.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/forms/tasktree_template.xml
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/resources/forms-field-styling.xsl
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/samples/sitemap.xmap
cocoon/branches/BRANCH_2_1_X/status.xml
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/GroupJXPathBinding.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/GroupJXPathBinding.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/GroupJXPathBinding.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/GroupJXPathBinding.java
Thu Feb 24 09:02:09 2005
@@ -30,9 +30,7 @@
*
* @version $Id$
*/
-public class GroupJXPathBinding extends ComposedJXPathBindingBase {
-
- private final String xpath;
+public class GroupJXPathBinding extends ContextJXPathBinding {
private final String widgetId;
@@ -43,9 +41,8 @@
* @param childBindings
*/
public GroupJXPathBinding(JXPathBindingBuilderBase.CommonAttributes
commonAtts, String widgetId, String xpath, JXPathBindingBase[] childBindings) {
- super(commonAtts, childBindings);
+ super(commonAtts, xpath, childBindings);
this.widgetId = widgetId;
- this.xpath = xpath;
}
/**
@@ -55,11 +52,7 @@
*/
public void doLoad(Widget frmModel, JXPathContext jxpc) throws
BindingException {
Group groupWidget = (Group)selectWidget(frmModel, this.widgetId);
- JXPathContext subContext =
jxpc.getRelativeContext(jxpc.getPointer(this.xpath));
- super.doLoad(groupWidget, subContext);
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("done loading " + toString());
- }
+ super.doLoad(groupWidget, jxpc);
}
/**
@@ -69,14 +62,10 @@
*/
public void doSave(Widget frmModel, JXPathContext jxpc) throws
BindingException {
Group groupWidget = (Group)selectWidget(frmModel, this.widgetId);
- JXPathContext subContext =
jxpc.getRelativeContext(jxpc.getPointer(this.xpath));
- super.doSave(groupWidget, subContext);
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("done saving " + toString());
- }
+ super.doSave(groupWidget, jxpc);
}
public String toString() {
- return "GroupJXPathBinding [widget=" + this.widgetId + ", xpath=" +
this.xpath + "]";
+ return "GroupJXPathBinding [widget=" + this.widgetId + ", xpath=" +
getXPath() + "]";
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/JavaScriptJXPathBindingBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/JavaScriptJXPathBindingBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/JavaScriptJXPathBindingBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/JavaScriptJXPathBindingBuilder.java
Thu Feb 24 09:02:09 2005
@@ -90,7 +90,7 @@
throw new BindingException("Element \"load-form\" is
missing (" +
DomHelper.getLocation(element) + ")");
}
- loadScript = JavaScriptHelper.buildFunction(loadElem,
JavaScriptJXPathBinding.LOAD_PARAMS);
+ loadScript = JavaScriptHelper.buildFunction(loadElem,
"loadForm", JavaScriptJXPathBinding.LOAD_PARAMS);
}
// Build save script
@@ -101,7 +101,7 @@
throw new BindingException("Element \"save-form\" is
missing (" +
DomHelper.getLocation(element) + ")");
}
- saveScript = JavaScriptHelper.buildFunction(saveElem,
JavaScriptJXPathBinding.SAVE_PARAMS);
+ saveScript = JavaScriptHelper.buildFunction(saveElem,
"saveForm", JavaScriptJXPathBinding.SAVE_PARAMS);
}
// Build child bindings
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBinding.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBinding.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBinding.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBinding.java
Thu Feb 24 09:02:09 2005
@@ -18,7 +18,6 @@
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}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBindingBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBindingBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBindingBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/StructJXPathBindingBuilder.java
Thu Feb 24 09:02:09 2005
@@ -16,6 +16,7 @@
package org.apache.cocoon.forms.binding;
import org.apache.cocoon.forms.util.DomHelper;
+import org.apache.cocoon.util.log.DeprecationLogger;
import org.w3c.dom.Element;
/**
@@ -37,6 +38,7 @@
public JXPathBindingBase buildBinding(Element bindingElm,
JXPathBindingManager.Assistant assistant)
throws BindingException {
+ DeprecationLogger.log("'fb:struct' is deprecated and replaced by
'fb:group' at " + DomHelper.getLocation(bindingElm));
try {
String widgetId = DomHelper.getAttribute(bindingElm, "id");
CommonAttributes commonAtts =
JXPathBindingBuilderBase.getCommonAttributes(bindingElm);
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/event/CreateEvent.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/event/CreateEvent.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/event/CreateEvent.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/event/CreateEvent.java
Thu Feb 24 09:02:09 2005
@@ -18,7 +18,6 @@
import org.apache.cocoon.forms.formmodel.Widget;
/**
- * <b>Early prototype of a create event. Don't use it now as the plumbing is
not yet ready! (SW)</b>
* An event raised when a widget is created, once it has been fully set up. For
* container widgets, this occurs after child widgets, if any, have been
created.
*
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/event/impl/JavaScriptWidgetListener.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/event/impl/JavaScriptWidgetListener.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/event/impl/JavaScriptWidgetListener.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/event/impl/JavaScriptWidgetListener.java
Thu Feb 24 09:02:09 2005
@@ -56,10 +56,12 @@
HashMap values = new HashMap(2);
values.put("event", event);
+ //FIXME(SW) it would be nice to have "this" be the widget, but I
don't know how to define
+ //the "this" object for a script (this is easy for a function)
Map objectModel = ContextHelper.getObjectModel(context);
- // Add the biz data that was passed to showForm()
+ // Add the view data that was passed to showForm()
Object viewData = FlowHelper.getContextObject(objectModel);
if (viewData != null) {
values.put("viewData", viewData);
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js
Thu Feb 24 09:02:09 2005
@@ -27,28 +27,31 @@
/**
* Create a form, given the URI of its definition file
*/
-function Form(uri) {
+function Form(formDefinition) {
var formMgr = null;
var resolver = null;
var src = null;
var xmlAdapter = null;
try {
formMgr =
cocoon.getComponent(Packages.org.apache.cocoon.forms.FormManager.ROLE);
- resolver =
cocoon.getComponent(Packages.org.apache.cocoon.environment.SourceResolver.ROLE);
- src = resolver.resolveURI(uri);
- this.form = formMgr.createForm(src);
- this.binding = null;
- this.eventHandler = null;
- // FIXME : hack needed because FOM doesn't provide access to the
context
- this.avalonContext = formMgr.getAvalonContext();
- // TODO : do we keep this ?
- this.formWidget = new Widget(this.form);
-
+ if ((typeof formDefinition) == "string" || formDefinition instanceof
String) {
+ resolver =
cocoon.getComponent(Packages.org.apache.cocoon.environment.SourceResolver.ROLE);
+ src = resolver.resolveURI(formDefinition);
+ this.form = formMgr.createForm(src);
+ } else {
+ this.form = formMgr.createForm(formDefinition)
+ }
} finally {
cocoon.releaseComponent(formMgr);
if (src != null) resolver.release(src);
cocoon.releaseComponent(resolver);
}
+ this.binding = null;
+ this.eventHandler = null;
+ // FIXME : hack needed because FOM doesn't provide access to the context
+ this.avalonContext = formMgr.getAvalonContext();
+ // TODO : do we keep this ?
+ this.formWidget = new Widget(this.form);
}
Form.prototype.getModel = function() {
@@ -95,7 +98,7 @@
* @parameter bizdata some business data for the view (like in
cocoon.sendPageAndWait()).
* The "{FormsPipelineConfig.CFORMSKEY}" and "locale" properties
are added to this object.
*/
-Form.prototype.showForm = function(uri, bizData) {
+Form.prototype.showForm = function(uri, bizData, fun, ttl) {
if (bizData == undefined) bizData = new Object();
bizData[Packages.org.apache.cocoon.forms.transformation.FormsPipelineConfig.CFORMSKEY]
= this.form;
@@ -110,39 +113,27 @@
var finished = false;
this.isValid = false;
- // FIXME: Remove check for removed syntax later.
- if (this.validator != undefined) {
- throw "Forms do not support custom javascript validators anymore.
Declare your validators in the form model file.";
- }
-
- do {
- var k = cocoon.sendPageAndWait(uri, bizData);
- if (result == null) result = k;
-
+ var comingBack = false;
+ var bookmark = cocoon.createWebContinuation(ttl);
+
+ if (comingBack) {
+ // We come back to the bookmark: process the form
var formContext = new
Packages.org.apache.cocoon.forms.FormContext(cocoon.request, this.locale);
-
- // Prematurely add the bizData as in the object model so that event
listeners can use it
- // (the same is done by cocoon.sendPage())
- // FIXME : hack needed because FOM doesn't provide access to the
object model
- var objectModel =
org.apache.cocoon.components.ContextHelper.getObjectModel(this.avalonContext);
-
org.apache.cocoon.components.flow.FlowHelper.setContextObject(objectModel,
bizData);
-
finished = this.form.process(formContext);
if (finished) {
this.isValid = this.form.isValid();
+ var widget = this.form.getSubmitWidget();
+ // Can be null on "normal" submit
+ this.submitId = widget == null ? null : widget.getId();
+ return bookmark;
}
-
- // FIXME: Theoretically, we should clone the form widget (this.form)
to ensure it keeps its
- // value with the continuation. We don't do it since there should me
not much pratical consequences
- // except a sudden change of repeaters whose size changed from a
continuation to another.
-
- } while(!finished);
-
- var widget = this.form.getSubmitWidget();
- // Can be null on "normal" submit
- this.submitId = widget == null ? null : widget.getId();
-
- return result;
+ }
+ comingBack = true;
+ cocoon.sendPage(uri, bizData, bookmark);
+ if (fun && fun instanceof Function) {
+ fun();
+ }
+ FOM_Cocoon.suicide();
}
Form.prototype.createBinding = function(bindingURI) {
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractContainerDefinition.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractContainerDefinition.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractContainerDefinition.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractContainerDefinition.java
Thu Feb 24 09:02:09 2005
@@ -40,6 +40,8 @@
}
public void addWidgetDefinition(WidgetDefinition definition) throws
Exception, DuplicateIdException {
+ //FIXME: cannot enforce this check here as more children are added in
the resolve() phase
+ //checkMutable();
definition.setParent(this);
definitions.addWidgetDefinition(definition);
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractContainerWidget.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractContainerWidget.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractContainerWidget.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractContainerWidget.java
Thu Feb 24 09:02:09 2005
@@ -52,6 +52,8 @@
while(it.hasNext()) {
((Widget)it.next()).initialize();
}
+
+ super.initialize();
}
public void addChild(Widget widget) {
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractDatatypeWidgetDefinition.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractDatatypeWidgetDefinition.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractDatatypeWidgetDefinition.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractDatatypeWidgetDefinition.java
Thu Feb 24 09:02:09 2005
@@ -33,23 +33,32 @@
*/
public abstract class AbstractDatatypeWidgetDefinition extends
AbstractWidgetDefinition implements Serviceable {
private Datatype datatype;
+ private Object initialValue;
private SelectionList selectionList;
private ValueChangedListener listener;
private ServiceManager manager;
public void service(ServiceManager manager) throws ServiceException {
+ checkMutable();
this.manager = manager;
}
public Datatype getDatatype() {
return datatype;
}
+
+ public Object getInitialValue() {
+ return this.initialValue;
+ }
- public void setDatatype(Datatype datatype) {
+ public void setDatatype(Datatype datatype, Object initialValue) {
+ checkMutable();
this.datatype = datatype;
+ this.initialValue = initialValue;
}
public void setSelectionList(SelectionList selectionList) {
+ checkMutable();
if (selectionList != null && selectionList.getDatatype() !=
getDatatype())
throw new RuntimeException("Tried to assign a SelectionList that
is not associated with this widget's datatype.");
this.selectionList = selectionList;
@@ -86,6 +95,7 @@
}
public void addValueChangedListener(ValueChangedListener listener) {
+ checkMutable();
this.listener = WidgetEventMulticaster.add(this.listener, listener);
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractDatatypeWidgetDefinitionBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractDatatypeWidgetDefinitionBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractDatatypeWidgetDefinitionBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractDatatypeWidgetDefinitionBuilder.java
Thu Feb 24 09:02:09 2005
@@ -15,11 +15,18 @@
*/
package org.apache.cocoon.forms.formmodel;
+import java.util.Iterator;
+import java.util.Locale;
+
import org.apache.avalon.framework.service.ServiceSelector;
import org.apache.cocoon.forms.Constants;
+import org.apache.cocoon.forms.datatype.Datatype;
import org.apache.cocoon.forms.datatype.SelectionList;
import org.apache.cocoon.forms.datatype.SelectionListBuilder;
+import org.apache.cocoon.forms.datatype.convertor.ConversionResult;
+import org.apache.cocoon.forms.event.ValueChangedListener;
import org.apache.cocoon.forms.util.DomHelper;
+import org.apache.cocoon.i18n.I18nUtils;
import org.w3c.dom.Element;
/**
@@ -29,13 +36,47 @@
*/
public abstract class AbstractDatatypeWidgetDefinitionBuilder extends
AbstractWidgetDefinitionBuilder {
- /**
- * @return true if a selectionlist has actually been build.
- */
- protected boolean buildSelectionList(Element widgetElement,
AbstractDatatypeWidgetDefinition widget) throws Exception {
+ protected void setupDefinition(Element widgetElement,
AbstractDatatypeWidgetDefinition definition) throws Exception {
+ super.setupDefinition(widgetElement, definition);
+ // parse "label", "hint", etc.
+ setDisplayData(widgetElement, definition);
+
+ // parse "on-value-changed"
+ Iterator iter = buildEventListeners(widgetElement, "on-value-changed",
ValueChangedListener.class).iterator();
+ while (iter.hasNext()) {
+
definition.addValueChangedListener((ValueChangedListener)iter.next());
+ }
+
+ //---- parse "datatype"
+ Element datatypeElement = DomHelper.getChildElement(widgetElement,
Constants.DEFINITION_NS, "datatype");
+ if (datatypeElement == null) {
+ throw new Exception("A nested datatype element is required for the
widget "
+ + widgetElement.getTagName() + " at " +
DomHelper.getLocation(widgetElement));
+ }
+
+ Datatype datatype = datatypeManager.createDatatype(datatypeElement,
false);
+
+ //---- parse "initial-value"
+ Object initialValue = null;
+ Element initialValueElement = DomHelper.getChildElement(widgetElement,
Constants.DEFINITION_NS, "initial-value", false);
+ if (initialValueElement != null) {
+ String localeValue = DomHelper.getAttribute(initialValueElement,
"locale", null);
+ Locale locale = localeValue == null ? null :
I18nUtils.parseLocale(localeValue);
+ String value = DomHelper.getElementText(initialValueElement);
+ ConversionResult result = datatype.convertFromString(value,
locale);
+ if (!result.isSuccessful()) {
+ throw new Exception("Cannot parse initial value '" + value +
"' at " +
+ DomHelper.getLocation(initialValueElement));
+ }
+ initialValue = result.getResult();
+ }
+
+ definition.setDatatype(datatype, initialValue);
+
+ //---- parse "selection-list"
// FIXME: pass the manager to the definition as a side effect. Should
be removed
// when definition are managed like components.
- widget.service(this.serviceManager);
+ definition.service(this.serviceManager);
Element selectionListElement =
DomHelper.getChildElement(widgetElement, Constants.DEFINITION_NS,
"selection-list");
if (selectionListElement != null) {
@@ -50,18 +91,14 @@
}
builder =
(SelectionListBuilder)builderSelector.select(listType);
- SelectionList list = builder.build(selectionListElement,
widget.getDatatype());
- widget.setSelectionList(list);
+ SelectionList list = builder.build(selectionListElement,
definition.getDatatype());
+ definition.setSelectionList(list);
} finally {
if (builder != null) {
builderSelector.release(builder);
}
this.serviceManager.release(builderSelector);
}
-
- return true;
- } else {
- return false;
}
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidget.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidget.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidget.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidget.java
Thu Feb 24 09:02:09 2005
@@ -23,6 +23,7 @@
import java.util.Map;
import org.apache.cocoon.forms.Constants;
+import org.apache.cocoon.forms.event.CreateEvent;
import org.apache.cocoon.forms.event.WidgetEvent;
import org.apache.cocoon.forms.validation.WidgetValidator;
import org.apache.cocoon.xml.AttributesImpl;
@@ -74,7 +75,7 @@
* looking up case widgets for union widgets.
*/
public void initialize() {
- // Do nothing.
+ ((AbstractWidgetDefinition)getDefinition()).widgetCreated(this);
}
/**
@@ -96,7 +97,7 @@
* @return the widgetDefinition from which this widget was instantiated.
* (@link WidgetDefinition#createInstance()}
*/
- protected abstract WidgetDefinition getDefinition();
+ public abstract WidgetDefinition getDefinition();
/**
* @return the location-information (file, line and column) where this
widget was
@@ -226,11 +227,11 @@
}
public Object getValue() {
- return null;
+ throw new UnsupportedOperationException("Widget " + toString() + " has
no value, at " + getLocation());
}
public void setValue(Object object) {
- throw new RuntimeException("Cannot set the value of widget " +
getRequestParameterName());
+ throw new UnsupportedOperationException("Widget " + toString() + " has
no value, at " + getLocation());
}
public boolean isRequired() {
@@ -244,7 +245,11 @@
* Concrete subclass widgets need to override when supporting event
broadcasting.
*/
public void broadcastEvent(WidgetEvent event) {
- throw new UnsupportedOperationException("Widget " +
this.getRequestParameterName() + " doesn't handle events.");
+ if (event instanceof CreateEvent) {
+
((AbstractWidgetDefinition)getDefinition()).fireCreateEvent((CreateEvent)event);
+ } else {
+ throw new UnsupportedOperationException("Widget " +
this.getRequestParameterName() + " doesn't handle events.");
+ }
}
/**
@@ -459,6 +464,6 @@
if (last != -1) {
className = className.substring(last+1);
}
- return className + "@" + getRequestParameterName();
+ return className + "-" + getRequestParameterName();
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinition.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinition.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinition.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinition.java
Thu Feb 24 09:02:09 2005
@@ -42,6 +42,8 @@
//TODO consider final on these
private String location = null;
private String id;
+ /** the definition is mutable when being built */
+ private boolean mutable = true;
/** The initial map of attributes (can be null) */
private Map attributes;
private Map displayData;
@@ -60,11 +62,29 @@
}
return this.formDefinition;
}
+
+ /**
+ * Locks this definition so that it becomes immutable.
+ */
+ public void makeImmutable() {
+ this.mutable = false;
+ }
+
+ /**
+ * Check that this definition is mutable, i.e. is in setup phase. If not,
throw an exception.
+ */
+ protected void checkMutable() {
+ if (!this.mutable) {
+ throw new IllegalStateException("Attempt to modify an immutable
WidgetDefinition");
+ }
+ }
/**
* Sets the parent of this definition
*/
public void setParent(WidgetDefinition definition) {
+ //FIXME(SW) calling checkMutable() here is not possible as
NewDefinition.resolve() does some weird
+ //reorganization of the definition tree
this.parent = definition;
}
@@ -81,10 +101,12 @@
}
public void setState(WidgetState state) {
+ checkMutable();
this.state = state;
}
protected void setLocation(String location) {
+ checkMutable();
this.location = location;
}
@@ -97,10 +119,12 @@
}
protected void setId(String id) {
+ checkMutable();
this.id = id;
}
protected void setAttributes(Map attributes) {
+ checkMutable();
this.attributes = attributes;
}
@@ -113,10 +137,21 @@
}
protected void addCreateListener(CreateListener listener) {
+ checkMutable();
this.createListener = WidgetEventMulticaster.add(this.createListener,
listener);
}
+
+ public void widgetCreated(Widget widget) {
+ if (this.createListener != null) {
+ widget.getForm().addWidgetEvent(new CreateEvent(widget));
+ }
+ }
public void fireCreateEvent(CreateEvent event) {
+ // Check that this widget was created by the current definition
+ if (event.getSourceWidget().getDefinition() != this) {
+ throw new IllegalArgumentException("Widget was not created by this
definition");
+ }
if (this.createListener != null) {
this.createListener.widgetCreated(event);
}
@@ -134,10 +169,12 @@
* @param displayData an association of {name, sax fragment}
*/
public void setDisplayData(Map displayData) {
+ checkMutable();
this.displayData = displayData;
}
public void addValidator(WidgetValidator validator) {
+ checkMutable();
if (this.validators == null) {
this.validators = new ArrayList();
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinitionBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinitionBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinitionBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinitionBuilder.java
Thu Feb 24 09:02:09 2005
@@ -63,8 +63,14 @@
this.widgetValidatorBuilderSelector = (ServiceSelector)
serviceManager.lookup(WidgetValidatorBuilder.ROLE + "Selector");
this.widgetListenerBuilderSelector = (ServiceSelector)
serviceManager.lookup(WidgetListenerBuilder.ROLE + "Selector");
}
+
+ protected void setupDefinition(Element widgetElement,
AbstractWidgetDefinition definition) throws Exception {
+ setCommonProperties(widgetElement, definition);
+ setValidators(widgetElement, definition);
+ setCreateListeners(widgetElement, definition);
+ }
- protected void setCommonProperties(Element widgetElement,
AbstractWidgetDefinition widgetDefinition) throws Exception {
+ private void setCommonProperties(Element widgetElement,
AbstractWidgetDefinition widgetDefinition) throws Exception {
// location
widgetDefinition.setLocation(DomHelper.getLocation(widgetElement));
@@ -164,7 +170,7 @@
widgetDefinition.setDisplayData(displayData);
}
- protected void setValidators(Element widgetElement,
AbstractWidgetDefinition widgetDefinition) throws Exception {
+ private void setValidators(Element widgetElement, AbstractWidgetDefinition
widgetDefinition) throws Exception {
Element validatorElement = DomHelper.getChildElement(widgetElement,
Constants.DEFINITION_NS, "validation");
if (validatorElement != null) {
NodeList list = validatorElement.getChildNodes();
@@ -187,7 +193,7 @@
}
}
- protected void setCreateListeners(Element widgetElement,
AbstractWidgetDefinition widgetDefinition) throws Exception {
+ private void setCreateListeners(Element widgetElement,
AbstractWidgetDefinition widgetDefinition) throws Exception {
Iterator iter = buildEventListeners(widgetElement, "on-create",
CreateListener.class).iterator();
while (iter.hasNext()) {
widgetDefinition.addCreateListener((CreateListener)iter.next());
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Action.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Action.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Action.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Action.java
Thu Feb 24 09:02:09 2005
@@ -40,7 +40,7 @@
this.definition = definition;
}
- protected WidgetDefinition getDefinition() {
+ public WidgetDefinition getDefinition() {
return this.definition;
}
@@ -125,8 +125,13 @@
}
public void broadcastEvent(WidgetEvent event) {
- this.definition.fireActionEvent((ActionEvent)event);
- fireActionEvent((ActionEvent)event);
+ if (event instanceof ActionEvent) {
+ this.definition.fireActionEvent((ActionEvent)event);
+ fireActionEvent((ActionEvent)event);
+ } else {
+ // Other kinds of events
+ super.broadcastEvent(event);
+ }
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ActionDefinition.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ActionDefinition.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ActionDefinition.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ActionDefinition.java
Thu Feb 24 09:02:09 2005
@@ -41,6 +41,7 @@
}
public void addActionListener(ActionListener listener) {
+ checkMutable();
this.listener = WidgetEventMulticaster.add(this.listener, listener);
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ActionDefinitionBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ActionDefinitionBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ActionDefinitionBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ActionDefinitionBuilder.java
Thu Feb 24 09:02:09 2005
@@ -19,6 +19,7 @@
import org.apache.cocoon.forms.event.ActionListener;
import org.apache.cocoon.forms.util.DomHelper;
+import org.apache.cocoon.util.log.DeprecationLogger;
import org.w3c.dom.Element;
/**
@@ -27,23 +28,36 @@
* @version $Id$
*/
public class ActionDefinitionBuilder extends AbstractWidgetDefinitionBuilder {
+
public WidgetDefinition buildWidgetDefinition(Element widgetElement)
throws Exception {
- ActionDefinition actionDefinition = createDefinition();
- setCommonProperties(widgetElement, actionDefinition);
- setDisplayData(widgetElement, actionDefinition);
+ ActionDefinition definition = new ActionDefinition();
+ setupDefinition(widgetElement, definition);
+ definition.makeImmutable();
+ return definition;
+ }
+
+ protected void setupDefinition(Element widgetElement, ActionDefinition
definition) throws Exception {
+ super.setupDefinition(widgetElement, definition);
+
+ setDisplayData(widgetElement, definition);
- String actionCommand = DomHelper.getAttribute(widgetElement,
"action-command");
- actionDefinition.setActionCommand(actionCommand);
+ // Get the "command" optional attribute
+ String actionCommand = DomHelper.getAttribute(widgetElement,
"command", null);
+
+ // If unspecified, check the deprecated "action-command" deprecated
attribute
+ if (actionCommand == null) {
+ actionCommand = DomHelper.getAttribute(widgetElement,
"action-command", null);
+ if (actionCommand != null) {
+ DeprecationLogger.log("The 'action-command' attribute is
deprecated and replaced by 'command', at " +
+ DomHelper.getLocation(widgetElement));
+ }
+ }
+
+ definition.setActionCommand(actionCommand);
Iterator iter = buildEventListeners(widgetElement, "on-action",
ActionListener.class).iterator();
while (iter.hasNext()) {
- actionDefinition.addActionListener((ActionListener)iter.next());
+ definition.addActionListener((ActionListener)iter.next());
}
-
- return actionDefinition;
- }
-
- protected ActionDefinition createDefinition() {
- return new ActionDefinition();
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AggregateFieldDefinition.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AggregateFieldDefinition.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AggregateFieldDefinition.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AggregateFieldDefinition.java
Thu Feb 24 09:02:09 2005
@@ -66,6 +66,7 @@
public void addWidgetDefinition(WidgetDefinition widgetDefinition) throws
DuplicateIdException {
+ checkMutable();
container.addWidgetDefinition(widgetDefinition);
}
@@ -74,6 +75,7 @@
}
protected void setCombineExpression(Expression expression) {
+ checkMutable();
combineExpr = expression;
}
@@ -82,6 +84,7 @@
}
protected void setSplitPattern(Pattern pattern, String regexp) {
+ checkMutable();
this.splitPattern = pattern;
this.splitRegexp = regexp;
}
@@ -99,10 +102,12 @@
}
protected void setSplitFailMessage(XMLizable splitFailMessage) {
+ checkMutable();
this.splitFailMessage = splitFailMessage;
}
protected void addSplitMapping(int group, String fieldId) {
+ checkMutable();
splitMappings.add(new SplitMapping(group, fieldId));
}
@@ -112,6 +117,8 @@
public Widget createInstance() {
AggregateField aggregateField = new AggregateField(this);
+ // Set the initial selection list, if any
+ aggregateField.setSelectionList(getSelectionList());
Iterator fieldDefinitionIt =
container.getWidgetDefinitions().iterator();
while (fieldDefinitionIt.hasNext()) {
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AggregateFieldDefinitionBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AggregateFieldDefinitionBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AggregateFieldDefinitionBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/AggregateFieldDefinitionBuilder.java
Thu Feb 24 09:02:09 2005
@@ -34,15 +34,23 @@
public class AggregateFieldDefinitionBuilder extends FieldDefinitionBuilder {
public WidgetDefinition buildWidgetDefinition(Element widgetElement)
throws Exception {
- AggregateFieldDefinition aggregateDefinition = new
AggregateFieldDefinition();
- buildWidgetDefinition(aggregateDefinition, widgetElement);
+ AggregateFieldDefinition definition = new AggregateFieldDefinition();
+ setupDefinition(widgetElement, definition);
+ definition.makeImmutable();
+ return definition;
+ }
+
+ protected void setupDefinition(Element widgetElement,
AggregateFieldDefinition definition) throws Exception {
+
+ // parse the field definition
+ super.setupDefinition(widgetElement, definition);
// make children fields
Element widgetsElement = DomHelper.getChildElement(widgetElement,
Constants.DEFINITION_NS, "widgets", true);
Element[] fieldElements = DomHelper.getChildElements(widgetsElement,
Constants.DEFINITION_NS, "field");
for (int i = 0; i < fieldElements.length; i++) {
FieldDefinition fieldDefinition =
(FieldDefinition)buildAnotherWidgetDefinition(fieldElements[i]);
- aggregateDefinition.addWidgetDefinition(fieldDefinition);
+ definition.addWidgetDefinition(fieldDefinition);
}
// compile splitpattern
@@ -55,7 +63,7 @@
} catch (MalformedPatternException e) {
throw new Exception("Invalid regular expression at " +
DomHelper.getLocation(splitElement) + ": " + e.getMessage());
}
- aggregateDefinition.setSplitPattern(pattern, patternString);
+ definition.setSplitPattern(pattern, patternString);
// read split mappings
Element[] mapElements = DomHelper.getChildElements(splitElement,
Constants.DEFINITION_NS, "map");
@@ -64,7 +72,7 @@
int group = DomHelper.getAttributeAsInteger(mapElements[i],
"group");
String field = DomHelper.getAttribute(mapElements[i], "field");
// check that this field exists
- if (!aggregateDefinition.hasWidget(field)) {
+ if (!definition.hasWidget(field)) {
throw new Exception("Unkwon widget id \"" + field + "\", at " +
DomHelper.getLocation(mapElements[i]));
}
@@ -73,14 +81,14 @@
DomHelper.getLocation(mapElements[i]));
}
encounteredFieldMappings.add(field);
- aggregateDefinition.addSplitMapping(group, field);
+ definition.addSplitMapping(group, field);
}
// read split fail message (if any)
Element failMessageElement = DomHelper.getChildElement(splitElement,
Constants.DEFINITION_NS, "failmessage");
if (failMessageElement != null) {
XMLizable failMessage =
DomHelper.compileElementContent(failMessageElement);
- aggregateDefinition.setSplitFailMessage(failMessage);
+ definition.setSplitFailMessage(failMessage);
}
// compile combine expression
@@ -93,13 +101,11 @@
throw new Exception("Problem with combine expression defined at " +
DomHelper.getLocation(combineElement) + ": " +
e.getMessage());
}
- Class clazz = aggregateDefinition.getDatatype().getTypeClass();
+ Class clazz = definition.getDatatype().getTypeClass();
if (combineExpr.getResultType() != null &&
!clazz.isAssignableFrom(combineExpr.getResultType())) {
throw new Exception("The result of the combine expression should
be " + clazz.getName() + ", at " +
DomHelper.getLocation(combineElement));
}
- aggregateDefinition.setCombineExpression(combineExpr);
-
- return aggregateDefinition;
+ definition.setCombineExpression(combineExpr);
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanField.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanField.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanField.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanField.java
Thu Feb 24 09:02:09 2005
@@ -58,9 +58,17 @@
this.definition = definition;
}
- protected WidgetDefinition getDefinition() {
+ public WidgetDefinition getDefinition() {
return this.definition;
}
+
+ public void initialize() {
+ Boolean value = this.definition.getInitialValue();
+ if (value != null) {
+ setValue(value);
+ }
+ super.initialize();
+ }
public void readFromRequest(FormContext formContext) {
if (!getCombinedState().isAcceptingInputs()) {
@@ -76,17 +84,6 @@
}
/**
- * Always return <code>true</code> (an action has no validation)
- *
- * TODO is there a use case for boolean fields having validators?
- */
- public boolean validate() {
- // a boolean field is always valid
- //return true;
- return super.validate();
- }
-
- /**
* Returns the validation error, if any. There will always be a validation
error in case the
* [EMAIL PROTECTED] #validate()} method returned false.
*/
@@ -169,7 +166,12 @@
}
public void broadcastEvent(WidgetEvent event) {
- this.definition.fireValueChangedEvent((ValueChangedEvent)event);
- fireValueChangedEvent((ValueChangedEvent)event);
+ if (event instanceof ValueChangedEvent) {
+ this.definition.fireValueChangedEvent((ValueChangedEvent)event);
+ fireValueChangedEvent((ValueChangedEvent)event);
+ } else {
+ // Other kinds of events
+ super.broadcastEvent(event);
+ }
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanFieldDefinition.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanFieldDefinition.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanFieldDefinition.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanFieldDefinition.java
Thu Feb 24 09:02:09 2005
@@ -26,12 +26,24 @@
*/
public class BooleanFieldDefinition extends AbstractWidgetDefinition {
private ValueChangedListener listener;
+
+ private Boolean initialValue;
public Widget createInstance() {
return new BooleanField(this);
}
+ public void setInitialValue(Boolean value) {
+ checkMutable();
+ this.initialValue = value;
+ }
+
+ public Boolean getInitialValue() {
+ return this.initialValue;
+ }
+
public void addValueChangedListener(ValueChangedListener listener) {
+ checkMutable();
this.listener = WidgetEventMulticaster.add(this.listener, listener);
}
@@ -46,6 +58,7 @@
}
public void setRequired(boolean required) {
+ checkMutable();
throw new UnsupportedOperationException("The property 'required' is
not available on widgets of type booleanfield.");
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanFieldDefinitionBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanFieldDefinitionBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanFieldDefinitionBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/BooleanFieldDefinitionBuilder.java
Thu Feb 24 09:02:09 2005
@@ -17,7 +17,9 @@
import java.util.Iterator;
+import org.apache.cocoon.forms.Constants;
import org.apache.cocoon.forms.event.ValueChangedListener;
+import org.apache.cocoon.forms.util.DomHelper;
import org.w3c.dom.Element;
/**
@@ -25,18 +27,24 @@
*
* @version $Id$
*/
-public class BooleanFieldDefinitionBuilder extends
AbstractWidgetDefinitionBuilder {
+public final class BooleanFieldDefinitionBuilder extends
AbstractWidgetDefinitionBuilder {
public WidgetDefinition buildWidgetDefinition(Element widgetElement)
throws Exception {
BooleanFieldDefinition definition = new BooleanFieldDefinition();
- setCommonProperties(widgetElement, definition);
+
+ super.setupDefinition(widgetElement, definition);
setDisplayData(widgetElement, definition);
- setValidators(widgetElement, definition);
Iterator iter = buildEventListeners(widgetElement, "on-value-changed",
ValueChangedListener.class).iterator();
while (iter.hasNext()) {
definition.addValueChangedListener((ValueChangedListener)iter.next());
}
- // TODO default value
+ // Initial value
+ Element initialValueElement = DomHelper.getChildElement(widgetElement,
Constants.DEFINITION_NS, "initial-value", false);
+ if (initialValueElement != null) {
+ Boolean initialValue =
Boolean.valueOf(DomHelper.getElementText(initialValueElement));
+ }
+
+ definition.makeImmutable();
return definition;
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ClassDefinitionBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ClassDefinitionBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ClassDefinitionBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/ClassDefinitionBuilder.java
Thu Feb 24 09:02:09 2005
@@ -24,13 +24,13 @@
*
* @version $Id$
*/
-public class ClassDefinitionBuilder extends AbstractWidgetDefinitionBuilder {
+public final class ClassDefinitionBuilder extends
AbstractWidgetDefinitionBuilder {
public WidgetDefinition buildWidgetDefinition(Element element) throws
Exception {
ClassDefinition definition = new ClassDefinition();
- setCommonProperties(element, definition);
+
+ super.setupDefinition(element, definition);
setDisplayData(element, definition);
- setValidators(element, definition);
Element widgetsElement = DomHelper.getChildElement(element,
Constants.DEFINITION_NS, "widgets", true);
// All child elements of the widgets element are widgets
@@ -41,6 +41,7 @@
definition.addWidgetDefinition(widgetDefinition);
}
+ definition.makeImmutable();
return definition;
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java
Thu Feb 24 09:02:09 2005
@@ -125,9 +125,17 @@
return this.fieldDefinition;
}
- protected WidgetDefinition getDefinition() {
+ public WidgetDefinition getDefinition() {
return this.fieldDefinition;
}
+
+ public void initialize() {
+ Object value = this.fieldDefinition.getInitialValue();
+ if (value != null) {
+ setValue(value);
+ }
+ super.initialize();
+ }
public Object getValue() {
// if getValue() is called on this field while we're validating, then
it's because a validation
@@ -197,8 +205,11 @@
return;
String newEnteredValue =
formContext.getRequest().getParameter(getRequestParameterName());
- // FIXME: Should we consider only non-null values, which allows to
- // split a form across several screens?
+ // FIXME: Should we consider only non-null values?
+ // Although distinguishing an empty value (input present but blank)
from a null value
+ // (input not present in the form) is possible, this distinction is
not possible for
+ // several other kinds of widgets such as BooleanField or
MultiValueField. So we keep
+ // it consistent with other widgets.
//if (newEnteredValue != null) {
readFromRequest(newEnteredValue);
//}
@@ -398,8 +409,6 @@
// generate selection list, if any
if (selectionList != null) {
selectionList.generateSaxFragment(contentHandler, locale);
- } else if (getFieldDefinition().getSelectionList() != null) {
-
getFieldDefinition().getSelectionList().generateSaxFragment(contentHandler,
locale);
}
// include some info about the datatype
@@ -481,7 +490,12 @@
}
public void broadcastEvent(WidgetEvent event) {
- getFieldDefinition().fireValueChangedEvent((ValueChangedEvent)event);
- fireValueChangedEvent((ValueChangedEvent)event);
+ if (event instanceof ValueChangedEvent) {
+
getFieldDefinition().fireValueChangedEvent((ValueChangedEvent)event);
+ fireValueChangedEvent((ValueChangedEvent)event);
+ } else {
+ // Other kinds of events
+ super.broadcastEvent(event);
+ }
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FieldDefinition.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FieldDefinition.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FieldDefinition.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FieldDefinition.java
Thu Feb 24 09:02:09 2005
@@ -15,7 +15,6 @@
*/
package org.apache.cocoon.forms.formmodel;
-import org.apache.cocoon.forms.event.CreateEvent;
/**
* The [EMAIL PROTECTED] WidgetDefinition} part of a Field widget, see [EMAIL
PROTECTED] Field} for more information.
@@ -27,9 +26,8 @@
public Widget createInstance() {
Field field = new Field(this);
- if (this.createListener != null) {
- this.createListener.widgetCreated(new CreateEvent(field));
- }
+ // Set the initial selection list, if any
+ field.setSelectionList(getSelectionList());
return field;
}
@@ -38,6 +36,7 @@
}
public void setRequired(boolean required) {
+ checkMutable();
this.required = required;
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FieldDefinitionBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FieldDefinitionBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FieldDefinitionBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FieldDefinitionBuilder.java
Thu Feb 24 09:02:09 2005
@@ -15,11 +15,6 @@
*/
package org.apache.cocoon.forms.formmodel;
-import java.util.Iterator;
-
-import org.apache.cocoon.forms.Constants;
-import org.apache.cocoon.forms.datatype.Datatype;
-import org.apache.cocoon.forms.event.ValueChangedListener;
import org.apache.cocoon.forms.util.DomHelper;
import org.w3c.dom.Element;
@@ -31,36 +26,17 @@
public class FieldDefinitionBuilder extends
AbstractDatatypeWidgetDefinitionBuilder {
public WidgetDefinition buildWidgetDefinition(Element widgetElement)
throws Exception {
- FieldDefinition fieldDefinition = new FieldDefinition();
- buildWidgetDefinition(fieldDefinition, widgetElement);
- return fieldDefinition;
+ FieldDefinition definition = new FieldDefinition();
+ setupDefinition(widgetElement, definition);
+ definition.makeImmutable();
+ return definition;
}
- protected void buildWidgetDefinition(FieldDefinition fieldDefinition,
Element widgetElement) throws Exception {
- setCommonProperties(widgetElement, fieldDefinition);
-
- Element datatypeElement = DomHelper.getChildElement(widgetElement,
Constants.DEFINITION_NS, "datatype");
- if (datatypeElement == null) {
- throw new Exception("A nested datatype element is required for the
widget "
- + widgetElement.getTagName() + " with id \"" +
fieldDefinition.getId()
- + "\" at " +
DomHelper.getLocation(widgetElement));
- }
-
- Datatype datatype = datatypeManager.createDatatype(datatypeElement,
false);
- fieldDefinition.setDatatype(datatype);
-
- buildSelectionList(widgetElement, fieldDefinition);
-
- Iterator iter = buildEventListeners(widgetElement, "on-value-changed",
ValueChangedListener.class).iterator();
- while (iter.hasNext()) {
-
fieldDefinition.addValueChangedListener((ValueChangedListener)iter.next());
- }
-
- setDisplayData(widgetElement, fieldDefinition);
- setValidators(widgetElement, fieldDefinition);
- setCreateListeners(widgetElement, fieldDefinition);
-
+ protected void setupDefinition(Element widgetElement, FieldDefinition
definition) throws Exception {
+ super.setupDefinition(widgetElement, definition);
+
+ // parse "@required"
boolean required = DomHelper.getAttributeAsBoolean(widgetElement,
"required", false);
- fieldDefinition.setRequired(required);
+ definition.setRequired(required);
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Form.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Form.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Form.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Form.java
Thu Feb 24 09:02:09 2005
@@ -56,8 +56,28 @@
super(definition);
this.definition = definition;
}
+
+ /**
+ * Initialize the form by recursively initializing all its children. Any
events occuring within the
+ * initialization phase are buffered and fired after initialization is
complete, so that any action
+ * from a widget on another one occurs after that other widget has been
given the opportunity to
+ * initialize itself.
+ */
+ public void initialize() {
+ try {
+ // Start buffering events
+ this.bufferEvents = true;
+ super.initialize();
+ // Fire events, still buffering them: this ensures they will be
handled in the same
+ // order as they were added.
+ fireEvents();
+ } finally {
+ // Stop buffering events
+ this.bufferEvents = false;
+ }
+ }
- protected WidgetDefinition getDefinition() {
+ public WidgetDefinition getDefinition() {
return this.definition;
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FormDefinitionBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FormDefinitionBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FormDefinitionBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/FormDefinitionBuilder.java
Thu Feb 24 09:02:09 2005
@@ -24,13 +24,13 @@
*
* @version $Id$
*/
-public class FormDefinitionBuilder extends AbstractWidgetDefinitionBuilder {
+public final class FormDefinitionBuilder extends
AbstractWidgetDefinitionBuilder {
public WidgetDefinition buildWidgetDefinition(Element formElement) throws
Exception {
FormDefinition formDefinition = new FormDefinition();
- setCommonProperties(formElement, formDefinition);
+
+ super.setupDefinition(formElement, formDefinition);
setDisplayData(formElement, formDefinition);
- setValidators(formElement, formDefinition);
Element widgetsElement = DomHelper.getChildElement(formElement,
Constants.DEFINITION_NS, "widgets", true);
// All child elements of the widgets element are widgets
@@ -43,6 +43,7 @@
formDefinition.resolve();
+ formDefinition.makeImmutable();
return formDefinition;
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Group.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Group.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Group.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Group.java
Thu Feb 24 09:02:09 2005
@@ -31,7 +31,7 @@
this.definition = definition;
}
- protected WidgetDefinition getDefinition() {
+ public WidgetDefinition getDefinition() {
return this.definition;
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/GroupDefinitionBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/GroupDefinitionBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/GroupDefinitionBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/GroupDefinitionBuilder.java
Thu Feb 24 09:02:09 2005
@@ -24,13 +24,13 @@
*
* @version $Id$
*/
-public class GroupDefinitionBuilder extends AbstractWidgetDefinitionBuilder {
+public final class GroupDefinitionBuilder extends
AbstractWidgetDefinitionBuilder {
public WidgetDefinition buildWidgetDefinition(Element element) throws
Exception {
GroupDefinition definition = new GroupDefinition();
- setCommonProperties(element, definition);
+
+ super.setupDefinition(element, definition);
setDisplayData(element, definition);
- setValidators(element, definition);
Element widgetsElement = DomHelper.getChildElement(element,
Constants.DEFINITION_NS, "widgets", true);
// All child elements of the widgets element are widgets
@@ -41,6 +41,7 @@
definition.addWidgetDefinition(widgetDefinition);
}
+ definition.makeImmutable();
return definition;
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Messages.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Messages.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Messages.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Messages.java
Thu Feb 24 09:02:09 2005
@@ -48,7 +48,7 @@
this.definition = definition;
}
- protected WidgetDefinition getDefinition() {
+ public WidgetDefinition getDefinition() {
return this.definition;
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MessagesDefinitionBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MessagesDefinitionBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MessagesDefinitionBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MessagesDefinitionBuilder.java
Thu Feb 24 09:02:09 2005
@@ -22,11 +22,12 @@
*
* @version $Id$
*/
-public class MessagesDefinitionBuilder extends AbstractWidgetDefinitionBuilder
{
+public final class MessagesDefinitionBuilder extends
AbstractWidgetDefinitionBuilder {
public WidgetDefinition buildWidgetDefinition(Element widgetElement)
throws Exception {
MessagesDefinition messagesDefinition = new MessagesDefinition();
- setCommonProperties(widgetElement, messagesDefinition);
+ super.setupDefinition(widgetElement, messagesDefinition);
setDisplayData(widgetElement, messagesDefinition);
+ messagesDefinition.makeImmutable();
return messagesDefinition;
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueField.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueField.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueField.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueField.java
Thu Feb 24 09:02:09 2005
@@ -49,7 +49,7 @@
*
* @version $Id$
*/
-public class MultiValueField extends AbstractWidget implements
ValidationErrorAware, SelectableWidget {
+public class MultiValueField extends AbstractWidget implements
ValidationErrorAware, SelectableWidget, DataWidget {
private static final String MULTIVALUEFIELD_EL = "multivaluefield";
private static final String VALUES_EL = "values";
@@ -68,7 +68,7 @@
this.definition = definition;
}
- protected WidgetDefinition getDefinition() {
+ public WidgetDefinition getDefinition() {
return definition;
}
@@ -147,11 +147,7 @@
contentHandler.endElement(Constants.INSTANCE_NS, VALUES_EL,
Constants.INSTANCE_PREFIX_COLON + VALUES_EL);
// the selection list (a MultiValueField has per definition always a
SelectionList)
- if (this.selectionList != null) {
- this.selectionList.generateSaxFragment(contentHandler, locale);
- } else {
- definition.getSelectionList().generateSaxFragment(contentHandler,
locale);
- }
+ this.selectionList.generateSaxFragment(contentHandler, locale);
// validation message element
if (validationError != null) {
@@ -190,8 +186,11 @@
* @param selectionList The new selection list.
*/
public void setSelectionList(SelectionList selectionList) {
- if (selectionList != null &&
- selectionList.getDatatype() != null &&
+ if (selectionList == null) {
+ throw new IllegalArgumentException("An MultiValueField's selection
list cannot be null.");
+ }
+
+ if (selectionList.getDatatype() != null &&
selectionList.getDatatype() != definition.getDatatype()) {
throw new RuntimeException("Tried to assign a SelectionList that
is not associated with this widget's datatype.");
@@ -233,7 +232,12 @@
}
public void broadcastEvent(WidgetEvent event) {
- this.definition.fireValueChangedEvent((ValueChangedEvent)event);
+ if (event instanceof ValueChangedEvent) {
+ this.definition.fireValueChangedEvent((ValueChangedEvent)event);
+ } else {
+ // Other kinds of events
+ super.broadcastEvent(event);
+ }
}
public ValidationError getValidationError() {
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinition.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinition.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinition.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinition.java
Thu Feb 24 09:02:09 2005
@@ -22,7 +22,10 @@
*/
public class MultiValueFieldDefinition extends FieldDefinition {
public Widget createInstance() {
- return new MultiValueField(this);
+ MultiValueField field = new MultiValueField(this);
+ // Set the initial selection list, if any
+ field.setSelectionList(getSelectionList());
+ return field;
}
public void setRequired(boolean required) {
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinitionBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinitionBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinitionBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinitionBuilder.java
Thu Feb 24 09:02:09 2005
@@ -15,13 +15,8 @@
*/
package org.apache.cocoon.forms.formmodel;
-import java.util.Iterator;
-
-import org.w3c.dom.Element;
-import org.apache.cocoon.forms.Constants;
-import org.apache.cocoon.forms.datatype.Datatype;
-import org.apache.cocoon.forms.event.ValueChangedListener;
import org.apache.cocoon.forms.util.DomHelper;
+import org.w3c.dom.Element;
/**
* Builds [EMAIL PROTECTED] MultiValueFieldDefinition}s.
@@ -29,30 +24,14 @@
* @version $Id$
*/
public class MultiValueFieldDefinitionBuilder extends
AbstractDatatypeWidgetDefinitionBuilder {
+
public WidgetDefinition buildWidgetDefinition(Element widgetElement)
throws Exception {
MultiValueFieldDefinition definition = new MultiValueFieldDefinition();
- setCommonProperties(widgetElement, definition);
- setDisplayData(widgetElement, definition);
- setValidators(widgetElement, definition);
-
- Element datatypeElement = DomHelper.getChildElement(widgetElement,
Constants.DEFINITION_NS, "datatype");
- if (datatypeElement == null) {
- throw new Exception("A nested datatype element is required for the
widget "
- + widgetElement.getTagName() + " with id \"" +
definition.getId()
- + "\" at " +
DomHelper.getLocation(widgetElement));
- }
-
- Datatype datatype = datatypeManager.createDatatype(datatypeElement,
true);
- definition.setDatatype(datatype);
-
- boolean hasSelectionList = buildSelectionList(widgetElement,
definition);
- if (!hasSelectionList)
- throw new Exception("Error: multivaluefields always require a
selectionlist at " + DomHelper.getLocation(widgetElement));
-
- Iterator iter = buildEventListeners(widgetElement, "on-value-changed",
ValueChangedListener.class).iterator();
- while (iter.hasNext()) {
-
definition.addValueChangedListener((ValueChangedListener)iter.next());
- }
+ setupDefinition(widgetElement, definition);
+ if (definition.getSelectionList() == null)
+ throw new Exception("Error: multivaluefield always require a
selectionlist at " +
+ DomHelper.getLocation(widgetElement));
+ definition.makeImmutable();
return definition;
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/NewDefinitionBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/NewDefinitionBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/NewDefinitionBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/NewDefinitionBuilder.java
Thu Feb 24 09:02:09 2005
@@ -26,7 +26,8 @@
public WidgetDefinition buildWidgetDefinition(Element element) throws
Exception {
NewDefinition definition = new NewDefinition();
- setCommonProperties(element, definition);
+ super.setupDefinition(element, definition);
+ definition.makeImmutable();
return definition;
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Output.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Output.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Output.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Output.java
Thu Feb 24 09:02:09 2005
@@ -51,7 +51,7 @@
this.definition = definition;
}
- protected WidgetDefinition getDefinition() {
+ public WidgetDefinition getDefinition() {
return definition;
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/OutputDefinitionBuilder.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/OutputDefinitionBuilder.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/OutputDefinitionBuilder.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/OutputDefinitionBuilder.java
Thu Feb 24 09:02:09 2005
@@ -17,9 +17,6 @@
package org.apache.cocoon.forms.formmodel;
import org.w3c.dom.Element;
-import org.apache.cocoon.forms.Constants;
-import org.apache.cocoon.forms.datatype.Datatype;
-import org.apache.cocoon.forms.util.DomHelper;
/**
* Builds [EMAIL PROTECTED] OutputDefinition}s.
@@ -27,22 +24,11 @@
* @version $Id$
*/
public class OutputDefinitionBuilder extends
AbstractDatatypeWidgetDefinitionBuilder {
+
public WidgetDefinition buildWidgetDefinition(Element widgetElement)
throws Exception {
OutputDefinition definition = new OutputDefinition();
- setCommonProperties(widgetElement, definition);
-
- Element datatypeElement = DomHelper.getChildElement(widgetElement,
Constants.DEFINITION_NS, "datatype");
- if (datatypeElement == null) {
- throw new Exception("A nested datatype element is required for the
widget "
- + widgetElement.getTagName() + " with id \"" +
definition.getId()
- + "\" at " +
DomHelper.getLocation(widgetElement));
- }
-
- Datatype datatype = datatypeManager.createDatatype(datatypeElement,
false);
- definition.setDatatype(datatype);
-
- setDisplayData(widgetElement, definition);
-
+ setupDefinition(widgetElement, definition);
+ definition.makeImmutable();
return definition;
}
}
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Repeater.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Repeater.java?view=diff&r1=155209&r2=155210
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Repeater.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Repeater.java
Thu Feb 24 09:02:09 2005
@@ -50,13 +50,23 @@
public Repeater(RepeaterDefinition repeaterDefinition) {
super(repeaterDefinition);
this.definition = repeaterDefinition;
- // setup initial size
- removeRows();
+ // Setup initial size. Do not call addRow() as it will call
initialize()
+ // on the newly created rows, which is not what we want here.
+ for (int i = 0; i < this.definition.getInitialSize(); i++) {
+ rows.add(new RepeaterRow(definition));
+ }
}
public WidgetDefinition getDefinition() {
return definition;
}
+
+ public void initialize() {
+ for (int i = 0; i < this.rows.size(); i++) {
+ ((RepeaterRow)rows.get(i)).initialize();
+ }
+ super.initialize();
+ }
public int getSize() {
return rows.size();
@@ -157,11 +167,19 @@
this.rows.set(index, temp);
}
}
-
+
/**
- * Clears all rows from the repeater and go back to the initial size
+ * @deprecated [EMAIL PROTECTED] #clear()}
+ *
*/
public void removeRows() {
+ clear();
+ }
+
+ /**
+ * Clears all rows from the repeater and go back to the initial size
+ */
+ public void clear() {
rows.clear();
// and reset to initial size
@@ -321,7 +339,7 @@
// return Repeater.this.getLocation();
// }
//
- protected WidgetDefinition getDefinition() {
+ public WidgetDefinition getDefinition() {
return Repeater.this.definition;
}
@@ -333,14 +351,16 @@
public Form getForm() {
return Repeater.this.getForm();
}
-
-// public String getNamespace() {
-// return getParent().getNamespace() + "." + getId();
-// }
-//
-// public String getFullyQualifiedId() {
-// return getParent().getNamespace() + "." + getId();
-// }
+
+ public void initialize() {
+ // Initialize children but don't call super.initialize() that
would call the repeater's
+ // on-create handlers for each row.
+ // FIXME(SW): add an 'on-create-row' handler?
+ Iterator it = this.getChildren();
+ while(it.hasNext()) {
+ ((Widget)it.next()).initialize();
+ }
+ }
public boolean validate() {
// Validate only child widtgets, as the definition's validators
are those of the parent repeater
@@ -365,19 +385,6 @@
throws SAXException {
// this widget has its display-data generated in the context of
the repeater
}
-
-// //TODO: reuse available implementation on superclass
-// public void generateSaxFragment(ContentHandler contentHandler,
Locale locale) throws SAXException {
-// AttributesImpl rowAttrs = new AttributesImpl();
-// rowAttrs.addCDATAAttribute("id", getFullyQualifiedId());
-// contentHandler.startElement(Constants.INSTANCE_NS, ROW_EL,
Constants.INSTANCE_PREFIX_COLON + ROW_EL, rowAttrs);
-// Iterator widgetIt = widgets.iterator();
-// while (widgetIt.hasNext()) {
-// Widget widget = (Widget)widgetIt.next();
-// widget.generateSaxFragment(contentHandler, locale);
-// }
-// contentHandler.endElement(Constants.INSTANCE_NS, ROW_EL,
Constants.INSTANCE_PREFIX_COLON + ROW_EL);
-// }
public void broadcastEvent(WidgetEvent event) {
throw new UnsupportedOperationException("Widget " +
this.getRequestParameterName() + " doesn't handle events.");