public static MigrationPlan toMigrationPlan(ProcessEngine processEngine, MigrationPlanDto migrationPlanDto) { MigrationPlanBuilder migrationPlanBuilder = processEngine.getRuntimeService().createMigrationPlan(migrationPlanDto.getSourceProcessDefinitionId(), migrationPlanDto.getTargetProcessDefinitionId()); if (migrationPlanDto.getInstructions() != null) { for (MigrationInstructionDto migrationInstructionDto : migrationPlanDto.getInstructions()) { MigrationInstructionBuilder migrationInstructionBuilder = migrationPlanBuilder.mapActivities(migrationInstructionDto.getSourceActivityIds().get(0), migrationInstructionDto.getTargetActivityIds().get(0)); if (Boolean.TRUE.equals(migrationInstructionDto.isUpdateEventTrigger())) { migrationInstructionBuilder = migrationInstructionBuilder.updateEventTrigger(); } migrationPlanBuilder = migrationInstructionBuilder; } } return migrationPlanBuilder.build(); }
public static MigrationPlan toMigrationPlan(ProcessEngine processEngine, MigrationPlanDto migrationPlanDto) { MigrationPlanBuilder migrationPlanBuilder = processEngine.getRuntimeService().createMigrationPlan(migrationPlanDto.getSourceProcessDefinitionId(), migrationPlanDto.getTargetProcessDefinitionId()); if (migrationPlanDto.getInstructions() != null) { for (MigrationInstructionDto migrationInstructionDto : migrationPlanDto.getInstructions()) { MigrationInstructionBuilder migrationInstructionBuilder = migrationPlanBuilder.mapActivities(migrationInstructionDto.getSourceActivityIds().get(0), migrationInstructionDto.getTargetActivityIds().get(0)); if (Boolean.TRUE.equals(migrationInstructionDto.isUpdateEventTrigger())) { migrationInstructionBuilder = migrationInstructionBuilder.updateEventTrigger(); } migrationPlanBuilder = migrationInstructionBuilder; } } return migrationPlanBuilder.build(); }
.createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("messageCatch", "messageCatch") .updateEventTrigger() .build();
@Test public void testCannotUpdateEventTriggerForEventSubProcess() { ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(EventSubProcessModels.TIMER_EVENT_SUBPROCESS_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(EventSubProcessModels.TIMER_EVENT_SUBPROCESS_PROCESS); try { runtimeService .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("eventSubProcess", "eventSubProcess").updateEventTrigger() .build(); fail("Should not succeed"); } catch (MigrationPlanValidationException e) { assertThat(e.getValidationReport()) .hasInstructionFailures("eventSubProcess", "Cannot update event trigger because the activity does not define a persistent event trigger" ); } }
@Test public void testCannotUpdateEventTriggerForNonEvent() { ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS); try { runtimeService .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("userTask", "userTask").updateEventTrigger() .build(); fail("Should not succeed"); } catch (MigrationPlanValidationException e) { assertThat(e.getValidationReport()) .hasInstructionFailures("userTask", "Cannot update event trigger because the activity does not define a persistent event trigger" ); } }
@Test public void testUpdateEventSignalWithExpression() { // given String newSignalNameWithExpression = "new" + EventSubProcessModels.MESSAGE_NAME + "-${var}"; BpmnModelInstance sourceProcess = EventSubProcessModels.SIGNAL_EVENT_SUBPROCESS_PROCESS; BpmnModelInstance targetProcess = modify(EventSubProcessModels.SIGNAL_EVENT_SUBPROCESS_PROCESS) .renameSignal(EventSubProcessModels.SIGNAL_NAME, newSignalNameWithExpression); ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(sourceProcess); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(targetProcess); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(USER_TASK_ID, USER_TASK_ID) .mapActivities(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID).updateEventTrigger() .build(); HashMap<String, Object> variables = new HashMap<String, Object>(); variables.put("var", "foo"); // when testHelper.createProcessInstanceAndMigrate(migrationPlan, variables); // then String resolvedsignalName = "new" + EventSubProcessModels.MESSAGE_NAME + "-foo"; testHelper.assertEventSubscriptionMigrated( EVENT_SUB_PROCESS_START_ID, EventSubProcessModels.SIGNAL_NAME, EVENT_SUB_PROCESS_START_ID, resolvedsignalName); // and it is possible to successfully complete the migrated instance rule.getRuntimeService().signalEventReceived(resolvedsignalName); testHelper.completeTask(EVENT_SUB_PROCESS_TASK_ID); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); }
.createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(USER_TASK_ID, USER_TASK_ID) .mapActivities(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID).updateEventTrigger() .build();
@Test public void testCanUpdateEventTriggerForEventSubProcessStartEvent() { ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(EventSubProcessModels.TIMER_EVENT_SUBPROCESS_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(EventSubProcessModels.TIMER_EVENT_SUBPROCESS_PROCESS); MigrationPlan migrationPlan = runtimeService .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("eventSubProcessStart", "eventSubProcessStart").updateEventTrigger() .build(); assertThat(migrationPlan) .hasSourceProcessDefinition(sourceProcessDefinition) .hasTargetProcessDefinition(targetProcessDefinition) .hasInstructions( migrate("eventSubProcessStart").to("eventSubProcessStart").updateEventTrigger(true) ); }
@Test public void testMigrateEventSubscription() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ONE_CONDITION_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ONE_CONDITION_PROCESS); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(CONDITION_ID, CONDITION_ID).updateEventTrigger() .build(); //when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); testHelper.assertEventSubscriptionMigrated(CONDITION_ID, CONDITION_ID, null); //then it is possible to trigger the conditional event testHelper.setVariable(processInstance.getId(), VAR_NAME, "1"); testHelper.completeTask(USER_TASK_ID); testHelper.assertProcessEnded(processInstance.getId()); }
@Test public void testUpdateConditionalEventExpression() { // given BpmnModelInstance sourceProcess = EventSubProcessModels.FALSE_CONDITIONAL_EVENT_SUBPROCESS_PROCESS; BpmnModelInstance targetProcess = modify(CONDITIONAL_EVENT_SUBPROCESS_PROCESS); ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(sourceProcess); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(targetProcess); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(USER_TASK_ID, USER_TASK_ID) .mapActivities(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID).updateEventTrigger() .build(); // when process is migrated without update event trigger testHelper.createProcessInstanceAndMigrate(migrationPlan); // then condition is migrated and has new condition expr testHelper.assertEventSubscriptionMigrated(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID, null); // and it is possible to successfully complete the migrated instance testHelper.setAnyVariable(testHelper.snapshotAfterMigration.getProcessInstanceId()); testHelper.completeTask(EVENT_SUB_PROCESS_TASK_ID); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); } }
@Test public void testMigrateEventSubscriptionUpdateMessageName() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(MessageReceiveModels.ONE_MESSAGE_CATCH_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(MessageReceiveModels.ONE_MESSAGE_CATCH_PROCESS) .renameMessage(MessageReceiveModels.MESSAGE_NAME, "new" + MessageReceiveModels.MESSAGE_NAME)); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("messageCatch", "messageCatch") .updateEventTrigger() .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then the message event subscription's event name has changed testHelper.assertEventSubscriptionMigrated( "messageCatch", MessageReceiveModels.MESSAGE_NAME, "messageCatch", "new" + MessageReceiveModels.MESSAGE_NAME); // and it is possible to trigger the event rule.getRuntimeService().correlateMessage("new" + MessageReceiveModels.MESSAGE_NAME); testHelper.completeTask("userTask"); testHelper.assertProcessEnded(processInstance.getId()); }
@Test public void testMigrateEventSubscriptionUpdateMessageName() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(MessageReceiveModels.ONE_RECEIVE_TASK_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(MessageReceiveModels.ONE_RECEIVE_TASK_PROCESS) .renameMessage(MessageReceiveModels.MESSAGE_NAME, "new" + MessageReceiveModels.MESSAGE_NAME)); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("receiveTask", "receiveTask") .updateEventTrigger() .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then the message event subscription's event name has not changed testHelper.assertEventSubscriptionMigrated( "receiveTask", MessageReceiveModels.MESSAGE_NAME, "receiveTask", "new" + MessageReceiveModels.MESSAGE_NAME); // and it is possible to trigger the event rule.getRuntimeService().correlateMessage("new" + MessageReceiveModels.MESSAGE_NAME); testHelper.completeTask("userTask"); testHelper.assertProcessEnded(processInstance.getId()); }
@Test public void testUpdateEventMessage() { // given BpmnModelInstance sourceProcess = EventSubProcessModels.MESSAGE_EVENT_SUBPROCESS_PROCESS; BpmnModelInstance targetProcess = modify(EventSubProcessModels.MESSAGE_EVENT_SUBPROCESS_PROCESS) .renameMessage(EventSubProcessModels.MESSAGE_NAME, "new" + EventSubProcessModels.MESSAGE_NAME); ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(sourceProcess); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(targetProcess); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(USER_TASK_ID, USER_TASK_ID) .mapActivities(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID).updateEventTrigger() .build(); // when testHelper.createProcessInstanceAndMigrate(migrationPlan); // then testHelper.assertEventSubscriptionMigrated( EVENT_SUB_PROCESS_START_ID, EventSubProcessModels.MESSAGE_NAME, EVENT_SUB_PROCESS_START_ID, "new" + EventSubProcessModels.MESSAGE_NAME); // and it is possible to successfully complete the migrated instance rule.getRuntimeService().correlateMessage("new" + EventSubProcessModels.MESSAGE_NAME); testHelper.completeTask(EVENT_SUB_PROCESS_TASK_ID); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); }
@Test public void testUpdateEventSignal() { // given BpmnModelInstance sourceProcess = EventSubProcessModels.SIGNAL_EVENT_SUBPROCESS_PROCESS; BpmnModelInstance targetProcess = modify(EventSubProcessModels.SIGNAL_EVENT_SUBPROCESS_PROCESS) .renameSignal(EventSubProcessModels.SIGNAL_NAME, "new" + EventSubProcessModels.SIGNAL_NAME); ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(sourceProcess); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(targetProcess); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(USER_TASK_ID, USER_TASK_ID) .mapActivities(EVENT_SUB_PROCESS_START_ID, EVENT_SUB_PROCESS_START_ID).updateEventTrigger() .build(); // when testHelper.createProcessInstanceAndMigrate(migrationPlan); // then testHelper.assertEventSubscriptionMigrated( EVENT_SUB_PROCESS_START_ID, EventSubProcessModels.SIGNAL_NAME, EVENT_SUB_PROCESS_START_ID, "new" + EventSubProcessModels.SIGNAL_NAME); // and it is possible to successfully complete the migrated instance rule.getRuntimeService().signalEventReceived("new" + EventSubProcessModels.SIGNAL_NAME); testHelper.completeTask(EVENT_SUB_PROCESS_TASK_ID); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); }
@Test public void testMigrateEventSubscriptionUpdateSignalName() { // given ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(SignalCatchModels.ONE_SIGNAL_CATCH_PROCESS); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.newModel() .startEvent() .intermediateCatchEvent("signalCatch") .signal("new" + SignalCatchModels.SIGNAL_NAME) .userTask("userTask") .endEvent() .done()); MigrationPlan migrationPlan = rule.getRuntimeService() .createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities("signalCatch", "signalCatch") .updateEventTrigger() .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then the message event subscription's event name has not changed testHelper.assertEventSubscriptionMigrated( "signalCatch", SignalCatchModels.SIGNAL_NAME, "signalCatch", "new" + SignalCatchModels.SIGNAL_NAME); // and it is possible to trigger the event rule.getRuntimeService().signalEventReceived("new" + SignalCatchModels.SIGNAL_NAME); testHelper.completeTask("userTask"); testHelper.assertProcessEnded(processInstance.getId()); }
@Test public void testMigrateBoundaryEventOnUserTaskAndTriggerEvent() { // given BpmnModelInstance sourceProcess = ProcessModels.ONE_TASK_PROCESS.clone(); MigratingBpmnEventTrigger eventTrigger = eventFactory.addBoundaryEvent( rule.getProcessEngine(), sourceProcess, USER_TASK_ID, BOUNDARY_ID); ModifiableBpmnModelInstance.wrap(sourceProcess).flowNodeBuilder(BOUNDARY_ID) .userTask(AFTER_BOUNDARY_TASK) .endEvent() .done(); BpmnModelInstance targetProcess = modify(sourceProcess).changeElementId(BOUNDARY_ID, NEW_BOUNDARY_ID); ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(sourceProcess); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(targetProcess); MigrationPlan migrationPlan = rule.getRuntimeService().createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(USER_TASK_ID, USER_TASK_ID) .mapActivities(BOUNDARY_ID, NEW_BOUNDARY_ID).updateEventTrigger() .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then it is possible to trigger boundary event and successfully complete the migrated instance eventTrigger.inContextOf(NEW_BOUNDARY_ID).trigger(processInstance.getId()); testHelper.completeTask(AFTER_BOUNDARY_TASK); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); }
@Test public void testMigrateBoundaryEventToSubProcessAndTriggerEvent() { // given BpmnModelInstance sourceProcess = ProcessModels.SUBPROCESS_PROCESS.clone(); MigratingBpmnEventTrigger eventTrigger = eventFactory.addBoundaryEvent( rule.getProcessEngine(), sourceProcess, SUB_PROCESS_ID, BOUNDARY_ID); ModifiableBpmnModelInstance.wrap(sourceProcess).flowNodeBuilder(BOUNDARY_ID) .userTask(AFTER_BOUNDARY_TASK) .endEvent() .done(); BpmnModelInstance targetProcess = modify(sourceProcess).changeElementId(BOUNDARY_ID, NEW_BOUNDARY_ID); ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(sourceProcess); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(targetProcess); MigrationPlan migrationPlan = rule.getRuntimeService().createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(SUB_PROCESS_ID, SUB_PROCESS_ID) .mapActivities(USER_TASK_ID, USER_TASK_ID) .mapActivities(BOUNDARY_ID, NEW_BOUNDARY_ID).updateEventTrigger() .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then it is possible to trigger the event and successfully complete the migrated instance eventTrigger.inContextOf(NEW_BOUNDARY_ID).trigger(processInstance.getId()); testHelper.completeTask(AFTER_BOUNDARY_TASK); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); }
@Test public void testMigrateBoundaryEventToSubProcessWithScopeUserTaskAndTriggerEvent() { // given BpmnModelInstance sourceProcess = ProcessModels.SCOPE_TASK_SUBPROCESS_PROCESS.clone(); MigratingBpmnEventTrigger eventTrigger = eventFactory.addBoundaryEvent( rule.getProcessEngine(), sourceProcess, SUB_PROCESS_ID, BOUNDARY_ID); ModifiableBpmnModelInstance.wrap(sourceProcess).flowNodeBuilder(BOUNDARY_ID) .userTask(AFTER_BOUNDARY_TASK) .endEvent() .done(); BpmnModelInstance targetProcess = modify(sourceProcess).changeElementId(BOUNDARY_ID, NEW_BOUNDARY_ID); ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(sourceProcess); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(targetProcess); MigrationPlan migrationPlan = rule.getRuntimeService().createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(SUB_PROCESS_ID, SUB_PROCESS_ID) .mapActivities(USER_TASK_ID, USER_TASK_ID) .mapActivities(BOUNDARY_ID, NEW_BOUNDARY_ID).updateEventTrigger() .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then it is possible to trigger the event and successfully complete the migrated instance eventTrigger.inContextOf(NEW_BOUNDARY_ID).trigger(processInstance.getId()); testHelper.completeTask(AFTER_BOUNDARY_TASK); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); }
@Test public void testMigrateBoundaryEventOnConcurrentScopeUserTaskAndTriggerEvent() { // given BpmnModelInstance sourceProcess = ProcessModels.PARALLEL_SCOPE_TASKS.clone(); MigratingBpmnEventTrigger eventTrigger = eventFactory.addBoundaryEvent( rule.getProcessEngine(), sourceProcess, USER_TASK_1_ID, BOUNDARY_ID); ModifiableBpmnModelInstance.wrap(sourceProcess).flowNodeBuilder(BOUNDARY_ID) .userTask(AFTER_BOUNDARY_TASK) .endEvent() .done(); BpmnModelInstance targetProcess = modify(sourceProcess) .changeElementId("boundary", "newBoundary"); ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(sourceProcess); ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(targetProcess); MigrationPlan migrationPlan = rule.getRuntimeService().createMigrationPlan(sourceProcessDefinition.getId(), targetProcessDefinition.getId()) .mapActivities(USER_TASK_1_ID, USER_TASK_1_ID) .mapActivities(USER_TASK_2_ID, USER_TASK_2_ID) .mapActivities(BOUNDARY_ID, NEW_BOUNDARY_ID).updateEventTrigger() .build(); // when ProcessInstance processInstance = testHelper.createProcessInstanceAndMigrate(migrationPlan); // then it is possible to trigger the event and successfully complete the migrated instance eventTrigger.inContextOf(NEW_BOUNDARY_ID).trigger(processInstance.getId()); testHelper.completeTask(AFTER_BOUNDARY_TASK); testHelper.completeTask(USER_TASK_2_ID); testHelper.assertProcessEnded(testHelper.snapshotBeforeMigration.getProcessInstanceId()); }
.mapActivities(CONDITION_ID, NEW_CONDITION_ID).updateEventTrigger() .build();