[jbpm-commits] JBoss JBPM SVN: r1579 - in api/trunk/modules/api/src/main/java/org/jboss/bpm: model and 1 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Thu Jul 10 13:53:01 EDT 2008
Author: thomas.diesler at jboss.com
Date: 2008-07-10 13:53:01 -0400 (Thu, 10 Jul 2008)
New Revision: 1579
Modified:
api/trunk/modules/api/src/main/java/org/jboss/bpm/client/ProcessManager.java
api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Process.java
api/trunk/modules/api/src/main/java/org/jboss/bpm/util/ProcessUnmarshaller.java
Log:
Add Process lifecycle
Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/client/ProcessManager.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/client/ProcessManager.java 2008-07-10 17:52:51 UTC (rev 1578)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/client/ProcessManager.java 2008-07-10 17:53:01 UTC (rev 1579)
@@ -84,7 +84,10 @@
throw new EngineShutdownException("Cannot create new Process while engine is shutting down");
Process proc = createProcessOverride(procDescriptor);
+ proc.initialize();
+
marshallProcess(proc);
+
return proc;
}
@@ -98,7 +101,10 @@
throw new EngineShutdownException("Cannot create new Process while engine is shutting down");
Process proc = createProcessOverride(procURL);
+ proc.initialize();
+
marshallProcess(proc);
+
return proc;
}
Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Process.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Process.java 2008-07-10 17:52:51 UTC (rev 1578)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Process.java 2008-07-10 17:53:01 UTC (rev 1579)
@@ -55,7 +55,11 @@
private StartEvent startEvent;
private List<Task> tasks = new ArrayList<Task>();
private List<EndEvent> endEvents = new ArrayList<EndEvent>();
-
+
+ @XmlTransient
+ public enum ProcessState { CREATED, INITIALIZED, STARTED, ENDED };
+ private ProcessState processState = ProcessState.CREATED;
+
/**
* Construct an anonymous process
*/
@@ -92,7 +96,7 @@
if (flowObject instanceof NamedFlowObject)
{
String name = ((NamedFlowObject)flowObject).getName();
- if (findFlowObject(name) != null)
+ if (name != null && findFlowObject(name) != null)
throw new NameNotUniqueException("NamedFlowObject: " + name);
}
@@ -148,12 +152,10 @@
*/
public List<EndEvent> getEndEvents()
{
- // Lock end events
- if (endEvents.size() > 0)
- {
- endEvents = Collections.unmodifiableList(endEvents);
- }
- return endEvents;
+ if (processState == ProcessState.CREATED)
+ return endEvents;
+
+ return Collections.unmodifiableList(endEvents);
}
/**
@@ -170,12 +172,10 @@
*/
public List<Task> getTasks()
{
- // Lock tasks
- if (tasks.size() > 0)
- {
- tasks = Collections.unmodifiableList(tasks);
- }
- return tasks;
+ if (processState == ProcessState.CREATED)
+ return tasks;
+
+ return Collections.unmodifiableList(tasks);
}
/**
@@ -207,10 +207,13 @@
*/
public NamedFlowObject findFlowObject(String name)
{
+ if (name == null)
+ throw new IllegalArgumentException("Cannot find flow object with name: null");
+
NamedFlowObject nfo = null;
for (FlowObject aux : getFlowObjects())
{
- if (aux instanceof NamedFlowObject && ((NamedFlowObject)aux).getName().equals(name))
+ if (aux instanceof NamedFlowObject && name.equals(((NamedFlowObject)aux).getName()))
{
nfo = (NamedFlowObject)aux;
break;
@@ -246,6 +249,39 @@
return new Signal(this, Signal.Type.EXIT_PROCESS);
}
+
+ /**
+ * Get the process state
+ */
+ public ProcessState getProcessState()
+ {
+ return processState;
+ }
+
+ /**
+ * Set the process state
+ */
+ public void initialize()
+ {
+ if (processState != ProcessState.CREATED)
+ throw new IllegalStateException("Cannot initialize process in state: " + processState);
+
+ for (EndEvent aux : endEvents)
+ aux.setProcess(this);
+
+ for (Task aux : tasks)
+ aux.setProcess(this);
+
+ if (startEvent == null)
+ throw new InvalidProcessException("Process does not have a start event");
+
+ if (endEvents.size() == 0)
+ throw new InvalidProcessException("Process does not have end events");
+
+ processState = ProcessState.INITIALIZED;
+ }
+
+
@XmlTransient
class ResultFuture implements Future<Result>
{
Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/util/ProcessUnmarshaller.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/util/ProcessUnmarshaller.java 2008-07-10 17:52:51 UTC (rev 1578)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/util/ProcessUnmarshaller.java 2008-07-10 17:53:01 UTC (rev 1579)
@@ -28,9 +28,7 @@
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
-import org.jboss.bpm.model.EndEvent;
import org.jboss.bpm.model.Process;
-import org.jboss.bpm.model.Task;
/**
* A JAXB unmarshaller for a Process
@@ -45,13 +43,7 @@
JAXBContext jaxbContext = JAXBContext.newInstance(Process.class.getPackage().getName());
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Process proc = (Process)unmarshaller.unmarshal(xml);
-
- for (EndEvent aux : proc.getEndEvents())
- aux.setProcess(proc);
-
- for (Task aux : proc.getTasks())
- aux.setProcess(proc);
-
+ proc.initialize();
return proc;
}
}
More information about the jbpm-commits
mailing list