@Override public boolean canExecuteTask(final ActivityInstanceUUID taskUUID) throws TaskNotFoundException { final TaskInstance task = getTask(taskUUID); if (!task.getState().equals(ActivityState.READY)) { return false; } final String userId = EnvTool.getUserId(); if (task.isTaskAssigned()) { return task.getTaskUser().equals(userId); } return task.getTaskCandidates().contains(userId); }
LOG.fine("Checking compatible state of " + task); if (!(task.getState().equals(ActivityState.READY) || task.getState().equals(ActivityState.EXECUTING))) { final Set<ActivityState> expectedStates = new HashSet<ActivityState>(); expectedStates.add(ActivityState.READY); throw new IllegalTaskStateException("bai_RAPII_13", message, taskUUID, expectedStates, task.getState()); final ProcessDefinitionUUID processUUID = task.getProcessDefinitionUUID(); final String activityName = task.getActivityName();
public static Set<String> executeRoleMapper(final RoleMapper roleMapper, final TaskInstance task, final String roleId, final Map<String, Object[]> parameters) throws Exception { final ProcessInstanceUUID processInstanceUUID = task.getProcessInstanceUUID(); if (parameters != null) { final Map<String, Object[]> inputs = getInputs(parameters); final ActivityInstanceUUID activityInstanceUUID = task.getUUID(); final Binding binding = getBinding(null, null, activityInstanceUUID, processInstanceUUID, true); setParameters(binding, inputs, roleMapper); } return roleMapper.searchMembers(new StandardQueryAPIAccessorImpl(), processInstanceUUID, roleId); }
boolean userIdOk = false; try { String taskUserId = taskInstance.getTaskUser(); userIdOk = taskUserId != null && taskUserId.equals(userId); } catch (IllegalStateException e) { Set<String> taskCandidates = taskInstance.getTaskCandidates(); candidatesOk = taskCandidates != null && taskCandidates.contains(userId); } catch (IllegalStateException e) { boolean stateOk = taskInstance.getState().equals(taskState); if ((userIdOk || candidatesOk) && stateOk) { result.add((ActivityFullInstance<TaskInstance>) activity);
final TaskInstance task = src.getTask(); human = true; startedBy = task.getStartedBy(); endedBy = task.getEndedBy(); userId = task.getTaskUser();
public ActivityInstanceImpl(final ActivityInstance src) { super(src); clientVariables = src.getVariablesBeforeStarted(); final List<VariableUpdate> list = src.getVariableUpdates(); if (list != null && !list.isEmpty()) { variableUpdates = new ArrayList<VariableUpdate>(); for (final VariableUpdate varUpdate : list) { variableUpdates.add(new VariableUpdateImpl(varUpdate)); } } final List<StateUpdate> stateList = src.getStateUpdates(); if (stateList != null && !stateList.isEmpty()) { stateUpdates = new ArrayList<StateUpdate>(); for (final StateUpdate update : stateList) { stateUpdates.add(new StateUpdateImpl(update)); } } if (src.isTask()) { final TaskInstance task = src.getTask(); final List<AssignUpdate> assignList = task.getAssignUpdates(); if (assignList != null && !assignList.isEmpty()) { assignUpdates = new ArrayList<AssignUpdate>(); for (final AssignUpdate update : assignList) { assignUpdates.add(new AssignUpdateImpl(update)); } } candidates = CopyTool.copy(task.getTaskCandidates()); } }
public static void finish(final ActivityInstanceUUID taskUUID, final boolean assignTask) throws TaskNotFoundException, IllegalTaskStateException { final TaskInstance task = getTask(taskUUID); if (!ActivityState.ABORTED.equals(task.getState()) && !ActivityState.FAILED.equals(task.getState())) { if (LOG.isLoggable(Level.FINE)) { LOG.fine("Checking compatible state of " + task); if (!task.getState().equals(ActivityState.EXECUTING)) { final Set<ActivityState> expectedStates = new HashSet<ActivityState>(); expectedStates.add(ActivityState.EXECUTING); final String message = ExceptionManager.getInstance().getFullMessage("bai_RAPII_11"); throw new IllegalTaskStateException("bai_RAPII_11", message, taskUUID, expectedStates, task.getState()); final String activityName = task.getActivityName(); if (LOG.isLoggable(Level.FINE)) { LOG.fine("Finishing task : " + taskUUID + " on activity " + activityName); assign(task, null, task.getTaskUser());
public static void unAssign(final ActivityInstanceUUID taskUUID) throws TaskNotFoundException { final TaskInstance task = getTask(taskUUID); if (LOG.isLoggable(Level.FINE)) { LOG.fine("Unassigning: " + task); } // record the assign assign(task, task.getTaskCandidates(), null); if (LOG.isLoggable(Level.FINE)) { LOG.fine("Unassigned: " + task); } }
LOG.fine("Checking compatible state of " + task); if (!task.getState().equals(ActivityState.SUSPENDED)) { final Set<ActivityState> expectedStates = new HashSet<ActivityState>(); expectedStates.add(ActivityState.SUSPENDED); final String message = ExceptionManager.getInstance().getFullMessage("bai_RAPII_15"); throw new IllegalTaskStateException("bai_RAPII_15", message, taskUUID, expectedStates, task.getState()); LOG.fine("Resuming task : " + taskUUID + " on activity " + task.getActivityName());
public static void assign(final ActivityInstanceUUID taskUUID) throws TaskNotFoundException { final TaskInstance task = getTask(taskUUID); final ProcessDefinitionUUID processUUID = task.getProcessDefinitionUUID(); final ActivityDefinition activityDefinition = getActivityDefinition(processUUID, task.getActivityName()); // execute role resolvers and filters final Set<Performer> performers = getPerformers(activityDefinition); Set<String> candidates = getCandidates(performers, task); String userId = null; final Performer performer = performers.iterator().next(); if (performer.getFilterDefinition() != null) { candidates = executeFilter(task, candidates, performer); if (candidates.size() == 1) { userId = candidates.iterator().next(); } } if (LOG.isLoggable(Level.FINE)) { LOG.fine("Assigning: " + task); } // record the assign if (userId != null) { assign(task, null, userId); } else { assign(task, candidates, null); } if (LOG.isLoggable(Level.FINE)) { LOG.fine("Assigned: " + task); } }
public static void start(final ActivityInstanceUUID taskUUID, final boolean assignTask) throws IllegalTaskStateException, TaskNotFoundException { final TaskInstance task = getTask(taskUUID); if (!ActivityState.ABORTED.equals(task.getState())) { if (LOG.isLoggable(Level.FINE)) { LOG.fine("Checking compatible state of " + task); if (!task.getState().equals(ActivityState.READY)) { final Set<ActivityState> expectedStates = new HashSet<ActivityState>(); expectedStates.add(ActivityState.READY); final String message = ExceptionManager.getInstance().getFullMessage("bai_RAPII_9"); throw new IllegalTaskStateException("bai_RAPII_9", message, taskUUID, expectedStates, task.getState());
@Override public Set<TaskInstance> getUserTasks(final String userId, final ActivityState taskState, final Set<ProcessDefinitionUUID> definitionUUIDs) { final Collection<ActivityState> taskStates = new HashSet<ActivityState>(); taskStates.add(taskState); final Set<TaskInstance> userTasks = getUserTasks(userId, taskStates); final Set<TaskInstance> filteredTasks = new HashSet<TaskInstance>(); for (final TaskInstance taskInstance : userTasks) { if (definitionUUIDs.contains(taskInstance.getProcessDefinitionUUID())) { filteredTasks.add(taskInstance); } } return filteredTasks; }
protected static Execution getExecution(final ActivityInstanceUUID taskUUID) throws TaskNotFoundException { final TaskInstance task = getTask(taskUUID); return EnvTool.getJournalQueriers().getExecutionOnActivity(task.getProcessInstanceUUID(), taskUUID); }
public static void ready(final Execution internalExecution) throws TaskNotFoundException { final ActivityInstanceUUID taskUUID = new ActivityInstanceUUID(internalExecution.getActivityInstanceUUID() .toString()); final InternalActivityDefinition activityDef = internalExecution.getNode(); final TaskInstance task = getTask(taskUUID); final String activityName = task.getActivityName(); if (LOG.isLoggable(Level.FINE)) { LOG.fine("Ready task : " + taskUUID + " on activity " + activityName); } // get performer (aka participant/swimlane) final Set<Performer> performers = getPerformers(activityDef); String userId = null; Set<String> candidates = null; if (performers != null) { candidates = getCandidates(performers, task); final Performer performer = performers.iterator().next(); if (performer.getFilterDefinition() != null) { candidates = executeFilter(task, candidates, performer); if (candidates.size() == 1) { userId = candidates.iterator().next(); } } } if (userId != null) { EnvTool.getRecorder().recordTaskReady(taskUUID, null, userId); } else { EnvTool.getRecorder().recordTaskReady(taskUUID, candidates, null); } ConnectorExecutor.executeConnectors(activityDef, internalExecution, HookDefinition.Event.taskOnReady); }
if (activities != null) { for (ActivityInstance activity : activities) { if (activity.isTask() && taskStates.contains(activity.getTask().getState())) { TaskInstance taskInstance = activity.getTask(); String taskUserId = null; boolean candidatesOk = false; try { taskUserId = taskInstance.getTaskUser(); userIdOk = taskUserId != null && taskUserId.equals(userId); } catch (IllegalStateException e) { Set<String> taskCandidates = taskInstance.getTaskCandidates(); candidatesOk = taskCandidates != null && taskCandidates.contains(userId); } catch (IllegalStateException e) {
final TaskInstance task = src.getTask(); human = true; startedBy = task.getStartedBy(); endedBy = task.getEndedBy(); userId = task.getTaskUser();
public ActivityInstanceImpl(final ActivityInstance src) { super(src); clientVariables = src.getVariablesBeforeStarted(); final List<VariableUpdate> list = src.getVariableUpdates(); if (list != null && !list.isEmpty()) { variableUpdates = new ArrayList<VariableUpdate>(); for (final VariableUpdate varUpdate : list) { variableUpdates.add(new VariableUpdateImpl(varUpdate)); } } final List<StateUpdate> stateList = src.getStateUpdates(); if (stateList != null && !stateList.isEmpty()) { stateUpdates = new ArrayList<StateUpdate>(); for (final StateUpdate update : stateList) { stateUpdates.add(new StateUpdateImpl(update)); } } if (src.isTask()) { final TaskInstance task = src.getTask(); final List<AssignUpdate> assignList = task.getAssignUpdates(); if (assignList != null && !assignList.isEmpty()) { assignUpdates = new ArrayList<AssignUpdate>(); for (final AssignUpdate update : assignList) { assignUpdates.add(new AssignUpdateImpl(update)); } } candidates = CopyTool.copy(task.getTaskCandidates()); } }
@Override public Map<ActivityInstanceUUID, Set<String>> getTaskCandidates(final Set<ActivityInstanceUUID> taskUUIDs) throws TaskNotFoundException { final Map<ActivityInstanceUUID, Set<String>> result = new HashMap<ActivityInstanceUUID, Set<String>>(); for (final ActivityInstanceUUID taskUUID : taskUUIDs) { final TaskInstance taskInstance = EnvTool.getAllQueriers(getQueryList()).getTaskInstance(taskUUID); if (taskInstance == null) { throw new TaskNotFoundException("bai_QRAPII_5", taskUUID); } result.put(taskUUID, CopyTool.copy(taskInstance.getTaskCandidates())); } return result; }
private static Set<String> executeRoleMapper(final TaskInstance task, final Performer performer) { final ProcessDefinitionUUID processUUID = task.getProcessDefinitionUUID(); final RoleMapperDefinition rolemapperDef = performer.getRoleMapperDefinition(); final ClassLoader baseClassLoader = Thread.currentThread().getContextClassLoader(); try { final ClassLoader processClassLoader = EnvTool.getClassDataLoader().getProcessClassLoader(processUUID); Thread.currentThread().setContextClassLoader(processClassLoader); if (rolemapperDef != null) { final RoleMapper roleMapper = EnvTool.getClassDataLoader().getInstance(RoleMapper.class, processUUID, rolemapperDef); try { return ConnectorExecutor.executeRoleMapper(roleMapper, task, performer.getName(), rolemapperDef.getParameters()); } catch (final Exception e) { throw new BonitaWrapperException(new RoleMapperInvocationException("be_TRT_2", rolemapperDef.toString(), e)); } } return null; } finally { Thread.currentThread().setContextClassLoader(baseClassLoader); } }
protected void executeActions(final RuntimeAPI runtimeAPI, final QueryRuntimeAPI queryRuntimeAPI) throws Exception { final TaskInstance task = queryRuntimeAPI.getTask(taskUUID); final ProcessInstanceUUID instanceUUID = task.getProcessInstanceUUID(); if (processVariables != null && !processVariables.isEmpty()) { runtimeAPI.setProcessInstanceVariables(instanceUUID, processVariables);