[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