protected ProcessDefinition getById(String id) { for (ProcessDefinition def : processDefinitions) { if (def.getName().equals(id)) { return def; } } return null; }
public String getProcessDot(ProcessDefinition def) { StringBuilder buffer = new StringBuilder(); Set<String> nodes = new HashSet<String>(); buffer.append("digraph \"").append(def.getName()).append("\" {\n"); addTransitions(def, nodes, buffer); buffer.append("}\n"); return buffer.toString(); }
@Override public String getName() { return instanceContext.getProcessDefinition().getName(); }
protected void registerActions() { actions.clear(); for (ProcessDefinition def : processDefinitions) { String resourceType = def.getResourceType(); Set<String> actions = this.actions.get(resourceType); if (resourceType == null) { continue; } if (def.getName().startsWith(resourceType.toLowerCase() + ".")) { if (actions == null) { actions = new LinkedHashSet<String>(); this.actions.put(resourceType, actions); } actions.add(def.getName().substring(resourceType.length() + 1)); } } }
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 String getLink(ProcessDefinition def) { return ApiContext.getUrlBuilder().resourceReferenceLink(ProcessDefinitionApi.class, def.getName()).toExternalForm(); }
@Override public String toString() { try { return "Process [" + instanceContext.getProcessDefinition().getName() + "] resource [" + instanceContext.getState().getResourceId() + "]"; } catch (NullPointerException e) { return super.toString(); } }
protected void registerActionDefinitions() { actionDefinitions.clear(); for (ProcessDefinition processDef : processDefinitions) { String type = processDef.getResourceType(); String processName = processDef.getName(); if (processName.startsWith(type.toLowerCase())) { processName = processName.substring(type.length() + 1, processName.length()); } Map<String, ActionDefinition> actionDefs = actionDefinitions.get(type); if (actionDefs == null) { actionDefs = new HashMap<String, ActionDefinition>(); actionDefinitions.put(type, actionDefs); } ActionDefinition def = actionDefs.get(processName); if (def == null) { def = new ActionDefinition(); actionDefs.put(processName, def); } for (StateTransition transition : processDef.getStateTransitions()) { if (transition.getType() != StateTransition.Style.DONE) { def.getValidStates().add(transition.getFromState()); } } } }
protected String getName(ProcessDefinition def) { StringBuilder buffer = new StringBuilder(def.getName()); buffer.append("["); if (def instanceof ExtensionBasedProcessDefinition) { int size = buffer.length(); appendExtensionPoint(size, buffer, "pre", ((ExtensionBasedProcessDefinition) def).getPreProcessListenersExtensionPoint()); appendExtensionPoint(size, buffer, "logic", ((ExtensionBasedProcessDefinition) def).getProcessHandlersExtensionPoint()); appendExtensionPoint(size, buffer, "post", ((ExtensionBasedProcessDefinition) def).getPostProcessListenersExtensionPoint()); if (buffer.length() == size) { buffer.append("no-op"); } buffer.append("] "); } String result = buffer.toString(); if (!result.contains("no-op")) { result += "\" fontname=\"times-bold\" color=\"green\" style=\"bold"; } return result; }
protected void addTransitions(ProcessDefinition def, Set<String> nodes, StringBuilder buffer) { String doneName = getName(def); String name = def.getName(); String link = getLink(def); List<StateTransition> transitions = def.getStateTransitions(); for (StateTransition transition : transitions) { String from = getTransitionName(transition, transition.getFromState()); String to = getTransitionName(transition, transition.getToState()); buffer.append(" \"").append(from).append("\" -> \"").append(to).append("\""); if (transition.getType() == Style.TRANSITIONING) { buffer.append(" [style=\"dotted\" label=\"" + name + "\" URL=\"" + link + "\"]"); } if (transition.getType() == Style.DONE) { buffer.append(" [color=\"orange\" label=\"" + doneName + "\" URL=\"" + link + "\"]"); } buffer.append(";\n"); if (transition.getType() == Style.TRANSITIONING && !nodes.contains(to)) { buffer.append(" \"").append(to).append("\" [color=\"orange\"];\n"); nodes.add(to); } } }
protected ProcessDefinitionApi toApi(ProcessDefinition def) { if (def == null) { return null; } ProcessDefinitionApi api = new ProcessDefinitionApi(); api.setName(def.getName()); api.setResourceType(def.getResourceType()); api.setStateTransitions(def.getStateTransitions()); if (def instanceof ExtensionBasedProcessDefinition) { api.setExtensionBased(true); api.setPreProcessListeners(((ExtensionBasedProcessDefinition) def).getPreProcessListenersExtensionPoint()); api.setProcessHandlers(((ExtensionBasedProcessDefinition) def).getProcessHandlersExtensionPoint()); api.setPostProcessListeners(((ExtensionBasedProcessDefinition) def).getPostProcessListenersExtensionPoint()); } return api; }
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); }