[jbpm-commits] JBoss JBPM SVN: r1908 - in jbossbpm/spec/trunk/modules: api/src/main/java/org/jboss/bpm/test and 12 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Sat Aug 16 10:50:12 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-08-16 10:50:11 -0400 (Sat, 16 Aug 2008)
New Revision: 1908

Added:
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBCancelEventDetail.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBCompensationEventDetail.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBErrorEventDetail.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBTerminateEventDetail.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageEventDetailImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageSender.java
Modified:
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventBuilder.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventDetail.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Expression.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Message.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/MessageBuilder.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/MessageEventDetail.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Property.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/PropertyBuilder.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/PropertySupport.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/ReceiveTask.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/SendTask.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/ServiceTask.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/StartEvent.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Task.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/TaskBuilder.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/UserTask.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/test/AbstractAPITestCase.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessMarshaller.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessUnmarshaller.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBEndEvent.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBMessageEventDetail.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBTask.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/message/ProcessMessageTest.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityBuilderImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EndEventImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventBuilderImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventDetailImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExpressionImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowObjectImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/InputSetImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/IntermediateEventImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageBuilderImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/OutputSetImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/PropertyBuilderImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/PropertyImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ReceiveTaskImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SendTaskImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SignalEventDetailImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/StartEventImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskBuilderImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/runtime/internal/DelegatingExecutionContext.java
   jbossbpm/spec/trunk/modules/testsuite/pom.xml
   jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/activity/ActivityPropertyMarshallerTest.java
   jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/activity/ActivityPropertyTest.java
   jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java
   jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveGatewayMergeTest.java
   jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelGatewayMergeTest.java
   jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/simplemerge/SimpleMergeTest.java
   jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/synchronization/SynchronizationTest.java
Log:
Add EndEvent Message Result

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -21,10 +21,10 @@
  */
 package org.jboss.bpm.model;
 
-import java.util.Set;
-
 //$Id$
 
+import java.util.List;
+
 /**
  * As the name implies, the End Event indicates where a Process will end. 
  * 
@@ -45,6 +45,6 @@
    * If there is no EventDetail defined, then this is considered a None End Event.
    * If there is more than one EventDetail defined, this is considered a Multiple EndEvent.
    */
-  Set<EventDetail> getResult();
+  List<EventDetail> getResult();
 
 }
\ No newline at end of file

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventBuilder.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventBuilder.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventBuilder.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -23,6 +23,7 @@
 
 //$Id$
 
+import org.jboss.bpm.model.EventDetail.EventDetailType;
 import org.jboss.bpm.model.Signal.SignalType;
 
 /**
@@ -34,7 +35,17 @@
 public interface EventBuilder extends ProcessBuilder
 {
   /**
-   * Add a signal trigger to the last added {@link Event}
+   * Add an event detail to the last added {@link Event}
    */
-  EventBuilder addSignalTrigger(SignalType signalType, String signalMessage);
+  EventBuilder addEventDetail(EventDetailType detailType);
+  
+  /**
+   * Add a signal ref to the last added {@link EventDetail}
+   */
+  EventBuilder addSignalRef(SignalType signalType, String signalMessage);
+  
+  /**
+   * Add a message ref to the last added {@link EventDetail}
+   */
+  EventBuilder addMessageRef(String msgName);
 }
\ No newline at end of file

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventDetail.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventDetail.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventDetail.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -36,7 +36,7 @@
    */
   public enum EventDetailType
   {
-    Message, Timer, Error, Conditional, Link, Signal, Compensate, Cancel, Terminate 
+    Message, Timer, Error, Conditional, Link, Signal, Compensation, Cancel, Terminate 
   };
   
   /**

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Expression.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Expression.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Expression.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -34,7 +34,7 @@
 {
   public enum ExpressionLanguage
   {
-    MVEL, String
+    MVEL, String, Object
   }
   
   /**
@@ -44,6 +44,11 @@
   String getExpressionBody();
   
   /**
+   * An ExpressionValue MAY be available if the Expression is used as a {@link Property} value.
+   */
+  Object getExpressionValue();
+  
+  /**
    * A Language MUST be provided to identify the language of the ExpressionBody.
    * The value of the ExpressionLanguage should follow the naming conventions for the
    * version of the specified language.

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Message.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Message.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Message.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -35,6 +35,15 @@
 public interface Message extends SupportingElement, PropertySupport
 {
   /**
+   * Specifies the technology that will be used to send or receive the
+   * message.
+   */
+  public enum Implementation
+  {
+    WebService, Other, Unspecified
+  }
+
+  /**
    * Name is an attribute that is text description of the Message.
    */
   String getName();

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/MessageBuilder.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/MessageBuilder.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/MessageBuilder.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -52,12 +52,12 @@
   /**
    * Add a message property
    */
-  MessageBuilder addProperty(String name, String value);
+  MessageBuilder addProperty(String name, Object value);
   
   /**
    * Add a message property
    */
-  MessageBuilder addProperty(String name, String value, boolean isCorrelation);
+  MessageBuilder addProperty(String name, Object value, boolean isCorrelation);
   
   /**
    * Get the Message

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/MessageEventDetail.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/MessageEventDetail.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/MessageEventDetail.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -32,15 +32,6 @@
 public interface MessageEventDetail extends EventDetail
 {
   /**
-   * Specifies the technology that will be used to send or receive the
-   * message.
-   */
-  enum Implementation
-  {
-    WebService, Other, Unspecified
-  }
-  
-  /**
    * If the EventDetailType is a MessageRef, then the a Message MUST be supplied.
    */
   Message getMessageRef();
@@ -49,5 +40,5 @@
    * This attribute specifies the technology that will be used to send or receive the
    * message. A Web service is the default technology.
    */
-  Implementation getImplementation(); 
+  Message.Implementation getImplementation(); 
 }

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Property.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Property.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Property.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -36,7 +36,7 @@
    */
   public enum PropertyType
   {
-    String
+    String, Object
   }
   
   /**
@@ -51,11 +51,21 @@
   PropertyType getPropertyType();
   
   /**
-   * Each Property MAY have a Value specified.
+   * Each Property MAY have a value expression specified.
    */
-  Expression getValue();
+  Expression getExpression();
   
   /**
+   * Get the body of the expression value.
+   */
+  String getValue();
+  
+  /**
+   * Get the body of the expression value.
+   */
+  <T> T getValue(Class<T> T);
+  
+  /**
    * If the Correlation attribute is set to True, then the Property is marked to be used for
    * correlation (e.g., for incoming Messages).
    */

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/PropertyBuilder.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/PropertyBuilder.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/PropertyBuilder.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -34,5 +34,5 @@
   /**
    * Create a {@link Property} with a given name and value
    */
-  Property newProperty(String name, String value);
+  Property newProperty(String name, Object value);
 }
\ No newline at end of file

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/PropertySupport.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/PropertySupport.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/PropertySupport.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -25,7 +25,6 @@
 
 import java.util.List;
 
-
 /**
  * Property support
  * 

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/ReceiveTask.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/ReceiveTask.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/ReceiveTask.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -21,6 +21,8 @@
  */
 package org.jboss.bpm.model;
 
+import org.jboss.bpm.model.Message.Implementation;
+
 //$Id$
 
 /**

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/SendTask.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/SendTask.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/SendTask.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -21,7 +21,9 @@
  */
 package org.jboss.bpm.model;
 
+import org.jboss.bpm.model.Message.Implementation;
 
+
 //$Id$
 
 /**

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/ServiceTask.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/ServiceTask.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/ServiceTask.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -21,6 +21,8 @@
  */
 package org.jboss.bpm.model;
 
+import org.jboss.bpm.model.Message.Implementation;
+
 //$Id$
 
 /**

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/StartEvent.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/StartEvent.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/StartEvent.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -26,15 +26,21 @@
 //$Id$
 
 /**
- * A Start Event indicates where a particular Process will start. 
- * <p/>
- * In terms of Sequence Flow, the Start Event starts the Flow of the Process, and thus, will not have any
- * incoming Sequence Flow. A Start Event can have a Trigger that indicates how the Process starts: Message, Timer, Rule, Link, or Multiple.
+ * A Start Event indicates where a particular Process will start. <p/> In terms of Sequence Flow, the Start Event starts
+ * the Flow of the Process, and thus, will not have any incoming Sequence Flow. A Start Event can have a Trigger that
+ * indicates how the Process starts: Message, Timer, Rule, Link, or Multiple.
  * 
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
 public interface StartEvent extends Event, SingleOutFlowSupport
 {
+  /**
+   * Trigger is an attribute that defines the type of trigger expected for a Start Event. Of the set of
+   * EventDetailTypes, only four (4) can be applied to a Start Event: Message, Timer, Conditional, and Signal. If there
+   * is no EventDetail defined, then this is considered a None Start Event and the Event will not have an internal
+   * marker. If there is more than one EventDetail defined, this is considered a Multiple Start Event
+   * and the Event will have the pentagon internal marker.
+   */
   List<EventDetail> getTrigger();
 }
