org.dom4j.Element child = (org.dom4j.Element)anlIterator.next();
String attributeName = child.attributeValue("name");
String attributeType = child.attributeValue("type");
ContentTypeAttribute contentTypeAttribute = new ContentTypeAttribute();
contentTypeAttribute.setPosition(i);
contentTypeAttribute.setName(attributeName);
contentTypeAttribute.setInputType(attributeType);
String validatorsXPath = "/xs:schema/xs:complexType[@name = 'Validation']/xs:annotation/xs:appinfo/form-validation/formset/form/field[@property = '"+ attributeName +"']";
String dataProviderClass = null;
String dataProviderParameters = null;
// Get validators
List validatorNodeList = document.getRootElement().selectNodes(validatorsXPath);
Iterator validatorNodeListIterator = validatorNodeList.iterator();
while(validatorNodeListIterator.hasNext())
{
org.dom4j.Element validatorNode = (org.dom4j.Element)validatorNodeListIterator.next();
if (validatorNode != null)
{
Map arguments = new HashMap();
List varNodeList = validatorNode.elements("var");
Iterator varNodeListIterator = varNodeList.iterator();
while(varNodeListIterator.hasNext())
{
org.dom4j.Element varNode = (org.dom4j.Element)varNodeListIterator.next();
String varName = getElementValue(varNode, "var-name");
String varValue = getElementValue(varNode, "var-value");
arguments.put(varName, varValue);
}
List<LanguageVO> languageVOList = LanguageController.getController().getLanguageVOList();
for(LanguageVO languageVO : languageVOList)
{
String msgText = validatorNode.element("msg").attributeValue("key_" + languageVO.getLanguageCode());
if(msgText != null)
arguments.put("msgText_" + languageVO.getLanguageCode(), msgText);
}
String msgText = validatorNode.element("msg").attributeValue("key_" + languageCode);
if(msgText == null || msgText.equals(""))
msgText = validatorNode.element("msg").attributeValue("key");
if(msgText != null)
arguments.put("msgText", msgText);
String attribute = validatorNode.attributeValue("depends");
String[] depends = attribute.split(",");
for(int dependsIndex=0; dependsIndex < depends.length; dependsIndex++)
{
String name = depends[dependsIndex];
ContentTypeAttributeValidator contentTypeAttributeValidator = new ContentTypeAttributeValidator();
contentTypeAttributeValidator.setName(name);
contentTypeAttributeValidator.setArguments(arguments);
contentTypeAttribute.getValidators().add(contentTypeAttributeValidator);
}
}
}
// Get extra parameters
Map existingParams = new HashMap();
org.dom4j.Element paramsNode = (org.dom4j.Element)child.selectSingleNode("xs:annotation/xs:appinfo/params");
if (paramsNode != null)
{
List childnl = paramsNode.elements("param");
Iterator childnlIterator = childnl.iterator();
while(childnlIterator.hasNext())
{
org.dom4j.Element param = (org.dom4j.Element)childnlIterator.next();
String paramId = param.attributeValue("id");
String paramInputTypeId = param.attributeValue("inputTypeId");
ContentTypeAttributeParameter contentTypeAttributeParameter = new ContentTypeAttributeParameter();
contentTypeAttributeParameter.setId(paramId);
if(paramInputTypeId != null && paramInputTypeId.length() > 0)
contentTypeAttributeParameter.setType(Integer.parseInt(paramInputTypeId));
contentTypeAttribute.putContentTypeAttributeParameter(paramId, contentTypeAttributeParameter);
existingParams.put(paramId, contentTypeAttributeParameter);
if(paramId.equalsIgnoreCase("dataProviderClass"))
{
org.dom4j.Element valueElement = (org.dom4j.Element)param.selectSingleNode("values/value");
dataProviderClass = valueElement.attributeValue("label");
}
else if(paramId.equalsIgnoreCase("dataProviderParameters"))
{
org.dom4j.Element valueElement = (org.dom4j.Element)param.selectSingleNode("values/value");
dataProviderParameters = valueElement.attributeValue("label");
}
List valuesNodeList = param.elements("values");
Iterator valuesNodeListIterator = valuesNodeList.iterator();
while(valuesNodeListIterator.hasNext())
{
org.dom4j.Element vsnli = (org.dom4j.Element)valuesNodeListIterator.next();
List valueNodeList = vsnli.elements("value");
Iterator valueNodeListIterator = valueNodeList.iterator();
while(valueNodeListIterator.hasNext())
{
org.dom4j.Element value = (org.dom4j.Element)valueNodeListIterator.next();
String valueId = value.attributeValue("id");
ContentTypeAttributeParameterValue contentTypeAttributeParameterValue = new ContentTypeAttributeParameterValue();
contentTypeAttributeParameterValue.setId(valueId);
List attributesList = value.attributes();
Iterator attributesListIterator = attributesList.iterator();
String optionName = null;
String optionValue = null;
while(attributesListIterator.hasNext())
{
org.dom4j.Attribute attribute = (org.dom4j.Attribute)attributesListIterator.next();
String valueAttributeName = attribute.getName();
String valueAttributeValue = attribute.getStringValue();
if(valueAttributeName.equals("label"))
optionName = valueAttributeValue;
if(valueAttributeName.equals("id"))
optionValue = valueAttributeValue;
contentTypeAttributeParameterValue.addAttribute(valueAttributeName, valueAttributeValue);
}
if(paramInputTypeId.equals("1"))
contentTypeAttribute.getOptions().add(new ContentTypeAttributeOptionDefinition(optionName, optionValue));
contentTypeAttributeParameter.addContentTypeAttributeParameterValue(valueId, contentTypeAttributeParameterValue);
}
}
}
}
if(dataProviderClass != null && !dataProviderClass.equals(""))
{
try
{
PropertyOptionsDataProvider provider = (PropertyOptionsDataProvider)Class.forName(dataProviderClass).newInstance();
Map parameters = httpHelper.toMap(dataProviderParameters, "UTF-8", ";");
List<GenericOptionDefinition> options = provider.getOptions(parameters, languageCode, principal, db);
contentTypeAttribute.getOptions().addAll(options);
}
catch (Exception e)
{
if(logger.isDebugEnabled())
logger.error("Unable to fetch data from custom class [" + dataProviderClass + "]:" + e.getMessage(), e);
else
logger.error("Unable to fetch data from custom class [" + dataProviderClass + "]:" + e.getMessage());
}
}
if((attributeType.equals("select") || attributeType.equals("radiobutton") || attributeType.equals("checkbox")) && !existingParams.containsKey("widget"))
{
ContentTypeAttributeParameter contentTypeAttributeParameter = new ContentTypeAttributeParameter();
contentTypeAttributeParameter.setId("widget");
contentTypeAttributeParameter.setType(0);
contentTypeAttribute.putContentTypeAttributeParameter("widget", contentTypeAttributeParameter);
ContentTypeAttributeParameterValue contentTypeAttributeParameterValue = new ContentTypeAttributeParameterValue();
contentTypeAttributeParameterValue.setId("0");
contentTypeAttributeParameterValue.addAttribute("id", "default");
contentTypeAttributeParameterValue.addAttribute("label", "Default");
contentTypeAttributeParameter.addContentTypeAttributeParameterValue("0", contentTypeAttributeParameterValue);
}
// End extra parameters
attributes.add(contentTypeAttribute);
}
if(addPriorityAttribute)
{
ContentTypeAttribute contentTypeAttribute = new ContentTypeAttribute();
contentTypeAttribute.setPosition(i);
contentTypeAttribute.setName("PropertyPriority");
contentTypeAttribute.setInputType("select");
ContentTypeAttributeParameter contentTypeAttributeParameter = new ContentTypeAttributeParameter();
contentTypeAttributeParameter.setId("title");
contentTypeAttributeParameter.setType(0);
contentTypeAttribute.putContentTypeAttributeParameter("title", contentTypeAttributeParameter);
ContentTypeAttributeParameterValue contentTypeAttributeParameterValue = new ContentTypeAttributeParameterValue();
contentTypeAttributeParameterValue.setId("title");
contentTypeAttributeParameterValue.addAttribute("title", "PropertyPriority");
contentTypeAttributeParameter.addContentTypeAttributeParameterValue("title", contentTypeAttributeParameterValue);
contentTypeAttributeParameter = new ContentTypeAttributeParameter();
contentTypeAttributeParameter.setId("description");
contentTypeAttributeParameter.setType(0);
contentTypeAttribute.putContentTypeAttributeParameter("description", contentTypeAttributeParameter);
contentTypeAttributeParameterValue = new ContentTypeAttributeParameterValue();
contentTypeAttributeParameterValue.setId("description");
contentTypeAttributeParameterValue.addAttribute("description", "What prio should this have");
contentTypeAttributeParameter.addContentTypeAttributeParameterValue("description", contentTypeAttributeParameterValue);
contentTypeAttributeParameter = new ContentTypeAttributeParameter();
contentTypeAttributeParameter.setId("initialData");
contentTypeAttributeParameter.setType(0);
contentTypeAttribute.putContentTypeAttributeParameter("initialData", contentTypeAttributeParameter);
contentTypeAttributeParameterValue = new ContentTypeAttributeParameterValue();
contentTypeAttributeParameterValue.setId("initialData");
contentTypeAttributeParameterValue.addAttribute("initialData", "");
contentTypeAttributeParameter.addContentTypeAttributeParameterValue("initialData", contentTypeAttributeParameterValue);
contentTypeAttributeParameter = new ContentTypeAttributeParameter();
contentTypeAttributeParameter.setId("class");
contentTypeAttributeParameter.setType(0);
contentTypeAttribute.putContentTypeAttributeParameter("class", contentTypeAttributeParameter);
contentTypeAttributeParameterValue = new ContentTypeAttributeParameterValue();
contentTypeAttributeParameterValue.setId("class");
contentTypeAttributeParameterValue.addAttribute("class", "longtextfield");
contentTypeAttributeParameter.addContentTypeAttributeParameterValue("class", contentTypeAttributeParameterValue);
contentTypeAttributeParameter = new ContentTypeAttributeParameter();
contentTypeAttributeParameter.setId("values");
contentTypeAttributeParameter.setType(1);
contentTypeAttribute.putContentTypeAttributeParameter("values", contentTypeAttributeParameter);
contentTypeAttribute.getOptions().add(new ContentTypeAttributeOptionDefinition("Lowest", "1"));
contentTypeAttribute.getOptions().add(new ContentTypeAttributeOptionDefinition("Low", "2"));
contentTypeAttribute.getOptions().add(new ContentTypeAttributeOptionDefinition("Medium", "3"));
contentTypeAttribute.getOptions().add(new ContentTypeAttributeOptionDefinition("High", "4"));
contentTypeAttribute.getOptions().add(new ContentTypeAttributeOptionDefinition("Highest", "5"));
contentTypeAttributeParameterValue = new ContentTypeAttributeParameterValue();
contentTypeAttributeParameterValue.setId("1");
contentTypeAttributeParameterValue.addAttribute("id", "1");
contentTypeAttributeParameterValue.addAttribute("label", "Lowest");