@Override protected Object getByIdInternal(String type, String id, ListOptions options) { for (ProcessDefinition def : processDefinitions) { if (id.equalsIgnoreCase(def.getResourceType())) { return newResource(def.getResourceType(), options.getInclude()); } } return null; }
public String getResourceDot(String resourceType) { StringBuilder buffer = new StringBuilder(); Set<String> nodes = new HashSet<String>(); buffer.append("digraph \"").append(resourceType).append("\" {\n"); for (ProcessDefinition def : processDefinitions) { if (ObjectUtils.equals(resourceType, def.getResourceType())) { addTransitions(def, nodes, buffer); } } buffer.append("}\n"); return buffer.toString(); }
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)); } } }
@Override protected Object listInternal(SchemaFactory schemaFactory, String type, Map<Object, Object> criteria, ListOptions options) { Set<String> found = new HashSet<String>(); List<ResourceDefinition> result = new ArrayList<ResourceDefinition>(); for (ProcessDefinition def : processDefinitions) { String resourceType = def.getResourceType(); if (found.contains(resourceType)) { continue; } result.add(newResource(resourceType, options.getInclude())); found.add(resourceType); } return result; }
protected void registerStates() { transitioningStates.clear(); for (ProcessDefinition def : processDefinitions) { Set<String> validStates = this.validStates.get(def.getResourceType()); Set<String> states = transitioningStates.get(def.getResourceType()); for (StateTransition transition : def.getStateTransitions()) { if (states == null) { states = new HashSet<String>(); transitioningStates.put(def.getResourceType(), states); } if (validStates == null) { validStates = new TreeSet<String>(); this.validStates.put(def.getResourceType(), validStates); } switch (transition.getType()) { case DONE: states.add(transition.getFromState()); break; case TRANSITIONING: states.add(transition.getToState()); break; default: } if (ObjectMetaDataManager.STATE_FIELD.equals(transition.getField())) { validStates.add(transition.getToState()); validStates.add(transition.getFromState()); } } } }
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()); } } } }
@Override public void start() { String type = schemaFactory.getSchemaName(Agent.class); if (type == null) { return; } for (ProcessDefinition def : processDefinitions) { if (!type.equals(def.getResourceType())) { continue; } for (StateTransition transition : def.getStateTransitions()) { if (transition.getType() == StateTransition.Style.DONE) { transitioningToDone.put(transition.getFromState(), transition.getToState()); } } } }
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); }