diff --git a/project-build.xml b/project-build.xml index 9410833149..91169a4601 100644 --- a/project-build.xml +++ b/project-build.xml @@ -42,7 +42,6 @@ - diff --git a/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java b/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java index 65bf2b9568..b4aed021d2 100644 --- a/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java +++ b/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java @@ -18,13 +18,7 @@ package org.alfresco.web.bean.wcm; import java.io.File; import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.ResourceBundle; +import java.util.*; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import javax.faces.event.ValueChangeEvent; @@ -76,6 +70,7 @@ public class CreateFormWizard * Simple wrapper class to represent a form data renderer */ public class RenderingEngineTemplateData + implements Serializable { private final String fileName; private final File file; @@ -171,12 +166,13 @@ public class CreateFormWizard protected ContentService contentService; protected MimetypeService mimetypeService; protected WorkflowService workflowService; - private DataModel renderingEngineTemplatesDataModel; + private transient DataModel renderingEngineTemplatesDataModel; private List renderingEngineTemplates = null; private String outputPathPatternForFormInstanceData = null; private String outputPathPatternForRendition = null; private String mimetypeForRendition = null; - private List mimetypeChoices = null; + private transient List mimetypeChoices = null; + private transient List schemaRootElementNameChoices = null; // ------------------------------------------------------------------------------ // Wizard implementation @@ -305,6 +301,7 @@ public class CreateFormWizard this.removeUploadedSchemaFile(); this.removeUploadedRenderingEngineTemplateFile(); this.schemaRootElementName = null; + this.schemaRootElementNameChoices = null; this.formName = null; this.formTitle = null; this.formDescription = null; @@ -472,6 +469,7 @@ public class CreateFormWizard public String removeUploadedSchemaFile() { clearUpload(FILE_SCHEMA); + this.schemaRootElementNameChoices = null; // refresh the current page return null; @@ -488,7 +486,10 @@ public class CreateFormWizard return null; } - public String validateSchema() + /** + * Action handler called when the schema has been uploaded. + */ + public String schemaFileValueChanged(final ValueChangeEvent vce) { if (this.getSchemaFile() != null) { @@ -692,9 +693,13 @@ public class CreateFormWizard */ public List getSchemaRootElementNameChoices() { - final List result = new LinkedList(); - if (this.getSchemaFile() != null) + if (this.getSchemaFile() == null) { + return Collections.EMPTY_LIST; + } + if (this.schemaRootElementNameChoices == null) + { + this.schemaRootElementNameChoices = new LinkedList(); final FormsService ts = FormsService.getInstance(); try { @@ -704,7 +709,7 @@ public class CreateFormWizard for (int i = 0; i < elementsMap.getLength(); i++) { final XSElementDeclaration e = (XSElementDeclaration)elementsMap.item(i); - result.add(new SelectItem(e.getName(), e.getName())); + this.schemaRootElementNameChoices.add(new SelectItem(e.getName(), e.getName())); } } catch (Exception e) @@ -714,7 +719,7 @@ public class CreateFormWizard Utils.addErrorMessage(msg, e); } } - return result; + return this.schemaRootElementNameChoices; } /** @@ -722,7 +727,7 @@ public class CreateFormWizard */ public void setFormName(final String formName) { - this.formName = formName; + this.formName = formName != null && formName.length() != 0 ? formName : null; } /** @@ -759,7 +764,7 @@ public class CreateFormWizard */ public void setFormTitle(final String formTitle) { - this.formTitle = formTitle; + this.formTitle = formTitle != null && formTitle.length() != 0 ? formTitle : null; } /** diff --git a/source/java/org/alfresco/web/bean/wcm/CreateWebContentWizard.java b/source/java/org/alfresco/web/bean/wcm/CreateWebContentWizard.java index def073c299..1b8f4221a8 100644 --- a/source/java/org/alfresco/web/bean/wcm/CreateWebContentWizard.java +++ b/source/java/org/alfresco/web/bean/wcm/CreateWebContentWizard.java @@ -80,7 +80,7 @@ public class CreateWebContentWizard extends BaseContentWizard protected String content = null; protected String formName; - protected List createMimeTypes; + protected transient List createMimeTypes; protected String createdPath = null; protected List renditions = null; protected FormInstanceData formInstanceData = null; diff --git a/source/java/org/alfresco/web/forms/FreeMarkerRenderingEngine.java b/source/java/org/alfresco/web/forms/FreeMarkerRenderingEngine.java index 61d586c2c9..613e7669f6 100644 --- a/source/java/org/alfresco/web/forms/FreeMarkerRenderingEngine.java +++ b/source/java/org/alfresco/web/forms/FreeMarkerRenderingEngine.java @@ -32,7 +32,6 @@ import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.web.bean.wcm.AVMConstants; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.chiba.xml.util.DOMUtil; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; diff --git a/source/java/org/alfresco/web/forms/xforms/SchemaFormBuilder.java b/source/java/org/alfresco/web/forms/xforms/SchemaFormBuilder.java index b6ec724cc2..de69e04ccd 100644 --- a/source/java/org/alfresco/web/forms/xforms/SchemaFormBuilder.java +++ b/source/java/org/alfresco/web/forms/xforms/SchemaFormBuilder.java @@ -27,8 +27,9 @@ import org.apache.commons.jxpath.Pointer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.xerces.xs.*; -import org.chiba.xml.util.DOMUtil; -import org.chiba.xml.xforms.NamespaceCtx; +import org.chiba.xml.dom.DOMUtil; +import org.chiba.xml.ns.NamespaceConstants; +import org.chiba.xml.ns.NamespaceResolver; import org.w3c.dom.*; import org.w3c.dom.ls.*; @@ -44,76 +45,44 @@ import org.w3c.dom.ls.*; public class SchemaFormBuilder { + ///////////////////////////////////////////////////////////////////////////// + + public enum SubmitMethod + { + POST("post"), + GET("get"), + PUT("put"), + FORM_DATA_POST("form-data-post"), + URL_ENCODED_POST("urlencoded-post"); + + private final String value; + + SubmitMethod(final String value) + { + this.value = value; + } + + public String toString() + { + return this.value; + } + } + + ///////////////////////////////////////////////////////////////////////////// + public final static Log LOGGER = LogFactory.getLog(SchemaFormBuilder.class); - /** XMLSchema Namespace declaration */ - public static final String XMLSCHEMA_NS = - "http://www.w3.org/2001/XMLSchema"; - - /** XMLSchema prefix */ - public static final String XMLSCHEMA_NS_PREFIX = "xs:"; - - /** XMLSchema Instance Namespace declaration */ - private static final String XMLSCHEMA_INSTANCE_NS = - "http://www.w3.org/2001/XMLSchema-instance"; - - /** XMLSchema instance prefix */ - private static final String XMLSCHEMA_INSTANCE_NS_PREFIX = "xsi"; - /** XMLNS Namespace declaration. */ public static final String XMLNS_NAMESPACE_URI = "http://www.w3.org/2000/xmlns/"; - /** XML Namespace declaration */ - private static final String XML_NAMESPACE_URI = - "http://www.w3.org/XML/1998/namespace"; - - /** XForms namespace declaration. */ - private static final String XFORMS_NS = - "http://www.w3.org/2002/xforms"; - - /** XForms prefix */ - private static final String XFORMS_NS_PREFIX = "xforms"; - /** Alfresco namespace declaration. */ private static final String ALFRESCO_NS = "http://www.alfresco.org/alfresco"; /** Alfresco prefix */ - private static final String ALFRESCO_NS_PREFIX = "alfresco"; - - /** XML Events namsepace declaration. */ - private static final String XMLEVENTS_NS = "http://www.w3.org/2001/xml-events"; - - /** XML Events prefix */ - private static final String XMLEVENTS_NS_PREFIX = "ev"; - - /** - * Prossible values of the "@method" on the "submission" element - */ - public static final String SUBMIT_METHOD_POST = "post"; - - /** - * __UNDOCUMENTED__ - */ - public static final String SUBMIT_METHOD_PUT = "put"; - - /** - * __UNDOCUMENTED__ - */ - public static final String SUBMIT_METHOD_GET = "get"; - - /** - * __UNDOCUMENTED__ - */ - public static final String SUBMIT_METHOD_FORM_DATA_POST = "form-data-post"; - - /** - * __UNDOCUMENTED__ - */ - public static final String SUBMIT_METHOD_URLENCODED_POST = - "urlencoded-post"; + private static final String ALFRESCO_PREFIX = "alfresco"; private static final String PROPERTY_PREFIX = "http://www.chiba.org/properties/schemaFormBuilder/"; @@ -182,7 +151,7 @@ public class SchemaFormBuilder private static final String DEFAULT_LONG_LIST_MAX_SIZE = "6"; private final String action; - private final String submitMethod; + private final SubmitMethod submitMethod; private final String base; protected WrapperElementsBuilder wrapper = new XHTMLWrapperElementsBuilder(); @@ -209,14 +178,14 @@ public class SchemaFormBuilder /** * Creates a new SchemaFormBuilder object. * - * @param rootElementName __UNDOCUMENTED__ - * @param instanceSource __UNDOCUMENTED__ - * @param action __UNDOCUMENTED__ - * @param submitMethod __UNDOCUMENTED__ - * @param wrapper __UNDOCUMENTED__ + * @param rootElementName _UNDOCUMENTED_ + * @param instanceSource _UNDOCUMENTED_ + * @param action _UNDOCUMENTED_ + * @param submitMethod _UNDOCUMENTED_ + * @param wrapper _UNDOCUMENTED_ */ public SchemaFormBuilder(final String action, - final String submitMethod, + final SubmitMethod submitMethod, final WrapperElementsBuilder wrapper, final String base) { @@ -298,15 +267,13 @@ public class SchemaFormBuilder final Element formSection = (Element) xForm.getDocumentElement().getLastChild(); final Element modelSection = (Element) - xForm.getDocumentElement().getElementsByTagNameNS(SchemaFormBuilder.XFORMS_NS, "model").item(0); + xForm.getDocumentElement().getElementsByTagNameNS(NamespaceConstants.XFORMS_NS, "model").item(0); //add XMLSchema if we use schema types - modelSection.setAttributeNS(SchemaFormBuilder.XFORMS_NS, "schema", "#schema-1"); + modelSection.setAttributeNS(NamespaceConstants.XFORMS_NS, "schema", "#schema-1"); final Element importedSchemaDocumentElement = (Element) xForm.importNode(schemaDocument.getDocumentElement(), true); - importedSchemaDocumentElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - "id", - "schema-1"); + importedSchemaDocumentElement.setAttributeNS(null, "id", "schema-1"); modelSection.appendChild(importedSchemaDocumentElement); @@ -347,15 +314,15 @@ public class SchemaFormBuilder } rootElementName = this.getElementName(rootElementDecl, xForm); final Element instanceElement = - xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":instance"); + xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":instance"); modelSection.appendChild(instanceElement); this.setXFormsId(instanceElement); final Element defaultInstanceDocumentElement = xForm.createElement(rootElementName); this.addNamespace(defaultInstanceDocumentElement, - SchemaFormBuilder.XMLSCHEMA_INSTANCE_NS_PREFIX, - SchemaFormBuilder.XMLSCHEMA_INSTANCE_NS); + NamespaceConstants.XMLSCHEMA_INSTANCE_PREFIX, + NamespaceConstants.XMLSCHEMA_INSTANCE_NS); Element importedInstanceDocumentElement = null; if (instanceDocument == null || instanceDocument.getDocumentElement() == null) @@ -372,13 +339,13 @@ public class SchemaFormBuilder xForm.importNode(instanceDocumentElement, true); //add XMLSchema instance NS this.addNamespace(importedInstanceDocumentElement, - SchemaFormBuilder.XMLSCHEMA_INSTANCE_NS_PREFIX, - SchemaFormBuilder.XMLSCHEMA_INSTANCE_NS); + NamespaceConstants.XMLSCHEMA_INSTANCE_PREFIX, + NamespaceConstants.XMLSCHEMA_INSTANCE_NS); instanceElement.appendChild(importedInstanceDocumentElement); final Element prototypeInstanceElement = - xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":instance"); + xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":instance"); modelSection.appendChild(prototypeInstanceElement); this.setXFormsId(prototypeInstanceElement, "instance_prototype"); prototypeInstanceElement.appendChild(defaultInstanceDocumentElement); @@ -400,37 +367,37 @@ public class SchemaFormBuilder } Element submitInfoElement = - xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":submission"); + xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":submission"); modelSection.appendChild(submitInfoElement); - //submitInfoElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,SchemaFormBuilder.XFORMS_NS_PREFIX + ":id","save"); + //submitInfoElement.setAttributeNS(NamespaceConstants.XFORMS_NS,NamespaceConstants.XFORMS_PREFIX + ":id","save"); String submissionId = this.setXFormsId(submitInfoElement); //action - submitInfoElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":action", + submitInfoElement.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":action", this.action == null ? "" : this.base + this.action); //method - submitInfoElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":method", - (this.submitMethod != null && this.submitMethod.length() != 0 + submitInfoElement.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":method", + (this.submitMethod != null ? this.submitMethod - : SchemaFormBuilder.SUBMIT_METHOD_POST)); + : SchemaFormBuilder.SubmitMethod.POST).toString()); final Element submitButton = - xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, SchemaFormBuilder.XFORMS_NS_PREFIX + ":submit"); + xForm.createElementNS(NamespaceConstants.XFORMS_NS, NamespaceConstants.XFORMS_PREFIX + ":submit"); final Element submitControlWrapper = this.wrapper.createControlsWrapper(submitButton); formContentWrapper.appendChild(submitControlWrapper); - submitButton.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":submission", + submitButton.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":submission", submissionId); this.setXFormsId(submitButton); final Element submitButtonCaption = - xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":label"); + xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":label"); submitButton.appendChild(submitButtonCaption); submitButtonCaption.appendChild(xForm.createTextNode("Submit")); this.setXFormsId(submitButtonCaption); @@ -493,7 +460,7 @@ public class SchemaFormBuilder new LinkedList(); final Iterator it = - prototypeContext.iteratePointers("//*[@" + SchemaFormBuilder.ALFRESCO_NS_PREFIX + + prototypeContext.iteratePointers("//*[@" + SchemaFormBuilder.ALFRESCO_PREFIX + ":prototype='true']"); while (it.hasNext()) { @@ -590,9 +557,9 @@ public class SchemaFormBuilder protected String setXFormsId(final Element el, String id) { - if (el.hasAttributeNS(SchemaFormBuilder.XFORMS_NS, "id")) + if (el.hasAttributeNS(null, "id")) { - el.removeAttributeNS(SchemaFormBuilder.XFORMS_NS, "id"); + el.removeAttributeNS(null, "id"); } if (id == null) { @@ -605,9 +572,7 @@ public class SchemaFormBuilder id = name + "_" + count; } - el.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":id", - id); + el.setAttributeNS(null, "id", id); return id; } @@ -617,7 +582,7 @@ public class SchemaFormBuilder private void resetXFormIds(final Element newControl) { if (newControl.getNamespaceURI() != null && - newControl.getNamespaceURI().equals(SchemaFormBuilder.XFORMS_NS)) + newControl.getNamespaceURI().equals(NamespaceConstants.XFORMS_NS)) { this.setXFormsId(newControl); } @@ -635,11 +600,11 @@ public class SchemaFormBuilder } /** - * __UNDOCUMENTED__ + * _UNDOCUMENTED_ * - * @param xForm __UNDOCUMENTED__ - * @param choicesElement __UNDOCUMENTED__ - * @param choiceValues __UNDOCUMENTED__ + * @param xForm _UNDOCUMENTED_ + * @param choicesElement _UNDOCUMENTED_ + * @param choiceValues _UNDOCUMENTED_ */ protected void addChoicesForSelectControl(final Document xForm, final Element choicesElement, @@ -661,7 +626,7 @@ public class SchemaFormBuilder this.createCaption(choice.getKey(), choice.getValue(), resourceBundle), - this.createCaption(choice.getKey())); + choice.getKey()); choicesElement.appendChild(item); } } @@ -704,30 +669,30 @@ public class SchemaFormBuilder /// action in the case - Element action = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":action"); + Element action = xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":action"); this.setXFormsId(action); item.appendChild(action); - action.setAttributeNS(SchemaFormBuilder.XMLEVENTS_NS, - SchemaFormBuilder.XMLEVENTS_NS_PREFIX + ":event", + action.setAttributeNS(NamespaceConstants.XMLEVENTS_NS, + NamespaceConstants.XMLEVENTS_PREFIX + ":event", "xforms-select"); - Element toggle = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":toggle"); + Element toggle = xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":toggle"); this.setXFormsId(toggle); //build the case element - Element caseElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":case"); + Element caseElement = xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":case"); String case_id = this.setXFormsId(caseElement); result.put(textValue, caseElement); - toggle.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":case", + toggle.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":case", case_id); - //toggle.setAttributeNS(SchemaFormBuilder.XFORMS_NS,SchemaFormBuilder.XFORMS_NS_PREFIX + ":case",bindIdPrefix + "_" + textValue +"_case"); + //toggle.setAttributeNS(NamespaceConstants.XFORMS_NS,NamespaceConstants.XFORMS_PREFIX + ":case",bindIdPrefix + "_" + textValue +"_case"); action.appendChild(toggle); } return result; @@ -828,18 +793,18 @@ public class SchemaFormBuilder //find the existing bind Id //(modelSection is the enclosing bind of the element) - final NodeList binds = modelSection.getElementsByTagNameNS(SchemaFormBuilder.XFORMS_NS, "bind"); + final NodeList binds = modelSection.getElementsByTagNameNS(NamespaceConstants.XFORMS_NS, "bind"); String bindId = null; for (int j = 0; j < binds.getLength() && bindId == null; j++) { Element bind = (Element) binds.item(j); - String nodeset = bind.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "nodeset"); + String nodeset = bind.getAttributeNS(NamespaceConstants.XFORMS_NS, "nodeset"); if (nodeset != null) { //remove "@" in nodeset String name = nodeset.substring(1); if (name.equals(attributeName)) - bindId = bind.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "id"); + bindId = bind.getAttributeNS(null, "id"); } } @@ -852,7 +817,7 @@ public class SchemaFormBuilder JXPathContext context = JXPathContext.newContext(formSection.getOwnerDocument()); final Pointer pointer = - context.getPointer("//*[@" + SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind='" + bindId + "']"); + context.getPointer("//*[@" + NamespaceConstants.XFORMS_PREFIX + ":bind='" + bindId + "']"); if (pointer != null) control = (Element)pointer.getNode(); } @@ -1226,13 +1191,13 @@ public class SchemaFormBuilder } Element control = - xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":select1"); + xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":select1"); String select1_id = this.setXFormsId(control); Element choices = - xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":choices"); + xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":choices"); this.setXFormsId(choices); //get possible values @@ -1257,8 +1222,8 @@ public class SchemaFormBuilder { String caption = this.createCaption(elementDecl.getName() + " Type"); Element controlCaption = - xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":label"); + xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":label"); control.appendChild(controlCaption); this.setXFormsId(controlCaption); controlCaption.appendChild(xForm.createTextNode(caption)); @@ -1266,31 +1231,31 @@ public class SchemaFormBuilder // multiple compatible types for this element exist // in the schema - allow the user to choose from // between compatible non-abstract types - Element bindElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind"); + Element bindElement = xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":bind"); String bindId = this.setXFormsId(bindElement); - bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset", + bindElement.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":nodeset", pathToRoot + "/@xsi:type"); modelSection.appendChild(bindElement); - control.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind", + control.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":bind", bindId); //add the "element" bind, in addition - Element bindElement2 = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind"); + Element bindElement2 = xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":bind"); String bindId2 = this.setXFormsId(bindElement2); - bindElement2.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset", + bindElement2.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":nodeset", pathToRoot); modelSection.appendChild(bindElement2); - control.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":appearance", + control.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":appearance", (enumValues.size() < Long.parseLong(getProperty(SELECTONE_LONG_LIST_SIZE_PROP)) ? getProperty(SELECTONE_UI_CONTROL_SHORT_PROP) : getProperty(SELECTONE_UI_CONTROL_LONG_PROP))); @@ -1306,19 +1271,19 @@ public class SchemaFormBuilder choices.appendChild(item); // not(purchaseOrder/state = '[Choose State]') - //String isValidExpr = "not(" + bindElement.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "nodeset") + " = '" + pleaseSelect + "')"; + //String isValidExpr = "not(" + bindElement.getAttributeNS(NamespaceConstants.XFORMS_NS, "nodeset") + " = '" + pleaseSelect + "')"; // ->no, not(. = '[Choose State]') String isValidExpr = "not( . = '" + pleaseSelect + "')"; //check if there was a constraint - String constraint = bindElement.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "constraint"); + String constraint = bindElement.getAttributeNS(NamespaceConstants.XFORMS_NS, "constraint"); constraint = (constraint != null && constraint.length() != 0 ? constraint + " && " + isValidExpr : isValidExpr); - bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":constraint", + bindElement.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":constraint", constraint); } @@ -1335,35 +1300,35 @@ public class SchemaFormBuilder ///////////////// //add a trigger for this control (is there a way to not need it ?) - Element trigger = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":trigger"); + Element trigger = xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":trigger"); formSection.appendChild(trigger); this.setXFormsId(trigger); - Element label_trigger = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":label"); + Element label_trigger = xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":label"); this.setXFormsId(label_trigger); trigger.appendChild(label_trigger); String trigger_caption = this.createCaption("validate choice"); label_trigger.appendChild(xForm.createTextNode(trigger_caption)); - Element action_trigger = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":action"); + Element action_trigger = xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":action"); this.setXFormsId(action_trigger); trigger.appendChild(action_trigger); - Element dispatch_trigger = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":dispatch"); + Element dispatch_trigger = xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":dispatch"); this.setXFormsId(dispatch_trigger); action_trigger.appendChild(dispatch_trigger); - dispatch_trigger.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":name", + dispatch_trigger.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":name", "DOMActivate"); - dispatch_trigger.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":target", + dispatch_trigger.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":target", select1_id); ///////////////// //add switch - Element switchElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":switch"); + Element switchElement = xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":switch"); this.setXFormsId(switchElement); Element switchControlWrapper = @@ -1408,8 +1373,8 @@ public class SchemaFormBuilder type.getTypeCategory() == XSTypeDefinition.COMPLEX_TYPE) { - //Element caseElement = (Element) xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,SchemaFormBuilder.XFORMS_NS_PREFIX + ":case"); - //caseElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,SchemaFormBuilder.XFORMS_NS_PREFIX + ":id",bindId + "_" + type.getName() +"_case"); + //Element caseElement = (Element) xForm.createElementNS(NamespaceConstants.XFORMS_NS,NamespaceConstants.XFORMS_PREFIX + ":case"); + //caseElement.setAttributeNS(NamespaceConstants.XFORMS_NS,NamespaceConstants.XFORMS_PREFIX + ":id",bindId + "_" + type.getName() +"_case"); //String case_id=this.setXFormsId(caseElement); Element caseElement = caseTypes.get(type.getName()); switchElement.appendChild(caseElement); @@ -1433,12 +1398,12 @@ public class SchemaFormBuilder { LOGGER.debug(FormsService.getInstance().writeXMLToString(bindElement2)); } - NodeList binds = bindElement2.getElementsByTagNameNS(SchemaFormBuilder.XFORMS_NS, "bind"); + NodeList binds = bindElement2.getElementsByTagNameNS(NamespaceConstants.XFORMS_NS, "bind"); Element thisBind = null; for (int i = 0; i < binds.getLength() && thisBind == null; i++) { Element subBind = (Element) binds.item(i); - String name = subBind.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "nodeset"); + String name = subBind.getAttributeNS(NamespaceConstants.XFORMS_NS, "nodeset"); if (LOGGER.isDebugEnabled()) LOGGER.debug("Testing sub-bind with nodeset " + name); @@ -1473,13 +1438,13 @@ public class SchemaFormBuilder } //change relevant attribute - String relevant = subBind.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "relevant"); + String relevant = subBind.getAttributeNS(NamespaceConstants.XFORMS_NS, "relevant"); if (relevant != null && relevant.length() != 0) newRelevant = ("(" + relevant + ") and " + newRelevant); if (newRelevant != null && newRelevant.length() != 0) - subBind.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":relevant", + subBind.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":relevant", newRelevant); } } @@ -1510,11 +1475,11 @@ public class SchemaFormBuilder // create the element and add it to the model. final Element bindElement = - xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind"); + xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":bind"); final String bindId = this.setXFormsId(bindElement); - bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset", + bindElement.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":nodeset", pathToRoot); modelSection.appendChild(bindElement); @@ -1645,14 +1610,14 @@ public class SchemaFormBuilder //find the existing bind Id //(modelSection is the enclosing bind of the element) - NodeList binds = modelSection.getElementsByTagNameNS(SchemaFormBuilder.XFORMS_NS, "bind"); + NodeList binds = modelSection.getElementsByTagNameNS(NamespaceConstants.XFORMS_NS, "bind"); String bindId = null; for (int i = 0; i < binds.getLength() && bindId == null; i++) { Element bind = (Element)binds.item(i); - String nodeset = bind.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "nodeset"); + String nodeset = bind.getAttributeNS(NamespaceConstants.XFORMS_NS, "nodeset"); if (nodeset != null && nodeset.equals(element.getName())) - bindId = bind.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "id"); + bindId = bind.getAttributeNS(null, "id"); } //find the control @@ -1665,7 +1630,7 @@ public class SchemaFormBuilder final JXPathContext context = JXPathContext.newContext(formSection.getOwnerDocument()); final Pointer pointer = - context.getPointer("//*[@" + SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind='" + bindId + "']"); + context.getPointer("//*[@" + NamespaceConstants.XFORMS_PREFIX + ":bind='" + bindId + "']"); if (pointer != null) control = (Element) pointer.getNode(); } @@ -1726,7 +1691,7 @@ public class SchemaFormBuilder if (i == elementOccurs.minimum) { e.setAttributeNS(SchemaFormBuilder.ALFRESCO_NS, - SchemaFormBuilder.ALFRESCO_NS_PREFIX + ":prototype", + SchemaFormBuilder.ALFRESCO_PREFIX + ":prototype", "true"); } defaultInstanceElement.appendChild(e); @@ -1765,11 +1730,11 @@ public class SchemaFormBuilder controlType.getName() + ", maxOccurs=" + o.maximum); final Element repeatSection = - xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":repeat"); + xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":repeat"); //bind instead of repeat - //repeatSection.setAttributeNS(SchemaFormBuilder.XFORMS_NS,SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset",pathToRoot); + //repeatSection.setAttributeNS(NamespaceConstants.XFORMS_NS,NamespaceConstants.XFORMS_PREFIX + ":nodeset",pathToRoot); // bind -> last element in the modelSection Element bind = DOMUtil.getLastChildElement(modelSection); String bindId = null; @@ -1777,7 +1742,7 @@ public class SchemaFormBuilder if (bind != null && bind.getLocalName() != null && "bind".equals(bind.getLocalName())) - bindId = bind.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "id"); + bindId = bind.getAttributeNS(null, "id"); else { LOGGER.warn("addRepeatIfNecessary: bind not found: " + bind @@ -1789,19 +1754,19 @@ public class SchemaFormBuilder if (bind != null && bind.getLocalName() != null && "bind".equals(bind.getLocalName())) - bindId = bind.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "id"); + bindId = bind.getAttributeNS(null, "id"); else LOGGER.warn("addRepeatIfNecessary: bind really not found"); } - repeatSection.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind", + repeatSection.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":bind", bindId); this.setXFormsId(repeatSection); //appearance=full is more user friendly - repeatSection.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":appearance", + repeatSection.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":appearance", "full"); final Element controlWrapper = @@ -1809,8 +1774,8 @@ public class SchemaFormBuilder formSection.appendChild(controlWrapper); //add a group inside the repeat? - final Element group = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":group"); + final Element group = xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":group"); this.setXFormsId(group); repeatSection.appendChild(group); return group; @@ -1843,8 +1808,8 @@ public class SchemaFormBuilder } // create the element and add it to the model. - Element bindElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind"); + Element bindElement = xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":bind"); String bindId = this.setXFormsId(bindElement); modelSection.appendChild(bindElement); bindElement = this.startBindElement(bindElement, schema, controlType, owner, pathToRoot, o); @@ -1882,11 +1847,11 @@ public class SchemaFormBuilder //if there is a repeat -> create another bind with "." Element bindElement2 = - xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind"); + xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":bind"); String bindId2 = this.setXFormsId(bindElement2); - bindElement2.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset", + bindElement2.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":nodeset", "."); bindElement.appendChild(bindElement2); @@ -1912,8 +1877,8 @@ public class SchemaFormBuilder // not sure if this is a workaround or this is just the way XForms works... // // if (!repeatSection.equals(formSection)) -// formControl.setAttributeNS(SchemaFormBuilder.XFORMS_NS, -// SchemaFormBuilder.XFORMS_NS_PREFIX + ":ref", +// formControl.setAttributeNS(NamespaceConstants.XFORMS_NS, +// NamespaceConstants.XFORMS_PREFIX + ":ref", // "."); Element hint = this.createHint(xForm, owner, resourceBundle); @@ -2013,8 +1978,8 @@ public class SchemaFormBuilder } this.startFormControl(formControl, controlType); - formControl.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind", + formControl.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":bind", bindId); // TODO: Enhance alert statement based on facet restrictions. @@ -2023,8 +1988,8 @@ public class SchemaFormBuilder // // e.g. Please provide a valid value for 'Address'. 'Address' is a mandatory decimal field. // - final Element alertElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":alert"); + final Element alertElement = xForm.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":alert"); formControl.appendChild(alertElement); this.setXFormsId(alertElement); @@ -2073,22 +2038,35 @@ public class SchemaFormBuilder //local type name String localTypeName = typeName; - int index = typeName.indexOf(":"); + final int index = typeName.indexOf(':'); if (index > -1 && typeName.length() > index) + { localTypeName = typeName.substring(index + 1); - - //namespace prefix in this document - String prefix = NamespaceCtx.getPrefix(context, typeNS); + } //completeTypeName = new prefix + local name String result = localTypeName; - if (prefix != null && prefix.length() != 0) - result = prefix + ":" + localTypeName; + if (typeNS != null) + { + //namespace prefix in this document + if (LOGGER.isDebugEnabled()) + { + LOGGER.debug("resolving namespace prefix for uri " + typeNS + + " using document element " + context); + } + final String prefix = NamespaceResolver.getPrefix(context, typeNS); + if (prefix != null && prefix.length() != 0) + { + result = prefix + ":" + localTypeName; + } + } if (LOGGER.isDebugEnabled()) + { LOGGER.debug("getXFormsTypeName: typeName=" + typeName + ", typeNS=" + typeNS + ", result=" + result); + } return result; } @@ -2098,25 +2076,27 @@ public class SchemaFormBuilder final Element envelopeElement = this.wrapper.createEnvelope(xformsDocument); this.addNamespace(envelopeElement, - SchemaFormBuilder.XFORMS_NS_PREFIX, - SchemaFormBuilder.XFORMS_NS); + NamespaceConstants.XFORMS_PREFIX, + NamespaceConstants.XFORMS_NS); this.addNamespace(envelopeElement, - SchemaFormBuilder.XMLEVENTS_NS_PREFIX, - SchemaFormBuilder.XMLEVENTS_NS); + NamespaceConstants.XMLEVENTS_PREFIX, + NamespaceConstants.XMLEVENTS_NS); this.addNamespace(envelopeElement, - SchemaFormBuilder.XMLSCHEMA_INSTANCE_NS_PREFIX, - SchemaFormBuilder.XMLSCHEMA_INSTANCE_NS); + NamespaceConstants.XMLSCHEMA_INSTANCE_PREFIX, + NamespaceConstants.XMLSCHEMA_INSTANCE_NS); this.addNamespace(envelopeElement, - SchemaFormBuilder.ALFRESCO_NS_PREFIX, + SchemaFormBuilder.ALFRESCO_PREFIX, SchemaFormBuilder.ALFRESCO_NS); //base if (this.base != null && this.base.length() != 0) - envelopeElement.setAttributeNS(XML_NAMESPACE_URI, "xml:base", this.base); + envelopeElement.setAttributeNS(NamespaceConstants.XML_NS, + NamespaceConstants.XML_PREFIX + ":base", + this.base); //model element - Element modelElement = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":model"); + Element modelElement = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":model"); this.setXFormsId(modelElement); Element modelWrapper = this.wrapper.createModelWrapper(modelElement); envelopeElement.appendChild(modelWrapper); @@ -2137,8 +2117,8 @@ public class SchemaFormBuilder { // add a group node and recurse Element groupElement = - xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":group"); + xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":group"); groupElement = startFormGroup(groupElement, owner); if (groupElement == null) @@ -2153,8 +2133,8 @@ public class SchemaFormBuilder formSection.appendChild(controlsWrapper); Element captionElement = - xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":label"); + xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":label"); groupElement.appendChild(captionElement); this.setXFormsId(captionElement); captionElement.appendChild(xformsDocument.createTextNode(this.createCaption(owner, resourceBundle))); @@ -2281,16 +2261,16 @@ public class SchemaFormBuilder String caption, XSTypeDefinition controlType) { - Element control = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":textarea"); + Element control = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":textarea"); this.setXFormsId(control); // control.setAttributeNS(SchemaFormBuilder.CHIBA_NS, -// SchemaFormBuilder.CHIBA_NS_PREFIX + "height", +// SchemaFormBuilder.CHIBA_PREFIX + "height", // "3"); //label - Element captionElement = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":label"); + Element captionElement = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":label"); control.appendChild(captionElement); this.setXFormsId(captionElement); captionElement.appendChild(xformsDocument.createTextNode(caption)); @@ -2320,8 +2300,8 @@ public class SchemaFormBuilder if ("boolean".equals(controlType.getName())) { - control = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":select1"); + control = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":select1"); this.setXFormsId(control); final String[] values = { "true", "false" }; for (String v : values) @@ -2332,26 +2312,26 @@ public class SchemaFormBuilder } else if ("anyURI".equals(controlType.getName())) { - control = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":upload"); - final Element e = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":filename"); + control = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":upload"); + final Element e = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":filename"); control.appendChild(e); - e.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":ref", + e.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":ref", "."); this.setXFormsId(control); } else { - control = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, SchemaFormBuilder.XFORMS_NS_PREFIX + ":input"); + control = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, NamespaceConstants.XFORMS_PREFIX + ":input"); this.setXFormsId(control); } //label final Element captionElement = - xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":label"); + xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":label"); control.appendChild(captionElement); this.setXFormsId(captionElement); captionElement.appendChild(xformsDocument.createTextNode(caption)); @@ -2393,19 +2373,19 @@ public class SchemaFormBuilder if (enumFacets.getLength() <= 0) return null; - Element control = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":select1"); + Element control = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":select1"); this.setXFormsId(control); //label - Element captionElement1 = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":label"); + Element captionElement1 = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":label"); control.appendChild(captionElement1); this.setXFormsId(captionElement1); captionElement1.appendChild(xformsDocument.createTextNode(caption)); - Element choices = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":choices"); + Element choices = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":choices"); this.setXFormsId(choices); final XSObjectList mvFacets = controlType.getMultiValueFacets(); @@ -2425,8 +2405,8 @@ public class SchemaFormBuilder : null)); } - control.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":appearance", + control.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":appearance", (enumFacets.getLength() < Long.parseLong(getProperty(SELECTONE_LONG_LIST_SIZE_PROP)) ? getProperty(SELECTONE_UI_CONTROL_SHORT_PROP) : getProperty(SELECTONE_UI_CONTROL_LONG_PROP))); @@ -2442,19 +2422,19 @@ public class SchemaFormBuilder choices.appendChild(item); // not(purchaseOrder/state = '[Choose State]') - //String isValidExpr = "not(" + bindElement.getAttributeNS(SchemaFormBuilder.XFORMS_NS,"nodeset") + " = '" + pleaseSelect + "')"; + //String isValidExpr = "not(" + bindElement.getAttributeNS(NamespaceConstants.XFORMS_NS,"nodeset") + " = '" + pleaseSelect + "')"; // ->no, not(. = '[Choose State]') final String isValidExpr = "not( . = '" + pleaseSelect + "')"; //check if there was a constraint - String constraint = bindElement.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "constraint"); + String constraint = bindElement.getAttributeNS(NamespaceConstants.XFORMS_NS, "constraint"); constraint = (constraint != null && constraint.length() != 0 ? constraint + " and " + isValidExpr : isValidExpr); - bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":constraint", + bindElement.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":constraint", constraint); } @@ -2495,13 +2475,13 @@ public class SchemaFormBuilder final StringList enumFacets = controlType.getLexicalEnumeration(); if (enumFacets.getLength() <= 0) return null; - Element control = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":select"); + Element control = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":select"); this.setXFormsId(control); //label - Element captionElement = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":label"); + Element captionElement = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":label"); control.appendChild(captionElement); this.setXFormsId(captionElement); captionElement.appendChild(xformsDocument.createTextNode(caption)); @@ -2529,13 +2509,13 @@ public class SchemaFormBuilder // // For now, use checkbox if there are < DEFAULT_LONG_LIST_MAX_SIZE items, otherwise use long control // - control.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":appearance", + control.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":appearance", (enumValues.size() < Long.parseLong(getProperty(SELECTMANY_LONG_LIST_SIZE_PROP)) ? getProperty(SELECTMANY_UI_CONTROL_SHORT_PROP) : getProperty(SELECTMANY_UI_CONTROL_LONG_PROP))); - Element choices = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":choices"); + Element choices = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":choices"); this.setXFormsId(choices); control.appendChild(choices); @@ -2570,8 +2550,8 @@ public class SchemaFormBuilder if (s == null) return null; final Element hintElement = - xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":hint"); + xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":hint"); this.setXFormsId(hintElement); hintElement.appendChild(xformsDocument.createTextNode(s)); return hintElement; @@ -2647,8 +2627,8 @@ public class SchemaFormBuilder if (o.isRepeated()) nodeset = pathToRoot + "[position() != last()]"; - bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset", + bindElement.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":nodeset", nodeset); if (!"anyType".equals(controlType.getName()) && @@ -2658,8 +2638,8 @@ public class SchemaFormBuilder schema, controlType); if (typeName != null && typeName.length() != 0) - bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":type", + bindElement.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":type", typeName); } @@ -2672,12 +2652,12 @@ public class SchemaFormBuilder ? ((XSAttributeUse)owner).getConstraintType() : XSConstants.VC_NONE))); - bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":readonly", + bindElement.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":readonly", (constraintType == XSConstants.VC_FIXED) + "()"); - bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":required", + bindElement.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":required", (o.minimum != 0) + "()"); //no more minOccurs & maxOccurs element: add a constraint if maxOccurs>1: @@ -2690,7 +2670,7 @@ public class SchemaFormBuilder //if 0 or 1 -> no constraint (managed by "required") minConstraint = "count(.) >= " + o.minimum; bindElement.setAttributeNS(ALFRESCO_NS, - ALFRESCO_NS_PREFIX + ":minimum", + ALFRESCO_PREFIX + ":minimum", String.valueOf(o.minimum)); } if (o.maximum > 1) @@ -2698,7 +2678,7 @@ public class SchemaFormBuilder //if 1 or unbounded -> no constraint maxConstraint = "count(.) <= " + o.maximum; bindElement.setAttributeNS(ALFRESCO_NS, - ALFRESCO_NS_PREFIX + ":maximum", + ALFRESCO_PREFIX + ":maximum", String.valueOf(o.maximum)); } @@ -2708,8 +2688,8 @@ public class SchemaFormBuilder ? minConstraint : maxConstraint)); if (constraint != null) - bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":constraint", + bindElement.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":constraint", constraint); return bindElement; } @@ -2770,16 +2750,16 @@ public class SchemaFormBuilder if ((prefix = (String) namespacePrefixes.get(namespace)) == null) { String basePrefix = (namespace.substring(namespace.lastIndexOf('/', namespace.length()-2)+1)); - int i=1; + int i = 1; prefix = basePrefix; while (namespacePrefixes.containsValue(prefix)) { prefix = basePrefix + (i++); } namespacePrefixes.put(namespace, prefix); - xformsDocument.getDocumentElement().setAttributeNS(XMLNS_NAMESPACE_URI, - "xmlns:" + prefix, - namespace); + xformsDocument.getDocumentElement().setAttributeNS(NamespaceConstants.XMLNS_NS, + NamespaceConstants.XMLNS_PREFIX + ':' + prefix, + namespace); } elementName = prefix + ":" + elementName; } @@ -2790,29 +2770,31 @@ public class SchemaFormBuilder final String nsPrefix, final String ns) { - if (!e.hasAttributeNS(XMLNS_NAMESPACE_URI, nsPrefix)) - e.setAttributeNS(XMLNS_NAMESPACE_URI, "xmlns:" + nsPrefix, ns); + if (!e.hasAttributeNS(NamespaceConstants.XMLNS_NS, nsPrefix)) + e.setAttributeNS(NamespaceConstants.XMLNS_NS, + NamespaceConstants.XMLNS_PREFIX + ':' + nsPrefix, + ns); } private void createTriggersForRepeats(final Document xformsDocument) { LOGGER.debug("creating triggers for repeats"); final HashMap bindIdToBind = new HashMap(); - final NodeList binds = xformsDocument.getElementsByTagNameNS(SchemaFormBuilder.XFORMS_NS, "bind"); + final NodeList binds = xformsDocument.getElementsByTagNameNS(NamespaceConstants.XFORMS_NS, "bind"); for (int i = 0; i < binds.getLength(); i++) { final Element b = (Element)binds.item(i); - LOGGER.debug("adding bind " + b.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "id")); - bindIdToBind.put(b.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "id"), b); + LOGGER.debug("adding bind " + b.getAttributeNS(null, "id")); + bindIdToBind.put(b.getAttributeNS(null, "id"), b); } - final NodeList repeats = xformsDocument.getElementsByTagNameNS(SchemaFormBuilder.XFORMS_NS, "repeat"); + final NodeList repeats = xformsDocument.getElementsByTagNameNS(NamespaceConstants.XFORMS_NS, "repeat"); final HashMap bindToRepeat = new HashMap(); for (int i = 0; i < repeats.getLength(); i++) { Element r = (Element)repeats.item(i); - LOGGER.debug("processing repeat " + r.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "id")); - Element bind = bindIdToBind.get(r.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "bind")); + LOGGER.debug("processing repeat " + r.getAttributeNS(null, "id")); + Element bind = bindIdToBind.get(r.getAttributeNS(NamespaceConstants.XFORMS_NS, "bind")); bindToRepeat.put(bind, r); String xpath = ""; @@ -2824,23 +2806,23 @@ public class SchemaFormBuilder xpath = '/' + xpath; } - LOGGER.debug("walking bind " + bind.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "id")); - String s = bind.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "nodeset"); + LOGGER.debug("walking bind " + bind.getAttributeNS(null, "id")); + String s = bind.getAttributeNS(NamespaceConstants.XFORMS_NS, "nodeset"); s = s.replaceAll("^([^\\[]+).*$", "$1"); if (bindToRepeat.containsKey(bind) && !r.equals(bindToRepeat.get(bind))) { - s += "[index(\'" + bindToRepeat.get(bind).getAttributeNS(SchemaFormBuilder.XFORMS_NS, "id") + "\')]"; + s += "[index(\'" + bindToRepeat.get(bind).getAttributeNS(null, "id") + "\')]"; } xpath = s + xpath; - bind = ((SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind").equals(bind.getParentNode().getNodeName()) + bind = ((NamespaceConstants.XFORMS_PREFIX + ":bind").equals(bind.getParentNode().getNodeName()) ? (Element)bind.getParentNode() : null); } while (bind != null); this.createTriggersForRepeat(xformsDocument, - r.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "id"), + r.getAttributeNS(null, "id"), xpath, - r.getAttributeNS(SchemaFormBuilder.XFORMS_NS, "bind")); + r.getAttributeNS(NamespaceConstants.XFORMS_NS, "bind")); } } @@ -2851,18 +2833,18 @@ public class SchemaFormBuilder final Element action) { final Element trigger = - xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":trigger"); + xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":trigger"); this.setXFormsId(trigger, id != null ? id : null); //copy the bind attribute - trigger.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind", + trigger.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":bind", bindId); //label insert final Element triggerLabel = - xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":label"); + xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":label"); this.setXFormsId(triggerLabel); trigger.appendChild(triggerLabel); @@ -2870,8 +2852,8 @@ public class SchemaFormBuilder //insert action final Element actionWrapper = - xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":action"); + xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":action"); actionWrapper.appendChild(action); trigger.appendChild(action); this.setXFormsId(action); @@ -2892,16 +2874,16 @@ public class SchemaFormBuilder //trigger insert Element action = - xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":insert"); - action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset", + xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":insert"); + action.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":nodeset", nodeset); - action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":position", + action.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":position", "before"); - action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":at", + action.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":at", "1"); final Element trigger_insert_before = @@ -2911,17 +2893,17 @@ public class SchemaFormBuilder "insert at beginning", action); - action = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":insert"); - action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset", + action = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":insert"); + action.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":nodeset", nodeset); - action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":position", + action.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":position", "after"); - action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":at", - SchemaFormBuilder.XFORMS_NS_PREFIX + ":index('" + repeatId + "')"); + action.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":at", + NamespaceConstants.XFORMS_PREFIX + ":index('" + repeatId + "')"); final Element trigger_insert_after = this.createTriggerForRepeat(xformsDocument, @@ -2931,14 +2913,14 @@ public class SchemaFormBuilder action); //trigger delete - action = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":delete"); - action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset", + action = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":delete"); + action.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":nodeset", nodeset); - action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":at", - SchemaFormBuilder.XFORMS_NS_PREFIX + ":index('" + repeatId + "')"); + action.setAttributeNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":at", + NamespaceConstants.XFORMS_PREFIX + ":index('" + repeatId + "')"); final Element trigger_delete = this.createTriggerForRepeat(xformsDocument, @@ -2976,17 +2958,17 @@ public class SchemaFormBuilder final String label, final String value) { - final Element item = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":item"); + final Element item = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":item"); this.setXFormsId(item); - Element e = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":label"); + Element e = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":label"); this.setXFormsId(e); e.appendChild(xformsDocument.createTextNode(label)); item.appendChild(e); - e = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, - SchemaFormBuilder.XFORMS_NS_PREFIX + ":value"); + e = xformsDocument.createElementNS(NamespaceConstants.XFORMS_NS, + NamespaceConstants.XFORMS_PREFIX + ":value"); this.setXFormsId(e); e.appendChild(xformsDocument.createTextNode(value)); item.appendChild(e); diff --git a/source/java/org/alfresco/web/forms/xforms/XFormsBean.java b/source/java/org/alfresco/web/forms/xforms/XFormsBean.java index df269f3c7f..9cb5f40325 100644 --- a/source/java/org/alfresco/web/forms/xforms/XFormsBean.java +++ b/source/java/org/alfresco/web/forms/xforms/XFormsBean.java @@ -18,10 +18,14 @@ package org.alfresco.web.forms.xforms; import java.io.*; import java.util.*; + import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; + +import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; + import org.alfresco.model.ContentModel; import org.alfresco.repo.avm.AVMNodeConverter; import org.alfresco.repo.content.MimetypeMap; @@ -40,23 +44,29 @@ import org.alfresco.web.bean.wcm.AVMBrowseBean; import org.alfresco.web.bean.wcm.AVMConstants; import org.alfresco.web.forms.*; import org.alfresco.web.ui.common.Utils; + import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.servlet.ServletRequestContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + +import org.chiba.xml.events.ChibaEventNames; +import org.chiba.xml.events.DOMEventNames; +import org.chiba.xml.events.XFormsEventNames; +import org.chiba.xml.events.XMLEvent; import org.chiba.xml.xforms.ChibaBean; -import org.chiba.xml.xforms.Instance; import org.chiba.xml.xforms.XFormsElement; import org.chiba.xml.xforms.connector.http.AbstractHTTPConnector; +import org.chiba.xml.xforms.core.Instance; import org.chiba.xml.xforms.core.ModelItem; -import org.chiba.xml.xforms.events.XFormsEvent; -import org.chiba.xml.xforms.events.XFormsEventFactory; import org.chiba.xml.xforms.exception.XFormsException; import org.chiba.xml.xforms.ui.BoundElement; import org.chiba.xml.xforms.ui.Upload; +import org.chiba.xml.ns.NamespaceConstants; import org.springframework.util.FileCopyUtils; + import org.w3c.dom.*; import org.w3c.dom.bootstrap.DOMImplementationRegistry; import org.w3c.dom.events.Event; @@ -85,7 +95,7 @@ public class XFormsBean private ChibaBean chibaBean; private final SchemaFormBuilder schemaFormBuilder; private final HashMap uploads = new HashMap(); - private final List eventLog = new LinkedList(); + private final List eventLog = new LinkedList(); public XFormsSession(final Document formInstanceData, final Form form, @@ -95,7 +105,7 @@ public class XFormsBean this.form = form; this.schemaFormBuilder = new SchemaFormBuilder("/ajax/invoke/XFormsBean.handleAction", - SchemaFormBuilder.SUBMIT_METHOD_POST, + SchemaFormBuilder.SubmitMethod.POST, new XHTMLWrapperElementsBuilder(), baseUrl); } @@ -177,7 +187,8 @@ public class XFormsBean /** @param xformsSession the current session */ public void setXFormsSession(final XFormsSession xformsSession) - throws XFormsException + throws FormBuilderException, + XFormsException { this.xformsSession = xformsSession; @@ -185,87 +196,47 @@ public class XFormsBean final ExternalContext externalContext = facesContext.getExternalContext(); final HttpServletRequest request = (HttpServletRequest) externalContext.getRequest(); - + final ServletContext servletContext = (ServletContext) + externalContext.getContext(); + final ChibaBean chibaBean = new ChibaBean(); + chibaBean.setConfig(servletContext.getRealPath("/WEB-INF/chiba.xml")); XFormsBean.storeCookies(request.getCookies(), chibaBean); + chibaBean.setXMLContainer(this.getXFormsDocument()); - final String cwdAVMPath = this.avmBrowseBean.getCurrentPath(); - - if (LOGGER.isDebugEnabled()) + final EventTarget et = (EventTarget) + chibaBean.getXMLContainer().getDocumentElement(); + final EventListener el = new EventListener() { - LOGGER.debug("building xform for schema " + this.xformsSession.form.getName() + - " root element " + this.xformsSession.form.getSchemaRootElementName() + - " avm cwd " + cwdAVMPath); - } - - final Locale locale = Application.getLanguage(facesContext); - final ResourceBundle resourceBundle = - this.schema2XFormsProperties.getResourceBundle(this.xformsSession.form, - locale); - - try - { - final Document schemaDocument = this.xformsSession.form.getSchema(); - XFormsBean.rewriteInlineURIs(schemaDocument, cwdAVMPath); - final Document xformsDocument = - this.xformsSession.schemaFormBuilder.buildXForm(this.xformsSession.formInstanceData, - schemaDocument, - this.xformsSession.form.getSchemaRootElementName(), - resourceBundle); - - if (LOGGER.isDebugEnabled()) + public void handleEvent(final Event e) { - LOGGER.debug("generated xform: " + - FormsService.getInstance().writeXMLToString(xformsDocument)); + XFormsBean.LOGGER.debug("received event " + e); + XFormsBean.this.xformsSession.eventLog.add((XMLEvent)e); } + }; + // interaction events my occur during init so we have to register before + et.addEventListener(ChibaEventNames.LOAD_URI, el, true); + et.addEventListener(ChibaEventNames.RENDER_MESSAGE, el, true); + et.addEventListener(ChibaEventNames.REPLACE_ALL, el, true); - chibaBean.setXMLContainer(xformsDocument); + chibaBean.init(); - final EventTarget et = (EventTarget) - chibaBean.getXMLContainer().getDocumentElement(); - final EventListener el = new EventListener() - { - public void handleEvent(final Event e) - { - XFormsBean.LOGGER.debug("received event " + e); - XFormsBean.this.xformsSession.eventLog.add((XFormsEvent)e); - } - }; - // interaction events my occur during init so we have to register before - et.addEventListener(XFormsEventFactory.CHIBA_LOAD_URI, el, true); - et.addEventListener(XFormsEventFactory.CHIBA_RENDER_MESSAGE, el, true); - et.addEventListener(XFormsEventFactory.CHIBA_REPLACE_ALL, el, true); - - chibaBean.init(); - - // register for notification events - et.addEventListener(XFormsEventFactory.SUBMIT_DONE, el, true); - et.addEventListener(XFormsEventFactory.SUBMIT_ERROR, el, true); - et.addEventListener(XFormsEventFactory.REQUIRED, el, true); - et.addEventListener(XFormsEventFactory.OPTIONAL, el, true); - et.addEventListener(XFormsEventFactory.VALID, el, true); - et.addEventListener(XFormsEventFactory.INVALID, el, true); - et.addEventListener(XFormsEventFactory.OUT_OF_RANGE, el, true); - et.addEventListener(XFormsEventFactory.CHIBA_STATE_CHANGED, el, true); - et.addEventListener(XFormsEventFactory.CHIBA_PROTOTYPE_CLONED, el, true); - et.addEventListener(XFormsEventFactory.CHIBA_ID_GENERATED, el, true); - et.addEventListener(XFormsEventFactory.CHIBA_ITEM_INSERTED, el, true); - et.addEventListener(XFormsEventFactory.CHIBA_ITEM_DELETED, el, true); - et.addEventListener(XFormsEventFactory.CHIBA_INDEX_CHANGED, el, true); - et.addEventListener(XFormsEventFactory.CHIBA_SWITCH_TOGGLED, el, true); - } - catch (FormBuilderException fbe) - { - LOGGER.error(fbe); - } - catch (IOException ioe) - { - LOGGER.error(ioe); - } - catch (SAXException saxe) - { - LOGGER.error(saxe); - } + // register for notification events + et.addEventListener(XFormsEventNames.SUBMIT, el, true); + et.addEventListener(XFormsEventNames.SUBMIT_DONE, el, true); + et.addEventListener(XFormsEventNames.SUBMIT_ERROR, el, true); + et.addEventListener(XFormsEventNames.REQUIRED, el, true); + et.addEventListener(XFormsEventNames.OPTIONAL, el, true); + et.addEventListener(XFormsEventNames.VALID, el, true); + et.addEventListener(XFormsEventNames.INVALID, el, true); + et.addEventListener(XFormsEventNames.OUT_OF_RANGE, el, true); + et.addEventListener(ChibaEventNames.STATE_CHANGED, el, true); + et.addEventListener(ChibaEventNames.PROTOTYPE_CLONED, el, true); + et.addEventListener(ChibaEventNames.ID_GENERATED, el, true); + et.addEventListener(ChibaEventNames.ITEM_INSERTED, el, true); + et.addEventListener(ChibaEventNames.ITEM_DELETED, el, true); + et.addEventListener(ChibaEventNames.INDEX_CHANGED, el, true); + et.addEventListener(ChibaEventNames.SWITCH_TOGGLED, el, true); this.xformsSession.chibaBean = chibaBean; } @@ -275,7 +246,6 @@ public class XFormsBean */ public static XFormsSession createSession(final Document formInstanceData, final Form form) - throws XFormsException { if (LOGGER.isDebugEnabled()) { @@ -328,7 +298,7 @@ public class XFormsBean LOGGER.debug(this + ".setXFormsValue(" + id + ", " + value + ")"); final ChibaBean chibaBean = this.xformsSession.chibaBean; - if (chibaBean.lookup(id) instanceof Upload) + if (chibaBean.getContainer().lookup(id) instanceof Upload) { chibaBean.updateControlValue(id, null, value, value.getBytes()); } @@ -380,7 +350,7 @@ public class XFormsBean LOGGER.debug(this + ".fireAction(" + id + ")"); final ChibaBean chibaBean = this.xformsSession.chibaBean; - chibaBean.dispatch(id, XFormsEventFactory.DOM_ACTIVATE); + chibaBean.dispatch(id, DOMEventNames.ACTIVATE); final ResponseWriter out = context.getResponseWriter(); FormsService.getInstance().writeXML(this.getEventLog(), out); @@ -435,8 +405,8 @@ public class XFormsBean final String toItemId = (String)requestParameters.get("toItemId"); LOGGER.debug(this + ".swapRepeatItems(" + fromItemId + ", " + toItemId + ")"); final ChibaBean chibaBean = this.xformsSession.chibaBean; - this.swapRepeatItems(chibaBean.lookup(fromItemId), - chibaBean.lookup(toItemId)); + this.swapRepeatItems(chibaBean.getContainer().lookup(fromItemId), + chibaBean.getContainer().lookup(toItemId)); final ResponseWriter out = context.getResponseWriter(); FormsService.getInstance().writeXML(this.getEventLog(), out); @@ -648,7 +618,7 @@ public class XFormsBean final String cwdAvmPath) { final NodeList includes = - schemaDocument.getElementsByTagNameNS(SchemaFormBuilder.XMLSCHEMA_NS, "include"); + schemaDocument.getElementsByTagNameNS(NamespaceConstants.XMLSCHEMA_NS, "include"); LOGGER.debug("rewriting " + includes.getLength() + " includes"); for (int i = 0; i < includes.getLength(); i++) { @@ -672,7 +642,7 @@ public class XFormsBean final Document result = formsService.newDocument(); final Element eventsElement = result.createElement("events"); result.appendChild(eventsElement); - for (XFormsEvent xfe : this.xformsSession.eventLog) + for (XMLEvent xfe : this.xformsSession.eventLog) { final String type = xfe.getType(); if (LOGGER.isDebugEnabled()) @@ -740,4 +710,48 @@ public class XFormsBean commonsCookies); } } + + private Document getXFormsDocument() + throws FormBuilderException + { + final String cwdAVMPath = this.avmBrowseBean.getCurrentPath(); + + if (LOGGER.isDebugEnabled()) + { + LOGGER.debug("building xform for schema " + this.xformsSession.form.getName() + + " root element " + this.xformsSession.form.getSchemaRootElementName() + + " avm cwd " + cwdAVMPath); + } + + final Locale locale = + Application.getLanguage(FacesContext.getCurrentInstance()); + final ResourceBundle resourceBundle = + this.schema2XFormsProperties.getResourceBundle(this.xformsSession.form, + locale); + try + { + final Document schemaDocument = this.xformsSession.form.getSchema(); + XFormsBean.rewriteInlineURIs(schemaDocument, cwdAVMPath); + final String rootElementName = this.xformsSession.form.getSchemaRootElementName(); + final Document result = + this.xformsSession.schemaFormBuilder.buildXForm(this.xformsSession.formInstanceData, + schemaDocument, + rootElementName, + resourceBundle); + if (LOGGER.isDebugEnabled()) + { + LOGGER.debug("generated xform: " + + FormsService.getInstance().writeXMLToString(result)); + } + return result; + } + catch (IOException ioe) + { + throw new FormBuilderException(ioe); + } + catch (SAXException saxe) + { + throw new FormBuilderException(saxe); + } + } } diff --git a/source/java/org/alfresco/web/forms/xforms/XFormsProcessor.java b/source/java/org/alfresco/web/forms/xforms/XFormsProcessor.java index 4a8a262e07..12ff2cb9cb 100644 --- a/source/java/org/alfresco/web/forms/xforms/XFormsProcessor.java +++ b/source/java/org/alfresco/web/forms/xforms/XFormsProcessor.java @@ -19,10 +19,8 @@ package org.alfresco.web.forms.xforms; import java.io.*; import javax.faces.context.FacesContext; import javax.servlet.http.HttpServletRequest; -import javax.servlet.ServletContext; import org.alfresco.web.forms.*; -import org.chiba.xml.util.DOMUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -47,18 +45,10 @@ public class XFormsProcessor final Writer out) throws FormProcessor.ProcessingException { - try - { - final Session result = - XFormsBean.createSession(instanceDataDocument, form); - this.process(result, out); - return result; - } - catch (XFormsException xfe) - { - LOGGER.error(xfe); - throw new FormProcessor.ProcessingException(xfe); - } + final Session result = + XFormsBean.createSession(instanceDataDocument, form); + this.process(result, out); + return result; } /** @@ -77,6 +67,11 @@ public class XFormsProcessor { xforms.setXFormsSession((XFormsBean.XFormsSession)session); } + catch (FormBuilderException fbe) + { + LOGGER.error(fbe); + throw new ProcessingException(fbe); + } catch (XFormsException xfe) { LOGGER.error(xfe); diff --git a/source/java/org/alfresco/web/forms/xforms/XHTMLWrapperElementsBuilder.java b/source/java/org/alfresco/web/forms/xforms/XHTMLWrapperElementsBuilder.java index f5c8b3c684..55feb05b34 100644 --- a/source/java/org/alfresco/web/forms/xforms/XHTMLWrapperElementsBuilder.java +++ b/source/java/org/alfresco/web/forms/xforms/XHTMLWrapperElementsBuilder.java @@ -19,7 +19,7 @@ package org.alfresco.web.forms.xforms; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Text; - +import org.chiba.xml.ns.NamespaceConstants; import java.util.*; /** @@ -28,224 +28,248 @@ import java.util.*; * @author Sophie Ramel */ public class XHTMLWrapperElementsBuilder - implements WrapperElementsBuilder + implements WrapperElementsBuilder { - //////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////// - private static class Link - { - public final String href; - public final String type; - public final String rel; + private static class Link + { + public final String href; + public final String type; + public final String rel; - public Link(final String href, final String type, final String rel) - { - this.href = href; - this.type = type; - this.rel = rel; - } - } + public Link(final String href, final String type, final String rel) + { + this.href = href; + this.type = type; + this.rel = rel; + } + } - //////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////// - private static class Meta - { - public final String httpEquiv; - public final String name; - public final String content; - public final String scheme; + private static class Meta + { + public final String httpEquiv; + public final String name; + public final String content; + public final String scheme; - public Meta(final String httpEquiv, - final String name, - final String content, - final String scheme) - { - this.httpEquiv = httpEquiv; - this.name = name; - this.content = content; - this.scheme = scheme; - } - } + public Meta(final String httpEquiv, + final String name, + final String content, + final String scheme) + { + this.httpEquiv = httpEquiv; + this.name = name; + this.content = content; + this.scheme = scheme; + } + } - //////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////// - private final static String XHTML_NS = "http://www.w3.org/1999/xhtml"; - private final static String XHTML_PREFIX = "xhtml"; + private String title; + private final Collection links = new LinkedList(); + private final Collection meta = new LinkedList(); + private final HashMap namespaces = + new HashMap(); + /** + * Creates a new instance of XHTMLWrapperElementsBuilder + */ + public XHTMLWrapperElementsBuilder() { } - private String title; - private final Collection links = new LinkedList(); - private final Collection meta = new LinkedList(); - private final HashMap namespaces = - new HashMap(); + /** + * add a tag "title" in the header of the HTML document + */ + public void setTitle(String title) + { + this.title = title; + } - /** - * Creates a new instance of XHTMLWrapperElementsBuilder - */ - public XHTMLWrapperElementsBuilder() { } + /** + * add a tag "link" in the header of the HTML document + * + * @param href the "href" parameter of the "link" tag + * @param type the "type" parameter of the "link" tag + * @param rel the "rel" parameter of the "link" tag + */ + public void addLink(final String href, + final String type, + final String rel) + { + links.add(new Link(href, type, rel)); + } - /** - * add a tag "title" in the header of the HTML document - */ - public void setTitle(String title) - { - this.title = title; - } + /** + * add a tag "meta" in the header of the HTML document + * + * @param http_equiv the "http-equiv" parameter of the "META" tag + * @param name the "name" parameter of the "META" tag + * @param content the "content" parameter of the "META" tag + * @param scheme the "scheme" parameter of the "META" tag + */ + public void addMeta(final String httpEquiv, + final String name, + final String content, + final String scheme) + { + meta.add(new Meta(httpEquiv, name, content, scheme)); + } - /** - * add a tag "link" in the header of the HTML document - * - * @param href the "href" parameter of the "link" tag - * @param type the "type" parameter of the "link" tag - * @param rel the "rel" parameter of the "link" tag - */ - public void addLink(final String href, - final String type, - final String rel) - { - links.add(new Link(href, type, rel)); - } + public void addNamespaceDeclaration(final String prefix, + final String url) + { + namespaces.put(prefix, url); + } - /** - * add a tag "meta" in the header of the HTML document - * - * @param http_equiv the "http-equiv" parameter of the "META" tag - * @param name the "name" parameter of the "META" tag - * @param content the "content" parameter of the "META" tag - * @param scheme the "scheme" parameter of the "META" tag - */ - public void addMeta(final String httpEquiv, - final String name, - final String content, - final String scheme) - { - meta.add(new Meta(httpEquiv, name, content, scheme)); - } + /** + * create the wrapper element of the different controls + * + * @param controlElement the control element (input, select, repeat, group, ...) + * @return the wrapper element, already containing the control element + */ + public Element createControlsWrapper(final Element controlElement) + { + return controlElement; + } - public void addNamespaceDeclaration(final String prefix, - final String url) - { - namespaces.put(prefix, url); - } + /** + * creates the global enveloppe of the resulting document, and puts it in the document + * + * @return the enveloppe + */ + public Element createEnvelope(Document doc) + { + final Element html = doc.createElementNS(NamespaceConstants.XHTML_NS, + NamespaceConstants.XHTML_PREFIX + ":html"); + //set namespace attribute + html.setAttributeNS(NamespaceConstants.XMLNS_NS, + NamespaceConstants.XMLNS_PREFIX + ':' + NamespaceConstants.XHTML_PREFIX, + NamespaceConstants.XHTML_NS); + doc.appendChild(html); - /** - * create the wrapper element of the different controls - * - * @param controlElement the control element (input, select, repeat, group, ...) - * @return the wrapper element, already containing the control element - */ - public Element createControlsWrapper(final Element controlElement) - { - return controlElement; - } + //other namespaces + for (String prefix : this.namespaces.keySet()) + { + html.setAttributeNS(NamespaceConstants.XMLNS_NS, + NamespaceConstants.XMLNS_PREFIX + ":" + prefix, + this.namespaces.get(prefix)); - /** - * creates the global enveloppe of the resulting document, and puts it in the document - * - * @return the enveloppe - */ - public Element createEnvelope(Document doc) - { - Element html = doc.createElementNS(XHTML_NS, XHTML_PREFIX + ":html"); - //set namespace attribute - html.setAttributeNS(SchemaFormBuilder.XMLNS_NAMESPACE_URI, - "xmlns:" + XHTML_PREFIX, - XHTMLWrapperElementsBuilder.XHTML_NS); - doc.appendChild(html); + } + return html; + } - //other namespaces - for (String prefix : this.namespaces.keySet()) - { - html.setAttributeNS(SchemaFormBuilder.XMLNS_NAMESPACE_URI, - "xmlns:" + prefix, - this.namespaces.get(prefix)); + /** + * create the element that will contain the content of the group (or repeat) element + * + * @param groupElement the group or repeat element + * @return the wrapper element + */ + public Element createGroupContentWrapper(Element groupElement) + { + return groupElement; + } - } - return html; - } + /** + * create the wrapper element of the form + * + * @param enveloppeElement the form element (chiba:form or other) + * @return the wrapper element + */ + public Element createFormWrapper(Element enveloppeElement) + { + Document doc = enveloppeElement.getOwnerDocument(); + Element body = doc.createElementNS(NamespaceConstants.XHTML_NS, NamespaceConstants.XHTML_PREFIX + ":body"); + //body.appendChild(formElement); + enveloppeElement.appendChild(body); + return body; + } - /** - * create the element that will contain the content of the group (or repeat) element - * - * @param groupElement the group or repeat element - * @return the wrapper element - */ - public Element createGroupContentWrapper(Element groupElement) - { - return groupElement; - } + /** + * create the wrapper element of the xforms:model element + * + * @param modelElement the xforms:model element + * @return the wrapper element, already containing the model + */ + public Element createModelWrapper(final Element modelElement) + { + Document doc = modelElement.getOwnerDocument(); + Element head = doc.createElementNS(NamespaceConstants.XHTML_NS, + NamespaceConstants.XHTML_PREFIX + ":head"); + head.appendChild(modelElement); - /** - * create the wrapper element of the form - * - * @param enveloppeElement the form element (chiba:form or other) - * @return the wrapper element - */ - public Element createFormWrapper(Element enveloppeElement) - { - Document doc = enveloppeElement.getOwnerDocument(); - Element body = doc.createElementNS(XHTML_NS, XHTML_PREFIX + ":body"); - //body.appendChild(formElement); - enveloppeElement.appendChild(body); - return body; - } + //eventually add other info + if (title != null && title.length() != 0) + { + final Element title_el = doc.createElementNS(NamespaceConstants.XHTML_NS, + NamespaceConstants.XHTML_PREFIX + ":title"); + title_el.appendChild(doc.createTextNode(title)); + head.appendChild(title_el); + } - /** - * create the wrapper element of the xforms:model element - * - * @param modelElement the xforms:model element - * @return the wrapper element, already containing the model - */ - public Element createModelWrapper(Element modelElement) - { - Document doc = modelElement.getOwnerDocument(); - Element head = doc.createElementNS(XHTML_NS, XHTML_PREFIX + ":head"); - head.appendChild(modelElement); - - //eventually add other info - if (title != null && title.length() != 0) - { - Element title_el = doc.createElementNS(XHTML_NS, XHTML_PREFIX + ":title"); - Text title_text = doc.createTextNode(title); - title_el.appendChild(title_text); - head.appendChild(title_el); - } - - for (Meta m : this.meta) - { - Element meta_el = doc.createElementNS(XHTML_NS, XHTML_PREFIX + ":META"); - head.appendChild(meta_el); + for (Meta m : this.meta) + { + final Element meta_el = doc.createElementNS(NamespaceConstants.XHTML_NS, + NamespaceConstants.XHTML_PREFIX + ":META"); + head.appendChild(meta_el); - //attributes - if (m.httpEquiv != null && m.httpEquiv.length() != 0) - meta_el.setAttributeNS(XHTML_NS, XHTML_PREFIX + ":http-equiv", - m.httpEquiv); - if (m.name != null && m.name.length() != 0) - meta_el.setAttributeNS(XHTML_NS, XHTML_PREFIX + ":name", m.name); + //attributes + if (m.httpEquiv != null && m.httpEquiv.length() != 0) + { + meta_el.setAttributeNS(NamespaceConstants.XHTML_NS, + NamespaceConstants.XHTML_PREFIX + ":http-equiv", + m.httpEquiv); + } + if (m.name != null && m.name.length() != 0) + { + meta_el.setAttributeNS(NamespaceConstants.XHTML_NS, + NamespaceConstants.XHTML_PREFIX + ":name", + m.name); + } + if (m.content != null && m.content.length() != 0) + { + meta_el.setAttributeNS(NamespaceConstants.XHTML_NS, + NamespaceConstants.XHTML_PREFIX + ":content", + m.content); + } + if (m.scheme != null && m.scheme.length() != 0) + { + meta_el.setAttributeNS(NamespaceConstants.XHTML_NS, + NamespaceConstants.XHTML_PREFIX + ":scheme", + m.scheme); + } + } - if (m.content != null && m.content.length() != 0) - meta_el.setAttributeNS(XHTML_NS, XHTML_PREFIX + ":content", m.content); + for (Link l : this.links) + { + final Element link_el = doc.createElementNS(NamespaceConstants.XHTML_NS, + NamespaceConstants.XHTML_PREFIX + ":LINK"); + head.appendChild(link_el); - if (m.scheme != null && m.scheme.length() != 0) - meta_el.setAttributeNS(XHTML_NS, XHTML_PREFIX + ":scheme", m.scheme); - } - - for (Link l : this.links) - { - Element link_el = doc.createElementNS(XHTML_NS, XHTML_PREFIX + ":LINK"); - head.appendChild(link_el); - - //attributes - if (l.href != null && l.href.length() != 0) - link_el.setAttributeNS(XHTML_NS, XHTML_PREFIX + ":href", l.href); - - if (l.type != null && l.type.length() != 0) - link_el.setAttributeNS(XHTML_NS, XHTML_PREFIX + ":type", l.type); - - if (l.rel != null && l.rel.length() != 0) - link_el.setAttributeNS(XHTML_NS, XHTML_PREFIX + ":rel", l.rel); - } - return head; - } + //attributes + if (l.href != null && l.href.length() != 0) + { + link_el.setAttributeNS(NamespaceConstants.XHTML_NS, + NamespaceConstants.XHTML_PREFIX + ":href", + l.href); + } + if (l.type != null && l.type.length() != 0) + { + link_el.setAttributeNS(NamespaceConstants.XHTML_NS, + NamespaceConstants.XHTML_PREFIX + ":type", + l.type); + } + if (l.rel != null && l.rel.length() != 0) + { + link_el.setAttributeNS(NamespaceConstants.XHTML_NS, + NamespaceConstants.XHTML_PREFIX + ":rel", + l.rel); + + } + } + return head; + } } diff --git a/source/java/org/alfresco/web/ui/wcm/component/UIFormProcessor.java b/source/java/org/alfresco/web/ui/wcm/component/UIFormProcessor.java index a8d001fff0..5e678fd3e2 100644 --- a/source/java/org/alfresco/web/ui/wcm/component/UIFormProcessor.java +++ b/source/java/org/alfresco/web/ui/wcm/component/UIFormProcessor.java @@ -109,9 +109,10 @@ public class UIFormProcessor extends SelfRenderingComponent out)); } } - catch (FormProcessor.ProcessingException fppe) + catch (Throwable t) { - Utils.addErrorMessage(fppe.getMessage(), fppe); + Utils.addErrorMessage(t.getMessage(), t); + out.write(t.toString()); } } diff --git a/source/web/WEB-INF/chiba.xml b/source/web/WEB-INF/chiba.xml index ce672dfeea..3dca1b8949 100644 --- a/source/web/WEB-INF/chiba.xml +++ b/source/web/WEB-INF/chiba.xml @@ -1,71 +1,15 @@ - - + + - - - - - - - - - - - - - - - - - - - - + - - + - - - - - - - - - - - - - - + - - + + - - - diff --git a/source/web/jsp/wcm/create-form-wizard/details.jsp b/source/web/jsp/wcm/create-form-wizard/details.jsp index cc1e5f1e2e..9686cc8a45 100644 --- a/source/web/jsp/wcm/create-form-wizard/details.jsp +++ b/source/web/jsp/wcm/create-form-wizard/details.jsp @@ -34,7 +34,10 @@ function pageLoaded() { - document.getElementById("wizard:wizard-body:file-input").focus(); + if (document.getElementById("wizard:wizard-body:file-input")) + document.getElementById("wizard:wizard-body:file-input").focus() + else + document.getElementById("wizard:wizard-body:form-name").focus(); document.getElementById("wizard").onsubmit = validate; document.getElementById("wizard:next-button").onclick = function() {finishButtonPressed = true; clear_wizard();} document.getElementById("wizard:finish-button").onclick = function() {finishButtonPressed = true; clear_wizard();} @@ -42,7 +45,14 @@ function validate() { - return true; + if (!finishButtonPressed) + return true; + finishButtonPressed = false; + var formName = document.getElementById("wizard:wizard-body:form-name"); + return validateMandatory(formName) && + validateName(formName, + '', + true) } function handle_upload(target) @@ -55,9 +65,10 @@ function upload_complete(id, path) { - var validate_button = - document.getElementById("wizard:wizard-body:command_button_validate_schema"); - validate_button.click(); + var schema_file_input = + document.getElementById("wizard:wizard-body:schema-file"); + schema_file_input.value = path; + schema_file_input.form.submit(); } @@ -81,7 +92,7 @@ + value="#{msg.schema}:"/> <% FileUploadBean upload = (FileUploadBean) @@ -96,12 +107,11 @@ if (upload == null || upload.getFile() == null) name="alfFileInput" onchange="javascript:handle_upload(this)"/> -