You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by sy...@apache.org on 2005/09/16 15:48:35 UTC
svn commit: r289538 [4/8] - in /cocoon: blocks/forms/trunk/WEB-INF/xconf/
blocks/forms/trunk/conf/ blocks/forms/trunk/java/org/apache/cocoon/forms/
blocks/forms/trunk/java/org/apache/cocoon/forms/binding/
blocks/forms/trunk/java/org/apache/cocoon/forms...
Added: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImportDefinitionBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImportDefinitionBuilder.java?rev=289538&view=auto
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImportDefinitionBuilder.java (added)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImportDefinitionBuilder.java Fri Sep 16 06:46:22 2005
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2005 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.
+ */
+package org.apache.cocoon.forms.formmodel;
+
+import org.apache.cocoon.forms.formmodel.library.Library;
+import org.apache.cocoon.forms.util.DomHelper;
+import org.w3c.dom.Element;
+
+
+/**
+ * @version $Id$
+ */
+public class ImportDefinitionBuilder extends AbstractWidgetDefinitionBuilder {
+
+ public static final String PREFIX_ATTRIBUTE = "prefix";
+ public static final String URI_ATTRIBUTE = "uri";
+
+ /**
+ * Imports a new library
+ */
+ public WidgetDefinition buildWidgetDefinition(Element widgetElement)
+ throws Exception {
+
+ if(this.context == null || this.context.getLocalLibrary() == null)
+ throw new Exception("Import statement seen and context is empty! (at "+DomHelper.getLocation(widgetElement)+")");
+
+ Library lib = this.context.getLocalLibrary();
+ String prefix = DomHelper.getAttribute(widgetElement, PREFIX_ATTRIBUTE);
+ String uri = DomHelper.getAttribute(widgetElement, URI_ATTRIBUTE);
+
+ if(!lib.includeAs(prefix,uri))
+ throw new Exception("Import statement did not succeed (probably used ':' in the prefix?)! (at "+DomHelper.getLocation(widgetElement)+")");
+
+ return null;
+ }
+
+}
Propchange: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImportDefinitionBuilder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/ImportDefinitionBuilder.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/IncompletenessException.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/IncompletenessException.java?rev=289538&view=auto
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/IncompletenessException.java (added)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/IncompletenessException.java Fri Sep 16 06:46:22 2005
@@ -0,0 +1,45 @@
+/*
+ * Copyright 1999-2005 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.
+ */
+package org.apache.cocoon.forms.formmodel;
+
+import org.apache.avalon.framework.CascadingException;
+
+/**
+ * @version $Id$
+ */
+public class IncompletenessException extends CascadingException {
+
+ private WidgetDefinition causingDefinition = null;
+
+ public IncompletenessException(String message, WidgetDefinition incomplete) {
+ super(message);
+ causingDefinition = incomplete;
+ }
+
+ public IncompletenessException(String message, WidgetDefinition incomplete , Exception e) {
+ super(message, e);
+ causingDefinition = incomplete;
+ }
+
+ public String toString() {
+ String msg = super.toString();
+
+ if(causingDefinition!=null)
+ msg += " (Caused by widget '"+causingDefinition.getId()+"', last modified at "+causingDefinition.getLocation()+")";
+
+ return msg;
+ }
+}
Propchange: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/IncompletenessException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/IncompletenessException.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinition.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinition.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinition.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinition.java Fri Sep 16 06:46:22 2005
@@ -26,6 +26,16 @@
return field;
}
+ /**
+ * checks completeness of this definition
+ */
+ public void checkCompleteness() throws IncompletenessException {
+ super.checkCompleteness();
+
+ if (getSelectionList() == null)
+ throw new IncompletenessException("Error: multivaluefield always require a selectionlist!", this);
+ }
+
public void setRequired(boolean required) {
throw new UnsupportedOperationException("The property 'required' is not available on widgets of type multivalue.");
}
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinitionBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinitionBuilder.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinitionBuilder.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/MultiValueFieldDefinitionBuilder.java Fri Sep 16 06:46:22 2005
@@ -15,7 +15,6 @@
*/
package org.apache.cocoon.forms.formmodel;
-import org.apache.cocoon.forms.util.DomHelper;
import org.w3c.dom.Element;
/**
@@ -28,9 +27,6 @@
public WidgetDefinition buildWidgetDefinition(Element widgetElement) throws Exception {
MultiValueFieldDefinition definition = new MultiValueFieldDefinition();
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/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/NewDefinition.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/NewDefinition.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/NewDefinition.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/NewDefinition.java Fri Sep 16 06:46:22 2005
@@ -40,6 +40,10 @@
private ClassDefinition getClassDefinition() throws Exception {
FormDefinition formDefinition = getFormDefinition();
WidgetDefinition classDefinition = formDefinition.getWidgetDefinition(getId());
+
+ if (classDefinition == null) // not found in local form, try library
+ classDefinition = formDefinition.getLocalLibrary().getDefinition(getId());
+
if (classDefinition == null)
throw new Exception("NewDefinition: Class with id \"" + getId() + "\" does not exist (" + getLocation() + ")");
if (!(classDefinition instanceof ClassDefinition))
@@ -69,9 +73,12 @@
parents.add(this);
while (definitionsIt.hasNext()) {
WidgetDefinition definition = (WidgetDefinition)definitionsIt.next();
+ // Recursively resolve containers
if (definition instanceof ContainerDefinition) {
((ContainerDefinition)definition).resolve(parents, parent);
}
+
+ // Add the current definition if it's not itself a "fd:new"
if (definition instanceof NewDefinition) {
((NewDefinition)definition).resolve(parents, parent);
} else {
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinition.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinition.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinition.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterActionDefinition.java Fri Sep 16 06:46:22 2005
@@ -43,6 +43,22 @@
public RepeaterActionDefinition(String repeaterName) {
this.name = repeaterName;
}
+
+ /**
+ * initialize this definition with the other, sort of like a copy constructor
+ */
+ public void initializeFrom(WidgetDefinition definition) throws Exception {
+ super.initializeFrom(definition);
+
+ if(definition instanceof RepeaterActionDefinition) {
+ RepeaterActionDefinition other = (RepeaterActionDefinition)definition;
+
+ this.name = other.name;
+
+ } else {
+ throw new Exception("Definition to inherit from is not of the right type! (at "+getLocation()+")");
+ }
+ }
public Widget createInstance() {
return new RepeaterAction(this);
@@ -76,6 +92,22 @@
this.selectName = selectName;
}
+ /**
+ * initialize this definition with the other, sort of like a copy constructor
+ */
+ public void initializeFrom(WidgetDefinition definition) throws Exception {
+ super.initializeFrom(definition);
+
+ if(definition instanceof DeleteRowsActionDefinition) {
+ DeleteRowsActionDefinition other = (DeleteRowsActionDefinition)definition;
+
+ this.selectName = other.selectName;
+
+ } else {
+ throw new Exception("Definition to inherit from is not of the right type! (at "+getLocation()+")");
+ }
+ }
+
public boolean hasActionListeners() {
// we always want to be notified
return true;
@@ -124,6 +156,22 @@
public static class InsertRowsActionDefinition extends RepeaterActionDefinition {
private String selectName;
+
+ /**
+ * initialize this definition with the other, sort of like a copy constructor
+ */
+ public void initializeFrom(WidgetDefinition definition) throws Exception {
+ super.initializeFrom(definition);
+
+ if(definition instanceof InsertRowsActionDefinition) {
+ InsertRowsActionDefinition other = (InsertRowsActionDefinition)definition;
+
+ this.selectName = other.selectName;
+
+ } else {
+ throw new Exception("Definition to inherit from is not of the right type! (at "+getLocation()+")");
+ }
+ }
public InsertRowsActionDefinition(String repeaterName, String selectWidgetName) {
super(repeaterName);
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterDefinition.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterDefinition.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterDefinition.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterDefinition.java Fri Sep 16 06:46:22 2005
@@ -27,6 +27,21 @@
super();
this.initialSize = initialSize;
}
+
+ /**
+ * initialize this definition with the other, sort of like a copy constructor
+ */
+ public void initializeFrom(WidgetDefinition definition) throws Exception {
+ super.initializeFrom(definition);
+
+ if(definition instanceof RepeaterDefinition) {
+ RepeaterDefinition other = (RepeaterDefinition)definition;
+
+ this.initialSize = other.initialSize;
+ } else {
+ throw new Exception("Definition to inherit from is not of the right type! (at "+getLocation()+")");
+ }
+ }
public Widget createInstance() {
return new Repeater(this);
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterDefinitionBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterDefinitionBuilder.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterDefinitionBuilder.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/RepeaterDefinitionBuilder.java Fri Sep 16 06:46:22 2005
@@ -15,7 +15,6 @@
*/
package org.apache.cocoon.forms.formmodel;
-import org.apache.cocoon.forms.Constants;
import org.apache.cocoon.forms.util.DomHelper;
import org.w3c.dom.Element;
@@ -24,7 +23,7 @@
*
* @version $Id$
*/
-public final class RepeaterDefinitionBuilder extends AbstractWidgetDefinitionBuilder {
+public final class RepeaterDefinitionBuilder extends AbstractContainerDefinitionBuilder {
public WidgetDefinition buildWidgetDefinition(Element repeaterElement) throws Exception {
@@ -34,13 +33,7 @@
super.setupDefinition(repeaterElement, repeaterDefinition);
setDisplayData(repeaterElement, repeaterDefinition);
- Element widgetsElement = DomHelper.getChildElement(repeaterElement, Constants.DEFINITION_NS, "widgets", true);
- // All child elements of the widgets element are widgets
- Element[] widgetElements = DomHelper.getChildElements(widgetsElement, Constants.DEFINITION_NS);
- for (int i = 0; i < widgetElements.length; i++) {
- WidgetDefinition widgetDefinition = buildAnotherWidgetDefinition(widgetElements[i]);
- repeaterDefinition.addWidgetDefinition(widgetDefinition);
- }
+ setupContainer(repeaterElement,"widgets",repeaterDefinition);
repeaterDefinition.makeImmutable();
return repeaterDefinition;
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/StructDefinitionBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/StructDefinitionBuilder.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/StructDefinitionBuilder.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/StructDefinitionBuilder.java Fri Sep 16 06:46:22 2005
@@ -15,10 +15,8 @@
*/
package org.apache.cocoon.forms.formmodel;
-import org.w3c.dom.Element;
-import org.apache.cocoon.forms.Constants;
-import org.apache.cocoon.forms.util.DomHelper;
import org.apache.cocoon.util.Deprecation;
+import org.w3c.dom.Element;
/**
* Builds {StructDefinition}s.
@@ -26,21 +24,14 @@
* @deprecated replaced by {@link GroupDefinitionBuilder}
* @version $Id$
*/
-public class StructDefinitionBuilder extends AbstractWidgetDefinitionBuilder {
+public class StructDefinitionBuilder extends AbstractContainerDefinitionBuilder {
public WidgetDefinition buildWidgetDefinition(Element element) throws Exception {
StructDefinition definition = new StructDefinition();
super.setupDefinition(element, definition);
setDisplayData(element, definition);
- Element widgetsElement = DomHelper.getChildElement(element, Constants.DEFINITION_NS, "widgets", true);
- // All child elements of the widgets element are widgets
- Element[] widgetElements = DomHelper.getChildElements(widgetsElement, Constants.DEFINITION_NS);
- for (int i = 0; i < widgetElements.length; i++) {
- Element widgetElement = widgetElements[i];
- WidgetDefinition widgetDefinition = buildAnotherWidgetDefinition(widgetElement);
- definition.addWidgetDefinition(widgetDefinition);
- }
+ setupContainer(element,"widgets",definition);
definition.makeImmutable();
Deprecation.logger.info("Use of 'fd:struct' is deprecated. Use 'fd:group' instead, at " + definition.getLocation());
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/SubmitDefinition.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/SubmitDefinition.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/SubmitDefinition.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/SubmitDefinition.java Fri Sep 16 06:46:22 2005
@@ -26,6 +26,22 @@
private boolean validateForm;
+ /**
+ * initialize this definition with the other, sort of like a copy constructor
+ */
+ public void initializeFrom(WidgetDefinition definition) throws Exception {
+ super.initializeFrom(definition);
+
+ if(definition instanceof SubmitDefinition) {
+ SubmitDefinition other = (SubmitDefinition)definition;
+
+ this.validateForm = other.validateForm;
+
+ } else {
+ throw new Exception("Definition to inherit from is not of the right type! (at "+getLocation()+")");
+ }
+ }
+
public void setValidateForm(boolean validateForm) {
checkMutable();
this.validateForm = validateForm;
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UnionDefinition.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UnionDefinition.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UnionDefinition.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UnionDefinition.java Fri Sep 16 06:46:22 2005
@@ -49,6 +49,21 @@
return defaultValue;
}
*/
+
+ /**
+ * initialize this definition with the other, sort of like a copy constructor
+ */
+ public void initializeFrom(WidgetDefinition definition) throws Exception {
+ super.initializeFrom(definition);
+
+ if(definition instanceof UnionDefinition) {
+ UnionDefinition other = (UnionDefinition)definition;
+ this.caseWidgetId = other.caseWidgetId;
+
+ } else {
+ throw new Exception("Definition to inherit from is not of the right type! (at "+getLocation()+")");
+ }
+ }
public void setCaseWidgetId(String id) {
checkMutable();
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UnionDefinitionBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UnionDefinitionBuilder.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UnionDefinitionBuilder.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UnionDefinitionBuilder.java Fri Sep 16 06:46:22 2005
@@ -15,7 +15,6 @@
*/
package org.apache.cocoon.forms.formmodel;
-import org.apache.cocoon.forms.Constants;
import org.apache.cocoon.forms.util.DomHelper;
import org.w3c.dom.Element;
@@ -24,7 +23,7 @@
*
* @version $Id$
*/
-public final class UnionDefinitionBuilder extends AbstractWidgetDefinitionBuilder {
+public final class UnionDefinitionBuilder extends AbstractContainerDefinitionBuilder {
public WidgetDefinition buildWidgetDefinition(Element element) throws Exception {
UnionDefinition definition = new UnionDefinition();
@@ -32,14 +31,7 @@
definition.setCaseWidgetId(DomHelper.getAttribute(element, "case", ""));
setDisplayData(element, definition);
- Element widgetsElement = DomHelper.getChildElement(element, Constants.DEFINITION_NS, "widgets", true);
- // All child elements of the widgets element are widgets
- Element[] widgetElements = DomHelper.getChildElements(widgetsElement, Constants.DEFINITION_NS);
- for (int i = 0; i < widgetElements.length; i++) {
- Element widgetElement = widgetElements[i];
- WidgetDefinition widgetDefinition = buildAnotherWidgetDefinition(widgetElement);
- definition.addWidgetDefinition(widgetDefinition);
- }
+ setupContainer(element,"widgets",definition);
definition.makeImmutable();
return definition;
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/Upload.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/Upload.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/Upload.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/Upload.java Fri Sep 16 06:46:22 2005
@@ -23,11 +23,15 @@
import org.apache.cocoon.forms.util.I18nMessage;
import org.apache.cocoon.forms.validation.ValidationError;
import org.apache.cocoon.forms.validation.ValidationErrorAware;
+
import org.apache.cocoon.servlet.multipart.Part;
import org.apache.cocoon.servlet.multipart.RejectedPart;
+
import org.apache.cocoon.xml.AttributesImpl;
import org.apache.cocoon.xml.XMLUtils;
+
import org.apache.commons.lang.ObjectUtils;
+
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
@@ -50,7 +54,6 @@
private Part part;
private ValidationError validationError;
-
public Upload(UploadDefinition uploadDefinition) {
super(uploadDefinition);
this.uploadDefinition = uploadDefinition;
@@ -61,7 +64,7 @@
}
public WidgetDefinition getDefinition() {
- return uploadDefinition;
+ return this.uploadDefinition;
}
public Object getValue() {
@@ -134,25 +137,23 @@
// No mime type restriction
return true;
}
-
+
/**
* Check if the part is oversized, and if yes sets the validation error accordingly
*/
private boolean validateOversize() {
- if (this.part.isRejected()) {
- // Set a validation error indicating the sizes in kbytes (rounded)
- RejectedPart rjp = (RejectedPart)this.part;
- int size = (rjp.getContentLength() + 512) / 1024;
- int maxSize = (rjp.getMaxContentLength() + 512) / 1024;
- setValidationError(new ValidationError(new I18nMessage(
- "upload.rejected",
- new String[] { String.valueOf(size), String.valueOf(maxSize) },
- Constants.I18N_CATALOGUE))
- );
- return false;
- } else {
- return false;
+ if (!this.part.isRejected()) {
+ return true;
}
+
+ // Set a validation error indicating the sizes in kbytes (rounded)
+ RejectedPart rjp = (RejectedPart)this.part;
+ int size = (rjp.getContentLength() + 512) / 1024;
+ int maxSize = (rjp.getMaxContentLength() + 512) / 1024;
+ String[] i18nParams = new String[] { String.valueOf(size), String.valueOf(maxSize) };
+ I18nMessage i18nMessage = new I18nMessage("upload.rejected", i18nParams, Constants.I18N_CATALOGUE);
+ setValidationError(new ValidationError(i18nMessage));
+ return false;
}
public boolean validate() {
@@ -163,13 +164,14 @@
if (this.part == null) {
if (this.uploadDefinition.isRequired()) {
- setValidationError(new ValidationError(new I18nMessage("general.field-required", Constants.I18N_CATALOGUE)));
+ I18nMessage i18nMessage = new I18nMessage("general.field-required", Constants.I18N_CATALOGUE);
+ setValidationError(new ValidationError(i18nMessage));
}
} else if (validateOversize() && validateMimeType()) {
super.validate();
}
- this.wasValid = validationError == null;
+ this.wasValid = this.validationError == null;
return this.wasValid;
}
@@ -178,7 +180,7 @@
* {@link #validate()} method returned false.
*/
public ValidationError getValidationError() {
- return validationError;
+ return this.validationError;
}
/**
@@ -207,9 +209,9 @@
public AttributesImpl getXMLElementAttributes() {
AttributesImpl attrs = super.getXMLElementAttributes();
attrs.addCDATAAttribute("id", getRequestParameterName());
- attrs.addCDATAAttribute("required", String.valueOf(uploadDefinition.isRequired()));
- if (uploadDefinition.getMimeTypes() != null) {
- attrs.addCDATAAttribute("mime-types", uploadDefinition.getMimeTypes());
+ attrs.addCDATAAttribute("required", String.valueOf(this.uploadDefinition.isRequired()));
+ if (this.uploadDefinition.getMimeTypes() != null) {
+ attrs.addCDATAAttribute("mime-types", this.uploadDefinition.getMimeTypes());
}
return attrs;
}
@@ -223,9 +225,9 @@
}
// validation message element: only present if the value is not valid
- if (validationError != null) {
+ if (this.validationError != null) {
contentHandler.startElement(Constants.INSTANCE_NS, VALIDATION_MSG_EL, Constants.INSTANCE_PREFIX_COLON + VALIDATION_MSG_EL, XMLUtils.EMPTY_ATTRIBUTES);
- validationError.generateSaxFragment(contentHandler);
+ this.validationError.generateSaxFragment(contentHandler);
contentHandler.endElement(Constants.INSTANCE_NS, VALIDATION_MSG_EL, Constants.INSTANCE_PREFIX_COLON + VALIDATION_MSG_EL);
}
}
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UploadDefinition.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UploadDefinition.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UploadDefinition.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UploadDefinition.java Fri Sep 16 06:46:22 2005
@@ -26,9 +26,47 @@
private boolean required;
private String mimeTypes;
+ public UploadDefinition() {
+ this.mimeTypes = null;
+ this.required = false;
+ }
+
public UploadDefinition(boolean required, String mimeTypes) {
this.required = required;
this.mimeTypes = mimeTypes;
+ }
+
+ /**
+ * initialize this definition with the other, sort of like a copy constructor
+ */
+ public void initializeFrom(WidgetDefinition definition) throws Exception {
+ super.initializeFrom(definition);
+
+ if(definition instanceof UploadDefinition) {
+ UploadDefinition other = (UploadDefinition)definition;
+
+ this.required = other.required;
+ this.mimeTypes = other.mimeTypes.substring(0); // deep copy
+
+ } else {
+ throw new Exception("Definition to inherit from is not of the right type! (at "+getLocation()+")");
+ }
+ }
+
+ public void addMimeTypes(String types) {
+ if(types != null) {
+ if(mimeTypes == null)
+ mimeTypes = types;
+ else {
+ if(mimeTypes.length()>0)
+ mimeTypes += ", ";
+ mimeTypes += types;
+ }
+ }
+ }
+
+ public void setRequired(boolean required) {
+ this.required = required;
}
public Widget createInstance() {
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UploadDefinitionBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UploadDefinitionBuilder.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UploadDefinitionBuilder.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/UploadDefinitionBuilder.java Fri Sep 16 06:46:22 2005
@@ -29,12 +29,16 @@
public WidgetDefinition buildWidgetDefinition(Element widgetElement) throws Exception {
String mimeTypes = DomHelper.getAttribute(widgetElement, "mime-types", null);
- boolean required = DomHelper.getAttributeAsBoolean(widgetElement, "required", false);
- UploadDefinition uploadDefinition = new UploadDefinition(required, mimeTypes);
+ UploadDefinition uploadDefinition = new UploadDefinition();
super.setupDefinition(widgetElement, uploadDefinition);
setDisplayData(widgetElement, uploadDefinition);
+
+ if(widgetElement.hasAttribute("required"))
+ uploadDefinition.setRequired(DomHelper.getAttributeAsBoolean(widgetElement, "required", false));
+
+ uploadDefinition.addMimeTypes(mimeTypes);
uploadDefinition.makeImmutable();
return uploadDefinition;
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/Widget.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/Widget.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/Widget.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/Widget.java Fri Sep 16 06:46:22 2005
@@ -18,6 +18,8 @@
import org.apache.cocoon.forms.FormContext;
import org.apache.cocoon.forms.validation.WidgetValidator;
import org.apache.cocoon.forms.event.WidgetEvent;
+import org.apache.cocoon.util.location.Locatable;
+import org.apache.cocoon.util.location.Location;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
@@ -51,7 +53,7 @@
*
* @version $Id$
*/
-public interface Widget {
+public interface Widget extends Locatable {
/**
* Widget-Separator used in path-like notations
@@ -69,7 +71,7 @@
/**
* @return the source location of this widget.
*/
- String getLocation();
+ Location getLocation();
/**
* @return the name of this widget. This should never be <code>null</code>
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinition.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinition.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinition.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinition.java Fri Sep 16 06:46:22 2005
@@ -15,6 +15,8 @@
*/
package org.apache.cocoon.forms.formmodel;
+import org.apache.cocoon.util.location.Locatable;
+import org.apache.cocoon.util.location.Location;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
@@ -26,8 +28,13 @@
*
* @version $Id$
*/
-public interface WidgetDefinition {
+public interface WidgetDefinition extends Locatable {
+ /**
+ * Initializes this definition with values from the given other definition
+ */
+ void initializeFrom(WidgetDefinition definition) throws Exception;
+
/**
* Gets the {@link FormDefinition}.
*/
@@ -41,7 +48,7 @@
/**
* Gets source location of this widget definition.
*/
- String getLocation();
+ Location getLocation();
/**
* Gets id of this widget definition.
@@ -65,6 +72,13 @@
*/
boolean validate(Widget widget);
+ /**
+ * Checks whether this definition is complete since we are allowed to have partial
+ * definitions in libraries. Definitions need to be complete _before_ a call to
+ * createInstance() though.
+ */
+ void checkCompleteness() throws IncompletenessException;
+
/**
* Creates and returns a widget based on this widget definition.
*/
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilder.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilder.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilder.java Fri Sep 16 06:46:22 2005
@@ -32,4 +32,5 @@
WidgetDefinition buildWidgetDefinition(Element widgetElement) throws Exception;
+ WidgetDefinition buildWidgetDefinition(Element widgetElement, WidgetDefinitionBuilderContext context) throws Exception;
}
Added: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilderContext.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilderContext.java?rev=289538&view=auto
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilderContext.java (added)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilderContext.java Fri Sep 16 06:46:22 2005
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+package org.apache.cocoon.forms.formmodel;
+
+import org.apache.cocoon.forms.formmodel.library.Library;
+
+/**
+ * Holds context information for the building phase.
+ *
+ * @version $Id$
+ */
+public class WidgetDefinitionBuilderContext {
+
+ protected WidgetDefinition superDefinition = null;
+ protected Library localLibrary = null;
+
+ public WidgetDefinitionBuilderContext() {
+ this.superDefinition = null;
+ this.localLibrary = null;
+ }
+
+ public WidgetDefinitionBuilderContext(WidgetDefinitionBuilderContext other) {
+ this.superDefinition = other.superDefinition;
+ this.localLibrary = other.localLibrary;
+ }
+
+ public WidgetDefinition getSuperDefinition() {
+ return superDefinition;
+ }
+ public void setSuperDefinition(WidgetDefinition def) {
+ superDefinition = def;
+ }
+
+ public Library getLocalLibrary() {
+ return localLibrary;
+ }
+ public void setLocalLibrary(Library lib) {
+ localLibrary = lib;
+ }
+
+}
Propchange: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilderContext.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilderContext.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionList.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionList.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionList.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionList.java Fri Sep 16 06:46:22 2005
@@ -1,6 +1,6 @@
/*
* 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
@@ -22,6 +22,8 @@
import java.util.ListIterator;
import java.util.Map;
+import org.apache.cocoon.util.location.Location;
+
// TODO: Refine and i18n the exception messages.
/**
* Helper class for the Definition implementation of widgets containing
@@ -34,7 +36,7 @@
private List widgetDefinitions = new ArrayList();
private Map widgetDefinitionsById = new HashMap();
private WidgetDefinition containerDefinition;
- private boolean resolving;
+ private boolean wasHere;
private ListIterator definitionsIt = widgetDefinitions.listIterator();
/**
@@ -42,7 +44,11 @@
*/
public WidgetDefinitionList(WidgetDefinition definition) {
this.containerDefinition = definition;
- resolving = false;
+ wasHere = false;
+ }
+
+ public int size() {
+ return widgetDefinitions.size();
}
public void addWidgetDefinition(WidgetDefinition widgetDefinition) throws DuplicateIdException {
@@ -50,9 +56,9 @@
// Do not add NewDefinition id's hash.
if (!(widgetDefinition instanceof NewDefinition)) {
if (widgetDefinitionsById.containsKey(id)) {
- String duplicateLocation = widgetDefinition.getLocation();
- String containerLocation = containerDefinition.getLocation();
- String firstLocation = getWidgetDefinition(id).getLocation();
+ Location duplicateLocation = widgetDefinition.getLocation();
+ Location containerLocation = containerDefinition.getLocation();
+ Location firstLocation = getWidgetDefinition(id).getLocation();
throw new DuplicateIdException(
"Duplicate widget id \"" + id + "\" detected at " + duplicateLocation + ".\n" +
"Container widget \"" + containerDefinition.getId() + "\" at " + containerLocation + "\n" +
@@ -75,13 +81,9 @@
return (WidgetDefinition)widgetDefinitionsById.get(id);
}
- public boolean isResolving() {
- return resolving;
- }
-
public void resolve(List parents, WidgetDefinition parent) throws Exception {
- if (!resolving) {
- resolving = true;
+ if (!wasHere) {
+ wasHere = true;
this.definitionsIt = widgetDefinitions.listIterator();
parents.add(containerDefinition);
while (this.definitionsIt.hasNext()) {
@@ -99,24 +101,22 @@
}
}
parents.remove(parents.size()-1);
- resolving = false;
+ wasHere = false;
} else {
// Non-terminating recursion detection
- if (resolving == true) {
- // Search up parent list in hopes of finding a "Union" or "Repeater" before finding previous "New" for this "Class".
- ListIterator parentsIt = parents.listIterator(parents.size());
- while(parentsIt.hasPrevious()) {
- WidgetDefinition widgetDefinition = (WidgetDefinition)parentsIt.previous();
- if (widgetDefinition instanceof UnionDefinition) break;
- if (widgetDefinition instanceof RepeaterDefinition) break;
- if (widgetDefinition == containerDefinition) {
- String location = containerDefinition.getLocation();
- if (parent instanceof FormDefinition) {
- throw new Exception("Container: Non-terminating recursion detected in form definition (" + location + ")");
- }
- throw new Exception("Container: Non-terminating recursion detected in widget definition: "
- + parent.getId() + " (" + location + ")");
- }
+ // Search up parent list in hopes of finding a "Union" or "Repeater" before finding previous "New" for this "Class".
+ ListIterator parentsIt = parents.listIterator(parents.size());
+ while(parentsIt.hasPrevious()) {
+ WidgetDefinition widgetDefinition = (WidgetDefinition)parentsIt.previous();
+ if (widgetDefinition instanceof UnionDefinition) break;
+ if (widgetDefinition instanceof RepeaterDefinition) break;
+ if (widgetDefinition == containerDefinition) {
+ Location location = containerDefinition.getLocation();
+ if (parent instanceof FormDefinition) {
+ throw new Exception("Container: Non-terminating recursion detected in form definition (" + location + ")");
+ }
+ throw new Exception("Container: Non-terminating recursion detected in widget definition: "
+ + parent.getId() + " (" + location + ")");
}
}
}
@@ -140,6 +140,23 @@
Widget widget = widgetDefinition.createInstance();
if (widget != null)
((ContainerWidget)parent).addChild(widget);
+ }
+ }
+
+ public void checkCompleteness() throws IncompletenessException {
+ if (!wasHere) {
+ wasHere = true;
+// FIXME: is it legal to have no widgets in a container? There are some cases of this in Swan
+// if(size() == 0)
+// throw new IncompletenessException(this.containerDefinition.getClass().getName() +
+// " requires at least one child widget!", this.containerDefinition);
+
+ // now check children's completeness
+ Iterator it = widgetDefinitions.iterator();
+ while(it.hasNext()) {
+ ((WidgetDefinition)it.next()).checkCompleteness();
+ }
+ wasHere = false;
}
}
}
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetList.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetList.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetList.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/WidgetList.java Fri Sep 16 06:46:22 2005
@@ -43,7 +43,7 @@
* List of the contained widgets.
* This maintains the original order of the widgets to garantee order of
* validation and generation of SAXFragments
- */
+ */
private List widgets;
/**
Added: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/Library.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/Library.java?rev=289538&view=auto
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/Library.java (added)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/Library.java Fri Sep 16 06:46:22 2005
@@ -0,0 +1,221 @@
+/*
+ * Copyright 1999-2005 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.
+ */
+package org.apache.cocoon.forms.formmodel.library;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.avalon.framework.CascadingException;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceSelector;
+import org.apache.cocoon.forms.Constants;
+import org.apache.cocoon.forms.formmodel.WidgetDefinition;
+import org.apache.cocoon.forms.formmodel.WidgetDefinitionBuilder;
+import org.apache.cocoon.forms.formmodel.WidgetDefinitionBuilderContext;
+import org.apache.cocoon.forms.util.DomHelper;
+import org.apache.cocoon.util.location.LocationAttributes;
+
+import org.w3c.dom.Element;
+
+/**
+ * @version $Id$
+ */
+public class Library {
+
+ public static final String SEPARATOR = ":";
+
+
+ // managed instances
+ protected ServiceSelector widgetDefinitionBuilderSelector;
+
+ // own references
+ protected LibraryManager manager = null;
+
+ // own instances
+ protected Map definitions = new HashMap();
+ protected Map inclusions = new HashMap();
+
+ // shared object with dependencies
+ protected Object shared = new Object();
+
+ protected String sourceURI = null;
+ protected WidgetDefinitionBuilderContext context;
+
+ public Library(LibraryManager lm) {
+ manager = lm;
+ context = new WidgetDefinitionBuilderContext();
+ context.setLocalLibrary(this);
+ }
+
+ public void setSourceURI(String uri) {
+ sourceURI = uri;
+ }
+ public String getSourceURI() {
+ return sourceURI;
+ }
+
+ public void setWidgetDefinitionBuilderSelector(ServiceSelector selector) {
+ this.widgetDefinitionBuilderSelector = selector;
+ }
+
+ public boolean dependenciesHaveChanged() throws Exception {
+
+ Iterator it = this.inclusions.values().iterator();
+ while(it.hasNext()) {
+ Dependency dep = (Dependency)it.next();
+ if(!dep.isValid())
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * "Registers" a library to be referenced later under a certain key or prefix.
+ * Definitions will be accessible locally through prefixing: "prefix:definitionid"
+ *
+ * @param key the key
+ * @param librarysource the source of the library to be know as "key"
+ * @return true if there was no such key used before, false otherwise
+ */
+ public boolean includeAs(String key, String librarysource)
+ throws LibraryException
+ {
+ try {
+ // library keys may not contain ":"!
+ if( (!inclusions.containsKey(key) || key.indexOf(SEPARATOR)>-1)
+ && manager.getLibrary(librarysource, sourceURI)!=null) {
+ inclusions.put(key,new Dependency(librarysource));
+ return true;
+ }
+ return false;
+ } catch(Exception e) {
+ throw new LibraryException("Could not include library '"+librarysource+"'",e);
+ }
+
+ }
+
+ public WidgetDefinition getDefinition(String key) throws LibraryException {
+
+ String librarykey = null;
+ String definitionkey = key;
+
+ if(key.indexOf(":")>-1) {
+ String[] parts = key.split(SEPARATOR);
+ librarykey = parts[0];
+ definitionkey = parts[1];
+ for(int i=2; i<parts.length; i++) {
+ definitionkey += SEPARATOR+parts[i];
+ }
+ }
+
+ if(librarykey!=null) {
+ if(inclusions.containsKey(librarykey)) {
+ try {
+ return manager.getLibrary(((Dependency)inclusions.get(librarykey)).dependencySourceURI, sourceURI).getDefinition(definitionkey);
+ } catch(Exception e) {
+ throw new LibraryException("Couldn't get Library key='"+librarykey+"' source='"+inclusions.get(librarykey)+"",e);
+ }
+ } else {
+ throw new LibraryException("Library '"+librarykey+"' does not exist! (lookup: '"+key+"')");
+ }
+ } else {
+ return (WidgetDefinition)definitions.get(definitionkey);
+ }
+ }
+
+ public void buildLibrary(Element libraryElement) throws Exception {
+ sourceURI = LocationAttributes.getURI(libraryElement);
+ Element widgetsElement = DomHelper.getChildElement(libraryElement, Constants.DEFINITION_NS, "widgets", true);
+ // All child elements of the widgets element are widgets
+ Element[] widgetElements = DomHelper.getChildElements(widgetsElement, Constants.DEFINITION_NS);
+ for (int i = 0; i < widgetElements.length; i++) {
+ Element widgetElement = widgetElements[i];
+ WidgetDefinition widgetDefinition = buildWidgetDefinition(widgetElement);
+ addDefinition(widgetDefinition);
+ }
+ }
+
+ public void addDefinition(WidgetDefinition definition) throws LibraryException {
+ if(definition == null)
+ return;
+
+ if(definitions.containsKey(definition.getId()))
+ throw new LibraryException("Library already contains a widget with this ID!");
+
+ definitions.put(definition.getId(),definition);
+ manager.debug(this+": Put definition with id: "+definition.getId());
+ }
+
+ protected WidgetDefinition buildWidgetDefinition(Element widgetDefinition) throws Exception {
+ String widgetName = widgetDefinition.getLocalName();
+ WidgetDefinitionBuilder builder = null;
+ try {
+ builder = (WidgetDefinitionBuilder)widgetDefinitionBuilderSelector.select(widgetName);
+ } catch (ServiceException e) {
+ throw new CascadingException("Unknown kind of widget '" + widgetName + "' at " +
+ DomHelper.getLocation(widgetDefinition), e);
+ }
+
+ context.setSuperDefinition(null);
+ String extend = DomHelper.getAttribute(widgetDefinition, "extends", null);
+
+ if (extend != null)
+ context.setSuperDefinition(getDefinition(extend));
+
+
+ return builder.buildWidgetDefinition(widgetDefinition,context);
+ }
+
+
+ /**
+ * Encapsulates a uri to designate an import plus a timestamp so previously reloaded
+ *
+ * @author Max Pfingsthorn (mpfingsthorn@hippo.nl)
+ *
+ */
+ public class Dependency {
+
+ private String dependencySourceURI;
+ private Object shared;
+
+ public Dependency(String dependencySourceURI) throws Exception {
+ this.dependencySourceURI = dependencySourceURI;
+
+ Library lib = manager.getLibrary(this.dependencySourceURI,sourceURI);
+ this.shared = lib.shared;
+ }
+
+ public boolean isValid() throws LibraryException {
+ try {
+
+ if(manager.libraryInCache(dependencySourceURI,sourceURI)) {
+ Library lib = manager.getLibrary(dependencySourceURI,sourceURI);
+
+ if(this.shared == lib.shared)
+ return true;
+ }
+
+ return false;
+ } catch(Exception forward) {
+ throw new LibraryException("Exception occured while checking dependency validity!",forward);
+ }
+
+ }
+ }
+
+}
Propchange: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/Library.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/Library.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryException.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryException.java?rev=289538&view=auto
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryException.java (added)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryException.java Fri Sep 16 06:46:22 2005
@@ -0,0 +1,33 @@
+/*
+ * Copyright 1999-2005 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.
+ */
+package org.apache.cocoon.forms.formmodel.library;
+
+import org.apache.avalon.framework.CascadingException;
+
+/**
+ * This exception is thrown when something specific to the library system goes wrong.
+ *
+ * @version $Id$
+ */
+public class LibraryException extends CascadingException {
+ public LibraryException(String message) {
+ super(message);
+ }
+
+ public LibraryException(String message, Exception e) {
+ super(message, e);
+ }
+}
Propchange: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryException.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryManager.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryManager.java?rev=289538&view=auto
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryManager.java (added)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryManager.java Fri Sep 16 06:46:22 2005
@@ -0,0 +1,40 @@
+/*
+ * Copyright 1999-2005 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.
+ */
+package org.apache.cocoon.forms.formmodel.library;
+
+
+
+/**
+ * The work interface for the LibraryManager, the class that
+ * manages all used library definitions so they can be shared between
+ * forms.
+ *
+ * @version $Id$
+ *
+ */
+public interface LibraryManager {
+
+ String ROLE = LibraryManager.class.getName();
+
+ Library getLibrary(String librarysource) throws Exception;
+ Library getLibrary(String librarysource, String relative) throws Exception;
+ Library getNewLibrary();
+
+ boolean libraryInCache(String librarysource) throws Exception;
+ boolean libraryInCache(String librarysource, String relative) throws Exception;
+
+ void debug(String msg);
+}
Propchange: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryManager.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryManagerImpl.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryManagerImpl.java?rev=289538&view=auto
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryManagerImpl.java (added)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryManagerImpl.java Fri Sep 16 06:46:22 2005
@@ -0,0 +1,196 @@
+/*
+ * Copyright 1999-2005 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.
+ */
+package org.apache.cocoon.forms.formmodel.library;
+
+import org.apache.avalon.framework.CascadingException;
+import org.apache.avalon.framework.activity.Disposable;
+import org.apache.avalon.framework.activity.Initializable;
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.ServiceSelector;
+import org.apache.avalon.framework.service.Serviceable;
+import org.apache.avalon.framework.thread.ThreadSafe;
+import org.apache.cocoon.forms.CacheManager;
+import org.apache.cocoon.forms.formmodel.WidgetDefinitionBuilder;
+import org.apache.cocoon.forms.util.DomHelper;
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceResolver;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+/**
+ * @version $Id$
+ *
+ */
+public class LibraryManagerImpl extends AbstractLogEnabled implements LibraryManager, ThreadSafe, Serviceable,
+Configurable, Initializable, Disposable {
+
+ protected static final String PREFIX = "CocoonFormLibrary:";
+
+ private ServiceManager serviceManager;
+ private Configuration configuration;
+ private CacheManager cacheManager;
+
+ private ServiceSelector widgetDefinitionBuilderSelector;
+
+ public void configure(Configuration configuration) throws ConfigurationException {
+ this.configuration = configuration;
+ getLogger().debug("Gotten a config: top level element: "+this.configuration);
+ }
+
+ public void service(ServiceManager serviceManager) throws ServiceException {
+ this.serviceManager = serviceManager;
+ this.cacheManager = (CacheManager)serviceManager.lookup(CacheManager.ROLE);
+ }
+
+ public void initialize() throws Exception {
+ this.widgetDefinitionBuilderSelector = (ServiceSelector) serviceManager.lookup(WidgetDefinitionBuilder.class.getName() + "Selector");
+
+ // read config to "preload" libraries
+ }
+
+ public boolean libraryInCache(String librarysource) throws Exception {
+ return libraryInCache(librarysource,null);
+ }
+
+ public boolean libraryInCache(String librarysource, String relative) throws Exception {
+ SourceResolver sourceResolver = null;
+ Source source = null;
+
+ if(getLogger().isDebugEnabled())
+ getLogger().debug("Checking if library is in cache: '"+librarysource+"' relative to '"+relative+"'");
+
+ Library lib = null;
+ boolean result = false;
+
+ try {
+ sourceResolver = (SourceResolver)serviceManager.lookup(SourceResolver.ROLE);
+ source = sourceResolver.resolveURI(librarysource, relative, null);
+
+ lib = (Library)this.cacheManager.get(source, PREFIX);
+
+ if( lib != null && lib.dependenciesHaveChanged() ) {
+ result = false;
+ this.cacheManager.set(null,source,PREFIX); //evict?
+ }
+ else if( lib == null )
+ result = false;
+ else
+ result = true;
+ } catch(Exception e) {
+ if(getLogger().isErrorEnabled())
+ getLogger().error("Problem getting library '"+librarysource+"' relative to '"+relative+"'!",e);
+ throw e;
+ } finally {
+ if (source != null)
+ sourceResolver.release(source);
+ if (sourceResolver != null)
+ serviceManager.release(sourceResolver);
+ }
+
+ if(getLogger().isDebugEnabled()) {
+ if(result)
+ getLogger().debug("Library IS in cache : '"+librarysource+"' relative to '"+relative+"'");
+ else
+ getLogger().debug("Library IS NOT in cache : '"+librarysource+"' relative to '"+relative+"'");
+ }
+
+ return result;
+ }
+
+ public Library getLibrary(String librarysource) throws Exception {
+ return getLibrary(librarysource,null);
+ }
+
+ public Library getLibrary(String librarysource, String relative) throws Exception {
+ SourceResolver sourceResolver = null;
+ Source source = null;
+ Document libraryDocument = null;
+
+ Library lib = null;
+
+ if(getLogger().isDebugEnabled())
+ getLogger().debug("Getting library instance: '"+librarysource+"' relative to '"+relative+"'");
+
+ try {
+ sourceResolver = (SourceResolver)serviceManager.lookup(SourceResolver.ROLE);
+ source = sourceResolver.resolveURI(librarysource, relative, null);
+
+ lib = (Library)this.cacheManager.get(source, PREFIX);
+
+ if( lib != null && lib.dependenciesHaveChanged() ) {
+ if(getLogger().isDebugEnabled())
+ getLogger().debug("Library dependencies changed, invalidating!");
+
+ lib = null;
+ }
+
+ if( lib == null ) {
+ if(getLogger().isDebugEnabled())
+ getLogger().debug("Library not in cache, creating!");
+
+ try {
+ InputSource inputSource = new InputSource(source.getInputStream());
+ inputSource.setSystemId(source.getURI());
+ libraryDocument = DomHelper.parse(inputSource, this.serviceManager);
+
+ lib = getNewLibrary();
+ lib.buildLibrary(libraryDocument.getDocumentElement());
+
+ this.cacheManager.set(lib,source,PREFIX);
+
+ } catch (Exception e) {
+ throw new CascadingException("Could not parse form definition from " +
+ source.getURI(), e);
+ }
+ }
+ } finally {
+ if (source != null)
+ sourceResolver.release(source);
+ if (sourceResolver != null)
+ serviceManager.release(sourceResolver);
+ }
+
+ return lib;
+ }
+
+ public Library getNewLibrary() {
+ Library lib = new Library(this);
+ lib.setWidgetDefinitionBuilderSelector(this.widgetDefinitionBuilderSelector);
+
+ if(getLogger().isDebugEnabled())
+ getLogger().debug("Created new library! "+lib);
+
+ return lib;
+ }
+
+ public void dispose() {
+ this.serviceManager.release(this.cacheManager);
+ this.cacheManager = null;
+ this.serviceManager = null;
+ }
+
+ public void debug(String msg) {
+ if(getLogger().isDebugEnabled()) {
+ getLogger().debug(msg);
+ }
+ }
+
+}
Propchange: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryManagerImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/formmodel/library/LibraryManagerImpl.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/generation/JXMacrosHelper.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/generation/JXMacrosHelper.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/generation/JXMacrosHelper.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/generation/JXMacrosHelper.java Fri Sep 16 06:46:22 2005
@@ -300,7 +300,9 @@
}
public void generateRepeaterWidgetLabel(Widget widget, String id, String widgetId) throws SAXException {
- getRepeater(widget, id).generateWidgetLabel(widgetId, this.cocoonConsumer);
+ // Widget labels are allowed either inside or outside of <ft:repeater>
+ Repeater repeater = widget instanceof Repeater ? (Repeater)widget : getRepeater(widget, id);
+ repeater.generateWidgetLabel(widgetId, this.cocoonConsumer);
}
public void generateRepeaterSize(Widget widget, String id) throws SAXException {
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/generation/jx-macros.xml
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/generation/jx-macros.xml?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/generation/jx-macros.xml (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/generation/jx-macros.xml Fri Sep 16 06:46:22 2005
@@ -213,6 +213,7 @@
<jx:parameter name="id"/>
<jx:if test="${cformsHelper.pushRepeater(id)}">
<jx:set var="repeater" value="${cformsHelper.peekWidget()}"/>
+ <jx:set var="widget" value="${cformsHelper.peekWidget()}"/>
<jx:evalBody/>
<jx:set var="cformsDummy" value="${cformsHelper.popWidget()}"/>
</jx:if>
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/resources/forms-calendar-styling.xsl
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/resources/forms-calendar-styling.xsl?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/resources/forms-calendar-styling.xsl (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/resources/forms-calendar-styling.xsl Fri Sep 16 06:46:22 2005
@@ -17,6 +17,7 @@
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fi="http://apache.org/cocoon/forms/1.0#instance"
+ xmlns:i18n="http://apache.org/cocoon/i18n/2.1"
exclude-result-prefixes="fi">
<!--+
| This stylesheet is designed to be included by 'forms-advanced-styling.xsl'.
@@ -71,14 +72,12 @@
<!-- calendar popup -->
<xsl:choose>
<xsl:when test="@state = 'disabled'">
- <!-- TODO: i18n key for @alt -->
- <img src="{$resources-uri}/img/cal.gif" alt="Calendar"/>
+ <img src="{$resources-uri}/img/cal.gif" alt="forms:calendar.alt" i18n:attr="alt"/>
</xsl:when>
<xsl:otherwise>
<a href="#" name="{$id}" id="{$id}"
onclick="forms_calendar.select(forms_getForm(this)['{@id}'],'{$id}','{$format}'); return false;">
- <!-- TODO: i18n key for @alt -->
- <img src="{$resources-uri}/img/cal.gif" alt="Calendar"/>
+ <img src="{$resources-uri}/img/cal.gif" alt="forms:calendar.alt" i18n:attr="alt"/>
</a>
</xsl:otherwise>
</xsl:choose>
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/transformation/EffectPipe.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/transformation/EffectPipe.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/transformation/EffectPipe.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/transformation/EffectPipe.java Fri Sep 16 06:46:22 2005
@@ -175,88 +175,88 @@
*/
protected class BufferHandler extends NullHandler {
public Handler startDocument() throws SAXException {
- buffer.startDocument();
+ if (buffer != null) buffer.startDocument();
return this;
}
public void setDocumentLocator(Locator paramLocator) {
locator = new LocatorImpl(paramLocator);
- buffer.setDocumentLocator(paramLocator);
+ if (buffer != null) buffer.setDocumentLocator(paramLocator);
}
public void endDocument() throws SAXException {
- buffer.endDocument();
+ if (buffer != null) buffer.endDocument();
}
public void startPrefixMapping(String prefix, String uri) throws SAXException {
- buffer.startPrefixMapping(prefix, uri);
+ if (buffer != null) buffer.startPrefixMapping(prefix, uri);
}
public void endPrefixMapping(String prefix) throws SAXException {
- buffer.endPrefixMapping(prefix);
+ if (buffer != null) buffer.endPrefixMapping(prefix);
}
public Handler startElement(String uri, String loc, String raw, Attributes attrs) throws SAXException {
- buffer.startElement(uri, loc, raw, attrs);
+ if (buffer != null) buffer.startElement(uri, loc, raw, attrs);
return this;
}
public void endElement(String uri, String loc, String raw) throws SAXException {
- buffer.endElement(uri, loc, raw);
+ if (buffer != null) buffer.endElement(uri, loc, raw);
}
public Handler characters(char ch[], int start, int length) throws SAXException {
- buffer.characters(ch, start, length);
+ if (buffer != null) buffer.characters(ch, start, length);
return this;
}
public Handler ignorableWhitespace(char ch[], int start, int length) throws SAXException {
- buffer.ignorableWhitespace(ch, start, length);
+ if (buffer != null) buffer.ignorableWhitespace(ch, start, length);
return this;
}
public Handler processingInstruction(String target, String data) throws SAXException {
- buffer.processingInstruction(target, data);
+ if (buffer != null) buffer.processingInstruction(target, data);
return this;
}
public Handler skippedEntity(String name) throws SAXException {
- buffer.skippedEntity(name);
+ if (buffer != null) buffer.skippedEntity(name);
return this;
}
public Handler startDTD(String name, String publicId, String systemId) throws SAXException {
- buffer.startDTD(name, publicId, systemId);
+ if (buffer != null) buffer.startDTD(name, publicId, systemId);
return this;
}
public Handler endDTD() throws SAXException {
- buffer.endDTD();
+ if (buffer != null) buffer.endDTD();
return this;
}
public Handler startEntity(String name) throws SAXException {
- buffer.startEntity(name);
+ if (buffer != null) buffer.startEntity(name);
return this;
}
public Handler endEntity(String name) throws SAXException {
- buffer.endEntity(name);
+ if (buffer != null) buffer.endEntity(name);
return this;
}
public Handler startCDATA() throws SAXException {
- buffer.startCDATA();
+ if (buffer != null) buffer.startCDATA();
return this;
}
public Handler endCDATA() throws SAXException {
- buffer.endCDATA();
+ if (buffer != null) buffer.endCDATA();
return this;
}
public Handler comment(char c[], int start, int len) throws SAXException {
- buffer.comment(c, start, len);
+ if (buffer != null) buffer.comment(c, start, len);
return this;
}
}
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/transformation/FormsPipelineConfig.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/transformation/FormsPipelineConfig.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/transformation/FormsPipelineConfig.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/transformation/FormsPipelineConfig.java Fri Sep 16 06:46:22 2005
@@ -24,6 +24,7 @@
import org.apache.cocoon.environment.Session;
import org.apache.cocoon.forms.formmodel.Form;
import org.apache.cocoon.i18n.I18nUtils;
+import org.apache.cocoon.util.Deprecation;
import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.JXPathException;
@@ -34,7 +35,9 @@
import java.io.IOException;
import java.io.StringReader;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -120,8 +123,18 @@
}
cocoonOM.put("parameters", parameters);
- Variables vars = jxpc.getVariables();
+ FormsVariables vars = new FormsVariables();
vars.declareVariable("cocoon", cocoonOM);
+ // These four are deprecated!
+ vars.declareVariable("continuation", wk);
+ vars.declareVariable("request", request);
+ vars.declareVariable("session", session);
+ vars.declareVariable("parameters", parameters);
+ vars.addDeprecatedVariable("continuation");
+ vars.addDeprecatedVariable("request");
+ vars.addDeprecatedVariable("session");
+ vars.addDeprecatedVariable("parameters");
+ jxpc.setVariables(vars);
Locale localeParameter = null;
String localeStr = parameters.getParameter("locale", null);
@@ -326,6 +339,50 @@
}
if (getFormMethod() != null){
attrs.addAttribute("", "method", "method", "CDATA", getFormMethod());
+ }
+ }
+
+ public static final class FormsVariables implements Variables {
+
+ final Map vars = new HashMap();
+ final List deprecatedNames = new ArrayList();
+
+ public void addDeprecatedVariable(String name) {
+ this.deprecatedNames.add(name);
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.jxpath.Variables#declareVariable(java.lang.String, java.lang.Object)
+ */
+ public void declareVariable(String name, Object value) {
+ this.vars.put(name, value);
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.jxpath.Variables#getVariable(java.lang.String)
+ */
+ public Object getVariable(String name) {
+ Object value = this.vars.get(name);
+ if ( deprecatedNames.contains(name) ) {
+ Deprecation.logger.warn("CForms: usage of the variable '" + name + "' is deprecated."+
+ "Please use 'cocoon/" + name + "' instead. The usage of just '"+
+ name+"' will be removed in Cocoon 2.2.");
+ }
+ return value;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.jxpath.Variables#isDeclaredVariable(java.lang.String)
+ */
+ public boolean isDeclaredVariable(String name) {
+ return this.vars.containsKey(name);
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.jxpath.Variables#undeclareVariable(java.lang.String)
+ */
+ public void undeclareVariable(String name) {
+ this.vars.remove(name);
}
}
}
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/DomHelper.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/DomHelper.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/DomHelper.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/DomHelper.java Fri Sep 16 06:46:22 2005
@@ -25,6 +25,7 @@
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.cocoon.util.location.Location;
import org.apache.cocoon.util.location.LocationAttributes;
import org.apache.cocoon.xml.SaxBuffer;
import org.apache.cocoon.xml.dom.DOMBuilder;
@@ -62,6 +63,10 @@
public static final String XMLNS_URI = "http://www.w3.org/2000/xmlns/";
+ public static Location getLocationObject(Element element) {
+ return LocationAttributes.getLocation(element);
+ }
+
/**
* 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
@@ -178,7 +183,7 @@
* element has no such attribute.
*/
public static String getAttribute(Element element, String attributeName,
- String defaultValue) throws Exception {
+ String defaultValue) {
String attrValue = element.getAttribute(attributeName);
if (attrValue.equals("")) {
return defaultValue;
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/JavaScriptHelper.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/JavaScriptHelper.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/JavaScriptHelper.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/util/JavaScriptHelper.java Fri Sep 16 06:46:22 2005
@@ -23,7 +23,6 @@
import org.apache.avalon.framework.CascadingRuntimeException;
import org.apache.cocoon.components.flow.FlowHelper;
import org.apache.cocoon.components.flow.javascript.fom.FOM_JavaScriptFlowHelper;
-import org.apache.cocoon.environment.TemplateObjectModelHelper;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function;
import org.mozilla.javascript.JavaScriptException;
@@ -39,6 +38,12 @@
* @version $Id$
*/
public class JavaScriptHelper {
+
+ /**
+ * A shared root scope, avoiding to recreate a new one each time.
+ */
+ private static Scriptable _rootScope = null;
+
/**
* Build a script with the content of a DOM element.
*
@@ -111,7 +116,20 @@
* @return an appropriate root scope
*/
public static Scriptable getRootScope() {
- return TemplateObjectModelHelper.getScope();
+ // FIXME: TemplateOMH should be used in 2.2
+ //return TemplateObjectModelHelper.getScope();
+
+
+ if (_rootScope == null) {
+ // Create it if never used up to now
+ Context ctx = Context.enter();
+ try {
+ _rootScope = ctx.initStandardObjects(null);
+ } finally {
+ Context.exit();
+ }
+ }
+ return _rootScope;
}
/**
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/validation/WidgetValidatorBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/validation/WidgetValidatorBuilder.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/validation/WidgetValidatorBuilder.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/validation/WidgetValidatorBuilder.java Fri Sep 16 06:46:22 2005
@@ -1,12 +1,12 @@
/*
* 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.
@@ -19,14 +19,14 @@
import org.w3c.dom.Element;
/**
- *
+ *
* @author <a href="http://www.apache.org/~sylvain/">Sylvain Wallez</a>
* @version $Id$
*/
public interface WidgetValidatorBuilder {
-
+
String ROLE = WidgetValidatorBuilder.class.getName();
-
+
/**
* Builds a {@link WidgetValidator} for a particular widget definition.
*
Modified: cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/validation/impl/JavaScriptValidatorBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/validation/impl/JavaScriptValidatorBuilder.java?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/validation/impl/JavaScriptValidatorBuilder.java (original)
+++ cocoon/blocks/forms/trunk/java/org/apache/cocoon/forms/validation/impl/JavaScriptValidatorBuilder.java Fri Sep 16 06:46:22 2005
@@ -35,7 +35,7 @@
*/
public class JavaScriptValidatorBuilder
implements WidgetValidatorBuilder, Contextualizable, ThreadSafe {
-
+
private Context avalonContext;
private static final String[] ARG_NAMES = {"widget"};
Modified: cocoon/blocks/forms/trunk/samples/captcha/forms/captcha.tpl.xml
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/samples/captcha/forms/captcha.tpl.xml?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/samples/captcha/forms/captcha.tpl.xml (original)
+++ cocoon/blocks/forms/trunk/samples/captcha/forms/captcha.tpl.xml Fri Sep 16 06:46:22 2005
@@ -18,6 +18,7 @@
xmlns:fi="http://apache.org/cocoon/forms/1.0#instance"
xmlns:jx="http://apache.org/cocoon/templates/jx/1.0">
+ <h4 class="samplesGroup">CAPTCHA widget</h4>
<title>CAPTCHA validation sample form</title>
<content>
<p>This is a demonstration of <a href="http://www.captcha.net/">CAPTCHA</a>
@@ -29,7 +30,11 @@
<ft:widget id="f1"/>
</fi:items>
</fi:group>
+ After entering the string, press Enter.
</ft:form-template>
+ <p>
+ <a href="../">Back to Forms samples</a>
+ </p>
</content>
</page>
Modified: cocoon/blocks/forms/trunk/samples/captcha/sitemap.xmap
URL: http://svn.apache.org/viewcvs/cocoon/blocks/forms/trunk/samples/captcha/sitemap.xmap?rev=289538&r1=289537&r2=289538&view=diff
==============================================================================
--- cocoon/blocks/forms/trunk/samples/captcha/sitemap.xmap (original)
+++ cocoon/blocks/forms/trunk/samples/captcha/sitemap.xmap Fri Sep 16 06:46:22 2005
@@ -88,6 +88,8 @@
<map:transform src="../resources/forms-samples-styling.xsl">
<map:parameter name="resources-uri" value="../resources"/>
</map:transform>
+ <map:transform type="i18n">
+ </map:transform>
<map:serialize/>
</map:match>