Пример #1
0
  @Test
  public void testGetActivityAttributesRemainingTime() throws Exception {
    ManagementAPI managementAPI = AccessorUtil.getManagementAPI();

    ProcessDefinition simpleProcess =
        ProcessBuilder.createProcess("simple_process", "1.0")
            .addHuman("john")
            .addHumanTask("task1", "john")
            .addActivityExecutingTime(100000000L)
            .done();

    BusinessArchive businessArchive = BusinessArchiveFactory.getBusinessArchive(simpleProcess);
    simpleProcess = managementAPI.deploy(businessArchive);

    ProcessInstanceUUID processInstanceUUID =
        AccessorUtil.getRuntimeAPI().instantiateProcess(simpleProcess.getUUID());

    try {
      Collection<TaskInstance> tasks =
          AccessorUtil.getQueryRuntimeAPI().getTaskList(processInstanceUUID, ActivityState.READY);
      ActivityInstanceUUID uuid = null;
      for (TaskInstance activityInstance : tasks) {
        uuid = activityInstance.getUUID();
      }
      Assert.assertNotNull(uuid);

      IFormWorkflowAPI api = FormAPIFactory.getFormWorkflowAPI();
      String remainingTime =
          (String)
              api.getAttributes(uuid, Locale.ENGLISH).get(ActivityAttribute.remainingTime.name());
      Assert.assertTrue(remainingTime.contains("1day 3hours"));
    } finally {
      AccessorUtil.getManagementAPI().deleteProcess(simpleProcess.getUUID());
    }
  }
Пример #2
0
  public void testGroovyNumber() throws Exception {
    ProcessDefinition definition =
        ProcessBuilder.createProcess("mulitple", "1.0")
            .addHuman(getLogin())
            .addHumanTask("multi", getLogin())
            .addMultipleActivitiesInstantiator(FixedNumberInstantiator.class.getName())
            .addInputParameter("activityNumber", 10)
            .addMultipleActivitiesJoinChecker(FixedNumberJoinChecker.class.getName())
            .addInputParameter("activityNumber", 3)
            .addHumanTask("next", getLogin())
            .addTransition("multi", "next")
            .done();

    definition =
        getManagementAPI()
            .deploy(
                getBusinessArchive(
                    definition, null, FixedNumberInstantiator.class, FixedNumberJoinChecker.class));
    ProcessInstanceUUID instanceUUID = getRuntimeAPI().instantiateProcess(definition.getUUID());
    Collection<TaskInstance> tasks =
        getQueryRuntimeAPI().getTaskList(getLogin(), ActivityState.READY);
    assertEquals(10, tasks.size());
    Iterator<TaskInstance> iterator = tasks.iterator();
    for (int i = 0; i < 3; i++) {
      TaskInstance task = iterator.next();
      executeTask(instanceUUID, task.getActivityName());
    }
    tasks = getQueryRuntimeAPI().getTaskList(getLogin(), ActivityState.READY);
    assertEquals(1, tasks.size());
    assertEquals("next", tasks.iterator().next().getActivityName());
    getManagementAPI().deleteProcess(definition.getUUID());
  }
Пример #3
0
  public void testGetNumberOfCommendFeed() throws Exception {
    ProcessDefinition definition =
        ProcessBuilder.createProcess("feed", "1.0")
            .addHuman(getLogin())
            .addHumanTask("sala", getLogin())
            .done();
    definition = getManagementAPI().deploy(getBusinessArchive(definition));

    ProcessInstanceUUID instanceUUID = getRuntimeAPI().instantiateProcess(definition.getUUID());
    getRuntimeAPI().addComment(instanceUUID, "This is a process instance comment", "john");
    getRuntimeAPI().addComment(instanceUUID, "This is another process instance comment", "jack");

    Set<TaskInstance> tasks = getQueryRuntimeAPI().getTasks(instanceUUID);
    TaskInstance task = tasks.iterator().next();

    getRuntimeAPI().addComment(task.getUUID(), "This is an activity instance comment", "jack");
    getRuntimeAPI().addComment(task.getUUID(), "This is another activity instance comment", "jane");
    getRuntimeAPI().addComment(task.getUUID(), "This is my activity instance comment", "john");

    assertEquals(3, getQueryRuntimeAPI().getNumberOfActivityInstanceComments(task.getUUID()));
    assertEquals(2, getQueryRuntimeAPI().getNumberOfProcessInstanceComments(instanceUUID));
    assertEquals(5, getQueryRuntimeAPI().getNumberOfComments(instanceUUID));

    getManagementAPI().deleteProcess(definition.getUUID());
  }
