package org.jbpm.gd.jpdl.model; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jbpm.gd.common.model.AbstractNamedElement; public class ProcessDefinition extends AbstractNamedElement implements DescribableElement, NodeElementContainer, EventContainer, ActionElementContainer, TaskContainer, ExceptionHandlerContainer { private List swimlanes = new ArrayList(); private StartState startState; private List nodeElements = new ArrayList(); private List actionElements = new ArrayList(); private List events = new ArrayList(); private List exceptionHandlers = new ArrayList(); private List tasks = new ArrayList(); private HashMap customProperties = new HashMap(); private Description description; public void setDescription(Description newDescription) { Description oldDescription = description; description = newDescription; firePropertyChange("description", oldDescription, newDescription); } public Description getDescription() { return description; } public void setProperty(String name, String newValue) { String oldValue = (String)customProperties.get(name); customProperties.put(name, newValue); firePropertyChange("custom", new String[] { name, oldValue }, new String[] {name, newValue}); } public String getProperty(String name) { return (String)customProperties.get(name); } public Map getProperties() { return new HashMap(customProperties); } public void addSwimlane(Swimlane swimlane) { swimlanes.add(swimlane); firePropertyChange("swimlaneAdd", null, swimlane); } public void removeSwimlane(Swimlane swimlane) { swimlanes.remove(swimlane); firePropertyChange("swimlaneRemove", swimlane, null); } public Swimlane[] getSwimlanes() { return (Swimlane[])swimlanes.toArray(new Swimlane[swimlanes.size()]); } public void addStartState(StartState startState) { if (this.startState != null) return; this.startState = startState; nodeElements.add(0, startState); firePropertyChange("startStateAdd", null, startState); } public void removeStartState(StartState startState) { if (this.startState != startState || this.startState == null) return; this.startState = null; nodeElements.remove(0); firePropertyChange("startStateRemove", startState, null); } public StartState getStartState() { return startState; } public void addNodeElement(NodeElement nodeElement) { nodeElements.add(nodeElement); firePropertyChange("nodeElementAdd", null, nodeElement); } public void removeNodeElement(NodeElement nodeElement) { nodeElements.remove(nodeElement); firePropertyChange("nodeElementRemove", nodeElement, null); } public NodeElement[] getNodeElements() { return (NodeElement[])nodeElements.toArray(new NodeElement[nodeElements.size()]); } public void addActionElement(ActionElement actionElement) { actionElements.add(actionElement); firePropertyChange("actionElementAdd", null, actionElement); } public void removeActionElement(ActionElement actionElement) { actionElements.remove(actionElement); firePropertyChange("actionElementRemove", actionElement, null); } public ActionElement[] getActionElements() { return (ActionElement[])actionElements.toArray(new ActionElement[actionElements.size()]); } public void addEvent(Event event) { events.add(event); firePropertyChange("eventAdd", null, event); } public void removeEvent(Event event) { events.remove(event); firePropertyChange("eventRemove", event, null); } public Event[] getEvents() { return (Event[])events.toArray(new Event[events.size()]); } public void addExceptionHandler(ExceptionHandler exceptionHandler) { exceptionHandlers.add(exceptionHandler); firePropertyChange("exceptionHandlerAdd", null, exceptionHandler); } public void removeExceptionHandler(ExceptionHandler exceptionHandler) { exceptionHandlers.remove(exceptionHandler); firePropertyChange("exceptionHandlerRemove", exceptionHandler, null); } public ExceptionHandler[] getExceptionHandlers() { return (ExceptionHandler[])exceptionHandlers.toArray(new ExceptionHandler[exceptionHandlers.size()]); } public void addTask(Task task) { tasks.add(task); firePropertyChange("taskAdd", null, task); } public void removeTask(Task task) { tasks.remove(task); firePropertyChange("taskRemove", task, null); } public Task[] getTasks() { return (Task[])tasks.toArray(new Task[tasks.size()]); } public boolean canAdd(NodeElement node) { return !nodeElements.contains(node) && node.isPossibleChildOf(this); } public NodeElement getNodeElementByName(String name) { if (name == null) return null; NodeElement[] nodeElements = getNodeElements(); for (int i = 0; i < nodeElements.length; i++) { if (name.equals(nodeElements[i].getName())) { return nodeElements[i]; } } return null; } public Swimlane getSwimlaneByName(String name) { Swimlane[] swimlanes = getSwimlanes(); for (int i = 0; i < swimlanes.length; i++) { if (swimlanes[i].getName().equals(name)) { return swimlanes[i]; } } return null; } public String getFullyQualifiedName() { return "/"; } }