package org.jbpm.gd.jpdl.util; import java.util.HashSet; import java.util.Set; import org.jbpm.gd.jpdl.model.Action; import org.jbpm.gd.jpdl.model.ActionElement; import org.jbpm.gd.jpdl.model.CreateTimer; import org.jbpm.gd.jpdl.model.Delegation; import org.jbpm.gd.jpdl.model.Event; import org.jbpm.gd.jpdl.model.ExceptionHandler; import org.jbpm.gd.jpdl.model.NodeElement; import org.jbpm.gd.jpdl.model.ProcessDefinition; import org.jbpm.gd.jpdl.model.StartState; import org.jbpm.gd.jpdl.model.SuperState; import org.jbpm.gd.jpdl.model.Swimlane; import org.jbpm.gd.jpdl.model.Task; import org.jbpm.gd.jpdl.model.Timer; import org.jbpm.gd.jpdl.model.TimerContainer; public class JavaClassNameCollector { public static Set getJavaClassNames(ProcessDefinition processDefinition) { HashSet result = new HashSet(); addJavaClassNames(result, processDefinition.getActionElements()); addJavaClassNames(result, processDefinition.getEvents()); addJavaClassNames(result, processDefinition.getExceptionHandlers()); addJavaClassNames(result, processDefinition.getNodeElements()); addJavaClassNames(result, processDefinition.getStartState()); addJavaClassNames(result, processDefinition.getSwimlanes()); addJavaClassNames(result, processDefinition.getTasks()); return result; } private static void addJavaClassNames(Set result, ActionElement[] actionElements) { for (int i = 0; i < actionElements.length; i++) { if (actionElements[i] instanceof Action) { Action action = (Action)actionElements[i]; if (action.getClassName() != null) { result.add(action.getClassName()); } } if (actionElements[i] instanceof CreateTimer) { Action action = ((CreateTimer)actionElements[i]).getAction(); if (action != null && action.getClassName() != null) { result.add(action.getClassName()); } } } } private static void addJavaClassNames(Set result, Event[] events) { for (int i = 0; i < events.length; i++) { addJavaClassNames(result, events[i].getActionElements()); } } private static void addJavaClassNames(Set result, ExceptionHandler[] exceptionHandlers) { for (int i = 0; i < exceptionHandlers.length; i++) { addJavaClassNames(result, exceptionHandlers[i].getActionElements()); } } private static void addJavaClassNames(Set result, NodeElement[] nodeElements) { for (int i = 0; i < nodeElements.length; i++) { addJavaClassNames(result, nodeElements[i].getEvents()); addJavaClassNames(result, nodeElements[i].getExceptionHandlers()); addJavaClassNames(result, nodeElements[i].getTransitions()); if (nodeElements[i] instanceof TimerContainer) { addJavaClassNames(result, ((TimerContainer)nodeElements[i]).getTimers()); } if (nodeElements[i] instanceof SuperState) { SuperState superState = (SuperState)nodeElements[i]; addJavaClassNames(result, superState.getNodeElements()); } } } private static void addJavaClassNames(Set result, StartState startState) { if (startState == null) return; addJavaClassNames(result, startState.getEvents()); addJavaClassNames(result, startState.getExceptionHandlers()); addJavaClassNames(result, startState.getTransitions()); } private static void addJavaClassNames(Set result, Swimlane[] swimlanes) { for (int i = 0; i <swimlanes.length; i++) { addJavaClassName(result, swimlanes[i].getAssignment()); } } private static void addJavaClassNames(Set result, Task[] tasks) { for (int i = 0; i < tasks.length; i++) { addJavaClassName(result, tasks[i].getAssignment()); addJavaClassNames(result, tasks[i].getEvents()); addJavaClassNames(result, tasks[i].getTimers()); addJavaClassName(result, tasks[i].getController()); } } private static void addJavaClassNames(Set result, Timer[] timers) { for (int i = 0; i < timers.length; i++) { if (timers[i].getAction() != null) { Action action = timers[i].getAction(); if (action.getClassName() != null) { result.add(action.getClassName()); } } } } private static void addJavaClassName(Set result, Delegation delegation) { if (delegation != null && delegation.getClassName() != null) { result.add(delegation.getClassName()); } } }