Пример #4
0
 @Test
 public void testExecuteTaskActions() throws Exception {
   IFormWorkflowAPI api = FormAPIFactory.getFormWorkflowAPI();
   QueryRuntimeAPI queryRuntimeAPI = AccessorUtil.getQueryRuntimeAPI();
   Collection<TaskInstance> tasks =
       queryRuntimeAPI.getTaskList(processInstanceUUID, ActivityState.READY);
   for (TaskInstance activityInstance : tasks) {
     ActivityInstanceUUID uuid = activityInstance.getUUID();
     Map<String, FormFieldValue> fieldValues = new HashMap<String, FormFieldValue>();
     FormFieldValue value1 = new FormFieldValue("Excel", String.class.getName());
     fieldValues.put("fieldId1", value1);
     List<FormAction> formActions = new ArrayList<FormAction>();
     formActions.add(
         new FormAction(
             ActionType.SET_VARIABLE,
             "Applications",
             "APPLICATION",
             "field_fieldId1",
             "submitButtonId"));
     api.executeActions(uuid, fieldValues, formActions, Locale.ENGLISH);
   }
   Object variableValue =
       queryRuntimeAPI.getProcessInstanceVariable(processInstanceUUID, "Applications");
   Assert.assertEquals("Excel", variableValue.toString());
 }
Пример #5
0
 @Test
 public void testGetTaskEditState() throws Exception {
   QueryRuntimeAPI queryRuntimeAPI = AccessorUtil.getQueryRuntimeAPI();
   RuntimeAPI runtimeAPI = AccessorUtil.getRuntimeAPI();
   Collection<TaskInstance> tasks =
       queryRuntimeAPI.getTaskList(processInstanceUUID, ActivityState.READY);
   ActivityInstanceUUID uuid = null;
   for (TaskInstance activityInstance : tasks) {
     uuid = activityInstance.getUUID();
   }
   Assert.assertNotNull(uuid);
   IFormWorkflowAPI api = FormAPIFactory.getFormWorkflowAPI();
   Assert.assertEquals(ActivityEditState.EDITABLE, api.getTaskEditState(uuid));
   runtimeAPI.suspendTask(uuid, true);
   Assert.assertEquals(ActivityEditState.SUSPENDED, api.getTaskEditState(uuid));
   runtimeAPI.resumeTask(uuid, true);
   runtimeAPI.executeTask(uuid, true);
   Assert.assertEquals(ActivityEditState.NOT_EDITABLE, api.getTaskEditState(uuid));
   tasks = queryRuntimeAPI.getTaskList(processInstanceUUID, ActivityState.READY);
   for (TaskInstance activityInstance : tasks) {
     uuid = activityInstance.getUUID();
   }
   runtimeAPI.cancelProcessInstance(processInstanceUUID);
   Assert.assertEquals(ActivityEditState.CANCELED, api.getTaskEditState(uuid));
 }
