/* * Copyright (c) 2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wso2.carbon.bpel.ui.bpel2svg.impl; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.impl.builder.StAXOMBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.bpel.ui.bpel2svg.ActivityInterface; import org.wso2.carbon.bpel.ui.bpel2svg.BPELInterface; import org.wso2.carbon.bpel.ui.bpel2svg.Link; import org.wso2.carbon.bpel.ui.bpel2svg.ProcessInterface; import java.io.StringReader; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; /** * Parse the BPEL process definition and recursively create the process object model */ public class BPELImpl implements BPELInterface { //To handle links public Map<String, Link> links = new HashMap<String, Link>(); public Set<ActivityInterface> sources = new HashSet<ActivityInterface>(); public Set<ActivityInterface> targets = new HashSet<ActivityInterface>(); private Log log = LogFactory.getLog(BPELImpl.class); private ProcessInterface processActivity = null; private boolean vertical = true; private boolean includeAssign = true; /*To create an OmElement (OMElement is how the AXIS2 Object Model (AXIOM) represents an XML element) from the bpel process definition */ private XMLStreamReader parser = null; private StAXOMBuilder builder = null; private OMElement bpelElement = null; /** * Process the OmElement containing the bpel process definition * By passing the OmElement with the process definition a new Process Activity is created. * If there any links in the process,set the link properties i.e. the link name, source of the link and the * target of the link. * Process the subactivites of the bpel process by iterating through the omElement * * @param om omElement containing the bpel process definition */ public void processBpelString(OMElement om) { //Checks whether the omElement/XmlElement contains a value if (om != null) { //Creates a new instance of the Process activity by passing the omElement with process definition as the // @param processActivity = new ProcessImpl(bpelElement); //Set the link properties i.e. the link name, source of the link and the target of the link of the bpel // process processActivity.setLinkProperties(links, sources, targets); /** * Get the subactivites in the bpel process by passing the omElement with the process definition as the * @param * Iterates through the omElement and processes the subActivities each one separately, if the activity * name matches any of the element tags * then the constructor of that activity implementation is invoked */ processActivity.processSubActivities(bpelElement); } } /** * Converts the bpel process definition to an omElement which is how the AXIS2 Object Model (AXIOM) represents an * XML * element * * @param bpelStr bpel process definition needed to create the SVG * @return omElement */ public OMElement load(String bpelStr) { try { /*Creates a new instance of the XmlStreamReader class for the specified String input i.e. the bpel process definition using the StringReader class which enables you to turn an ordinary String into a Reader. This is useful if you have data as a String but need to pass that String to a component that only accepts a Reader. */ parser = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(bpelStr)); /*The instance of XmlStreamReader created is passed to the StAXOMBuilder which produces a pure XML infoset compliant object model which conatins the bpel process definition */ builder = new StAXOMBuilder(parser); //The XML object created by the StAXOMBuilder is used to build an OMElement that is added to an existing // OM tree bpelElement = builder.getDocumentElement(); //OmElement containing the bpel process definition is returned return bpelElement; } catch (XMLStreamException e) { log.error("XMLStreamReader creation failed", e); throw new NullPointerException("Document Element is NULL"); } } /** * Gets the root activity i.e. the Process Activity * * @return root activity i.e. Process Activity */ public ProcessInterface getRootActivity() { return processActivity; } /** * Gets the boolean value for the vertical layout * * @return true/false */ public boolean isVertical() { return vertical; } /** * Sets the boolean value for the vertical layout * * @param vertical boolean value -> true/false */ public void setVertical(boolean vertical) { this.vertical = vertical; } /** * Gets the boolean value to include the assign activities * * @return boolean value to include the assign activities->true/false */ public boolean isIncludeAssign() { return includeAssign; } /** * Sets the boolean value to include the assign activities * * @param includeAssign boolean value to include the assign activities */ public void setIncludeAssign(boolean includeAssign) { this.includeAssign = includeAssign; } /** * Gets the omElement containing the bpel process definition * * @return omElement containing the bpel process definition */ public OMElement getBpelElement() { return bpelElement; } /** * Sets the omElement containing the bpel process definition * * @param bpelElement omElement containing the bpel process definition */ public void setBpelElement(OMElement bpelElement) { this.bpelElement = bpelElement; } }