use of org.activiti.engine.HistoryService in project carbon-business-process by wso2.
the class BaseHistoricVariableInstanceService method getQueryResponse.
protected DataResponse getQueryResponse(HistoricVariableInstanceQueryRequest queryRequest, Map<String, String> allRequestParams) {
HistoryService historyService = BPMNOSGIService.getHistoryService();
HistoricVariableInstanceQuery query = historyService.createHistoricVariableInstanceQuery();
// Populate query based on request
if (queryRequest.getExcludeTaskVariables() != null) {
if (queryRequest.getExcludeTaskVariables()) {
query.excludeTaskVariables();
}
}
if (queryRequest.getTaskId() != null) {
query.taskId(queryRequest.getTaskId());
}
if (queryRequest.getExecutionId() != null) {
query.executionId(queryRequest.getExecutionId());
}
if (queryRequest.getProcessInstanceId() != null) {
query.processInstanceId(queryRequest.getProcessInstanceId());
}
if (queryRequest.getVariableName() != null) {
query.variableName(queryRequest.getVariableName());
}
if (queryRequest.getVariableNameLike() != null) {
query.variableNameLike(queryRequest.getVariableNameLike());
}
if (queryRequest.getVariables() != null) {
addVariables(query, queryRequest.getVariables());
}
return new HistoricVariableInstancePaginateList(new RestResponseFactory(), uriInfo).paginateList(allRequestParams, query, "variableName", allowedSortProperties);
}
use of org.activiti.engine.HistoryService in project carbon-business-process by wso2.
the class BaseHistoricTaskInstanceService method getQueryResponse.
protected DataResponse getQueryResponse(HistoricTaskInstanceQueryRequest queryRequest, Map<String, String> allRequestParams, String serverRootUrl) {
HistoryService historyService = BPMNOSGIService.getHistoryService();
HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery();
// Populate query based on request
if (queryRequest.getTaskId() != null) {
query.taskId(queryRequest.getTaskId());
}
if (queryRequest.getProcessInstanceId() != null) {
query.processInstanceId(queryRequest.getProcessInstanceId());
}
if (queryRequest.getProcessBusinessKey() != null) {
query.processInstanceBusinessKey(queryRequest.getProcessBusinessKey());
}
if (queryRequest.getProcessBusinessKeyLike() != null) {
query.processInstanceBusinessKeyLike(queryRequest.getProcessBusinessKeyLike());
}
if (queryRequest.getProcessDefinitionKey() != null) {
query.processDefinitionKey(queryRequest.getProcessDefinitionKey());
}
if (queryRequest.getProcessDefinitionKeyLike() != null) {
query.processDefinitionKeyLike(queryRequest.getProcessDefinitionKeyLike());
}
if (queryRequest.getProcessDefinitionId() != null) {
query.processDefinitionId(queryRequest.getProcessDefinitionId());
}
if (queryRequest.getProcessDefinitionName() != null) {
query.processDefinitionName(queryRequest.getProcessDefinitionName());
}
if (queryRequest.getProcessDefinitionNameLike() != null) {
query.processDefinitionNameLike(queryRequest.getProcessDefinitionNameLike());
}
if (queryRequest.getExecutionId() != null) {
query.executionId(queryRequest.getExecutionId());
}
if (queryRequest.getTaskName() != null) {
query.taskName(queryRequest.getTaskName());
}
if (queryRequest.getTaskNameLike() != null) {
query.taskNameLike(queryRequest.getTaskNameLike());
}
if (queryRequest.getTaskDescription() != null) {
query.taskDescription(queryRequest.getTaskDescription());
}
if (queryRequest.getTaskDescriptionLike() != null) {
query.taskDescriptionLike(queryRequest.getTaskDescriptionLike());
}
if (queryRequest.getTaskDefinitionKey() != null) {
query.taskDefinitionKey(queryRequest.getTaskDefinitionKey());
}
if (queryRequest.getTaskDefinitionKeyLike() != null) {
query.taskDefinitionKeyLike(queryRequest.getTaskDefinitionKeyLike());
}
if (queryRequest.getTaskDeleteReason() != null) {
query.taskDeleteReason(queryRequest.getTaskDeleteReason());
}
if (queryRequest.getTaskDeleteReasonLike() != null) {
query.taskDeleteReasonLike(queryRequest.getTaskDeleteReasonLike());
}
if (queryRequest.getTaskAssignee() != null) {
query.taskAssignee(queryRequest.getTaskAssignee());
}
if (queryRequest.getTaskAssigneeLike() != null) {
query.taskAssigneeLike(queryRequest.getTaskAssigneeLike());
}
if (queryRequest.getTaskOwner() != null) {
query.taskOwner(queryRequest.getTaskOwner());
}
if (queryRequest.getTaskOwnerLike() != null) {
query.taskOwnerLike(queryRequest.getTaskOwnerLike());
}
if (queryRequest.getTaskInvolvedUser() != null) {
query.taskInvolvedUser(queryRequest.getTaskInvolvedUser());
}
if (queryRequest.getTaskPriority() != null) {
query.taskPriority(queryRequest.getTaskPriority());
}
if (queryRequest.getTaskMinPriority() != null) {
query.taskMinPriority(queryRequest.getTaskMinPriority());
}
if (queryRequest.getTaskMaxPriority() != null) {
query.taskMaxPriority(queryRequest.getTaskMaxPriority());
}
if (queryRequest.getTaskPriority() != null) {
query.taskPriority(queryRequest.getTaskPriority());
}
if (queryRequest.getFinished() != null) {
if (queryRequest.getFinished()) {
query.finished();
} else {
query.unfinished();
}
}
if (queryRequest.getProcessFinished() != null) {
if (queryRequest.getProcessFinished()) {
query.processFinished();
} else {
query.processUnfinished();
}
}
if (queryRequest.getParentTaskId() != null) {
query.taskParentTaskId(queryRequest.getParentTaskId());
}
if (queryRequest.getDueDate() != null) {
query.taskDueDate(queryRequest.getDueDate());
}
if (queryRequest.getDueDateAfter() != null) {
query.taskDueAfter(queryRequest.getDueDateAfter());
}
if (queryRequest.getDueDateBefore() != null) {
query.taskDueBefore(queryRequest.getDueDateBefore());
}
if (queryRequest.getWithoutDueDate() != null && queryRequest.getWithoutDueDate()) {
query.withoutTaskDueDate();
}
if (queryRequest.getTaskCreatedOn() != null) {
query.taskCreatedOn(queryRequest.getTaskCreatedOn());
}
if (queryRequest.getTaskCreatedBefore() != null) {
query.taskCreatedBefore(queryRequest.getTaskCreatedBefore());
}
if (queryRequest.getTaskCreatedAfter() != null) {
query.taskCreatedAfter(queryRequest.getTaskCreatedAfter());
}
if (queryRequest.getTaskCreatedOn() != null) {
query.taskCreatedOn(queryRequest.getTaskCreatedOn());
}
if (queryRequest.getTaskCreatedBefore() != null) {
query.taskCreatedBefore(queryRequest.getTaskCreatedBefore());
}
if (queryRequest.getTaskCreatedAfter() != null) {
query.taskCreatedAfter(queryRequest.getTaskCreatedAfter());
}
if (queryRequest.getTaskCompletedOn() != null) {
query.taskCompletedOn(queryRequest.getTaskCompletedOn());
}
if (queryRequest.getTaskCompletedBefore() != null) {
query.taskCompletedBefore(queryRequest.getTaskCompletedBefore());
}
if (queryRequest.getTaskCompletedAfter() != null) {
query.taskCompletedAfter(queryRequest.getTaskCompletedAfter());
}
if (queryRequest.getIncludeTaskLocalVariables() != null) {
if (queryRequest.getIncludeTaskLocalVariables()) {
query.includeTaskLocalVariables();
}
}
if (queryRequest.getIncludeProcessVariables() != null) {
if (queryRequest.getIncludeProcessVariables()) {
query.includeProcessVariables();
}
}
if (queryRequest.getTaskVariables() != null) {
addTaskVariables(query, queryRequest.getTaskVariables());
}
if (queryRequest.getProcessVariables() != null) {
addProcessVariables(query, queryRequest.getProcessVariables());
}
if (queryRequest.getTenantId() != null) {
query.taskTenantId(queryRequest.getTenantId());
}
if (queryRequest.getTenantIdLike() != null) {
query.taskTenantIdLike(queryRequest.getTenantIdLike());
}
if (Boolean.TRUE.equals(queryRequest.getWithoutTenantId())) {
query.taskWithoutTenantId();
}
if (queryRequest.getTaskCandidateGroup() != null) {
query.taskCandidateGroup(queryRequest.getTaskCandidateGroup());
}
RestResponseFactory restResponseFactory = new RestResponseFactory();
return new HistoricTaskInstancePaginateList(restResponseFactory, uriInfo, serverRootUrl).paginateList(allRequestParams, queryRequest, query, "taskInstanceId", allowedSortProperties);
}
use of org.activiti.engine.HistoryService in project carbon-business-process by wso2.
the class BaseHistoricTaskInstanceService method getHistoricTaskInstanceFromRequest.
protected HistoricTaskInstance getHistoricTaskInstanceFromRequest(String taskId) {
HistoryService historyService = BPMNOSGIService.getHistoryService();
HistoricTaskInstance taskInstance = historyService.createHistoricTaskInstanceQuery().taskId(taskId).singleResult();
if (taskInstance == null) {
throw new ActivitiObjectNotFoundException("Could not find a task instance with id '" + taskId + "'.", HistoricTaskInstance.class);
}
return taskInstance;
}
use of org.activiti.engine.HistoryService in project carbon-business-process by wso2.
the class ProcessInstanceService method startInstance.
@POST
@Path("/")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response startInstance(ProcessInstanceCreateRequest processInstanceCreateRequest) {
if (log.isDebugEnabled()) {
log.debug("ProcessInstanceCreateRequest:" + processInstanceCreateRequest.getProcessDefinitionId());
log.debug(" processInstanceCreateRequest.getVariables().size():" + processInstanceCreateRequest.getVariables().size());
}
if (processInstanceCreateRequest.getProcessDefinitionId() == null && processInstanceCreateRequest.getProcessDefinitionKey() == null && processInstanceCreateRequest.getMessage() == null) {
throw new ActivitiIllegalArgumentException("Either processDefinitionId, processDefinitionKey or message is required.");
}
int paramsSet = ((processInstanceCreateRequest.getProcessDefinitionId() != null) ? 1 : 0) + ((processInstanceCreateRequest.getProcessDefinitionKey() != null) ? 1 : 0) + ((processInstanceCreateRequest.getMessage() != null) ? 1 : 0);
if (paramsSet > 1) {
throw new ActivitiIllegalArgumentException("Only one of processDefinitionId, processDefinitionKey or message should be set.");
}
if (processInstanceCreateRequest.isCustomTenantSet()) {
// Tenant-id can only be used with either key or message
if (processInstanceCreateRequest.getProcessDefinitionId() != null) {
throw new ActivitiIllegalArgumentException("TenantId can only be used with either processDefinitionKey or message.");
}
} else {
// if no tenantId, it must be from definitionId
if (processInstanceCreateRequest.getProcessDefinitionId() == null) {
throw new ActivitiIllegalArgumentException("TenantId should be specified to be used with either " + "processDefinitionKey or message.");
}
}
// Have to add the validation part here
if (!isValidUserToStartProcess(processInstanceCreateRequest)) {
throw new RestApiBasicAuthenticationException("User doesn't have the necessary permission to start the process");
}
if (processInstanceCreateRequest.getSkipInstanceCreation() || processInstanceCreateRequest.getSkipInstanceCreationIfExist()) {
ProcessInstanceQueryRequest processInstanceQueryRequest = processInstanceCreateRequest.cloneInstanceCreationRequest();
Map<String, String> allRequestParams = allRequestParams(uriInfo);
DataResponse dataResponse = getQueryResponse(processInstanceQueryRequest, allRequestParams, uriInfo);
if (log.isDebugEnabled()) {
log.debug("ProcessInstanceCreation check:" + dataResponse.getSize());
}
int dataResponseSize = dataResponse.getSize();
if (dataResponseSize > 0) {
if (processInstanceCreateRequest.getCorrelate()) {
if (dataResponseSize != 1) {
String responseMessage = "Correlation matching failed as there are more than one matching instance with " + "given variables state";
throw new NotFoundException(Response.ok().entity(responseMessage).status(Response.Status.NOT_FOUND).build());
}
if (processInstanceCreateRequest.getMessageName() == null) {
String responseMessage = "Correlation matching failed as messageName property is not specified";
throw new ActivitiIllegalArgumentException(responseMessage);
}
return performCorrelation(processInstanceCreateRequest);
} else {
dataResponse.setMessage("Instance information corresponding to the request");
return Response.ok().entity(dataResponse).build();
}
}
}
RestResponseFactory restResponseFactory = new RestResponseFactory();
Map<String, Object> startVariables = null;
if (processInstanceCreateRequest.getVariables() != null) {
startVariables = new HashMap<>();
for (RestVariable variable : processInstanceCreateRequest.getVariables()) {
if (variable.getName() == null) {
throw new ActivitiIllegalArgumentException("Variable name is required.");
}
startVariables.put(variable.getName(), restResponseFactory.getVariableValue(variable));
}
}
// updated the additional variables
if (processInstanceCreateRequest.getAdditionalVariables() != null) {
if (startVariables == null) {
startVariables = new HashMap<>();
}
for (RestVariable variable : processInstanceCreateRequest.getAdditionalVariables()) {
if (variable.getName() == null) {
throw new ActivitiIllegalArgumentException("Additional Variable name is required.");
}
startVariables.put(variable.getName(), restResponseFactory.getVariableValue(variable));
}
}
RuntimeService runtimeService = BPMNOSGIService.getRuntimeService();
IdentityService identityService = BPMNOSGIService.getIdentityService();
PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext();
String userName = carbonContext.getUsername();
ProcessInstanceResponse processInstanceResponse;
// Actually start the instance based on key or id
try {
ProcessInstance instance;
identityService.setAuthenticatedUserId(userName);
if (processInstanceCreateRequest.getProcessDefinitionId() != null) {
instance = runtimeService.startProcessInstanceById(processInstanceCreateRequest.getProcessDefinitionId(), processInstanceCreateRequest.getBusinessKey(), startVariables);
} else if (processInstanceCreateRequest.getProcessDefinitionKey() != null) {
if (processInstanceCreateRequest.isCustomTenantSet()) {
instance = runtimeService.startProcessInstanceByKeyAndTenantId(processInstanceCreateRequest.getProcessDefinitionKey(), processInstanceCreateRequest.getBusinessKey(), startVariables, processInstanceCreateRequest.getTenantId());
} else {
instance = runtimeService.startProcessInstanceByKey(processInstanceCreateRequest.getProcessDefinitionKey(), processInstanceCreateRequest.getBusinessKey(), startVariables);
}
} else {
if (processInstanceCreateRequest.isCustomTenantSet()) {
instance = runtimeService.startProcessInstanceByMessageAndTenantId(processInstanceCreateRequest.getMessage(), processInstanceCreateRequest.getBusinessKey(), startVariables, processInstanceCreateRequest.getTenantId());
} else {
instance = runtimeService.startProcessInstanceByMessage(processInstanceCreateRequest.getMessage(), processInstanceCreateRequest.getBusinessKey(), startVariables);
}
}
HistoryService historyService = BPMNOSGIService.getHistoryService();
if (processInstanceCreateRequest.getReturnVariables()) {
Map<String, Object> runtimeVariableMap = null;
List<HistoricVariableInstance> historicVariableList = null;
if (instance.isEnded()) {
historicVariableList = historyService.createHistoricVariableInstanceQuery().processInstanceId(instance.getId()).list();
} else {
runtimeVariableMap = runtimeService.getVariables(instance.getId());
}
processInstanceResponse = restResponseFactory.createProcessInstanceResponse(instance, true, runtimeVariableMap, historicVariableList, uriInfo.getBaseUri().toString());
} else {
processInstanceResponse = restResponseFactory.createProcessInstanceResponse(instance, uriInfo.getBaseUri().toString());
}
} catch (ActivitiObjectNotFoundException aonfe) {
throw new ActivitiIllegalArgumentException(aonfe.getMessage(), aonfe);
} finally {
identityService.setAuthenticatedUserId(null);
}
return Response.ok().status(Response.Status.CREATED).entity(processInstanceResponse).build();
}
use of org.activiti.engine.HistoryService in project carbon-business-process by wso2.
the class ProcessStatisticsService method avgTaskTimeDurationForCompletedProcesses.
/**
* Average task duration for completed processes
*
* @param pId processDefintionId of the process selected to view the average time duration for each task
* @return list of completed tasks with the average time duration for the selected process
*/
@GET
@Path("/task-instances/duration/avarage/{pid}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public ResponseHolder avgTaskTimeDurationForCompletedProcesses(@PathParam("pid") String pId) {
RepositoryService repositoryService = BPMNOSGIService.getRepositoryService();
HistoryService historyService = BPMNOSGIService.getHistoryService();
long processCount = repositoryService.createProcessDefinitionQuery().processDefinitionTenantId(getTenantIdStr()).processDefinitionId(pId).count();
if (processCount == 0) {
throw new ActivitiObjectNotFoundException("Count not find a matching process with PID '" + pId + "'.");
}
ResponseHolder response = new ResponseHolder();
List<Object> taskListForProcess = new ArrayList<>();
HashMap<String, Long> map = new HashMap<>();
// Get the number of completed/finished process instance for each process definition
HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery().processInstanceTenantId(getTenantIdStr()).processDefinitionId(pId).finished();
// Get the count of the complete process instances
long noOfHistoricInstances = historicProcessInstanceQuery.count();
// If the deployed process does not have any completed process instances --> Ignore
if (noOfHistoricInstances == 0) {
response.setData(taskListForProcess);
} else // If the deployed process has completed process instances --> then
{
TaskInstanceAverageInfo tInstance;
// Get the list of completed tasks/activities in the completed process instance by passing the
// process definition id of the process
List<HistoricTaskInstance> taskList = BPMNOSGIService.getHistoryService().createHistoricTaskInstanceQuery().taskTenantId(getTenantIdStr()).processDefinitionId(pId).processFinished().list();
// Iterate through each completed task/activity and get the task name and duration
for (HistoricTaskInstance taskInstance : taskList) {
// Get the task name
String taskKey = taskInstance.getTaskDefinitionKey();
// Get the time duration taken for the task to be completed
long taskDuration = taskInstance.getDurationInMillis();
if (map.containsKey(taskKey)) {
long tt = map.get(taskKey);
map.put(taskKey, taskDuration + tt);
} else {
map.put(taskKey, taskDuration);
}
// Iterating Task List finished
}
Iterator iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next().toString();
double value = map.get(key) / noOfHistoricInstances;
tInstance = new TaskInstanceAverageInfo();
tInstance.setTaskDefinitionKey(key);
tInstance.setAverageTimeForCompletion(value);
taskListForProcess.add(tInstance);
}
response.setData(taskListForProcess);
}
return response;
}
Aggregations