/* Copyright 2012-2015 SAP SE * * 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 eu.aniketos.securebpmn.export.xacml.export; import java.util.ArrayList; import java.util.List; import org.eclipse.bpmn2.EndEvent; import org.eclipse.bpmn2.FlowElement; import org.eclipse.bpmn2.Gateway; import org.eclipse.bpmn2.ParallelGateway; import org.eclipse.bpmn2.SequenceFlow; import org.eclipse.bpmn2.StartEvent; import org.eclipse.bpmn2.Task; /** * Creates the ASLan representation for a BPMN 2.0 ParallelGateway element. * */ public class ParallelGatewayExport { // // /** // * Generates the ASLan representation of the provided ParallelGateway // * element and sends the output to the provided AslanFileBuilder. // * // * @param parallelGateway // * The ParallelGateway for which the representation should be // * generated. // * @param afb // * The AslanFileBuilder the output is sent to. // */ // public static void createParallelGatewayElements( // ParallelGateway parallelGateway, XacmlFileBuilder afb) { // // final List<SequenceFlow> incoming = parallelGateway.getIncoming(); // String rule = "step w_" + parallelGateway.getId(); // // if (incoming.size() > 0) { // // // AND-join, AND-split // String ruleDef = " := "; // // boolean firstDone = true; // List<String> natVars = new ArrayList<String>(); // for (SequenceFlow parentFlow : incoming) { // // final FlowElement predecessor = parentFlow.getSourceRef(); // // if (predecessor instanceof Task) { // // if (firstDone) { // firstDone = false; // } else { // ruleDef += ". "; // } // // String natVar = afb.addNatVar(); // // ruleDef += "done(task(" + predecessor.getId() + "," // + natVar + "))"; // natVars.add(natVar); // // } else if (predecessor instanceof Gateway) { // // if (firstDone) { // firstDone = false; // } else { // ruleDef += ". "; // } // // ruleDef += predecessor.getId() + "_to_" // + parallelGateway.getId(); // // } else if (predecessor instanceof StartEvent) { // // if (firstDone) { // firstDone = false; // } else { // ruleDef += ". "; // } // // ruleDef += "start_event_" + predecessor.getId(); // // } // } // // if (natVars.size() > 0) { // // rule += "("; // // for (int i = 0; i < natVars.size() - 1; i++) { // rule += natVars.get(i) + ","; // } // rule += natVars.get(natVars.size() - 1) + ")"; // // } // // rule += ruleDef + " => "; // // boolean firstAuxFact = true; // for (SequenceFlow childFlow : parallelGateway.getOutgoing()) { // // final FlowElement successor = childFlow.getTargetRef(); // // if (successor instanceof Task || successor instanceof Gateway // || successor instanceof EndEvent) { // // final String auxFact = parallelGateway.getId() + "_to_" // + successor.getId(); // afb.addType("fact", auxFact); // // if (firstAuxFact) { // rule += auxFact; // firstAuxFact = false; // } else { // rule += ". " + auxFact; // } // } // } // // afb.addRule(rule); // // } // } }