package ee.telekom.workflow.graph; import java.util.Collections; import java.util.Map; import ee.telekom.workflow.graph.core.GraphImpl; import ee.telekom.workflow.graph.core.TransitionImpl; import ee.telekom.workflow.graph.node.activity.BeanAsyncCallActivity; import ee.telekom.workflow.graph.node.activity.CreateNewInstanceActivity; import ee.telekom.workflow.graph.node.activity.HumanTaskActivity; import ee.telekom.workflow.graph.node.activity.ObjectCallActivity; import ee.telekom.workflow.graph.node.activity.ScriptActivity; import ee.telekom.workflow.graph.node.activity.SetAttributeActivity; import ee.telekom.workflow.graph.node.activity.ValidateAttributeActivity; import ee.telekom.workflow.graph.node.event.CatchSignal; import ee.telekom.workflow.graph.node.event.CatchTimer; import ee.telekom.workflow.graph.node.event.ThrowEscalation; import ee.telekom.workflow.graph.node.gateway.AndFork; import ee.telekom.workflow.graph.node.gateway.AndJoin; import ee.telekom.workflow.graph.node.gateway.CancellingDiscriminator; import ee.telekom.workflow.graph.node.gateway.OrFork; import ee.telekom.workflow.graph.node.gateway.XorFork; import ee.telekom.workflow.graph.node.gateway.XorJoin; import ee.telekom.workflow.graph.node.gateway.condition.AttributeEqualsCondition; import ee.telekom.workflow.graph.node.gateway.condition.Condition; import ee.telekom.workflow.graph.node.gateway.condition.ExpressionLanguageCondition; import ee.telekom.workflow.graph.node.input.AttributeMapping; import ee.telekom.workflow.graph.node.input.ConstantMapping; import ee.telekom.workflow.graph.node.input.InputMapping; import ee.telekom.workflow.graph.node.input.MapMapping; import ee.telekom.workflow.graph.node.output.OutputMapping; import ee.telekom.workflow.graph.node.output.ValueMapping; public class GraphFactory{ public static final GraphFactory INSTANCE = new GraphFactory(); public static final String VALUE1 = "value1"; public static final String VALUE2 = "value2"; public static final String VALUE3 = "value3"; public static final String SIGNAL = "go"; public static final int TIMER_MS = 60000; public static final String BEAN = "bean1"; public static final String METHOD = "method1"; public static final String ROLE = "role1"; public static final String USER = "user1"; public static final String ARGUMENT_KEY = "argument"; public static final String ARGUMENT = "argument"; public static final String RESULT_KEY = "result_key"; public static final String RESULT = "result"; public static final String CONDITION_TEST_ATTRIBUTE = "conditionAttribute"; public static class TestBean{ public Object method1( String argument ){ return ARGUMENT.equals( argument ) ? RESULT : null; } } /** * <pre> * [1] * </pre> */ public Graph sequence_one(){ GraphImpl graph = new GraphImpl( "sequence_one", 1 ); Node node1 = createRecordPathNode( 1 ); graph.setStartNode( node1 ); return graph; } /** * <pre> * [1]--[2] * </pre> */ public Graph sequence_two(){ GraphImpl graph = new GraphImpl( "sequence_two", 1 ); Node node1 = createRecordPathNode( 1 ); Node node2 = createRecordPathNode( 2 ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); return graph; } /** * <pre> * [1]--[2]--[3] * </pre> */ public Graph sequence_three(){ GraphImpl graph = new GraphImpl( "sequence_three", 1 ); Node node1 = createRecordPathNode( 1 ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); graph.addTransition( new TransitionImpl( node2, node3 ) ); return graph; } /** * <pre> * [AND]--[2] * </pre> */ public Graph split_one(){ GraphImpl graph = new GraphImpl( "split_one", 1 ); Node fork = new AndFork( 1 ); Node node2 = createRecordPathNode( 2 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); return graph; } /** * <pre> * +--[2] * [AND] * +--[3] * </pre> */ public Graph split_two(){ GraphImpl graph = new GraphImpl( "split_two", 1 ); Node fork = new AndFork( 1 ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); return graph; } /** * <pre> * +--[2] * [AND]--[3] * +--[4] * </pre> */ public Graph split_three(){ GraphImpl graph = new GraphImpl( "split_three", 1 ); Node fork = new AndFork( 1 ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); Node node4 = createRecordPathNode( 4 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addNode( node4 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( "1_4", fork, node4 ) ); return graph; } /** * <pre> * +--[3] * [1]--[AND] * +--[4] * </pre> */ public Graph split_two_pre(){ GraphImpl graph = new GraphImpl( "split_two_pre", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork = new AndFork( 2 ); Node node3 = createRecordPathNode( 3 ); Node node4 = createRecordPathNode( 4 ); graph.setStartNode( node1 ); graph.addNode( fork ); graph.addNode( node3 ); graph.addNode( node4 ); graph.addTransition( new TransitionImpl( node1, fork ) ); graph.addTransition( new TransitionImpl( "2_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( "2_4", fork, node4 ) ); return graph; } /** * <pre> * [AND]--[2]--[AND] * </pre> */ public Graph synchronzation_one(){ GraphImpl graph = new GraphImpl( "synchronzation_one", 1 ); Node fork = new AndFork( 1 ); Node node2 = createRecordPathNode( 2 ); Node join = new AndJoin( -1 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( join ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( node2, join ) ); return graph; } /** * <pre> * +--[2]--+ * [AND] [AND] * +--[3]--+ * </pre> */ public Graph synchronzation_two(){ GraphImpl graph = new GraphImpl( "synchronzation_two", 1 ); Node fork = new AndFork( 1 ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); Node join = new AndJoin( -1 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addNode( join ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( node2, join ) ); graph.addTransition( new TransitionImpl( node3, join ) ); return graph; } /** * <pre> * +--[2]--+ * [AND]--[3]--[AND] * +--[4]--+ * </pre> */ public Graph synchronzation_three(){ GraphImpl graph = new GraphImpl( "synchronzation_three", 1 ); Node fork = new AndFork( 1 ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); Node node4 = createRecordPathNode( 4 ); Node join = new AndJoin( -1 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addNode( node4 ); graph.addNode( join ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( "1_4", fork, node4 ) ); graph.addTransition( new TransitionImpl( node2, join ) ); graph.addTransition( new TransitionImpl( node3, join ) ); graph.addTransition( new TransitionImpl( node4, join ) ); return graph; } /** * <pre> * +-------+ * [AND] [AND] * +--[2]--+ * </pre> */ public Graph synchronzation_two_firstBranchEmpty(){ GraphImpl graph = new GraphImpl( "synchronzation_two_firstBranchEmpty", 1 ); Node fork = new AndFork( 1 ); Node node2 = createRecordPathNode( 2 ); Node join = new AndJoin( -1 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( join ); graph.addTransition( new TransitionImpl( "1_-1", fork, join ) ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( node2, join ) ); return graph; } /** * <pre> * +--[2]--+ * [AND] [AND] * +-------+ * </pre> */ public Graph synchronzation_two_secondBranchEmpty(){ GraphImpl graph = new GraphImpl( "synchronzation_two_secondBranchEmpty", 1 ); Node fork = new AndFork( 1 ); Node node2 = createRecordPathNode( 2 ); Node join = new AndJoin( -1 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( join ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_-1", fork, join ) ); graph.addTransition( new TransitionImpl( node2, join ) ); return graph; } /** * <pre> * +--+ * [AND] [AND] * +--+ * </pre> */ public Graph synchronzation_two_bothBranchesEmpty(){ GraphImpl graph = new GraphImpl( "synchronzation_two_bothBranchesEmpty", 1 ); Node fork = new AndFork( 1 ); Node join = new AndJoin( -1 ); graph.setStartNode( fork ); graph.addNode( join ); graph.addTransition( new TransitionImpl( "1_-1", fork, join ) ); graph.addTransition( new TransitionImpl( "1_-1_HACK", fork, join ) ); return graph; } /** * <pre> * +--[3]--+ * [1]--[AND] [AND]--[6] * +--[4]--+ * </pre> */ public Graph synchronzation_two_pre_post(){ GraphImpl graph = new GraphImpl( "synchronzation_two_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork = new AndFork( 2 ); Node node3 = createRecordPathNode( 3 ); Node node4 = createRecordPathNode( 4 ); Node join = new AndJoin( -2 ); Node node6 = createRecordPathNode( 6 ); graph.setStartNode( node1 ); graph.addNode( fork ); graph.addNode( node3 ); graph.addNode( node4 ); graph.addNode( join ); graph.addNode( node6 ); graph.addTransition( new TransitionImpl( node1, fork ) ); graph.addTransition( new TransitionImpl( "2_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( "2_4", fork, node4 ) ); graph.addTransition( new TransitionImpl( node3, join ) ); graph.addTransition( new TransitionImpl( node4, join ) ); graph.addTransition( new TransitionImpl( join, node6 ) ); return graph; } /** * <pre> * +-------+ * [1]--[AND] [AND]--[6] * +--[3]--+ * </pre> */ public Graph synchronization_firstBranchEmpty_pre_post(){ GraphImpl graph = new GraphImpl( "synchronization_firstBranchEmpty_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork = new AndFork( 2 ); Node node3 = createRecordPathNode( 3 ); Node join = new AndJoin( -2 ); Node node6 = createRecordPathNode( 6 ); graph.setStartNode( node1 ); graph.addNode( fork ); graph.addNode( node3 ); graph.addNode( join ); graph.addNode( node6 ); graph.addTransition( new TransitionImpl( node1, fork ) ); graph.addTransition( new TransitionImpl( "2_-2", fork, join ) ); graph.addTransition( new TransitionImpl( "2_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( node3, join ) ); graph.addTransition( new TransitionImpl( join, node6 ) ); return graph; } /** * <pre> * +--[3]--+ * [1]--[AND] [AND]--[6] * +-------+ * </pre> */ public Graph synchronization_secondBranchEmpty_pre_post(){ GraphImpl graph = new GraphImpl( "synchronization_secondBranchEmpty_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork = new AndFork( 2 ); Node node3 = createRecordPathNode( 3 ); Node join = new AndJoin( -2 ); Node node6 = createRecordPathNode( 6 ); graph.setStartNode( node1 ); graph.addNode( fork ); graph.addNode( node3 ); graph.addNode( join ); graph.addNode( node6 ); graph.addTransition( new TransitionImpl( node1, fork ) ); graph.addTransition( new TransitionImpl( "2_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( "2_-2", fork, join ) ); graph.addTransition( new TransitionImpl( node3, join ) ); graph.addTransition( new TransitionImpl( join, node6 ) ); return graph; } /** * <pre> * +--+ * [1]--[AND] [AND]--[4] * +--+ * </pre> */ public Graph synchronization_bothBranchesEmpty_pre_post(){ GraphImpl graph = new GraphImpl( "synchronization_bothBranchesEmpty_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork = new AndFork( 2 ); Node join = new AndJoin( -2 ); Node node4 = createRecordPathNode( 4 ); graph.setStartNode( node1 ); graph.addNode( fork ); graph.addNode( join ); graph.addNode( node4 ); graph.addTransition( new TransitionImpl( node1, fork ) ); graph.addTransition( new TransitionImpl( "2_-2", fork, join ) ); graph.addTransition( new TransitionImpl( "2_-2_HACK", fork, join ) ); graph.addTransition( new TransitionImpl( join, node4 ) ); return graph; } /** * <pre> * [XOR]-(condition_1)-[2] * </pre> */ public Graph exclusivechoice_one(){ GraphImpl graph = new GraphImpl( "exclusivechoice_one", 1 ); XorFork fork = new XorFork( 1 ); fork.addCondition( createAttributeEqualsCondition( VALUE1 ), "1_2" ); Node node2 = createRecordPathNode( 2 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); return graph; } /** * <pre> * +-(condition_1)-[2] * [XOR] * +-(condition_2)-[3] * </pre> */ public Graph exclusivechoice_two(){ GraphImpl graph = new GraphImpl( "exclusivechoice_two", 1 ); XorFork fork = new XorFork( 1 ); fork.addCondition( createAttributeEqualsCondition( VALUE1 ), "1_2" ); fork.addCondition( createAttributeEqualsCondition( VALUE2 ), "1_3" ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); return graph; } /** * <pre> * +-(${condition_1})-[2] * [XOR] * +-(${condition_2})-[3] * </pre> */ public Graph exclusivechoice_two_expressionlanguage(){ GraphImpl graph = new GraphImpl( "exclusivechoice_two_expressionlanguage", 1 ); XorFork fork = new XorFork( 1 ); fork.addCondition( new ExpressionLanguageCondition( "conditionAttribute == 'value1' && 2 > 1" ), "1_2" ); fork.addCondition( new ExpressionLanguageCondition( "conditionAttribute == 'value2' && 5 == 5" ), "1_3" ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); return graph; } /** * <pre> * [XOR]-(default)-[2] * </pre> */ public Graph exclusivechoice_default(){ GraphImpl graph = new GraphImpl( "exclusivechoice_default", 1 ); XorFork fork = new XorFork( 1 ); fork.addCondition( null, "1_2" ); Node node2 = createRecordPathNode( 2 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); return graph; } /** * <pre> * +-(condition_1)-[2] * [XOR] * +---(default)---[3] * </pre> */ public Graph exclusivechoice_one_default(){ GraphImpl graph = new GraphImpl( "exclusivechoice_one_default", 1 ); XorFork fork = new XorFork( 1 ); fork.addCondition( createAttributeEqualsCondition( VALUE1 ), "1_2" ); fork.addCondition( null, "1_3" ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); return graph; } /** * <pre> * +-(condition_1)-[2] * [XOR] * +-(condition_1)-[3] * </pre> */ public Graph exclusivechoice_twoConditionsTrue(){ GraphImpl graph = new GraphImpl( "exclusivechoice_twoConditionsTrue", 1 ); XorFork fork = new XorFork( 1 ); fork.addCondition( createAttributeEqualsCondition( VALUE1 ), "1_2" ); fork.addCondition( createAttributeEqualsCondition( VALUE1 ), "1_3" ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); return graph; } /** * <pre> * [XOR]-(default)-[2]--[XOR] * </pre> */ public Graph simplemerge_one(){ GraphImpl graph = new GraphImpl( "simplemerge_one", 1 ); XorFork fork = new XorFork( 1 ); fork.addCondition( null, "1_2" ); Node node2 = createRecordPathNode( 2 ); Node join = new XorJoin( -1 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( join ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( node2, join ) ); return graph; } /** * <pre> * [XOR]-(default)-[2]--[XOR]--[4] * </pre> */ public Graph simplemerge_one_post(){ GraphImpl graph = new GraphImpl( "simplemerge_one_post", 1 ); XorFork fork = new XorFork( 1 ); fork.addCondition( null, "1_2" ); Node node2 = createRecordPathNode( 2 ); Node join = new XorJoin( -1 ); Node node4 = createRecordPathNode( 4 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( join ); graph.addNode( node4 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( node2, join ) ); graph.addTransition( new TransitionImpl( join, node4 ) ); return graph; } /** * <pre> * +-(condition_1)-[2]--+ * [XOR] [XOR]--[5] * +---(default)---[3]--+ * </pre> */ public Graph simplemerge_two(){ GraphImpl graph = new GraphImpl( "simplemerge_two", 1 ); XorFork fork = new XorFork( 1 ); fork.addCondition( new ExpressionLanguageCondition( "conditionAttribute == 'value1'" ), "1_2" ); fork.addCondition( null, "1_3" ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); Node join = new XorJoin( -1 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addNode( join ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( node2, join ) ); graph.addTransition( new TransitionImpl( node3, join ) ); return graph; } /** * <pre> * +-(condition_1)-[2]--+ * [XOR] [XOR]--[5] * +---(default)---[3]--+ * </pre> */ public Graph simplemerge_two_post(){ GraphImpl graph = new GraphImpl( "simplemerge_two_post", 1 ); XorFork fork = new XorFork( 1 ); fork.addCondition( new ExpressionLanguageCondition( "conditionAttribute == 'value1'" ), "1_2" ); fork.addCondition( null, "1_3" ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); Node join = new XorJoin( -1 ); Node node5 = createRecordPathNode( 5 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addNode( join ); graph.addNode( node5 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( node2, join ) ); graph.addTransition( new TransitionImpl( node3, join ) ); graph.addTransition( new TransitionImpl( join, node5 ) ); return graph; } /** * <pre> * [OR]-(condition_1)-[2] * </pre> */ public Graph multiplechoice_one(){ GraphImpl graph = new GraphImpl( "multiplechoice_one", 1 ); OrFork fork = new OrFork( 1 ); fork.addCondition( createAttributeEqualsCondition( VALUE1 ), "1_2" ); Node node2 = createRecordPathNode( 2 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); return graph; } /** * <pre> * +-(condition_1)-[2] * [OR] * +-(condition_2)-[3] * </pre> */ public Graph multiplechoice_two(){ GraphImpl graph = new GraphImpl( "multiplechoice_two", 1 ); OrFork fork = new OrFork( 1 ); fork.addCondition( createAttributeEqualsCondition( VALUE1 ), "1_2" ); fork.addCondition( createAttributeEqualsCondition( VALUE2 ), "1_3" ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); return graph; } /** * <pre> * [OR]-(default)-[2] * </pre> */ public Graph multiplechoice_default(){ GraphImpl graph = new GraphImpl( "multiplechoice_default", 1 ); OrFork fork = new OrFork( 1 ); fork.addCondition( null, "1_2" ); Node node2 = createRecordPathNode( 2 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); return graph; } /** * <pre> * +-(condition_1)-[2] * [OR] * +---(default)---[3] * </pre> */ public Graph multiplechoice_one_default(){ GraphImpl graph = new GraphImpl( "multiplechoice_one_default", 1 ); OrFork fork = new OrFork( 1 ); fork.addCondition( createAttributeEqualsCondition( VALUE1 ), "1_2" ); fork.addCondition( null, "1_3" ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); return graph; } /** * <pre> * +-(condition_1)-[2] * [OR] * +-(condition_1)-[3] * </pre> */ public Graph multiplechoice_twoConditionsTrue(){ GraphImpl graph = new GraphImpl( "multiplechoice_twoConditionsTrue", 1 ); OrFork fork = new OrFork( 1 ); fork.addCondition( createAttributeEqualsCondition( VALUE1 ), "1_2" ); fork.addCondition( createAttributeEqualsCondition( VALUE1 ), "1_3" ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); return graph; } /** * <pre> * [AND]--[2]--[CD] * </pre> */ public Graph cancelling_discriminator_one(){ GraphImpl graph = new GraphImpl( "cancelling_discriminator_one", 1 ); Node fork = new AndFork( 1 ); Node node2 = createRecordPathNode( 2 ); Node join = new CancellingDiscriminator( -1 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( join ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( node2, join ) ); return graph; } /** * <pre> * [AND]--[2]--[CD]--[4] * </pre> */ public Graph cancelling_discriminator_one_post(){ GraphImpl graph = new GraphImpl( "cancelling_discriminator_one_post", 1 ); Node fork = new AndFork( 1 ); Node node2 = createRecordPathNode( 2 ); Node join = new CancellingDiscriminator( -1 ); Node node4 = createRecordPathNode( 4 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( join ); graph.addNode( node4 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( node2, join ) ); graph.addTransition( new TransitionImpl( join, node4 ) ); return graph; } /** * <pre> * +--[2]--+ * [AND] [CD] * +--[3]--+ * </pre> */ public Graph cancelling_discriminator_two(){ GraphImpl graph = new GraphImpl( "cancelling_discriminator_two", 1 ); Node fork = new AndFork( 1 ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); Node join = new CancellingDiscriminator( -1 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addNode( join ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( node2, join ) ); graph.addTransition( new TransitionImpl( node3, join ) ); return graph; } /** * <pre> * +-------+ * [AND] [CD] * +--[2]--+ * </pre> */ public Graph cancelling_discriminator_two_firstBranchEmpty(){ GraphImpl graph = new GraphImpl( "cancelling_discriminator_two_firstBranchEmpty", 1 ); Node fork = new AndFork( 1 ); Node node2 = createRecordPathNode( 2 ); Node join = new CancellingDiscriminator( -1 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( join ); graph.addTransition( new TransitionImpl( "1_-1", fork, join ) ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( node2, join ) ); return graph; } /** * <pre> * +--[2]--+ * [AND] [CD] * +-------+ * </pre> */ public Graph cancelling_discriminator_two_secondBranchEmpty(){ GraphImpl graph = new GraphImpl( "cancelling_discriminator_two_secondBranchEmpty", 1 ); Node fork = new AndFork( 1 ); Node node2 = createRecordPathNode( 2 ); Node join = new CancellingDiscriminator( -1 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( join ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_-1", fork, join ) ); graph.addTransition( new TransitionImpl( node2, join ) ); return graph; } /** * <pre> * +--[3]--+ * [1]--[AND] [CD]--[6] * +--[4]--+ * </pre> */ public Graph cancelling_discriminator_two_pre_post(){ GraphImpl graph = new GraphImpl( "cancelling_discriminator_two_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork = new AndFork( 2 ); Node node3 = createRecordPathNode( 3 ); Node node4 = createRecordPathNode( 4 ); Node join = new CancellingDiscriminator( -2 ); Node node6 = createRecordPathNode( 6 ); graph.setStartNode( node1 ); graph.addNode( fork ); graph.addNode( node3 ); graph.addNode( node4 ); graph.addNode( join ); graph.addNode( node6 ); graph.addTransition( new TransitionImpl( node1, fork ) ); graph.addTransition( new TransitionImpl( "2_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( "2_4", fork, node4 ) ); graph.addTransition( new TransitionImpl( node3, join ) ); graph.addTransition( new TransitionImpl( node4, join ) ); graph.addTransition( new TransitionImpl( join, node6 ) ); return graph; } /** * <pre> * +-------+ * [1]--[AND] [CD]--[5] * +--[3]--+ * </pre> */ public Graph cancelling_discriminator_two_firstBranchEmpty_pre_post(){ GraphImpl graph = new GraphImpl( "cancelling_discriminator_two_firstBranchEmpty_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork = new AndFork( 2 ); Node node3 = createRecordPathNode( 3 ); Node join = new CancellingDiscriminator( -2 ); Node node5 = createRecordPathNode( 5 ); graph.setStartNode( node1 ); graph.addNode( fork ); graph.addNode( node3 ); graph.addNode( join ); graph.addNode( node5 ); graph.addTransition( new TransitionImpl( node1, fork ) ); graph.addTransition( new TransitionImpl( "2_-2", fork, join ) ); graph.addTransition( new TransitionImpl( "2_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( node3, join ) ); graph.addTransition( new TransitionImpl( join, node5 ) ); return graph; } /** * <pre> * +--[3]--+ * [1]--[AND] [CD]--[6] * +-------+ * </pre> */ public Graph cancelling_discriminator_two_secondBranchEmpty_pre_post(){ GraphImpl graph = new GraphImpl( "cancelling_discriminator_two_secondBranchEmpty_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork = new AndFork( 2 ); Node node3 = createRecordPathNode( 3 ); Node join = new CancellingDiscriminator( -2 ); Node node6 = createRecordPathNode( 6 ); graph.setStartNode( node1 ); graph.addNode( fork ); graph.addNode( node3 ); graph.addNode( join ); graph.addNode( node6 ); graph.addTransition( new TransitionImpl( node1, fork ) ); graph.addTransition( new TransitionImpl( "2_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( "2_-2", fork, join ) ); graph.addTransition( new TransitionImpl( node3, join ) ); graph.addTransition( new TransitionImpl( join, node6 ) ); return graph; } /** * <pre> * +--[3]--+ +--[8]--+ * [1]--[AND] [CD]--[6]--[AND] [CD]--[11] * +--[4]--+ +--[9]--+ * </pre> */ public Graph cancelling_discriminator_twice(){ GraphImpl graph = new GraphImpl( "cancelling_discriminator_twice", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork1 = new AndFork( 2 ); Node node3 = createRecordPathNode( 3 ); Node node4 = createRecordPathNode( 4 ); Node join1 = new CancellingDiscriminator( -2 ); Node node6 = createRecordPathNode( 6 ); Node fork2 = new AndFork( 7 ); Node node8 = createRecordPathNode( 8 ); Node node9 = createRecordPathNode( 9 ); Node join2 = new CancellingDiscriminator( -7 ); Node node11 = createRecordPathNode( 11 ); graph.setStartNode( node1 ); graph.addNode( fork1 ); graph.addNode( node3 ); graph.addNode( node4 ); graph.addNode( join1 ); graph.addNode( node6 ); graph.addNode( fork2 ); graph.addNode( node8 ); graph.addNode( node9 ); graph.addNode( join2 ); graph.addNode( node11 ); graph.addTransition( new TransitionImpl( node1, fork1 ) ); graph.addTransition( new TransitionImpl( "2_3", fork1, node3 ) ); graph.addTransition( new TransitionImpl( "2_4", fork1, node4 ) ); graph.addTransition( new TransitionImpl( node3, join1 ) ); graph.addTransition( new TransitionImpl( node4, join1 ) ); graph.addTransition( new TransitionImpl( join1, node6 ) ); graph.addTransition( new TransitionImpl( node6, fork2 ) ); graph.addTransition( new TransitionImpl( "7_8", fork2, node8 ) ); graph.addTransition( new TransitionImpl( "7_9", fork2, node9 ) ); graph.addTransition( new TransitionImpl( node8, join2 ) ); graph.addTransition( new TransitionImpl( node9, join2 ) ); graph.addTransition( new TransitionImpl( join2, node11 ) ); return graph; } /** * <pre> * +--[signal(1)]--+ * +--[3]--[AND] [CD]--[8]---+ * | +--[signal(2)]--+ | * | | * [1]--[AND] [CD]--[16] * | | * | +--[signal(3)]--+ | * +--[9]--[AND] [CD]--[14]--+ * +--[signal(4)]--+ * </pre> */ public Graph cancelling_discriminator_and_nested(){ GraphImpl graph = new GraphImpl( "cancelling_discriminator_and_nested", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork1 = new AndFork( 2 ); Node node3 = createRecordPathNode( 3 ); Node fork2 = new AndFork( 4 ); Node node5 = new CatchSignal( 5, "1" ); Node node6 = new CatchSignal( 6, "2" ); Node join1 = new CancellingDiscriminator( -4 ); Node node8 = createRecordPathNode( 8 ); Node node9 = createRecordPathNode( 9 ); Node fork3 = new AndFork( 10 ); Node node11 = new CatchSignal( 11, "3" ); Node node12 = new CatchSignal( 12, "4" ); Node join2 = new CancellingDiscriminator( -10 ); Node node14 = createRecordPathNode( 14 ); Node join3 = new CancellingDiscriminator( -2 ); Node node16 = createRecordPathNode( 16 ); graph.setStartNode( node1 ); graph.addNode( fork1 ); graph.addNode( node3 ); graph.addNode( fork2 ); graph.addNode( node5 ); graph.addNode( node6 ); graph.addNode( join1 ); graph.addNode( node8 ); graph.addNode( node9 ); graph.addNode( fork3 ); graph.addNode( node11 ); graph.addNode( node12 ); graph.addNode( join2 ); graph.addNode( node14 ); graph.addNode( join3 ); graph.addNode( node16 ); graph.addTransition( new TransitionImpl( node1, fork1 ) ); graph.addTransition( new TransitionImpl( "2_3", fork1, node3 ) ); graph.addTransition( new TransitionImpl( "2_9", fork1, node9 ) ); graph.addTransition( new TransitionImpl( node3, fork2 ) ); graph.addTransition( new TransitionImpl( "4_5", fork2, node5 ) ); graph.addTransition( new TransitionImpl( "4_6", fork2, node6 ) ); graph.addTransition( new TransitionImpl( node5, join1 ) ); graph.addTransition( new TransitionImpl( node6, join1 ) ); graph.addTransition( new TransitionImpl( join1, node8 ) ); graph.addTransition( new TransitionImpl( node8, join3 ) ); graph.addTransition( new TransitionImpl( node9, fork3 ) ); graph.addTransition( new TransitionImpl( "10_11", fork3, node11 ) ); graph.addTransition( new TransitionImpl( "10_12", fork3, node12 ) ); graph.addTransition( new TransitionImpl( node11, join2 ) ); graph.addTransition( new TransitionImpl( node12, join2 ) ); graph.addTransition( new TransitionImpl( join2, node14 ) ); graph.addTransition( new TransitionImpl( node14, join3 ) ); graph.addTransition( new TransitionImpl( join3, node16 ) ); return graph; } /** * <pre> * +-(condition_1)-[signal(1)]--+ * +--[3]--[OR] [CD]--[8]---+ * | +-(condition_2)-[signal(2)]--+ | * | | * [1]--[AND] [CD]--[16] * | | * | +-(condition_3)-[signal(3)]--+ | * +--[9]--[OR] [CD]--[14]--+ * +-(condition_4)-[signal(4)]--+ * </pre> */ public Graph cancelling_discriminator_or_nested(){ GraphImpl graph = new GraphImpl( "cancelling_discriminator_or_nested", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork1 = new AndFork( 2 ); Node node3 = createRecordPathNode( 3 ); OrFork fork2 = new OrFork( 4 ); fork2.addCondition( new ExpressionLanguageCondition( "true" ), "4_5" ); fork2.addCondition( new ExpressionLanguageCondition( "true" ), "4_6" ); Node node5 = new CatchSignal( 5, "1" ); Node node6 = new CatchSignal( 6, "2" ); Node join1 = new CancellingDiscriminator( -4 ); Node node8 = createRecordPathNode( 8 ); Node node9 = createRecordPathNode( 9 ); OrFork fork3 = new OrFork( 10 ); fork3.addCondition( new ExpressionLanguageCondition( "true" ), "10_11" ); fork3.addCondition( new ExpressionLanguageCondition( "true" ), "10_12" ); Node node11 = new CatchSignal( 11, "3" ); Node node12 = new CatchSignal( 12, "4" ); Node join2 = new CancellingDiscriminator( -10 ); Node node14 = createRecordPathNode( 14 ); Node join3 = new CancellingDiscriminator( -2 ); Node node16 = createRecordPathNode( 16 ); graph.setStartNode( node1 ); graph.addNode( fork1 ); graph.addNode( node3 ); graph.addNode( fork2 ); graph.addNode( node5 ); graph.addNode( node6 ); graph.addNode( join1 ); graph.addNode( node8 ); graph.addNode( node9 ); graph.addNode( fork3 ); graph.addNode( node11 ); graph.addNode( node12 ); graph.addNode( join2 ); graph.addNode( node14 ); graph.addNode( join3 ); graph.addNode( node16 ); graph.addTransition( new TransitionImpl( node1, fork1 ) ); graph.addTransition( new TransitionImpl( "2_3", fork1, node3 ) ); graph.addTransition( new TransitionImpl( "2_9", fork1, node9 ) ); graph.addTransition( new TransitionImpl( node3, fork2 ) ); graph.addTransition( new TransitionImpl( "4_5", fork2, node5 ) ); graph.addTransition( new TransitionImpl( "4_6", fork2, node6 ) ); graph.addTransition( new TransitionImpl( node5, join1 ) ); graph.addTransition( new TransitionImpl( node6, join1 ) ); graph.addTransition( new TransitionImpl( join1, node8 ) ); graph.addTransition( new TransitionImpl( node8, join3 ) ); graph.addTransition( new TransitionImpl( node9, fork3 ) ); graph.addTransition( new TransitionImpl( "10_11", fork3, node11 ) ); graph.addTransition( new TransitionImpl( "10_12", fork3, node12 ) ); graph.addTransition( new TransitionImpl( node11, join2 ) ); graph.addTransition( new TransitionImpl( node12, join2 ) ); graph.addTransition( new TransitionImpl( join2, node14 ) ); graph.addTransition( new TransitionImpl( node14, join3 ) ); graph.addTransition( new TransitionImpl( join3, node16 ) ); return graph; } /** * <pre> * [1]--[XOR] * | |(ExecutionCountCondition) * +--<--+ * </pre> */ public Graph loop_one( int executionCount ){ GraphImpl graph = new GraphImpl( "loop_one", 1 ); Node node100 = new SetAttributeActivity( 100, "executionCount", 0 ); XorJoin join = new XorJoin( -2 ); Node node101 = new SetAttributeActivity( 101, "executionCount", "${executionCount + 1}" ); Node node1 = createRecordPathNode( 1 ); XorFork fork = new XorFork( 2 ); fork.addCondition( new ExpressionLanguageCondition( "executionCount < " + executionCount ), "2_-2" ); graph.setStartNode( node100 ); graph.addNode( join ); graph.addNode( node101 ); graph.addNode( node1 ); graph.addNode( fork ); graph.addTransition( new TransitionImpl( node100, join ) ); graph.addTransition( new TransitionImpl( join, node101 ) ); graph.addTransition( new TransitionImpl( node101, node1 ) ); graph.addTransition( new TransitionImpl( node1, fork ) ); graph.addTransition( new TransitionImpl( "2_-2", fork, join ) ); return graph; } /** * [100]--[XOR(-2)]--[SetAttribute(101)]--[1]--[XOR(2)]--[3] * | |(ExecutionCountCondition) * +-----------------<------------------+ */ public Graph loop_one_special( int executionCount ){ GraphImpl graph = new GraphImpl( "loop_one_special", 1 ); Node node100 = new SetAttributeActivity( 100, "executionCount", 0 ); XorJoin join = new XorJoin( -2 ); Node node101 = new SetAttributeActivity( 101, "executionCount", "${executionCount + 1}" ); Node node1 = createRecordPathNode( 1 ); XorFork fork = new XorFork( 2 ); fork.addCondition( new ExpressionLanguageCondition( "executionCount < " + executionCount ), "2_-2" ); fork.addCondition( null, "2_3" ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( node100 ); graph.addNode( join ); graph.addNode( node101 ); graph.addNode( node1 ); graph.addNode( fork ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( node100, join ) ); graph.addTransition( new TransitionImpl( join, node101 ) ); graph.addTransition( new TransitionImpl( node101, node1 ) ); graph.addTransition( new TransitionImpl( node1, fork ) ); graph.addTransition( new TransitionImpl( "2_-2", fork, join ) ); graph.addTransition( new TransitionImpl( "2_3", fork, node3 ) ); return graph; } /** * [100]--[XOR(-3)]--[SetAttribute(101)]--[1]--[2]--[XOR(3)] * | |(ExecutionCountCondition) * +-----------------<-----------------------+ */ public Graph loop_two( int executionCount ){ GraphImpl graph = new GraphImpl( "loop_two", 1 ); Node node100 = new SetAttributeActivity( 100, "executionCount", 0 ); XorJoin join = new XorJoin( -3 ); Node node101 = new SetAttributeActivity( 101, "executionCount", "${executionCount + 1}" ); Node node1 = createRecordPathNode( 1 ); Node node2 = createRecordPathNode( 2 ); XorFork fork = new XorFork( 3 ); fork.addCondition( new ExpressionLanguageCondition( "executionCount < " + executionCount ), "3_-3" ); graph.setStartNode( node100 ); graph.addNode( join ); graph.addNode( node101 ); graph.addNode( node1 ); graph.addNode( node2 ); graph.addNode( fork ); graph.addTransition( new TransitionImpl( node100, join ) ); graph.addTransition( new TransitionImpl( join, node101 ) ); graph.addTransition( new TransitionImpl( node101, node1 ) ); graph.addTransition( new TransitionImpl( node1, node2 ) ); graph.addTransition( new TransitionImpl( node2, fork ) ); graph.addTransition( new TransitionImpl( "3_-3", fork, join ) ); return graph; } /** * +--[SetAttribute(101)]--[3]--[XOR(-2)] * | | * [1]--[SetAttribute(100)]--[XOR(2)]-------------<-----------+ * |(ExecutionCountCondition) * +--[4] */ public Graph loop_while( int executionCount ){ GraphImpl graph = new GraphImpl( "loop_while", 1 ); Node node1 = createRecordPathNode( 1 ); Node node100 = new SetAttributeActivity( 100, "executionCount", 0 ); XorFork fork = new XorFork( 2 ); fork.addCondition( new ExpressionLanguageCondition( "executionCount < " + executionCount ), "2_101" ); fork.addCondition( null, "2_4" ); Node node101 = new SetAttributeActivity( 101, "executionCount", "${executionCount + 1}" ); Node node3 = createRecordPathNode( 3 ); XorJoin join = new XorJoin( -2 ); Node node4 = createRecordPathNode( 4 ); graph.setStartNode( node1 ); graph.addNode( node100 ); graph.addNode( fork ); graph.addNode( node101 ); graph.addNode( node3 ); graph.addNode( join ); graph.addNode( node4 ); graph.addTransition( new TransitionImpl( node1, node100 ) ); graph.addTransition( new TransitionImpl( node100, fork ) ); graph.addTransition( new TransitionImpl( "2_101", fork, node101 ) ); graph.addTransition( new TransitionImpl( node101, node3 ) ); graph.addTransition( new TransitionImpl( node3, join ) ); graph.addTransition( new TransitionImpl( "2_4", fork, node4 ) ); graph.addTransition( new TransitionImpl( join, fork ) ); return graph; } /** * <pre> * +--[3]--+ * [1]--[AND] [AND]--[6]--[XOR] * | +--[4]--+ |(ExecutionCountCondition) * +--------------<--------------+ * </pre> */ public Graph loop_andForkJoin_twoThreads_before_after( int executionCount ){ GraphImpl graph = new GraphImpl( "loop_andForkJoin_twoThreads_before_after", 1 ); Node node100 = new SetAttributeActivity( 100, "executionCount", 0 ); XorJoin join2 = new XorJoin( -7 ); Node node101 = new SetAttributeActivity( 101, "executionCount", "${executionCount + 1}" ); Node node1 = createRecordPathNode( 1 ); Node fork1 = new AndFork( 2 ); Node node3 = createRecordPathNode( 3 ); Node node4 = createRecordPathNode( 4 ); Node join1 = new AndJoin( -2 ); Node node6 = createRecordPathNode( 6 ); XorFork fork2 = new XorFork( 7 ); fork2.addCondition( new ExpressionLanguageCondition( "executionCount < " + executionCount ), "7_-7" ); graph.setStartNode( node100 ); graph.addNode( join2 ); graph.addNode( node101 ); graph.addNode( node1 ); graph.addNode( fork1 ); graph.addNode( node3 ); graph.addNode( node4 ); graph.addNode( join1 ); graph.addNode( node6 ); graph.addNode( fork2 ); graph.addTransition( new TransitionImpl( node100, join2 ) ); graph.addTransition( new TransitionImpl( join2, node101 ) ); graph.addTransition( new TransitionImpl( node101, node1 ) ); graph.addTransition( new TransitionImpl( node1, fork1 ) ); graph.addTransition( new TransitionImpl( "2_3", fork1, node3 ) ); graph.addTransition( new TransitionImpl( "2_4", fork1, node4 ) ); graph.addTransition( new TransitionImpl( node3, join1 ) ); graph.addTransition( new TransitionImpl( node4, join1 ) ); graph.addTransition( new TransitionImpl( join1, node6 ) ); graph.addTransition( new TransitionImpl( node6, fork2 ) ); graph.addTransition( new TransitionImpl( "7_-7", fork2, join2 ) ); return graph; } /** * <pre> * +--[3]--+ +--[8]--+ * [1]--[AND] [CD]--[6]--[AND] [CD]--[11]--[XOR] * | +--[4]--+ +--[9]--+ |(ExecutionCountCondition) * +----------------------<-----------------------------+ * </pre> */ public Graph loop_cancelling_discriminator_twice( int executionCount ){ GraphImpl graph = new GraphImpl( "loop_cancelling_discriminator_twice", 1 ); Node node100 = new SetAttributeActivity( 100, "executionCount", 0 ); XorJoin join3 = new XorJoin( -12 ); Node node101 = new SetAttributeActivity( 101, "executionCount", "${executionCount + 1}" ); Node node1 = createRecordPathNode( 1 ); Node fork1 = new AndFork( 2 ); Node node3 = createRecordPathNode( 3 ); Node node4 = createRecordPathNode( 4 ); Node join1 = new CancellingDiscriminator( -2 ); Node node6 = createRecordPathNode( 6 ); Node fork2 = new AndFork( 7 ); Node node8 = createRecordPathNode( 8 ); Node node9 = createRecordPathNode( 9 ); Node join2 = new CancellingDiscriminator( -7 ); Node node11 = createRecordPathNode( 11 ); XorFork fork3 = new XorFork( 12 ); fork3.addCondition( new ExpressionLanguageCondition( "executionCount < " + executionCount ), "12_-12" ); graph.setStartNode( node100 ); graph.addNode( join3 ); graph.addNode( node101 ); graph.addNode( node1 ); graph.addNode( fork1 ); graph.addNode( node3 ); graph.addNode( node4 ); graph.addNode( join1 ); graph.addNode( node6 ); graph.addNode( fork2 ); graph.addNode( node8 ); graph.addNode( node9 ); graph.addNode( join2 ); graph.addNode( node11 ); graph.addNode( fork3 ); graph.addTransition( new TransitionImpl( node100, join3 ) ); graph.addTransition( new TransitionImpl( join3, node101 ) ); graph.addTransition( new TransitionImpl( node101, node1 ) ); graph.addTransition( new TransitionImpl( node1, fork1 ) ); graph.addTransition( new TransitionImpl( "2_3", fork1, node3 ) ); graph.addTransition( new TransitionImpl( "2_4", fork1, node4 ) ); graph.addTransition( new TransitionImpl( node3, join1 ) ); graph.addTransition( new TransitionImpl( node4, join1 ) ); graph.addTransition( new TransitionImpl( join1, node6 ) ); graph.addTransition( new TransitionImpl( node6, fork2 ) ); graph.addTransition( new TransitionImpl( "7_8", fork2, node8 ) ); graph.addTransition( new TransitionImpl( "7_9", fork2, node9 ) ); graph.addTransition( new TransitionImpl( node8, join2 ) ); graph.addTransition( new TransitionImpl( node9, join2 ) ); graph.addTransition( new TransitionImpl( join2, node11 ) ); graph.addTransition( new TransitionImpl( node11, fork3 ) ); graph.addTransition( new TransitionImpl( "12_-12", fork3, join3 ) ); return graph; } /** * <pre> * [signal(go)] * </pre> */ public Graph signal_one(){ GraphImpl graph = new GraphImpl( "signal_one", 1 ); Node node1 = new CatchSignal( 1, SIGNAL ); graph.setStartNode( node1 ); return graph; } /** * <pre> * [signal(go)] * </pre> */ public Graph signal_one_special( OutputMapping resultMapping ){ GraphImpl graph = new GraphImpl( "signal_one_special", 1 ); Node node1 = new CatchSignal( 1, SIGNAL, resultMapping ); graph.setStartNode( node1 ); return graph; } /** * <pre> * [1]--[signal(go)]--[3] * </pre> */ public Graph signal_one_pre_post(){ GraphImpl graph = new GraphImpl( "signal_one_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); Node node2 = new CatchSignal( 2, SIGNAL, new ValueMapping( RESULT_KEY ) ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); graph.addTransition( new TransitionImpl( node2, node3 ) ); return graph; } /** * <pre> * [signal(go)]--[signal(go)] * </pre> */ public Graph signal_two(){ GraphImpl graph = new GraphImpl( "signal_two", 1 ); Node node1 = new CatchSignal( 1, SIGNAL, new ValueMapping( RESULT_KEY ) ); Node node2 = new CatchSignal( 2, SIGNAL, new ValueMapping( RESULT_KEY ) ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); return graph; } /** * <pre> * +--[signal(go)]--+ * [AND] [AND] * +--[signal(go)]--+ * </pre> */ public Graph signal_andJoin(){ GraphImpl graph = new GraphImpl( "signal_andJoin", 1 ); Node fork = new AndFork( 1 ); Node node2 = new CatchSignal( 2, SIGNAL, new ValueMapping( RESULT_KEY ) ); Node node3 = new CatchSignal( 3, SIGNAL, new ValueMapping( RESULT_KEY ) ); Node join = new AndJoin( -1 ); graph.setStartNode( fork ); graph.addNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addNode( join ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( node2, join ) ); graph.addTransition( new TransitionImpl( node3, join ) ); return graph; } /** * <pre> * +--[signal(go)]--+ * [AND] [AND] * +--[signal(go)]--+ * </pre> */ public Graph signal_cancellingDiscriminator(){ GraphImpl graph = new GraphImpl( "signal_cancellingDiscriminator", 1 ); Node fork = new AndFork( 1 ); Node node2 = new CatchSignal( 2, SIGNAL, new ValueMapping( RESULT_KEY ) ); Node node3 = new CatchSignal( 3, SIGNAL, new ValueMapping( RESULT_KEY ) ); Node join = new CancellingDiscriminator( -1 ); graph.setStartNode( fork ); graph.addNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addNode( join ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); graph.addTransition( new TransitionImpl( "1_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( node2, join ) ); graph.addTransition( new TransitionImpl( node3, join ) ); return graph; } /** * <pre> * +--[signal(go)]--+ * [1]--[AND] [AND]--[6] * +--[signal(go)]--+ * </pre> */ public Graph signal_parallel_pre_post(){ GraphImpl graph = new GraphImpl( "signal_parallel_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork = new AndFork( 2 ); Node node3 = new CatchSignal( 3, SIGNAL ); Node node4 = new CatchSignal( 4, SIGNAL ); Node join = new AndJoin( -2 ); Node node6 = createRecordPathNode( 6 ); graph.setStartNode( node1 ); graph.addNode( fork ); graph.addNode( node3 ); graph.addNode( node4 ); graph.addNode( join ); graph.addNode( node6 ); graph.addTransition( new TransitionImpl( node1, fork ) ); graph.addTransition( new TransitionImpl( "2_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( "2_4", fork, node4 ) ); graph.addTransition( new TransitionImpl( node3, join ) ); graph.addTransition( new TransitionImpl( node4, join ) ); graph.addTransition( new TransitionImpl( join, node6 ) ); return graph; } /** * <pre> * [timer(60s)] * </pre> */ public Graph timer_one(){ GraphImpl graph = new GraphImpl( "timer_one", 1 ); Node node1 = new CatchTimer( 1, TIMER_MS ); graph.setStartNode( node1 ); return graph; } /** * <pre> * [1]--[timer(60s)]--[3] * </pre> */ public Graph timer_one_pre_post(){ GraphImpl graph = new GraphImpl( "timer_one_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); Node node2 = new CatchTimer( 2, TIMER_MS ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); graph.addTransition( new TransitionImpl( node2, node3 ) ); return graph; } /** * <pre> * [timer(60s)]--[timer(60s)] * </pre> */ public Graph timer_two(){ GraphImpl graph = new GraphImpl( "timer_two", 1 ); Node node1 = new CatchTimer( 1, TIMER_MS ); Node node2 = new CatchTimer( 2, TIMER_MS ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); return graph; } /** * <pre> * +--[timer(60s)]--+ * [1]--[AND] [AND]--[6] * +--[timer(60s)]--+ * </pre> */ public Graph timer_parallel_pre_post(){ GraphImpl graph = new GraphImpl( "timer_parallel_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork = new AndFork( 2 ); Node node3 = new CatchTimer( 3, TIMER_MS ); Node node4 = new CatchTimer( 4, TIMER_MS ); Node join = new AndJoin( -2 ); Node node6 = createRecordPathNode( 6 ); graph.setStartNode( node1 ); graph.addNode( fork ); graph.addNode( node3 ); graph.addNode( node4 ); graph.addNode( join ); graph.addNode( node6 ); graph.addTransition( new TransitionImpl( node1, fork ) ); graph.addTransition( new TransitionImpl( "2_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( "2_4", fork, node4 ) ); graph.addTransition( new TransitionImpl( node3, join ) ); graph.addTransition( new TransitionImpl( node4, join ) ); graph.addTransition( new TransitionImpl( join, node6 ) ); return graph; } /** * <pre> * +--[signal(invoice)]--[escalation]--[5]---+ * [1]--[AND]--[signal(payment)]--[escalation]--[8]---[AND]--[13] * +--[signal(unknown)]--[escalation]--[11]--+ * </pre> */ public Graph escalation_three(){ GraphImpl graph = new GraphImpl( "escalation_three", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork = new AndFork( 2 ); Node node3 = new CatchSignal( 3, "invoice" ); Node node4 = new ThrowEscalation( 4 ); Node node5 = createRecordPathNode( 5 ); Node node6 = new CatchSignal( 6, "payment" ); Node node7 = new ThrowEscalation( 7 ); Node node8 = createRecordPathNode( 8 ); Node node9 = new CatchSignal( 9, "unknown" ); Node node10 = new ThrowEscalation( 10 ); Node node11 = createRecordPathNode( 11 ); Node join = new AndJoin( -2 ); Node node13 = createRecordPathNode( 13 ); graph.setStartNode( node1 ); graph.addNode( fork ); graph.addNode( node3 ); graph.addNode( node4 ); graph.addNode( node5 ); graph.addNode( node6 ); graph.addNode( node7 ); graph.addNode( node8 ); graph.addNode( node9 ); graph.addNode( node10 ); graph.addNode( node11 ); graph.addNode( join ); graph.addNode( node13 ); graph.addTransition( new TransitionImpl( node1, fork ) ); graph.addTransition( new TransitionImpl( "2_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( node3, node4 ) ); graph.addTransition( new TransitionImpl( node4, node5 ) ); graph.addTransition( new TransitionImpl( node5, join ) ); graph.addTransition( new TransitionImpl( "2_6", fork, node6 ) ); graph.addTransition( new TransitionImpl( node6, node7 ) ); graph.addTransition( new TransitionImpl( node7, node8 ) ); graph.addTransition( new TransitionImpl( node8, join ) ); graph.addTransition( new TransitionImpl( "2_9", fork, node9 ) ); graph.addTransition( new TransitionImpl( node9, node10 ) ); graph.addTransition( new TransitionImpl( node10, node11 ) ); graph.addTransition( new TransitionImpl( node11, join ) ); graph.addTransition( new TransitionImpl( join, node13 ) ); return graph; } /** * <pre> * [1]--[objectcall]--[3] * </pre> */ public Graph objectcall_one_pre_post( Object target, String method, InputMapping<?>[] argumentsMappings, OutputMapping resultMapping ){ GraphImpl graph = new GraphImpl( "objectcall_one_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); Node node2 = new ObjectCallActivity( 2, "objectcall", target, method, argumentsMappings, resultMapping ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); graph.addTransition( new TransitionImpl( node2, node3 ) ); return graph; } /** * <pre> * [1]--[beanAsyncCall]--[3] * </pre> */ public Graph beanasynccall_one_pre_post(){ GraphImpl graph = new GraphImpl( "beanasynccall_one_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); Node node2 = new BeanAsyncCallActivity( 2, BEAN, METHOD, new InputMapping<?>[]{ConstantMapping.of( ARGUMENT )}, ValueMapping.of( RESULT_KEY ) ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); graph.addTransition( new TransitionImpl( node2, node3 ) ); return graph; } /** * <pre> * [1]--[beanasynccall]--[3] * </pre> */ public Graph beanasynccall_one_pre_post_special( String bean, String method, InputMapping<?>[] argumentsMappings, OutputMapping resultMapping ){ GraphImpl graph = new GraphImpl( "beanasynccall_one_pre_post_special", 1 ); Node node1 = createRecordPathNode( 1 ); Node node2 = new BeanAsyncCallActivity( 2, bean, method, argumentsMappings, resultMapping ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); graph.addTransition( new TransitionImpl( node2, node3 ) ); return graph; } /** * <pre> * [beanasynccall]--[beanasynccall] * </pre> */ public Graph beanasynccall_two(){ GraphImpl graph = new GraphImpl( "beanasynccall_two", 1 ); Node node1 = new BeanAsyncCallActivity( 1, BEAN, METHOD, new InputMapping<?>[]{ConstantMapping.of( ARGUMENT )}, ValueMapping.of( RESULT_KEY ) ); Node node2 = new BeanAsyncCallActivity( 2, BEAN, METHOD, new InputMapping<?>[]{ConstantMapping.of( ARGUMENT )}, ValueMapping.of( RESULT_KEY ) ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); return graph; } /** * <pre> * [1]--[htask]--[3] * </pre> */ public Graph human_task_one_pre_post(){ GraphImpl graph = new GraphImpl( "human_task_one_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); MapMapping inputMapping = new MapMapping( Collections.singletonMap( ARGUMENT_KEY, (InputMapping<Object>)new ConstantMapping<Object>( ARGUMENT ) ) ); Node node2 = new HumanTaskActivity( 2, ROLE, USER, inputMapping, new ValueMapping( RESULT_KEY ) ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); graph.addTransition( new TransitionImpl( node2, node3 ) ); return graph; } /** * <pre> * [1]--[htask]--[3] * </pre> */ public Graph human_task_one_pre_post_special( InputMapping<String> roleMapping, InputMapping<String> userMapping, InputMapping<Map<String, Object>> argumentsMapping, OutputMapping resultMapping ){ GraphImpl graph = new GraphImpl( "human_task_one_pre_post_special", 1 ); Node node1 = createRecordPathNode( 1 ); Node node2 = new HumanTaskActivity( 2, roleMapping, userMapping, argumentsMapping, resultMapping ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); graph.addTransition( new TransitionImpl( node2, node3 ) ); return graph; } /** * <pre> * [htask]--[htask] * </pre> */ public Graph human_task_two(){ GraphImpl graph = new GraphImpl( "human_task_two", 1 ); MapMapping inputMapping = new MapMapping( Collections.singletonMap( ARGUMENT_KEY, (InputMapping<Object>)new ConstantMapping<Object>( ARGUMENT ) ) ); Node node1 = new HumanTaskActivity( 1, ROLE, USER, inputMapping, new ValueMapping( RESULT_KEY ) ); Node node2 = new HumanTaskActivity( 2, ROLE, USER, inputMapping, new ValueMapping( RESULT_KEY ) ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); return graph; } /** * <pre> * [validate]--[validate]--[validate]--[validate]--[validate]--[value] * </pre> */ public Graph validate_attribute(){ GraphImpl graph = new GraphImpl( "validate_attribute", 1 ); Node node1 = new ValidateAttributeActivity( 1, "required1", String.class ); Node node2 = new ValidateAttributeActivity( 2, "required2", String.class, true ); Node node3 = new ValidateAttributeActivity( 3, "optional1", String.class, false ); Node node4 = new ValidateAttributeActivity( 4, "optional2", String.class, false, null ); Node node5 = new ValidateAttributeActivity( 5, "optional3", String.class, false, "default" ); Node node6 = new SetAttributeActivity( 6, "attribute", false ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addNode( node4 ); graph.addNode( node5 ); graph.addNode( node6 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); graph.addTransition( new TransitionImpl( node2, node3 ) ); graph.addTransition( new TransitionImpl( node3, node4 ) ); graph.addTransition( new TransitionImpl( node4, node5 ) ); graph.addTransition( new TransitionImpl( node5, node6 ) ); return graph; } public Graph error_no_start_node(){ GraphImpl graph = new GraphImpl( "error_no_start_node", 1 ); Node node1 = createRecordPathNode( 1 ); Node node2 = createRecordPathNode( 2 ); graph.addNode( node1 ); graph.addNode( node2 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); return graph; } /** * <pre> * +-(condition_1)-[2] * [XOR] * [3] * </pre> */ public Graph error_exclusivechoice_two(){ GraphImpl graph = new GraphImpl( "error_exclusivechoice_two", 1 ); XorFork fork = new XorFork( 1 ); fork.addCondition( createAttributeEqualsCondition( VALUE1 ), "1_2" ); fork.addCondition( createAttributeEqualsCondition( VALUE2 ), "1_3" ); Node node2 = createRecordPathNode( 2 ); Node node3 = createRecordPathNode( 3 ); graph.setStartNode( fork ); graph.addNode( node2 ); graph.addNode( node3 ); graph.addTransition( new TransitionImpl( "1_2", fork, node2 ) ); return graph; } /** * <pre> * +--[3]--+ * [1]--[AND] [CD]--[6] * [4]--+ * </pre> */ public Graph error_cancelling_discriminator_two_pre_post(){ GraphImpl graph = new GraphImpl( "error_cancelling_discriminator_two_pre_post", 1 ); Node node1 = createRecordPathNode( 1 ); Node fork = new AndFork( 2 ); Node node3 = createRecordPathNode( 3 ); Node node4 = createRecordPathNode( 4 ); Node join = new CancellingDiscriminator( -2 ); Node node6 = createRecordPathNode( 6 ); graph.setStartNode( node1 ); graph.addNode( fork ); graph.addNode( node3 ); graph.addNode( node4 ); graph.addNode( join ); graph.addNode( node6 ); graph.addTransition( new TransitionImpl( node1, fork ) ); graph.addTransition( new TransitionImpl( "2_3", fork, node3 ) ); graph.addTransition( new TransitionImpl( node3, join ) ); graph.addTransition( new TransitionImpl( node4, join ) ); graph.addTransition( new TransitionImpl( join, node6 ) ); return graph; } public Graph error_reserved_variable_name(){ GraphImpl graph = new GraphImpl( "error_no_start_node", 1 ); Node node1 = new SetAttributeActivity( 1, "NOW", "illegal variable 1" ); Node node2 = new SetAttributeActivity( 2, "WORKFLOW_INSTANCE_ID", "illegal variable 2" ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); return graph; } public Graph createNewInstanceActivity( String name ){ GraphImpl graph = new GraphImpl( "createNewInstanceActivity", 1 ); Node node1 = new SetAttributeActivity( 1, "name", "Heli Kopter" ); MapMapping mapMapping = new MapMapping(); mapMapping.addEntryMapping( "other", new AttributeMapping<Object>( "name" ) ); Node node2 = new CreateNewInstanceActivity( 2, name, null, "a", "b", mapMapping ); graph.setStartNode( node1 ); graph.addNode( node2 ); graph.addTransition( new TransitionImpl( node1, node2 ) ); return graph; } private Node createRecordPathNode( int id ){ return new ScriptActivity( id, new RecordPathScript( id ) ); } private Condition createAttributeEqualsCondition( Object testValue ){ return new AttributeEqualsCondition( CONDITION_TEST_ATTRIBUTE, testValue ); } }