[jbpm-commits] JBoss JBPM SVN: r2456 - in projects/spec/trunk/modules: api/src/main/java/org/jbpm/api/service and 7 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Sep 30 23:42:58 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-09-30 23:42:57 -0400 (Tue, 30 Sep 2008)
New Revision: 2456

Added:
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java
Removed:
   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/client/MessageListener.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageService.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java
   projects/spec/trunk/modules/cts/pom.xml
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/MessageImpl.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/ProcessBuilderImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java
   projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml
Log:
ReceiveTaskTest - pass

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/MessageListener.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/MessageListener.java	2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/MessageListener.java	2008-10-01 03:42:57 UTC (rev 2456)
@@ -38,7 +38,7 @@
   /**
    * Get the id for this listener
    */
-  ObjectName getID();
+  ObjectName getKey();
   
   /** 
    * Catch a message from the process that this listener is registered with 

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageService.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageService.java	2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageService.java	2008-10-01 03:42:57 UTC (rev 2456)
@@ -75,11 +75,11 @@
   {
     synchronized (listeners)
     {
-      if (hasMessageListener(listener.getID()))
-        throw new IllegalStateException("Listener already registered: " + listener.getID());
+      if (hasMessageListener(listener.getKey()))
+        throw new IllegalStateException("Listener already registered: " + listener.getKey());
 
-      log.debug("addMessageListener: " + listener.getID());
-      listeners.put(listener.getID(), listener);
+      log.debug("addMessageListener: " + listener.getKey());
+      listeners.put(listener.getKey(), listener);
     }
   }
 

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java	2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessService.java	2008-10-01 03:42:57 UTC (rev 2456)
@@ -103,13 +103,19 @@
    */
   public boolean unregisterProcess(Process proc)
   {
-    log.debug("unregisterProcess: " + proc);
-    
-    // Delete the process through the PersistenceService
-    PersistenceService dbService = getProcessEngine().getService(PersistenceService.class);
-    dbService.deleteProcess(proc);
-    
-    return registeredProcs.remove(proc.getKey()) != null;
+    boolean removed = false;
+    if (registeredProcs.containsKey(proc.getKey()))
+    {
+      log.debug("unregisterProcess: " + proc);
+      
+      // Delete the process through the PersistenceService
+      PersistenceService dbService = getProcessEngine().getService(PersistenceService.class);
+      dbService.deleteProcess(proc);
+      
+      registeredProcs.remove(proc.getKey());
+      removed = true;
+    }
+    return removed;
   }
 
   /**

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java	2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java	2008-10-01 03:42:57 UTC (rev 2456)
@@ -67,8 +67,6 @@
   private MessageListener messageListener;
   // The messages caught by this test case
   private List<Message> messages = new ArrayList<Message>();
-  // The last fatal tear down error
-  private static String fatalTearDownError;
   
   protected ProcessEngine getProcessEngine()
   {
@@ -83,10 +81,6 @@
     
     ProcessEngine engine = getProcessEngine();
     
-    // Stop the test run if there are fatal tear down errors
-    if (fatalTearDownError != null)
-      System.exit(1);
-    
     // Setup the SignalListener
     clearAllSignalListeners();
     SignalService sigService = engine.getService(SignalService.class);
@@ -120,27 +114,27 @@
     Set<Process> procs = procManager.getProcesses();
     if (procs.size() > 0)
     {
-      fatalTearDownError = "Registered processes on tear down of " + getName() + ": " + procs;
-      System.out.println(fatalTearDownError);
-      log.error(fatalTearDownError);
+      String logMsg = "Registered processes on tear down of " + getName() + ": " + procs;
+      System.out.println(logMsg);
+      log.error(logMsg);
     }
 
     // Check that there are no registered signal listeners left
     Set<SignalListener> sigListeners = sigService.getSignalListeners();
     if (sigListeners.size() > 0)
     {
-      fatalTearDownError = "Registered signal listeners on tear down of " + getName() + ": " + sigListeners;
-      System.out.println(fatalTearDownError);
-      log.error(fatalTearDownError);
+      String logMsg = "Registered signal listeners on tear down of " + getName() + ": " + sigListeners;
+      System.out.println(logMsg);
+      log.error(logMsg);
     }
     
     // Check that there are no registered message listeners left
     Set<MessageListener> msgListeners = msgService.getMessageListeners();
     if (msgListeners.size() > 0)
     {
-      fatalTearDownError = "Registered message listeners on tear down of " + getName() + ": " + msgListeners;
-      System.out.println(fatalTearDownError);
-      log.error(fatalTearDownError);
+      String logMsg = "Registered message listeners on tear down of " + getName() + ": " + msgListeners;
+      System.out.println(logMsg);
+      log.error(logMsg);
     }
 
     super.tearDown();
@@ -223,7 +217,7 @@
     Set<MessageListener> msgListeners = msgService.getMessageListeners();
     for (MessageListener msgListener : msgListeners)
     {
-      msgService.removeMessageListener(msgListener.getID());
+      msgService.removeMessageListener(msgListener.getKey());
     }
   }
 
@@ -261,7 +255,7 @@
     {
       messageListener = new MessageListener()
       {
-        public ObjectName getID()
+        public ObjectName getKey()
         {
           return getTestID();
         }

Modified: projects/spec/trunk/modules/cts/pom.xml
===================================================================
--- projects/spec/trunk/modules/cts/pom.xml	2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/cts/pom.xml	2008-10-01 03:42:57 UTC (rev 2456)
@@ -78,7 +78,6 @@
             <exclude>org/jbpm/test/cts/gateway/parallel/ParallelGatewaySplitTest.java</exclude>
             <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/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/ReceiveTaskTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java	2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java	2008-10-01 03:42:57 UTC (rev 2456)
@@ -25,6 +25,8 @@
 
 import java.io.IOException;
 
+import javax.management.ObjectName;
+
 import org.jbpm.api.InvalidProcessException;
 import org.jbpm.api.client.SignalListener;
 import org.jbpm.api.model.Message;
@@ -87,15 +89,22 @@
   {
     Process proc = getProcess();
     ProcessService procService = ProcessService.locateProcessService();
-    procService.registerProcess(proc);
+    
+    ObjectName procID = procService.registerProcess(proc);
+    try
+    {
+      // Send the message before the process is started
+      MessageService msgManager = MessageService.locateMessageService();
+      msgManager.sendMessage(procID, "TaskA", getMessage());
 
-    // Send the message before the process is started
-    MessageService msgManager = MessageService.locateMessageService();
-    msgManager.sendMessage(proc.getKey(), "TaskA", getMessage());
+      proc.startProcess();
+      proc.waitForEnd(1000);
+    }
+    finally
+    {
+      procService.unregisterProcess(proc);
+    }
 
-    proc.startProcess();
-    proc.waitForEnd();
-
     Message endMsg = getMessages().get(0);
     assertNotNull("End message expected", endMsg);
     assertEquals("bar", endMsg.getProperty("foo").getValue());
@@ -130,7 +139,7 @@
     try
     {
       proc.startProcess();
-      proc.waitForEnd();
+      proc.waitForEnd(1000);
     }
     finally
     {
@@ -152,10 +161,9 @@
   protected Process getProcess() throws IOException
   {
     ProcessBuilder procBuilder = ProcessBuilderService.locateProcessBuilder();
-    MessageBuilder msgBuilder = procBuilder.addProcess("ReceiveTaskTest").addProcessMessage("ReceiveTaskMessage");
-    msgBuilder.addProperty("foo", null, true);
-    msgBuilder = procBuilder.addProcessMessage("EndEventMessage");
-    msgBuilder.addToRef(getTestID()).addProperty("foo", null, true);
+    procBuilder.addProcess("ReceiveTaskTest");
+    procBuilder.addProcessMessage("ReceiveTaskMessage").addProperty("foo", null, true);
+    procBuilder.addProcessMessage("EndEventMessage").addToRef(getTestID()).addProperty("foo", null, true);
     procBuilder.addStartEvent("Start").addSequenceFlow("TaskA");
     procBuilder.addTask("TaskA", TaskType.Receive).addMessageRef("ReceiveTaskMessage");
     EventBuilder eventBuilder = procBuilder.addSequenceFlow("End").addEndEvent("End", EventDetailType.Message);

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/MessageImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/MessageImpl.java	2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/MessageImpl.java	2008-10-01 03:42:57 UTC (rev 2456)
@@ -27,8 +27,13 @@
 import java.util.Set;
 
 import javax.persistence.Basic;
+import javax.persistence.CascadeType;
 import javax.persistence.Entity;
-import javax.persistence.Transient;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
 
 import org.jbpm.api.model.Message;
 import org.jbpm.api.model.Participant;
@@ -47,13 +52,20 @@
 {
   private static final long serialVersionUID = 1L;
   
+  @Id @GeneratedValue
+  @SuppressWarnings("unused")
+  private int id;
+  
   @Basic
   private String name;
-  @Transient
+  
+  @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = ParticipantImpl.class)
   private Participant fromRef;
-  @Transient
+  
+  @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = ParticipantImpl.class)
   private Participant toRef;
-  @Transient
+  
+  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = PropertyImpl.class)
   private Set<Property> props = new HashSet<Property>();
 
   public MessageImpl(String name)
@@ -64,7 +76,7 @@
     this.name = name;
   }
 
-  public MessageImpl(String name, Participant targetID, Participant sourceID)
+  public MessageImpl(String name, ParticipantImpl targetID, ParticipantImpl sourceID)
   {
     this(name);
     this.toRef = targetID;

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java	2008-10-01 03:42:57 UTC (rev 2456)
@@ -0,0 +1,211 @@
+/*
+ * 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 java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+import org.jbpm.api.InvalidProcessException;
+import org.jbpm.api.NotImplementedException;
+import org.jbpm.api.client.MessageListener;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.Process;
+import org.jbpm.api.runtime.ExecutionContext;
+import org.jbpm.api.runtime.ExecutionHandler;
+import org.jbpm.api.runtime.FlowHandler;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.api.runtime.TokenExecutor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Task that corresponds to the TaskType.None
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at Entity(name = "ReceiveTask")
+public class ReceiveTaskImpl extends TaskImpl implements MessageListener
+{
+  private static final long serialVersionUID = 1L;
+
+  // provide logging
+  final static Logger log = LoggerFactory.getLogger(ReceiveTaskImpl.class);
+
+  @Transient
+  protected MessageImpl messageRef;
+
+  @Transient
+  private List<Message> receivedMessages = new ArrayList<Message>();
+
+  @Transient
+  private List<Token> suspendedTokens = new ArrayList<Token>();
+
+  public ReceiveTaskImpl(String name)
+  {
+    super(name, TaskType.Receive);
+  }
+
+  // Persistence ctor
+  protected ReceiveTaskImpl()
+  {
+  }
+
+  @Transient
+  public boolean isInstantiate()
+  {
+    throw new NotImplementedException("JBPM-1648", "ReceiveTask Instantiate");
+  }
+
+  public Message getMessageRef()
+  {
+    return messageRef;
+  }
+
+  public void setMessageRef(MessageImpl message)
+  {
+    this.messageRef = message;
+  }
+
+  public synchronized void catchMessage(Message message)
+  {
+    String msgName = message.getName();
+    if (messageRef.getName().equals(msgName))
+    {
+      log.debug("catchMessage in " + this + " => " + message);
+      for (String propName : messageRef.getPropertyNames())
+      {
+        if (message.getProperty(propName) == null)
+          throw new IllegalArgumentException("Received message does not contain expected property: " + propName);
+      }
+      receivedMessages.add(message);
+
+      if (suspendedTokens.size() == 0)
+      {
+        log.debug("Suspend message: " + message);
+      }
+      else
+      {
+        Token token = suspendedTokens.remove(0);
+        ExecutionContext exContext = token.getExecutionContext();
+        TokenExecutor tokenExecutor = exContext.removeAttachment(TokenExecutor.class);
+        tokenExecutor.activate(token.getTokenID());
+      }
+    }
+    else
+    {
+      log.debug("Ignore unexpected message: " + message);
+    }
+  }
+
+  @Override
+  protected ExecutionHandler getDefaultExecutionHandler()
+  {
+    final Node thisNode = this;
+    return new ExecutionHandler()
+    {
+      private static final long serialVersionUID = 1L;
+
+      public void execute(Token token)
+      {
+        if (receivedMessages.size() > 0)
+        {
+          // Copy the expected properties from the
+          // received message to the execution context
+          Message msg = receivedMessages.get(0);
+          ExecutionContext exContext = token.getExecutionContext();
+          for (String key : messageRef.getPropertyNames())
+          {
+            Object value = msg.getProperty(key).getValue();
+            exContext.addAttachment(key, value);
+          }
+        }
+      }
+
+      @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;
+
+      public void execute(TokenExecutor tokenExecutor, Token token)
+      {
+        if (receivedMessages.size() > 0)
+        {
+          receivedMessages.remove(0);
+          tokenExecutor.move(token, getOutFlow());
+        }
+        else
+        {
+          tokenExecutor.suspend(token);
+          ExecutionContext exContext = token.getExecutionContext();
+          exContext.addAttachment(TokenExecutor.class, tokenExecutor);
+          suspendedTokens.add(token);
+        }
+      }
+
+      @Override
+      public Node getNode()
+      {
+        return thisNode;
+      }
+
+      @Override
+      public void setNode(Node node)
+      {
+      }
+    };
+  }
+
+  @Override
+  protected void create(Process proc)
+  {
+    super.create(proc);
+
+    if (messageRef == null)
+      throw new InvalidProcessException("A message for the message ref attribute MUST be entered");
+
+    ProcessImpl procImpl = (ProcessImpl)proc;
+    procImpl.initializeMessageRef(messageRef);
+  }
+}
\ No newline at end of file


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

Deleted: 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	2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskExecutionHandler.java	2008-10-01 03:42:57 UTC (rev 2456)
@@ -1,56 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.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

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java	2008-10-01 03:42:57 UTC (rev 2456)
@@ -0,0 +1,117 @@
+/*
+ * 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 javax.persistence.Entity;
+import javax.persistence.Transient;
+
+import org.jbpm.api.InvalidProcessException;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.Process;
+import org.jbpm.api.runtime.ExecutionHandler;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.ri.runtime.MessageSender;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Task that corresponds to the TaskType.None
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at Entity(name = "SendTask")
+public class SendTaskImpl extends TaskImpl
+{
+  private static final long serialVersionUID = 1L;
+
+  // provide logging
+  final static Logger log = LoggerFactory.getLogger(SendTaskImpl.class);
+
+  @Transient
+  protected MessageImpl messageRef;
+
+  public SendTaskImpl(String name)
+  {
+    super(name, TaskType.Send);
+  }
+
+  // Persistence ctor
+  protected SendTaskImpl()
+  {
+  }
+
+  public Message getMessageRef()
+  {
+    return messageRef;
+  }
+
+  public void setMessageRef(MessageImpl message)
+  {
+    this.messageRef = message;
+  }
+
+  protected ExecutionHandler getDefaultExecutionHandler()
+  {
+    final SendTaskImpl thisNode = this;
+    return new ExecutionHandler()
+    {
+      private static final long serialVersionUID = 1L;
+
+      public void execute(Token token)
+      {
+        Message messageRef = thisNode.getMessageRef();
+        MessageSender messageSender = new MessageSender(thisNode, messageRef);
+        messageSender.sendMessage(token);
+      }
+
+      @Override
+      public Node getNode()
+      {
+        return thisNode;
+      }
+
+      @Override
+      public void setNode(Node node)
+      {
+      }
+    };
+  }
+
+  @Override
+  protected void create(Process proc)
+  {
+    super.create(proc);
+
+    if (messageRef == null)
+      throw new InvalidProcessException("A message for the message ref attribute MUST be entered");
+
+    ProcessImpl procImpl = (ProcessImpl)proc;
+    procImpl.initializeMessageRef(messageRef);
+
+    if (messageRef.getToRef() == null)
+      throw new IllegalArgumentException("Message target cannot be null for: " + this);
+  }
+}
\ No newline at end of file


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

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 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/TaskImpl.java	2008-10-01 03:42:57 UTC (rev 2456)
@@ -32,14 +32,11 @@
 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;
@@ -62,11 +59,8 @@
   private static final long serialVersionUID = 1L;
 
   @Enumerated(EnumType.STRING)
-  private TaskType taskType = TaskType.None;
+  protected TaskType taskType;
 
-  @Transient
-  private MessageImpl messageRef;
-  
   public TaskImpl(String name, TaskType taskType)
   {
     super(name);
@@ -121,36 +115,7 @@
     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;
@@ -185,26 +150,6 @@
     };
   }
   
-  @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/ProcessBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java	2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java	2008-10-01 03:42:57 UTC (rev 2456)
@@ -46,6 +46,8 @@
 import org.jbpm.ri.model.NodeImpl;
 import org.jbpm.ri.model.ProcessImpl;
 import org.jbpm.ri.model.PropertyImpl;
+import org.jbpm.ri.model.ReceiveTaskImpl;
+import org.jbpm.ri.model.SendTaskImpl;
 import org.jbpm.ri.model.SequenceFlowImpl;
 import org.jbpm.ri.model.StartEventImpl;
 import org.jbpm.ri.model.TaskImpl;
@@ -158,11 +160,11 @@
     }
     else if (type == TaskType.Receive)
     {
-      node = new TaskImpl(name, TaskType.Receive);
+      node = new ReceiveTaskImpl(name);
     }
     else if (type == TaskType.Send)
     {
-      node = new TaskImpl(name, TaskType.Send);
+      node = new SendTaskImpl(name);
     }
     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 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java	2008-10-01 03:42:57 UTC (rev 2456)
@@ -26,6 +26,8 @@
 import org.jbpm.api.model.Task;
 import org.jbpm.api.model.builder.TaskBuilder;
 import org.jbpm.ri.model.MessageImpl;
+import org.jbpm.ri.model.ReceiveTaskImpl;
+import org.jbpm.ri.model.SendTaskImpl;
 import org.jbpm.ri.model.TaskImpl;
 
 /**
@@ -44,7 +46,20 @@
   public TaskBuilder addMessageRef(String msgName)
   {
     TaskImpl taskImpl = getTask();
-    taskImpl.setMessageRef(new MessageImpl(msgName));
+    if (taskImpl instanceof ReceiveTaskImpl)
+    {
+      ReceiveTaskImpl receiveTaskImpl = (ReceiveTaskImpl)taskImpl;
+      receiveTaskImpl.setMessageRef(new MessageImpl(msgName));
+    }
+    else if (taskImpl instanceof SendTaskImpl)
+    {
+      SendTaskImpl sendTaskImpl = (SendTaskImpl)taskImpl;
+      sendTaskImpl.setMessageRef(new MessageImpl(msgName));
+    }
+    else
+    {
+      throw new IllegalStateException("Cannot set a message ref on task: " + taskImpl);
+    }
     return this;
   }
 

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java	2008-10-01 03:42:57 UTC (rev 2456)
@@ -0,0 +1,51 @@
+/*
+ * 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.service;
+
+// $Id$
+
+import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.builder.MessageBuilder;
+import org.jbpm.api.model.builder.MessageBuilderService;
+import org.jbpm.ri.model.builder.MessageBuilderImpl;
+
+/**
+ * The MessageBuilder can be used to build a {@link Message} dynamically.
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 17-Sep-2008
+ */
+public class MessageBuilderServiceImpl extends MessageBuilderService implements MutableService
+{
+  @Override
+  public void setProcessEngine(ProcessEngine engine)
+  {
+    super.setProcessEngine(engine);
+  }
+
+  @Override
+  public MessageBuilder getMessageBuilder()
+  {
+    return new MessageBuilderImpl();
+  }
+}


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

Modified: projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml
===================================================================
--- projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml	2008-09-30 21:15:37 UTC (rev 2455)
+++ projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml	2008-10-01 03:42:57 UTC (rev 2456)
@@ -10,6 +10,7 @@
         <set elementClass="org.jbpm.api.service.Service">
           <inject bean="jBPMExecutionService" />
           <inject bean="jBPMMessageService" />
+          <inject bean="jBPMMessageBuilderService" />
           <inject bean="jBPMPersistenceService" />
           <inject bean="jBPMProcessBuilderService" />
           <inject bean="jBPMProcessService" />
@@ -24,9 +25,13 @@
         <set elementClass="java.lang.String">
           <value>org.jbpm.ri.model.AbstractElementImpl</value>
           <value>org.jbpm.ri.model.EndEventImpl</value>
+          <value>org.jbpm.ri.model.MessageImpl</value>
           <value>org.jbpm.ri.model.NodeImpl</value>
+          <value>org.jbpm.ri.model.ParticipantImpl</value>
           <value>org.jbpm.ri.model.ProcessImpl</value>
           <value>org.jbpm.ri.model.PropertyImpl</value>
+          <value>org.jbpm.ri.model.ReceiveTaskImpl</value>
+          <value>org.jbpm.ri.model.SendTaskImpl</value>
           <value>org.jbpm.ri.model.SequenceFlowImpl</value>
           <value>org.jbpm.ri.model.StartEventImpl</value>
           <value>org.jbpm.ri.model.TaskImpl</value>
@@ -37,6 +42,7 @@
     <!-- Other Services -->
     <bean name="jBPMExecutionService" class="org.jbpm.ri.service.ExecutionServiceImpl" />
     <bean name="jBPMMessageService" class="org.jbpm.ri.service.MessageServiceImpl" />
+    <bean name="jBPMMessageBuilderService" class="org.jbpm.ri.service.MessageBuilderServiceImpl" />
     <bean name="jBPMProcessBuilderService" class="org.jbpm.ri.service.ProcessBuilderServiceImpl" />
     <bean name="jBPMProcessService" class="org.jbpm.ri.service.ProcessServiceImpl" />
     <bean name="jBPMSignalService" class="org.jbpm.ri.service.SignalServiceImpl" />




More information about the jbpm-commits mailing list