[jbpm-commits] JBoss JBPM SVN: r1565 - in api/trunk: modules/api and 7 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Jul 10 05:00:19 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-07-10 05:00:19 -0400 (Thu, 10 Jul 2008)
New Revision: 1565

Added:
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/InitialToken.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java
Removed:
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/internal/
   api/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/BasicTask.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/Signal.java
Modified:
   api/trunk/modules/api/pom.xml
   api/trunk/modules/api/src/main/java/org/jboss/bpm/client/SignalManager.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Activity.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ComplexGateway.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Event.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ExclusiveGateway.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/FlowObject.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/InclusiveGateway.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ItermediateEvent.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/NamedFlowObject.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ParallelGateway.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Process.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/StartEvent.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/SubProcess.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Task.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/SignalListener.java
   api/trunk/modules/api/src/main/java/org/jboss/bpm/test/DefaultEngineTestCase.java
   api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/context/TaskA.java
   api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/sequence/BasicSequenceTest.java
   api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/BasicTaskTest.java
   api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/TaskA.java
   api/trunk/pom.xml
Log:
Use JAXB for API model

Modified: api/trunk/modules/api/pom.xml
===================================================================
--- api/trunk/modules/api/pom.xml	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/pom.xml	2008-07-10 09:00:19 UTC (rev 1565)
@@ -10,11 +10,8 @@
 <!-- ====================================================================== -->
 
 <!-- $Id$ -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
-
   <name>JBoss jBPM - API Source</name>
   <groupId>org.jboss.jbpm</groupId>
   <artifactId>jbpm-api</artifactId>
@@ -33,6 +30,10 @@
 
     <!-- Compile Dependencies -->
     <dependency>
+      <groupId>com.sun.xml.bind</groupId>
+      <artifactId>jaxb-impl</artifactId>
+    </dependency>
+    <dependency>
       <groupId>org.jboss.microcontainer</groupId>
       <artifactId>jboss-kernel</artifactId>
     </dependency>
@@ -61,5 +62,4 @@
       </plugin>
     </plugins>
   </reporting>
-  
 </project>
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/client/SignalManager.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/client/SignalManager.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/client/SignalManager.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -30,7 +30,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.jboss.bpm.runtime.Signal;
+import org.jboss.bpm.model.Signal;
 import org.jboss.bpm.runtime.SignalListener;
 
 /**

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Activity.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Activity.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Activity.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,8 +21,8 @@
  */
 package org.jboss.bpm.model;
 
+import javax.xml.bind.annotation.XmlType;
 
-
 // $Id$
 
 /**
@@ -33,6 +33,20 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface Activity extends NamedFlowObject
+ at XmlType(name="Activity")
+public abstract class Activity extends NamedFlowObject
 {
+  /** 
+   * Call to initialize fully
+   * Note, this MUST NOT leak into the public API. 
+   */
+  protected void init(String name)
+  {
+    if (name == null)
+    {
+      Process proc = getProcess();
+      name = "AnonymousActivity#" + proc.getFlowObjects().size();
+      setName(name);
+    }
+  }
 }
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ComplexGateway.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ComplexGateway.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ComplexGateway.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,7 +21,9 @@
  */
 package org.jboss.bpm.model;
 
+import javax.xml.bind.annotation.XmlType;
 
+
 // $Id$
 
 /**
@@ -34,6 +36,7 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface ComplexGateway extends Gateway
+ at XmlType(name="ComplexGateway")
+public class ComplexGateway extends Gateway
 {
 }
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,7 +21,13 @@
  */
 package org.jboss.bpm.model;
 
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
 
+import org.jboss.bpm.runtime.Attachments;
+import org.jboss.bpm.runtime.Token;
+
+
 // $Id$
 
 /**
@@ -34,8 +40,42 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface EndEvent extends Event
+ at XmlType(name="EndEvent")
+public class EndEvent extends Event
 {
+  @XmlTransient
+  private Result result;
+  
   /** Get the result */
-  Result getResult();
+  public Result getResult()
+  {
+    return result;
+  }
+
+  /** Get signal for enter */
+  public Signal getEnterSignal()
+  {
+    return new Signal(getProcess(), Signal.Type.ENTER_END_EVENT);
+  }
+  
+  /** Get signal for exit */
+  public Signal getExitSignal()
+  {
+    return new Signal(getProcess(), Signal.Type.EXIT_END_EVENT);
+  }
+
+  @Override
+  public void execute(final Token token)
+  {
+    super.execute(token);
+    
+    // Provide the result
+    result = new Result()
+    {
+      public Attachments getAttachments()
+      {
+        return token.getExecutionContext();
+      }
+    };
+  }
 }
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Event.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Event.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Event.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,8 +21,10 @@
  */
 package org.jboss.bpm.model;
 
+import javax.xml.bind.annotation.XmlType;
 
 
+
 // $Id$
 
 /**
@@ -32,6 +34,22 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface Event extends FlowObject
+ at XmlType(name="Event")
+public abstract class Event extends FlowObject
 {
+  /** 
+   * Get signal for enter 
+   */
+  public Signal getEnterSignal()
+  {
+    return new Signal(getProcess(), Signal.Type.ENTER_EVENT);
+  }
+  
+  /** 
+   * Get signal for exit 
+   */
+  public Signal getExitSignal()
+  {
+    return new Signal(getProcess(), Signal.Type.EXIT_EVENT);
+  }
 }
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ExclusiveGateway.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ExclusiveGateway.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ExclusiveGateway.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,7 +21,9 @@
  */
 package org.jboss.bpm.model;
 
+import javax.xml.bind.annotation.XmlType;
 
+
 // $Id$
 
 /**
@@ -30,6 +32,7 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface ExclusiveGateway extends Gateway
+ at XmlType(name="ExclusiveGateway")
+public class ExclusiveGateway extends Gateway
 {
 }
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/FlowObject.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/FlowObject.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/FlowObject.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,7 +21,10 @@
  */
 package org.jboss.bpm.model;
 
-import org.jboss.bpm.runtime.Signal;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+import org.jboss.bpm.client.SignalManager;
 import org.jboss.bpm.runtime.Token;
 
 //$Id$
@@ -32,17 +35,90 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface FlowObject
+ at XmlType(name="FlowObject")
+public abstract class FlowObject
 {
-  /** Get the associated Process */
-  Process getProcess();
+  @XmlTransient
+  protected Process process;
+  @XmlTransient
+  private Object implObject;
+  
+  /** 
+   * Get the associated Process 
+   */
+  public Process getProcess()
+  {
+    return process;
+  }
 
-  /** Get signal for enter */
-  Signal getEnterSignal();
+  /** 
+   * Get signal for enter 
+   */
+  @XmlTransient
+  public abstract Signal getEnterSignal();
 
-  /** Get signal for exit */
-  Signal getExitSignal();
+  /** 
+   * Get signal for exit 
+   */
+  @XmlTransient
+  public abstract Signal getExitSignal();
 
-  /** Execute this flow object*/
-  void execute(Token token);
+  /** 
+   * Set the associated process
+   * Note, this MUST NOT leak into the public API. 
+   */
+  @XmlTransient
+  // TODO
+  public void setProcess(Process process)
+  {
+    if (this.process != null)
+      throw new IllegalStateException("Cannot reassign task to process");
+    
+    this.process = process;
+  }
+
+  /** 
+   * Set the associated implementation object
+   * Note, this MUST NOT leak into the public API. 
+   */
+  // TODO
+  public Object getImplObject()
+  {
+    return implObject;
+  }
+
+  /** 
+   * Get the associated implementation object
+   * Note, this MUST NOT leak into the public API. 
+   */
+  protected void setImplObject(Object implObject)
+  {
+    this.implObject = implObject;
+  }
+  
+  /** 
+   * Execute this flow object
+   */
+  public void execute(Token token)
+  {
+    SignalManager sm = SignalManager.locateSignalManager();
+    try
+    {
+      sm.throwSignal(getEnterSignal());
+      executeOverwrite(token);
+    }
+    finally
+    {
+      sm.throwSignal(getExitSignal());
+    }
+  }
+  
+  /** 
+   * Overwrite to provide an actual implemenation 
+   * Note, this MUST NOT leak into the public API. 
+   */
+  protected void executeOverwrite(Token token)
+  {
+    // nothing to do
+  }
 }
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,8 +21,10 @@
  */
 package org.jboss.bpm.model;
 
+import javax.xml.bind.annotation.XmlType;
 
 
+
 // $Id$
 
 /**
@@ -32,6 +34,18 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface Gateway extends FlowObject
+ at XmlType(name="Gateway")
+public abstract class Gateway extends FlowObject
 {
+  @Override
+  public Signal getEnterSignal()
+  {
+    return new Signal(getProcess(), Signal.Type.ENTER_GATEWAY);
+  }
+
+  @Override
+  public Signal getExitSignal()
+  {
+    return new Signal(getProcess(), Signal.Type.EXIT_GATEWAY);
+  }
 }
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/InclusiveGateway.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/InclusiveGateway.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/InclusiveGateway.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,7 +21,9 @@
  */
 package org.jboss.bpm.model;
 
+import javax.xml.bind.annotation.XmlType;
 
+
 // $Id$
 
 /**
@@ -32,6 +34,7 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface InclusiveGateway extends Gateway
+ at XmlType(name="InclusiveGateway")
+public class InclusiveGateway extends Gateway
 {
 }
\ No newline at end of file

Copied: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/InitialToken.java (from rev 1564, api/trunk/modules/api/src/main/java/org/jboss/bpm/model/internal/InitialToken.java)
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/InitialToken.java	                        (rev 0)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/InitialToken.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -0,0 +1,65 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.model;
+
+// $Id$
+
+import org.jboss.bpm.runtime.Attachments;
+import org.jboss.bpm.runtime.BasicAttachments;
+import org.jboss.bpm.runtime.ExecutionContext;
+import org.jboss.bpm.runtime.Token;
+
+/**
+ * An initial token
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+class InitialToken implements Token
+{
+  private Process proc;
+  private ExecutionContext context;
+
+  public InitialToken(Process proc, Attachments att)
+  {
+    this.proc = proc;
+    this.context = new InitialContext(att);
+  }
+
+  public Process getProcess()
+  {
+    return proc;
+  }
+  
+  public ExecutionContext getExecutionContext()
+  {
+    return context;
+  }
+  
+  class InitialContext extends BasicAttachments implements ExecutionContext
+  {
+    InitialContext(Attachments att)
+    {
+      super(att);
+    }
+  }
+}
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ItermediateEvent.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ItermediateEvent.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ItermediateEvent.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,7 +21,9 @@
  */
 package org.jboss.bpm.model;
 
+import javax.xml.bind.annotation.XmlType;
 
+
 // $Id$
 
 /**
@@ -34,6 +36,7 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface ItermediateEvent extends Event
+ at XmlType(name="ItermediateEvent")
+public class ItermediateEvent extends Event
 {
 }
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/NamedFlowObject.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/NamedFlowObject.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/NamedFlowObject.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,6 +21,9 @@
  */
 package org.jboss.bpm.model;
 
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
 //$Id$
 
 
@@ -30,8 +33,30 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface NamedFlowObject extends FlowObject
+ at XmlType(name="NamedFlowObject")
+public abstract class NamedFlowObject extends FlowObject
 {
-  /** Get the name */
-  String getName();
+  @XmlElement
+  private String name;
+  
+  /** 
+   * Get the name 
+   */
+  public String getName()
+  {
+    return name;
+  }
+  
+  /** 
+   * Set the name 
+   * Note, this MUST NOT leak into the public API. 
+   */
+  // TODO
+  public void setName(String name)
+  {
+    if (this.name != null)
+      throw new IllegalStateException("Cannot rename: " + name);
+    
+    this.name = name;
+  }
 }
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ParallelGateway.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ParallelGateway.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/ParallelGateway.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,7 +21,9 @@
  */
 package org.jboss.bpm.model;
 
+import javax.xml.bind.annotation.XmlType;
 
+
 // $Id$
 
 /**
@@ -30,6 +32,7 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface ParallelGateway extends Gateway
+ at XmlType(name="ParallelGateway")
+public class ParallelGateway extends Gateway
 {
 }
\ No newline at end of file

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-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Process.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,9 +21,23 @@
  */
 package org.jboss.bpm.model;
 
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.Set;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+import org.jboss.bpm.InvalidProcessException;
+import org.jboss.bpm.NameNotUniqueException;
+import org.jboss.bpm.NotImplementedException;
+import org.jboss.bpm.client.ProcessManager;
 import org.jboss.bpm.runtime.Attachments;
 
 
@@ -35,26 +49,197 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface Process extends Activity
+ at XmlType(name="Process")
+ at XmlRootElement(name="process")
+public class Process extends Activity
 {
-  /** Start the process */
-  Future<Result> startProcess();
+  @XmlElement
+  protected Set<FlowObject> flowObjects = new HashSet<FlowObject>();
   
-  /** Start the process, with a given execution context */
-  Future<Result> startProcess(Attachments att);
+  /** 
+   * Call to initialize fully
+   * Note, this MUST NOT leak into the public API. 
+   */
+  protected void init(String name)
+  {
+    if (name == null)
+    {
+      ProcessManager pdm = ProcessManager.locateProcessManager();
+      name = "AnonymousProcess#" + pdm.getProcesses().size();
+      setName(name);
+    }
+  }
   
-  /** Get the start event */
-  StartEvent getStartEvent();
+  /** 
+   * Add a flow object
+   * Note, this MUST NOT leak into the public API. 
+   */
+  protected void addFlowObject(FlowObject flowObject)
+  {
+    if (flowObject instanceof StartEvent && getStartEventInternal() != null)
+      throw new InvalidProcessException("Process cannot have multiple start events: " + flowObject);
+
+    if (flowObject instanceof NamedFlowObject)
+    {
+      String name = ((NamedFlowObject)flowObject).getName();
+      if (findFlowObject(name) != null)
+        throw new NameNotUniqueException("NamedFlowObject: " + name);
+    }
+
+    flowObjects.add(flowObject);
+  }
   
+  /** 
+   * Get the start event 
+   */
+  @XmlTransient
+  public StartEvent getStartEvent()
+  {
+    StartEvent start = getStartEventInternal();
+    if (start == null)
+      throw new InvalidProcessException("Process does not have a start event");
+
+    return start;
+  }
+
+  private StartEvent getStartEventInternal()
+  {
+    StartEvent start = null;
+    for (FlowObject aux : flowObjects)
+    {
+      if (aux instanceof StartEvent)
+      {
+        start = (StartEvent)aux;
+        break;
+      }
+    }
+    return start;
+  }
+  
   /** Get the set of end events */
-  Set<EndEvent> getEndEvents();
+  @XmlTransient
+  public Set<EndEvent> getEndEvents()
+  {
+    Set<EndEvent> ends = getEndEventsInternal();
+    if (ends.size() == 0)
+      throw new InvalidProcessException("Process does not have end events");
+
+    return ends;
+  }
+
+  private Set<EndEvent> getEndEventsInternal()
+  {
+    Set<EndEvent> ends = new HashSet<EndEvent>();
+    for (FlowObject aux : flowObjects)
+    {
+      if (aux instanceof EndEvent)
+      {
+        ends.add((EndEvent)aux);
+      }
+    }
+    return ends;
+  }
   
   /** Get the set of flow objects */
-  Set<FlowObject> getFlowObjects();
+  public Set<FlowObject> getFlowObjects()
+  {
+    return Collections.unmodifiableSet(flowObjects);
+  }
   
+  /** Start the process */
+  public Future<Result> startProcess()
+  {
+    return startProcess(null);
+  }
+  
+  /** Start the process, with a given execution context */
+  public Future<Result> startProcess(Attachments att)
+  {
+    execute(new InitialToken(this, att));
+    return new ResultFuture();
+  }
+  
   /** 
    * Find a flow object by name
    * @return null if not found
    */
-  NamedFlowObject findFlowObject(String name);
+  public NamedFlowObject findFlowObject(String name)
+  {
+    NamedFlowObject nfo = null;
+    for (FlowObject aux : flowObjects)
+    {
+      if (aux instanceof NamedFlowObject && ((NamedFlowObject)aux).getName().equals(name))
+      {
+        nfo = (NamedFlowObject)aux;
+        break;
+      }
+    }
+    return nfo;
+  }
+  
+  /** 
+   * Get signal for enter 
+   */
+  @Override
+  public Signal getEnterSignal()
+  {
+    return new Signal(this, Signal.Type.ENTER_PROCESS);
+  }
+
+  /** 
+   * Get signal for exit 
+   */
+  @Override
+  public Signal getExitSignal()
+  {
+    return new Signal(this, Signal.Type.EXIT_PROCESS);
+  }
+
+  @XmlTransient
+  class ResultFuture implements Future<Result>
+  {
+    private Result result;
+
+    public boolean cancel(boolean mayInterruptIfRunning)
+    {
+      throw new NotImplementedException();
+    }
+
+    public Result get() throws InterruptedException, ExecutionException
+    {
+      return getResult();
+    }
+
+    public Result get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
+    {
+      throw new NotImplementedException();
+    }
+
+    public boolean isCancelled()
+    {
+      return false;
+    }
+
+    public boolean isDone()
+    {
+      return getResult() != null;
+    }
+
+    private Result getResult()
+    {
+      if (result == null)
+      {
+        Set<EndEvent> ends = getEndEventsInternal();
+        for (EndEvent aux : ends)
+        {
+          result = aux.getResult();
+          if (result != null)
+          {
+            break;
+          }
+        }
+      }
+      return result;
+    }
+  }
 }
\ No newline at end of file

Copied: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java (from rev 1561, api/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/Signal.java)
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java	                        (rev 0)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -0,0 +1,98 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.model;
+
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+//$Id$
+
+
+/**
+ * A Signal thrown by the ProcessEngine
+ * 
+ * @author Thomas.Diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at XmlTransient
+public class Signal
+{
+  @XmlType(name="SignalType")
+  public enum Type
+  {
+    ENTER_START_EVENT, EXIT_START_EVENT, 
+    ENTER_EVENT, EXIT_EVENT, 
+    ENTER_END_EVENT, EXIT_END_EVENT, 
+    ENTER_GATEWAY, EXIT_GATEWAY, 
+    ENTER_PROCESS, EXIT_PROCESS, 
+    ENTER_SUB_PROCESS, EXIT_SUB_PROCESS, 
+    ENTER_TASK, EXIT_TASK,
+    USER_SIGNAL
+  }
+
+  private Process proc;
+  private Type type;
+  private String message;
+
+  /** Create the signal for a given process */
+  public Signal(Process proc, Type type)
+  {
+    this.proc = proc;
+    this.type = type;
+  }
+
+  /** Create the signal for a given process */
+  public Signal(Process proc, Type type, String message)
+  {
+    this.proc = proc;
+    this.type = type;
+    this.message = message;
+    
+  }
+
+  /** Get the proccess */
+  public Process getProcess()
+  {
+    return proc;
+  }
+
+  public Type getType()
+  {
+    return type;
+  }
+
+  public String getMessage()
+  {
+    return message;
+  }
+
+  public String toString()
+  {
+    StringBuilder string = new StringBuilder(type + "[" + proc.getName());
+    if (message != null)
+    {
+      string.append(":" + message);
+    }
+    string.append("]");
+    return string.toString();
+  }
+}
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/StartEvent.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/StartEvent.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/StartEvent.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,6 +21,8 @@
  */
 package org.jboss.bpm.model;
 
+import javax.xml.bind.annotation.XmlType;
+
 //$Id$
 
 
@@ -33,6 +35,22 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface StartEvent extends Event
+ at XmlType(name="StartEvent")
+public class StartEvent extends Event
 {
+  /** 
+   * Get signal for enter 
+   */
+  public Signal getEnterSignal()
+  {
+    return new Signal(getProcess(), Signal.Type.ENTER_START_EVENT);
+  }
+  
+  /** 
+   * Get signal for exit 
+   */
+  public Signal getExitSignal()
+  {
+    return new Signal(getProcess(), Signal.Type.EXIT_START_EVENT);
+  }
 }
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/SubProcess.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/SubProcess.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/SubProcess.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,6 +21,9 @@
  */
 package org.jboss.bpm.model;
 
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
 // $Id$
 
 /**
@@ -29,8 +32,15 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface SubProcess extends Process
+ at XmlType(name="SubProcess")
+public class SubProcess extends Process
 {
+  @XmlTransient
+  private Process parentProcess;
+  
   /** Get the parent process */
-  Process getParentProcess();
+  public Process getParentProcess()
+  {
+    return parentProcess;
+  }
 }
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Task.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Task.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/model/Task.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,6 +21,8 @@
  */
 package org.jboss.bpm.model;
 
+import javax.xml.bind.annotation.XmlType;
+
 //$Id$
 
 /**
@@ -32,6 +34,18 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface Task extends Activity
+ at XmlType(name="Task")
+public class Task extends Activity
 {
+  /** Get signal for enter */
+  public Signal getEnterSignal()
+  {
+    return new Signal(getProcess(), Signal.Type.ENTER_TASK, getName());
+  }
+  
+  /** Get signal for exit */
+  public Signal getExitSignal()
+  {
+    return new Signal(getProcess(), Signal.Type.EXIT_TASK, getName());
+  }
 }
\ No newline at end of file

Deleted: api/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/BasicTask.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/BasicTask.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/BasicTask.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -1,55 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.bpm.runtime;
-
-//$Id$
-
-import org.jboss.bpm.model.internal.AbstractTask;
-
-/**
- * Extend to implement a named task
- * 
- * @author thomas.diesler at jboss.com
- * @since 08-Jul-2008
- */
-public class BasicTask extends AbstractTask
-{
-  private String name;
-
-  public String getName()
-  {
-    return name;
-  }
-
-  public void setName(String name)
-  {
-    if (this.name != null)
-      throw new IllegalStateException("Cannot rename task");
-
-    this.name = name;
-  }
-
-  // Overwrite to implement execute
-  protected void executeOverwrite(Token token)
-  {
-  }
-}
\ No newline at end of file

Deleted: api/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/Signal.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/Signal.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/Signal.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -1,94 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.bpm.runtime;
-
-//$Id$
-
-import org.jboss.bpm.model.Process;
-
-/**
- * A Signal thrown by the ProcessEngine
- * 
- * @author Thomas.Diesler at jboss.com
- * @since 08-Jul-2008
- */
-public class Signal
-{
-  public enum Type
-  {
-    ENTER_START_EVENT, EXIT_START_EVENT, 
-    ENTER_EVENT, EXIT_EVENT, 
-    ENTER_END_EVENT, EXIT_END_EVENT, 
-    ENTER_GATEWAY, EXIT_GATEWAY, 
-    ENTER_PROCESS, EXIT_PROCESS, 
-    ENTER_SUB_PROCESS, EXIT_SUB_PROCESS, 
-    ENTER_TASK, EXIT_TASK,
-    USER_SIGNAL
-  }
-
-  private Process proc;
-  private Type type;
-  private String message;
-
-  /** Create the signal for a given process */
-  public Signal(Process proc, Type type)
-  {
-    this.proc = proc;
-    this.type = type;
-  }
-
-  /** Create the signal for a given process */
-  public Signal(Process proc, Type type, String message)
-  {
-    this.proc = proc;
-    this.type = type;
-    this.message = message;
-    
-  }
-
-  /** Get the proccess */
-  public Process getProcess()
-  {
-    return proc;
-  }
-
-  public Type getType()
-  {
-    return type;
-  }
-
-  public String getMessage()
-  {
-    return message;
-  }
-
-  public String toString()
-  {
-    StringBuilder string = new StringBuilder(type + "[" + proc.getName());
-    if (message != null)
-    {
-      string.append(":" + message);
-    }
-    string.append("]");
-    return string.toString();
-  }
-}
\ No newline at end of file

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/SignalListener.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/SignalListener.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/SignalListener.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -21,6 +21,8 @@
  */
 package org.jboss.bpm.runtime;
 
+import org.jboss.bpm.model.Signal;
+
 //$Id$
 
 

Modified: api/trunk/modules/api/src/main/java/org/jboss/bpm/test/DefaultEngineTestCase.java
===================================================================
--- api/trunk/modules/api/src/main/java/org/jboss/bpm/test/DefaultEngineTestCase.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/api/src/main/java/org/jboss/bpm/test/DefaultEngineTestCase.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -30,7 +30,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.jboss.bpm.client.ProcessEngine;
-import org.jboss.bpm.runtime.Signal;
+import org.jboss.bpm.model.Signal;
 import org.jboss.bpm.runtime.SignalListener;
 
 public abstract class DefaultEngineTestCase extends AbstractAPITestCase implements SignalListener

Modified: api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/context/TaskA.java
===================================================================
--- api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/context/TaskA.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/context/TaskA.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -23,7 +23,7 @@
 
 // $Id$
 
-import org.jboss.bpm.runtime.BasicTask;
+import org.jboss.bpm.model.Task;
 import org.jboss.bpm.runtime.ExecutionContext;
 import org.jboss.bpm.runtime.Token;
 
@@ -33,7 +33,7 @@
  * @author Thomas.Diesler at jboss.com
  * @since 04-Jul-2008
  */
-public class TaskA extends BasicTask
+public class TaskA extends Task
 {
   protected void executeOverwrite(Token token)
   {

Modified: api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/sequence/BasicSequenceTest.java
===================================================================
--- api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/sequence/BasicSequenceTest.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/sequence/BasicSequenceTest.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -31,7 +31,7 @@
 import org.jboss.bpm.client.SignalManager;
 import org.jboss.bpm.model.Process;
 import org.jboss.bpm.model.Result;
-import org.jboss.bpm.runtime.Signal;
+import org.jboss.bpm.model.Signal;
 import org.jboss.bpm.test.DefaultEngineTestCase;
 
 /**

Modified: api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/BasicTaskTest.java
===================================================================
--- api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/BasicTaskTest.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/BasicTaskTest.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -31,8 +31,8 @@
 import org.jboss.bpm.client.SignalManager;
 import org.jboss.bpm.model.Process;
 import org.jboss.bpm.model.Result;
+import org.jboss.bpm.model.Signal;
 import org.jboss.bpm.runtime.Attachments;
-import org.jboss.bpm.runtime.Signal;
 import org.jboss.bpm.test.DefaultEngineTestCase;
 
 /**

Modified: api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/TaskA.java
===================================================================
--- api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/TaskA.java	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/TaskA.java	2008-07-10 09:00:19 UTC (rev 1565)
@@ -23,7 +23,7 @@
 
 // $Id$
 
-import org.jboss.bpm.runtime.BasicTask;
+import org.jboss.bpm.model.Task;
 import org.jboss.bpm.runtime.ExecutionContext;
 import org.jboss.bpm.runtime.Token;
 
@@ -33,7 +33,7 @@
  * @author Thomas.Diesler at jboss.com
  * @since 04-Jul-2008
  */
-public class TaskA extends BasicTask
+public class TaskA extends Task
 {
   protected void executeOverwrite(Token token)
   {

Modified: api/trunk/pom.xml
===================================================================
--- api/trunk/pom.xml	2008-07-09 20:03:53 UTC (rev 1564)
+++ api/trunk/pom.xml	2008-07-10 09:00:19 UTC (rev 1565)
@@ -38,6 +38,7 @@
   <!-- Properties -->
   <properties>
     <commons.logging.version>1.1.1</commons.logging.version>
+    <jaxb.ri.version>2.1.7</jaxb.ri.version>
     <jboss.microcontainer.version>2.0.0.Beta15</jboss.microcontainer.version>
     <jboss.jbpm3.version>3.2.4-SNAPSHOT</jboss.jbpm3.version>
   </properties>
@@ -46,6 +47,11 @@
   <dependencyManagement>
     <dependencies>
       <dependency>
+        <groupId>com.sun.xml.bind</groupId>
+        <artifactId>jaxb-impl</artifactId>
+        <version>${jaxb.ri.version}</version>
+      </dependency>
+      <dependency>
         <groupId>commons-logging</groupId>
         <artifactId>commons-logging</artifactId>
         <version>${commons.logging.version}</version>




More information about the jbpm-commits mailing list