public BoundaryEventBuilder boundaryEvent() { return boundaryEvent(null); }
@Override public MigratingBpmnEventTrigger addBoundaryEvent(ProcessEngine engine, BpmnModelInstance modelInstance, String activityId, String boundaryEventId) { ModifiableBpmnModelInstance.wrap(modelInstance) .activityBuilder(activityId) .boundaryEvent(boundaryEventId) .message(MESSAGE_NAME) .done(); MessageTrigger trigger = new MessageTrigger(); trigger.engine = engine; trigger.messageName = MESSAGE_NAME; trigger.activityId = boundaryEventId; return trigger; }
@Override public MigratingBpmnEventTrigger addBoundaryEvent(ProcessEngine engine, BpmnModelInstance modelInstance, String activityId, String boundaryEventId) { ModifiableBpmnModelInstance.wrap(modelInstance) .activityBuilder(activityId) .boundaryEvent(boundaryEventId) .signal(SIGNAL_NAME) .done(); SignalTrigger trigger = new SignalTrigger(); trigger.engine = engine; trigger.signalName = SIGNAL_NAME; trigger.activityId = boundaryEventId; return trigger; }
@Override public MigratingBpmnEventTrigger addBoundaryEvent(ProcessEngine engine, BpmnModelInstance modelInstance, String activityId, String boundaryEventId) { ModifiableBpmnModelInstance.wrap(modelInstance) .activityBuilder(activityId) .boundaryEvent(boundaryEventId) .timerWithDate(TIMER_DATE) .done(); TimerEventTrigger trigger = new TimerEventTrigger(); trigger.engine = engine; trigger.activityId = boundaryEventId; trigger.handlerType = TimerExecuteNestedActivityJobHandler.TYPE; return trigger; }
@Override public MigratingBpmnEventTrigger addBoundaryEvent(ProcessEngine engine, BpmnModelInstance modelInstance, String activityId, String boundaryEventId) { ModifiableBpmnModelInstance.wrap(modelInstance) .activityBuilder(activityId) .boundaryEvent(boundaryEventId) .condition(VAR_CONDITION) .done(); ConditionalEventTrigger trigger = new ConditionalEventTrigger(); trigger.engine = engine; trigger.variableName = "any"; trigger.variableValue = "any"; trigger.activityId = boundaryEventId; return trigger; }
@Test public void testIgnoreNotSupportedBoundaryEvents() { BpmnModelInstance testProcess = modify(ProcessModels.SUBPROCESS_PROCESS) .activityBuilder("subProcess") .boundaryEvent("messageBoundary").message(MESSAGE_NAME) .moveToActivity("subProcess") .boundaryEvent("errorBoundary").error(ERROR_CODE) .moveToActivity("subProcess") .boundaryEvent("escalationBoundary").escalation(ESCALATION_CODE) .moveToActivity("userTask") .boundaryEvent("signalBoundary").signal(SIGNAL_NAME) .done(); assertGeneratedMigrationPlan(testProcess, testProcess) .hasInstructions( migrate("subProcess").to("subProcess"), migrate("messageBoundary").to("messageBoundary"), migrate("userTask").to("userTask"), migrate("signalBoundary").to("signalBoundary") ); }
@Test public void testNotMigrateBoundaryEventsWithInvalidEventScopeInstruction() { BpmnModelInstance sourceProcess = modify(ProcessModels.ONE_TASK_PROCESS) .activityBuilder("userTask") .boundaryEvent("boundary") .message("foo") .done(); BpmnModelInstance targetProcess = modify(ProcessModels.ONE_RECEIVE_TASK_PROCESS) .changeElementId("receiveTask", "userTask") .activityBuilder("userTask") .boundaryEvent("boundary") .message("foo") .done(); assertGeneratedMigrationPlan(sourceProcess, targetProcess) .hasEmptyInstructions(); }
@Test public void testNotMigrateBoundaryEventsOfDifferentType() { BpmnModelInstance sourceProcess = modify(ProcessModels.ONE_TASK_PROCESS) .activityBuilder("userTask") .boundaryEvent("boundary").message(MESSAGE_NAME) .done(); BpmnModelInstance targetProcess = modify(ProcessModels.ONE_TASK_PROCESS) .activityBuilder("userTask") .boundaryEvent("boundary").signal(SIGNAL_NAME) .done(); assertGeneratedMigrationPlan(sourceProcess, targetProcess) .hasInstructions( migrate("userTask").to("userTask") ); }
@Test public void testMapEqualActivitiesWithBoundaryEvent() { BpmnModelInstance testProcess = modify(ProcessModels.SUBPROCESS_PROCESS) .activityBuilder("subProcess") .boundaryEvent("messageBoundary").message(MESSAGE_NAME) .moveToActivity("userTask") .boundaryEvent("signalBoundary").signal(SIGNAL_NAME) .moveToActivity("userTask") .boundaryEvent("timerBoundary").timerWithDate(TIMER_DATE) .done(); assertGeneratedMigrationPlan(testProcess, testProcess) .hasInstructions( migrate("subProcess").to("subProcess"), migrate("messageBoundary").to("messageBoundary"), migrate("userTask").to("userTask"), migrate("signalBoundary").to("signalBoundary"), migrate("timerBoundary").to("timerBoundary") ); }
@Test public void testNotMigrateBoundaryToChildActivity() { BpmnModelInstance sourceProcess = modify(ProcessModels.SUBPROCESS_PROCESS) .activityBuilder("subProcess") .boundaryEvent("message").message(MESSAGE_NAME) .done(); BpmnModelInstance targetProcess = modify(ProcessModels.SUBPROCESS_PROCESS) .activityBuilder("userTask") .boundaryEvent("message").message(MESSAGE_NAME) .done(); assertGeneratedMigrationPlan(sourceProcess, targetProcess) .hasInstructions( migrate("subProcess").to("subProcess"), migrate("userTask").to("userTask") ); }
@Test public void testMapEqualActivitiesToTaskWithBoundaryEvent() { BpmnModelInstance sourceProcess = ProcessModels.ONE_TASK_PROCESS; BpmnModelInstance targetProcess = modify(ProcessModels.ONE_TASK_PROCESS) .activityBuilder("userTask") .boundaryEvent(null).message("Message") .done(); assertGeneratedMigrationPlan(sourceProcess, targetProcess) .hasInstructions( migrate("userTask").to("userTask") ); }
@Test public void testMapEqualActivitiesFromTaskWithBoundaryEvent() { BpmnModelInstance sourceProcess = modify(ProcessModels.ONE_TASK_PROCESS) .activityBuilder("userTask") .boundaryEvent(null).message("Message") .done(); BpmnModelInstance targetProcess = ProcessModels.ONE_TASK_PROCESS; assertGeneratedMigrationPlan(sourceProcess, targetProcess) .hasInstructions( migrate("userTask").to("userTask") ); }
@Test public void testNotMigrateBoundaryToParallelActivity() { BpmnModelInstance sourceProcess = modify(ProcessModels.PARALLEL_GATEWAY_PROCESS) .activityBuilder("userTask1") .boundaryEvent("message").message(MESSAGE_NAME) .done(); BpmnModelInstance targetProcess = modify(ProcessModels.PARALLEL_GATEWAY_PROCESS) .activityBuilder("userTask2") .boundaryEvent("message").message(MESSAGE_NAME) .done(); assertGeneratedMigrationPlan(sourceProcess, targetProcess) .hasInstructions( migrate("userTask1").to("userTask1"), migrate("userTask2").to("userTask2"), migrate("fork").to("fork") ); }
protected BpmnModelInstance addBoundaryEvent(BpmnModelInstance modelInstance, String activityId, String userTaskName, boolean isInterrupting) { return modify(modelInstance) .activityBuilder(activityId) .boundaryEvent() .cancelActivity(isInterrupting) .conditionalEventDefinition() .condition(CONDITION_EXPR) .conditionalEventDefinitionDone() .userTask() .name(userTaskName) .endEvent() .done(); }
protected BpmnModelInstance addConditionalBoundaryEvent(BpmnModelInstance model, String activityId, String conditionExpr, String userTaskId, boolean isInterrupting) { return modify(model) .activityBuilder(activityId) .boundaryEvent() .cancelActivity(isInterrupting) .condition(conditionExpr) .userTask(userTaskId) .name(TASK_AFTER_CONDITION) .endEvent() .done(); } }
@Test public void testNotMapBoundaryEventsWithDifferentIds() { BpmnModelInstance sourceProcess = modify(ProcessModels.ONE_TASK_PROCESS) .activityBuilder("userTask") .boundaryEvent("message").message(MESSAGE_NAME) .done(); BpmnModelInstance targetProcess = modify(sourceProcess) .changeElementId("message", "newMessage"); assertGeneratedMigrationPlan(sourceProcess, targetProcess) .hasInstructions( migrate("userTask").to("userTask") ); }
protected void deployBoundaryEventProcess(AbstractActivityBuilder builder, String conditionExpr, boolean isInterrupting) { final BpmnModelInstance modelInstance = builder .boundaryEvent() .cancelActivity(isInterrupting) .conditionalEventDefinition(CONDITIONAL_EVENT) .condition(conditionExpr) .conditionalEventDefinitionDone() .userTask() .name(TASK_AFTER_CONDITION) .endEvent() .done(); engine.manageDeployment(repositoryService.createDeployment().addModelInstance(CONDITIONAL_MODEL, modelInstance).deploy()); }
@Test public void testMapConditionalBoundaryEvents() { BpmnModelInstance sourceProcess = modify(ProcessModels.ONE_TASK_PROCESS) .activityBuilder(USER_TASK_ID) .boundaryEvent(BOUNDARY_ID) .condition(VAR_CONDITION) .done(); assertGeneratedMigrationPlan(sourceProcess, sourceProcess, false) .hasInstructions( migrate(BOUNDARY_ID).to(BOUNDARY_ID).updateEventTrigger(true), migrate(USER_TASK_ID).to(USER_TASK_ID).updateEventTrigger(false) ); }
@Test public void testRemoveEscalationBoundaryEventFromSubProcess() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(modify(ProcessModels.SUBPROCESS_PROCESS) .activityBuilder("subProcess") .boundaryEvent().escalation(ESCALATION_CODE) .done() ); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.SUBPROCESS_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("subProcess", "subProcess") .mapActivities("userTask", "userTask") .build(); // when testHelper.createProcessInstanceAndMigrate(migrationPlan); // then it is possible to successfully complete the migrated instance testHelper.completeTask("userTask"); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); }
@Test public void testAddTimerBoundaryEventToScopeUserTaskAndSendTimerWithDate() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.SCOPE_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(ProcessModels.SCOPE_TASK_PROCESS) .activityBuilder("userTask") .boundaryEvent("boundary").timerWithDate(TIMER_DATE) .userTask(AFTER_BOUNDARY_TASK) .endEvent() .done() ); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask", "userTask") .build(); // when testHelper.createProcessInstanceAndMigrate(migrationPlan); // then it is possible to send the timer and successfully complete the migrated instance testHelper.triggerTimer(); testHelper.completeTask(AFTER_BOUNDARY_TASK); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); }