\ No newline at end of file

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Task.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Task.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Task.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -37,15 +37,6 @@
 public interface Task extends Activity, SingleInFlowSupport, SingleOutFlowSupport
 {
   /**
-   * Specifies the technology that will be used to send or receive the
-   * message.
-   */
-  public enum Implementation
-  {
-    WebService, Other, Unspecified
-  }
-  
-  /**
    * The TaskType
    */
   public enum TaskType

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/TaskBuilder.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/TaskBuilder.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/TaskBuilder.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -32,8 +32,6 @@
  */
 public interface TaskBuilder extends ActivityBuilder
 {
-  MessageBuilder addMessage(String msgName);
-  
   TaskBuilder addMessageRef(String msgName);
 
   TaskBuilder addExecutionHandler(Class<?> clazz);

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/UserTask.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/UserTask.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/UserTask.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -21,6 +21,8 @@
  */
 package org.jboss.bpm.model;
 
+import org.jboss.bpm.model.Message.Implementation;
+
 //$Id$
 
 /**

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/test/AbstractAPITestCase.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/test/AbstractAPITestCase.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/test/AbstractAPITestCase.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -205,7 +205,9 @@
 
   public ObjectName getMessageListenerID()
   {
-    return ObjectNameFactory.create(BPMNElement.ID_DOMAIN, "test", getClass() + "." + getName());
+    String className = getClass().getName();
+    className = className.substring(className.lastIndexOf(".") + 1);
+    return ObjectNameFactory.create(BPMNElement.ID_DOMAIN, "msgListener", className);
   }
   
   public List<Message> getMessages()

Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessMarshaller.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessMarshaller.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessMarshaller.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -44,6 +44,7 @@
 import org.jboss.bpm.dialect.api10.model.JAXBInclusiveGateway;
 import org.jboss.bpm.dialect.api10.model.JAXBInputSet;
 import org.jboss.bpm.dialect.api10.model.JAXBMessage;
+import org.jboss.bpm.dialect.api10.model.JAXBMessageEventDetail;
 import org.jboss.bpm.dialect.api10.model.JAXBMessageRef;
 import org.jboss.bpm.dialect.api10.model.JAXBOutputSet;
 import org.jboss.bpm.dialect.api10.model.JAXBParallelGateway;
@@ -70,6 +71,7 @@
 import org.jboss.bpm.model.InputSet;
 import org.jboss.bpm.model.IntermediateEvent;
 import org.jboss.bpm.model.Message;
+import org.jboss.bpm.model.MessageEventDetail;
 import org.jboss.bpm.model.MessageFlow;
 import org.jboss.bpm.model.OutputSet;
 import org.jboss.bpm.model.ParallelGateway;
@@ -116,7 +118,7 @@
 
     for (Message msg : proc.getMessages())
     {
-      JAXBMessage jaxbMsg = adaptMessage(jaxbProc, msg);
+      JAXBMessage jaxbMsg = adaptMessage(msg);
       jaxbProc.getMessages().add(jaxbMsg);
     }
     for (Property prop : proc.getProperties())
@@ -151,33 +153,33 @@
 
   private JAXBFlowObject adaptEvent(JAXBProcess jaxbProc, Event event)
   {
-    JAXBEvent jaxb;
+    JAXBEvent jaxbEvent;
     if (event instanceof StartEvent)
     {
       StartEvent start = (StartEvent)event;
       JAXBStartEvent jaxbStart = new JAXBStartEvent();
       jaxbStart.setName(start.getName());
       jaxbStart.setOutFlow(getJAXBFlow(start.getOutFlow()));
-      
+
       if (start.getTrigger().size() > 1)
         throw new NotImplementedException("JBPM-1660", "StartTrigger Multiple");
-      
+
       for (EventDetail trigger : start.getTrigger())
       {
-        EventDetailType type = trigger.getEventDetailType();
-        if (type == EventDetailType.Message)
+        EventDetailType detailType = trigger.getEventDetailType();
+        if (detailType == EventDetailType.Message)
         {
           throw new NotImplementedException("JBPM-1657", "StartTrigger Message");
         }
-        else if (type == EventDetailType.Timer)
+        else if (detailType == EventDetailType.Timer)
         {
           throw new NotImplementedException("JBPM-1658", "StartTrigger Timer");
         }
-        else if (type == EventDetailType.Conditional)
+        else if (detailType == EventDetailType.Conditional)
         {
           throw new NotImplementedException("JBPM-1659", "StartTrigger Conditional");
         }
-        else if (type == EventDetailType.Signal)
+        else if (detailType == EventDetailType.Signal)
         {
           SignalEventDetail signalTrigger = (SignalEventDetail)trigger;
           Signal signal = signalTrigger.getSignalRef();
@@ -187,10 +189,10 @@
         }
         else
         {
-          throw new IllegalStateException("Unsupported start trigger: " + type);
+          throw new IllegalStateException("Unsupported start trigger: " + detailType);
         }
       }
-      jaxb = jaxbStart;
+      jaxbEvent = jaxbStart;
     }
     else if (event instanceof IntermediateEvent)
     {
@@ -201,7 +203,49 @@
       EndEvent end = (EndEvent)event;
       JAXBEndEvent jaxbEnd = new JAXBEndEvent();
       jaxbEnd.setName(end.getName());
-      jaxb = jaxbEnd;
+
+      if (end.getResult().size() > 1)
+        throw new NotImplementedException("JBPM-1683", "EndEvent Multiple Result");
+
+      for (EventDetail result : end.getResult())
+      {
+        EventDetailType detailType = result.getEventDetailType();
+        if (detailType == EventDetailType.Message)
+        {
+          MessageEventDetail msgEventDetail = (MessageEventDetail)result;
+          Message message = msgEventDetail.getMessageRef();
+          JAXBMessageRef jaxbMessageRef = adaptMessageRef(jaxbProc, message);
+          JAXBMessageEventDetail jaxbResult = new JAXBMessageEventDetail();
+          jaxbResult.setMessageRef(jaxbMessageRef);
+          jaxbEnd.getResult().add(jaxbResult);
+        }
+        else if (detailType == EventDetailType.Error)
+        {
+          throw new NotImplementedException("JBPM-1677", "EndEvent Error Result");
+        }
+        else if (detailType == EventDetailType.Cancel)
+        {
+          throw new NotImplementedException("JBPM-1678", "EndEvent Cancel Result");
+        }
+        else if (detailType == EventDetailType.Compensation)
+        {
+          throw new NotImplementedException("JBPM-1679", "EndEvent Compensation Result");
+        }
+        else if (detailType == EventDetailType.Signal)
+        {
+          throw new NotImplementedException("JBPM-1651", "EndEvent Signal Result");
+        }
+        else if (detailType == EventDetailType.Terminate)
+        {
+          throw new NotImplementedException("JBPM-1680", "EndEvent Terminate Result");
+        }
+        else
+        {
+          throw new IllegalStateException("Unsupported end event result type: " + detailType);
+        }
+      }
+
+      jaxbEvent = jaxbEnd;
     }
     else
     {
@@ -210,25 +254,25 @@
     if (event instanceof HandlerSupport)
     {
       HandlerSupport hs = (HandlerSupport)event;
-      jaxb.setExecutionHandler(getJAXBExecutionHandler(event, hs.getExecutionHandler()));
-      jaxb.setFlowHandler(getJAXBFlowHandler(event, hs.getFlowHandler()));
-      jaxb.setSignalHandler(getJAXBSignalHandler(event, hs.getSignalHandler()));
+      jaxbEvent.setExecutionHandler(getJAXBExecutionHandler(event, hs.getExecutionHandler()));
+      jaxbEvent.setFlowHandler(getJAXBFlowHandler(event, hs.getFlowHandler()));
+      jaxbEvent.setSignalHandler(getJAXBSignalHandler(event, hs.getSignalHandler()));
     }
-    return jaxb;
+    return jaxbEvent;
   }
 
   private JAXBFlowObject adaptTask(JAXBProcess jaxbProc, Task task)
   {
-    JAXBTask jaxb = new JAXBTask();
-    jaxb.setTaskType(task.getTaskType());
-    jaxb.setName(task.getName());
-    jaxb.setOutFlow(getJAXBFlow(task.getOutFlow()));
+    JAXBTask jaxbTask = new JAXBTask();
+    jaxbTask.setTaskType(task.getTaskType());
+    jaxbTask.setName(task.getName());
+    jaxbTask.setOutFlow(getJAXBFlow(task.getOutFlow()));
     if (task instanceof HandlerSupport)
     {
       HandlerSupport hs = (HandlerSupport)task;
-      jaxb.setExecutionHandler(getJAXBExecutionHandler(task, hs.getExecutionHandler()));
-      jaxb.setFlowHandler(getJAXBFlowHandler(task, hs.getFlowHandler()));
-      jaxb.setSignalHandler(getJAXBSignalHandler(task, hs.getSignalHandler()));
+      jaxbTask.setExecutionHandler(getJAXBExecutionHandler(task, hs.getExecutionHandler()));
+      jaxbTask.setFlowHandler(getJAXBFlowHandler(task, hs.getFlowHandler()));
+      jaxbTask.setSignalHandler(getJAXBSignalHandler(task, hs.getSignalHandler()));
     }
     for (InputSet inSet : task.getInputSets())
     {
@@ -238,7 +282,7 @@
         JAXBProperty jaxbProp = getJaxbProperty(prop);
         jaxbSet.getProperties().add(jaxbProp);
       }
-      jaxb.getInputSets().add(jaxbSet);
+      jaxbTask.getInputSets().add(jaxbSet);
     }
     for (OutputSet outSet : task.getOutputSets())
     {
@@ -248,95 +292,94 @@
         JAXBProperty jaxbProp = getJaxbProperty(prop);
         jaxbSet.getProperties().add(jaxbProp);
       }
-      jaxb.getOutputSets().add(jaxbSet);
+      jaxbTask.getOutputSets().add(jaxbSet);
     }
     for (Property prop : task.getProperties())
     {
       JAXBProperty jaxbProp = getJaxbProperty(prop);
-      jaxb.getProperties().add(jaxbProp);
+      jaxbTask.getProperties().add(jaxbProp);
     }
     if (task instanceof ReceiveTask)
     {
       ReceiveTask recTask = (ReceiveTask)task;
-      adaptMessageRef(jaxbProc, jaxb, recTask.getMessageRef());
+      Message messageRef = recTask.getMessageRef();
+      if (messageRef != null)
+      {
+        JAXBMessageRef jaxbMessageRef = adaptMessageRef(jaxbProc, messageRef);
+        jaxbTask.setMessageRef(jaxbMessageRef);
+      }
     }
     else if (task instanceof SendTask)
     {
       SendTask sendTask = (SendTask)task;
-      adaptMessageRef(jaxbProc, jaxb, sendTask.getMessageRef());
+      Message messageRef = sendTask.getMessageRef();
+      if (messageRef != null)
+      {
+        JAXBMessageRef jaxbMessageRef = adaptMessageRef(jaxbProc, messageRef);
+        jaxbTask.setMessageRef(jaxbMessageRef);
+      }
     }
-    return jaxb;
+    return jaxbTask;
   }
 
   private JAXBFlowObject adaptGateway(JAXBProcess jaxbProc, Gateway gateway)
   {
-    JAXBGateway jaxb;
+    JAXBGateway jaxbGateway;
     if (gateway instanceof ExclusiveGateway)
     {
-      jaxb = new JAXBExclusiveGateway();
+      jaxbGateway = new JAXBExclusiveGateway();
     }
     else if (gateway instanceof InclusiveGateway)
     {
-      jaxb = new JAXBInclusiveGateway();
+      jaxbGateway = new JAXBInclusiveGateway();
     }
     else if (gateway instanceof ParallelGateway)
     {
-      jaxb = new JAXBParallelGateway();
+      jaxbGateway = new JAXBParallelGateway();
     }
     else if (gateway instanceof ComplexGateway)
     {
-      jaxb = new JAXBComplexGateway();
+      jaxbGateway = new JAXBComplexGateway();
     }
     else
     {
       throw new IllegalStateException("Unsupported gateway: " + gateway);
     }
-    jaxb.setName(gateway.getName());
+    jaxbGateway.setName(gateway.getName());
     if (gateway instanceof HandlerSupport)
     {
       HandlerSupport hs = (HandlerSupport)gateway;
-      jaxb.setExecutionHandler(getJAXBExecutionHandler(gateway, hs.getExecutionHandler()));
-      jaxb.setFlowHandler(getJAXBFlowHandler(gateway, hs.getFlowHandler()));
-      jaxb.setSignalHandler(getJAXBSignalHandler(gateway, hs.getSignalHandler()));
+      jaxbGateway.setExecutionHandler(getJAXBExecutionHandler(gateway, hs.getExecutionHandler()));
+      jaxbGateway.setFlowHandler(getJAXBFlowHandler(gateway, hs.getFlowHandler()));
+      jaxbGateway.setSignalHandler(getJAXBSignalHandler(gateway, hs.getSignalHandler()));
     }
     for (Gate gate : gateway.getGates())
     {
       SequenceFlow flow = gate.getOutgoingSequenceFlow();
-      jaxb.getOutFlows().add(getJAXBFlow(flow));
+      jaxbGateway.getOutFlows().add(getJAXBFlow(flow));
     }
-    return jaxb;
+    return jaxbGateway;
   }
 
-  private void adaptMessageRef(JAXBProcess jaxbProc, JAXBTask jaxb, Message msgRef)
+  private JAXBMessageRef adaptMessageRef(JAXBProcess jaxbProc, Message msgRef)
   {
-    if (msgRef != null)
-    {
-      String msgName = msgRef.getName();
-      JAXBMessage jaxbMsg = jaxbProc.getMessageByName(msgName);
-      if (jaxbMsg != null)
-      {
-        JAXBMessageRef jaxbMsgRef = new JAXBMessageRef();
-        jaxbMsgRef.setNameRef(msgName);
+    String msgName = msgRef.getName();
+    JAXBMessage jaxbMsg = jaxbProc.getMessageByName(msgName);
+    JAXBMessageRef jaxbMsgRef = new JAXBMessageRef();
+    jaxbMsgRef.setNameRef(msgName);
 
-        String fromStr = getParticipant(msgRef.getFromRef());
-        if (fromStr != null && fromStr.equals(jaxbMsg.getFromRef()) == false)
-          jaxbMsgRef.setFromRef(fromStr);
+    String fromStr = getParticipant(msgRef.getFromRef());
+    if (fromStr != null && fromStr.equals(jaxbMsg.getFromRef()) == false)
+      jaxbMsgRef.setFromRef(fromStr);
 
-        String toStr = getParticipant(msgRef.getToRef());
-        if (toStr != null && toStr.equals(jaxbMsg.getToRef()) == false)
-          jaxbMsgRef.setToRef(toStr);
+    String toStr = getParticipant(msgRef.getToRef());
+    if (toStr != null && toStr.equals(jaxbMsg.getToRef()) == false)
+      jaxbMsgRef.setToRef(toStr);
 
-        jaxb.setMessageRef(jaxbMsgRef);
-      }
-      else
-      {
-        jaxbMsg = adaptMessage(jaxbProc, msgRef);
-        jaxb.setMessageRef(jaxbMsg);
-      }
-    }
+    return jaxbMsgRef;
   }
 
-  private JAXBMessage adaptMessage(JAXBProcess jaxbProc, Message msg)
+  private JAXBMessage adaptMessage(Message msg)
   {
     JAXBMessage jaxbMsg = new JAXBMessage();
     jaxbMsg.setName(msg.getName());
@@ -398,7 +441,7 @@
   {
     JAXBProperty jaxbProp = new JAXBProperty();
     jaxbProp.setName(prop.getName());
-    jaxbProp.setValue(prop.getValue().getExpressionBody());
+    jaxbProp.setValue(prop.getValue());
     if (prop.isCorrelation())
       jaxbProp.setCorrelation(prop.isCorrelation());
     return jaxbProp;

Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessUnmarshaller.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessUnmarshaller.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessUnmarshaller.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -39,9 +39,12 @@
 import org.jboss.bpm.client.DialectHandler;
 import org.jboss.bpm.client.ObjectNameFactory;
 import org.jboss.bpm.client.ProcessManager;
+import org.jboss.bpm.dialect.api10.model.JAXBCancelEventDetail;
+import org.jboss.bpm.dialect.api10.model.JAXBCompensationEventDetail;
 import org.jboss.bpm.dialect.api10.model.JAXBComplexGateway;
 import org.jboss.bpm.dialect.api10.model.JAXBConditionalEventDetail;
 import org.jboss.bpm.dialect.api10.model.JAXBEndEvent;
+import org.jboss.bpm.dialect.api10.model.JAXBErrorEventDetail;
 import org.jboss.bpm.dialect.api10.model.JAXBEvent;
 import org.jboss.bpm.dialect.api10.model.JAXBEventDetail;
 import org.jboss.bpm.dialect.api10.model.JAXBExclusiveGateway;
@@ -66,8 +69,8 @@
 import org.jboss.bpm.dialect.api10.model.JAXBSignal;
 import org.jboss.bpm.dialect.api10.model.JAXBSignalEventDetail;
 import org.jboss.bpm.dialect.api10.model.JAXBStartEvent;
-import org.jboss.bpm.dialect.api10.model.JAXBSupportingElement;
 import org.jboss.bpm.dialect.api10.model.JAXBTask;
+import org.jboss.bpm.dialect.api10.model.JAXBTerminateEventDetail;
 import org.jboss.bpm.dialect.api10.model.JAXBTimerEventDetail;
 import org.jboss.bpm.dialect.api10.model.ObjectFactory;
 import org.jboss.bpm.model.EventBuilder;
@@ -77,6 +80,7 @@
 import org.jboss.bpm.model.ProcessBuilder;
 import org.jboss.bpm.model.ProcessBuilderFactory;
 import org.jboss.bpm.model.TaskBuilder;
+import org.jboss.bpm.model.EventDetail.EventDetailType;
 import org.jboss.bpm.model.Gateway.GatewayType;
 import org.jboss.bpm.model.SequenceFlow.ConditionType;
 import org.jboss.bpm.runtime.Handler;
@@ -103,12 +107,12 @@
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
     procBuilder.addProcess(jaxbProc.getName());
-    
+
     // Process Includes
     processIncludes(procBuilder, jaxbProc);
-    
+
     // Process Messages
-    for(JAXBMessage jaxb : jaxbProc.getMessages())
+    for (JAXBMessage jaxb : jaxbProc.getMessages())
     {
       MessageBuilder msgBuilder = procBuilder.addMessage(jaxb.getName());
       adaptJAXBMessage(msgBuilder, jaxb);
@@ -117,7 +121,7 @@
     {
       procBuilder.addProperty(jaxbProp.getName(), jaxbProp.getValue());
     }
-    
+
     // Process FlowObjects
     for (JAXBFlowObject jaxb : jaxbProc.getFlowObjects())
     {
@@ -138,19 +142,19 @@
         throw new IllegalStateException("Unsupported flow object: " + jaxb);
       }
     }
-    
+
     Process proc = (isInclude ? procBuilder.getProcessForInclude() : procBuilder.getProcess());
     return proc;
   }
 
   private void processIncludes(ProcessBuilder procBuilder, JAXBProcess jaxbProc) throws IOException
   {
-    for(JAXBInclude incl : jaxbProc.getIncludes())
+    for (JAXBInclude incl : jaxbProc.getIncludes())
     {
       String nsURI = incl.getNamespace();
       String location = incl.getLocation();
-      
-      URL procURL; 
+
+      URL procURL;
       try
       {
         procURL = new URL(location);
@@ -162,17 +166,17 @@
       }
       if (procURL == null)
         throw new InvalidProcessException("Cannot find process include: " + location);
-      
+
       ProcessManager pm = ProcessManager.locateProcessManager();
       DialectHandler dh = pm.getDialectHandler(nsURI);
       Process procIncl = dh.createProcess(procURL, true);
-      
+
       // Debug the included process
       StringWriter strwr = new StringWriter();
       DialectHandler dhapi = pm.getDialectHandler(DialectHandler.DEFAULT_NAMESPACE_URI);
       dhapi.marshallProcess(procIncl, strwr);
-      //System.out.println(strwr);
-      
+      // System.out.println(strwr);
+
       procBuilder.addProcessElements(procIncl);
     }
   }
@@ -199,11 +203,12 @@
     {
       JAXBStartEvent jaxbStart = (JAXBStartEvent)jaxb;
       EventBuilder eventBuilder = procBuilder.addStartEvent(jaxbStart.getName());
-      
+      addOutFlow(procBuilder, jaxbStart.getOutFlow());
+
       if (jaxbStart.getTrigger().size() > 1)
         throw new NotImplementedException("JBPM-1660", "StartTrigger Multiple");
-      
-      for(JAXBEventDetail jaxbTrigger : jaxbStart.getTrigger())
+
+      for (JAXBEventDetail jaxbTrigger : jaxbStart.getTrigger())
       {
         if (jaxbTrigger instanceof JAXBMessageEventDetail)
         {
@@ -221,14 +226,14 @@
         {
           JAXBSignalEventDetail jaxbSignalTrigger = (JAXBSignalEventDetail)jaxbTrigger;
           JAXBSignal jaxbSignal = jaxbSignalTrigger.getSignal();
-          eventBuilder.addSignalTrigger(jaxbSignal.getType(), jaxbSignal.getMessage());
+          eventBuilder.addEventDetail(EventDetailType.Signal).addSignalRef(jaxbSignal.getType(),
+              jaxbSignal.getMessage());
         }
         else
         {
           throw new IllegalStateException("Unsupported start trigger: " + jaxbTrigger);
         }
       }
-      addOutFlow(procBuilder, jaxbStart.getOutFlow());
     }
     else if (jaxb instanceof JAXBIntermediateEvent)
     {
@@ -237,7 +242,45 @@
     else if (jaxb instanceof JAXBEndEvent)
     {
       JAXBEndEvent jaxbEnd = (JAXBEndEvent)jaxb;
-      procBuilder.addEndEvent(jaxbEnd.getName());
+      EventBuilder eventBuilder = procBuilder.addEndEvent(jaxbEnd.getName());
+
+      if (jaxbEnd.getResult().size() > 1)
+        throw new NotImplementedException("JBPM-1683", "EndEvent Multiple Result");
+
+      for (JAXBEventDetail jaxbResult : jaxbEnd.getResult())
+      {
+        if (jaxbResult instanceof JAXBMessageEventDetail)
+        {
+          JAXBMessageEventDetail jaxbMessageResult = (JAXBMessageEventDetail)jaxbResult;
+          eventBuilder.addEventDetail(EventDetailType.Message);
+          JAXBMessageRef jaxbMsg = jaxbMessageResult.getMessageRef();
+          eventBuilder.addMessageRef(jaxbMsg.getNameRef());
+        }
+        else if (jaxbResult instanceof JAXBErrorEventDetail)
+        {
+          throw new NotImplementedException("JBPM-1677", "EndEvent Error Result");
+        }
+        else if (jaxbResult instanceof JAXBCancelEventDetail)
+        {
+          throw new NotImplementedException("JBPM-1678", "EndEvent Cancel Result");
+        }
+        else if (jaxbResult instanceof JAXBCompensationEventDetail)
+        {
+          throw new NotImplementedException("JBPM-1679", "EndEvent Compensation Result");
+        }
+        else if (jaxbResult instanceof JAXBSignalEventDetail)
+        {
+          throw new NotImplementedException("JBPM-1651", "EndEvent Signal Result");
+        }
+        else if (jaxbResult instanceof JAXBTerminateEventDetail)
+        {
+          throw new NotImplementedException("JBPM-1680", "EndEvent Terminate Result");
+        }
+        else
+        {
+          throw new IllegalStateException("Unsupported end event result type: " + jaxbResult);
+        }
+      }
     }
     else
     {
@@ -248,42 +291,40 @@
     procBuilder.addSignalHandler(loadHandler(jaxb.getSignalHandler()));
   }
 
-  private void adaptTask(ProcessBuilder procBuilder, JAXBProcess jaxbProc, JAXBTask jaxb)
+  private void adaptTask(ProcessBuilder procBuilder, JAXBProcess jaxbProc, JAXBTask jaxbTask)
   {
-    TaskBuilder taskBuilder = procBuilder.addTask(jaxb.getName(), jaxb.getTaskType());
-    addOutFlow(taskBuilder, jaxb.getOutFlow());
-    for (JAXBInputSet jaxbSet : jaxb.getInputSets())
+    TaskBuilder taskBuilder = procBuilder.addTask(jaxbTask.getName(), jaxbTask.getTaskType());
+    addOutFlow(taskBuilder, jaxbTask.getOutFlow());
+    
+    for (JAXBInputSet jaxbSet : jaxbTask.getInputSets())
     {
       taskBuilder.addInputSet();
       for (JAXBProperty jaxbProp : jaxbSet.getProperties())
         taskBuilder.addPropertyInput(jaxbProp.getName(), jaxbProp.getValue());
     }
-    for (JAXBOutputSet jaxbSet : jaxb.getOutputSets())
+    
+    for (JAXBOutputSet jaxbSet : jaxbTask.getOutputSets())
     {
       taskBuilder.addOutputSet();
       for (JAXBProperty jaxbProp : jaxbSet.getProperties())
         taskBuilder.addPropertyOutput(jaxbProp.getName(), jaxbProp.getValue());
     }
-    for (JAXBProperty jaxbProp : jaxb.getProperties())
+    
+    for (JAXBProperty jaxbProp : jaxbTask.getProperties())
     {
       taskBuilder.addProperty(jaxbProp.getName(), jaxbProp.getValue());
     }
-    JAXBSupportingElement jaxbSE = jaxb.getMessageRef();
-    if (jaxbSE instanceof JAXBMessage)
+    
+    JAXBMessageRef jaxbMsgRef = jaxbTask.getMessageRef();
+    if (jaxbMsgRef != null)
     {
-      JAXBMessage jaxbMsg = (JAXBMessage)jaxbSE;
-      MessageBuilder msgBuilder = taskBuilder.addMessage(jaxbMsg.getName());
-      adaptJAXBMessage(msgBuilder, jaxbMsg);
-    }
-    else if (jaxbSE instanceof JAXBMessageRef)
-    {
-      JAXBMessageRef jaxbMsgRef = (JAXBMessageRef)jaxbSE;
       String msgName = jaxbMsgRef.getNameRef();
       taskBuilder.addMessageRef(msgName);
     }
-    procBuilder.addExecutionHandler(loadHandler(jaxb.getExecutionHandler()));
-    procBuilder.addFlowHandler(loadHandler(jaxb.getFlowHandler()));
-    procBuilder.addSignalHandler(loadHandler(jaxb.getSignalHandler()));
+
+    procBuilder.addExecutionHandler(loadHandler(jaxbTask.getExecutionHandler()));
+    procBuilder.addFlowHandler(loadHandler(jaxbTask.getFlowHandler()));
+    procBuilder.addSignalHandler(loadHandler(jaxbTask.getSignalHandler()));
   }
 
   private void adaptJAXBGateway(ProcessBuilder procBuilder, JAXBProcess jaxbProc, JAXBGateway jaxb)

Added: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBCancelEventDetail.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBCancelEventDetail.java	                        (rev 0)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBCancelEventDetail.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -0,0 +1,37 @@
+/*
+ * 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.dialect.api10.model;
+
+//$Id$
+
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * The cancel event detail
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at XmlType(name = "CancelEventDetail")
+public class JAXBCancelEventDetail extends JAXBEventDetail
+{
+}
\ No newline at end of file


Property changes on: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBCancelEventDetail.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBCompensationEventDetail.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBCompensationEventDetail.java	                        (rev 0)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBCompensationEventDetail.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -0,0 +1,37 @@
+/*
+ * 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.dialect.api10.model;
+
+//$Id$
+
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * The compensation event detail
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at XmlType(name = "CompensationEventDetail")
+public class JAXBCompensationEventDetail extends JAXBEventDetail
+{
+}
\ No newline at end of file


Property changes on: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBCompensationEventDetail.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBEndEvent.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBEndEvent.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBEndEvent.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -21,7 +21,13 @@
  */
 package org.jboss.bpm.dialect.api10.model;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElements;
+import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
 // $Id$
@@ -39,6 +45,11 @@
 public class JAXBEndEvent extends JAXBEvent
 {
   private String name;
+  
+  @XmlElements( { 
+    @XmlElement(name = "message-result", type = JAXBMessageEventDetail.class)
+    })
+  private List<JAXBEventDetail> result = new ArrayList<JAXBEventDetail>();
 
   public String getName()
   {
@@ -50,4 +61,15 @@
   {
     this.name = name;
   }
+
+  public List<JAXBEventDetail> getResult()
+  {
+    return result;
+  }
+
+  @XmlTransient
+  public void setResult(List<JAXBEventDetail> result)
+  {
+    this.result = result;
+  }
 }
\ No newline at end of file

Added: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBErrorEventDetail.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBErrorEventDetail.java	                        (rev 0)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBErrorEventDetail.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -0,0 +1,37 @@
+/*
+ * 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.dialect.api10.model;
+
+//$Id$
+
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * The error event detail
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at XmlType(name = "ErrorEventDetail")
+public class JAXBErrorEventDetail extends JAXBEventDetail
+{
+}
\ No newline at end of file


Property changes on: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBErrorEventDetail.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBMessageEventDetail.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBMessageEventDetail.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBMessageEventDetail.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -23,6 +23,7 @@
 
 //$Id$
 
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
 /**
@@ -34,4 +35,17 @@
 @XmlType(name = "MessageEventDetail")
 public class JAXBMessageEventDetail extends JAXBEventDetail
 {
+  private JAXBMessageRef messageRef;
+
+  public JAXBMessageRef getMessageRef()
+  {
+    return messageRef;
+  }
+
+  @XmlElement
+  public void setMessageRef(JAXBMessageRef messageRef)
+  {
+    this.messageRef = messageRef;
+  }
+  
 }
\ No newline at end of file

Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBTask.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBTask.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBTask.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -30,7 +30,8 @@
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
-import org.jboss.bpm.model.Task.Implementation;
+import org.jboss.bpm.model.Message;
+import org.jboss.bpm.model.Message.Implementation;
 import org.jboss.bpm.model.Task.TaskType;
 
 //$Id$
@@ -62,10 +63,7 @@
     @XmlElement(name = "msgflow", type = JAXBMessageFlow.class) })
   private JAXBFlow outFlow;
 
-  @XmlElements( { 
-    @XmlElement(name = "msgref", type = JAXBMessageRef.class),
-    @XmlElement(name = "message", type = JAXBMessage.class) })
-  private JAXBSupportingElement messageRef;
+  private JAXBMessageRef messageRef;
   
   public JAXBFlow getOutFlow()
   {
@@ -89,23 +87,23 @@
     this.taskType = taskType;
   }
 
-  public Implementation getImplementation()
+  public Message.Implementation getImplementation()
   {
     return implementation;
   }
 
-  public void setImplementation(Implementation implementation)
+  public void setImplementation(Message.Implementation implementation)
   {
     this.implementation = implementation;
   }
 
-  public JAXBSupportingElement getMessageRef()
+  public JAXBMessageRef getMessageRef()
   {
     return messageRef;
   }
 
-  @XmlTransient
-  public void setMessageRef(JAXBSupportingElement messageRef)
+  @XmlElement(name = "msgref")
+  public void setMessageRef(JAXBMessageRef messageRef)
   {
     this.messageRef = messageRef;
   }

Added: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBTerminateEventDetail.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBTerminateEventDetail.java	                        (rev 0)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBTerminateEventDetail.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -0,0 +1,37 @@
+/*
+ * 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.dialect.api10.model;
+
+//$Id$
+
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * The terminate event detail
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at XmlType(name = "TerminateEventDetail")
+public class JAXBTerminateEventDetail extends JAXBEventDetail
+{
+}
\ No newline at end of file


Property changes on: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBTerminateEventDetail.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/message/ProcessMessageTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/message/ProcessMessageTest.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/message/ProcessMessageTest.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -48,7 +48,7 @@
   public void testProcessMessage() throws Exception
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
-    procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("End").addEndEvent("End");
+    procBuilder.addProcess("ProcessMessageTest").addStartEvent("Start").addSequenceFlow("End").addEndEvent("End");
     MessageBuilder msgBuilder = procBuilder.addMessage("FooMsg");
     msgBuilder.addProperty("foo", "bar");
     Process expProc = procBuilder.getProcess();
@@ -64,29 +64,6 @@
     assertEquals("bar", msg.getPropertyValue("foo"));
   }
   
-  public void testReceiveTaskWithMessage() throws Exception
-  {
-    ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
-    procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("A");
-    TaskBuilder taskBuilder = procBuilder.addTask("A", TaskType.Receive);
-    MessageBuilder msgBuilder = taskBuilder.addMessage("FooMsg");
-    msgBuilder.addProperty("foo", "bar");
-    procBuilder.addSequenceFlow("End").addEndEvent("End");
-    Process expProc = procBuilder.getProcess();
-    
-    ProcessManager pm = ProcessManager.locateProcessManager();
-    DialectHandler dh = pm.getDialectHandler(DialectHandler.DEFAULT_NAMESPACE_URI);
-    
-    StringWriter strwr = new StringWriter();
-    dh.marshallProcess(expProc, strwr);
-    
-    Process wasProc = dh.createProcess(strwr.toString(), false);
-    ReceiveTask recTask = (ReceiveTask)wasProc.getFlowObject("A");
-    Message msg = recTask.getMessageRef();
-    assertEquals("FooMsg", msg.getName());
-    assertEquals("bar", msg.getPropertyValue("foo"));
-  }
-  
   public void testReceiveTaskWithMessageRef() throws Exception
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityBuilderImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityBuilderImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityBuilderImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -81,7 +81,7 @@
   
   public ActivityBuilder addProperty(String name, String value)
   {
-    Property prop = new PropertyImpl(name, new ExpressionImpl(value));
+    Property prop = new PropertyImpl(name, new ExpressionImpl(ExpressionLanguage.String, value));
     getActivity().addProperty(prop);
     return this;
   }

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -30,18 +30,17 @@
 import org.jboss.bpm.InvalidProcessException;
 import org.jboss.bpm.NotImplementedException;
 import org.jboss.bpm.model.Activity;
-import org.jboss.bpm.model.Expression;
 import org.jboss.bpm.model.ConnectingObject;
+import org.jboss.bpm.model.Expression;
 import org.jboss.bpm.model.InputSet;
 import org.jboss.bpm.model.OutputSet;
 import org.jboss.bpm.model.Process;
 import org.jboss.bpm.model.Property;
 import org.jboss.bpm.runtime.ExecutionContext;
-import org.jboss.bpm.runtime.ExecutionHandler;
 import org.jboss.bpm.runtime.FlowHandler;
-import org.jboss.bpm.runtime.TokenExecutor;
 import org.jboss.bpm.runtime.MutablePropertySupport;
 import org.jboss.bpm.runtime.Token;
+import org.jboss.bpm.runtime.TokenExecutor;
 import org.jboss.bpm.runtime.internal.TokenImpl;
 
 /**
@@ -131,7 +130,7 @@
   public String getPropertyValue(String name)
   {
     Property prop = getProperty(name);
-    return prop != null ? prop.getValue().getExpressionBody() : null;
+    return prop != null ? prop.getValue() : null;
   }
 
   public List<Property> getProperties()
@@ -180,7 +179,7 @@
     TokenImpl tokenImpl = (TokenImpl)token;
     tokenImpl.setOutputSet(getActiveOutputSet());
     tokenImpl.setInputSet(getActiveInputSet(token));
-    executeHandler(token);
+    callExecutionHandler(token);
     processOutputSet(token);
     postProcessInputSet(token);
   }
@@ -210,7 +209,7 @@
           for (Property prop : auxSet.getProperties())
           {
             String name = prop.getName();
-            String value = (String)exContext.getAttachment(name);
+            Object value = exContext.getAttachment(name);
             inputSet.addProperty(new PropertyImpl(name, new ExpressionImpl(value)));
           }
           break;
@@ -253,19 +252,6 @@
   }
 
   /**
-   * Execute external business logic
-   */
-  protected void executeHandler(Token token)
-  {
-    // Call the execution handler with the InputSet
-    ExecutionHandler handler = getExecutionHandler();
-    if (handler != null)
-    {
-      handler.execute(token);
-    }
-  }
-
-  /**
    * Transfer data from outputSet to Token
    */
   protected void processOutputSet(Token token)
@@ -281,7 +267,7 @@
         throw new IllegalStateException("Cannot find outputSet property '" + prop.getName() + "' in Activity: " + getName());
 
       String name = outProp.getName();
-      String value = outProp.getValue().getExpressionBody();
+      String value = outProp.getValue();
       exContext.addAttachment(name, value);
     }
   }

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EndEventImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EndEventImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EndEventImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -23,7 +23,9 @@
 
 //$Id$
 
-import java.util.Set;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -31,11 +33,14 @@
 import org.jboss.bpm.model.ConnectingObject;
 import org.jboss.bpm.model.EndEvent;
 import org.jboss.bpm.model.EventDetail;
+import org.jboss.bpm.model.MessageEventDetail;
+import org.jboss.bpm.model.Process;
 import org.jboss.bpm.model.Signal;
+import org.jboss.bpm.model.EventDetail.EventDetailType;
 import org.jboss.bpm.runtime.FlowHandler;
-import org.jboss.bpm.runtime.TokenExecutor;
 import org.jboss.bpm.runtime.SignalHandler;
 import org.jboss.bpm.runtime.Token;
+import org.jboss.bpm.runtime.TokenExecutor;
 
 /**
  * As the name implies, the End Event indicates where a Process will end.
@@ -52,7 +57,7 @@
   // provide logging
   private static final Log log = LogFactory.getLog(EndEventImpl.class);
 
-  private Set<EventDetail> result;
+  private List<EventDetail> resultSet = new ArrayList<EventDetail>();
   private ConnectingObject inFlow;
 
   public EndEventImpl(String name)
@@ -73,11 +78,32 @@
     this.inFlow = inFlow;
   }
 
-  public Set<EventDetail> getResult()
+  public void addResult(EventDetail result)
   {
-    return result;
+    resultSet.add(result);
   }
 
+  public List<EventDetail> getResult()
+  {
+    return Collections.unmodifiableList(resultSet);
+  }
+
+  @Override
+  protected void callExecutionHandler(Token token)
+  {
+    super.callExecutionHandler(token);
+    
+    for (EventDetail eventDetail : getResult())
+    {
+      if (eventDetail.getEventDetailType() == EventDetailType.Message)
+      {
+        MessageEventDetail msgEventDetail = (MessageEventDetail)eventDetail;
+        MessageSender messageSender = new MessageSender(this, msgEventDetail.getMessageRef());
+        messageSender.sendMessage(token);
+      }
+    }
+  }
+
   public FlowHandler getFlowHandler()
   {
     FlowHandler handler = super.getFlowHandler();
@@ -119,6 +145,19 @@
     return handler;
   }
 
+  @Override
+  protected void initialize(Process proc)
+  {
+    super.initialize(proc);
+    
+    // Initialize Results
+    for (EventDetail result : getResult())
+    {
+      EventDetailImpl resultImpl = (EventDetailImpl)result;
+      resultImpl.initialize(this);
+    }
+  }
+
   public String toString()
   {
     return "EndEvent[" + getName() + "]";

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventBuilderImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventBuilderImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventBuilderImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -27,9 +27,11 @@
 import org.jboss.bpm.model.EndEvent;
 import org.jboss.bpm.model.Event;
 import org.jboss.bpm.model.EventBuilder;
+import org.jboss.bpm.model.EventDetail;
 import org.jboss.bpm.model.IntermediateEvent;
 import org.jboss.bpm.model.Signal;
 import org.jboss.bpm.model.StartEvent;
+import org.jboss.bpm.model.EventDetail.EventDetailType;
 import org.jboss.bpm.model.Signal.SignalType;
 
 /**
@@ -40,35 +42,191 @@
  */
 public class EventBuilderImpl extends ProcessBuilderImpl implements EventBuilder
 {
+  private EventDetail eventDetail;
+
   public EventBuilderImpl(ProcessImpl proc, FlowObjectImpl flowObject)
   {
     super(proc, flowObject);
   }
 
-  public EventBuilder addSignalTrigger(SignalType signalType, String message)
+  public EventBuilder addEventDetail(EventDetailType detailType)
   {
-    EventImpl event = getEvent();
-    if (event instanceof StartEvent)
+    if (detailType == EventDetailType.Message)
     {
-      StartEventImpl start = (StartEventImpl)event;
-      Signal signal = new Signal(event.getName(), signalType, message);
-      start.addTrigger(new SignalEventDetailImpl(signal));
+      eventDetail = new MessageEventDetailImpl();
+      addEventDetail(getEvent(), eventDetail);
     }
-    else if (event instanceof IntermediateEvent)
+    else if (detailType == EventDetailType.Timer)
     {
-      throw new NotImplementedException("JBPM-1650", "IntermediateEvent SignalTrigger");
+      throw new NotImplementedException("JBPM-1663", "EventDetail Timer");
     }
-    else if (event instanceof EndEvent)
+    else if (detailType == EventDetailType.Error)
     {
-      throw new NotImplementedException("JBPM-1651", "EndEvent SignalTrigger");
+      throw new NotImplementedException("JBPM-1664", "EventDetail Error");
     }
+    else if (detailType == EventDetailType.Cancel)
+    {
+      throw new NotImplementedException("JBPM-1665", "EventDetail Cancel");
+    }
+    else if (detailType == EventDetailType.Compensation)
+    {
+      throw new NotImplementedException("JBPM-1666", "EventDetail Compensation");
+    }
+    else if (detailType == EventDetailType.Conditional)
+    {
+      throw new NotImplementedException("JBPM-1667", "EventDetail Conditional");
+    }
+    else if (detailType == EventDetailType.Link)
+    {
+      throw new NotImplementedException("JBPM-1668", "EventDetail Link");
+    }
+    else if (detailType == EventDetailType.Signal)
+    {
+      eventDetail = new SignalEventDetailImpl();
+      addEventDetail(getEvent(), eventDetail);
+    }
+    return this;
+  }
+
+  public EventBuilder addSignalRef(SignalType signalType, String message)
+  {
+    if (eventDetail instanceof SignalEventDetailImpl)
+    {
+      SignalEventDetailImpl signalEventDetail = (SignalEventDetailImpl)eventDetail;
+      signalEventDetail.setSignalRef(new Signal(flowObject.getName(), signalType, message));
+    }
     else
     {
-      throw new IllegalStateException("Trigger on: " + event);
+      throw new IllegalStateException("Cannot add signal to: " + eventDetail);
     }
     return this;
   }
 
+  public EventBuilder addMessageRef(String msgName)
+  {
+    MessageImpl message = new MessageImpl(msgName);
+    if (eventDetail instanceof MessageEventDetailImpl)
+    {
+      MessageEventDetailImpl msgEventDetail = (MessageEventDetailImpl)eventDetail;
+      msgEventDetail.setMessageRef(message);
+    }
+    else
+    {
+      throw new IllegalStateException("Cannot add message to: " + eventDetail);
+    }
+    return this;
+  }
+
+  private void addEventDetail(EventImpl event, EventDetail trigger)
+  {
+    EventDetailType detailType = trigger.getEventDetailType();
+    if (event instanceof StartEvent)
+    {
+      StartEventImpl start = (StartEventImpl)event;
+      if (start.getTrigger().size() > 0)
+        throw new NotImplementedException("JBPM-1660", "StartEvent Multiple Trigger");
+      
+      if (detailType == EventDetailType.Message)
+      {
+        throw new NotImplementedException("JBPM-1657", "StartEvent Message Trigger");
+      }
+      else if (detailType == EventDetailType.Timer)
+      {
+        throw new NotImplementedException("JBPM-1658", "StartEvent Timer Trigger");
+      }
+      else if (detailType == EventDetailType.Conditional)
+      {
+        throw new NotImplementedException("JBPM-1659", "StartEvent Conditional Trigger");
+      }
+      else if (detailType == EventDetailType.Signal)
+      {
+        start.addTrigger(eventDetail);
+      }
+      else
+      {
+        throw new IllegalStateException("Unsupported start event trigger type: " + detailType);
+      }
+    }
+    else if (event instanceof IntermediateEvent)
+    {
+      IntermediateEventImpl intermediate = (IntermediateEventImpl)event;
+      if (intermediate.getTrigger().size() > 0)
+        throw new NotImplementedException("JBPM-1682", "IntermediateEvent Multiple Trigger");
+        
+      if (detailType == EventDetailType.Message)
+      {
+        throw new NotImplementedException("JBPM-1669", "IntermediateEvent Message Trigger");
+      }
+      else if (detailType == EventDetailType.Timer)
+      {
+        throw new NotImplementedException("JBPM-1670", "IntermediateEvent Timer Trigger");
+      }
+      else if (detailType == EventDetailType.Error)
+      {
+        throw new NotImplementedException("JBPM-1671", "IntermediateEvent Error Trigger");
+      }
+      else if (detailType == EventDetailType.Cancel)
+      {
+        throw new NotImplementedException("JBPM-1672", "IntermediateEvent Cancel Trigger");
+      }
+      else if (detailType == EventDetailType.Compensation)
+      {
+        throw new NotImplementedException("JBPM-1673", "IntermediateEvent Compensation Trigger");
+      }
+      else if (detailType == EventDetailType.Conditional)
+      {
+        throw new NotImplementedException("JBPM-1674", "IntermediateEvent Conditional Trigger");
+      }
+      else if (detailType == EventDetailType.Link)
+      {
+        throw new NotImplementedException("JBPM-1675", "IntermediateEvent Link Trigger");
+      }
+      else if (detailType == EventDetailType.Signal)
+      {
+        throw new NotImplementedException("JBPM-1650", "IntermediateEvent Signal Trigger");
+      }
+      else
+      {
+        throw new IllegalStateException("Unsupported intermediate event trigger type: " + detailType);
+      }
+    }
+    else if (event instanceof EndEvent)
+    {
+      EndEventImpl end = (EndEventImpl)event;
+      if (end.getResult().size() > 0)
+        throw new NotImplementedException("JBPM-1683", "EndEvent Multiple Result");
+      
+      if (detailType == EventDetailType.Message)
+      {
+        end.addResult(eventDetail);
+      }
+      else if (detailType == EventDetailType.Error)
+      {
+        throw new NotImplementedException("JBPM-1677", "EndEvent Error Result");
+      }
+      else if (detailType == EventDetailType.Cancel)
+      {
+        throw new NotImplementedException("JBPM-1678", "EndEvent Cancel Result");
+      }
+      else if (detailType == EventDetailType.Compensation)
+      {
+        throw new NotImplementedException("JBPM-1679", "EndEvent Compensation Result");
+      }
+      else if (detailType == EventDetailType.Signal)
+      {
+        throw new NotImplementedException("JBPM-1651", "EndEvent Signal Result");
+      }
+      else if (detailType == EventDetailType.Terminate)
+      {
+        throw new NotImplementedException("JBPM-1680", "EndEvent Terminate Result");
+      }
+      else
+      {
+        throw new IllegalStateException("Unsupported end event trigger type: " + detailType);
+      }
+    }
+  }
+
   private EventImpl getEvent()
   {
     if (flowObject instanceof Event == false)

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventDetailImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventDetailImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventDetailImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -23,6 +23,7 @@
 
 //$Id$
 
+import org.jboss.bpm.model.Event;
 import org.jboss.bpm.model.EventDetail;
 
 /**
@@ -34,4 +35,8 @@
 @SuppressWarnings("serial")
 public abstract class EventDetailImpl extends SupportingElementImpl implements EventDetail
 {
+  protected void initialize(Event event)
+  {
+    // nothing to do
+  }
 }
\ No newline at end of file

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExpressionImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExpressionImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExpressionImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -35,27 +35,34 @@
 @SuppressWarnings("serial")
 public class ExpressionImpl extends SupportingElementImpl implements Expression
 {
-  private String body;
-  private ExpressionLanguage lang = ExpressionLanguage.String;
+  private Object body;
+  private ExpressionLanguage lang;
 
-  public ExpressionImpl(String body)
+  public ExpressionImpl(Object body)
   {
     this.body = body;
+    this.lang = (body instanceof String ? ExpressionLanguage.String : ExpressionLanguage.Object);
   }
 
-  public ExpressionImpl(ExpressionLanguage lang, String body)
+  public ExpressionImpl(ExpressionLanguage lang, Object body)
   {
     this.body = body;
     this.lang = lang;
   }
 
+
+  public ExpressionLanguage getExpressionLanguage()
+  {
+    return lang;
+  }
+
   public String getExpressionBody()
   {
-    return body;
+    return (String)body;
   }
 
-  public ExpressionLanguage getExpressionLanguage()
+  public Object getExpressionValue()
   {
-    return lang;
+    return body;
   }
 }

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowObjectImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowObjectImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowObjectImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -107,8 +107,21 @@
   
   public void execute(Token token)
   {
-    // noting to do
+    callExecutionHandler(token);
   }
+  
+  /**
+   * Execute external business logic
+   */
+  protected void callExecutionHandler(Token token)
+  {
+    // Call the execution handler if there is one
+    ExecutionHandler handler = getExecutionHandler();
+    if (handler != null)
+    {
+      handler.execute(token);
+    }
+  }
 
   public void reset()
   {

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/InputSetImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/InputSetImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/InputSetImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -64,7 +64,7 @@
   public String getPropertyValue(String name)
   {
     Property prop = getProperty(name);
-    return prop != null ? prop.getValue().getExpressionBody() : null;
+    return prop != null ? prop.getValue() : null;
   }
 
   public List<Property> getProperties()

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/IntermediateEventImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/IntermediateEventImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/IntermediateEventImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -23,8 +23,13 @@
 
 //$Id$
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 import org.jboss.bpm.client.SignalManager;
 import org.jboss.bpm.model.ConnectingObject;
+import org.jboss.bpm.model.EventDetail;
 import org.jboss.bpm.model.IntermediateEvent;
 import org.jboss.bpm.model.Signal;
 import org.jboss.bpm.runtime.FlowHandler;
@@ -45,6 +50,7 @@
 {
   private ConnectingObject inFlow;
   private ConnectingObject outFlow;
+  private List<EventDetail> triggers = new ArrayList<EventDetail>();
 
   public IntermediateEventImpl(String name)
   {
@@ -71,6 +77,16 @@
     this.outFlow = flow;
   }
 
+  public List<EventDetail> getTrigger()
+  {
+    return Collections.unmodifiableList(triggers);
+  }
+
+  public void addTrigger(EventDetail eventDetail)
+  {
+    triggers.add(eventDetail);
+  }
+  
   public FlowHandler getFlowHandler()
   {
     FlowHandler handler = super.getFlowHandler();

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageBuilderImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageBuilderImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageBuilderImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -57,14 +57,14 @@
     return this;
   }
 
-  public MessageBuilder addProperty(String name, String value)
+  public MessageBuilder addProperty(String name, Object value)
   {
     Property prop = new PropertyImpl(name, new ExpressionImpl(value));
     message.addProperty(prop);
     return this;
   }
 
-  public MessageBuilder addProperty(String name, String value, boolean isCorrelation)
+  public MessageBuilder addProperty(String name, Object value, boolean isCorrelation)
   {
     Property prop = new PropertyImpl(name, new ExpressionImpl(value), isCorrelation);
     message.addProperty(prop);

Added: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageEventDetailImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageEventDetailImpl.java	                        (rev 0)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageEventDetailImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -0,0 +1,69 @@
+/*
+ * 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.internal;
+
+//$Id$
+
+import org.jboss.bpm.model.Event;
+import org.jboss.bpm.model.Message;
+import org.jboss.bpm.model.MessageEventDetail;
+
+/**
+ * The message event detail
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at SuppressWarnings("serial")
+public class MessageEventDetailImpl extends EventDetailImpl implements MessageEventDetail
+{
+  private Message messageRef;
+  
+  public EventDetailType getEventDetailType()
+  {
+    return EventDetailType.Message;
+  }
+  
+  public Message.Implementation getImplementation()
+  {
+    return Message.Implementation.Unspecified;
+  }
+
+  public Message getMessageRef()
+  {
+    return messageRef;
+  }
+
+  public void setMessageRef(Message message)
+  {
+    this.messageRef = message;
+  }
+
+  @Override
+  protected void initialize(Event event)
+  {
+    super.initialize(event);
+    
+    ProcessImpl procImpl = (ProcessImpl)event.getProcess();
+    procImpl.initializeMessageRef(messageRef);
+  }
+}


Property changes on: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageEventDetailImpl.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -105,7 +105,7 @@
   public String getPropertyValue(String name)
   {
     Property prop = getProperty(name);
-    return prop != null ? prop.getValue().getExpressionBody() : null;
+    return prop != null ? prop.getValue() : null;
   }
   
   public List<Property> getProperties()

Added: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageSender.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageSender.java	                        (rev 0)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageSender.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -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.internal;
+
+//$Id$
+
+import javax.management.ObjectName;
+
+import org.jboss.bpm.client.MessageManager;
+import org.jboss.bpm.client.ObjectNameFactory;
+import org.jboss.bpm.model.Entity;
+import org.jboss.bpm.model.FlowObject;
+import org.jboss.bpm.model.Message;
+import org.jboss.bpm.model.MessageBuilder;
+import org.jboss.bpm.model.MessageBuilderFactory;
+import org.jboss.bpm.model.Participant;
+import org.jboss.bpm.model.Property;
+import org.jboss.bpm.runtime.ExecutionContext;
+import org.jboss.bpm.runtime.Token;
+
+/**
+ * A helper that sends messages
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 16-Aug-2008
+ */
+class MessageSender
+{
+  private FlowObject fromRef;
+  private Message messageRef;
+  
+  public MessageSender(FlowObject fromRef, Message messageRef)
+  {
+    this.fromRef = fromRef;
+    this.messageRef = messageRef;
+    
+    if (messageRef == null)
+      throw new IllegalArgumentException("MessageRef cannot be null");
+    if (fromRef == null)
+      throw new IllegalArgumentException("FromRef cannot be null");
+  }
+
+  /**
+   * Extract message content from the token and send the message
+   * to it's recipient.
+   */
+  public void sendMessage(Token token)
+  {
+    ExecutionContext exContext = token.getExecutionContext();
+    MessageBuilderFactory factory = MessageBuilderFactory.newInstance();
+    MessageBuilder msgBuilder = factory.newMessageBuilder();
+
+    Participant toRef = messageRef.getToRef();
+    if (toRef == null || toRef.getEntityRef() == null)
+      throw new IllegalStateException("Cannot obtain target participant");
+
+    Entity entityRef = toRef.getEntityRef();
+    ObjectName targetID = ObjectNameFactory.create(entityRef.getName());
+    msgBuilder.newMessage(messageRef.getName());
+    msgBuilder.addToRef(targetID);
+
+    // Copy the properties from the execution context
+    // to the send message
+    for (Property auxProp : messageRef.getProperties())
+    {
+      String key = auxProp.getName();
+      Object value = exContext.getAttachment(key);
+      if (value == null)
+        throw new IllegalStateException("Cannot obtain property: " + key);
+
+      msgBuilder.addProperty(key, value);
+    }
+    MessageImpl msg = (MessageImpl)msgBuilder.getMessage();
+    msg.setFrom(fromRef);
+
+    MessageManager mm = MessageManager.locateMessageManager();
+    mm.sendMessage(targetID, msg);
+  }
+}
\ No newline at end of file


Property changes on: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageSender.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/OutputSetImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/OutputSetImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/OutputSetImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -64,7 +64,7 @@
   public String getPropertyValue(String name)
   {
     Property prop = getProperty(name);
-    return prop != null ? prop.getValue().getExpressionBody() : null;
+    return prop != null ? prop.getValue() : null;
   }
 
   public List<Property> getProperties()

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -64,7 +64,7 @@
 {
   // provide logging
   private static final Log log = LogFactory.getLog(ProcessImpl.class);
-  
+
   // The required process name
   private String name;
   // The list of associated flow objects
@@ -128,7 +128,7 @@
   public String getPropertyValue(String name)
   {
     Property prop = getProperty(name);
-    return prop != null ? prop.getValue().getExpressionBody() : null;
+    return prop != null ? prop.getValue() : null;
   }
 
   public List<Property> getProperties()
@@ -196,7 +196,7 @@
       throw new InvalidProcessException("Cannot create a copy of: " + this, ex);
     }
   }
-  
+
   public ObjectName startProcess()
   {
     return startProcess(null);
@@ -205,20 +205,20 @@
   public ObjectName startProcess(Attachments att)
   {
     ProcessManager pm = ProcessManager.locateProcessManager();
-    
+
     if (status == ProcessStatus.Aborted || status == ProcessStatus.Completed)
       resetProcess();
-    
+
     if (status != ProcessStatus.Ready)
       throw new IllegalStateException("Cannot start process in state: " + status);
-    
+
     // Register the process if needed
     if (pm.getProcessByID(getID()) == null)
     {
       ProcessManagerImpl pmImpl = (ProcessManagerImpl)pm;
       pmImpl.registerProcess(this);
     }
-    
+
     pm.startProcess(getID(), att);
     return getID();
   }
@@ -244,11 +244,11 @@
   {
     waitForEndInternal(timeout);
   }
-  
+
   /**
    * Wait for the Process to end. All Tokens that are generated at the Start Event for that Process must eventually
-   * arrive at an End Event. The Process will be in a running state until all Tokens are consumed. If the process
-   * was aborted this method throws the causing RuntimeException if avaialable.
+   * arrive at an End Event. The Process will be in a running state until all Tokens are consumed. If the process was
+   * aborted this method throws the causing RuntimeException if avaialable.
    */
   private void waitForEndInternal(long timeout)
   {
@@ -267,24 +267,25 @@
         {
           if (runtimeException != null)
             throw new BPMException("Process aborted", runtimeException);
-          
+
           break;
         }
-        
+
         // Join the executor thread
         executorThread.join(timeout);
         now = System.currentTimeMillis();
       }
-      
+
       // Throw timeout exception if it took too long
       if (status != ProcessStatus.Cancelled && status != ProcessStatus.Completed && status != ProcessStatus.Aborted)
       {
-        ProcessTimeoutException rte = new ProcessTimeoutException("Process timeout after " + timeout + "ms for: " + getID());
+        ProcessTimeoutException rte = new ProcessTimeoutException("Process timeout after " + timeout + "ms for: "
+            + getID());
         log.error(rte);
-        
+
         log.error("Interrupt executor thread");
         executorThread.interrupt();
-        
+
         throw rte;
       }
     }
@@ -342,7 +343,7 @@
   {
     this.status = status;
   }
-  
+
   public Thread getExecutorThread()
   {
     return executorThread;
@@ -362,10 +363,10 @@
   {
     if (getMessage(msg.getName()) != null)
       throw new InvalidProcessException("Duplicate message: " + msg);
-    
+
     messages.add(msg);
   }
-  
+
   public Message getMessage(String msgName)
   {
     for (Message msg : messages)
@@ -375,12 +376,12 @@
     }
     return null;
   }
-  
+
   public void initialize()
   {
     if (status != ProcessStatus.None)
       throw new IllegalStateException("Cannot initialize process in state: " + status);
-    
+
     // Initialize the Element
     super.initialize(this);
 
@@ -407,6 +408,23 @@
     status = ProcessStatus.Ready;
   }
 
+  protected void initializeMessageRef(Message msgRef)
+  {
+    String msgName = msgRef.getName();
+    MessageImpl procMsg = (MessageImpl)getMessage(msgName);
+    if (procMsg == null)
+      throw new IllegalStateException("Cannot obtain process message: " + msgName);
+
+    MessageImpl msgImpl = (MessageImpl)msgRef;
+    if (msgImpl.getSourceID() == null && procMsg.getSourceID() != null)
+      msgImpl.setSourceID(procMsg.getSourceID());
+    if (msgImpl.getTargetID() == null && procMsg.getTargetID() != null)
+      msgImpl.setTargetID(procMsg.getTargetID());
+
+    for (Property prop : procMsg.getProperties())
+      ((MessageImpl)msgRef).addProperty(prop);
+  }
+
   public String toString()
   {
     return "Process[" + getName() + "]";

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/PropertyBuilderImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/PropertyBuilderImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/PropertyBuilderImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -34,7 +34,7 @@
  */
 public class PropertyBuilderImpl implements PropertyBuilder
 {
-  public Property newProperty(String name, String value)
+  public Property newProperty(String name, Object value)
   {
     return new PropertyImpl(name, new ExpressionImpl(value));
   }

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/PropertyImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/PropertyImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/PropertyImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -67,7 +67,7 @@
     return PropertyType.String;
   }
 
-  public Expression getValue()
+  public Expression getExpression()
   {
     return expression;
   }
@@ -86,4 +86,15 @@
   {
     this.isCorrelation = isCorrelation;
   }
+
+  public String getValue()
+  {
+    return (expression != null ? expression.getExpressionBody() : null);
+  }
+
+  @SuppressWarnings("unchecked")
+  public <T> T getValue(Class<T> T)
+  {
+    return (T)(expression != null ? expression.getExpressionValue() : null);
+  }
 }

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ReceiveTaskImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ReceiveTaskImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ReceiveTaskImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -34,6 +34,7 @@
 import org.jboss.bpm.model.Process;
 import org.jboss.bpm.model.Property;
 import org.jboss.bpm.model.ReceiveTask;
+import org.jboss.bpm.model.Message.Implementation;
 import org.jboss.bpm.runtime.ExecutionContext;
 import org.jboss.bpm.runtime.Token;
 
@@ -69,7 +70,7 @@
     return TaskType.Receive;
   }
 
-  public Implementation getImplementation()
+  public Message.Implementation getImplementation()
   {
     return implementation;
   }
@@ -155,8 +156,7 @@
     if (messageRef == null)
       throw new InvalidProcessException("A Message for the MessageRef attribute MUST be entered");
     
-    initializeMessageRef(proc, messageRef);
-    if (messageRef.getToRef() != null)
-      throw new IllegalArgumentException("Message targetID must be null for: " + this);
+    ProcessImpl procImpl = (ProcessImpl)proc;
+    procImpl.initializeMessageRef(messageRef);
   }
 }
\ No newline at end of file

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SendTaskImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SendTaskImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SendTaskImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -21,25 +21,16 @@
  */
 package org.jboss.bpm.model.internal;
 
-import javax.management.ObjectName;
+//$Id$
 
+
 import org.jboss.bpm.InvalidProcessException;
-import org.jboss.bpm.client.MessageManager;
-import org.jboss.bpm.client.ObjectNameFactory;
-import org.jboss.bpm.model.Entity;
 import org.jboss.bpm.model.Message;
-import org.jboss.bpm.model.MessageBuilder;
-import org.jboss.bpm.model.MessageBuilderFactory;
-import org.jboss.bpm.model.Participant;
 import org.jboss.bpm.model.Process;
-import org.jboss.bpm.model.Property;
 import org.jboss.bpm.model.SendTask;
-import org.jboss.bpm.runtime.ExecutionContext;
-import org.jboss.bpm.runtime.ExecutionHandler;
+import org.jboss.bpm.model.Message.Implementation;
 import org.jboss.bpm.runtime.Token;
 
-//$Id$
-
 /**
  * Task that corresponds to the TaskType.None
  * 
@@ -64,7 +55,7 @@
     return TaskType.Send;
   }
 
-  public Implementation getImplementation()
+  public Message.Implementation getImplementation()
   {
     return implementation;
   }
@@ -79,52 +70,15 @@
     this.messageRef = message;
   }
 
-  /**
-   * Execute external business logic
-   */
-  protected void executeHandler(Token token)
+  @Override
+  protected void callExecutionHandler(Token token)
   {
-    // Call the execution handler with the InputSet
-    ExecutionHandler handler = getExecutionHandler();
-    if (handler != null)
-    {
-      handler.execute(token);
-    }
-    // Assume the the single IORule actually mapps the data
-    else 
-    {
-      ExecutionContext exContext = token.getExecutionContext();
-      MessageBuilderFactory factory = MessageBuilderFactory.newInstance();
-      MessageBuilder msgBuilder = factory.newMessageBuilder();
-      
-      Participant toRef = messageRef.getToRef();
-      if (toRef == null || toRef.getEntityRef() == null)
-        throw new IllegalStateException("Cannot obtain target participant");
-      
-      Entity entityRef = toRef.getEntityRef();
-      ObjectName targetID = ObjectNameFactory.create(entityRef.getName());
-      msgBuilder.newMessage(messageRef.getName());
-      msgBuilder.addToRef(targetID);
-
-      // Copy the properties from the execution context
-      // to the send message
-      for (Property auxProp : messageRef.getProperties())
-      {
-        String key = auxProp.getName();
-        String value = (String)exContext.getAttachment(key);
-        if (value == null)
-          throw new IllegalStateException("Cannot obtain property: " + key);
-
-        msgBuilder.addProperty(key, value);
-      }
-      MessageImpl msg = (MessageImpl)msgBuilder.getMessage();
-      msg.setFrom(this);
-      
-      MessageManager mm = MessageManager.locateMessageManager();
-      mm.sendMessage(targetID, msg);
-    }
+    super.callExecutionHandler(token);
+    
+    MessageSender messageSender = new MessageSender(this, messageRef);
+    messageSender.sendMessage(token);
   }
-  
+
   @Override
   protected void initialize(Process proc)
   {
@@ -132,8 +86,10 @@
 
     if (messageRef == null)
       throw new InvalidProcessException("A Message for the MessageRef attribute MUST be entered");
+
+    ProcessImpl procImpl = (ProcessImpl)proc;
+    procImpl.initializeMessageRef(messageRef);
     
-    initializeMessageRef(proc, messageRef);
     if (messageRef.getToRef() == null)
       throw new IllegalArgumentException("Message targetID cannot be null for: " + this);
   }

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SignalEventDetailImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SignalEventDetailImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SignalEventDetailImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -33,15 +33,10 @@
  * @since 08-Jul-2008
  */
 @SuppressWarnings("serial")
-public class SignalEventDetailImpl extends SupportingElementImpl implements SignalEventDetail
+public class SignalEventDetailImpl extends EventDetailImpl implements SignalEventDetail
 {
-  private Signal signal;
+  private Signal signalRef;
   
-  public SignalEventDetailImpl(Signal signal)
-  {
-    this.signal = signal;
-  }
-
   public EventDetailType getEventDetailType()
   {
     return EventDetailType.Signal;
@@ -49,6 +44,11 @@
 
   public Signal getSignalRef()
   {
-    return signal;
+    return signalRef;
   }
+
+  public void setSignalRef(Signal signalRef)
+  {
+    this.signalRef = signalRef;
+  }
 }

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/StartEventImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/StartEventImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/StartEventImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -62,7 +62,6 @@
 
   private ConnectingObject outFlow;
   private List<EventDetail> triggers = new ArrayList<EventDetail>();
-  private Signal startSignal;
 
   public StartEventImpl(String name)
   {
@@ -77,12 +76,6 @@
   public void addTrigger(EventDetail eventDetail)
   {
     triggers.add(eventDetail);
-    
-    if (eventDetail instanceof SignalEventDetail)
-    {
-      SignalEventDetail signalDetail = (SignalEventDetail)eventDetail;
-      startSignal = signalDetail.getSignalRef();
-    }
   }
 
   public ConnectingObject getOutFlow()
@@ -140,41 +133,49 @@
   {
     super.initialize(proc);
     
-    // Setup the start signal handler
-    if (startSignal != null)
+    for (EventDetail eventDetail : getTrigger())
     {
-      final StartEvent start = this;
-      SignalListener listener = new SignalListener()
+      EventDetailImpl eventDetailImpl = (EventDetailImpl)eventDetail;
+      eventDetailImpl.initialize(this);
+      
+      // Register the start signal listener
+      if (eventDetail instanceof SignalEventDetail)
       {
-        public void catchSignal(Signal signal)
+        SignalEventDetail signalEventDetail = (SignalEventDetail)eventDetail;
+        final Signal startSignal = signalEventDetail.getSignalRef();
+        final StartEvent start = this;
+        SignalListener listener = new SignalListener()
         {
-          if (startSignal.getSignalType() == signal.getSignalType() && startSignal.getMessage().equals(signal.getMessage()))
+          public void catchSignal(Signal signal)
           {
-            log.debug("catchSignal: " + signal);
-            if (proc.getProcessStatus() == ProcessStatus.Active)
+            if (startSignal.getSignalType() == signal.getSignalType() && startSignal.getMessage().equals(signal.getMessage()))
             {
-              log.debug("Start process from signal: " + signal);
-              ExecutionManager exManager = ExecutionManager.locateExecutionManager();
-              RuntimeProcess rtProc = exManager.getRuntimeProcess(start.getProcess().getID());
-              TokenExecutor tokenExecutor = rtProc.getTokenExecutor();
-              TokenImpl token = new TokenImpl(null);
-              tokenExecutor.create(token, getOutFlow());
-              tokenExecutor.start(token);
+              log.debug("catchSignal: " + signal);
+              if (proc.getProcessStatus() == ProcessStatus.Active)
+              {
+                log.debug("Start process from signal: " + signal);
+                ExecutionManager exManager = ExecutionManager.locateExecutionManager();
+                RuntimeProcess rtProc = exManager.getRuntimeProcess(start.getProcess().getID());
+                TokenExecutor tokenExecutor = rtProc.getTokenExecutor();
+                TokenImpl token = new TokenImpl(null);
+                tokenExecutor.create(token, getOutFlow());
+                tokenExecutor.start(token);
+              }
+              else
+              {
+                log.debug("Ignore start signal for process: " + proc);
+              }
             }
-            else
-            {
-              log.debug("Ignore start signal for process: " + proc);
-            }
           }
-        }
-        
-        public String toString()
-        {
-          return start + "." + startSignal;
-        }
-      };
-      SignalManager signalManager = SignalManager.locateSignalManager();
-      signalManager.addSignalListener(getProcess().getName(), listener);
+          
+          public String toString()
+          {
+            return start + "." + startSignal;
+          }
+        };
+        SignalManager signalManager = SignalManager.locateSignalManager();
+        signalManager.addSignalListener(getProcess().getName(), listener);
+      }
     }
   }
 

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskBuilderImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskBuilderImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskBuilderImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -23,9 +23,6 @@
 
 //$Id$
 
-import javax.management.ObjectName;
-
-import org.jboss.bpm.model.MessageBuilder;
 import org.jboss.bpm.model.Task;
 import org.jboss.bpm.model.TaskBuilder;
 
@@ -42,34 +39,8 @@
     super(proc, flowObject);
   }
 
-  @Override
-  public MessageBuilder addMessage(String name)
-  {
-    MessageBuilder msgBuilder = new MessageBuilderImpl().newMessage(name);
-    if (flowObject instanceof ReceiveTaskImpl)
-    {
-      ReceiveTaskImpl receiveTask = (ReceiveTaskImpl)flowObject;
-      receiveTask.setMessageRef(msgBuilder.getMessage());
-    }
-    else if (flowObject instanceof SendTaskImpl)
-    {
-      SendTaskImpl sendTask = (SendTaskImpl)flowObject;
-      sendTask.setMessageRef(msgBuilder.getMessage());
-    }
-    else
-    {
-      throw new IllegalStateException("Cannot add message to: " + flowObject);
-    }
-    return msgBuilder;
-  }
-
   public TaskBuilder addMessageRef(String msgName)
   {
-    return addMessageRef(msgName, null, null);
-  }
-
-  public TaskBuilder addMessageRef(String msgName, ObjectName fromID, ObjectName toID)
-  {
     MessageImpl message = new MessageImpl(msgName);
     if (flowObject instanceof ReceiveTaskImpl)
     {
@@ -78,8 +49,6 @@
     }
     else if (flowObject instanceof SendTaskImpl)
     {
-      message.setSourceID(fromID);
-      message.setTargetID(toID);
       SendTaskImpl sendTask = (SendTaskImpl)flowObject;
       sendTask.setMessageRef(message);
     }

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskImpl.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskImpl.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -22,9 +22,6 @@
 package org.jboss.bpm.model.internal;
 
 import org.jboss.bpm.client.SignalManager;
-import org.jboss.bpm.model.Message;
-import org.jboss.bpm.model.Process;
-import org.jboss.bpm.model.Property;
 import org.jboss.bpm.model.Signal;
 import org.jboss.bpm.model.Task;
 import org.jboss.bpm.runtime.SignalHandler;
@@ -83,21 +80,4 @@
   {
     return "Task[" + getTaskType() + "," + getName() + "]";
   }
-
-  protected void initializeMessageRef(Process proc, Message msg)
-  {
-    String msgName = msg.getName();
-    MessageImpl procMsg = (MessageImpl)proc.getMessage(msgName);
-    if (procMsg != null)
-    {
-      MessageImpl msgImpl = (MessageImpl)msg;
-      if (msgImpl.getSourceID() == null && procMsg.getSourceID() != null)
-        msgImpl.setSourceID(procMsg.getSourceID());
-      if (msgImpl.getTargetID() == null && procMsg.getTargetID() != null)
-        msgImpl.setTargetID(procMsg.getTargetID());
-
-      for (Property prop : procMsg.getProperties())
-        ((MessageImpl)msg).addProperty(prop);
-    }
-  }
 }
\ No newline at end of file

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/runtime/internal/DelegatingExecutionContext.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/runtime/internal/DelegatingExecutionContext.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/runtime/internal/DelegatingExecutionContext.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -81,7 +81,7 @@
         Property prop = activity.getProperty(key);
         if (prop != null)
         {
-          value = prop.getValue().getExpressionBody();
+          value = prop.getValue();
         }
       }
       
@@ -92,7 +92,7 @@
         Property prop = proc.getProperty(key);
         if (prop != null)
         {
-          value = prop.getValue().getExpressionBody();
+          value = prop.getValue();
         }
       }
     }

Modified: jbossbpm/spec/trunk/modules/testsuite/pom.xml
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/pom.xml	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/testsuite/pom.xml	2008-08-16 14:50:11 UTC (rev 1908)
@@ -132,6 +132,13 @@
           <plugin>
             <artifactId>maven-surefire-plugin</artifactId>
             <configuration>
+              <excludes>
+                <exclude>org/jboss/bpm/cts/**/*MarshallerTest.java</exclude>
+                <exclude>org/jboss/bpm/cts/**/*APITest.java</exclude>
+                <exclude>org/jboss/bpm/cts/**/*STPTest.java</exclude>
+                <!-- http://jira.codehaus.org/browse/SUREFIRE-515 -->
+                <exclude>org/jboss/bpm/cts/**/*Task?.java</exclude>
+              </excludes>
               <includes>
                 <include>org/jboss/bpm/cts/**</include>
               </includes>
@@ -152,6 +159,13 @@
           <plugin>
             <artifactId>maven-surefire-plugin</artifactId>
             <configuration>
+              <excludes>
+                <exclude>org/jboss/bpm/pattern/**/*MarshallerTest.java</exclude>
+                <exclude>org/jboss/bpm/pattern/**/*APITest.java</exclude>
+                <exclude>org/jboss/bpm/pattern/**/*STPTest.java</exclude>
+                <!-- http://jira.codehaus.org/browse/SUREFIRE-515 -->
+                <exclude>org/jboss/bpm/pattern/**/*Task?.java</exclude>
+              </excludes>
               <includes>
                 <include>org/jboss/bpm/pattern/**</include>
               </includes>

Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/activity/ActivityPropertyMarshallerTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/activity/ActivityPropertyMarshallerTest.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/activity/ActivityPropertyMarshallerTest.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -43,7 +43,7 @@
     
     // Marshall the process to a string
     String procXML = marshallProcess(proc);
-
+    
     // Recreate the process from the marshalled process
     ProcessManager procManager = ProcessManager.locateProcessManager();
     proc = procManager.createProcess(procXML);

Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/activity/ActivityPropertyTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/activity/ActivityPropertyTest.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/activity/ActivityPropertyTest.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -26,10 +26,14 @@
 import java.io.IOException;
 import java.util.Collection;
 
-import org.jboss.bpm.model.ActivityBuilder;
+import org.jboss.bpm.model.Message;
+import org.jboss.bpm.model.MessageBuilder;
 import org.jboss.bpm.model.Process;
 import org.jboss.bpm.model.ProcessBuilder;
 import org.jboss.bpm.model.ProcessBuilderFactory;
+import org.jboss.bpm.model.Property;
+import org.jboss.bpm.model.TaskBuilder;
+import org.jboss.bpm.model.EventDetail.EventDetailType;
 import org.jboss.bpm.runtime.ExecutionContext;
 import org.jboss.bpm.runtime.ExecutionHandler;
 import org.jboss.bpm.runtime.Token;
@@ -48,16 +52,21 @@
  */
 public class ActivityPropertyTest extends DefaultEngineTestCase
 {
-  public void testActivityProperties() throws Exception
+  @SuppressWarnings("unchecked")
+  public void testActivityPropertyRead() throws Exception
   {
     Process proc = getProcess();
     proc.startProcess();
     proc.waitForEnd();
     
-    assertEquals("bar", TaskA.attValue);
+    Message endMessage = getMessages().get(0);
+    assertNotNull("EndMessage expected", endMessage);
+    assertEquals("bar", endMessage.getPropertyValue("foo"));
     
-    assertEquals(1, TaskA.attKeys.size());
-    Key key = TaskA.attKeys.iterator().next();
+    Property prop = endMessage.getProperty("attKeys");
+    Collection<Key> attKeys = prop.getValue(Collection.class);
+    assertEquals(1, attKeys.size());
+    Key key = attKeys.iterator().next();
     assertEquals("ActivityProperties.TaskA.foo", key.getNamePart());
   }
 
@@ -65,9 +74,11 @@
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
     procBuilder.addProcess("ActivityProperties").addStartEvent("Start").addSequenceFlow("TaskA");
-    ActivityBuilder activityBuilder = procBuilder.addTask("TaskA").addExecutionHandler(TaskA.class);
-    activityBuilder.addProperty("foo", "bar");
-    procBuilder.addSequenceFlow("End").addEndEvent("End");
+    MessageBuilder msgBuilder = procBuilder.addMessage("EndMessage");
+    msgBuilder.addToRef(getMessageListenerID()).addProperty("foo", null, true).addProperty("attKeys", null, true);
+    TaskBuilder taskBuilder = procBuilder.addTask("TaskA").addExecutionHandler(TaskA.class);
+    taskBuilder.addProperty("foo", "bar").addSequenceFlow("End");
+    procBuilder.addEndEvent("End").addEventDetail(EventDetailType.Message).addMessageRef("EndMessage");
     Process proc = procBuilder.getProcess();
     return proc;
   }
@@ -75,13 +86,13 @@
   @SuppressWarnings("serial")
   public static class TaskA implements ExecutionHandler
   {
-    static Object attValue;
-    static Collection<Key> attKeys;
     public void execute(Token token)
     {
       ExecutionContext exContext = token.getExecutionContext();
-      attValue = exContext.getAttachment("ActivityProperties.TaskA.foo");
-      attKeys = exContext.getAttachmentKeys();
+      Object attValue = exContext.getAttachment("ActivityProperties.TaskA.foo");
+      Collection<Key> attKeys = exContext.getAttachmentKeys();
+      exContext.addAttachment("foo", attValue);
+      exContext.addAttachment("attKeys", attKeys);
     }
   }
 }

Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -32,6 +32,7 @@
 import org.jboss.bpm.model.ProcessBuilder;
 import org.jboss.bpm.model.ProcessBuilderFactory;
 import org.jboss.bpm.model.Signal;
+import org.jboss.bpm.model.EventDetail.EventDetailType;
 import org.jboss.bpm.model.Gateway.GatewayType;
 import org.jboss.bpm.model.Signal.SignalType;
 import org.jboss.bpm.runtime.ExecutionContext;
@@ -133,10 +134,10 @@
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
     EventBuilder eventBuilder = procBuilder.addProcess(getName()).addStartEvent("StartA");
-    eventBuilder.addSignalTrigger(SignalType.SYSTEM_START_TRIGGER, "A").addSequenceFlow("TaskA");
+    eventBuilder.addEventDetail(EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A").addSequenceFlow("TaskA");
     procBuilder.addTask("TaskA").addExecutionHandler(TaskA.class).addSequenceFlow("Merge");
     eventBuilder = procBuilder.addStartEvent("StartB");
-    eventBuilder.addSignalTrigger(SignalType.SYSTEM_START_TRIGGER, "B").addSequenceFlow("TaskB");
+    eventBuilder.addEventDetail(EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "B").addSequenceFlow("TaskB");
     procBuilder.addTask("TaskB").addExecutionHandler(TaskB.class).addSequenceFlow("Merge");
     procBuilder.addGateway("Merge", GatewayType.Exclusive).addSequenceFlow("TaskC");
     procBuilder.addTask("TaskC").addExecutionHandler(TaskC.class).addSequenceFlow("End");

Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveGatewayMergeTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveGatewayMergeTest.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveGatewayMergeTest.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -33,6 +33,7 @@
 import org.jboss.bpm.model.ProcessBuilder;
 import org.jboss.bpm.model.ProcessBuilderFactory;
 import org.jboss.bpm.model.Signal;
+import org.jboss.bpm.model.EventDetail.EventDetailType;
 import org.jboss.bpm.model.Gateway.GatewayType;
 import org.jboss.bpm.model.Signal.SignalType;
 import org.jboss.bpm.test.DefaultEngineTestCase;
@@ -71,9 +72,9 @@
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
     EventBuilder eventBuilder = procBuilder.addProcess(getName()).addStartEvent("StartA");
-    eventBuilder.addSignalTrigger(SignalType.SYSTEM_START_TRIGGER, "A").addSequenceFlow("Merge");
+    eventBuilder.addEventDetail(EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A").addSequenceFlow("Merge");
     eventBuilder = procBuilder.addStartEvent("StartB");
-    eventBuilder.addSignalTrigger(SignalType.SYSTEM_START_TRIGGER, "B").addSequenceFlow("Merge");
+    eventBuilder.addEventDetail(EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "B").addSequenceFlow("Merge");
     procBuilder.addGateway("Merge", GatewayType.Inclusive).addSequenceFlow("End");
     procBuilder.addEndEvent("End");
     Process proc = procBuilder.getProcess();

Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelGatewayMergeTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelGatewayMergeTest.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelGatewayMergeTest.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -32,6 +32,7 @@
 import org.jboss.bpm.model.ProcessBuilder;
 import org.jboss.bpm.model.ProcessBuilderFactory;
 import org.jboss.bpm.model.Signal;
+import org.jboss.bpm.model.EventDetail.EventDetailType;
 import org.jboss.bpm.model.Gateway.GatewayType;
 import org.jboss.bpm.model.Signal.SignalType;
 import org.jboss.bpm.runtime.ExecutionContext;
@@ -134,10 +135,10 @@
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
     EventBuilder eventBuilder = procBuilder.addProcess(getName()).addStartEvent("StartA");
-    eventBuilder.addSignalTrigger(SignalType.SYSTEM_START_TRIGGER, "A").addSequenceFlow("TaskA");
+    eventBuilder.addEventDetail(EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A").addSequenceFlow("TaskA");
     procBuilder.addTask("TaskA").addExecutionHandler(TaskA.class).addSequenceFlow("Merge");
     eventBuilder = procBuilder.addStartEvent("StartB");
-    eventBuilder.addSignalTrigger(SignalType.SYSTEM_START_TRIGGER, "B").addSequenceFlow("TaskB");
+    eventBuilder.addEventDetail(EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "B").addSequenceFlow("TaskB");
     procBuilder.addTask("TaskB").addExecutionHandler(TaskB.class).addSequenceFlow("Merge");
     procBuilder.addGateway("Merge", GatewayType.Parallel).addSequenceFlow("TaskC");
     procBuilder.addTask("TaskC").addExecutionHandler(TaskC.class).addSequenceFlow("End");

Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/simplemerge/SimpleMergeTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/simplemerge/SimpleMergeTest.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/simplemerge/SimpleMergeTest.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -33,6 +33,7 @@
 import org.jboss.bpm.model.ProcessBuilder;
 import org.jboss.bpm.model.ProcessBuilderFactory;
 import org.jboss.bpm.model.Signal;
+import org.jboss.bpm.model.EventDetail.EventDetailType;
 import org.jboss.bpm.model.Gateway.GatewayType;
 import org.jboss.bpm.model.Signal.SignalType;
 import org.jboss.bpm.test.DefaultEngineTestCase;
@@ -71,10 +72,10 @@
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
     EventBuilder eventBuilder = procBuilder.addProcess(getName()).addStartEvent("StartA");
-    eventBuilder.addSignalTrigger(SignalType.SYSTEM_START_TRIGGER, "A").addSequenceFlow("Merge");
-    eventBuilder = procBuilder.addStartEvent("StartB");
-    eventBuilder.addSignalTrigger(SignalType.SYSTEM_START_TRIGGER, "B").addSequenceFlow("Merge");
-    procBuilder.addGateway("Merge", GatewayType.Inclusive).addSequenceFlow("End");
+    eventBuilder.addEventDetail(EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A");
+    eventBuilder = procBuilder.addSequenceFlow("Merge").addStartEvent("StartB");
+    eventBuilder.addEventDetail(EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "B");
+    procBuilder.addSequenceFlow("Merge").addGateway("Merge", GatewayType.Inclusive).addSequenceFlow("End");
     procBuilder.addEndEvent("End");
     Process proc = procBuilder.getProcess();
     return proc;

Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/synchronization/SynchronizationTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/synchronization/SynchronizationTest.java	2008-08-16 09:20:28 UTC (rev 1907)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/pattern/control/synchronization/SynchronizationTest.java	2008-08-16 14:50:11 UTC (rev 1908)
@@ -32,6 +32,7 @@
 import org.jboss.bpm.model.ProcessBuilder;
 import org.jboss.bpm.model.ProcessBuilderFactory;
 import org.jboss.bpm.model.Signal;
+import org.jboss.bpm.model.EventDetail.EventDetailType;
 import org.jboss.bpm.model.Gateway.GatewayType;
 import org.jboss.bpm.model.Signal.SignalType;
 import org.jboss.bpm.runtime.ExecutionContext;
@@ -134,10 +135,10 @@
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
     EventBuilder eventBuilder = procBuilder.addProcess(getName()).addStartEvent("StartA");
-    eventBuilder.addSignalTrigger(SignalType.SYSTEM_START_TRIGGER, "A").addSequenceFlow("TaskA");
+    eventBuilder.addEventDetail(EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "A").addSequenceFlow("TaskA");
     procBuilder.addTask("TaskA").addExecutionHandler(TaskA.class).addSequenceFlow("Merge");
     eventBuilder = procBuilder.addStartEvent("StartB");
-    eventBuilder.addSignalTrigger(SignalType.SYSTEM_START_TRIGGER, "B").addSequenceFlow("TaskB");
+    eventBuilder.addEventDetail(EventDetailType.Signal).addSignalRef(SignalType.SYSTEM_START_TRIGGER, "B").addSequenceFlow("TaskB");
     procBuilder.addTask("TaskB").addExecutionHandler(TaskB.class).addSequenceFlow("Merge");
     procBuilder.addGateway("Merge", GatewayType.Parallel).addSequenceFlow("TaskC");
     procBuilder.addTask("TaskC").addExecutionHandler(TaskC.class).addSequenceFlow("End");




More information about the jbpm-commits mailing list