[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