inserting prototype nodes into instance data. repeats should basically be totally working at this point with the exception of some bugs with move up/move down.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4564 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Ariel Backenroth
2006-12-09 06:21:30 +00:00
parent 9d20f79087
commit 39703b19ae

View File

@@ -142,92 +142,54 @@ public class SchemaFormBuilder
public final static Log LOGGER = public final static Log LOGGER =
LogFactory.getLog(SchemaFormBuilder.class); LogFactory.getLog(SchemaFormBuilder.class);
/** /** XMLSchema Namespace declaration */
* XMLSchema Namespace declaration
*/
public static final String XMLSCHEMA_NS = public static final String XMLSCHEMA_NS =
"http://www.w3.org/2001/XMLSchema"; "http://www.w3.org/2001/XMLSchema";
/** /** XMLSchema prefix */
* XMLSchema prefix
*/
public static final String XMLSCHEMA_NS_PREFIX = "xs:"; public static final String XMLSCHEMA_NS_PREFIX = "xs:";
/** /** XMLSchema Instance Namespace declaration */
* XMLSchema Instance Namespace declaration private static final String XMLSCHEMA_INSTANCE_NS =
*/
public static final String XMLSCHEMA_INSTANCE_NS =
"http://www.w3.org/2001/XMLSchema-instance"; "http://www.w3.org/2001/XMLSchema-instance";
/** /** XMLSchema instance prefix */
* XMLSchema instance prefix private static final String XMLSCHEMA_INSTANCE_NS_PREFIX = "xsi";
*/
public static final String XMLSCHEMA_INSTANCE_NS_PREFIX = "xsi:";
/** /** XMLNS Namespace declaration. */
* XMLNS Namespace declaration.
*/
public static final String XMLNS_NAMESPACE_URI = public static final String XMLNS_NAMESPACE_URI =
"http://www.w3.org/2000/xmlns/"; "http://www.w3.org/2000/xmlns/";
/** /** XML Namespace declaration */
* XML Namespace declaration private static final String XML_NAMESPACE_URI =
*/
public static final String XML_NAMESPACE_URI =
"http://www.w3.org/XML/1998/namespace"; "http://www.w3.org/XML/1998/namespace";
/** /** XForms namespace declaration. */
* XForms namespace declaration. private static final String XFORMS_NS =
*/
public static final String XFORMS_NS =
"http://www.w3.org/2002/xforms"; "http://www.w3.org/2002/xforms";
/** /** XForms prefix */
* XForms prefix private static final String XFORMS_NS_PREFIX = "xforms";
*/
public static final String XFORMS_NS_PREFIX = "xforms:";
/** /** Alfresco namespace declaration. */
* Alfresco namespace declaration. private static final String ALFRESCO_NS =
*/
public static final String ALFRESCO_NS =
"http://www.alfresco.org/alfresco"; "http://www.alfresco.org/alfresco";
/** /** Alfresco prefix */
* Alfresco prefix private static final String ALFRESCO_NS_PREFIX = "alfresco";
*/
public static final String ALFRESCO_NS_PREFIX = "alfresco:";
/** // /** Chiba namespace declaration. */
* Chiba namespace declaration. // private static final String CHIBA_NS =
*/ // "http://chiba.sourceforge.net/xforms";
public static final String CHIBA_NS = //
"http://chiba.sourceforge.net/xforms"; // /** Chiba prefix */
// private static final String CHIBA_NS_PREFIX = "chiba:";
/** /** XML Events namsepace declaration. */
* Chiba prefix private static final String XMLEVENTS_NS = "http://www.w3.org/2001/xml-events";
*/
public static final String CHIBA_NS_PREFIX = "chiba:";
/** /** XML Events prefix */
* XLink namespace declaration. private static final String XMLEVENTS_NS_PREFIX = "ev";
*/
public static final String XLINK_NS = "http://www.w3.org/1999/xlink";
/**
* Xlink prefix
*/
public static final String XLINK_NS_PREFIX = "xlink:";
/**
* XML Events namsepace declaration.
*/
public static final String XMLEVENTS_NS = "http://www.w3.org/2001/xml-events";
/**
* XML Events prefix
*/
public static final String XMLEVENTS_NS_PREFIX = "ev:";
/** /**
* Prossible values of the "@method" on the "submission" element * Prossible values of the "@method" on the "submission" element
@@ -489,13 +451,13 @@ public class SchemaFormBuilder
//add XMLSchema if we use schema types //add XMLSchema if we use schema types
modelSection.setAttributeNS(SchemaFormBuilder.XFORMS_NS, "schema", "#schema-1"); modelSection.setAttributeNS(SchemaFormBuilder.XFORMS_NS, "schema", "#schema-1");
final Element importedSchemaRootElement = (Element) final Element importedSchemaDocumentElement = (Element)
xForm.importNode(schemaDocument.getDocumentElement(), true); xForm.importNode(schemaDocument.getDocumentElement(), true);
importedSchemaRootElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, importedSchemaDocumentElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
"id", "id",
"schema-1"); "schema-1");
modelSection.appendChild(importedSchemaRootElement); modelSection.appendChild(importedSchemaDocumentElement);
//check if target namespace //check if target namespace
final StringList targetNamespaces = schema.getNamespaces(); final StringList targetNamespaces = schema.getNamespaces();
@@ -535,17 +497,18 @@ public class SchemaFormBuilder
rootElementName = this.getElementName(rootElementDecl, xForm); rootElementName = this.getElementName(rootElementDecl, xForm);
final Element instanceElement = final Element instanceElement =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "instance"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":instance");
modelSection.appendChild(instanceElement); modelSection.appendChild(instanceElement);
this.setXFormsId(instanceElement); this.setXFormsId(instanceElement);
final Element defaultInstanceRootElement = xForm.createElement(rootElementName); final Element defaultInstanceDocumentElement = xForm.createElement(rootElementName);
this.addNamespace(defaultInstanceRootElement, this.addNamespace(defaultInstanceDocumentElement,
XMLSCHEMA_INSTANCE_NS_PREFIX, SchemaFormBuilder.XMLSCHEMA_INSTANCE_NS_PREFIX,
XMLSCHEMA_INSTANCE_NS); SchemaFormBuilder.XMLSCHEMA_INSTANCE_NS);
Element importedInstanceDocumentElement = null;
if (instanceDocument == null) if (instanceDocument == null)
instanceElement.appendChild(defaultInstanceRootElement); instanceElement.appendChild(defaultInstanceDocumentElement);
else else
{ {
Element instanceDocumentElement = instanceDocument.getDocumentElement(); Element instanceDocumentElement = instanceDocument.getDocumentElement();
@@ -554,64 +517,69 @@ public class SchemaFormBuilder
"expected " + rootElementName + "expected " + rootElementName +
", got " + instanceDocumentElement.getNodeName()); ", got " + instanceDocumentElement.getNodeName());
LOGGER.debug("importing rootElement from other document"); LOGGER.debug("importing rootElement from other document");
final Element importedInstanceRootElement = (Element) importedInstanceDocumentElement = (Element)
xForm.importNode(instanceDocumentElement, true); xForm.importNode(instanceDocumentElement, true);
//add XMLSchema instance NS //add XMLSchema instance NS
this.addNamespace(importedInstanceRootElement, this.addNamespace(importedInstanceDocumentElement,
XMLSCHEMA_INSTANCE_NS_PREFIX, SchemaFormBuilder.XMLSCHEMA_INSTANCE_NS_PREFIX,
XMLSCHEMA_INSTANCE_NS); SchemaFormBuilder.XMLSCHEMA_INSTANCE_NS);
instanceElement.appendChild(importedInstanceRootElement); instanceElement.appendChild(importedInstanceDocumentElement);
final Element prototypeInstanceElement = final Element prototypeInstanceElement =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "instance"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":instance");
modelSection.appendChild(prototypeInstanceElement); modelSection.appendChild(prototypeInstanceElement);
this.setXFormsId(prototypeInstanceElement, "instance_prototype"); this.setXFormsId(prototypeInstanceElement, "instance_prototype");
prototypeInstanceElement.appendChild(defaultInstanceRootElement); prototypeInstanceElement.appendChild(defaultInstanceDocumentElement);
} }
Element formContentWrapper = this.wrapper.createGroupContentWrapper(formSection); Element formContentWrapper = this.wrapper.createGroupContentWrapper(formSection);
this.addElement(xForm, this.addElement(xForm,
modelSection, modelSection,
defaultInstanceRootElement, defaultInstanceDocumentElement,
formContentWrapper, formContentWrapper,
schema, schema,
rootElementDecl, rootElementDecl,
rootElementDecl.getTypeDefinition(), rootElementDecl.getTypeDefinition(),
"/" + getElementName(rootElementDecl, xForm)); "/" + getElementName(rootElementDecl, xForm));
if (importedInstanceDocumentElement != null)
{
this.insertPrototypeNodes(importedInstanceDocumentElement,
defaultInstanceDocumentElement);
}
Element submitInfoElement = Element submitInfoElement =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "submission"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":submission");
modelSection.appendChild(submitInfoElement); modelSection.appendChild(submitInfoElement);
//submitInfoElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,SchemaFormBuilder.XFORMS_NS_PREFIX+"id","save"); //submitInfoElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,SchemaFormBuilder.XFORMS_NS_PREFIX + ":id","save");
String submissionId = this.setXFormsId(submitInfoElement); String submissionId = this.setXFormsId(submitInfoElement);
//action //action
submitInfoElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, submitInfoElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "action", SchemaFormBuilder.XFORMS_NS_PREFIX + ":action",
this.action == null ? "" : this.base + this.action); this.action == null ? "" : this.base + this.action);
//method //method
submitInfoElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, submitInfoElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "method", SchemaFormBuilder.XFORMS_NS_PREFIX + ":method",
(this.submitMethod != null && this.submitMethod.length() != 0 (this.submitMethod != null && this.submitMethod.length() != 0
? this.submitMethod ? this.submitMethod
: SchemaFormBuilder.SUBMIT_METHOD_POST)); : SchemaFormBuilder.SUBMIT_METHOD_POST));
final Element submitButton = final Element submitButton =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, SchemaFormBuilder.XFORMS_NS_PREFIX + "submit"); xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, SchemaFormBuilder.XFORMS_NS_PREFIX + ":submit");
final Element submitControlWrapper = this.wrapper.createControlsWrapper(submitButton); final Element submitControlWrapper = this.wrapper.createControlsWrapper(submitButton);
formContentWrapper.appendChild(submitControlWrapper); formContentWrapper.appendChild(submitControlWrapper);
submitButton.setAttributeNS(SchemaFormBuilder.XFORMS_NS, submitButton.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "submission", SchemaFormBuilder.XFORMS_NS_PREFIX + ":submission",
submissionId); submissionId);
this.setXFormsId(submitButton); this.setXFormsId(submitButton);
final Element submitButtonCaption = final Element submitButtonCaption =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "label"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":label");
submitButton.appendChild(submitButtonCaption); submitButton.appendChild(submitButtonCaption);
submitButtonCaption.appendChild(xForm.createTextNode("Submit")); submitButtonCaption.appendChild(xForm.createTextNode("Submit"));
this.setXFormsId(submitButtonCaption); this.setXFormsId(submitButtonCaption);
@@ -646,6 +614,83 @@ public class SchemaFormBuilder
DEFAULT_SELECTONE_UI_CONTROL_LONG_PROP); DEFAULT_SELECTONE_UI_CONTROL_LONG_PROP);
} }
private void insertPrototypeNodes(final Element instanceDocumentElement,
final Element prototypeDocumentElement)
{
final JXPathContext prototypeContext =
JXPathContext.newContext(prototypeDocumentElement);
prototypeContext.registerNamespace("alfresco", SchemaFormBuilder.ALFRESCO_NS);
final JXPathContext instanceContext =
JXPathContext.newContext(instanceDocumentElement);
instanceContext.registerNamespace("alfresco", SchemaFormBuilder.ALFRESCO_NS);
class PrototypeInsertionData
{
final Node prototype;
final List nodes;
final boolean append;
PrototypeInsertionData(final Node prototype,
final List nodes,
final boolean append)
{
this.prototype = prototype;
this.nodes = nodes;
this.append = append;
}
};
final List<PrototypeInsertionData> prototypesToInsert =
new LinkedList<PrototypeInsertionData>();
final Iterator it =
prototypeContext.iteratePointers("//*[@" + SchemaFormBuilder.ALFRESCO_NS_PREFIX +
":prototype='true']");
while (it.hasNext())
{
final Pointer p = (Pointer)it.next();
String path = p.asPath().replaceAll("\\[\\d+\\]", "") + "[last()]";
LOGGER.debug("evaluating " + path + " against instance document");
List l = instanceContext.selectNodes(path);
if (l.size() != 0)
{
prototypesToInsert.add(new PrototypeInsertionData((Node)p.getNode(),
l,
false));
}
else
{
int index = path.lastIndexOf('/');
path = index == 0 ? "/" : path.substring(0, index);
l = instanceContext.selectNodes(path);
prototypesToInsert.add(new PrototypeInsertionData((Node)p.getNode(),
l,
true));
}
}
for (PrototypeInsertionData data : prototypesToInsert)
{
LOGGER.debug("adding prototype for " + data.prototype.getNodeName() +
" to " + data.nodes.size() + " nodes");
for (Object o : data.nodes)
{
final Node n = (Node)o;
if (data.append)
{
n.appendChild(data.prototype.cloneNode(true));
}
else if (n.getNextSibling() != null)
{
n.getParentNode().insertBefore(data.prototype.cloneNode(true),
n.getNextSibling());
}
else
{
n.getParentNode().appendChild(data.prototype.cloneNode(true));
}
}
}
}
public void removePrototypeNodes(final Element instanceDocumentElement) public void removePrototypeNodes(final Element instanceDocumentElement)
{ {
final Map<String, LinkedList<Element>> prototypes = final Map<String, LinkedList<Element>> prototypes =
@@ -688,7 +733,6 @@ public class SchemaFormBuilder
} }
} }
/** /**
* Returns the most-specific built-in base type for the provided type. * Returns the most-specific built-in base type for the provided type.
*/ */
@@ -746,7 +790,7 @@ public class SchemaFormBuilder
id = name + "_" + count; id = name + "_" + count;
} }
el.setAttributeNS(SchemaFormBuilder.XFORMS_NS, el.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "id", SchemaFormBuilder.XFORMS_NS_PREFIX + ":id",
id); id);
return id; return id;
} }
@@ -836,29 +880,29 @@ public class SchemaFormBuilder
/// action in the case /// action in the case
Element action = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element action = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "action"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":action");
this.setXFormsId(action); this.setXFormsId(action);
item.appendChild(action); item.appendChild(action);
action.setAttributeNS(SchemaFormBuilder.XMLEVENTS_NS, action.setAttributeNS(SchemaFormBuilder.XMLEVENTS_NS,
SchemaFormBuilder.XMLEVENTS_NS_PREFIX + "event", SchemaFormBuilder.XMLEVENTS_NS_PREFIX + ":event",
"xforms-select"); "xforms-select");
Element toggle = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element toggle = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "toggle"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":toggle");
this.setXFormsId(toggle); this.setXFormsId(toggle);
//build the case element //build the case element
Element caseElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element caseElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "case"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":case");
String case_id = this.setXFormsId(caseElement); String case_id = this.setXFormsId(caseElement);
result.put(textValue, caseElement); result.put(textValue, caseElement);
toggle.setAttributeNS(SchemaFormBuilder.XFORMS_NS, toggle.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "case", SchemaFormBuilder.XFORMS_NS_PREFIX + ":case",
case_id); case_id);
//toggle.setAttributeNS(SchemaFormBuilder.XFORMS_NS,SchemaFormBuilder.XFORMS_NS_PREFIX + "case",bindIdPrefix + "_" + textValue +"_case"); //toggle.setAttributeNS(SchemaFormBuilder.XFORMS_NS,SchemaFormBuilder.XFORMS_NS_PREFIX + ":case",bindIdPrefix + "_" + textValue +"_case");
action.appendChild(toggle); action.appendChild(toggle);
} }
return result; return result;
@@ -1010,8 +1054,7 @@ public class SchemaFormBuilder
JXPathContext context = JXPathContext.newContext(formSection.getOwnerDocument()); JXPathContext context = JXPathContext.newContext(formSection.getOwnerDocument());
final Pointer pointer = final Pointer pointer =
context.getPointer("//*[@" + SchemaFormBuilder.XFORMS_NS_PREFIX + context.getPointer("//*[@" + SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind='" + bindId + "']");
"bind='" + bindId + "']");
if (pointer != null) if (pointer != null)
control = (Element)pointer.getNode(); control = (Element)pointer.getNode();
} }
@@ -1371,13 +1414,14 @@ public class SchemaFormBuilder
} }
} }
Element control = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element control =
SchemaFormBuilder.XFORMS_NS_PREFIX + xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
"select1"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":select1");
String select1_id = this.setXFormsId(control); String select1_id = this.setXFormsId(control);
Element choices = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element choices =
SchemaFormBuilder.XFORMS_NS_PREFIX + "choices"); xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + ":choices");
this.setXFormsId(choices); this.setXFormsId(choices);
//get possible values //get possible values
@@ -1403,7 +1447,7 @@ public class SchemaFormBuilder
String caption = createCaption(elementDecl.getName() + " Type"); String caption = createCaption(elementDecl.getName() + " Type");
Element controlCaption = Element controlCaption =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "label"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":label");
control.appendChild(controlCaption); control.appendChild(controlCaption);
this.setXFormsId(controlCaption); this.setXFormsId(controlCaption);
controlCaption.appendChild(xForm.createTextNode(caption)); controlCaption.appendChild(xForm.createTextNode(caption));
@@ -1412,30 +1456,30 @@ public class SchemaFormBuilder
// in the schema - allow the user to choose from // in the schema - allow the user to choose from
// between compatible non-abstract types // between compatible non-abstract types
Element bindElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element bindElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "bind"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind");
String bindId = this.setXFormsId(bindElement); String bindId = this.setXFormsId(bindElement);
bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "nodeset", SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset",
pathToRoot + "/@xsi:type"); pathToRoot + "/@xsi:type");
modelSection.appendChild(bindElement); modelSection.appendChild(bindElement);
control.setAttributeNS(SchemaFormBuilder.XFORMS_NS, control.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "bind", SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind",
bindId); bindId);
//add the "element" bind, in addition //add the "element" bind, in addition
Element bindElement2 = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element bindElement2 = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "bind"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind");
String bindId2 = this.setXFormsId(bindElement2); String bindId2 = this.setXFormsId(bindElement2);
bindElement2.setAttributeNS(SchemaFormBuilder.XFORMS_NS, bindElement2.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "nodeset", SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset",
pathToRoot); pathToRoot);
modelSection.appendChild(bindElement2); modelSection.appendChild(bindElement2);
control.setAttributeNS(SchemaFormBuilder.XFORMS_NS, control.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "appearance", SchemaFormBuilder.XFORMS_NS_PREFIX + ":appearance",
(enumValues.size() < Long.parseLong(getProperty(SELECTONE_LONG_LIST_SIZE_PROP)) (enumValues.size() < Long.parseLong(getProperty(SELECTONE_LONG_LIST_SIZE_PROP))
? getProperty(SELECTONE_UI_CONTROL_SHORT_PROP) ? getProperty(SELECTONE_UI_CONTROL_SHORT_PROP)
: getProperty(SELECTONE_UI_CONTROL_LONG_PROP))); : getProperty(SELECTONE_UI_CONTROL_LONG_PROP)));
@@ -1463,8 +1507,7 @@ public class SchemaFormBuilder
: isValidExpr); : isValidExpr);
bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX SchemaFormBuilder.XFORMS_NS_PREFIX + ":constraint",
+ "constraint",
constraint); constraint);
} }
@@ -1482,34 +1525,34 @@ public class SchemaFormBuilder
///////////////// /////////////////
//add a trigger for this control (is there a way to not need it ?) //add a trigger for this control (is there a way to not need it ?)
Element trigger = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element trigger = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "trigger"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":trigger");
formSection.appendChild(trigger); formSection.appendChild(trigger);
this.setXFormsId(trigger); this.setXFormsId(trigger);
Element label_trigger = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element label_trigger = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "label"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":label");
this.setXFormsId(label_trigger); this.setXFormsId(label_trigger);
trigger.appendChild(label_trigger); trigger.appendChild(label_trigger);
String trigger_caption = createCaption("validate choice"); String trigger_caption = createCaption("validate choice");
label_trigger.appendChild(xForm.createTextNode(trigger_caption)); label_trigger.appendChild(xForm.createTextNode(trigger_caption));
Element action_trigger = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element action_trigger = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "action"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":action");
this.setXFormsId(action_trigger); this.setXFormsId(action_trigger);
trigger.appendChild(action_trigger); trigger.appendChild(action_trigger);
Element dispatch_trigger = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element dispatch_trigger = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "dispatch"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":dispatch");
this.setXFormsId(dispatch_trigger); this.setXFormsId(dispatch_trigger);
action_trigger.appendChild(dispatch_trigger); action_trigger.appendChild(dispatch_trigger);
dispatch_trigger.setAttributeNS(SchemaFormBuilder.XFORMS_NS, dispatch_trigger.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "name", SchemaFormBuilder.XFORMS_NS_PREFIX + ":name",
"DOMActivate"); "DOMActivate");
dispatch_trigger.setAttributeNS(SchemaFormBuilder.XFORMS_NS, dispatch_trigger.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "target", SchemaFormBuilder.XFORMS_NS_PREFIX + ":target",
select1_id); select1_id);
///////////////// /////////////////
//add switch //add switch
Element switchElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element switchElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "switch"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":switch");
this.setXFormsId(switchElement); this.setXFormsId(switchElement);
Element switchControlWrapper = Element switchControlWrapper =
@@ -1553,8 +1596,8 @@ public class SchemaFormBuilder
type.getTypeCategory() == XSTypeDefinition.COMPLEX_TYPE) type.getTypeCategory() == XSTypeDefinition.COMPLEX_TYPE)
{ {
//Element caseElement = (Element) xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,SchemaFormBuilder.XFORMS_NS_PREFIX + "case"); //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"); //caseElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,SchemaFormBuilder.XFORMS_NS_PREFIX + ":id",bindId + "_" + type.getName() +"_case");
//String case_id=this.setXFormsId(caseElement); //String case_id=this.setXFormsId(caseElement);
Element caseElement = caseTypes.get(type.getName()); Element caseElement = caseTypes.get(type.getName());
switchElement.appendChild(caseElement); switchElement.appendChild(caseElement);
@@ -1621,7 +1664,7 @@ public class SchemaFormBuilder
") and " + newRelevant); ") and " + newRelevant);
if (newRelevant != null && newRelevant.length() != 0) if (newRelevant != null && newRelevant.length() != 0)
subBind.setAttributeNS(SchemaFormBuilder.XFORMS_NS, subBind.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "relevant", SchemaFormBuilder.XFORMS_NS_PREFIX + ":relevant",
newRelevant); newRelevant);
} }
} }
@@ -1663,10 +1706,10 @@ public class SchemaFormBuilder
// create the <xforms:bind> element and add it to the model. // create the <xforms:bind> element and add it to the model.
final Element bindElement = final Element bindElement =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "bind"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind");
final String bindId = this.setXFormsId(bindElement); final String bindId = this.setXFormsId(bindElement);
bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "nodeset", SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset",
pathToRoot); pathToRoot);
modelSection.appendChild(bindElement); modelSection.appendChild(bindElement);
@@ -2023,8 +2066,7 @@ public class SchemaFormBuilder
final JXPathContext context = final JXPathContext context =
JXPathContext.newContext(formSection.getOwnerDocument()); JXPathContext.newContext(formSection.getOwnerDocument());
final Pointer pointer = final Pointer pointer =
context.getPointer("//*[@" + SchemaFormBuilder.XFORMS_NS_PREFIX + context.getPointer("//*[@" + SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind='" + bindId + "']");
"bind='" + bindId + "']");
if (pointer != null) if (pointer != null)
control = (Element) pointer.getNode(); control = (Element) pointer.getNode();
} }
@@ -2069,7 +2111,8 @@ public class SchemaFormBuilder
LOGGER.debug("adding " + (this.getOccurance(element).maximum == 1 LOGGER.debug("adding " + (this.getOccurance(element).maximum == 1
? 1 ? 1
: this.getOccurance(element).minimum + 1) + : this.getOccurance(element).minimum + 1) +
" default instance element for " + elementName); " default instance element for " + elementName +
" at path " + path);
// update the default instance // update the default instance
if (this.getOccurance(element).maximum == 1) if (this.getOccurance(element).maximum == 1)
{ {
@@ -2083,7 +2126,7 @@ public class SchemaFormBuilder
if (i == this.getOccurance(element).minimum) if (i == this.getOccurance(element).minimum)
{ {
e.setAttributeNS(SchemaFormBuilder.ALFRESCO_NS, e.setAttributeNS(SchemaFormBuilder.ALFRESCO_NS,
SchemaFormBuilder.ALFRESCO_NS_PREFIX + "prototype", SchemaFormBuilder.ALFRESCO_NS_PREFIX + ":prototype",
"true"); "true");
} }
defaultInstanceElement.appendChild(e); defaultInstanceElement.appendChild(e);
@@ -2123,10 +2166,10 @@ public class SchemaFormBuilder
final Element repeatSection = final Element repeatSection =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "repeat"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":repeat");
//bind instead of repeat //bind instead of repeat
//repeatSection.setAttributeNS(SchemaFormBuilder.XFORMS_NS,SchemaFormBuilder.XFORMS_NS_PREFIX + "nodeset",pathToRoot); //repeatSection.setAttributeNS(SchemaFormBuilder.XFORMS_NS,SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset",pathToRoot);
// bind -> last element in the modelSection // bind -> last element in the modelSection
Element bind = DOMUtil.getLastChildElement(modelSection); Element bind = DOMUtil.getLastChildElement(modelSection);
String bindId = null; String bindId = null;
@@ -2152,13 +2195,13 @@ public class SchemaFormBuilder
} }
repeatSection.setAttributeNS(SchemaFormBuilder.XFORMS_NS, repeatSection.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "bind", SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind",
bindId); bindId);
this.setXFormsId(repeatSection); this.setXFormsId(repeatSection);
//appearance=full is more user friendly //appearance=full is more user friendly
repeatSection.setAttributeNS(SchemaFormBuilder.XFORMS_NS, repeatSection.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "appearance", SchemaFormBuilder.XFORMS_NS_PREFIX + ":appearance",
"full"); "full");
final Element controlWrapper = final Element controlWrapper =
@@ -2167,7 +2210,7 @@ public class SchemaFormBuilder
//add a group inside the repeat? //add a group inside the repeat?
final Element group = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, final Element group = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "group"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":group");
this.setXFormsId(group); this.setXFormsId(group);
repeatSection.appendChild(group); repeatSection.appendChild(group);
return group; return group;
@@ -2200,7 +2243,7 @@ public class SchemaFormBuilder
// create the <xforms:bind> element and add it to the model. // create the <xforms:bind> element and add it to the model.
Element bindElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element bindElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "bind"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind");
String bindId = this.setXFormsId(bindElement); String bindId = this.setXFormsId(bindElement);
modelSection.appendChild(bindElement); modelSection.appendChild(bindElement);
bindElement = this.startBindElement(bindElement, schema, controlType, owner, pathToRoot, o); bindElement = this.startBindElement(bindElement, schema, controlType, owner, pathToRoot, o);
@@ -2238,10 +2281,10 @@ public class SchemaFormBuilder
//if there is a repeat -> create another bind with "." //if there is a repeat -> create another bind with "."
Element bindElement2 = Element bindElement2 =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "bind"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind");
String bindId2 = this.setXFormsId(bindElement2); String bindId2 = this.setXFormsId(bindElement2);
bindElement2.setAttributeNS(SchemaFormBuilder.XFORMS_NS, bindElement2.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "nodeset", SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset",
"."); ".");
bindElement.appendChild(bindElement2); bindElement.appendChild(bindElement2);
@@ -2267,7 +2310,7 @@ public class SchemaFormBuilder
// //
// if (!repeatSection.equals(formSection)) // if (!repeatSection.equals(formSection))
// formControl.setAttributeNS(SchemaFormBuilder.XFORMS_NS, // formControl.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
// SchemaFormBuilder.XFORMS_NS_PREFIX + "ref", // SchemaFormBuilder.XFORMS_NS_PREFIX + ":ref",
// "."); // ".");
Element hint = createHint(xForm, owner); Element hint = createHint(xForm, owner);
@@ -2456,7 +2499,7 @@ public class SchemaFormBuilder
this.startFormControl(formControl, controlType); this.startFormControl(formControl, controlType);
formControl.setAttributeNS(SchemaFormBuilder.XFORMS_NS, formControl.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "bind", SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind",
bindId); bindId);
// TODO: Enhance alert statement based on facet restrictions. // TODO: Enhance alert statement based on facet restrictions.
@@ -2466,7 +2509,7 @@ public class SchemaFormBuilder
// e.g. Please provide a valid value for 'Address'. 'Address' is a mandatory decimal field. // e.g. Please provide a valid value for 'Address'. 'Address' is a mandatory decimal field.
// //
final Element alertElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, final Element alertElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "alert"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":alert");
formControl.appendChild(alertElement); formControl.appendChild(alertElement);
this.setXFormsId(alertElement); this.setXFormsId(alertElement);
@@ -2539,18 +2582,18 @@ public class SchemaFormBuilder
final Document xForm = ts.newDocument(); final Document xForm = ts.newDocument();
final Element envelopeElement = this.wrapper.createEnvelope(xForm); final Element envelopeElement = this.wrapper.createEnvelope(xForm);
this.addNamespace(envelopeElement,
final Map<String, String> namespaces = new HashMap<String, String>(); SchemaFormBuilder.XFORMS_NS_PREFIX,
namespaces.put(SchemaFormBuilder.CHIBA_NS_PREFIX, SchemaFormBuilder.CHIBA_NS); SchemaFormBuilder.XFORMS_NS);
namespaces.put(SchemaFormBuilder.XFORMS_NS_PREFIX, SchemaFormBuilder.XFORMS_NS); this.addNamespace(envelopeElement,
namespaces.put(SchemaFormBuilder.XLINK_NS_PREFIX, SchemaFormBuilder.XLINK_NS); SchemaFormBuilder.XMLEVENTS_NS_PREFIX,
namespaces.put(SchemaFormBuilder.XMLEVENTS_NS_PREFIX, SchemaFormBuilder.XMLEVENTS_NS); SchemaFormBuilder.XMLEVENTS_NS);
namespaces.put(SchemaFormBuilder.XMLSCHEMA_INSTANCE_NS_PREFIX, SchemaFormBuilder.XMLSCHEMA_INSTANCE_NS); this.addNamespace(envelopeElement,
namespaces.put(SchemaFormBuilder.ALFRESCO_NS_PREFIX, SchemaFormBuilder.ALFRESCO_NS); SchemaFormBuilder.XMLSCHEMA_INSTANCE_NS_PREFIX,
for (String nsPrefix : namespaces.keySet()) SchemaFormBuilder.XMLSCHEMA_INSTANCE_NS);
{ this.addNamespace(envelopeElement,
this.addNamespace(envelopeElement, nsPrefix, namespaces.get(nsPrefix)); SchemaFormBuilder.ALFRESCO_NS_PREFIX,
} SchemaFormBuilder.ALFRESCO_NS);
//base //base
if (this.base != null && this.base.length() != 0) if (this.base != null && this.base.length() != 0)
@@ -2558,7 +2601,7 @@ public class SchemaFormBuilder
//model element //model element
Element modelElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element modelElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "model"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":model");
this.setXFormsId(modelElement); this.setXFormsId(modelElement);
Element modelWrapper = this.wrapper.createModelWrapper(modelElement); Element modelWrapper = this.wrapper.createModelWrapper(modelElement);
envelopeElement.appendChild(modelWrapper); envelopeElement.appendChild(modelWrapper);
@@ -2578,7 +2621,7 @@ public class SchemaFormBuilder
// add a group node and recurse // add a group node and recurse
Element groupElement = Element groupElement =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "group"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":group");
groupElement = startFormGroup(groupElement, owner); groupElement = startFormGroup(groupElement, owner);
if (groupElement == null) if (groupElement == null)
@@ -2594,7 +2637,7 @@ public class SchemaFormBuilder
Element captionElement = Element captionElement =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "label"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":label");
groupElement.appendChild(captionElement); groupElement.appendChild(captionElement);
this.setXFormsId(captionElement); this.setXFormsId(captionElement);
captionElement.appendChild(xForm.createTextNode(createCaption(owner))); captionElement.appendChild(xForm.createTextNode(createCaption(owner)));
@@ -2731,15 +2774,15 @@ public class SchemaFormBuilder
XSTypeDefinition controlType) XSTypeDefinition controlType)
{ {
Element control = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element control = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "textarea"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":textarea");
this.setXFormsId(control); this.setXFormsId(control);
control.setAttributeNS(SchemaFormBuilder.CHIBA_NS, // control.setAttributeNS(SchemaFormBuilder.CHIBA_NS,
SchemaFormBuilder.CHIBA_NS_PREFIX + "height", // SchemaFormBuilder.CHIBA_NS_PREFIX + "height",
"3"); // "3");
//label //label
Element captionElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element captionElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "label"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":label");
control.appendChild(captionElement); control.appendChild(captionElement);
this.setXFormsId(captionElement); this.setXFormsId(captionElement);
captionElement.appendChild(xForm.createTextNode(caption)); captionElement.appendChild(xForm.createTextNode(caption));
@@ -2770,7 +2813,7 @@ public class SchemaFormBuilder
if ("boolean".equals(controlType.getName())) if ("boolean".equals(controlType.getName()))
{ {
control = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, control = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "select1"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":select1");
this.setXFormsId(control); this.setXFormsId(control);
final String[] values = { "true", "false" }; final String[] values = { "true", "false" };
for (String v : values) for (String v : values)
@@ -2782,25 +2825,25 @@ public class SchemaFormBuilder
else if ("anyURI".equals(controlType.getName())) else if ("anyURI".equals(controlType.getName()))
{ {
control = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, control = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "upload"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":upload");
final Element e = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, final Element e = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "filename"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":filename");
control.appendChild(e); control.appendChild(e);
e.setAttributeNS(SchemaFormBuilder.XFORMS_NS, e.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "ref", SchemaFormBuilder.XFORMS_NS_PREFIX + ":ref",
"."); ".");
this.setXFormsId(control); this.setXFormsId(control);
} }
else else
{ {
control = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, SchemaFormBuilder.XFORMS_NS_PREFIX + "input"); control = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, SchemaFormBuilder.XFORMS_NS_PREFIX + ":input");
this.setXFormsId(control); this.setXFormsId(control);
} }
//label //label
final Element captionElement = final Element captionElement =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "label"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":label");
control.appendChild(captionElement); control.appendChild(captionElement);
this.setXFormsId(captionElement); this.setXFormsId(captionElement);
captionElement.appendChild(xForm.createTextNode(caption)); captionElement.appendChild(xForm.createTextNode(caption));
@@ -2842,18 +2885,18 @@ public class SchemaFormBuilder
return null; return null;
Element control = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element control = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "select1"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":select1");
this.setXFormsId(control); this.setXFormsId(control);
//label //label
Element captionElement1 = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element captionElement1 = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "label"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":label");
control.appendChild(captionElement1); control.appendChild(captionElement1);
this.setXFormsId(captionElement1); this.setXFormsId(captionElement1);
captionElement1.appendChild(xForm.createTextNode(caption)); captionElement1.appendChild(xForm.createTextNode(caption));
Element choices = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element choices = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "choices"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":choices");
this.setXFormsId(choices); this.setXFormsId(choices);
final XSObjectList mvFacets = controlType.getMultiValueFacets(); final XSObjectList mvFacets = controlType.getMultiValueFacets();
@@ -2874,7 +2917,7 @@ public class SchemaFormBuilder
} }
control.setAttributeNS(SchemaFormBuilder.XFORMS_NS, control.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "appearance", SchemaFormBuilder.XFORMS_NS_PREFIX + ":appearance",
(enumFacets.getLength() < Long.parseLong(getProperty(SELECTONE_LONG_LIST_SIZE_PROP)) (enumFacets.getLength() < Long.parseLong(getProperty(SELECTONE_LONG_LIST_SIZE_PROP))
? getProperty(SELECTONE_UI_CONTROL_SHORT_PROP) ? getProperty(SELECTONE_UI_CONTROL_SHORT_PROP)
: getProperty(SELECTONE_UI_CONTROL_LONG_PROP))); : getProperty(SELECTONE_UI_CONTROL_LONG_PROP)));
@@ -2902,7 +2945,7 @@ public class SchemaFormBuilder
: isValidExpr); : isValidExpr);
bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "constraint", SchemaFormBuilder.XFORMS_NS_PREFIX + ":constraint",
constraint); constraint);
} }
@@ -2943,12 +2986,12 @@ public class SchemaFormBuilder
if (enumFacets.getLength() <= 0) if (enumFacets.getLength() <= 0)
return null; return null;
Element control = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element control = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "select"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":select");
this.setXFormsId(control); this.setXFormsId(control);
//label //label
Element captionElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element captionElement = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "label"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":label");
control.appendChild(captionElement); control.appendChild(captionElement);
this.setXFormsId(captionElement); this.setXFormsId(captionElement);
captionElement.appendChild(xForm.createTextNode(caption)); captionElement.appendChild(xForm.createTextNode(caption));
@@ -2977,12 +3020,12 @@ public class SchemaFormBuilder
// For now, use checkbox if there are < DEFAULT_LONG_LIST_MAX_SIZE items, otherwise use long control // For now, use checkbox if there are < DEFAULT_LONG_LIST_MAX_SIZE items, otherwise use long control
// //
control.setAttributeNS(SchemaFormBuilder.XFORMS_NS, control.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "appearance", SchemaFormBuilder.XFORMS_NS_PREFIX + ":appearance",
(enumValues.size() < Long.parseLong(getProperty(SELECTMANY_LONG_LIST_SIZE_PROP)) (enumValues.size() < Long.parseLong(getProperty(SELECTMANY_LONG_LIST_SIZE_PROP))
? getProperty(SELECTMANY_UI_CONTROL_SHORT_PROP) ? getProperty(SELECTMANY_UI_CONTROL_SHORT_PROP)
: getProperty(SELECTMANY_UI_CONTROL_LONG_PROP))); : getProperty(SELECTMANY_UI_CONTROL_LONG_PROP)));
Element choices = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, Element choices = xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "choices"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":choices");
this.setXFormsId(choices); this.setXFormsId(choices);
control.appendChild(choices); control.appendChild(choices);
@@ -3013,7 +3056,7 @@ public class SchemaFormBuilder
return null; return null;
final Element hintElement = final Element hintElement =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "hint"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":hint");
this.setXFormsId(hintElement); this.setXFormsId(hintElement);
hintElement.appendChild(xForm.createTextNode(s)); hintElement.appendChild(xForm.createTextNode(s));
return hintElement; return hintElement;
@@ -3090,7 +3133,7 @@ public class SchemaFormBuilder
nodeset = pathToRoot + "[position() != last()]"; nodeset = pathToRoot + "[position() != last()]";
bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "nodeset", SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset",
nodeset); nodeset);
if (!"anyType".equals(controlType.getName()) && if (!"anyType".equals(controlType.getName()) &&
@@ -3101,7 +3144,7 @@ public class SchemaFormBuilder
controlType); controlType);
if (typeName != null && typeName.length() != 0) if (typeName != null && typeName.length() != 0)
bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "type", SchemaFormBuilder.XFORMS_NS_PREFIX + ":type",
typeName); typeName);
} }
@@ -3115,11 +3158,11 @@ public class SchemaFormBuilder
: XSConstants.VC_NONE))); : XSConstants.VC_NONE)));
bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "readonly", SchemaFormBuilder.XFORMS_NS_PREFIX + ":readonly",
(constraintType == XSConstants.VC_FIXED) + "()"); (constraintType == XSConstants.VC_FIXED) + "()");
bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "required", SchemaFormBuilder.XFORMS_NS_PREFIX + ":required",
(o.minimum != 0) + "()"); (o.minimum != 0) + "()");
//no more minOccurs & maxOccurs element: add a constraint if maxOccurs>1: //no more minOccurs & maxOccurs element: add a constraint if maxOccurs>1:
@@ -3132,7 +3175,7 @@ public class SchemaFormBuilder
//if 0 or 1 -> no constraint (managed by "required") //if 0 or 1 -> no constraint (managed by "required")
minConstraint = "count(.) >= " + o.minimum; minConstraint = "count(.) >= " + o.minimum;
bindElement.setAttributeNS(ALFRESCO_NS, bindElement.setAttributeNS(ALFRESCO_NS,
ALFRESCO_NS_PREFIX + "minimum", ALFRESCO_NS_PREFIX + ":minimum",
String.valueOf(o.minimum)); String.valueOf(o.minimum));
} }
if (o.maximum > 1) if (o.maximum > 1)
@@ -3140,7 +3183,7 @@ public class SchemaFormBuilder
//if 1 or unbounded -> no constraint //if 1 or unbounded -> no constraint
maxConstraint = "count(.) <= " + o.maximum; maxConstraint = "count(.) <= " + o.maximum;
bindElement.setAttributeNS(ALFRESCO_NS, bindElement.setAttributeNS(ALFRESCO_NS,
ALFRESCO_NS_PREFIX + "maximum", ALFRESCO_NS_PREFIX + ":maximum",
String.valueOf(o.maximum)); String.valueOf(o.maximum));
} }
@@ -3151,7 +3194,7 @@ public class SchemaFormBuilder
: maxConstraint)); : maxConstraint));
if (constraint != null) if (constraint != null)
bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS, bindElement.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "constraint", SchemaFormBuilder.XFORMS_NS_PREFIX + ":constraint",
constraint); constraint);
return bindElement; return bindElement;
} }
@@ -3275,9 +3318,8 @@ public class SchemaFormBuilder
final String nsPrefix, final String nsPrefix,
final String ns) final String ns)
{ {
final String p = nsPrefix.substring(0, nsPrefix.length() - 1); if (!e.hasAttributeNS(XMLNS_NAMESPACE_URI, nsPrefix))
if (!e.hasAttributeNS(XMLNS_NAMESPACE_URI, p)) e.setAttributeNS(XMLNS_NAMESPACE_URI, "xmlns:" + nsPrefix, ns);
e.setAttributeNS(XMLNS_NAMESPACE_URI, "xmlns:" + p, ns);
} }
private void createTriggersForRepeats(final Document xformsDocument) private void createTriggersForRepeats(final Document xformsDocument)
@@ -3318,7 +3360,7 @@ public class SchemaFormBuilder
s += "[index(\'" + bindToRepeat.get(bind).getAttributeNS(SchemaFormBuilder.XFORMS_NS, "id") + "\')]"; s += "[index(\'" + bindToRepeat.get(bind).getAttributeNS(SchemaFormBuilder.XFORMS_NS, "id") + "\')]";
} }
xpath = s + xpath; xpath = s + xpath;
bind = ((SchemaFormBuilder.XFORMS_NS_PREFIX + "bind").equals(bind.getParentNode().getNodeName()) bind = ((SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind").equals(bind.getParentNode().getNodeName())
? (Element)bind.getParentNode() ? (Element)bind.getParentNode()
: null); : null);
} }
@@ -3338,17 +3380,17 @@ public class SchemaFormBuilder
{ {
final Element trigger = final Element trigger =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "trigger"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":trigger");
this.setXFormsId(trigger, id != null ? id : null); this.setXFormsId(trigger, id != null ? id : null);
//copy the bind attribute //copy the bind attribute
trigger.setAttributeNS(SchemaFormBuilder.XFORMS_NS, trigger.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "bind", SchemaFormBuilder.XFORMS_NS_PREFIX + ":bind",
bindId); bindId);
//label insert //label insert
final Element triggerLabel = final Element triggerLabel =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "label"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":label");
this.setXFormsId(triggerLabel); this.setXFormsId(triggerLabel);
trigger.appendChild(triggerLabel); trigger.appendChild(triggerLabel);
@@ -3357,7 +3399,7 @@ public class SchemaFormBuilder
//insert action //insert action
final Element actionWrapper = final Element actionWrapper =
xForm.createElementNS(SchemaFormBuilder.XFORMS_NS, xForm.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "action"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":action");
actionWrapper.appendChild(action); actionWrapper.appendChild(action);
trigger.appendChild(action); trigger.appendChild(action);
this.setXFormsId(action); this.setXFormsId(action);
@@ -3380,15 +3422,15 @@ public class SchemaFormBuilder
Element action = Element action =
xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "insert"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":insert");
action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, action.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "nodeset", SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset",
nodeset); nodeset);
action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, action.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "position", SchemaFormBuilder.XFORMS_NS_PREFIX + ":position",
"before"); "before");
action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, action.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "at", SchemaFormBuilder.XFORMS_NS_PREFIX + ":at",
"1"); "1");
final Element trigger_insert_before = final Element trigger_insert_before =
@@ -3399,16 +3441,16 @@ public class SchemaFormBuilder
action); action);
action = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, action = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "insert"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":insert");
action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, action.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "nodeset", SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset",
nodeset); nodeset);
action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, action.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "position", SchemaFormBuilder.XFORMS_NS_PREFIX + ":position",
"after"); "after");
action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, action.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "at", SchemaFormBuilder.XFORMS_NS_PREFIX + ":at",
SchemaFormBuilder.XFORMS_NS_PREFIX + "index('" + repeatId + "')"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":index('" + repeatId + "')");
final Element trigger_insert_after = final Element trigger_insert_after =
this.createTriggerForRepeat(xformsDocument, this.createTriggerForRepeat(xformsDocument,
@@ -3419,13 +3461,13 @@ public class SchemaFormBuilder
//trigger delete //trigger delete
action = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, action = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "delete"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":delete");
action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, action.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "nodeset", SchemaFormBuilder.XFORMS_NS_PREFIX + ":nodeset",
nodeset); nodeset);
action.setAttributeNS(SchemaFormBuilder.XFORMS_NS, action.setAttributeNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "at", SchemaFormBuilder.XFORMS_NS_PREFIX + ":at",
SchemaFormBuilder.XFORMS_NS_PREFIX + "index('" + repeatId + "')"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":index('" + repeatId + "')");
final Element trigger_delete = final Element trigger_delete =
this.createTriggerForRepeat(xformsDocument, this.createTriggerForRepeat(xformsDocument,
@@ -3464,16 +3506,16 @@ public class SchemaFormBuilder
final String value) final String value)
{ {
final Element item = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, final Element item = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "item"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":item");
this.setXFormsId(item); this.setXFormsId(item);
Element e = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, Element e = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "label"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":label");
this.setXFormsId(e); this.setXFormsId(e);
e.appendChild(xformsDocument.createTextNode(label)); e.appendChild(xformsDocument.createTextNode(label));
item.appendChild(e); item.appendChild(e);
e = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS, e = xformsDocument.createElementNS(SchemaFormBuilder.XFORMS_NS,
SchemaFormBuilder.XFORMS_NS_PREFIX + "value"); SchemaFormBuilder.XFORMS_NS_PREFIX + ":value");
this.setXFormsId(e); this.setXFormsId(e);
e.appendChild(xformsDocument.createTextNode(value)); e.appendChild(xformsDocument.createTextNode(value));
item.appendChild(e); item.appendChild(e);