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

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Nov 12 11:51:13 EST 2008


Author: thomas.diesler at jboss.com
Date: 2008-11-12 11:51:13 -0500 (Wed, 12 Nov 2008)
New Revision: 2894

Added:
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/WaitTaskImpl.java
Modified:
   projects/spec/trunk/eclipse/jBPMCodeStyle.xml
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/Token.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/waitstate/WaitStateTest.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TokenImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java
Log:
WIP

Modified: projects/spec/trunk/eclipse/jBPMCodeStyle.xml
===================================================================
--- projects/spec/trunk/eclipse/jBPMCodeStyle.xml	2008-11-12 14:28:34 UTC (rev 2893)
+++ projects/spec/trunk/eclipse/jBPMCodeStyle.xml	2008-11-12 16:51:13 UTC (rev 2894)
@@ -70,7 +70,7 @@
 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
 <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
 <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120"/>
+<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="164"/>
 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
 <setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/Token.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/Token.java	2008-11-12 14:28:34 UTC (rev 2893)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/client/Token.java	2008-11-12 16:51:13 UTC (rev 2894)
@@ -79,5 +79,5 @@
   /**
    * Signal the Token, which takes it to the next wait state
    */
-  void signal();
+  Token signal();
 }
\ No newline at end of file

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/waitstate/WaitStateTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/waitstate/WaitStateTest.java	2008-11-12 14:28:34 UTC (rev 2893)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/waitstate/WaitStateTest.java	2008-11-12 16:51:13 UTC (rev 2894)
@@ -28,6 +28,8 @@
 import org.jbpm.api.client.Process;
 import org.jbpm.api.client.ProcessDefinition;
 import org.jbpm.api.client.Token;
+import org.jbpm.api.client.Token.TokenStatus;
+import org.jbpm.api.model.Task.TaskType;
 import org.jbpm.api.model.builder.ProcessBuilder;
 import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
@@ -47,14 +49,31 @@
 
     // Start the Process
     Token tok = proc.startProcess();
-    tok.signal();
+    String nodeName = tok.getCurrentNode().getName();
+    assertEquals(TokenStatus.Suspended, tok.getTokenStatus());
+    assertEquals("TaskA", nodeName);
+    
+    nodeName = tok.signal().getCurrentNode().getName();
+    assertEquals(TokenStatus.Suspended, tok.getTokenStatus());
+    assertEquals("TaskB", nodeName);
+    
+    nodeName = tok.signal().getCurrentNode().getName();
+    assertEquals(TokenStatus.Suspended, tok.getTokenStatus());
+    assertEquals("TaskC", nodeName);
+    
+    nodeName = tok.signal().getCurrentNode().getName();
+    assertEquals(TokenStatus.Destroyed, tok.getTokenStatus());
+    assertEquals("End", nodeName);
   }
 
   public ProcessDefinition getProcessDefinition() throws IOException
   {
     ProcessBuilder builder = ProcessBuilderService.locateProcessBuilder();
-    builder.addProcess("Proc").addStartEvent("Start").addSequenceFlow("Task");
-    builder.addTask("Task").addSequenceFlow("End").addEndEvent("End");
+    builder.addProcess("Proc").addStartEvent("Start").addSequenceFlow("TaskA");
+    builder.addTask("TaskA", TaskType.Wait).addSequenceFlow("TaskB");
+    builder.addTask("TaskB", TaskType.Wait).addSequenceFlow("TaskC");
+    builder.addTask("TaskC", TaskType.Wait).addSequenceFlow("End");
+    builder.addEndEvent("End");
     return builder.getProcessDefinition();
   }
 }

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessImpl.java	2008-11-12 14:28:34 UTC (rev 2893)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessImpl.java	2008-11-12 16:51:13 UTC (rev 2894)
@@ -241,9 +241,8 @@
 
   private Token startProcessInternal(Attachments att)
   {
-    ProcessStatus status = getProcessStatus();
-    if (status != ProcessStatus.Ready)
-      throw new IllegalStateException("Cannot start process in state: " + status);
+    // Prepare the process to start
+    startProcessPrepare();
     
     TokenImpl token = new TokenImpl(this, att);
     return token;
@@ -261,6 +260,9 @@
 
   private ObjectName startProcessAsyncInternal(Attachments att)
   {
+    // Prepare the process to start
+    startProcessPrepare();
+    
     ProcessEngine engine = getProcessEngine();
     ExecutionService exService = engine.getService(ExecutionService.class);
     try
@@ -277,6 +279,20 @@
     }
   }
 
+  private void startProcessPrepare()
+  {
+    // Veriy the process state
+    ProcessStatus procStatus = getProcessStatus();
+    if (procStatus != ProcessStatus.None && procStatus != ProcessStatus.Ready)
+      throw new IllegalStateException("Cannot start process in state: " + procStatus);
+
+    // Register the process if needed
+    ProcessEngine engine = getProcessEngine();
+    ProcessInstanceService procService = engine.getService(ProcessInstanceService.class);
+    if (procService.getProcess(getKey()) == null)
+      procService.registerProcess(this);
+  }
+
   public ProcessStatus waitForEnd()
   {
     return waitForEndInternal(0);

Added: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/WaitTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/WaitTaskImpl.java	                        (rev 0)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/WaitTaskImpl.java	2008-11-12 16:51:13 UTC (rev 2894)
@@ -0,0 +1,92 @@
+/*
+ * 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 org.jbpm.api.client.Token;
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.ProcessStructure;
+import org.jbpm.api.model.WaitState;
+import org.jbpm.api.runtime.preview.FlowHandler;
+import org.jbpm.api.runtime.preview.TokenExecutor;
+import org.jbpm.ri.model.builder.SingleInFlowSupport;
+import org.jbpm.ri.model.builder.SingleOutFlowSupport;
+
+/**
+ * A WaitTask is an Atomic Activity that suspends the Token.
+ *
+ * If the Process is executed in the Thread of the calling client, this will return 
+ * control to the client. 
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 11-Nov-2008
+ */
+ at Entity(name = "BPMWaitTask")
+public class WaitTaskImpl extends TaskImpl implements WaitState, SingleOutFlowSupport, SingleInFlowSupport
+{
+  // provide serial version UID
+  private static final long serialVersionUID = 1L;
+
+  public WaitTaskImpl(ProcessStructure procStruct, String name)
+  {
+    super(procStruct, TaskType.Wait, name);
+  }
+
+  // Persistence ctor
+  protected WaitTaskImpl()
+  {
+  }
+
+  @Override
+  protected FlowHandler getDefaultFlowHandler()
+  {
+    final Node thisNode = this;
+    return new FlowHandler()
+    {
+      private static final long serialVersionUID = 1L;
+
+      public void execute(TokenExecutor tokenExecutor, Token token)
+      {
+        tokenExecutor.suspend(token);
+      }
+
+      @Override
+      public Node getNode()
+      {
+        return thisNode;
+      }
+
+      @Override
+      public void setNode(Node node)
+      {
+      }
+    };
+  }
+
+  public String toString()
+  {
+    return "Task[" + getTaskType() + "," + getName() + "]";
+  }
+}
\ No newline at end of file


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

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java	2008-11-12 14:28:34 UTC (rev 2893)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java	2008-11-12 16:51:13 UTC (rev 2894)
@@ -61,6 +61,7 @@
 import org.jbpm.ri.model.StartEventImpl;
 import org.jbpm.ri.model.TaskImpl;
 import org.jbpm.ri.model.UserTaskImpl;
+import org.jbpm.ri.model.WaitTaskImpl;
 
 /**
  * The ProcessBuilder can be used to dynamically build a {@link Process}.
@@ -179,6 +180,10 @@
     {
       node = new UserTaskImpl(procStruct, name);
     }
+    else if (type == TaskType.Wait)
+    {
+      node = new WaitTaskImpl(procStruct, name);
+    }
     else if (type == TaskType.Script)
     {
       throw new NotImplementedException("JBPM-1654", "Task Type Script");
@@ -193,7 +198,7 @@
     }
     else
     {
-      throw new IllegalStateException("Task type: " + type);
+      throw new NotImplementedException("Task type: " + type);
     }
     addNode(node);
     return new TaskBuilderImpl(this);

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TokenImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TokenImpl.java	2008-11-12 14:28:34 UTC (rev 2893)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TokenImpl.java	2008-11-12 16:51:13 UTC (rev 2894)
@@ -116,8 +116,9 @@
   }
   
   @Override
-  public void signal()
+  public Token signal()
   {
+    return this;
   }
 
   @Override

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java	2008-11-12 14:28:34 UTC (rev 2893)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java	2008-11-12 16:51:13 UTC (rev 2894)
@@ -106,9 +106,6 @@
 
   private synchronized void startProcessInternal(Process proc, StartEvent start, Attachments att)
   {
-    // Prepare the process to start
-    startProcessPrepare(proc);
-    
     @SuppressWarnings("serial")
     class InitialFlow extends SequenceFlowImpl
     {
@@ -159,20 +156,6 @@
     tokenExecutor.start(initialToken);
   }
 
-  private void startProcessPrepare(Process proc)
-  {
-    // Veriy the process state
-    ProcessStatus procStatus = proc.getProcessStatus();
-    if (procStatus != ProcessStatus.None && procStatus != ProcessStatus.Ready)
-      throw new IllegalStateException("Cannot start process in state: " + procStatus);
-
-    // Register the process if needed
-    ProcessEngine engine = getProcessEngine();
-    ProcessInstanceService procService = engine.getService(ProcessInstanceService.class);
-    if (procService.getProcess(proc.getKey()) == null)
-      procService.registerProcess(proc);
-  }
-
   // Evaluate the Start time assignments
   private void startTimeAssignments(Process proc, Token token)
   {




More information about the jbpm-commits mailing list