Пример #6
0
  @Test
  public void testGetActivityAttachmentFileName() throws Exception {
    RuntimeAPI runtimeAPI = AccessorUtil.getRuntimeAPI();
    ManagementAPI managementAPI = AccessorUtil.getManagementAPI();
    QueryRuntimeAPI queryRuntimeAPI = AccessorUtil.getQueryRuntimeAPI();

    File attachmentFile = File.createTempFile("attachment-test", ".txt");
    FileOutputStream fileOutputStream = new FileOutputStream(attachmentFile);
    fileOutputStream.write("test".getBytes("UTF-8"));
    fileOutputStream.close();

    ProcessDefinition attachmentProcess =
        ProcessBuilder.createProcess("attachment_process", "1.0")
            .addAttachment("attachment", attachmentFile.getPath(), attachmentFile.getName())
            .addHuman("john")
            .addHumanTask("task1", "john")
            .addHumanTask("task2", "john")
            .addTransition("transition", "task1", "task2")
            .done();

    BusinessArchive businessArchive = BusinessArchiveFactory.getBusinessArchive(attachmentProcess);
    attachmentProcess = managementAPI.deploy(businessArchive);

    ProcessInstanceUUID instanceUUID = runtimeAPI.instantiateProcess(attachmentProcess.getUUID());

    try {
      IFormWorkflowAPI api = FormAPIFactory.getFormWorkflowAPI();
      ActivityInstanceUUID activityInstanceUUID = null;
      Collection<TaskInstance> tasks =
          queryRuntimeAPI.getTaskList(instanceUUID, ActivityState.READY);
      for (TaskInstance activityInstance : tasks) {
        activityInstanceUUID = activityInstance.getUUID();
      }
      Assert.assertNotNull(activityInstanceUUID);
      String fileName = api.getAttachmentFileName(activityInstanceUUID, "${attachment}", true);
      Assert.assertEquals(attachmentFile.getName(), fileName);

      runtimeAPI.executeTask(activityInstanceUUID, true);
      fileName = api.getAttachmentFileName(activityInstanceUUID, "${attachment}", true);
      Assert.assertEquals(attachmentFile.getName(), fileName);

      File attachmentFile2 = File.createTempFile("new-attachment-test", ".txt");
      tasks = queryRuntimeAPI.getTaskList(instanceUUID, ActivityState.READY);
      for (TaskInstance activityInstance : tasks) {
        activityInstanceUUID = activityInstance.getUUID();
      }
      Assert.assertNotNull(activityInstanceUUID);
      runtimeAPI.addAttachment(
          instanceUUID, "attachment", attachmentFile2.getName(), "test".getBytes("UTF-8"));
      fileName = api.getAttachmentFileName(activityInstanceUUID, "${attachment}", true);
      Assert.assertEquals(attachmentFile2.getName(), fileName);
    } finally {
      AccessorUtil.getCommandAPI()
          .execute(new WebDeleteDocumentsOfProcessCommand(attachmentProcess.getUUID(), true));
      AccessorUtil.getRuntimeAPI().deleteProcessInstance(instanceUUID);
      AccessorUtil.getCommandAPI()
          .execute(new WebDeleteProcessCommand(attachmentProcess.getUUID()));
    }
  }
Пример #7
0
  public void testSimpleTimerHumanWithConnectorOnFinish() throws Exception {
    ProcessDefinition process =
        ProcessBuilder.createProcess("p", "d")
            .addStringData("var")
            .addHuman(getLogin())
            .addSystemTask("start")
            .addHumanTask("human", getLogin())
            .addConnector(Event.taskOnFinish, SetVarConnector.class.getName(), true)
            .addInputParameter("variableName", "var")
            .addInputParameter("value", "human")
            .addTimerTask("timer", "${new Date(System.currentTimeMillis() + 10)}")
            .addConnector(Event.onTimer, SetVarConnector.class.getName(), true)
            .addInputParameter("variableName", "var")
            .addInputParameter("value", "timer")
            .addDecisionNode("join")
            .addJoinType(JoinType.AND)
            .addTransition("start", "human")
            .addTransition("start", "timer")
            .addTransition("human", "join")
            .addTransition("timer", "join")
            .done();

    process = getManagementAPI().deploy(getBusinessArchive(process, null, SetVarConnector.class));
    final ProcessDefinitionUUID processUUID = process.getUUID();

    final ProcessInstanceUUID instanceUUID = getRuntimeAPI().instantiateProcess(processUUID);

    assertEquals(
        InstanceState.STARTED,
        getQueryRuntimeAPI().getProcessInstance(instanceUUID).getInstanceState());

    // wait the timer is executed so the connector is executed to
    Thread.sleep(2000);

    Collection<TaskInstance> tasks = getQueryRuntimeAPI().getTaskList(ActivityState.READY);
    assertEquals(1, tasks.size());
    final TaskInstance human = tasks.iterator().next();
    assertEquals("human", human.getActivityName());
    getRuntimeAPI().executeTask(human.getUUID(), true);

    this.waitForInstanceEnd(5000, 10, instanceUUID);

    assertEquals(
        InstanceState.FINISHED,
        getQueryRuntimeAPI().getProcessInstance(instanceUUID).getInstanceState());

    checkExecutedOnce(instanceUUID, "timer");
    checkExecutedOnce(instanceUUID, "human");

    assertEquals("human", getQueryRuntimeAPI().getProcessInstanceVariable(instanceUUID, "var"));

    getManagementAPI().deleteProcess(processUUID);
  }
Пример #8
0
 @Test
 public void testGetTaskFieldValue() throws Exception {
   IFormWorkflowAPI api = FormAPIFactory.getFormWorkflowAPI();
   QueryRuntimeAPI queryRuntimeAPI = AccessorUtil.getQueryRuntimeAPI();
   Collection<TaskInstance> tasks =
       queryRuntimeAPI.getTaskList(processInstanceUUID, ActivityState.READY);
   Object result = null;
   for (TaskInstance activityInstance : tasks) {
     ActivityInstanceUUID uuid = activityInstance.getUUID();
     result = api.getFieldValue(uuid, "${Applications}", Locale.ENGLISH, true);
   }
   Assert.assertNotNull(result);
   Assert.assertEquals("Word", result);
 }
Пример #9
0
 @Test
 public void testIsTaskOver() throws Exception {
   QueryRuntimeAPI queryRuntimeAPI = AccessorUtil.getQueryRuntimeAPI();
   RuntimeAPI runtimeAPI = AccessorUtil.getRuntimeAPI();
   Collection<TaskInstance> tasks =
       queryRuntimeAPI.getTaskList(processInstanceUUID, ActivityState.READY);
   ActivityInstanceUUID uuid = null;
   for (TaskInstance activityInstance : tasks) {
     uuid = activityInstance.getUUID();
   }
   Assert.assertNotNull(uuid);
   runtimeAPI.executeTask(uuid, true);
   IFormWorkflowAPI api = FormAPIFactory.getFormWorkflowAPI();
   Assert.assertTrue(api.isTaskOver(uuid));
 }
Пример #10
0
 @Test
 public void testGetProcessInstanceNextTask() throws Exception {
   QueryRuntimeAPI queryRuntimeAPI = AccessorUtil.getQueryRuntimeAPI();
   RuntimeAPI runtimeAPI = AccessorUtil.getRuntimeAPI();
   Collection<TaskInstance> tasks =
       queryRuntimeAPI.getTaskList(processInstanceUUID, ActivityState.READY);
   ActivityInstanceUUID uuid = null;
   for (TaskInstance activityInstance : tasks) {
     uuid = activityInstance.getUUID();
   }
   Assert.assertNotNull(uuid);
   runtimeAPI.executeTask(uuid, true);
   IFormWorkflowAPI api = FormAPIFactory.getFormWorkflowAPI();
   ActivityInstanceUUID activityInstanceUUID =
       api.getProcessInstanceNextTask(uuid.getProcessInstanceUUID());
   Assert.assertEquals("Approval", activityInstanceUUID.getActivityName());
 }
Пример #11
0
  public void testGetProcessInstanceCommentFeed() throws Exception {
    ProcessDefinition definition =
        ProcessBuilder.createProcess("feed", "1.0")
            .addHuman(getLogin())
            .addHumanTask("sala", getLogin())
            .done();
    definition = getManagementAPI().deploy(getBusinessArchive(definition));

    ProcessInstanceUUID instanceUUID = getRuntimeAPI().instantiateProcess(definition.getUUID());

    Set<TaskInstance> tasks = getQueryRuntimeAPI().getTasks(instanceUUID);
    TaskInstance task = tasks.iterator().next();

    getRuntimeAPI().addComment(instanceUUID, "This is a process instance comment", "john");
    Thread.sleep(2000);
    getRuntimeAPI().addComment(task.getUUID(), "This is an activity instance comment", "jack");
    Thread.sleep(2000);
    getRuntimeAPI().addComment(task.getUUID(), "This is another activity instance comment", "jane");
    Thread.sleep(2000);
    getRuntimeAPI().addComment(instanceUUID, "This is another process instance comment", "jack");
    Thread.sleep(2000);
    getRuntimeAPI().addComment(task.getUUID(), "This is my activity instance comment", "john");

    List<Comment> comments = getQueryRuntimeAPI().getProcessInstanceCommentFeed(instanceUUID);
    assertEquals(2, comments.size());

    CommentImpl instanceComment1 = new CommentImpl(comments.get(0));
    assertEquals("This is a process instance comment", instanceComment1.getMessage());
    assertEquals("john", instanceComment1.getUserId());
    assertNotNull(instanceComment1.getDate());
    assertEquals(null, instanceComment1.getActivityUUID());

    CommentImpl instanceComment2 = new CommentImpl(comments.get(1));
    assertEquals("This is another process instance comment", instanceComment2.getMessage());
    assertEquals("jack", instanceComment2.getUserId());
    assertNotNull(instanceComment2.getDate());
    assertEquals(null, instanceComment2.getActivityUUID());

    assertTrue(equalsOrBefore(instanceComment1.getDate(), instanceComment2.getDate()));

    getManagementAPI().deleteProcess(definition.getUUID());
  }
Пример #12
0
  public void testSimpleTimerHumanTask() throws Exception {
    ProcessDefinition process =
        ProcessBuilder.createProcess("p", "d")
            .addHuman(getLogin())
            .addSystemTask("start")
            .addHumanTask("human", getLogin())
            .addTimerTask("timer", "${new Date(System.currentTimeMillis() + 1000)}")
            .addDecisionNode("join")
            .addJoinType(JoinType.AND)
            .addTransition("start", "human")
            .addTransition("start", "timer")
            .addTransition("human", "join")
            .addTransition("timer", "join")
            .done();

    process = getManagementAPI().deploy(getBusinessArchive(process));
    final ProcessDefinitionUUID processUUID = process.getUUID();
    final ProcessInstanceUUID instanceUUID = getRuntimeAPI().instantiateProcess(processUUID);
    assertEquals(
        InstanceState.STARTED,
        getQueryRuntimeAPI().getProcessInstance(instanceUUID).getInstanceState());

    Collection<TaskInstance> tasks = getQueryRuntimeAPI().getTaskList(ActivityState.READY);
    assertEquals(1, tasks.size());
    final TaskInstance human = tasks.iterator().next();
    assertEquals("human", human.getActivityName());

    getRuntimeAPI().executeTask(human.getUUID(), true);

    Thread.sleep(300);
    this.waitForInstanceEnd(5000, 10, instanceUUID);
    assertEquals(
        InstanceState.FINISHED,
        getQueryRuntimeAPI().getProcessInstance(instanceUUID).getInstanceState());
    checkExecutedOnce(instanceUUID, "human", "timer");
    assertEquals(
        InstanceState.FINISHED,
        getQueryRuntimeAPI().getProcessInstance(instanceUUID).getInstanceState());

    getManagementAPI().deleteProcess(processUUID);
  }
Пример #13
0
 @Test
 public void testExecuteActionsAndTerminateWithAPIAccessor() throws Exception {
   IFormWorkflowAPI api = FormAPIFactory.getFormWorkflowAPI();
   QueryRuntimeAPI queryRuntimeAPI = AccessorUtil.getQueryRuntimeAPI();
   Collection<TaskInstance> tasks =
       queryRuntimeAPI.getTaskList(processInstanceUUID, ActivityState.READY);
   for (TaskInstance activityInstance : tasks) {
     ActivityInstanceUUID uuid = activityInstance.getUUID();
     Map<String, FormFieldValue> fieldValues = new HashMap<String, FormFieldValue>();
     List<FormAction> formActions = new ArrayList<FormAction>();
     formActions.add(
         new FormAction(
             ActionType.EXECUTE_SCRIPT,
             "Applications",
             "APPLICATION",
             "${" + BonitaConstants.API_ACCESSOR + ".getManagementAPI()}",
             "submitButtonId"));
     // api.executeActionsAndTerminate(uuid, fieldValues, formActions, Locale.ENGLISH,
     // "submitButtonId", new HashMap<String, Object>());
   }
 }
Пример #14
0
  public void testSimpleTimerXOR() throws Exception {
    final long aDay = 1 * 1000 * 60 * 60 * 24;
    ProcessDefinition process =
        ProcessBuilder.createProcess("p", "d")
            .addHuman(getLogin())
            .addSystemTask("start")
            .addHumanTask("human", getLogin())
            .addTimerTask("timer", Long.toString(aDay))
            .addDecisionNode("join")
            .addJoinType(JoinType.XOR)
            .addTransition("start", "human")
            .addTransition("start", "timer")
            .addTransition("human", "join")
            .addTransition("timer", "join")
            .done();

    process = getManagementAPI().deploy(getBusinessArchive(process, null));
    final ProcessDefinitionUUID processUUID = process.getUUID();
    final ProcessInstanceUUID instanceUUID = getRuntimeAPI().instantiateProcess(processUUID);

    assertEquals(
        InstanceState.STARTED,
        getQueryRuntimeAPI().getProcessInstance(instanceUUID).getInstanceState());

    Collection<TaskInstance> tasks = getQueryRuntimeAPI().getTaskList(ActivityState.READY);
    assertEquals(1, tasks.size());
    final TaskInstance human = tasks.iterator().next();
    assertEquals("human", human.getActivityName());

    executeTask(instanceUUID, "human");
    ProcessInstance instance = getQueryRuntimeAPI().getProcessInstance(instanceUUID);
    assertEquals(InstanceState.FINISHED, instance.getInstanceState());
    checkExecutedOnce(instanceUUID, "human");

    getManagementAPI().deleteProcess(processUUID);
  }
Пример #15
0
  @Test
  public void testGetActivityAttributesCandidates() throws Exception {
    QueryRuntimeAPI queryRuntimeAPI = AccessorUtil.getQueryRuntimeAPI();
    RuntimeAPI runtimeAPI = AccessorUtil.getRuntimeAPI();
    Collection<TaskInstance> tasks =
        queryRuntimeAPI.getTaskList(processInstanceUUID, ActivityState.READY);
    ActivityInstanceUUID uuid = null;
    for (TaskInstance activityInstance : tasks) {
      uuid = activityInstance.getUUID();
    }
    Assert.assertNotNull(uuid);
    runtimeAPI.executeTask(uuid, true);
    tasks = queryRuntimeAPI.getTaskList(processInstanceUUID, ActivityState.READY);
    for (TaskInstance activityInstance : tasks) {
      uuid = activityInstance.getUUID();
    }
    Assert.assertNotNull(uuid);

    IFormWorkflowAPI api = FormAPIFactory.getFormWorkflowAPI();
    String candidates =
        (String) api.getAttributes(uuid, Locale.ENGLISH).get(ActivityAttribute.candidates.name());
    Assert.assertTrue(candidates.contains("john"));
    Assert.assertTrue(candidates.contains("jack"));
  }
Пример #16
0
  @Test
  public void testGetSubprocessLoopNextTask() throws Exception {
    RuntimeAPI runtimeAPI = AccessorUtil.getRuntimeAPI();
    ManagementAPI managementAPI = AccessorUtil.getManagementAPI();
    QueryRuntimeAPI queryRuntimeAPI = AccessorUtil.getQueryRuntimeAPI();
    IFormWorkflowAPI api = FormAPIFactory.getFormWorkflowAPI();

    ProcessDefinition childProcess =
        ProcessBuilder.createProcess("sub_process", "1.0")
            .addIntegerData("counter")
            .addHuman("john")
            .addHumanTask("task1", "john")
            .addHumanTask("task2", "john")
            .addConnector(Event.taskOnFinish, SetVarConnector.class.getName(), true)
            .addInputParameter("variableName", "counter")
            .addInputParameter("value", "${++counter}")
            .addTransition("transition1", "task1", "task2")
            .done();

    ProcessDefinition processWithSubProcess =
        ProcessBuilder.createProcess("parent_process", "1.0")
            .addHuman("john")
            .addIntegerData("counter", 0)
            .addSubProcess("subprocess", "sub_process")
            .addSubProcessInParameter("counter", "counter")
            .addSubProcessOutParameter("counter", "counter")
            .addLoop("counter < 10", false)
            .addHumanTask("task3", "john")
            .addTransition("transition2", "subprocess", "task3")
            .done();

    BusinessArchive childBusinessArchive = BusinessArchiveFactory.getBusinessArchive(childProcess);
    childProcess = managementAPI.deploy(childBusinessArchive);

    BusinessArchive parentBusinessArchive =
        BusinessArchiveFactory.getBusinessArchive(processWithSubProcess);
    processWithSubProcess = managementAPI.deploy(parentBusinessArchive);

    ProcessInstanceUUID processInstanceUUID =
        runtimeAPI.instantiateProcess(processWithSubProcess.getUUID());

    try {
      for (int i = 0; i < 10; i++) {
        Set<ActivityInstance> activityInstances =
            queryRuntimeAPI.getActivityInstances(processInstanceUUID);
        Assert.assertEquals(i + 1, activityInstances.size());
        for (ActivityInstance activityInstance : activityInstances) {
          Assert.assertEquals("subprocess", activityInstance.getActivityName());
        }

        ProcessInstance processInstance = queryRuntimeAPI.getProcessInstance(processInstanceUUID);
        Set<ProcessInstanceUUID> childrenInstanceUUID = processInstance.getChildrenInstanceUUID();
        for (ProcessInstanceUUID childInstanceUUID : childrenInstanceUUID) {
          ProcessInstance childInstance = queryRuntimeAPI.getProcessInstance(childInstanceUUID);
          if (InstanceState.STARTED.equals(childInstance.getInstanceState())) {
            Collection<TaskInstance> taskInstances =
                queryRuntimeAPI.getTaskList(childInstanceUUID, ActivityState.READY);
            Assert.assertEquals(1, taskInstances.size());
            TaskInstance childTaskInstance = taskInstances.iterator().next();
            Assert.assertEquals("task1", childTaskInstance.getActivityName());
            Assert.assertEquals(ActivityState.READY, childTaskInstance.getState());
            runtimeAPI.executeTask(childTaskInstance.getUUID(), true);

            taskInstances = queryRuntimeAPI.getTaskList(childInstanceUUID, ActivityState.READY);
            Assert.assertEquals(1, taskInstances.size());
            childTaskInstance = taskInstances.iterator().next();
            Assert.assertEquals("task2", childTaskInstance.getActivityName());
            Assert.assertEquals(ActivityState.READY, childTaskInstance.getState());
            runtimeAPI.executeTask(childTaskInstance.getUUID(), true);

            if (i < 9) {
              ActivityInstanceUUID activityInstanceUUID =
                  api.getRelatedProcessesNextTask(childInstance.getUUID());
              Assert.assertEquals("task1", activityInstanceUUID.getActivityName());
            }

            childInstance = queryRuntimeAPI.getProcessInstance(childInstanceUUID);
            Assert.assertEquals(InstanceState.FINISHED, childInstance.getInstanceState());
          }
        }
      }

      Collection<TaskInstance> taskInstances =
          queryRuntimeAPI.getTaskList(processInstanceUUID, ActivityState.READY);
      Assert.assertEquals(1, taskInstances.size());
      TaskInstance taskInstance = taskInstances.iterator().next();
      Assert.assertEquals("task3", taskInstance.getActivityName());
      Assert.assertEquals(ActivityState.READY, taskInstance.getState());
      runtimeAPI.executeTask(taskInstance.getUUID(), true);
    } finally {
      managementAPI.deleteProcess(processWithSubProcess.getUUID());
      managementAPI.deleteProcess(childProcess.getUUID());
    }
  }
Пример #17
0
  @Test
  public void testIterateOnSubProcess() throws Exception {
    ProcessDefinition subProcess = buildSubProcess();
    ProcessDefinition processWithSubProcess = buildIterationProcess();

    ProcessInstanceUUID processInstanceUUID =
        AccessorUtil.getRuntimeAPI().instantiateProcess(processWithSubProcess.getUUID());

    try {
      Collection<TaskInstance> taskInstances =
          AccessorUtil.getQueryRuntimeAPI().getTaskList(processInstanceUUID, ActivityState.READY);
      Assert.assertEquals(1, taskInstances.size());
      AccessorUtil.getRuntimeAPI().executeTask(taskInstances.iterator().next().getUUID(), true);

      IFormWorkflowAPI api = FormAPIFactory.getFormWorkflowAPI();

      TaskInstance subprocessTaskInstance = null;

      taskInstances = AccessorUtil.getQueryRuntimeAPI().getTaskList(ActivityState.READY);
      for (TaskInstance taskInstance : taskInstances) {
        if (subProcess.getUUID().equals(taskInstance.getProcessDefinitionUUID())) {
          subprocessTaskInstance = taskInstance;
        }
      }
      Assert.assertNotNull(subprocessTaskInstance);
      Assert.assertEquals("task1sub", subprocessTaskInstance.getActivityName());
      AccessorUtil.getRuntimeAPI().executeTask(subprocessTaskInstance.getUUID(), true);
      Assert.assertNotNull(
          api.getRelatedProcessesNextTask(subprocessTaskInstance.getProcessInstanceUUID()));

      subprocessTaskInstance = null;

      taskInstances = AccessorUtil.getQueryRuntimeAPI().getTaskList(ActivityState.READY);
      for (TaskInstance taskInstance : taskInstances) {
        if (subProcess.getUUID().equals(taskInstance.getProcessDefinitionUUID())) {
          subprocessTaskInstance = taskInstance;
        }
      }
      Assert.assertNotNull(subprocessTaskInstance);
      Assert.assertEquals("task1sub", subprocessTaskInstance.getActivityName());
      AccessorUtil.getRuntimeAPI().executeTask(subprocessTaskInstance.getUUID(), true);
      Assert.assertNotNull(
          api.getRelatedProcessesNextTask(subprocessTaskInstance.getProcessInstanceUUID()));

      subprocessTaskInstance = null;

      taskInstances = AccessorUtil.getQueryRuntimeAPI().getTaskList(ActivityState.READY);
      for (TaskInstance taskInstance : taskInstances) {
        if (subProcess.getUUID().equals(taskInstance.getProcessDefinitionUUID())) {
          subprocessTaskInstance = taskInstance;
        }
      }
      Assert.assertNotNull(subprocessTaskInstance);
      Assert.assertEquals("task1sub", subprocessTaskInstance.getActivityName());
      AccessorUtil.getRuntimeAPI()
          .setVariable(subprocessTaskInstance.getUUID(), "terminateit", true);
      AccessorUtil.getRuntimeAPI().executeTask(subprocessTaskInstance.getUUID(), true);
      Assert.assertNotNull(
          api.getRelatedProcessesNextTask(subprocessTaskInstance.getProcessInstanceUUID()));

      TaskInstance processTaskInstance = null;

      taskInstances = AccessorUtil.getQueryRuntimeAPI().getTaskList(ActivityState.READY);
      for (TaskInstance taskInstance : taskInstances) {
        if (processWithSubProcess.getUUID().equals(taskInstance.getProcessDefinitionUUID())) {
          processTaskInstance = taskInstance;
        }
      }
      Assert.assertNotNull(processTaskInstance);
      Assert.assertEquals("task2", processTaskInstance.getActivityName());
      AccessorUtil.getRuntimeAPI().executeTask(processTaskInstance.getUUID(), true);
    } finally {
      AccessorUtil.getRuntimeAPI().deleteAllProcessInstances(processWithSubProcess.getUUID());
      AccessorUtil.getRuntimeAPI().deleteAllProcessInstances(subProcess.getUUID());
      AccessorUtil.getManagementAPI().deleteProcess(processWithSubProcess.getUUID());
      AccessorUtil.getManagementAPI().deleteProcess(subProcess.getUUID());
    }
  }