/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * 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.jbpm.simulation; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.eclipse.bpmn2.AdHocSubProcess; import org.eclipse.bpmn2.Definitions; import org.eclipse.bpmn2.FlowElement; import org.eclipse.bpmn2.FlowElementsContainer; import org.eclipse.bpmn2.Process; import org.eclipse.bpmn2.RootElement; import org.eclipse.bpmn2.SubProcess; import org.jbpm.simulation.helper.TestUtils; import org.jbpm.simulation.util.BPMN2Utils; import org.junit.Test; @SuppressWarnings("unchecked") public class ContainerPathFinderTest { @Test public void testFindPathFromProcess() { List<String> expectedIds = new ArrayList<String>(); expectedIds.add("_1"); expectedIds.add("_1-_2"); expectedIds.add("_2"); expectedIds.add("_2-_3"); expectedIds.add("_3"); Definitions defs = BPMN2Utils.getDefinitions(this.getClass() .getResourceAsStream("/BPMN2-UserTask.bpmn2")); Process process = null; List<RootElement> rootElements = defs.getRootElements(); for (RootElement root : rootElements) { if (root instanceof Process) { process = (Process) root; break; } } PathFinder finder = PathFinderFactory.getInstance(process); List<PathContext> paths = finder.findPaths(); assertNotNull(paths); assertEquals(1, paths.size()); assertTrue(TestUtils.matchExpected(paths, expectedIds)); TestUtils.printOutPaths(paths, "testFindPathFromProcess"); } @Test public void testFindPathFromAdHocSubprocess() { List<String> expectedIds1 = new ArrayList<String>(); expectedIds1.add("_2-1"); List<String> expectedIds2 = new ArrayList<String>(); expectedIds2.add("_2-2"); expectedIds2.add("_2-2-_2-3"); expectedIds2.add("_2-3"); Definitions defs = BPMN2Utils.getDefinitions(this.getClass() .getResourceAsStream("/BPMN2-AdHocSubProcess.bpmn2")); Process process = null; List<RootElement> rootElements = defs.getRootElements(); for (RootElement root : rootElements) { if (root instanceof Process) { process = (Process) root; break; } } assertNotNull(process); FlowElementsContainer container = null; for (FlowElement element : process.getFlowElements()) { if (element instanceof AdHocSubProcess) { container = (FlowElementsContainer) element; break; } } assertNotNull(container); PathFinder finder = PathFinderFactory.getInstance(container); List<PathContext> paths = finder.findPaths(); assertNotNull(paths); assertEquals(2, paths.size()); assertTrue(TestUtils.matchExpected(paths, expectedIds1, expectedIds2)); TestUtils.printOutPaths(paths, "testFindPathFromAdHocSubprocess"); } @Test public void testFindPathFromEmbeddedSubprocess() throws IOException { List<String> expectedIds1 = new ArrayList<String>(); expectedIds1.add("StartEvent_2"); expectedIds1.add("SequenceFlow_3"); expectedIds1.add("ExclusiveGateway_1"); expectedIds1.add("SequenceFlow_5"); expectedIds1.add("ScriptTask_1"); expectedIds1.add("SequenceFlow_7"); expectedIds1.add("ExclusiveGateway_2"); expectedIds1.add("SequenceFlow_8"); expectedIds1.add("EndEvent_2"); List<String> expectedIds2 = new ArrayList<String>(); expectedIds2.add("StartEvent_2"); expectedIds2.add("SequenceFlow_3"); expectedIds2.add("ExclusiveGateway_1"); expectedIds2.add("SequenceFlow_10"); expectedIds2.add("ScriptTask_2"); expectedIds2.add("SequenceFlow_11"); expectedIds2.add("ExclusiveGateway_2"); expectedIds2.add("SequenceFlow_8"); expectedIds2.add("EndEvent_2"); Definitions defs = BPMN2Utils.getDefinitions(this.getClass() .getResourceAsStream("/BPMN2-EmbeddedSubProcessWithExclusiveSplit.bpmn2")); Process process = null; List<RootElement> rootElements = defs.getRootElements(); for (RootElement root : rootElements) { if (root instanceof Process) { process = (Process) root; break; } } assertNotNull(process); FlowElementsContainer container = null; for (FlowElement element : process.getFlowElements()) { if (element instanceof SubProcess) { container = (FlowElementsContainer) element; break; } } assertNotNull(container); PathFinder finder = PathFinderFactory.getInstance(container); List<PathContext> paths = finder.findPaths(); assertNotNull(paths); assertEquals(2, paths.size()); assertTrue(TestUtils.matchExpected(paths, expectedIds1, expectedIds2)); TestUtils.printOutPaths(paths, "testFindPathFromEmbeddedSubprocess"); } }