
org.ow2.bonita.parsing.binding.MajorElementBinding Maven / Gradle / Ivy
/**
* Copyright (C) 2006 Bull S. A. S.
* Bull, Rue Jean Jaures, B.P.68, 78340, Les Clayes-sous-Bois
* This library is free software; you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Foundation
* version 2.1 of the License.
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301, USA.
**/
package org.ow2.bonita.parsing.binding;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.ow2.bonita.facade.def.dataType.DataTypeDefinition;
import org.ow2.bonita.facade.def.element.ExternalReferenceDefinition;
import org.ow2.bonita.facade.def.element.FormalParameterDefinition;
import org.ow2.bonita.facade.def.element.FormalParameterDefinition.Mode;
import org.ow2.bonita.facade.def.element.impl.ExternalReferenceDefinitionImpl;
import org.ow2.bonita.facade.def.element.impl.FormalParameterDefinitionImpl;
import org.ow2.bonita.facade.def.majorElement.ActivityDefinition;
import org.ow2.bonita.facade.def.majorElement.ActivitySetDefinition;
import org.ow2.bonita.facade.def.majorElement.ApplicationDefinition;
import org.ow2.bonita.facade.def.majorElement.DataFieldDefinition;
import org.ow2.bonita.facade.def.majorElement.DefinitionRecord;
import org.ow2.bonita.facade.def.majorElement.PackageDefinition;
import org.ow2.bonita.facade.def.majorElement.ParticipantDefinition;
import org.ow2.bonita.facade.def.majorElement.ProcessDefinition;
import org.ow2.bonita.facade.def.majorElement.TransitionDefinition;
import org.ow2.bonita.parsing.XpdlParser;
import org.ow2.bonita.parsing.XpdlParserException;
import org.ow2.bonita.pvm.internal.util.TagBinding;
import org.ow2.bonita.pvm.internal.util.XmlUtil;
import org.ow2.bonita.pvm.internal.xml.Parse;
import org.ow2.bonita.pvm.internal.xml.Parser;
import org.ow2.bonita.util.Misc;
import org.ow2.bonita.util.XmlConstants;
import org.w3c.dom.Element;
/**
* @author Marc Blachon, Guillaume Porcher, Charles Souillard, Miguel Valdes, Pierre Vigneras
*/
public abstract class MajorElementBinding extends TagBinding {
protected MajorElementBinding(String tagName) {
super(tagName, XmlConstants.XPDL_1_0_NS, XpdlParser.CATEGORY_MAJOR_ELT);
}
protected String getId(Element domElement) {
String id = XmlUtil.attribute(domElement, "Id");
if (id == null) {
throw new XpdlParserException("Error: id is null for " + domElement);
}
return id;
}
protected String getName(Element domElement) {
String name = XmlUtil.attribute(domElement, "Name");
if (name == null) {
name = getId(domElement);
}
return name;
}
protected T getObject(Class clazz, Parse parse) {
return parse.findObject(clazz);
}
/**
* returns a list of formal parameters: parameters are ordered and index attribute is not required
* (index attribute has been removed in Xpdl 2)
* TODO: check that a formal parameter in a workflow process does not hide a data field name.
*/
protected List getFormalParameters(Element fatherElement, Parse parse, Parser parser) {
List formalParameters = null;
Element formalParametersElement = XmlUtil.element(fatherElement, "FormalParameters");
if (formalParametersElement != null) {
List formalParameterElements = XmlUtil.elements(formalParametersElement, "FormalParameter");
if (formalParameterElements != null) {
formalParameters = new ArrayList();
for (Element formalParameterElement : formalParameterElements) {
DataTypeDefinition dataTypeDefinition = null;
Element dataTypeElement = XmlUtil.element(formalParameterElement, "DataType");
if (dataTypeElement != null) {
dataTypeDefinition = (DataTypeDefinition) parser.parseElement(dataTypeElement, parse, "dataTypes");
}
String description = getChildTextContent(formalParameterElement, "Description");
String id = XmlUtil.attribute(formalParameterElement, "Id");
String index = XmlUtil.attribute(formalParameterElement, "Index");
Mode mode = getEnumValue(Mode.class, XmlUtil.attribute(formalParameterElement, "Mode"), Mode.IN);
FormalParameterDefinition formalParameterDefinition =
new FormalParameterDefinitionImpl(dataTypeDefinition, description, id, index, mode);
formalParameters.add(formalParameterDefinition);
}
}
}
return formalParameters;
}
@SuppressWarnings("unchecked")
protected Set parseXpdlMajorElementList(Element fatherElement,
String listName, String elementName, Parse parse, Parser parser) {
Element listElement = XmlUtil.element(fatherElement, listName);
if (listElement != null) {
Set xpdlMajorElements = new HashSet();
Set ids = new HashSet();
Set names = new HashSet();
List subElements = XmlUtil.elements(listElement, elementName);
if (subElements != null) {
for (Element subElement : subElements) {
T majorElement = (T) parser.parseElement(subElement, parse, "majorElements");
String id = getDefinitionId(majorElement);
if (!ids.add(id)) {
throw new XpdlParserException("Error: Duplicate processId " + id + " for majorElement " + elementName);
}
if (!names.add(majorElement.getName())) {
throw new XpdlParserException("Error: Duplicate name " + majorElement.getName()
+ " for majorElement " + elementName);
}
xpdlMajorElements.add(majorElement);
}
}
return xpdlMajorElements;
}
return null;
}
private String getDefinitionId(DefinitionRecord definitionRecord) {
if (definitionRecord instanceof PackageDefinition) {
return ((PackageDefinition)definitionRecord).getPackageId();
} else if (definitionRecord instanceof ProcessDefinition) {
return ((ProcessDefinition)definitionRecord).getProcessId();
} else if (definitionRecord instanceof ActivityDefinition) {
return ((ActivityDefinition)definitionRecord).getActivityId();
} else if (definitionRecord instanceof ActivitySetDefinition) {
return ((ActivitySetDefinition)definitionRecord).getActivitySetId();
} else if (definitionRecord instanceof ApplicationDefinition) {
return ((ApplicationDefinition)definitionRecord).getApplicationId();
} else if (definitionRecord instanceof DataFieldDefinition) {
return ((DataFieldDefinition)definitionRecord).getDataFieldId();
} else if (definitionRecord instanceof ParticipantDefinition) {
return ((ParticipantDefinition)definitionRecord).getParticipantId();
} else if (definitionRecord instanceof TransitionDefinition) {
return ((TransitionDefinition)definitionRecord).getTransitionId();
} else {
throw new XpdlParserException("Unknown DefinitionRecord : " + definitionRecord
+ ", class : " + definitionRecord.getClass());
}
}
protected ExternalReferenceDefinition getExternalereference(Element fatherElement) {
ExternalReferenceDefinition externalReference = null;
Element externalReferenceElement = XmlUtil.element(fatherElement, "ExternalReference");
if (externalReferenceElement != null) {
String xref = XmlUtil.attribute(externalReferenceElement, "xref");
String location = XmlUtil.attribute(externalReferenceElement, "location");
String namespace = XmlUtil.attribute(externalReferenceElement, "namespace");
externalReference = new ExternalReferenceDefinitionImpl(location, namespace, xref);
}
return externalReference;
}
protected String getChildTextContent(Element fatherElement, String childTagName) {
if (fatherElement == null) {
return null;
}
Element childElement = XmlUtil.element(fatherElement, childTagName);
if (childElement != null) {
return childElement.getTextContent().trim();
}
return null;
}
protected > T getEnumValue(Class< T > enumType, String valueAsString, T defaultValue) {
if (valueAsString == null) {
return defaultValue;
}
try {
return Misc.stringToEnum(enumType, valueAsString);
} catch (IllegalArgumentException e) {
throw new XpdlParserException("Invalid enum value: " + valueAsString + " is not in " + enumType.getName(), e);
}
}
protected boolean containsExtendedAttribute(Element domElement, String extendedAttributeName) {
return getExtendedAttribute(domElement, extendedAttributeName) != null;
}
protected Element getExtendedAttribute(Element domElement, String extendedAttributeName) {
Element extendedAttributesElement = XmlUtil.element(domElement, "ExtendedAttributes");
if (extendedAttributesElement != null) {
List extendedAttributeElements = XmlUtil.elements(extendedAttributesElement, "ExtendedAttribute");
if (extendedAttributeElements != null) {
for (Element extendedAttributeElement : extendedAttributeElements) {
String name = XmlUtil.attribute(extendedAttributeElement, "Name");
if (name != null && name.equals(extendedAttributeName)) {
return extendedAttributeElement;
}
}
}
}
return null;
}
protected Set getExtendedAttributes(Element domElement, String extendedAttributeName) {
Set result = null;
Element extendedAttributesElement = XmlUtil.element(domElement, "ExtendedAttributes");
if (extendedAttributesElement != null) {
List extendedAttributeElements = XmlUtil.elements(extendedAttributesElement, "ExtendedAttribute");
if (extendedAttributeElements != null) {
result = new HashSet();
for (Element extendedAttributeElement : extendedAttributeElements) {
String name = XmlUtil.attribute(extendedAttributeElement, "Name");
if (name != null && name.equals(extendedAttributeName)) {
result.add(extendedAttributeElement);
}
}
}
}
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy