Search in sources :

Example 66 with RuntimeService

use of org.activiti.engine.RuntimeService in project carbon-business-process by wso2.

the class BPMNInstanceService method getTenantBPMNInstances.

/**
 * Internally used method to get all tenant BPMN instances from a passed instance list
 *
 * @param instances
 * @return list of BPMNInstances
 */
private BPMNInstance[] getTenantBPMNInstances(List<ProcessInstance> instances) {
    BPMNInstance bpmnInstance;
    Integer tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
    List<BPMNInstance> bpmnInstances = new ArrayList<BPMNInstance>();
    RuntimeService runtimeService = BPMNServerHolder.getInstance().getEngine().getRuntimeService();
    HistoricProcessInstanceQuery query = BPMNServerHolder.getInstance().getEngine().getHistoryService().createHistoricProcessInstanceQuery().processInstanceTenantId(tenantId.toString());
    for (ProcessInstance instance : instances) {
        bpmnInstance = new BPMNInstance();
        bpmnInstance.setInstanceId(instance.getId());
        bpmnInstance.setProcessId(instance.getProcessDefinitionId());
        bpmnInstance.setSuspended(instance.isSuspended());
        bpmnInstance.setStartTime(query.processInstanceId(instance.getId()).singleResult().getStartTime());
        bpmnInstance.setVariables(formatVariables(runtimeService.getVariables(instance.getId())));
        bpmnInstances.add(bpmnInstance);
    }
    return bpmnInstances.toArray(new BPMNInstance[bpmnInstances.size()]);
}
Also used : BPMNInstance(org.wso2.carbon.bpmn.core.mgt.model.BPMNInstance) HistoricProcessInstanceQuery(org.activiti.engine.history.HistoricProcessInstanceQuery) RuntimeService(org.activiti.engine.RuntimeService) ArrayList(java.util.ArrayList) HistoricProcessInstance(org.activiti.engine.history.HistoricProcessInstance) ProcessInstance(org.activiti.engine.runtime.ProcessInstance)

Example 67 with RuntimeService

use of org.activiti.engine.RuntimeService in project carbon-business-process by wso2.

the class BPMNInstanceService method getPaginatedInstanceByFilter.

/**
 * Returns Paginated Instances by passing filter parameters
 *
 * @param finished
 * @param instanceId
 * @param startAfter
 * @param startBefore
 * @param processId
 * @param isActive
 * @param variables
 * @param start
 * @param size
 * @return list of BPMNInstances for given filter parameters
 */
public BPMNInstance[] getPaginatedInstanceByFilter(boolean finished, String instanceId, Date startAfter, Date startBefore, String processId, boolean isActive, String variables, int start, int size) {
    List<BPMNInstance> bpmnInstanceList = new ArrayList<>();
    Integer tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
    ProcessEngine engine = BPMNServerHolder.getInstance().getEngine();
    RuntimeService runtimeService = engine.getRuntimeService();
    ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery().processInstanceTenantId(tenantId.toString());
    HistoricProcessInstanceQuery historicQuery = BPMNServerHolder.getInstance().getEngine().getHistoryService().createHistoricProcessInstanceQuery().processInstanceTenantId(tenantId.toString()).includeProcessVariables();
    query = query.includeProcessVariables();
    if (finished) {
        historicQuery = historicQuery.finished();
        if (instanceId != null && !instanceId.equals("")) {
            return getInstanceById(instanceId, finished);
        }
        if (processId != null && !processId.equals("")) {
            historicQuery = historicQuery.processDefinitionId(processId);
        }
        if (variables != null && !variables.trim().equals("")) {
            String[] variablePairs = variables.split(",");
            BPMNVariable[] bpmnVariables = new BPMNVariable[variablePairs.length];
            for (int i = 0; i < variablePairs.length; i++) {
                String[] pair = variablePairs[i].split(":");
                if (pair.length == 1) {
                    bpmnVariables[i] = new BPMNVariable(pair[0], "");
                } else {
                    bpmnVariables[i] = new BPMNVariable(pair[0], pair[1]);
                }
            }
            if (variablePairs != null && variablePairs.length > 0) {
                for (BPMNVariable variable : bpmnVariables) {
                    if (variable.getName() != null && !variable.getName().equals("")) {
                        historicQuery = historicQuery.variableValueLike(variable.getName(), "%" + variable.getValue().toString() + "%");
                    }
                }
            }
        }
        if (startAfter != null) {
            historicQuery = historicQuery.startedAfter(startAfter);
        }
        if (startBefore != null) {
            historicQuery = historicQuery.startedBefore(startBefore);
        }
        processInstanceCount = (int) historicQuery.count();
        List<HistoricProcessInstance> instances = historicQuery.listPage(start, size);
        for (HistoricProcessInstance instance : instances) {
            BPMNInstance bpmnInstance = new BPMNInstance();
            bpmnInstance.setInstanceId(instance.getId());
            bpmnInstance.setProcessId(instance.getProcessDefinitionId());
            List<ProcessDefinition> processes = BPMNServerHolder.getInstance().getEngine().getRepositoryService().createProcessDefinitionQuery().processDefinitionTenantId(tenantId.toString()).processDefinitionId(instance.getProcessDefinitionId()).list();
            String processName = instance.getProcessDefinitionId();
            if (!processes.isEmpty()) {
                processName = processes.get(0).getName();
            }
            bpmnInstance.setProcessName(processName);
            bpmnInstance.setStartTime(instance.getStartTime());
            bpmnInstance.setEndTime(instance.getEndTime());
            bpmnInstance.setVariables(formatVariables(instance.getProcessVariables()));
            bpmnInstanceList.add(bpmnInstance);
        }
    } else {
        historicQuery = historicQuery.unfinished();
        if (instanceId != null && !instanceId.equals("")) {
            return getInstanceById(instanceId, finished);
        }
        if (processId != null && !processId.equals("")) {
            historicQuery = historicQuery.processDefinitionId(processId);
        }
        if (variables != null && !variables.trim().equals("")) {
            String[] variablePairs = variables.split(",");
            BPMNVariable[] bpmnVariables = new BPMNVariable[variablePairs.length];
            for (int i = 0; i < variablePairs.length; i++) {
                String[] pair = variablePairs[i].split(":");
                if (pair.length == 1) {
                    bpmnVariables[i] = new BPMNVariable(pair[0], "");
                } else {
                    bpmnVariables[i] = new BPMNVariable(pair[0], pair[1]);
                }
            }
            if (variablePairs != null && variablePairs.length > 0) {
                for (BPMNVariable variable : bpmnVariables) {
                    if (variable.getName() != null && !variable.getName().equals("")) {
                        historicQuery = historicQuery.variableValueLike(variable.getName(), "%" + variable.getValue().toString() + "%");
                    }
                }
            }
        }
        if (startAfter != null) {
            historicQuery = historicQuery.startedAfter(startAfter);
        }
        if (startBefore != null) {
            historicQuery = historicQuery.startedBefore(startBefore);
        }
        processInstanceCount = (int) historicQuery.count();
        List<HistoricProcessInstance> instances = historicQuery.listPage(start, size);
        for (HistoricProcessInstance instance : instances) {
            boolean isSuspended = query.processInstanceId(instance.getId()).list().get(0).isSuspended();
            if (isSuspended == !isActive) {
                BPMNInstance bpmnInstance = new BPMNInstance();
                bpmnInstance.setInstanceId(instance.getId());
                bpmnInstance.setProcessId(instance.getProcessDefinitionId());
                List<ProcessDefinition> processes = BPMNServerHolder.getInstance().getEngine().getRepositoryService().createProcessDefinitionQuery().processDefinitionTenantId(tenantId.toString()).processDefinitionId(instance.getProcessDefinitionId()).list();
                String processName = instance.getProcessDefinitionId();
                if (!processes.isEmpty()) {
                    processName = processes.get(0).getName();
                }
                bpmnInstance.setProcessName(processName);
                if (!query.processInstanceId(instance.getId()).list().isEmpty()) {
                    bpmnInstance.setSuspended(isSuspended);
                }
                bpmnInstance.setStartTime(instance.getStartTime());
                bpmnInstance.setEndTime(instance.getEndTime());
                bpmnInstance.setVariables(formatVariables(instance.getProcessVariables()));
                bpmnInstanceList.add(bpmnInstance);
            }
        }
    }
    return bpmnInstanceList.toArray(new BPMNInstance[bpmnInstanceList.size()]);
}
Also used : BPMNInstance(org.wso2.carbon.bpmn.core.mgt.model.BPMNInstance) HistoricProcessInstanceQuery(org.activiti.engine.history.HistoricProcessInstanceQuery) RuntimeService(org.activiti.engine.RuntimeService) HistoricProcessInstance(org.activiti.engine.history.HistoricProcessInstance) ArrayList(java.util.ArrayList) ProcessDefinition(org.activiti.engine.repository.ProcessDefinition) ProcessInstanceQuery(org.activiti.engine.runtime.ProcessInstanceQuery) HistoricProcessInstanceQuery(org.activiti.engine.history.HistoricProcessInstanceQuery) ProcessEngine(org.activiti.engine.ProcessEngine) BPMNVariable(org.wso2.carbon.bpmn.core.mgt.model.BPMNVariable)

Example 68 with RuntimeService

use of org.activiti.engine.RuntimeService in project carbon-business-process by wso2.

the class BPMNInstanceService method getInstanceById.

/**
 * Get instances by instance Id and state
 *
 * @param instanceId
 * @param finished
 * @return list of BPMNInstances
 */
private BPMNInstance[] getInstanceById(String instanceId, boolean finished) {
    List<BPMNInstance> bpmnInstanceList = new ArrayList<>();
    Integer tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
    ProcessEngine engine = BPMNServerHolder.getInstance().getEngine();
    RuntimeService runtimeService = engine.getRuntimeService();
    ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery().processInstanceTenantId(tenantId.toString());
    HistoricProcessInstanceQuery historicQuery = BPMNServerHolder.getInstance().getEngine().getHistoryService().createHistoricProcessInstanceQuery().processInstanceTenantId(tenantId.toString()).includeProcessVariables();
    query = query.includeProcessVariables();
    if (finished) {
        historicQuery.finished();
    } else {
        historicQuery.unfinished();
    }
    historicQuery = historicQuery.processInstanceId(instanceId);
    HistoricProcessInstance instance = historicQuery.singleResult();
    if (instance != null) {
        processInstanceCount = 1;
        BPMNInstance bpmnInstance = new BPMNInstance();
        bpmnInstance.setInstanceId(instance.getId());
        bpmnInstance.setProcessId(instance.getProcessDefinitionId());
        List<ProcessDefinition> processes = BPMNServerHolder.getInstance().getEngine().getRepositoryService().createProcessDefinitionQuery().processDefinitionTenantId(tenantId.toString()).processDefinitionId(instance.getProcessDefinitionId()).list();
        String processName = instance.getProcessDefinitionId();
        if (!processes.isEmpty()) {
            processName = processes.get(0).getName();
        }
        bpmnInstance.setProcessName(processName);
        if (!query.processInstanceId(instance.getId()).list().isEmpty()) {
            bpmnInstance.setSuspended(query.processInstanceId(instance.getId()).list().get(0).isSuspended());
        }
        bpmnInstance.setStartTime(instance.getStartTime());
        bpmnInstance.setEndTime(instance.getEndTime());
        bpmnInstance.setVariables(formatVariables(instance.getProcessVariables()));
        bpmnInstanceList.add(bpmnInstance);
    } else {
        processInstanceCount = 0;
    }
    return bpmnInstanceList.toArray(new BPMNInstance[bpmnInstanceList.size()]);
}
Also used : BPMNInstance(org.wso2.carbon.bpmn.core.mgt.model.BPMNInstance) ProcessInstanceQuery(org.activiti.engine.runtime.ProcessInstanceQuery) HistoricProcessInstanceQuery(org.activiti.engine.history.HistoricProcessInstanceQuery) HistoricProcessInstanceQuery(org.activiti.engine.history.HistoricProcessInstanceQuery) RuntimeService(org.activiti.engine.RuntimeService) HistoricProcessInstance(org.activiti.engine.history.HistoricProcessInstance) ArrayList(java.util.ArrayList) ProcessDefinition(org.activiti.engine.repository.ProcessDefinition) ProcessEngine(org.activiti.engine.ProcessEngine)

Example 69 with RuntimeService

use of org.activiti.engine.RuntimeService in project carbon-business-process by wso2.

the class BPMNInstanceService method activateProcessInstance.

/**
 * Activate a process instance by passing the instance id
 *
 * @param instanceId
 * @throws BPSFault
 */
public void activateProcessInstance(String instanceId) throws BPSFault {
    Integer tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
    RuntimeService runtimeService = BPMNServerHolder.getInstance().getEngine().getRuntimeService();
    List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery().processInstanceTenantId(tenantId.toString()).processInstanceId(instanceId).list();
    if (processInstances.isEmpty()) {
        String msg = "No process instances with the ID: " + instanceId;
        log.error(msg);
        throw new BPSFault(msg);
    }
    runtimeService.activateProcessInstanceById(instanceId);
}
Also used : RuntimeService(org.activiti.engine.RuntimeService) BPSFault(org.wso2.carbon.bpmn.core.BPSFault) HistoricProcessInstance(org.activiti.engine.history.HistoricProcessInstance) ProcessInstance(org.activiti.engine.runtime.ProcessInstance)

Example 70 with RuntimeService

use of org.activiti.engine.RuntimeService in project CzechIdMng by bcvsolutions.

the class BasicEmailTest method testSendEmailFromWorkflow.

/**
 * Send email through {@link EmailNotificationSender}
 */
@Test
public void testSendEmailFromWorkflow() {
    // Deploy process - annotation @Deployment can't be used - we need custom behavior to work
    InputStream is = this.getClass().getClassLoader().getResourceAsStream("eu/bcvsolutions/idm/workflow/deploy/testEmailer.bpmn20.xml");
    WorkflowDeploymentDto deploymentDto = processDeploymentService.create(PROCESS_KEY, "testEmailer.bpmn20.xml", is);
    IdmNotificationFilter filter = new IdmNotificationFilter();
    // 
    Assert.assertNotNull(deploymentDto);
    filter.setText(EMAIL_TEXT);
    filter.setRecipient(EMAIL_RECIPIENT);
    Assert.assertEquals(0, emailLogService.find(filter, null).getTotalElements());
    RuntimeService runtimeService = activitiRule.getRuntimeService();
    ProcessInstance instance = runtimeService.startProcessInstanceByKey(PROCESS_KEY);
    // 
    Assert.assertTrue(instance.isEnded());
    long count = runtimeService.createProcessInstanceQuery().processDefinitionKey(PROCESS_KEY).count();
    Assert.assertEquals(0, count);
    Assert.assertEquals(1, emailLogService.find(filter, null).getTotalElements());
}
Also used : RuntimeService(org.activiti.engine.RuntimeService) InputStream(java.io.InputStream) WorkflowDeploymentDto(eu.bcvsolutions.idm.core.workflow.api.dto.WorkflowDeploymentDto) IdmNotificationFilter(eu.bcvsolutions.idm.core.notification.api.dto.filter.IdmNotificationFilter) ProcessInstance(org.activiti.engine.runtime.ProcessInstance) Test(org.junit.Test) AbstractCoreWorkflowIntegrationTest(eu.bcvsolutions.idm.core.AbstractCoreWorkflowIntegrationTest)

Aggregations

RuntimeService (org.activiti.engine.RuntimeService)77 ProcessInstance (org.activiti.engine.runtime.ProcessInstance)32 ProcessEngine (org.activiti.engine.ProcessEngine)16 ActivitiObjectNotFoundException (org.activiti.engine.ActivitiObjectNotFoundException)15 Test (org.junit.Test)14 RestResponseFactory (org.wso2.carbon.bpmn.rest.common.RestResponseFactory)14 HistoricProcessInstance (org.activiti.engine.history.HistoricProcessInstance)13 RestVariable (org.wso2.carbon.bpmn.rest.engine.variable.RestVariable)12 RepositoryService (org.activiti.engine.RepositoryService)10 TaskService (org.activiti.engine.TaskService)10 HashMap (java.util.HashMap)8 ActivitiIllegalArgumentException (org.activiti.engine.ActivitiIllegalArgumentException)8 ArrayList (java.util.ArrayList)7 Path (javax.ws.rs.Path)7 HistoricProcessInstanceQuery (org.activiti.engine.history.HistoricProcessInstanceQuery)7 Execution (org.activiti.engine.runtime.Execution)7 Produces (javax.ws.rs.Produces)6 Task (org.activiti.engine.task.Task)6 BPMNInstance (org.wso2.carbon.bpmn.core.mgt.model.BPMNInstance)6 ActivitiException (org.activiti.engine.ActivitiException)5