package sushi.bpmn.decomposition; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.Set; import org.jbpt.algo.tree.rpst.IRPSTNode; import org.jbpt.algo.tree.rpst.RPST; import org.jbpt.algo.tree.tctree.TCTree; import org.jbpt.algo.tree.tctree.TCTreeNode; import org.jbpt.algo.tree.tctree.TCType; import org.jbpt.graph.DirectedEdge; import org.jbpt.graph.MultiDirectedGraph; import org.jbpt.hypergraph.abs.Vertex; import org.junit.Test; import sushi.bpmn.DirectedBPMNEdge; import sushi.bpmn.element.AbstractBPMNElement; import sushi.event.collection.SushiTree; /** * This class tests the decomposition of graphs with the RPST implementation and serves as a first example. * @author micha */ public class RPSTTest extends AbstractDecompositionTest { private MultiDirectedGraph getGraph() { System.out.println("SIMPLE SEQUENCE (3)"); MultiDirectedGraph g = new MultiDirectedGraph(); Vertex u = new Vertex("u"); Vertex v = new Vertex("v"); Vertex w = new Vertex("w"); Vertex x = new Vertex("x"); g.addEdge(u,v); g.addEdge(v,w); g.addEdge(w,x); return g; } @Test public void testSequenceRPST(){ RPST<DirectedEdge,Vertex> rpst = new RPST<DirectedEdge,Vertex>(getGraph()); for (IRPSTNode<DirectedEdge,Vertex> node : rpst.getRPSTNodes()) { System.out.print(node.getName() + ": "); for (IRPSTNode<DirectedEdge,Vertex> child : rpst.getPolygonChildren(node)) { System.out.print(child.getName() + " "); } System.out.println(); } System.out.println("ROOT:" + rpst.getRoot()); assertNotNull(rpst.getRoot()); assertEquals(1,rpst.getRPSTNodes(TCType.POLYGON).size()); assertEquals(3,rpst.getRPSTNodes(TCType.TRIVIAL).size()); assertEquals(0,rpst.getRPSTNodes(TCType.RIGID).size()); assertEquals(0,rpst.getRPSTNodes(TCType.BOND).size()); assertEquals(TCType.POLYGON, rpst.getRoot().getType()); System.out.println("-----------------------------------------------------------------------"); } @Test public void testComplexRPST(){ RPST<DirectedBPMNEdge,AbstractBPMNElement> rpst = new RPST<DirectedBPMNEdge,AbstractBPMNElement>(new RPSTBuilder(process).getGraph()); IRPSTNode<DirectedBPMNEdge, AbstractBPMNElement> rootNode = rpst.getRoot(); assertNotNull(rootNode); Set<IRPSTNode<DirectedBPMNEdge, AbstractBPMNElement>> rpstNodes = rpst.getRPSTNodes(); assertNotNull(rpstNodes); SushiTree<IRPSTNode<DirectedBPMNEdge, AbstractBPMNElement>> rpstNodesTree = new SushiTree<IRPSTNode<DirectedBPMNEdge, AbstractBPMNElement>>(); assertNotNull(rpstNodesTree); for (IRPSTNode<DirectedBPMNEdge, AbstractBPMNElement> node : rpst.getRPSTNodes()) { if(node.getType() != TCType.TRIVIAL){ System.out.print(node.getType() + ": " + node.getName() + ": "); for (IRPSTNode<DirectedBPMNEdge, AbstractBPMNElement> child : rpst.getChildren(node)) { System.out.print(child.getName() + " | "); } System.out.println(); } } } @Test public void testComplexSPQR(){ TCTree<DirectedBPMNEdge,AbstractBPMNElement> tcTree = new TCTree<DirectedBPMNEdge,AbstractBPMNElement>(new RPSTBuilder(process).getGraph()); for (TCTreeNode<DirectedBPMNEdge,AbstractBPMNElement> node : tcTree.getTCTreeNodes()) { if(node.getType() != TCType.TRIVIAL){ System.out.print(node.getType() + ": " + node.getName() + ": "); for (TCTreeNode<DirectedBPMNEdge, AbstractBPMNElement> child : tcTree.getChildren(node)) { System.out.print(child.getName() + " | "); } System.out.println(); } } } @Test public void testTreeCreation(){ RPSTBuilder rpst = new RPSTBuilder(process); assertNotNull(rpst); System.out.println(rpst.getProcessDecompositionTree()); } }