All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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