@Override public String getResourceId() { return instanceContext.getState().getResourceId(); }
protected void publishChanged(String previousState, String newState, boolean defer) { for (StateChangeMonitor monitor : context.getChangeMonitors()) { monitor.onChange(defer, previousState, newState, record, instanceContext.getState(), context); } }
@Override public String toString() { try { return "Process [" + instanceContext.getProcessDefinition().getName() + "] resource [" + instanceContext.getState().getResourceId() + "]"; } catch (NullPointerException e) { return super.toString(); } }
protected String getConfiguredChainProcess() { ProcessState state = instanceContext.getState(); ProcessDefinition processDefinition = instanceContext.getProcessDefinition(); if (state.getData().containsKey(processDefinition.getName() + ProcessLogic.CHAIN_PROCESS)) { return state.getData().get(processDefinition.getName() + ProcessLogic.CHAIN_PROCESS).toString(); } return null; }
protected void assertState(String previousState) { ProcessState state = instanceContext.getState(); state.reload(); String newState = state.getState(); if (!previousState.equals(newState)) { preRunStateCheck(); throw new ProcessExecutionExitException("Previous state [" + previousState + "] does not equal current state [" + newState + "]", STATE_CHANGED); } }
protected String setTransitioning() { ProcessState state = instanceContext.getState(); String previousState = state.getState(); String newState = state.setTransitioning(); log.debug("Changing state [{}->{}] on [{}:{}]", previousState, newState, record.getResourceType(), record.getResourceId()); execution.getTransitions().add(new ProcessStateTransition(previousState, newState, "transitioning", now())); publishChanged(previousState, newState, schedule); return newState; }
protected void preRunStateCheck() { if (instanceContext.getState().isDone(schedule)) { String configuredChainProcess = getConfiguredChainProcess(); if (configuredChainProcess != null) { try { scheduleChain(configuredChainProcess); throw new ProcessExecutionExitException(ExitReason.CHAIN); } catch (ProcessCancelException e) { } } throw new ProcessExecutionExitException(ALREADY_DONE); } }
protected boolean setDone(String previousState) { boolean chained = false; final ProcessState state = instanceContext.getState(); assertState(previousState); if (chainProcess != null) { scheduleChain(chainProcess); chained = true; } String newState = chained ? state.getState() : state.setDone(); log.debug("Changing state [{}->{}] on [{}:{}]", previousState, newState, record.getResourceType(), record.getResourceId()); execution.getTransitions().add(new ProcessStateTransition(previousState, newState, chained ? "chain" : "done", now())); publishChanged(previousState, newState, schedule); return chained; }
protected void startLock() { ProcessState state = instanceContext.getState(); LockDefinition lockDef = state.getProcessLock(); if (schedule) { LockDefinition scheduleLock = new Namespace("schedule").getLockDefinition(lockDef); if (record.getPredicate() == null) { lockDef = scheduleLock; } else { lockDef = new DefaultMultiLockDefinition(lockDef, scheduleLock); } } instanceContext.setProcessLock(lockDef); }
protected void scheduleChain(final String chainProcess) { final ProcessState state = instanceContext.getState(); final LaunchConfiguration config = new LaunchConfiguration(chainProcess, record.getResourceType(), record.getResourceId(), record.getAccountId(), record.getPriority(), state.getData()); config.setParentProcessState(state); ExecutionExceptionHandler handler = this.context.getExceptionHandler(); Runnable run = new Runnable() { @Override public void run() { DefaultProcessInstanceImpl.this.context.getProcessManager().scheduleProcessInstance(config); log.debug("Chained [{}] to [{}]", record.getProcessName(), chainProcess); state.reload(); } }; if (handler == null) { run.run(); } else { handler.wrapChainSchedule(state, context, run); } }
protected boolean runHandlers(ProcessPhase phase, List<? extends ProcessLogic> handlers) { boolean shouldDelegate = false; final ProcessDefinition processDefinition = instanceContext.getProcessDefinition(); final ProcessState state = instanceContext.getState(); ProcessPhase currentPhase = instanceContext.getPhase();
boolean success = false; try { ProcessState state = instanceContext.getState(); state.rebuild(); throw new ProcessCancelException("State [" + instanceContext.getState().getState() + "] is not valid for process [" + getName() + ":" + getId() + "] on resource [" + getResourceId() + "]"); Predicate predicate = record.getPredicate(); if (predicate != null) { if (!predicate.evaluate(this.instanceContext.getState(), this, this.instanceContext.getProcessDefinition())) { throw new ProcessCancelException("Predicate is not valid"); if (instanceContext.getState().isStart(record)) { previousState = setTransitioning();
protected void openLog(EngineContext engineContext) { if (processLog == null) { ParentLog parentLog = engineContext.peekLog(); if (parentLog == null) { processLog = new ProcessLog(); } else { processLog = parentLog.newChildLog(); } } execution = processLog.newExecution(); execution.setProcessId(record.getId()); execution.setResourceType(instanceContext.getProcessDefinition().getResourceType()); execution.setResourceId(instanceContext.getState().getResourceId()); execution.setProcessName(instanceContext.getProcessDefinition().getName()); engineContext.pushLog(execution); }