package ee.telekom.workflow.api; /** * Same methods as in GraphFactory, but builds the graph via WorkflowFactory DSL * * @author Erko Hansar */ public class DslFactory{ public static WorkflowFactoryImpl createWorkFlowFactory( String name, int version ){ return new WorkflowFactoryImpl( name, version ); } /** * <pre> * [1] * </pre> */ public static WorkflowFactory sequence_one(){ WorkflowFactory factory = createWorkFlowFactory( "sequence_one", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * [1]--[2] * </pre> */ public static WorkflowFactory sequence_two(){ WorkflowFactory factory = createWorkFlowFactory( "sequence_two", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .variable( "path" ).value( 2, "2" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * [1]--[2]--[3] * </pre> */ public static WorkflowFactory sequence_three(){ WorkflowFactory factory = createWorkFlowFactory( "sequence_three", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .variable( "path" ).value( 2, "2" ) .variable( "path" ).value( 3, "3" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * [AND]--[2] * </pre> */ public static WorkflowFactory split_one(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * +--[2] * [AND] * +--[3] * </pre> */ public static WorkflowFactory split_two(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * +--[2] * [AND]--[3] * +--[4] * </pre> */ public static WorkflowFactory split_three(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * +--[3] * [1]--[AND] * +--[4] * </pre> */ public static WorkflowFactory split_two_pre(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * [AND]--[2]--[AND] * </pre> */ public static WorkflowFactory synchronzation_one(){ WorkflowFactory factory = createWorkFlowFactory( "synchronzation_one", 1 ); /* @formatter:off */ factory .start() .split(1) .branch() .variable( "path" ).value( 2, "2" ) .joinAll() .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[2]--+ * [AND] [AND] * +--[3]--+ * </pre> */ public static WorkflowFactory synchronzation_two(){ WorkflowFactory factory = createWorkFlowFactory( "synchronzation_two", 1 ); /* @formatter:off */ factory .start() .split(1) .branch() .variable( "path" ).value( 2, "2" ) .branch() .variable( "path" ).value( 3, "3" ) .joinAll() .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[2]--+ * [AND]--[3]--[AND] * +--[4]--+ * </pre> */ public static WorkflowFactory synchronzation_three(){ WorkflowFactory factory = createWorkFlowFactory( "synchronzation_three", 1 ); /* @formatter:off */ factory .start() .split(1) .branch() .variable( "path" ).value( 2, "2" ) .branch() .variable( "path" ).value( 3, "3" ) .branch() .variable( "path" ).value( 4, "4" ) .joinAll() .end(); /* @formatter:on */ return factory; } /** * <pre> * +-------+ * [AND] [AND] * +--[2]--+ * </pre> */ public static WorkflowFactory synchronzation_two_firstBranchEmpty(){ WorkflowFactory factory = createWorkFlowFactory( "synchronzation_two_firstBranchEmpty", 1 ); /* @formatter:off */ factory .start() .split(1) .branch() .branch() .variable( "path" ).value( 2, "2" ) .joinAll() .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[2]--+ * [AND] [AND] * +-------+ * </pre> */ public static WorkflowFactory synchronzation_two_secondBranchEmpty(){ WorkflowFactory factory = createWorkFlowFactory( "synchronzation_two_secondBranchEmpty", 1 ); /* @formatter:off */ factory .start() .split(1) .branch() .variable( "path" ).value( 2, "2" ) .branch() .joinAll() .end(); /* @formatter:on */ return factory; } /** * <pre> * +--+ * [AND] [AND] * +--+ * </pre> */ public static WorkflowFactory synchronzation_two_bothBranchesEmpty(){ throw new UnsupportedOperationException( "DSL optimizes empty brances if there are other existing branches already in place, so there will be only " + "max 1 empty branch (or none, if a non-empty branch exists). So this can't be compared against GraphFactory tests." ); } /** * <pre> * +--[3]--+ * [1]--[AND] [AND]--[6] * +--[4]--+ * </pre> */ public static WorkflowFactory synchronzation_two_pre_post(){ WorkflowFactory factory = createWorkFlowFactory( "synchronzation_two_pre_post", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .split(2) .branch() .variable( "path" ).value( 3, "3" ) .branch() .variable( "path" ).value( 4, "4" ) .joinAll() .variable( "path" ).value( 6, "6" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * +-------+ * [1]--[AND] [AND]--[6] * +--[3]--+ * </pre> */ public static WorkflowFactory synchronization_firstBranchEmpty_pre_post(){ WorkflowFactory factory = createWorkFlowFactory( "synchronization_firstBranchEmpty_pre_post", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .split(2) .branch() .branch() .variable( "path" ).value( 3, "3" ) .joinAll() .variable( "path" ).value( 6, "6" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[3]--+ * [1]--[AND] [AND]--[6] * +-------+ * </pre> */ public static WorkflowFactory synchronization_secondBranchEmpty_pre_post(){ WorkflowFactory factory = createWorkFlowFactory( "synchronization_secondBranchEmpty_pre_post", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .split(2) .branch() .variable( "path" ).value( 3, "3" ) .branch() .joinAll() .variable( "path" ).value( 6, "6" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * +--+ * [1]--[AND] [AND]--[4] * +--+ * </pre> */ public static WorkflowFactory synchronization_bothBranchesEmpty_pre_post(){ throw new UnsupportedOperationException( "DSL optimizes empty brances if there are other existing branches already in place, so there will be only " + "max 1 empty branch (or none, if a non-empty branch exists). So this can't be compared against GraphFactory tests." ); } /** * <pre> * [XOR]-(condition_1)-[2] * </pre> */ public static WorkflowFactory exclusivechoice_one(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * +-(condition_1)-[2] * [XOR] * +-(condition_2)-[3] * </pre> */ public static WorkflowFactory exclusivechoice_two(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * +-(${condition_1})-[2] * [XOR] * +-(${condition_2})-[3] * </pre> */ public static WorkflowFactory exclusivechoice_two_expressionlanguage(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * [XOR]-(default)-[2] * </pre> */ public static WorkflowFactory exclusivechoice_default(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * +-(condition_1)-[2] * [XOR] * +---(default)---[3] * </pre> */ public static WorkflowFactory exclusivechoice_one_default(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * +-(condition_1)-[2] * [XOR] * +-(condition_1)-[3] * </pre> */ public static WorkflowFactory exclusivechoice_twoConditionsTrue(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * [XOR]-(default)-[2]--[XOR] * </pre> */ public static WorkflowFactory simplemerge_one(){ throw new UnsupportedOperationException( "DSL does not support ELSE block without an IF block" ); } /** * <pre> * [XOR]-(default)-[2]--[XOR]--[4] * </pre> */ public static WorkflowFactory simplemerge_one_post(){ throw new UnsupportedOperationException( "DSL does not support ELSE block without an IF block" ); } /** * <pre> * +-(condition_1)-[2]--+ * [XOR] [XOR] * +---(default)---[3]--+ * </pre> */ public static WorkflowFactory simplemerge_two(){ WorkflowFactory factory = createWorkFlowFactory( "simplemerge_two", 1 ); /* @formatter:off */ factory .start() .if_(1, "conditionAttribute == 'value1'") .variable( "path" ).value( 2, "2" ) .else_() .variable( "path" ).value( 3, "3" ) .endIf() .end(); /* @formatter:on */ return factory; } /** * <pre> * +-(condition_1)-[2]--+ * [XOR] [XOR]--[5] * +---(default)---[3]--+ * </pre> */ public static WorkflowFactory simplemerge_two_post(){ WorkflowFactory factory = createWorkFlowFactory( "simplemerge_two_post", 1 ); /* @formatter:off */ factory .start() .if_(1, "conditionAttribute == 'value1'") .variable( "path" ).value( 2, "2" ) .else_() .variable( "path" ).value( 3, "3" ) .endIf() .variable( "path" ).value( 5, "5" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * [OR]-(condition_1)-[2] * </pre> */ public static WorkflowFactory multiplechoice_one(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * +-(condition_1)-[2] * [OR] * +-(condition_2)-[3] * </pre> */ public static WorkflowFactory multiplechoice_two(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * [OR]-(default)-[2] * </pre> */ public static WorkflowFactory multiplechoice_default(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * +-(condition_1)-[2] * [OR] * +---(default)---[3] * </pre> */ public static WorkflowFactory multiplechoice_one_default(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * +-(condition_1)-[2] * [OR] * +-(condition_1)-[3] * </pre> */ public static WorkflowFactory multiplechoice_twoConditionsTrue(){ throw new UnsupportedOperationException( "incomplete graph blocks are not supported in DSL" ); } /** * <pre> * [AND]--[2]--[CD] * </pre> */ public static WorkflowFactory cancelling_discriminator_one(){ WorkflowFactory factory = createWorkFlowFactory( "cancelling_discriminator_one", 1 ); /* @formatter:off */ factory .start() .split(1) .branch() .variable( "path" ).value( 2, "2" ) .joinFirst() .end(); /* @formatter:on */ return factory; } /** * <pre> * [AND]--[2]--[CD]--[4] * </pre> */ public static WorkflowFactory cancelling_discriminator_one_post(){ WorkflowFactory factory = createWorkFlowFactory( "cancelling_discriminator_one_post", 1 ); /* @formatter:off */ factory .start() .split(1) .branch() .variable( "path" ).value( 2, "2" ) .joinFirst() .variable( "path" ).value( 4, "2" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[2]--+ * [AND] [CD] * +--[3]--+ * </pre> */ public static WorkflowFactory cancelling_discriminator_two(){ WorkflowFactory factory = createWorkFlowFactory( "cancelling_discriminator_two", 1 ); /* @formatter:off */ factory .start() .split(1) .branch() .variable( "path" ).value( 2, "2" ) .branch() .variable( "path" ).value( 3, "3" ) .joinFirst() .end(); /* @formatter:on */ return factory; } /** * <pre> * +-------+ * [AND] [CD] * +--[2]--+ * </pre> */ public static WorkflowFactory cancelling_discriminator_two_firstBranchEmpty(){ WorkflowFactory factory = createWorkFlowFactory( "cancelling_discriminator_two_firstBranchEmpty", 1 ); /* @formatter:off */ factory .start() .split(1) .branch() .branch() .variable( "path" ).value( 2, "2" ) .joinFirst() .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[2]--+ * [AND] [CD] * +-------+ * </pre> */ public static WorkflowFactory cancelling_discriminator_two_secondBranchEmpty(){ WorkflowFactory factory = createWorkFlowFactory( "cancelling_discriminator_two_secondBranchEmpty", 1 ); /* @formatter:off */ factory .start() .split(1) .branch() .variable( "path" ).value( 2, "2" ) .branch() .joinFirst() .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[3]--+ * [1]--[AND] [CD]--[6] * +--[4]--+ * </pre> */ public static WorkflowFactory cancelling_discriminator_two_pre_post(){ WorkflowFactory factory = createWorkFlowFactory( "cancelling_discriminator_two_pre_post", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .split(2) .branch() .variable( "path" ).value( 3, "3" ) .branch() .variable( "path" ).value( 4, "4" ) .joinFirst() .variable( "path" ).value( 6, "6" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * +-------+ * [1]--[AND] [CD]--[5] * +--[3]--+ * </pre> */ public static WorkflowFactory cancelling_discriminator_two_firstBranchEmpty_pre_post(){ WorkflowFactory factory = createWorkFlowFactory( "cancelling_discriminator_two_firstBranchEmpty_pre_post", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .split(2) .branch() .branch() .variable( "path" ).value( 3, "3" ) .joinFirst() .variable( "path" ).value( 5, "5" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[3]--+ * [1]--[AND] [CD]--[6] * +-------+ * </pre> */ public static WorkflowFactory cancelling_discriminator_two_secondBranchEmpty_pre_post(){ WorkflowFactory factory = createWorkFlowFactory( "cancelling_discriminator_two_secondBranchEmpty_pre_post", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .split(2) .branch() .variable( "path" ).value( 3, "3" ) .branch() .joinFirst() .variable( "path" ).value( 6, "6" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[3]--+ +--[8]--+ * [1]--[AND] [CD]--[6]--[AND] [CD]--[11] * +--[4]--+ +--[9]--+ * </pre> */ public static WorkflowFactory cancelling_discriminator_twice(){ WorkflowFactory factory = createWorkFlowFactory( "cancelling_discriminator_twice", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .split(2) .branch() .variable( "path" ).value( 3, "3" ) .branch() .variable( "path" ).value( 4, "4" ) .joinFirst() .variable( "path" ).value( 6, "6" ) .split(7) .branch() .variable( "path" ).value( 8, "8" ) .branch() .variable( "path" ).value( 9, "9" ) .joinFirst() .variable( "path" ).value( 11, "11" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[signal(1)]--+ * +--[3]--[AND] [CD]--[8]---+ * | +--[signal(2)]--+ | * | | * [1]--[AND] [CD]--[16] * | | * | +--[signal(3)]--+ | * +--[9]--[AND] [CD]--[14]--+ * +--[signal(4)]--+ * </pre> */ public static WorkflowFactory cancelling_discriminator_and_nested(){ WorkflowFactory factory = createWorkFlowFactory( "cancelling_discriminator_and_nested", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .split(2) .branch() .variable( "path" ).value( 3, "3" ) .split(4) .branch() .waitSignal(5, "1") .branch() .waitSignal(6, "2") .joinFirst() .variable( "path" ).value( 8, "8" ) .branch() .variable( "path" ).value( 9, "9" ) .split(10) .branch() .waitSignal(11, "3") .branch() .waitSignal(12, "4") .joinFirst() .variable( "path" ).value( 14, "14" ) .joinFirst() .variable( "path" ).value( 16, "16" ) .end(); /* @formatter:on */ return factory; } /** * <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 static WorkflowFactory cancelling_discriminator_or_nested(){ WorkflowFactory factory = createWorkFlowFactory( "cancelling_discriminator_or_nested", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .split(2) .branch() .variable( "path" ).value( 3, "3" ) .split(4) .branch("true") .waitSignal(5, "1") .branch("true") .waitSignal(6, "2") .joinFirst() .variable( "path" ).value( 8, "8" ) .branch() .variable( "path" ).value( 9, "9" ) .split(10) .branch("true") .waitSignal(11, "3") .branch("true") .waitSignal(12, "4") .joinFirst() .variable( "path" ).value( 14, "14" ) .joinFirst() .variable( "path" ).value( 16, "16" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * [1]--[XOR] * | |(ExecutionCountCondition) * +--<--+ * </pre> */ public static WorkflowFactory loop_one( int executionCount ){ WorkflowFactory factory = createWorkFlowFactory( "loop_one", 1 ); /* @formatter:off */ factory .start() .variable( "executionCount" ).value( 100, 0 ) .doWhile() .variable( "executionCount" ).value( 101, "${executionCount + 1}" ) .variable( "path" ).value( 1, "1" ) .doWhile(2, "executionCount < " + executionCount) .end(); /* @formatter:on */ return factory; } /** * <pre> * [1]--[XOR]--[3] * | |(ExecutionCountCondition) * +--<--+ * </pre> */ public static WorkflowFactory loop_one_special( int executionCount ){ WorkflowFactory factory = createWorkFlowFactory( "loop_one_special", 1 ); /* @formatter:off */ factory .start() .variable( "executionCount" ).value( 100, 0 ) .doWhile() .variable( "executionCount" ).value( 101, "${executionCount + 1}" ) .variable( "path" ).value( 1, "1" ) .doWhile(2, "executionCount < " + executionCount) .variable( "path" ).value( 3, "3" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * [1]--[2]--[XOR] * | |(ExecutionCountCondition) * +----<----+ * </pre> */ public static WorkflowFactory loop_two( int executionCount ){ WorkflowFactory factory = createWorkFlowFactory( "loop_two", 1 ); /* @formatter:off */ factory .start() .variable( "executionCount" ).value( 100, 0 ) .doWhile() .variable( "executionCount" ).value( 101, "${executionCount + 1}" ) .variable( "path" ).value( 1, "1" ) .variable( "path" ).value( 2, "2" ) .doWhile(3, "executionCount < " + executionCount) .end(); /* @formatter:on */ return factory; } /** * <pre> * +------------------------------------------[4] * | * [1]--[XOR]--(ExecutionCountCondition)--[3] * | | * +--------------<-----------------+ * </pre> */ public static WorkflowFactory loop_while( int executionCount ){ WorkflowFactory factory = createWorkFlowFactory( "loop_while", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .variable( "executionCount" ).value( 100, 0 ) .whileDo( 2, "executionCount < " + executionCount ) .variable( "executionCount" ).value( 101, "${executionCount + 1}" ) .variable( "path" ).value( 3, "3" ) .whileDo() .variable( "path" ).value( 4, "4" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[3]--+ * [1]--[AND] [AND]--[6]--[XOR] * | +--[4]--+ |(ExecutionCountCondition) * +--------------<--------------+ * </pre> */ public static WorkflowFactory loop_andForkJoin_twoThreads_before_after( int executionCount ){ WorkflowFactory factory = createWorkFlowFactory( "loop_andForkJoin_twoThreads_before_after", 1 ); /* @formatter:off */ factory .start() .variable( "executionCount" ).value( 100, 0 ) .doWhile() .variable( "executionCount" ).value( 101, "${executionCount + 1}" ) .variable( "path" ).value( 1, "1" ) .split(2) .branch() .variable( "path" ).value( 3, "3" ) .branch() .variable( "path" ).value( 4, "4" ) .joinAll() .variable( "path" ).value( 6, "6" ) .doWhile(7, "executionCount < " + executionCount) .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[3]--+ +--[8]--+ * [1]--[AND] [CD]--[6]--[AND] [CD]--[11]--[XOR] * | +--[4]--+ +--[9]--+ |(ExecutionCountCondition) * +----------------------<-----------------------------+ * </pre> */ public static WorkflowFactory loop_cancelling_discriminator_twice( int executionCount ){ WorkflowFactory factory = createWorkFlowFactory( "loop_cancelling_discriminator_twice", 1 ); /* @formatter:off */ factory .start() .variable( "executionCount" ).value( 100, 0 ) .doWhile() .variable( "executionCount" ).value( 101, "${executionCount + 1}" ) .variable( "path" ).value( 1, "1" ) .split(2) .branch() .variable( "path" ).value( 3, "3" ) .branch() .variable( "path" ).value( 4, "4" ) .joinFirst() .variable( "path" ).value( 6, "6" ) .split(7) .branch() .variable( "path" ).value( 8, "8" ) .branch() .variable( "path" ).value( 9, "9" ) .joinFirst() .variable( "path" ).value( 11, "11" ) .doWhile(12, "executionCount < " + executionCount) .end(); /* @formatter:on */ return factory; } /** * <pre> * [signal(go)] * </pre> */ public static WorkflowFactory signal_one(){ WorkflowFactory factory = createWorkFlowFactory( "signal_one", 1 ); /* @formatter:off */ factory .start() .waitSignal(1, "go") .end(); /* @formatter:on */ return factory; } /** * <pre> * [1]--[signal(go)]--[3] * </pre> */ public static WorkflowFactory signal_one_pre_post(){ WorkflowFactory factory = createWorkFlowFactory( "signal_one_pre_post", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .variable( "result_key" ).waitSignal(2, "go") .variable( "path" ).value( 3, "3" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * [signal(go)]--[signal(go)] * </pre> */ public static WorkflowFactory signal_two(){ WorkflowFactory factory = createWorkFlowFactory( "signal_two", 1 ); /* @formatter:off */ factory .start() .variable( "result_key" ).waitSignal(1, "go") .variable( "result_key" ).waitSignal(2, "go") .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[signal(go)]--+ * [AND] [AND] * +--[signal(go)]--+ * </pre> */ public static WorkflowFactory signal_andJoin(){ WorkflowFactory factory = createWorkFlowFactory( "signal_andJoin", 1 ); /* @formatter:off */ factory .start() .split(1) .branch() .variable( "result_key" ).waitSignal(2, "go") .branch() .variable( "result_key" ).waitSignal(3, "go") .joinAll() .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[signal(go)]--+ * [AND] [AND] * +--[signal(go)]--+ * </pre> */ public static WorkflowFactory signal_cancellingDiscriminator(){ WorkflowFactory factory = createWorkFlowFactory( "signal_cancellingDiscriminator", 1 ); /* @formatter:off */ factory .start() .split(1) .branch() .variable( "result_key" ).waitSignal(2, "go") .branch() .variable( "result_key" ).waitSignal(3, "go") .joinFirst() .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[signal(go)]--+ * [1]--[AND] [AND]--[6] * +--[signal(go)]--+ * </pre> */ public static WorkflowFactory signal_parallel_pre_post(){ WorkflowFactory factory = createWorkFlowFactory( "signal_parallel_pre_post", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .split(2) .branch() .waitSignal(3, "go") .branch() .waitSignal(4, "go") .joinAll() .variable( "path" ).value( 6, "6" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * [timer(60s)] * </pre> */ public static WorkflowFactory timer_one(){ WorkflowFactory factory = createWorkFlowFactory( "timer_one", 1 ); /* @formatter:off */ factory .start() .waitTimer(1, "60000") .end(); /* @formatter:on */ return factory; } /** * <pre> * [1]--[timer(60s)]--[3] * </pre> */ public static WorkflowFactory timer_one_pre_post(){ WorkflowFactory factory = createWorkFlowFactory( "timer_one_pre_post", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .waitTimer(2, "60000") .variable( "path" ).value( 3, "3" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * [timer(60s)]--[timer(60s)] * </pre> */ public static WorkflowFactory timer_two(){ WorkflowFactory factory = createWorkFlowFactory( "timer_two", 1 ); /* @formatter:off */ factory .start() .waitTimer(1, "60000") .waitTimer(2, "60000") .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[timer(60s)]--+ * [1]--[AND] [AND]--[6] * +--[timer(60s)]--+ * </pre> */ public static WorkflowFactory timer_parallel_pre_post(){ WorkflowFactory factory = createWorkFlowFactory( "timer_parallel_pre_post", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .split(2) .branch() .waitTimer(3, "60000") .branch() .waitTimer(4, "60000") .joinAll() .variable( "path" ).value( 6, "6" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * +--[signal(invoice)]--[escalation]--[5]---+ * [1]--[AND]--[signal(payment)]--[escalation]--[8]---[AND]--[13] * +--[signal(unknown)]--[escalation]--[11]--+ * </pre> */ public static WorkflowFactory escalation_three(){ WorkflowFactory factory = createWorkFlowFactory( "escalation_three", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .split(2) .branch() .waitSignal(3, "invoice") .escalate(4) .variable( "path" ).value( 5, "5" ) .branch() .waitSignal(6, "payment") .escalate(7) .variable( "path" ).value( 8, "8" ) .branch() .waitSignal(9, "unknown") .escalate(10) .variable( "path" ).value( 11, "11" ) .joinAll() .variable( "path" ).value( 13, "13" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * [1]--[objectcall]--[3] * </pre> */ public static WorkflowFactory objectcall_one_pre_post(){ throw new UnsupportedOperationException( "DSL does not support ObjectCallActivity for now" ); } /** * <pre> * [1]--[beanAsyncCall]--[3] * </pre> */ public static WorkflowFactory beanasynccall_one_pre_post(){ WorkflowFactory factory = createWorkFlowFactory( "beanasynccall_one_pre_post", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .variable( "result_key" ).callAsync(2, "bean1", "method1", "argument") .variable( "path" ).value( 3, "3" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * [beanasynccall]--[beanasynccall] * </pre> */ public static WorkflowFactory beanasynccall_two(){ WorkflowFactory factory = createWorkFlowFactory( "beanasynccall_two", 1 ); /* @formatter:off */ factory .start() .variable( "result_key" ).callAsync(1, "bean1", "method1", "argument") .variable( "result_key" ).callAsync(2, "bean1", "method1", "argument") .end(); /* @formatter:on */ return factory; } /** * <pre> * [1]--[htask]--[3] * </pre> */ public static WorkflowFactory human_task_one_pre_post(){ WorkflowFactory factory = createWorkFlowFactory( "human_task_one_pre_post", 1 ); /* @formatter:off */ factory .start() .variable( "path" ).value( 1, "1" ) .variable( "result_key" ).humanTask(2, "role1", "user1").withAttribute( "argument", "argument" ).done() .variable( "path" ).value( 3, "3" ) .end(); /* @formatter:on */ return factory; } /** * <pre> * [htask]--[htask] * </pre> */ public static WorkflowFactory human_task_two(){ WorkflowFactory factory = createWorkFlowFactory( "human_task_two", 1 ); /* @formatter:off */ factory .start() .variable( "result_key" ).humanTask(1, "role1", "user1").withAttribute( "argument", "argument" ).done() .variable( "result_key" ).humanTask(2, "role1", "user1").withAttribute( "argument", "argument" ).done() .end(); /* @formatter:on */ return factory; } /** * <pre> * [validate]--[validate]--[validate]--[validate]--[validate]--[value] * </pre> */ public static WorkflowFactory validate_input_variable(){ WorkflowFactory factory = createWorkFlowFactory( "validate_attribute", 1 ); /* @formatter:off */ factory .start() .validateInputVariable( 1, "required1", String.class ) .validateInputVariable( 2, "required2", String.class, true ) .validateInputVariable( 3, "optional1", String.class, false ) .validateInputVariable( 4, "optional2", String.class, false, null ) .validateInputVariable( 5, "optional3", String.class, false, "default" ) .variable( "attribute" ).value( 6, false ) .end(); /* @formatter:on */ return factory; } }