@Override public void recordActivityVariableUpdated(final String variableId, final Object variableValue, final ActivityInstanceUUID activityUUID, final String userId) { Misc.checkArgsNotNull(variableId, activityUUID, userId); final ActivityInstance activityInst = getActivityInstance(activityUUID); final Variable v = VariableUtil.createVariable(activityInst.getProcessDefinitionUUID(), variableId, variableValue); final VariablesOptions variablesOptions = EnvTool.getVariablesOptions(); if (variablesOptions.isStoreHistory()) { final VariableUpdate varUpdate = new InternalVariableUpdate(new Date(), userId, variableId, v); ((InternalActivityInstance) activityInst).addVariableUpdate(varUpdate); ((InternalActivityInstance) activityInst).updateLastUpdateDate(); } else { ((InternalActivityInstance) activityInst).setVariableValue(variableId, v); } }
private static void restoreTransientVariablesIfNecessary(final ActivityInstanceUUID activityInstanceUUID) { final InternalActivityInstance activityInstance = EnvTool.getJournalQueriers().getActivityInstance( activityInstanceUUID); if (activityInstance != null && needRestore(activityInstance.getState())) { final InternalActivityDefinition activityDefinition = EnvTool.getJournalQueriers().getActivity( activityInstance.getActivityDefinitionUUID()); final Map<String, Object> transientVariables = VariableUtil.createTransientVariables( activityDefinition.getDataFields(), activityInstance.getProcessInstanceUUID()); if (transientVariables != null && !transientVariables.isEmpty()) { addTransientVariables(activityInstanceUUID, transientVariables); if (LOG.isLoggable(Level.WARNING)) { final StringBuilder stb = new StringBuilder("Restoring transient varaibles for activity "); stb.append(activityInstanceUUID); stb.append(": the system probably was stopped during the variable life cycle. All transient variables for this activity will be restored to their default value."); LOG.warning(stb.toString()); } } } }
public void setTaskAssign(final ActivityState taskState, final String loggedInUserId, final String assignedUserId) { final Set<String> previouslyActiveUsers = new HashSet<String>(); if (isTaskAssigned()) { previouslyActiveUsers.add(getTaskUser()); } else { previouslyActiveUsers.addAll(getTaskCandidates()); } updateLastUpdateDate(); if (getAssignUpdates() == null) { assignUpdates = new ArrayList<AssignUpdate>(); } userId = assignedUserId; getAssignUpdates().add(new AssignUpdateImpl(new Date(), taskState, loggedInUserId, candidates, userId)); if (assignedUserId != null) { final Querier querier = EnvTool.getJournalQueriers(); final InternalProcessInstance instance = querier.getProcessInstance(getRootInstanceUUID()); if (previouslyActiveUsers != null && !previouslyActiveUsers.isEmpty()) { instance.removeActiveUsers(previouslyActiveUsers); } instance.addInvolvedUser(assignedUserId); instance.addActiveUser(assignedUserId); } }
public void updateLastUpdateDate() { lastUpdate = System.currentTimeMillis(); final Querier querier = EnvTool.getJournalQueriers(); querier.getProcessInstance(getProcessInstanceUUID()).updateLastUpdateDate(); if (getRootInstanceUUID() != null && getRootInstanceUUID() != getProcessInstanceUUID()) { querier.getProcessInstance(getRootInstanceUUID()).updateLastUpdateDate(); } }
|| ActivityState.ABORTED.equals(newState) || ActivityState.SKIPPED.equals(newState)) { if (isTask()) { final Querier querier = EnvTool.getJournalQueriers(); final InternalProcessInstance instance = querier.getProcessInstance(getRootInstanceUUID()); if (isTaskAssigned()) { instance.removeActiveUser(getTaskUser()); } else { instance.removeActiveUsers(getTaskCandidates()); updateLastUpdateDate(); final ActivityState oldState = getState(); state = newState; final Date actual = new Date(); getStateUpdates().add(new StateUpdateImpl(actual, newState, oldState, userId)); if (ActivityState.READY.equals(newState)) { readyDate = actual.getTime();
activityInstanceId, loopId); final InternalActivityInstance activityInstance = new InternalActivityInstance(activityUUID, activity, instanceUUID, internalExecution.getInstance().getRootInstanceUUID(), iterationId, activityInstanceId, loopId); activityInstance.setActivityState(ActivityState.READY, BonitaConstants.SYSTEM_USER); activityInstance.setVariables(initialVariables); false, false); if (dynamicDescription != null) { activityInstance.setDynamicDescription(dynamicDescription.toString()); activityInstance.setDynamicDescription(activity.getDynamicDescription()); false); if (dynamicLabel != null) { activityInstance.setDynamicLabel(dynamicLabel.toString()); activityInstance.setDynamicLabel(activity.getDynamicLabel());
@Override public Map<String, Object> evaluateGroovyExpressions(final Map<String, String> expressions, final ActivityInstanceUUID activityUUID, final Map<String, Object> context, final boolean useActivityScope, final boolean propagate) throws InstanceNotFoundException, ActivityNotFoundException, GroovyException { Misc.checkArgsNotNull(activityUUID); if (expressions == null || expressions.isEmpty()) { return Collections.emptyMap(); } final ClassLoader ori = Thread.currentThread().getContextClassLoader(); try { final InternalActivityInstance activityInstance = EnvTool.getAllQueriers().getActivityInstance(activityUUID); final ProcessDefinitionUUID definitionUUID = activityInstance.getProcessDefinitionUUID(); final ClassLoader processClassLoader = EnvTool.getClassDataLoader().getProcessClassLoader(definitionUUID); Thread.currentThread().setContextClassLoader(processClassLoader); final Binding binding = getBinding(definitionUUID, activityInstance.getProcessInstanceUUID(), activityUUID, context, useActivityScope, false, propagate); final Map<String, Object> results = evaluateGroovyExpressions(expressions, binding); propagateVariablesIfNecessary(activityUUID, null, propagate, binding); return results; } catch (final Exception e) { throw new GroovyException("Exception while evaluating expression. ActivityInstanceUUID: " + activityUUID, e); } finally { if (ori != null && ori != Thread.currentThread().getContextClassLoader()) { Thread.currentThread().setContextClassLoader(ori); } } }
public InternalActivityInstance(final ActivityInstance src) { super(src); setVariables(VariableUtil.createVariableMap(src.getProcessDefinitionUUID(), src.getVariablesBeforeStarted())); variableUpdates = null; for (final VariableUpdate varUpdate : src.getVariableUpdates()) { final Serializable value = varUpdate.getValue(); addVariableUpdate(new InternalVariableUpdate(varUpdate.getDate(), varUpdate.getUserId(), varUpdate.getName(), VariableUtil.createVariable(src.getProcessDefinitionUUID(), varUpdate.getName(), value))); } }
final InternalActivityInstance activityInstance = execution.getActivityInstance(); if (activityInstance != null) { LOG.log(Level.WARNING, "Exception caught in activity instance " + activityInstance.getUUID() + " of process instance" + activityInstance.getProcessInstanceUUID(), e); } else { final InternalProcessInstance instance = execution.getInstance();
@Override public Map<ProcessInstanceUUID, List<LightActivityInstance>> getLightActivityInstancesFromRoot( final Set<ProcessInstanceUUID> rootInstanceUUIDs) { final Map<ProcessInstanceUUID, List<LightActivityInstance>> result = new HashMap<ProcessInstanceUUID, List<LightActivityInstance>>(); final List<InternalActivityInstance> activities = EnvTool.getAllQueriers(getQueryList()) .getActivityInstancesFromRoot(rootInstanceUUIDs); for (final InternalActivityInstance activity : activities) { final ProcessInstanceUUID instanceUUID = activity.getRootInstanceUUID(); if (!result.containsKey(instanceUUID)) { result.put(instanceUUID, new ArrayList<LightActivityInstance>()); } result.get(instanceUUID).add(new LightActivityInstanceImpl(activity)); } return result; }
public int compare(InternalActivityInstance o1, InternalActivityInstance o2) { return o2.getLastUpdateDate().compareTo(o1.getLastUpdateDate()); } }
@Override public Set<LightActivityInstance> getLightActivityInstances(final ProcessInstanceUUID instanceUUID, final String activityName) throws InstanceNotFoundException, ActivityNotFoundException { final Set<LightActivityInstance> result = new HashSet<LightActivityInstance>(); final Set<InternalActivityInstance> activities = EnvTool.getAllQueriers(getQueryList()).getActivityInstances( instanceUUID); for (final InternalActivityInstance record : activities) { if (record.getActivityName().equals(activityName)) { result.add(new LightActivityInstanceImpl(record)); } } if (result.isEmpty()) { throw new ActivityNotFoundException("bai_QRAPII_4", instanceUUID, activityName); } return result; }
public InternalProcessInstance(final ProcessInstance src) { super(src); activities = new HashSet<ActivityInstance>(); for (final ActivityInstance activity : src.getActivities()) { activities.add(new InternalActivityInstance(activity)); } variableUpdates = null; for (final VariableUpdate varUpdate : src.getVariableUpdates()) { final Serializable value = varUpdate.getValue(); addVariableUpdate(new InternalVariableUpdate(varUpdate.getDate(), varUpdate.getUserId(), varUpdate.getName(), VariableUtil.createVariable(src.getProcessDefinitionUUID(), varUpdate.getName(), value))); } setVariables(src.getInitialVariableValues()); if (src.getClass().equals(InternalProcessInstance.class)) { final InternalProcessInstance other = (InternalProcessInstance) src; userXPRead = other.getUserXPRead(); nbOfAttachments = other.nbOfAttachments; } }
activity = EnvTool.getAllQueriers().getActivityInstance(activityInstanceUUID); processInstance = null; processDefinitionUUIDToUse = activity.getProcessDefinitionUUID(); } else if (processInstanceUUID != null) { activity = null;
final ActivityInstance activityInstance = journal.getActivityInstance(instanceUUID, internalExecution.getNodeName(), internalExecution.getIterationId(), internalExecution.getActivityInstanceId(), internalExecution.getActivityInstance().getLoopId()); maxIterations = (Integer) GroovyUtil.evaluate(maxIterationsExpr, null, activityInstance.getUUID(), false, false);
public SimpleBinding(final Map<String, Object> variables, final ProcessDefinitionUUID processUUID, final ProcessInstanceUUID instanceUUID, final ActivityInstanceUUID activityInstanceUUID) throws IOException, ClassNotFoundException { super(); attachmentsWasLoaded = false; if (variables != null) { for (final Map.Entry<String, Object> variable : variables.entrySet()) { Object value = variable.getValue(); if (value instanceof ObjectVariable) { value = ((ObjectVariable) value).getValue(); } allVariables.put(variable.getKey(), value); } } if (processUUID != null) { this.processUUID = processUUID; } else if (instanceUUID != null) { this.processUUID = EnvTool.getAllQueriers().getProcessInstance(instanceUUID).getProcessDefinitionUUID(); } else if (activityInstanceUUID != null) { this.processUUID = EnvTool.getAllQueriers().getActivityInstance(activityInstanceUUID) .getProcessDefinitionUUID(); } if (instanceUUID != null) { this.instanceUUID = instanceUUID; } else if (activityInstanceUUID != null) { this.instanceUUID = EnvTool.getAllQueriers().getActivityInstance(activityInstanceUUID).getProcessInstanceUUID(); } this.activityInstanceUUID = activityInstanceUUID; }
@Override public Map<ProcessInstanceUUID, List<LightActivityInstance>> getLightActivityInstancesFromRoot( final Set<ProcessInstanceUUID> rootInstanceUUIDs, final ActivityState state) { final Map<ProcessInstanceUUID, List<LightActivityInstance>> result = new HashMap<ProcessInstanceUUID, List<LightActivityInstance>>(); final List<InternalActivityInstance> activities = EnvTool.getAllQueriers(getQueryList()) .getActivityInstancesFromRoot(rootInstanceUUIDs, state); for (final InternalActivityInstance activity : activities) { final ProcessInstanceUUID instanceUUID = activity.getRootInstanceUUID(); if (!result.containsKey(instanceUUID)) { result.put(instanceUUID, new ArrayList<LightActivityInstance>()); } result.get(instanceUUID).add(new LightActivityInstanceImpl(activity)); } return result; }
public void setTaskAssign(final ActivityState taskState, final String loggedInUserId, final Set<String> candidates) { final Set<String> previouslyActiveUsers = new HashSet<String>(); if (isTaskAssigned()) { previouslyActiveUsers.add(getTaskUser()); } else { previouslyActiveUsers.addAll(getTaskCandidates()); } updateLastUpdateDate(); if (getAssignUpdates() == null) { assignUpdates = new ArrayList<AssignUpdate>(); } userId = null; this.candidates = candidates; getAssignUpdates().add(new AssignUpdateImpl(new Date(), taskState, loggedInUserId, this.candidates, userId)); if (candidates != null && !candidates.isEmpty()) { final Querier querier = EnvTool.getJournalQueriers(); final InternalProcessInstance instance = querier.getProcessInstance(getRootInstanceUUID()); if (previouslyActiveUsers != null && !previouslyActiveUsers.isEmpty()) { instance.removeActiveUsers(previouslyActiveUsers); } instance.addInvolvedUsers(candidates); instance.addActiveUsers(candidates); } }