[jbpm-commits] JBoss JBPM SVN: r2455 - in projects/spec/trunk/modules: cts and 3 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Sep 30 17:15:37 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-09-30 17:15:37 -0400 (Tue, 30 Sep 2008)
New Revision: 2455

Added:
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/BasicNodeHandler.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/NodeHandler.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskExecutionHandler.java
Modified:
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/ExecutionHandler.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/FlowHandler.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/SignalHandler.java
   projects/spec/trunk/modules/cts/pom.xml
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/TaskExecutionHandlerTest.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EndEventImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EventImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/StartEventImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/TaskImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/EventBuilderImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java
Log:
SendTaskTest - pass

Added: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/BasicNodeHandler.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/BasicNodeHandler.java	                        (rev 0)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/BasicNodeHandler.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -0,0 +1,49 @@
+/*
+ * 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.jbpm.api.runtime;
+
+import org.jbpm.api.model.Node;
+
+/**
+ * A handler that is associated with a node
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 30-Sep-2008
+ */
+public abstract class BasicNodeHandler implements NodeHandler
+{
+  private static final long serialVersionUID = 1L;
+  
+  private Node node;
+
+  @Override
+  public Node getNode()
+  {
+    return node;
+  }
+
+  @Override
+  public void setNode(Node node)
+  {
+    this.node = node;
+  }
+}
\ No newline at end of file


Property changes on: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/BasicNodeHandler.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/ExecutionHandler.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/ExecutionHandler.java	2008-09-30 20:18:43 UTC (rev 2454)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/ExecutionHandler.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -21,10 +21,9 @@
  */
 package org.jbpm.api.runtime;
 
-import java.io.Serializable;
-
 //$Id$
 
+import org.jbpm.api.model.Node;
 
 /**
  * The ProcessEngine invokes the ExecutionHandler on a 
@@ -33,7 +32,7 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface ExecutionHandler extends Serializable
+public interface ExecutionHandler extends NodeHandler
 {
   /**
    * Execute the associated business logic.

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/FlowHandler.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/FlowHandler.java	2008-09-30 20:18:43 UTC (rev 2454)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/FlowHandler.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -23,8 +23,6 @@
 
 // $Id$
 
-import java.io.Serializable;
-
 import org.jbpm.api.client.ProcessEngine;
 import org.jbpm.api.model.Node;
 
@@ -35,7 +33,7 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface FlowHandler extends Serializable
+public interface FlowHandler extends NodeHandler
 {
   /**
    * Execute the FlowHandler.

Added: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/NodeHandler.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/NodeHandler.java	                        (rev 0)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/NodeHandler.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -0,0 +1,47 @@
+/*
+ * 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.jbpm.api.runtime;
+
+import java.io.Serializable;
+
+//$Id$
+
+import org.jbpm.api.model.Node;
+
+/**
+ * A handler that is associated with a node 
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 30-Sep-2008
+ */
+public interface NodeHandler extends Serializable
+{
+  /**
+   * Get the associated node.
+   */
+  Node getNode();
+  
+  /**
+   * Set the associated node.
+   */
+  void setNode(Node node);
+}
\ No newline at end of file


Property changes on: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/NodeHandler.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/SignalHandler.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/SignalHandler.java	2008-09-30 20:18:43 UTC (rev 2454)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/runtime/SignalHandler.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -23,8 +23,6 @@
 
 // $Id$
 
-import java.io.Serializable;
-
 import org.jbpm.api.client.ProcessEngine;
 import org.jbpm.api.model.Node;
 import org.jbpm.api.model.Signal;
@@ -36,7 +34,7 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
-public interface SignalHandler extends Serializable
+public interface SignalHandler extends NodeHandler
 {
   /** 
    * Get signal for enter 

Modified: projects/spec/trunk/modules/cts/pom.xml
===================================================================
--- projects/spec/trunk/modules/cts/pom.xml	2008-09-30 20:18:43 UTC (rev 2454)
+++ projects/spec/trunk/modules/cts/pom.xml	2008-09-30 21:15:37 UTC (rev 2455)
@@ -79,8 +79,6 @@
             <exclude>org/jbpm/test/cts/node/NodeInputSetTest.java</exclude>
             <exclude>org/jbpm/test/cts/node/NodeOutputSetTest.java</exclude>
             <exclude>org/jbpm/test/cts/task/ReceiveTaskTest.java</exclude>
-            <exclude>org/jbpm/test/cts/task/SendTaskTest.java</exclude>
-            <exclude>org/jbpm/test/cts/task/TaskExecutionHandlerTest.java</exclude>
             <exclude>org/jbpm/test/pattern/control/exclusivechoice/ExclusiveChoiceTest.java</exclude>
             <exclude>org/jbpm/test/pattern/control/multichoice/MultiChoiceTest.java</exclude>
             <exclude>org/jbpm/test/pattern/control/parallelsplit/ParallelSplitTest.java</exclude>

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/TaskExecutionHandlerTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/TaskExecutionHandlerTest.java	2008-09-30 20:18:43 UTC (rev 2454)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/TaskExecutionHandlerTest.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -25,10 +25,13 @@
 
 import java.io.IOException;
 
+import org.jbpm.api.model.Assignment;
 import org.jbpm.api.model.Process;
+import org.jbpm.api.model.Expression.ExpressionLanguage;
 import org.jbpm.api.model.builder.ProcessBuilder;
 import org.jbpm.api.model.builder.ProcessBuilderService;
 import org.jbpm.api.model.builder.TaskBuilder;
+import org.jbpm.api.runtime.BasicNodeHandler;
 import org.jbpm.api.runtime.ExecutionContext;
 import org.jbpm.api.runtime.ExecutionHandler;
 import org.jbpm.api.runtime.Token;
@@ -58,17 +61,17 @@
   {
     ProcessBuilder procBuilder = ProcessBuilderService.locateProcessBuilder();
     procBuilder.addProcess("TaskExecutionHandlerTest").addProcessProperty("procProp", "kermit");
-    //procBuilder.addAssignment(Assignment.AssignTime.Start, Expression.ExpressionLanguage.MVEL, "TaskExecutionHandlerTest_procProp == 'kermit'", "procAssign");
+    procBuilder.addProcessAssignment(Assignment.AssignTime.Start, ExpressionLanguage.MVEL, "TaskExecutionHandlerTest_procProp == 'kermit'", "procAssign");
     procBuilder.addStartEvent("Start").addSequenceFlow("TaskA");
     TaskBuilder taskBuilder = procBuilder.addTask("TaskA");
-    taskBuilder.addProcessProperty("taskProp", "piggy").addExecutionHandler(TaskExecutionHandler.class).addSequenceFlow("End");
-    //taskBuilder.addAssignment(Assignment.AssignTime.Start, Expression.ExpressionLanguage.MVEL, "TaskExecutionHandlerTest_TaskA_taskProp == 'piggy'", "taskAssign");
+    taskBuilder.addNodeProperty("taskProp", "piggy").addExecutionHandler(TaskExecutionHandler.class).addSequenceFlow("End");
+    taskBuilder.addNodeAssignment(Assignment.AssignTime.Start, ExpressionLanguage.MVEL, "TaskExecutionHandlerTest_TaskA_taskProp == 'piggy'", "taskAssign");
     procBuilder.addEndEvent("End");
     return procBuilder.getProcess();
   }
 
   @SuppressWarnings("serial")
-  public static class TaskExecutionHandler implements ExecutionHandler
+  public static class TaskExecutionHandler extends BasicNodeHandler implements ExecutionHandler
   {
     static String procProp;
     static String taskProp;
@@ -82,6 +85,7 @@
      * - Activity properties
      * - The result of start time activity assignments
      */
+    @Override
     public void execute(Token token)
     {
       ExecutionContext exContext = token.getExecutionContext();

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EndEventImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EndEventImpl.java	2008-09-30 20:18:43 UTC (rev 2454)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EndEventImpl.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -31,6 +31,7 @@
 import org.jbpm.api.InvalidProcessException;
 import org.jbpm.api.client.ProcessEngine;
 import org.jbpm.api.model.EndEvent;
+import org.jbpm.api.model.Node;
 import org.jbpm.api.model.SequenceFlow;
 import org.jbpm.api.model.Signal;
 import org.jbpm.api.model.builder.ObjectNameFactory;
@@ -110,6 +111,7 @@
   @Override
   protected SignalHandler getDefaultSignalHandler()
   {
+    final Node thisNode = this;
     return new SignalHandler()
     {
       private static final long serialVersionUID = 1L;
@@ -132,12 +134,24 @@
         EndSignalCallback callback = exContext.removeAttachment(EndSignalCallback.class);
         callback.destroyToken(token);
       }
+
+      @Override
+      public Node getNode()
+      {
+        return thisNode;
+      }
+
+      @Override
+      public void setNode(Node node)
+      {
+      }
     };
   }
   
   @Override
   protected FlowHandler getDefaultFlowHandler()
   {
+    final Node thisNode = this;
     return new FlowHandler()
     {
       private static final long serialVersionUID = 1L;
@@ -148,6 +162,17 @@
         ExecutionContext exContext = token.getExecutionContext();
         exContext.addAttachment(EndSignalCallback.class, new EndSignalCallback(tokenExecutor));
       }
+
+      @Override
+      public Node getNode()
+      {
+        return thisNode;
+      }
+
+      @Override
+      public void setNode(Node node)
+      {
+      }
     };
   }
 

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EventImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EventImpl.java	2008-09-30 20:18:43 UTC (rev 2454)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/EventImpl.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -131,12 +131,24 @@
           messageSender.sendMessage(token);
         }
       }
+
+      @Override
+      public Node getNode()
+      {
+        return thisNode;
+      }
+
+      @Override
+      public void setNode(Node node)
+      {
+      }
     };
   }
 
   @Override
   protected SignalHandler getDefaultSignalHandler()
   {
+    final Node thisNode = this;
     return new SignalHandler()
     {
       private static final long serialVersionUID = 1L;
@@ -154,6 +166,17 @@
         Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_EVENT_EXIT);
         sigService.throwSignal(signal);
       }
+
+      @Override
+      public Node getNode()
+      {
+        return thisNode;
+      }
+
+      @Override
+      public void setNode(Node node)
+      {
+      }
     };
   }
 

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java	2008-09-30 20:18:43 UTC (rev 2454)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -51,6 +51,7 @@
 import org.jbpm.api.model.StartEvent;
 import org.jbpm.api.runtime.ExecutionHandler;
 import org.jbpm.api.runtime.FlowHandler;
+import org.jbpm.api.runtime.NodeHandler;
 import org.jbpm.api.runtime.SignalHandler;
 import org.jbpm.api.runtime.Token;
 import org.jbpm.api.runtime.TokenExecutor;
@@ -231,6 +232,7 @@
 
   protected ExecutionHandler getDefaultExecutionHandler()
   {
+    final Node thisNode = this;
     return new ExecutionHandler()
     {
       private static final long serialVersionUID = 1L;
@@ -239,6 +241,17 @@
       {
         // nothing to do
       }
+      
+      @Override
+      public Node getNode()
+      {
+        return thisNode;
+      }
+
+      @Override
+      public void setNode(Node node)
+      {
+      }
     };
   }
 
@@ -285,11 +298,22 @@
           throw new IllegalStateException("Cannot use default flow handler on " + thisNode + " with: " + getOutFlows());
         }
       }
+
+      @Override
+      public Node getNode()
+      {
+        return thisNode;
+      }
+
+      @Override
+      public void setNode(Node node)
+      {
+      }
     };
   }
 
   @SuppressWarnings("unchecked")
-  private <T> T loadHandlerInstance(Class<T> clazz, String className)
+  private <T extends NodeHandler> T loadHandlerInstance(Class<T> clazz, String className)
   {
     T handler = null;
     if (className != null)
@@ -298,6 +322,7 @@
       {
         ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader();
         handler = (T)ctxLoader.loadClass(className).newInstance();
+        handler.setNode(this);
       }
       catch (Exception ex)
       {

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskExecutionHandler.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskExecutionHandler.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskExecutionHandler.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -0,0 +1,56 @@
+/*
+ * 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.jbpm.ri.model;
+
+//$Id$
+
+import org.jbpm.api.model.Message;
+import org.jbpm.api.runtime.BasicNodeHandler;
+import org.jbpm.api.runtime.ExecutionHandler;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.ri.runtime.MessageSender;
+
+/**
+ * An ExecutionHandler that sends a Message
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 30-Sep-2008
+ */
+public class SendTaskExecutionHandler extends BasicNodeHandler implements ExecutionHandler
+{
+  private static final long serialVersionUID = 1L;
+
+  public SendTaskExecutionHandler(TaskImpl taskImpl)
+  {
+    setNode(taskImpl);
+  }
+
+  @Override
+  public void execute(Token token)
+  {
+    TaskImpl taskImpl = (TaskImpl)getNode();
+    Message messageRef = taskImpl.getMessageRef();
+    MessageSender messageSender = new MessageSender(taskImpl, messageRef);
+    messageSender.sendMessage(token);
+  }
+
+}
\ No newline at end of file


Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskExecutionHandler.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/StartEventImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/StartEventImpl.java	2008-09-30 20:18:43 UTC (rev 2454)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/StartEventImpl.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -31,6 +31,7 @@
 import org.jbpm.api.InvalidProcessException;
 import org.jbpm.api.client.ProcessEngine;
 import org.jbpm.api.client.SignalListener;
+import org.jbpm.api.model.Node;
 import org.jbpm.api.model.Process;
 import org.jbpm.api.model.SequenceFlow;
 import org.jbpm.api.model.Signal;
@@ -112,6 +113,7 @@
   @Override
   protected SignalHandler getDefaultSignalHandler()
   {
+    final Node thisNode = this;
     return new SignalHandler()
     {
       private static final long serialVersionUID = 1L;
@@ -130,6 +132,17 @@
         Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_START_EVENT_EXIT);
         sigService.throwSignal(signal);
       }
+
+      @Override
+      public Node getNode()
+      {
+        return thisNode;
+      }
+
+      @Override
+      public void setNode(Node node)
+      {
+      }
     };
   }
 

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/TaskImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/TaskImpl.java	2008-09-30 20:18:43 UTC (rev 2454)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/TaskImpl.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -32,10 +32,14 @@
 import org.jbpm.api.Constants;
 import org.jbpm.api.InvalidProcessException;
 import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.Process;
 import org.jbpm.api.model.SequenceFlow;
 import org.jbpm.api.model.Signal;
 import org.jbpm.api.model.Task;
 import org.jbpm.api.model.builder.ObjectNameFactory;
+import org.jbpm.api.runtime.ExecutionHandler;
 import org.jbpm.api.runtime.SignalHandler;
 import org.jbpm.api.runtime.Token;
 import org.jbpm.api.service.SignalService;
@@ -60,9 +64,13 @@
   @Enumerated(EnumType.STRING)
   private TaskType taskType = TaskType.None;
 
-  public TaskImpl(String name)
+  @Transient
+  private MessageImpl messageRef;
+  
+  public TaskImpl(String name, TaskType taskType)
   {
     super(name);
+    this.taskType = taskType;
   }
 
   // Persistence ctor
@@ -113,9 +121,39 @@
     outFlows.add(outFlow);
   }
 
+  public Message getMessageRef()
+  {
+    return messageRef;
+  }
+
+  public void setMessageRef(MessageImpl message)
+  {
+    this.messageRef = message;
+  }
+
   @Override
+  protected ExecutionHandler getDefaultExecutionHandler()
+  {
+    ExecutionHandler execHandler;
+    if (taskType == TaskType.Send)
+    {
+      execHandler = new SendTaskExecutionHandler(this);
+    }
+    else if (taskType == TaskType.Receive)
+    {
+      execHandler = super.getDefaultExecutionHandler();
+    }
+    else
+    {
+      execHandler = super.getDefaultExecutionHandler();
+    }
+    return execHandler;
+  }
+
+  @Override
   protected SignalHandler getDefaultSignalHandler()
   {
+    final Node thisNode = this;
     return new SignalHandler()
     {
       private static final long serialVersionUID = 1L;
@@ -133,9 +171,40 @@
         Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_TASK_EXIT);
         sigService.throwSignal(signal);
       }
+
+      @Override
+      public Node getNode()
+      {
+        return thisNode;
+      }
+
+      @Override
+      public void setNode(Node node)
+      {
+      }
     };
   }
   
+  @Override
+  protected void create(Process proc)
+  {
+    super.create(proc);
+
+    if ((taskType == TaskType.Send || taskType == TaskType.Receive) && messageRef == null)
+      throw new InvalidProcessException("A message for the message ref attribute MUST be entered");
+    if (messageRef != null && taskType != TaskType.Send && taskType != TaskType.Receive)
+      throw new InvalidProcessException("A task with a message ref must be of type 'Send' or 'Receive'");
+
+    if (messageRef != null)
+    {
+      ProcessImpl procImpl = (ProcessImpl)proc;
+      procImpl.initializeMessageRef(messageRef);
+      
+      if (messageRef.getToRef() == null)
+        throw new IllegalArgumentException("Message target cannot be null for: " + this);
+    }
+  }
+  
   public String toString()
   {
     return "Task[" + getTaskType() + "," + getName() + "]";

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/EventBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/EventBuilderImpl.java	2008-09-30 20:18:43 UTC (rev 2454)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/EventBuilderImpl.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -59,7 +59,7 @@
   
   private EventImpl getEvent()
   {
-    if (node instanceof Event == false)
+    if (node instanceof EventImpl == false)
       throw new IllegalStateException("Last added flow object is not an Event: " + node);
     return (EventImpl)node;
   }

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java	2008-09-30 20:18:43 UTC (rev 2454)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -150,7 +150,7 @@
   {
     if (type == TaskType.None || type == null)
     {
-      node = new TaskImpl(name);
+      node = new TaskImpl(name, TaskType.None);
     }
     else if (type == TaskType.Service)
     {
@@ -158,11 +158,11 @@
     }
     else if (type == TaskType.Receive)
     {
-      throw new NotImplementedException();
+      node = new TaskImpl(name, TaskType.Receive);
     }
     else if (type == TaskType.Send)
     {
-      throw new NotImplementedException();
+      node = new TaskImpl(name, TaskType.Send);
     }
     else if (type == TaskType.User)
     {

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java	2008-09-30 20:18:43 UTC (rev 2454)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java	2008-09-30 21:15:37 UTC (rev 2455)
@@ -23,9 +23,10 @@
 
 //$Id$
 
-import org.jbpm.api.NotImplementedException;
 import org.jbpm.api.model.Task;
 import org.jbpm.api.model.builder.TaskBuilder;
+import org.jbpm.ri.model.MessageImpl;
+import org.jbpm.ri.model.TaskImpl;
 
 /**
  * The TaskBuilder can be used to dynamically build {@link Task}.
@@ -42,7 +43,15 @@
 
   public TaskBuilder addMessageRef(String msgName)
   {
-    throw new NotImplementedException();
+    TaskImpl taskImpl = getTask();
+    taskImpl.setMessageRef(new MessageImpl(msgName));
+    return this;
   }
 
+  private TaskImpl getTask()
+  {
+    if (node instanceof TaskImpl == false)
+      throw new IllegalStateException("Last added node is not an Task: " + node);
+    return (TaskImpl)node;
+  }
 }
\ No newline at end of file




More information about the jbpm-commits mailing list