
org.ow2.bonita.facade.impl.QueryRuntimeAPIImpl Maven / Gradle / Ivy
/**
* Copyright (C) 2007 Bull S. A. S.
* Bull, Rue Jean Jaures, B.P.68, 78340, Les Clayes-sous-Bois
* This library is free software; you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Foundation
* version 2.1 of the License.
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301, USA.
*
* Modified by Charles Souillard - BonitaSoft S.A.
* Modified by Matthieu Chaffotte - BonitaSoft S.A.
**/
package org.ow2.bonita.facade.impl;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.ow2.bonita.facade.exception.ActivityNotFoundException;
import org.ow2.bonita.facade.exception.InstanceNotFoundException;
import org.ow2.bonita.facade.exception.TaskNotFoundException;
import org.ow2.bonita.facade.exception.VariableNotFoundException;
import org.ow2.bonita.facade.internal.InternalQueryRuntimeAPI;
import org.ow2.bonita.facade.runtime.ActivityInstance;
import org.ow2.bonita.facade.runtime.ActivityState;
import org.ow2.bonita.facade.runtime.Comment;
import org.ow2.bonita.facade.runtime.ProcessInstance;
import org.ow2.bonita.facade.runtime.TaskInstance;
import org.ow2.bonita.facade.runtime.VariableUpdate;
import org.ow2.bonita.facade.runtime.impl.ActivityInstanceImpl;
import org.ow2.bonita.facade.runtime.impl.ProcessInstanceImpl;
import org.ow2.bonita.facade.uuid.ActivityInstanceUUID;
import org.ow2.bonita.facade.uuid.ProcessDefinitionUUID;
import org.ow2.bonita.facade.uuid.ProcessInstanceUUID;
import org.ow2.bonita.services.LargeDataRepository;
import org.ow2.bonita.services.Querier;
import org.ow2.bonita.util.EnvTool;
import org.ow2.bonita.util.Misc;
/**
* @author Pierre Vigneras
*/
public class QueryRuntimeAPIImpl implements InternalQueryRuntimeAPI {
/*
public QueryRuntimeAPIImpl(String CONF_NAME) {
this.confName = CONF_NAME;
}
*/
protected QueryRuntimeAPIImpl() {
}
public ProcessInstance getProcessInstance(final ProcessInstanceUUID instanceUUID,
final String queryList) throws InstanceNotFoundException {
FacadeUtil.checkArgsNotNull(instanceUUID);
final ProcessInstance result = EnvTool.getAllQueriers(queryList).getProcessInstance(instanceUUID);
if (result == null) {
throw new InstanceNotFoundException("bai_QRAPII_1", instanceUUID);
}
return new ProcessInstanceImpl(result);
}
public Set getProcessInstances(final String queryList) {
final Set result = new HashSet();
for (final ProcessInstance record : EnvTool.getAllQueriers(queryList).getProcessInstances()) {
result.add(new ProcessInstanceImpl(record));
}
return result;
}
public Set getNewWebProcessInstances(Collection labelIds, String queryList) throws RemoteException {
final Set result = new HashSet();
for (final ProcessInstance record : EnvTool.getAllQueriers(queryList).getNewWebProcessInstances(EnvTool.getUserId())) {
if (labelIds != null && !labelIds.isEmpty()) {
((ProcessInstanceImpl)record).addWebLabels(labelIds);
}
result.add(new ProcessInstanceImpl(record));
}
return result;
}
public Set getWebProcessInstances(String labelId, String queryList) throws RemoteException {
//FacadeUtil.checkArgsNotNull(labelId); : allows null to get instances with no label
final Set result = new HashSet();
for (final ProcessInstance record : EnvTool.getAllQueriers(queryList).getWebProcessInstances(labelId)) {
result.add(new ProcessInstanceImpl(record));
}
return result;
}
public Set getUserInstances(String queryList) throws RemoteException {
final Set result = new HashSet();
for (final ProcessInstance record : EnvTool.getAllQueriers(queryList).getUserInstances(EnvTool.getUserId())) {
result.add(new ProcessInstanceImpl(record));
}
return result;
}
public Set getProcessInstances(
Collection instanceUUIDs, String queryList)
throws RemoteException {
final Set result = new HashSet();
if (instanceUUIDs == null || instanceUUIDs.isEmpty()) {
return result;
}
for (final ProcessInstance record : EnvTool.getAllQueriers(queryList).getProcessInstances(instanceUUIDs)) {
result.add(new ProcessInstanceImpl(record));
}
return result;
}
public Set getProcessInstancesWithTaskState(Collection activityStates, String queryList) throws RemoteException {
final Set result = new HashSet();
if (activityStates == null || activityStates.isEmpty()) {
return result;
}
for (final ProcessInstance record : EnvTool.getAllQueriers(queryList).getProcessInstancesWithTaskState(activityStates)) {
result.add(new ProcessInstanceImpl(record));
}
return result;
}
public Set getProcessInstances(final ProcessDefinitionUUID processUUID, final String queryList) {
final Set result = new HashSet();
for (final ProcessInstance record : EnvTool.getAllQueriers(queryList).getProcessInstances(processUUID)) {
result.add(new ProcessInstanceImpl(record));
}
return result;
}
public ActivityInstance getActivityInstance(final ProcessInstanceUUID instanceUUID, final String activityId,
final String iterationId, final String activityInstanceId,
final String queryList) throws ActivityNotFoundException, InstanceNotFoundException {
final ActivityInstance result =
EnvTool.getAllQueriers(queryList).getActivityInstance(instanceUUID, activityId, iterationId, activityInstanceId);
if (result == null) {
if (EnvTool.getAllQueriers(queryList).getProcessInstance(instanceUUID) == null) {
throw new InstanceNotFoundException("bai_QRAPII_2", instanceUUID);
}
throw new ActivityNotFoundException("bai_QRAPII_3", instanceUUID, activityId, iterationId);
}
return new ActivityInstanceImpl(result);
}
public boolean canExecuteTask(ActivityInstanceUUID taskUUID, String queryList) throws TaskNotFoundException, RemoteException {
TaskInstance task = getTask(taskUUID, queryList);
if (task == null) {
return false;
}
if (!task.getState().equals(ActivityState.READY)) {
return false;
}
String userId = EnvTool.getUserId();
if (task.isTaskAssigned()) {
return task.getTaskUser().equals(userId);
}
return task.getTaskCandidates().contains(userId);
}
public Set getActivityInstances(final ProcessInstanceUUID instanceUUID,
final String queryList) {
final Set result = new HashSet();
for (final ActivityInstance record
: EnvTool.getAllQueriers(queryList).getActivityInstances(instanceUUID)) {
result.add(new ActivityInstanceImpl(record));
}
return result;
}
public Set getActivityInstances(final ProcessInstanceUUID instanceUUID,
final String activityId, final String queryList) throws ActivityNotFoundException {
final Set result = new HashSet();
for (final ActivityInstance record
: EnvTool.getAllQueriers(queryList).getActivityInstances(instanceUUID)) {
if (record.getActivityName().equals(activityId)) {
result.add(new ActivityInstanceImpl(record));
}
}
if (result.isEmpty()) {
throw new ActivityNotFoundException("bai_QRAPII_4", instanceUUID, activityId);
}
return result;
}
public Set getTasks(final ProcessInstanceUUID instanceUUID, final String queryList) {
final Set result = new HashSet();
for (final TaskInstance record : EnvTool.getAllQueriers(queryList).getTaskInstances(instanceUUID)) {
result.add(new ActivityInstanceImpl(record));
}
return result;
}
public Collection getTaskList(final ProcessInstanceUUID instanceUUID,
final ActivityState taskState, final String queryList) throws InstanceNotFoundException {
return getTaskListUser(instanceUUID, EnvTool.getUserId(), taskState, queryList);
}
public Collection getTaskList(ProcessInstanceUUID instanceUUID, Collection taskStates, String queryList)
throws InstanceNotFoundException, RemoteException {
FacadeUtil.checkArgsNotNull(instanceUUID, taskStates);
final Collection todos = new HashSet();
for (ActivityState taskState : taskStates) {
Collection tasks = getTaskListUser(instanceUUID, EnvTool.getUserId(), taskState, queryList);
if (tasks != null) {
todos.addAll(tasks);
}
}
return todos;
}
public Collection getTaskList(final ActivityState taskState, final String queryList) {
return getTaskListUser(EnvTool.getUserId(), taskState, queryList);
}
public TaskInstance getTask(final ActivityInstanceUUID taskUUID, final String queryList) throws TaskNotFoundException {
final TaskInstance taskInstance = EnvTool.getAllQueriers(queryList).getTaskInstance(taskUUID);
if (taskInstance == null) {
throw new TaskNotFoundException("bai_QRAPII_5", taskUUID);
}
return new ActivityInstanceImpl(taskInstance);
}
public Map getActivityInstanceVariables(final ProcessInstanceUUID instanceUUID,
final String activityId, final String iterationId, final String activityInstanceId,
final String queryList) throws ActivityNotFoundException, InstanceNotFoundException {
final ActivityInstance activityInst =
getActivityInstance(instanceUUID, activityId, iterationId, activityInstanceId, queryList);
if (activityInst == null) {
throw new ActivityNotFoundException("bai_QRAPII_6", instanceUUID, activityId);
}
return activityInst.getLastKnownVariableValues();
}
public Object getActivityInstanceVariable(final ProcessInstanceUUID instanceUUID,
final String activityId, final String iterationId,
final String activityInstanceId, final String variableId, final String queryList) throws InstanceNotFoundException,
ActivityNotFoundException, VariableNotFoundException {
final Map variables =
getActivityInstanceVariables(instanceUUID, activityId, iterationId, activityInstanceId, queryList);
if (variables == null || !variables.containsKey(variableId)) {
throw new VariableNotFoundException("bai_QRAPII_7", instanceUUID, activityId, variableId);
}
return variables.get(variableId);
}
public Map getProcessInstanceVariables(
final ProcessInstanceUUID instanceUUID, final String queryList) throws InstanceNotFoundException {
final ProcessInstance processInstance = getProcessInstance(instanceUUID, queryList);
if (processInstance == null) {
throw new InstanceNotFoundException("bai_QRAPII_8", instanceUUID);
}
return processInstance.getLastKnownVariableValues();
}
private Map getProcessInstanceVariables(
final ProcessInstanceUUID instanceUUID, final String queryList, final Date maxDate) throws InstanceNotFoundException {
//take all initial instance var and for each varupdate being proceed before max date, replace the initial value by the new one
final ProcessInstance processInstance = getProcessInstance(instanceUUID, queryList);
final Map instanceInitialVars = processInstance.getInitialVariableValues();
final Map instanceVarBeforeMaxDate = new HashMap();
instanceVarBeforeMaxDate.putAll(instanceInitialVars);
final Map maxVarUpdates = new HashMap();
for (VariableUpdate varUpdate : processInstance.getVariableUpdates()) {
if (varUpdate.getDate().getTime() <= maxDate.getTime()) {
VariableUpdate currentMax = maxVarUpdates.get(varUpdate.getName());
if (currentMax == null || currentMax.getDate().getTime() <= varUpdate.getDate().getTime()) {
maxVarUpdates.put(varUpdate.getName(), varUpdate);
instanceVarBeforeMaxDate.put(varUpdate.getName(), varUpdate.getValue());
}
}
}
return instanceVarBeforeMaxDate;
}
private Object getProcessInstanceVariable(final ProcessInstanceUUID instanceUUID,
final String variableId, final String queryList,
final Date maxDate) throws InstanceNotFoundException, VariableNotFoundException {
final Map variables = getProcessInstanceVariables(instanceUUID, queryList, maxDate);
if (variables == null || !variables.containsKey(variableId)) {
throw new VariableNotFoundException("bai_QRAPII_9", instanceUUID, variableId);
}
return variables.get(variableId);
}
public Object getProcessInstanceVariable(final ProcessInstanceUUID instanceUUID,
final String variableId, final String queryList) throws InstanceNotFoundException, VariableNotFoundException {
final Map variables = getProcessInstanceVariables(instanceUUID, queryList);
if (variables == null || !variables.containsKey(variableId)) {
throw new VariableNotFoundException("bai_QRAPII_10", instanceUUID, variableId);
}
return variables.get(variableId);
}
public ActivityInstance getActivityInstance(
final ActivityInstanceUUID activityUUID, final String queryList) throws ActivityNotFoundException {
final ActivityInstance activity = EnvTool.getAllQueriers(queryList).getActivityInstance(activityUUID);
if (activity == null) {
throw new ActivityNotFoundException("bai_QRAPII_11", activityUUID);
}
return new ActivityInstanceImpl(activity);
}
public ActivityState getActivityInstanceState(final ActivityInstanceUUID activityUUID,
final String queryList) throws ActivityNotFoundException {
FacadeUtil.checkArgsNotNull(activityUUID);
final Querier querier = EnvTool.getAllQueriers(queryList);
ActivityState state = querier.getActivityInstanceState(activityUUID);
if (state == null) {
throw new ActivityNotFoundException("bai_QRAPII_3", activityUUID.getProcessInstanceUUID(), activityUUID.getActivityName(), activityUUID.getActivityNb());
}
return state;
}
public Object getActivityInstanceVariable(final ActivityInstanceUUID activityUUID,
final String variableId, final String queryList) throws ActivityNotFoundException,
VariableNotFoundException {
final ActivityInstance activity = getActivityInstance(activityUUID, queryList);
final Map variableValues = activity.getLastKnownVariableValues();
if (!variableValues.containsKey(variableId)) {
throw new VariableNotFoundException("bai_QRAPII_12", activityUUID, variableId);
}
return activity.getLastKnownVariableValues().get(variableId);
}
public Map getActivityInstanceVariables(
final ActivityInstanceUUID activityUUID, final String queryList) throws ActivityNotFoundException {
final ActivityInstance activity = getActivityInstance(activityUUID, queryList);
return activity.getLastKnownVariableValues();
}
public Collection getTaskList(final ProcessInstanceUUID instanceUUID,
final String userId, final ActivityState taskState, final String queryList) throws InstanceNotFoundException {
return getTaskListUser(instanceUUID, userId, taskState, queryList);
}
public Collection getTaskList(
final String userId, final ActivityState taskState, final String queryList) {
return getTaskListUser(userId, taskState, queryList);
}
private Collection getTaskListUser(final ProcessInstanceUUID instanceUUID, final String userId,
final ActivityState taskState, final String queryList) throws InstanceNotFoundException {
FacadeUtil.checkArgsNotNull(instanceUUID, taskState, userId);
final ProcessInstance processInstance = getProcessInstance(instanceUUID, queryList);
if (processInstance == null) {
throw new InstanceNotFoundException("bai_QRAPII_13", instanceUUID);
}
final Querier journal = EnvTool.getAllQueriers(queryList);
final Set userInstanceTasks =
journal.getUserInstanceTasks(userId, instanceUUID, taskState);
final Collection todos = new ArrayList();
for (final TaskInstance taskActivity : userInstanceTasks) {
todos.add(new ActivityInstanceImpl(taskActivity));
}
return todos;
}
private Collection getTaskListUser(
final String userId, final ActivityState taskState, final String queryList) {
FacadeUtil.checkArgsNotNull(userId, taskState);
final Collection todos = new ArrayList();
final Querier querier = EnvTool.getAllQueriers(queryList);
final Set taskActivities = querier.getUserTasks(userId, taskState);
for (final TaskInstance taskActivity : taskActivities) {
todos.add(new ActivityInstanceImpl(taskActivity));
}
return todos;
}
public Object getVariable(final ActivityInstanceUUID activityUUID, final String variableId,
final String queryList) throws ActivityNotFoundException, VariableNotFoundException {
try {
return getActivityInstanceVariable(activityUUID, variableId, queryList);
} catch (final VariableNotFoundException e) {
final ActivityInstance activity = getActivityInstance(activityUUID, queryList);
Date maxDate = getMaxDate(activity);
try {
return getProcessInstanceVariable(activity.getProcessInstanceUUID(), variableId, queryList, maxDate);
} catch (final InstanceNotFoundException e1) {
// If activity exists, the process instance must exist too.
Misc.unreachableStatement();
return null;
}
}
}
public Map getVariables(final ActivityInstanceUUID activityUUID,
final String queryList) throws ActivityNotFoundException {
final ActivityInstance activity = EnvTool.getAllQueriers(queryList).getActivityInstance(activityUUID);
if (activity == null) {
throw new ActivityNotFoundException("bai_QRAPII_14", activityUUID);
}
Date maxDate = getMaxDate(activity);
try {
final Map allVariables = new HashMap();
final Map localVariables = activity.getLastKnownVariableValues();
final Map globalVariables =
getProcessInstanceVariables(activity.getProcessInstanceUUID(), queryList, maxDate);
//add global first because if some variables are in both local and global
//we want to keep local value
allVariables.putAll(globalVariables);
allVariables.putAll(localVariables);
return allVariables;
} catch (final InstanceNotFoundException e) {
// If activity exists, the process instance must exist too.
Misc.unreachableStatement();
return null;
}
}
private Date getMaxDate(ActivityInstance activity) {
Date endedDate = activity.getEndedDate();
if (endedDate == null) {
return new Date();
}
return endedDate;
}
public List getCommentFeed(ProcessInstanceUUID instanceUUID, String queryList) throws InstanceNotFoundException {
ProcessInstance instance =
EnvTool.getAllQueriers(queryList).getProcessInstance(instanceUUID);
if (instance == null) {
throw new InstanceNotFoundException("bai_QRAPII_15", instanceUUID);
}
ProcessInstance process = new ProcessInstanceImpl(instance);
return process.getCommentFeed();
}
public byte[] getAttachment(ProcessInstanceUUID instanceUUID, String attachmentName, String queryList) {
FacadeUtil.checkArgsNotNull(instanceUUID);
LargeDataRepository largeDataRepository = EnvTool.getLargeDataRepository();
return largeDataRepository.getData(byte[].class, Misc.getAttachmentCategories(instanceUUID), attachmentName);
}
public Map getAttachments(ProcessInstanceUUID instanceUUID, String queryList) {
FacadeUtil.checkArgsNotNull(instanceUUID);
LargeDataRepository largeDataRepository = EnvTool.getLargeDataRepository();
return largeDataRepository.getData(byte[].class, Misc.getAttachmentCategories(instanceUUID));
}
public Map getAttachments(ProcessInstanceUUID instanceUUID, Set attachmentNames, String queryList) {
FacadeUtil.checkArgsNotNull(instanceUUID);
LargeDataRepository largeDataRepository = EnvTool.getLargeDataRepository();
return largeDataRepository.getData(byte[].class, Misc.getAttachmentCategories(instanceUUID), attachmentNames);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy