
org.ow2.bonita.parsing.binding.WorkflowProcessBinding 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.
*
* Modified by Matthieu Chaffotte - BonitaSoft S.A.
**/
package org.ow2.bonita.parsing.binding;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.ow2.bonita.util.ProcessBuilder;
import org.ow2.bonita.util.xml.Parse;
import org.ow2.bonita.util.xml.Parser;
import org.ow2.bonita.util.xml.XmlUtil;
import org.w3c.dom.Element;
/**
* @author Marc Blachon, Guillaume Porcher, Charles Souillard, Miguel Valdes, Pierre Vigneras
*/
public class WorkflowProcessBinding extends MajorElementBinding {
private static final Logger LOG = Logger.getLogger(WorkflowProcessBinding.class.getName());
public WorkflowProcessBinding() {
super("WorkflowProcess");
}
public Object parse(final Element workflowProcessElement, final Parse parse, final Parser parser) {
if (LOG.isLoggable(Level.FINE)) {
LOG.fine("parsing element = " + workflowProcessElement);
}
final String id = getId(workflowProcessElement);
final Element processHeaderElement = XmlUtil.element(workflowProcessElement, "ProcessHeader");
final String description = getChildTextContent(processHeaderElement, "Description");
final Element redefinableHeaderElement = XmlUtil.element(workflowProcessElement, "RedefinableHeader");
String version = getChildTextContent(redefinableHeaderElement, "Version");
if (version == null) {
//use package version
Element packageElement = (Element) workflowProcessElement.getParentNode().getParentNode();
final Element packageRedefinableHeaderElement = XmlUtil.element(packageElement, "RedefinableHeader");
version = getChildTextContent(packageRedefinableHeaderElement, "Version");
}
ProcessBuilder processBuilder = ProcessBuilder.createProcess(id, version);
processBuilder.addDescription(description);
processBuilder.addLabel(XmlUtil.attribute(workflowProcessElement, "Name"));
parse.pushObject(processBuilder);
parseFormalParameters(workflowProcessElement, parse, parser, processBuilder);
parseXpdlMajorElementList(workflowProcessElement, "Participants", "Participant", parse, parser);
Collection activityDatafields = parseXpdlMajorElementList(workflowProcessElement, "DataFields", "DataField", parse, parser);
parse.pushObject(activityDatafields);
parse.pushObject(new Boolean(true));
parseXpdlMajorElementList(workflowProcessElement,"Activities", "Activity", parse, parser);
parse.popObject();
parse.popObject();
parseXpdlMajorElementList(workflowProcessElement, "Transitions", "Transition", parse, parser);
parse.popObject();
return processBuilder.done();
}
/**
* 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 void parseFormalParameters(Element fatherElement, Parse parse, Parser parser, final ProcessBuilder processBuilder) {
Element formalParametersElement = XmlUtil.element(fatherElement, "FormalParameters");
if (formalParametersElement != null) {
parse.addWarning("Process FormalParameters not yet supported.");
/*
List formalParameterElements = XmlUtil.elements(formalParametersElement, "FormalParameter");
if (formalParameterElements != null) {
for (Element formalParameterElement : formalParameterElements) {
String parameterName = XmlUtil.attribute(formalParameterElement, "Id");
final String initialValue = getChildTextContent(formalParameterElement, "InitialValue");
addData(formalParameterElement, parameterName, initialValue, processBuilder, parse);
String mode = XmlUtil.attribute(formalParameterElement, "Mode");
if (mode == null || "IN".equals(mode)) {
processBuilder.addProcessInParameter(parameterName);
} else if ("OUT".equals(mode)) {
processBuilder.addProcessOutParameter(parameterName);
} else {
processBuilder.addProcessInParameter(parameterName);
processBuilder.addProcessOutParameter(parameterName);
}
}
}
*/
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy