use of org.activiti.engine.runtime.ProcessInstanceQuery 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()]);
}
use of org.activiti.engine.runtime.ProcessInstanceQuery 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()]);
}
Aggregations