public static TransitionInstanceDto fromTransitionInstance(TransitionInstance instance) { TransitionInstanceDto result = new TransitionInstanceDto(); result.id = instance.getId(); result.parentActivityInstanceId = instance.getParentActivityInstanceId(); result.activityId = instance.getActivityId(); result.activityName = instance.getActivityName(); result.activityType = instance.getActivityType(); result.processInstanceId = instance.getProcessInstanceId(); result.processDefinitionId = instance.getProcessDefinitionId(); result.executionId = instance.getExecutionId(); return result; }
protected void writeTransition(TransitionInstance transition, StringWriter writer, String prefix, boolean isTail) { writer.append(prefix); if(isTail) { writer.append("└── "); } else { writer.append("├── "); } writer.append("transition to/from " + transition.getActivityId() + ":" + transition.getId() + "\n"); }
@Override public void handle(MigratingInstanceParseContext parseContext, TransitionInstance transitionInstance) { if (!isAsyncTransitionInstance(transitionInstance)) { return; } MigrationInstruction applyingInstruction = parseContext.getInstructionFor(transitionInstance.getActivityId()); ScopeImpl sourceScope = parseContext.getSourceProcessDefinition().findActivity(transitionInstance.getActivityId()); ScopeImpl targetScope = null; if (applyingInstruction != null) { String activityId = applyingInstruction.getTargetActivityId(); targetScope = parseContext.getTargetProcessDefinition().findActivity(activityId); } ExecutionEntity asyncExecution = Context .getCommandContext() .getExecutionManager() .findExecutionById(transitionInstance.getExecutionId()); MigratingTransitionInstance migratingTransitionInstance = parseContext.getMigratingProcessInstance() .addTransitionInstance( applyingInstruction, transitionInstance, sourceScope, targetScope, asyncExecution); MigratingActivityInstance parentInstance = parseContext.getMigratingActivityInstanceById(transitionInstance.getParentActivityInstanceId()); migratingTransitionInstance.setParent(parentInstance); List<JobEntity> jobs = asyncExecution.getJobs(); parseContext.handleDependentTransitionInstanceJobs(migratingTransitionInstance, jobs); parseContext.handleDependentVariables(migratingTransitionInstance, collectTransitionInstanceVariables(migratingTransitionInstance)); }
/** * Workaround for CAM-5609: In general, only async continuations should be represented as TransitionInstances, but * due to this bug, completed multi-instances are represented like that as well. We tolerate the second case. */ protected boolean isAsyncTransitionInstance(TransitionInstance transitionInstance) { String executionId = transitionInstance.getExecutionId(); ExecutionEntity execution = Context.getCommandContext().getExecutionManager().findExecutionById(executionId); for (JobEntity job : execution.getJobs()) { if (AsyncContinuationJobHandler.TYPE.equals(job.getJobHandlerType())) { return true; } } return false; }
protected void collectTransitionInstances(String activityId, List<TransitionInstance> instances) { boolean instanceFound = false; for (TransitionInstance childTransitionInstance : childTransitionInstances) { if (activityId.equals(childTransitionInstance.getActivityId())) { instances.add(childTransitionInstance); instanceFound = true; } } if (!instanceFound) { for (ActivityInstance childActivityInstance : childActivityInstances) { ((ActivityInstanceImpl) childActivityInstance).collectTransitionInstances(activityId, instances); } } }
@Deployment @Test public void testTransitionInstanceActivityNamePropertyAfterTask() { // given String processInstanceId = runtimeService.startProcessInstanceByKey("process").getId(); // when ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId); // then TransitionInstance[] instances = tree.getTransitionInstances("firstServiceTask"); TransitionInstance task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityName()); assertEquals("First Service Task", task.getActivityName()); instances = tree.getTransitionInstances("secondServiceTask"); task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityName()); assertEquals("Second Service Task", task.getActivityName()); }
@Deployment(resources = "org/camunda/bpm/engine/test/api/runtime/RuntimeServiceTest.testTransitionInstanceActivityNamePropertyBeforeTask.bpmn20.xml") @Test public void testTransitionInstanceActivityTypePropertyBeforeTask() { // given String processInstanceId = runtimeService.startProcessInstanceByKey("process").getId(); // when ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId); // then TransitionInstance[] instances = tree.getTransitionInstances("firstServiceTask"); TransitionInstance task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityType()); assertEquals("serviceTask", task.getActivityType()); instances = tree.getTransitionInstances("secondServiceTask"); task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityType()); assertEquals("serviceTask", task.getActivityType()); }
protected void writeTransition(TransitionInstance transition, StringWriter writer, String prefix, boolean isTail) { writer.append(prefix); if(isTail) { writer.append("└── "); } else { writer.append("├── "); } writer.append("transition to/from " + transition.getActivityId() + ":" + transition.getId() + "\n"); }
/** * Workaround for CAM-5609: In general, only async continuations should be represented as TransitionInstances, but * due to this bug, completed multi-instances are represented like that as well. We tolerate the second case. */ protected boolean isAsyncTransitionInstance(TransitionInstance transitionInstance) { String executionId = transitionInstance.getExecutionId(); ExecutionEntity execution = Context.getCommandContext().getExecutionManager().findExecutionById(executionId); for (JobEntity job : execution.getJobs()) { if (AsyncContinuationJobHandler.TYPE.equals(job.getJobHandlerType())) { return true; } } return false; }
@Override public void handle(MigratingInstanceParseContext parseContext, TransitionInstance transitionInstance) { if (!isAsyncTransitionInstance(transitionInstance)) { return; } MigrationInstruction applyingInstruction = parseContext.getInstructionFor(transitionInstance.getActivityId()); ScopeImpl sourceScope = parseContext.getSourceProcessDefinition().findActivity(transitionInstance.getActivityId()); ScopeImpl targetScope = null; if (applyingInstruction != null) { String activityId = applyingInstruction.getTargetActivityId(); targetScope = parseContext.getTargetProcessDefinition().findActivity(activityId); } ExecutionEntity asyncExecution = Context .getCommandContext() .getExecutionManager() .findExecutionById(transitionInstance.getExecutionId()); MigratingTransitionInstance migratingTransitionInstance = parseContext.getMigratingProcessInstance() .addTransitionInstance( applyingInstruction, transitionInstance, sourceScope, targetScope, asyncExecution); MigratingActivityInstance parentInstance = parseContext.getMigratingActivityInstanceById(transitionInstance.getParentActivityInstanceId()); migratingTransitionInstance.setParent(parentInstance); List<JobEntity> jobs = asyncExecution.getJobs(); parseContext.handleDependentTransitionInstanceJobs(migratingTransitionInstance, jobs); parseContext.handleDependentVariables(migratingTransitionInstance, collectTransitionInstanceVariables(migratingTransitionInstance)); }
protected void collectTransitionInstances(String activityId, List<TransitionInstance> instances) { boolean instanceFound = false; for (TransitionInstance childTransitionInstance : childTransitionInstances) { if (activityId.equals(childTransitionInstance.getActivityId())) { instances.add(childTransitionInstance); instanceFound = true; } } if (!instanceFound) { for (ActivityInstance childActivityInstance : childActivityInstances) { ((ActivityInstanceImpl) childActivityInstance).collectTransitionInstances(activityId, instances); } } }
@Deployment @Test public void testTransitionInstanceActivityNamePropertyBeforeTask() { // given String processInstanceId = runtimeService.startProcessInstanceByKey("process").getId(); // when ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId); // then TransitionInstance[] instances = tree.getTransitionInstances("firstServiceTask"); TransitionInstance task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityName()); assertEquals("First Service Task", task.getActivityName()); instances = tree.getTransitionInstances("secondServiceTask"); task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityName()); assertEquals("Second Service Task", task.getActivityName()); }
@Deployment(resources = "org/camunda/bpm/engine/test/api/runtime/RuntimeServiceTest.testTransitionInstanceActivityNamePropertyAfterTask.bpmn20.xml") @Test public void testTransitionInstanceActivityTypePropertyAfterTask() { // given String processInstanceId = runtimeService.startProcessInstanceByKey("process").getId(); // when ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId); // then TransitionInstance[] instances = tree.getTransitionInstances("firstServiceTask"); TransitionInstance task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityType()); assertEquals("serviceTask", task.getActivityType()); instances = tree.getTransitionInstances("secondServiceTask"); task = instances[0]; assertNotNull(task); assertNotNull(task.getActivityType()); assertEquals("serviceTask", task.getActivityType()); }
public static TransitionInstanceDto fromTransitionInstance(TransitionInstance instance) { TransitionInstanceDto result = new TransitionInstanceDto(); result.id = instance.getId(); result.parentActivityInstanceId = instance.getParentActivityInstanceId(); result.activityId = instance.getActivityId(); result.activityName = instance.getActivityName(); result.activityType = instance.getActivityType(); result.processInstanceId = instance.getProcessInstanceId(); result.processDefinitionId = instance.getProcessDefinitionId(); result.executionId = instance.getExecutionId(); return result; }
public MigratingTransitionInstanceValidationReportImpl(MigratingTransitionInstance migratingTransitionInstance) { this.transitionInstanceId = migratingTransitionInstance.getTransitionInstance().getId(); this.sourceScopeId = migratingTransitionInstance.getSourceScope().getId(); this.migrationInstruction = migratingTransitionInstance.getMigrationInstruction(); }
@Deployment @Test public void testGetTransitionInstancesForActivity() { // given ProcessInstance instance = runtimeService.startProcessInstanceByKey("miSubprocess"); // complete one async task Job job = managementService.createJobQuery().listPage(0, 1).get(0); managementService.executeJob(job.getId()); Task task = taskService.createTaskQuery().singleResult(); taskService.complete(task.getId()); // when ActivityInstance tree = runtimeService.getActivityInstance(instance.getId()); // then assertEquals(0, tree.getTransitionInstances("subProcess").length); TransitionInstance[] asyncBeforeInstances = tree.getTransitionInstances("innerTask"); assertEquals(2, asyncBeforeInstances.length); assertEquals("innerTask", asyncBeforeInstances[0].getActivityId()); assertEquals("innerTask", asyncBeforeInstances[1].getActivityId()); assertFalse(asyncBeforeInstances[0].getId().equals(asyncBeforeInstances[1].getId())); TransitionInstance[] asyncEndEventInstances = tree.getTransitionInstances("theSubProcessEnd"); assertEquals(1, asyncEndEventInstances.length); assertEquals("theSubProcessEnd", asyncEndEventInstances[0].getActivityId()); }
protected ExecutionEntity determineSourceInstanceExecution(final CommandContext commandContext) { ActivityInstance instance = commandContext.runWithoutAuthorization(new Callable<ActivityInstance>() { public ActivityInstance call() throws Exception { return new GetActivityInstanceCmd(processInstanceId).execute(commandContext); } }); TransitionInstance instanceToCancel = findTransitionInstance(instance, transitionInstanceId); EnsureUtil.ensureNotNull(NotValidException.class, describeFailure("Transition instance '" + transitionInstanceId + "' does not exist"), "transitionInstance", instanceToCancel); ExecutionEntity transitionExecution = commandContext.getExecutionManager().findExecutionById(instanceToCancel.getExecutionId()); return transitionExecution; }
@Override public void handle(MigratingInstanceParseContext parseContext, TransitionInstance transitionInstance) { if (!isAsyncTransitionInstance(transitionInstance)) { return; } MigrationInstruction applyingInstruction = parseContext.getInstructionFor(transitionInstance.getActivityId()); ScopeImpl sourceScope = parseContext.getSourceProcessDefinition().findActivity(transitionInstance.getActivityId()); ScopeImpl targetScope = null; if (applyingInstruction != null) { String activityId = applyingInstruction.getTargetActivityId(); targetScope = parseContext.getTargetProcessDefinition().findActivity(activityId); } ExecutionEntity asyncExecution = Context .getCommandContext() .getExecutionManager() .findExecutionById(transitionInstance.getExecutionId()); MigratingTransitionInstance migratingTransitionInstance = parseContext.getMigratingProcessInstance() .addTransitionInstance( applyingInstruction, transitionInstance, sourceScope, targetScope, asyncExecution); MigratingActivityInstance parentInstance = parseContext.getMigratingActivityInstanceById(transitionInstance.getParentActivityInstanceId()); migratingTransitionInstance.setParent(parentInstance); List<JobEntity> jobs = asyncExecution.getJobs(); parseContext.handleDependentTransitionInstanceJobs(migratingTransitionInstance, jobs); parseContext.handleDependentVariables(migratingTransitionInstance, collectTransitionInstanceVariables(migratingTransitionInstance)); }