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); } }
@Override public void finishTask(final ActivityInstanceUUID taskUUID, final boolean assignTask) throws TaskNotFoundException, IllegalTaskStateException { FacadeUtil.checkArgsNotNull(taskUUID); TaskManager.finish(taskUUID, assignTask); }
public static void skip(final ActivityInstanceUUID taskUUID, final Map<String, Object> variablesToUpdate) throws TaskNotFoundException, IllegalTaskStateException { final TaskInstance task = getTask(taskUUID); final Execution internalExecution = getExecution(taskUUID); ActivityManager.skip(internalExecution, task, variablesToUpdate); }
public static void assign(final ActivityInstanceUUID taskUUID, final Set<String> candidates) throws TaskNotFoundException { final TaskInstance task = getTask(taskUUID); if (LOG.isLoggable(Level.FINE)) { LOG.fine("Assigning: " + task); } // record the assign assign(task, candidates, null); if (LOG.isLoggable(Level.FINE)) { LOG.fine("Assigned: " + task); } }
public static void resume(final ActivityInstanceUUID taskUUID, final boolean taskAssign) throws IllegalTaskStateException, TaskNotFoundException { final TaskInstance task = getTask(taskUUID); assign(task, null, currentUserId); final Execution internalExecution = getExecution(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); }
public static void suspend(final ActivityInstanceUUID taskUUID, final boolean assignTask) throws TaskNotFoundException, IllegalTaskStateException { final TaskInstance task = getTask(taskUUID); assign(task, null, currentUserId); final Execution internalExecution = getExecution(taskUUID); final ActivityDefinition activityDef = getActivityDefinition(processUUID, activityName);
@Override public void assignTask(final ActivityInstanceUUID taskUUID, final String userId) throws TaskNotFoundException { FacadeUtil.checkArgsNotNull(taskUUID, userId); TaskManager.assign(taskUUID, userId); }
private static Set<Performer> getPerformers(final ActivityDefinition activityDefinition) { final Set<String> performers = activityDefinition.getPerformers(); Set<Performer> result = null; if (!performers.isEmpty()) { final ProcessDefinition processDef = EnvTool.getJournalQueriers().getProcess( activityDefinition.getProcessDefinitionUUID()); result = new HashSet<Performer>(); for (final String performer : performers) { result.add(getPerformer(activityDefinition, processDef, performer)); } } return result; }
private static Set<String> getCandidates(final Set<Performer> performers, final TaskInstance task) { Set<String> candidates = null; if (performers != null) { candidates = new HashSet<String>(); for (final Performer performer : performers) { if (performer.isHuman()) { candidates.add(performer.getName()); } else if (performer.getRoleMapperDefinition() != null) { final Set<String> tmp = executeRoleMapper(task, performer); if (tmp != null) { candidates.addAll(tmp); } } } } return candidates; }
private static Set<String> executeFilter(final TaskInstance task, final Set<String> candidates, final Performer performer) { final ProcessDefinitionUUID processUUID = task.getProcessDefinitionUUID(); final ClassLoader baseClassLoader = Thread.currentThread().getContextClassLoader(); try { final ClassLoader processClassLoader = EnvTool.getClassDataLoader().getProcessClassLoader(processUUID); Thread.currentThread().setContextClassLoader(processClassLoader); final FilterDefinition filterDefinition = performer.getFilterDefinition(); if (filterDefinition != null) { final PerformerAssign performerAssign = getPerformerAssign(processUUID, filterDefinition); Filter filter = null; if (performerAssign == null) { filter = EnvTool.getClassDataLoader().getInstance(Filter.class, processUUID, filterDefinition); } else { filter = new PerformerAssignFilter(); } try { return ConnectorExecutor.executeFilter(filter, performerAssign, task, candidates, filterDefinition.getParameters()); } catch (final Exception e) { throw new BonitaWrapperException(e); } } return candidates; } finally { Thread.currentThread().setContextClassLoader(baseClassLoader); } }
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)) { assign(task, null, EnvTool.getUserId()); final Execution internalExecution = getExecution(taskUUID); recorder.recordBodyStarted(task); recorder.recordTaskStarted(taskUUID, EnvTool.getUserId());
public static void assign(final ActivityInstanceUUID taskUUID, final String userId) throws TaskNotFoundException { final TaskInstance task = getTask(taskUUID); if (LOG.isLoggable(Level.FINE)) { LOG.fine("Assigning: " + task + " to " + userId); } // record the assign assign(task, null, userId); if (LOG.isLoggable(Level.FINE)) { LOG.fine("Assigned: " + task + " to " + userId); } }
@Override public void assignTask(final ActivityInstanceUUID taskUUID) throws TaskNotFoundException { FacadeUtil.checkArgsNotNull(taskUUID); TaskManager.assign(taskUUID); }
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)) { assign(task, null, task.getTaskUser()); final Execution internalExecution = getExecution(taskUUID); final InternalActivityDefinition activityDef = internalExecution.getNode();
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); } }
@Override public void assignTask(final ActivityInstanceUUID taskUUID, final Set<String> candidates) throws TaskNotFoundException { FacadeUtil.checkArgsNotNull(taskUUID, candidates); TaskManager.assign(taskUUID, candidates); }