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()); } } } }
@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 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()); } } } }
public List<StateTransition> getStateTransitions() { List<StateTransition> result = new ArrayList<StateTransition>(); for (Map.Entry<String, String> entry : transitioningStatesMap.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); if (key == null) { for (String start : startStates) { result.add(new StateTransition(start, value, stateField, Style.TRANSITIONING)); } } else { result.add(new StateTransition(key, value, stateField, Style.TRANSITIONING)); } } for (Map.Entry<String, String> entry : doneStatesMap.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); if (key == null) { for (String start : transitioningStatesMap.values()) { result.add(new StateTransition(start, value, stateField, Style.DONE)); } } else { result.add(new StateTransition(key, value, stateField, Style.DONE)); } } 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); } } }