[jbpm-commits] JBoss JBPM SVN: r4865 - in jbpm4/trunk/modules: api/src/main/java/org/jbpm/api/activity and 27 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Thu May 21 02:16:03 EDT 2009
Author: alex.guizar at jboss.com
Date: 2009-05-21 02:16:03 -0400 (Thu, 21 May 2009)
New Revision: 4865
Added:
jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/task/notification/
jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/task/notification/MailNotificationTest.java
jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/task/notification/
jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/task/notification/process.jpdl.xml
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/history/events/TaskAssign.java
Modified:
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/ExecutionService.java
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ExternalActivityBehaviour.java
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/client/ClientExecution.java
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/model/OpenExecution.java
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/task/OpenTask.java
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/task/TaskHandler.java
jbpm4/trunk/modules/enterprise/src/test/java/org/jbpm/enterprise/internal/custom/WaitState.java
jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/mail/template/TemplateMailTest.java
jbpm4/trunk/modules/examples/src/test/resources/jbpm.mail.templates.examples.xml
jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/mail/template/process.jpdl.xml
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/GroupActivity.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/MailBinding.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StateActivity.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/SignalCmd.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/StartProcessInstanceInLatestCmd.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/VariablesCmd.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/email/impl/AttachmentTemplate.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/email/impl/MailProducerImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/email/impl/MailSessionImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/identity/impl/IdentitySessionImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/ExecutionServiceImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/LifeCycleState.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskDefinitionImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/XmlUtil.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MailTemplateBinding.java
jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/activities/WaitState.java
jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/executionmode/embedded/WaitState.java
jbpm4/trunk/modules/test-load/src/test/java/org/jbpm/test/load/async/ExclusiveMessagesTest.java
jbpm4/trunk/modules/test-load/src/test/java/org/jbpm/test/load/async/WaitState.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/AutomaticDecisionTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/BasicExecutionFlowTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/EventTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExceptionHandlerTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExecutionStateTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExternalDecisionTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/FunctionalActivityTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/LoopingTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeStateTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeVariableDeclarationTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeVariableTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/SubProcessTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/VariableTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/WaitState.java
Log:
CODING IN PROGRESS - issue JBPM-2254: task notify and reminder emails
https://jira.jboss.org/jira/browse/JBPM-2254
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/ExecutionService.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/ExecutionService.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/ExecutionService.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -70,14 +70,14 @@
* @param variables are the initial values of the process variables that
* will be set before the execution starts (read: before the initial
* activity is executed). */
- ProcessInstance startProcessInstanceByKey(String processDefinitionKey, Map<String, Object> variables);
+ ProcessInstance startProcessInstanceByKey(String processDefinitionKey, Map<String, ?> variables);
/** starts a new process instance in the latest version of the given processDefinitionName.
* @param processDefinitionKey is the key of the process definition for which the latest version will be taken.
* @param variables are the initial values of the process variables that will be set before the execution starts.
* @param processInstanceKey is a user provided reference for the new execution that must be unique over all
* process versions with the same name. */
- ProcessInstance startProcessInstanceByKey(String processDefinitionKey, Map<String, Object> variables, String processInstanceKey);
+ ProcessInstance startProcessInstanceByKey(String processDefinitionKey, Map<String, ?> variables, String processInstanceKey);
/** the path of execution that is uniquely defined by the execution id. */
Execution findExecutionById(String executionId);
@@ -92,10 +92,10 @@
ProcessInstance signalExecutionById(String executionId, String signalName);
/** provides a named external trigger to an execution with parameters. */
- ProcessInstance signalExecutionById(String executionId, String signalName, Map<String, Object> parameters);
+ ProcessInstance signalExecutionById(String executionId, String signalName, Map<String, ?> parameters);
/** provides a external trigger to an execution with parameters. */
- ProcessInstance signalExecutionById(String executionId, Map<String, Object> parameters);
+ ProcessInstance signalExecutionById(String executionId, Map<String, ?> parameters);
/** search for process instances with criteria */
@@ -105,7 +105,7 @@
void setVariable(String executionId, String name, Object value);
/** creates or overwrites the variable values on the referenced execution */
- void setVariables(String executionId, Map<String, Object> variables);
+ void setVariables(String executionId, Map<String, ?> variables);
/** retrieves a variable */
Object getVariable(String executionId, String variableName);
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ExternalActivityBehaviour.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ExternalActivityBehaviour.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ExternalActivityBehaviour.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -64,5 +64,5 @@
* considered non recoverable. After an Exception, the execution should not be
* used any more and if this is during a transaction, the transaction should be
* rolled back. */
- void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) throws Exception;
+ void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception;
}
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/client/ClientExecution.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/client/ClientExecution.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/client/ClientExecution.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -94,7 +94,7 @@
*
* @see #signal() See the unnamed signal for more information
*/
- void signal(Map<String, Object> parameters);
+ void signal(Map<String, ?> parameters);
/** feeds a named {@link #signal() external trigger} into the execution with parameters.
*
@@ -111,7 +111,7 @@
*
* @see #signal() See the unnamed signal for more information
*/
- void signal(String signalName, Map<String, Object> parameters);
+ void signal(String signalName, Map<String, ?> parameters);
/** feeds a external trigger into the given execution.
*
@@ -154,7 +154,7 @@
*
* @see #signal() See the unnamed signal for more information
*/
- void signal(Map<String, Object> parameters, Execution execution);
+ void signal(Map<String, ?> parameters, Execution execution);
/** feeds a named {@link #signal() external trigger} into a given execution with parameters.
*
@@ -171,7 +171,7 @@
*
* @see #signal() See the unnamed signal for more information
*/
- void signal(String signalName, Map<String, Object> parameters, Execution execution);
+ void signal(String signalName, Map<String, ?> parameters, Execution execution);
/** suspends this execution and all it's child executions. Human tasks
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/model/OpenExecution.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/model/OpenExecution.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/model/OpenExecution.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -21,7 +21,6 @@
*/
package org.jbpm.api.model;
-import java.util.Collection;
import java.util.Map;
import java.util.Set;
@@ -29,7 +28,6 @@
import org.jbpm.api.JbpmException;
import org.jbpm.api.job.Timer;
-
/** execution that opens up access to the related
* objects in the execution and process definition
* model.
@@ -78,7 +76,7 @@
* variables will <b>not</b> be removed.
* @throws JbpmException is variables is not null and if null is present
* as a key in the provided variables map. */
- void setVariables(Map<String, Object> variables);
+ void setVariables(Map<String, ?> variables);
/** indicates presenve of the given key.
* No exception will be thrown if key is null.
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/task/OpenTask.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/task/OpenTask.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/task/OpenTask.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -37,6 +37,9 @@
/** fires a history event that marks the start of this task. */
void historyTaskStart();
+ /** fires a history event that marks the assignment of this task. */
+ void historyTaskAssign(String userId);
+
/** fires a history event that marks the completion of this task. */
void historyTaskComplete(String outcome);
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/task/TaskHandler.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/task/TaskHandler.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/task/TaskHandler.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -21,7 +21,6 @@
*/
package org.jbpm.api.task;
-
/** for advanced task customization.
*
* The default implementation can be found in {@link DefaultTaskHandler}.
@@ -30,7 +29,7 @@
*/
public class TaskHandler {
- /** is called after the task is created according
+ /** called after the task is created according
* to the task definition. This method allows to
* create subtasks.
* @return indicates if the process execution should wait. */
@@ -39,7 +38,7 @@
return true;
}
- /** is called when the related execution gets a
+ /** called when the related execution gets a
* signal. this method must either
* {@link OpenTask#setSignalling(boolean) remove signalling} from this task
* or {@link OpenTask#cancel(String) cancel} it. */
@@ -47,12 +46,17 @@
task.setSignalling(false);
}
- /** is called when this task is cancelled. */
+ /** called when the given task is assigned to an actor. */
+ public void taskAssign(OpenTask task, String userId) {
+ task.historyTaskAssign(userId);
+ }
+
+ /** called when the given task is cancelled. */
public void taskCancel(OpenTask task, String reason) {
task.historyTaskCancel(reason);
}
- /** is called when this task completes. The default behaviour
+ /** called when the given task completes. The default behaviour
* will send a signal to the execution if this task is still signalling. */
public void taskComplete(OpenTask task, String outcome) {
task.historyTaskComplete(outcome);
Modified: jbpm4/trunk/modules/enterprise/src/test/java/org/jbpm/enterprise/internal/custom/WaitState.java
===================================================================
--- jbpm4/trunk/modules/enterprise/src/test/java/org/jbpm/enterprise/internal/custom/WaitState.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/enterprise/src/test/java/org/jbpm/enterprise/internal/custom/WaitState.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -39,7 +39,7 @@
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters)
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters)
throws Exception {
if (parameters != null) {
execution.setVariables(parameters);
Modified: jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/mail/template/TemplateMailTest.java
===================================================================
--- jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/mail/template/TemplateMailTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/mail/template/TemplateMailTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -98,7 +98,7 @@
// start process instance
executionService.startProcessInstanceByKey("TemplateMail", variables);
- // examine produced message
+ // examine produced messages
List<WiserMessage> wisMessages = wiser.getMessages();
// winston, bb, innerparty(obrien), thinkpol(charr, obrien)
assertEquals(5, wisMessages.size());
Added: jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/task/notification/MailNotificationTest.java
===================================================================
--- jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/task/notification/MailNotificationTest.java (rev 0)
+++ jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/task/notification/MailNotificationTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -0,0 +1,99 @@
+/*
+ * 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.examples.task.notification;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import javax.mail.Address;
+import javax.mail.MessagingException;
+import javax.mail.Message.RecipientType;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+
+import org.subethamail.wiser.Wiser;
+import org.subethamail.wiser.WiserMessage;
+
+import org.jbpm.examples.task.assignee.Order;
+import org.jbpm.test.JbpmTestCase;
+
+/**
+ * @author Alejandro Guizar
+ */
+public class MailNotificationTest extends JbpmTestCase {
+
+ Wiser wiser = new Wiser();
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ // deploy process
+ long deploymentDbid = repositoryService.createDeployment()
+ .addResourceFromClasspath("org/jbpm/examples/task/notification/process.jpdl.xml")
+ .deploy();
+ registerDeployment(deploymentDbid);
+
+ // create actors
+ identityService.createUser("johndoe", "John", "Doe", "john at doe");
+
+ // start mail server
+ wiser.setPort(2525);
+ wiser.start();
+ }
+
+ protected void tearDown() throws Exception {
+ // stop mail server
+ wiser.stop();
+
+ // delete actors
+ identityService.deleteUser("johndoe");
+
+ super.tearDown();
+ }
+
+ public void testTaskNotification() throws MessagingException, IOException {
+ Map<String, Order> variables = Collections.singletonMap("order", new Order("johndoe"));
+ executionService.startProcessInstanceByKey("TaskAssignee", variables);
+
+ // examine produced messages
+ List<WiserMessage> wiserMessages = wiser.getMessages();
+ assertEquals(1, wiserMessages.size());
+
+ WiserMessage wiserMessage = wiserMessages.get(0);
+ MimeMessage message = wiserMessage.getMimeMessage();
+ // from
+ Address[] from = message.getFrom();
+ assertEquals(1, from.length);
+ assertEquals("noreply at jbpm.org", from[0].toString());
+ // to
+ Address[] expectedTo = InternetAddress.parse("john at doe");
+ Address[] to = message.getRecipients(RecipientType.TO);
+ assert Arrays.equals(expectedTo, to) : Arrays.asList(to);
+ // subject
+ assertEquals("review", message.getSubject());
+ // text
+ assertTextPresent("Task \"review\" has been assigned to you.", (String) message.getContent());
+ }
+}
Modified: jbpm4/trunk/modules/examples/src/test/resources/jbpm.mail.templates.examples.xml
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/jbpm.mail.templates.examples.xml 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/examples/src/test/resources/jbpm.mail.templates.examples.xml 2009-05-21 06:16:03 UTC (rev 4865)
@@ -4,7 +4,29 @@
<process-engine-context>
- <mail-template name="rectify template">
+ <mail-template name='task-notification'>
+ <to users="${task.assignee}"/>
+ <subject>${task.name}</subject>
+ <text><![CDATA[Hi ${task.assignee},
+Task "${task.name}" has been assigned to you.
+${task.description}
+
+Sent by JBoss jBPM
+]]></text>
+ </mail-template>
+
+ <mail-template name='task-reminder'>
+ <to users="${task.assignee}"/>
+ <subject>${task.name}</subject>
+ <text><![CDATA[Hey ${task.assignee},
+Do not forget about task "${task.name}".
+${task.description}
+
+Sent by JBoss jBPM
+]]></text>
+ </mail-template>
+
+ <mail-template name="rectify-template">
<to addresses="${addressee}" />
<cc users="bb" groups="innerparty" />
<bcc groups="thinkpol" />
Modified: jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/mail/template/process.jpdl.xml
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/mail/template/process.jpdl.xml 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/mail/template/process.jpdl.xml 2009-05-21 06:16:03 UTC (rev 4865)
@@ -6,7 +6,7 @@
<transition to="send rectify note" />
</start>
- <mail name="send rectify note" template="rectify template">
+ <mail name="send rectify note" template="rectify-template">
<transition to="end" />
</mail>
Added: jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/task/notification/process.jpdl.xml
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/task/notification/process.jpdl.xml (rev 0)
+++ jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/task/notification/process.jpdl.xml 2009-05-21 06:16:03 UTC (rev 4865)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<process name="TaskAssignee">
+
+ <start g="20,20,48,48">
+ <transition to="review"/>
+ </start>
+
+ <task name="review"
+ assignee="#{order.owner}"
+ g="96,16,127,52">
+ <notification/>
+ <transition to="wait"/>
+ </task>
+
+ <state name="wait" g="255,16,88,52"/>
+
+</process>
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/GroupActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/GroupActivity.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/GroupActivity.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -83,7 +83,7 @@
return startActivities;
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) throws Exception {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception {
Transition transition = null;
Activity activity = execution.getActivity();
List<Transition> outgoingTransitions = activity.getOutgoingTransitions();
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/MailBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/MailBinding.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/MailBinding.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -23,14 +23,7 @@
import org.w3c.dom.Element;
-import org.jbpm.api.env.Environment;
-import org.jbpm.pvm.internal.email.impl.MailProducerImpl;
-import org.jbpm.pvm.internal.email.impl.MailTemplate;
-import org.jbpm.pvm.internal.email.impl.MailTemplateRegistry;
-import org.jbpm.pvm.internal.email.spi.MailProducer;
-import org.jbpm.pvm.internal.util.XmlUtil;
-import org.jbpm.pvm.internal.wire.binding.MailTemplateBinding;
-import org.jbpm.pvm.internal.wire.binding.ObjectBinding;
+import org.jbpm.jpdl.internal.xml.JpdlParser;
import org.jbpm.pvm.internal.xml.Parse;
import org.jbpm.pvm.internal.xml.Parser;
@@ -39,48 +32,13 @@
*/
public class MailBinding extends JpdlBinding {
- private static final ObjectBinding objectBinding = new ObjectBinding();
- private static final MailTemplateBinding templateBinding = new MailTemplateBinding();
-
public MailBinding() {
super("mail");
}
public Object parse(Element element, Parse parse, Parser parser) {
MailActivity activity = new MailActivity();
- activity.setMailProducer(parseProducer(element, parse, parser));
+ activity.setMailProducer(JpdlParser.parseMailProducer(element, parse, null));
return activity;
}
-
- protected MailProducer parseProducer(Element element, Parse parse, Parser parser) {
- // check whether the element is a generic object descriptor
- if (ObjectBinding.isObjectDescriptor(element)) {
- return (MailProducer) objectBinding.parse(element, parse, parser);
- }
-
- // parse the default producer
- MailProducerImpl mailProducer = new MailProducerImpl();
- mailProducer.setTemplate(parseTemplate(element, parse, parser));
- return mailProducer;
- }
-
- protected MailTemplate parseTemplate(Element element, Parse parse, Parser parser) {
- MailTemplate template;
-
- // look for template reference
- String templateName = XmlUtil.attribute(element, "template");
- if (templateName != null) {
- // load template from configuration
- MailTemplateRegistry templateRegistry = Environment.getFromCurrent(MailTemplateRegistry.class);
- template = templateRegistry.getTemplate(templateName);
- if (template == null) {
- parse.addProblem("mail template not found: " + templateName, element);
- }
- }
- else {
- // parse inline template
- template = templateBinding.parseMailTemplate(element, parse, parser);
- }
- return template;
- }
}
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StateActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StateActivity.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StateActivity.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -40,7 +40,7 @@
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) {
Activity activity = execution.getActivity();
if (parameters!=null) {
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -87,7 +87,7 @@
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) {
JpdlExecution jpdlExecution = execution.getExtension(JpdlExecution.class);
ExecutionImpl subProcessInstance = jpdlExecution.getSubProcessInstance();
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -61,7 +61,7 @@
}
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) {
Activity activity = execution.getActivity();
if (parameters!=null) {
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -38,6 +38,10 @@
import org.jbpm.internal.log.Log;
import org.jbpm.jpdl.internal.activity.JpdlBinding;
import org.jbpm.jpdl.internal.model.JpdlProcessDefinition;
+import org.jbpm.pvm.internal.email.impl.MailProducerImpl;
+import org.jbpm.pvm.internal.email.impl.MailTemplate;
+import org.jbpm.pvm.internal.email.impl.MailTemplateRegistry;
+import org.jbpm.pvm.internal.email.spi.MailProducer;
import org.jbpm.pvm.internal.model.ActivityCoordinatesImpl;
import org.jbpm.pvm.internal.model.ActivityImpl;
import org.jbpm.pvm.internal.model.CompositeElementImpl;
@@ -58,6 +62,10 @@
import org.jbpm.pvm.internal.util.ReflectUtil;
import org.jbpm.pvm.internal.util.XmlUtil;
import org.jbpm.pvm.internal.wire.Descriptor;
+import org.jbpm.pvm.internal.wire.WireContext;
+import org.jbpm.pvm.internal.wire.WireDefinition;
+import org.jbpm.pvm.internal.wire.binding.MailTemplateBinding;
+import org.jbpm.pvm.internal.wire.binding.ObjectBinding;
import org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor;
import org.jbpm.pvm.internal.wire.operation.Operation;
import org.jbpm.pvm.internal.wire.xml.WireParser;
@@ -461,6 +469,13 @@
JpdlParser.parseAssignmentAttributes(element, taskDefinition, parse);
+ // parse notification mail producer
+ Element notificationElement = XmlUtil.element(element, "notification");
+ if (notificationElement != null) {
+ MailProducer mailProducer = parseMailProducer(notificationElement, parse, "task-notification");
+ taskDefinition.setNotificationMailProducer(mailProducer);
+ }
+
return taskDefinition;
}
@@ -552,4 +567,49 @@
return variableOutDefinitionSet;
}
+ public static MailProducer parseMailProducer(Element element, Parse parse,
+ String defaultTemplateName) {
+ // check whether the element is a generic object descriptor
+ if (ObjectBinding.isObjectDescriptor(element)) {
+ // TODO test custom mail producer
+ ObjectDescriptor objectDescriptor = parseObjectDescriptor(element, parse);
+ WireDefinition wireDefinition = parse.findObject(WireDefinition.class);
+ return (MailProducer) objectDescriptor.construct(new WireContext(wireDefinition));
+ }
+
+ // parse the default producer
+ MailProducerImpl mailProducer = new MailProducerImpl();
+ mailProducer.setTemplate(parseMailTemplate(element, parse, defaultTemplateName));
+ return mailProducer;
+ }
+
+ private static MailTemplate parseMailTemplate(Element element, Parse parse,
+ String defaultTemplateName) {
+ if (element.hasAttribute("template")) {
+ // fetch template from configuration
+ return findTemplate(element, parse, element.getAttribute("template"));
+ }
+ if (!XmlUtil.isTextOnly(element)) {
+ // parse inline template
+ return MailTemplateBinding.parseMailTemplate(element, parse);
+ }
+ if (defaultTemplateName != null) {
+ // fetch default template
+ return findTemplate(element, parse, defaultTemplateName);
+ }
+ parse.addProblem("mail template must be referenced in the 'template' attribute "
+ + "or specified inline", element);
+ return null;
+ }
+
+ private static MailTemplate findTemplate(Element element, Parse parse, String templateName) {
+ MailTemplateRegistry templateRegistry = Environment.getFromCurrent(MailTemplateRegistry.class);
+ if (templateRegistry != null) {
+ MailTemplate template = templateRegistry.getTemplate(templateName);
+ if (template != null) return template;
+ }
+ parse.addProblem("mail template not found: " + templateName, element);
+ return null;
+ }
+
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/SignalCmd.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/SignalCmd.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/SignalCmd.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -38,9 +38,9 @@
protected String executionId;
protected String signalName;
- protected Map<String, Object> parameters;
+ protected Map<String, ?> parameters;
- public SignalCmd(String executionId, String signalName, Map<String, Object> parameters) {
+ public SignalCmd(String executionId, String signalName, Map<String, ?> parameters) {
if (executionId==null) {
throw new JbpmException("executionId is null");
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/StartProcessInstanceInLatestCmd.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/StartProcessInstanceInLatestCmd.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/StartProcessInstanceInLatestCmd.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -25,14 +25,12 @@
import org.hibernate.Session;
import org.jbpm.api.JbpmException;
-import org.jbpm.api.ProcessDefinitionQuery;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.client.ClientProcessDefinition;
import org.jbpm.api.client.ClientProcessInstance;
import org.jbpm.api.env.Environment;
import org.jbpm.api.session.RepositorySession;
-
/**
* @author Tom Baeyens
*/
@@ -43,13 +41,13 @@
protected String processDefinitionKey;
protected String executionKey;
- public StartProcessInstanceInLatestCmd(String processDefinitionKey, Map<String, Object> variables, String executionKey) {
+ public StartProcessInstanceInLatestCmd(String processDefinitionKey, Map<String, ?> variables, String executionKey) {
if (processDefinitionKey==null) {
throw new JbpmException("processDefinitionKey is null");
}
this.processDefinitionKey = processDefinitionKey;
- this.variables = variables;
this.executionKey = executionKey;
+ setVariables(variables);
}
public ProcessInstance execute(Environment environment) throws Exception {
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/VariablesCmd.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/VariablesCmd.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/cmd/VariablesCmd.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -36,28 +36,32 @@
private static final long serialVersionUID = 1L;
- protected Map<String, Object> variables;
+ protected Map<String, ?> variables;
+ private Map<String, Object> internalMap;
public void addVariable(String key, Object variable) {
- if (variables==null) {
- variables = new HashMap<String, Object>();
+ if (internalMap == null) {
+ if (variables != null) {
+ throw new JbpmException("variables were set externally");
+ }
+ variables = internalMap = new HashMap<String, Object>();
}
- variables.put(key, variable);
+ internalMap.put(key, variable);
}
- public Map<String, Object> getVariables() {
+ public Map<String, ?> getVariables() {
return variables;
}
- public void setVariables(Map<String, Object> variables) {
+ public void setVariables(Map<String, ?> variables) {
this.variables = variables;
}
-
+
protected ClientExecution getExecution(Environment environment, String executionId) {
PvmDbSession dbSession = environment.get(PvmDbSession.class);
ClientExecution execution = dbSession.findExecutionById(executionId);
- if (execution==null) {
- throw new JbpmException("execution "+executionId+" doesn't exist");
+ if (execution == null) {
+ throw new JbpmException("execution " + executionId + " doesn't exist");
}
return execution;
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/email/impl/AttachmentTemplate.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/email/impl/AttachmentTemplate.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/email/impl/AttachmentTemplate.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -21,8 +21,6 @@
*/
package org.jbpm.pvm.internal.email.impl;
-import java.net.URL;
-
/**
* @author Alejandro Guizar
*/
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/email/impl/MailProducerImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/email/impl/MailProducerImpl.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/email/impl/MailProducerImpl.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -83,9 +83,16 @@
return new MimeMessage((Session) null);
}
+ /**
+ * Fills the <code>from</code> attribute of the given email. The sender addresses are an optional
+ * element in the mail template. If absent, each mail server supplies the current user's email
+ * address.
+ *
+ * @see {@link InternetAddress#getLocalAddress(Session)}
+ */
protected void fillFrom(Execution execution, Message email) {
AddressTemplate fromTemplate = template.getFrom();
- // from field is optional; if absent, each mail server will supply its "local address"
+ // "from" attribute is optional
if (fromTemplate == null) return;
// resolve and parse addresses
@@ -129,7 +136,10 @@
}
private String[] tokenizeActors(String recipients, Execution execution) {
- return evaluateExpression(recipients, execution).split("[,|\\s]+");
+ String[] actors = evaluateExpression(recipients, execution).split("[,|\\s]+");
+ if (actors.length == 0)
+ throw new JbpmException("recipient list is empty: " + recipients);
+ return actors;
}
/** construct recipient addresses from user entities */
@@ -219,16 +229,20 @@
}
protected void fillSubject(Execution execution, Message email) {
- String subject = evaluateExpression(template.getSubject(), execution);
- try {
- email.setSubject(subject);
+ String subject = template.getSubject();
+ if (subject != null) {
+ subject = evaluateExpression(subject, execution);
+ try {
+ email.setSubject(subject);
+ }
+ catch (MessagingException e) {
+ throw new JbpmException("failed to set subject to " + subject, e);
+ }
}
- catch (MessagingException e) {
- throw new JbpmException("failed to set subject to " + subject, e);
- }
}
protected void fillContent(Execution execution, Message email) {
+ String text = template.getText();
String html = template.getHtml();
List<AttachmentTemplate> attachmentTemplates = template.getAttachmentTemplates();
@@ -237,9 +251,9 @@
Multipart multipart = new MimeMultipart("related");
// text
- if (template.getText() != null) {
+ if (text != null) {
BodyPart textPart = new MimeBodyPart();
- String text = evaluateExpression(template.getText(), execution);
+ text = evaluateExpression(text, execution);
try {
textPart.setText(text);
multipart.addBodyPart(textPart);
@@ -274,9 +288,9 @@
throw new JbpmException("failed to set multipart content: " + multipart, e);
}
}
- else {
+ else if (text != null) {
// unipart
- String text = evaluateExpression(template.getText(), execution);
+ text = evaluateExpression(text, execution);
try {
email.setText(text);
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/email/impl/MailSessionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/email/impl/MailSessionImpl.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/email/impl/MailSessionImpl.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -10,7 +10,6 @@
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeMessage;
import org.jbpm.api.JbpmException;
import org.jbpm.pvm.internal.email.spi.MailSession;
Added: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/history/events/TaskAssign.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/history/events/TaskAssign.java (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/history/events/TaskAssign.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -0,0 +1,44 @@
+/*
+ * 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.pvm.internal.history.events;
+
+import org.jbpm.pvm.internal.history.HistoryEvent;
+
+/**
+ * @author Alejandro Guizar
+ */
+public class TaskAssign extends HistoryEvent {
+
+ private static final long serialVersionUID = 1L;
+
+ protected String userId;
+
+ public TaskAssign(String userId) {
+ this.userId = userId;
+ }
+
+ @Override
+ public void process() {
+ // TODO
+ }
+
+}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/identity/impl/IdentitySessionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/identity/impl/IdentitySessionImpl.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/identity/impl/IdentitySessionImpl.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -21,9 +21,10 @@
*/
package org.jbpm.pvm.internal.identity.impl;
+import java.util.Arrays;
import java.util.List;
-import org.hibernate.Query;
+import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
@@ -39,7 +40,8 @@
protected Session session;
- public String createUser(String userName, String givenName, String familyName, String businessEmail) {
+ public String createUser(String userName, String givenName, String familyName,
+ String businessEmail) {
UserImpl user = new UserImpl(userName, givenName, familyName);
user.setBusinessEmail(businessEmail);
session.save(user);
@@ -54,7 +56,11 @@
}
public List<User> findUsersById(String... userIds) {
- return session.createCriteria(UserImpl.class).add(Restrictions.in("id", userIds)).list();
+ List users = session.createCriteria(UserImpl.class).add(Restrictions.in("id", userIds)).list();
+ if (userIds.length != users.size()) {
+ throw new JbpmException("not all users were found: " + Arrays.toString(userIds));
+ }
+ return users;
}
public List<User> findUsers() {
@@ -66,12 +72,9 @@
User user = findUserById(userId);
// cascade the deletion to the memberships
- Query query = session.createQuery("from "
- + MembershipImpl.class.getName()
- + " as m "
- + "where m.user is :user");
- query.setEntity("user", user);
- List<MembershipImpl> memberships = query.list();
+ List<MembershipImpl> memberships = session.createCriteria(MembershipImpl.class)
+ .add(Restrictions.eq("user", user))
+ .list();
// delete the related memberships
for (MembershipImpl membership : memberships) {
@@ -108,43 +111,33 @@
}
public GroupImpl findGroupById(String groupId) {
- GroupImpl group = (GroupImpl) session.createQuery("select group "
- + "from "
- + GroupImpl.class.getName()
- + " as group "
- + "where group.id = '"
- + groupId
- + "'").uniqueResult();
- return group;
+ return (GroupImpl) session.createCriteria(GroupImpl.class)
+ .add(Restrictions.eq("id", groupId))
+ .uniqueResult();
}
public List<Group> findGroupsByUserAndGroupType(String userId, String groupType) {
- Query query = session.createQuery("select distinct membership.group "
- + "from "
- + MembershipImpl.class.getName()
- + " as membership "
- + "where membership.user.id = '"
- + userId
- + "'"
- + " and membership.group.type = '"
- + groupType
- + "'");
- return query.list();
+ return session.createCriteria(MembershipImpl.class)
+ .createAlias("user", "u")
+ .createAlias("group", "g")
+ .add(Restrictions.eq("u.id", userId))
+ .add(Restrictions.eq("g.type", groupType))
+ .setProjection(Projections.property("group"))
+ .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
+ .list();
}
public List<Group> findGroupsByUser(String userId) {
- Query query = session.createQuery("select distinct membership.group "
- + "from "
- + MembershipImpl.class.getName()
- + " as membership "
- + "where membership.user.id = '"
- + userId
- + "'");
- return query.list();
+ return session.createCriteria(MembershipImpl.class)
+ .createAlias("user", "u")
+ .add(Restrictions.eq("u.id", userId))
+ .setProjection(Projections.property("group"))
+ .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
+ .list();
}
public List<Group> findGroups() {
- return session.createQuery("from " + GroupImpl.class.getName()).list();
+ return session.createCriteria(GroupImpl.class).list();
}
public void deleteGroup(String groupId) {
@@ -152,12 +145,9 @@
GroupImpl group = findGroupById(groupId);
// cascade the deletion to the memberships
- Query query = session.createQuery("from "
- + MembershipImpl.class.getName()
- + " as m "
- + "where m.group is :group");
- query.setEntity("group", group);
- List<MembershipImpl> memberships = query.list();
+ List<MembershipImpl> memberships = session.createCriteria(MembershipImpl.class)
+ .add(Restrictions.eq("group", group))
+ .list();
// delete the related memberships
for (MembershipImpl membership : memberships) {
@@ -173,7 +163,7 @@
if (user == null) {
throw new JbpmException("user " + userId + " doesn't exist");
}
- GroupImpl group = findGroupById(groupId);
+ Group group = findGroupById(groupId);
if (group == null) {
throw new JbpmException("group " + groupId + " doesn't exist");
}
@@ -187,7 +177,13 @@
}
public void deleteMembership(String userId, String groupId, String role) {
- throw new UnsupportedOperationException("please implement me");
+ MembershipImpl membership = (MembershipImpl) session.createCriteria(MembershipImpl.class)
+ .createAlias("user", "u")
+ .createAlias("group", "g")
+ .add(Restrictions.eq("u.id", userId))
+ .add(Restrictions.eq("g.id", groupId))
+ .uniqueResult();
+ session.delete(membership);
}
public void setSession(Session session) {
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -363,18 +363,18 @@
// execution method : signal ////////////////////////////////////////////////
public void signal() {
- signal(null, (Map)null);
+ signal(null, (Map<String,?>)null);
}
public void signal(String signal) {
- signal(signal, (Map)null);
+ signal(signal, (Map<String,?>)null);
}
- public void signal(Map<String, Object> parameters) {
+ public void signal(Map<String, ?> parameters) {
signal(null, parameters);
}
- public void signal(String signal, Map<String, Object> parameters) {
+ public void signal(String signal, Map<String, ?> parameters) {
checkActive();
propagation = Propagation.EXPLICIT;
if (getActivity()!=null) {
@@ -387,18 +387,18 @@
}
public void signal(Execution execution) {
- ((ExecutionImpl)execution).signal(null, (Map)null);
+ ((ExecutionImpl)execution).signal(null, (Map<String,?>)null);
}
public void signal(String signalName, Execution execution) {
- ((ExecutionImpl)execution).signal(signalName, (Map)null);
+ ((ExecutionImpl)execution).signal(signalName, (Map<String,?>)null);
}
- public void signal(Map<String, Object> parameters, Execution execution) {
+ public void signal(Map<String, ?> parameters, Execution execution) {
((ExecutionImpl)execution).signal(null, parameters);
}
- public void signal(String signalName, Map<String, Object> parameters, Execution execution) {
+ public void signal(String signalName, Map<String, ?> parameters, Execution execution) {
((ExecutionImpl)execution).signal(signalName, parameters);
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -33,13 +33,10 @@
import org.jbpm.api.Execution;
import org.jbpm.api.JbpmException;
-import org.jbpm.api.client.ClientExecution;
-import org.jbpm.api.client.ClientProcessDefinition;
import org.jbpm.api.env.Environment;
import org.jbpm.api.job.Timer;
import org.jbpm.api.session.TimerSession;
import org.jbpm.internal.log.Log;
-import org.jbpm.pvm.internal.hibernate.HibernatePvmDbSession;
import org.jbpm.pvm.internal.job.TimerImpl;
import org.jbpm.pvm.internal.type.Converter;
import org.jbpm.pvm.internal.type.Type;
@@ -168,18 +165,15 @@
}
}
- public void setVariables(Map<String, Object> variables) {
+ public void setVariables(Map<String, ?> variables) {
if (variables!=null) {
- for (String key: variables.keySet()) {
- Object value = variables.get(key);
- setVariable(key, value);
- }
+ for (Map.Entry<String, ?> entry : variables.entrySet()) {
+ setVariable(entry.getKey(), entry.getValue());
+ }
}
}
public Object getVariable(String key) {
- Object value = null;
-
Variable variable = getVariableObject(key);
if (variable!=null) {
return variable.getValue();
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -39,10 +39,10 @@
private static final Log log = Log.getLog(Signal.class.getName());
String signalName;
- Map<String, Object> parameters;
+ Map<String, ?> parameters;
ActivityImpl activity;
- public Signal(String signalName, Map<String, Object> parameters, ActivityImpl activity) {
+ public Signal(String signalName, Map<String, ?> parameters, ActivityImpl activity) {
this.signalName = signalName;
this.parameters = parameters;
this.activity = activity;
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/ExecutionServiceImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/ExecutionServiceImpl.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/ExecutionServiceImpl.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -22,7 +22,6 @@
package org.jbpm.pvm.internal.svc;
import java.util.HashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -33,7 +32,6 @@
import org.jbpm.pvm.internal.cmd.DeleteProcessInstance;
import org.jbpm.pvm.internal.cmd.EndProcessInstance;
import org.jbpm.pvm.internal.cmd.FindExecutionCmd;
-import org.jbpm.pvm.internal.cmd.FindExecutionsCmd;
import org.jbpm.pvm.internal.cmd.GetVariableNamesCmd;
import org.jbpm.pvm.internal.cmd.GetVariablesCmd;
import org.jbpm.pvm.internal.cmd.SetVariablesCmd;
@@ -42,7 +40,6 @@
import org.jbpm.pvm.internal.cmd.StartProcessInstanceInLatestCmd;
import org.jbpm.pvm.internal.query.ProcessInstanceQueryImpl;
-
/**
* @author Tom Baeyens
*/
@@ -68,7 +65,7 @@
return commandService.execute(new StartProcessInstanceInLatestCmd(processDefinitionKey, null, null));
}
- public ProcessInstance startProcessInstanceByKey(String processDefinitionKey, Map<String, Object> variables){
+ public ProcessInstance startProcessInstanceByKey(String processDefinitionKey, Map<String, ?> variables){
return commandService.execute(new StartProcessInstanceInLatestCmd(processDefinitionKey, variables, null));
}
@@ -76,7 +73,7 @@
return commandService.execute(new StartProcessInstanceInLatestCmd(processDefinitionKey, null, executionKey));
}
- public ProcessInstance startProcessInstanceByKey(String processDefinitionKey, Map<String, Object> variables, String executionKey){
+ public ProcessInstance startProcessInstanceByKey(String processDefinitionKey, Map<String, ?> variables, String executionKey){
return commandService.execute(new StartProcessInstanceInLatestCmd(processDefinitionKey, variables, executionKey));
}
@@ -90,11 +87,11 @@
return commandService.execute(new SignalCmd(executionId, signalName, null));
}
- public ProcessInstance signalExecutionById(String executionId, String signalName, Map<String, Object> parameters) {
+ public ProcessInstance signalExecutionById(String executionId, String signalName, Map<String, ?> parameters) {
return commandService.execute(new SignalCmd(executionId, signalName, parameters));
}
- public ProcessInstance signalExecutionById(String executionId, Map<String, Object> parameters) {
+ public ProcessInstance signalExecutionById(String executionId, Map<String, ?> parameters) {
return commandService.execute(new SignalCmd(executionId, null, parameters));
}
@@ -141,7 +138,7 @@
commandService.execute(cmd);
}
- public void setVariables(String executionId, Map<String, Object> variables) {
+ public void setVariables(String executionId, Map<String, ?> variables) {
SetVariablesCmd cmd = new SetVariablesCmd(executionId);
cmd.setVariables(variables);
commandService.execute(cmd);
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/LifeCycleState.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/LifeCycleState.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/LifeCycleState.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -38,7 +38,7 @@
}
public void signal(ActivityExecution execution, String signalName,
- Map<String, Object> parameters) throws Exception {
+ Map<String, ?> parameters) throws Exception {
execution.take(signalName);
}
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskDefinitionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskDefinitionImpl.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskDefinitionImpl.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -24,6 +24,7 @@
import java.io.Serializable;
import java.util.List;
+import org.jbpm.pvm.internal.email.spi.MailProducer;
import org.jbpm.pvm.internal.util.Priority;
import org.jbpm.pvm.internal.wire.Descriptor;
@@ -41,6 +42,8 @@
protected SwimlaneDefinitionImpl swimlaneDefinition;
protected Descriptor taskHandlerDescriptor;
+ protected transient MailProducer notificationMailProducer;
+
public int getPriority() {
return priority;
}
@@ -77,4 +80,10 @@
public void setTaskHandlerDescriptor(Descriptor taskHandlerDescriptor) {
this.taskHandlerDescriptor = taskHandlerDescriptor;
}
+ public MailProducer getNotificationMailProducer() {
+ return notificationMailProducer;
+ }
+ public void setNotificationMailProducer(MailProducer notificationMailProducer) {
+ this.notificationMailProducer = notificationMailProducer;
+ }
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -23,12 +23,15 @@
import java.io.Serializable;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import javax.mail.Message;
+
import org.jbpm.api.Execution;
import org.jbpm.api.JbpmException;
import org.jbpm.api.env.Environment;
@@ -40,6 +43,9 @@
import org.jbpm.api.task.Swimlane;
import org.jbpm.api.task.Task;
import org.jbpm.api.task.TaskHandler;
+import org.jbpm.pvm.internal.email.spi.MailProducer;
+import org.jbpm.pvm.internal.email.spi.MailSession;
+import org.jbpm.pvm.internal.history.events.TaskAssign;
import org.jbpm.pvm.internal.history.events.TaskCancel;
import org.jbpm.pvm.internal.history.events.TaskComplete;
import org.jbpm.pvm.internal.history.events.TaskStart;
@@ -52,16 +58,15 @@
import org.jbpm.pvm.internal.wire.WireContext;
/**
- * is one task instance that can be assigned to an actor (read: put in
- * someones task list) and that can trigger the continuation of execution
- * of the token upon completion.
+ * is one task instance that can be assigned to an actor (read: put in someone's task list) and that
+ * can trigger the continuation of execution of the token upon completion.
*/
public class TaskImpl extends ScopeInstanceImpl implements Serializable, OpenTask, Assignable {
private static final long serialVersionUID = 1L;
-
+
// private static Log log = Log.getLog(TaskImpl.class.getName());
-
+
private static final TaskHandler DEFAULT_TASK_HANDLER = new TaskHandler();
protected String name;
@@ -85,48 +90,66 @@
protected String taskDefinitionName;
protected TaskDefinitionImpl taskDefinition;
-
+
protected ExecutionImpl execution;
protected ExecutionImpl processInstance;
protected SwimlaneImpl swimlane;
-
+
protected TaskImpl superTask;
protected Set<TaskImpl> subTasks;
-
+
protected Long executionDbid;
protected Long superTaskDbid;
public TaskImpl() {
}
-
+
// parent for variable lookup ///////////////////////////////////////////////
public ScopeInstanceImpl getParentVariableScope() {
return execution;
}
-
+
// assignment ///////////////////////////////////////////////////////////////
-
+
public void take(String userId) {
- if (assignee!=null) {
- throw new JbpmException("task already taken by "+this.assignee);
+ if (assignee != null) {
+ throw new JbpmException("task already taken by " + this.assignee);
}
setAssignee(userId, true);
}
-
+
public void setAssignee(String userId) {
- this.assignee = userId;
+ setAssignee(userId, false);
}
public void setAssignee(String userId, boolean propagateToSwimlane) {
this.assignee = userId;
+ notifyAssignee();
if (propagateToSwimlane) {
propagateAssigneeToSwimlane();
}
}
+ protected void notifyAssignee() {
+ if (taskDefinition == null) return;
+
+ MailProducer mailProducer = taskDefinition.getNotificationMailProducer();
+ if (mailProducer == null) return;
+
+ // TODO how to insert predefined variables cleanly?
+ execution.setVariable("task", this);
+ try {
+ Collection<Message> messages = mailProducer.produce(execution);
+ Environment.getFromCurrent(MailSession.class).send(messages);
+ }
+ finally {
+ execution.removeVariable("task");
+ }
+ }
+
protected void propagateAssigneeToSwimlane() {
- if (swimlane!=null) {
+ if (swimlane != null) {
swimlane.setAssignee(assignee);
}
}
@@ -135,7 +158,7 @@
// TODO: Why does it return the impl. not the interface?
public Set<ParticipationImpl> getParticipations() {
- if (participations ==null) {
+ if (participations == null) {
return Collections.emptySet();
}
return participations;
@@ -143,17 +166,18 @@
public Set<ParticipationImpl> getAllParticipants() {
Set<ParticipationImpl> allRoles = null;
- if (participations !=null) {
+ if (participations != null) {
allRoles = new HashSet<ParticipationImpl>(participations);
- } else {
+ }
+ else {
allRoles = new HashSet<ParticipationImpl>();
}
- if (swimlane!=null) {
- allRoles.addAll((Set)swimlane.getParticipations());
+ if (swimlane != null) {
+ allRoles.addAll((Set) swimlane.getParticipations());
}
return allRoles;
}
-
+
public void addCandidateGroup(String groupId) {
addParticipation(null, groupId, Participation.CANDIDATE);
}
@@ -165,10 +189,10 @@
public Participation addParticipation(String userId, String groupId, String type) {
return addParticipant(new ParticipationImpl(userId, groupId, type));
}
-
+
private Participation addParticipant(ParticipationImpl participation) {
participation.setTask(this);
- if (participations ==null) {
+ if (participations == null) {
participations = new HashSet<ParticipationImpl>();
}
participations.add(participation);
@@ -176,16 +200,14 @@
}
public void removeParticipant(ParticipationImpl participation) {
- if (participation==null) {
+ if (participation == null) {
throw new JbpmException("participant is null");
}
- if ( (participations !=null)
- && (participations.remove(participation))
- ) {
+ if ((participations != null) && (participations.remove(participation))) {
participation.setTask(null);
}
}
-
+
// completion ///////////////////////////////////////////////////////////////
public void complete() {
@@ -194,7 +216,7 @@
public void complete(String outcome) {
getTaskHandler().taskComplete(this, outcome);
- if (superTask!=null) {
+ if (superTask != null) {
superTask.subTaskComplete(this, outcome);
}
}
@@ -206,23 +228,21 @@
public void cancel(String reason) {
getTaskHandler().taskCancel(this, reason);
}
-
+
// state ////////////////////////////////////////////////////////////////////
-
+
public boolean isCompleted() {
if (Task.STATE_COMPLETED.equals(state)) {
return true;
}
- if ( (Task.STATE_OPEN.equals(state))
- || (Task.STATE_SUSPENDED.equals(state))
- ) {
+ if ((Task.STATE_OPEN.equals(state)) || (Task.STATE_SUSPENDED.equals(state))) {
return false;
}
return true;
}
// variables ////////////////////////////////////////////////////////////////
-
+
public void setVariable(String key, Object value) {
super.setVariable(key, value);
getTaskHandler().taskVariableUpdate(this, key, value);
@@ -231,14 +251,14 @@
// comments /////////////////////////////////////////////////////////////////
public List<Comment> getComments() {
- if (comments==null) {
+ if (comments == null) {
return Collections.emptyList();
}
return (List) comments;
}
public Comment createComment(String commentText) {
- if (comments==null) {
+ if (comments == null) {
comments = new ArrayList<CommentImpl>();
}
CommentImpl comment = new CommentImpl(commentText);
@@ -247,18 +267,18 @@
}
public void removeComment(Comment comment) {
- if (comment==null) {
+ if (comment == null) {
throw new JbpmException("comment is null");
}
- if (comments!=null) {
+ if (comments != null) {
comments.remove(comment);
}
}
-
+
// subtasks /////////////////////////////////////////////////////////////////
-
+
public Set<Task> getSubTasks() {
- if (subTasks==null) {
+ if (subTasks == null) {
return Collections.emptySet();
}
return (Set) subTasks;
@@ -267,7 +287,7 @@
public TaskImpl createSubTask() {
TaskDbSession taskDbSession = Environment.getFromCurrent(TaskDbSession.class);
TaskImpl subTask = (TaskImpl) taskDbSession.createTask();
- if (subTasks==null) {
+ if (subTasks == null) {
subTasks = new HashSet<TaskImpl>();
}
addSubTask(subTask);
@@ -281,9 +301,9 @@
subtask.setName(name);
return subtask;
}
-
+
public TaskImpl addSubTask(TaskImpl subtask) {
- if (subTasks==null) {
+ if (subTasks == null) {
subTasks = new HashSet<TaskImpl>();
}
subtask.setSuperTask(this);
@@ -292,211 +312,242 @@
}
public void removeSubTask(Task subtask) {
- if (subtask==null) {
+ if (subtask == null) {
throw new JbpmException("subtask is null");
}
- if ( (subTasks!=null)
- && (subTasks.remove(subtask))
- ) {
- ((TaskImpl)subtask).setSuperTask(null);
+ if ((subTasks != null) && (subTasks.remove(subtask))) {
+ ((TaskImpl) subtask).setSuperTask(null);
}
}
-
+
// equals ///////////////////////////////////////////////////////////////////
// hack to support comparing hibernate proxies against the real objects
// since this always falls back to ==, we don't need to overwrite the hashcode
public boolean equals(Object o) {
return EqualsUtil.equals(this, o);
}
-
+
public String toString() {
- return "Task("+name+")";
+ return "Task(" + name + ")";
}
public String getLifeCycleResource() {
// the default lifecycle can be overridden in subclasses
return "jbpm.task.lifecycle.xml";
}
-
+
// modified getters and setters /////////////////////////////////////////////
public void setProgress(Integer progress) {
- if ( (progress<0)
- || (progress>100)
- ) {
- throw new JbpmException("task progress is a percentage (integer) and must be expressed between 0 and 100");
+ if ((progress < 0) || (progress > 100)) {
+ throw new JbpmException(
+ "task progress is a percentage (integer) and must be expressed between 0 and 100");
}
this.progress = progress;
}
public boolean isPersisted() {
- return dbid!=0;
+ return dbid != 0;
}
public void cancelExecution(String signal) {
- if (execution!=null){
+ if (execution != null) {
execution.end("cancel");
}
}
+ public void historyTaskStart() {
+ if (execution != null) {
+ execution.fireHistoryEvent(new TaskStart(this));
+ }
+ }
+
+ public void historyTaskAssign(String userId) {
+ if (execution != null) {
+ execution.fireHistoryEvent(new TaskAssign(userId));
+ }
+ }
+
public void historyTaskCancel(String reason) {
- if (execution!=null){
+ if (execution != null) {
execution.fireHistoryEvent(new TaskCancel(reason));
}
}
public void historyTaskComplete(String outcome) {
- if (execution!=null){
+ if (execution != null) {
execution.fireHistoryEvent(new TaskComplete(outcome));
}
}
- public void historyTaskStart() {
- if (execution!=null){
- execution.fireHistoryEvent(new TaskStart(this));
- }
- }
-
public void signalExecution(String signalName) {
- if (execution!=null){
+ if (execution != null) {
execution.signal(signalName);
}
}
public TaskHandler getTaskHandler() {
- if ( (getTaskDefinition()==null)
- || (taskDefinition.getTaskHandlerDescriptor()==null)
- ) {
+ if ((getTaskDefinition() == null) || (taskDefinition.getTaskHandlerDescriptor() == null)) {
return DEFAULT_TASK_HANDLER;
}
-
+
TaskHandler taskHandler = (TaskHandler) WireContext.create(taskDefinition.getTaskHandlerDescriptor());
return taskHandler;
}
-
+
// special getters and setters //////////////////////////////////////////////
-
+
public TaskDefinitionImpl getTaskDefinition() {
- if ( (taskDefinition==null)
- && (taskDefinitionName!=null)
- && (execution!=null)
- ) {
+ if ((taskDefinition == null) && (taskDefinitionName != null) && (execution != null)) {
ProcessDefinitionImpl processDefinition = execution.getProcessDefinition();
taskDefinition = processDefinition.getTaskDefinition(taskDefinitionName);
}
-
+
return taskDefinition;
}
-
+
public void setTaskDefinition(TaskDefinitionImpl taskDefinition) {
this.taskDefinition = taskDefinition;
this.taskDefinitionName = taskDefinition.getName();
}
-
// getters and setters //////////////////////////////////////////////////////
-
+
public long getDbid() {
return dbid;
}
+
public String getName() {
return name;
}
+
public void setName(String name) {
this.name = name;
}
+
public String getDescription() {
return description;
}
+
public void setDescription(String description) {
this.description = description;
}
+
public int getPriority() {
return priority;
}
+
public void setPriority(int priority) {
this.priority = priority;
}
+
public void setComments(List<CommentImpl> comments) {
this.comments = comments;
}
+
public Date getCreate() {
return create;
}
+
public void setCreate(Date create) {
this.create = create;
}
+
public Date getDueDate() {
return dueDate;
}
+
public void setDueDate(Date dueDate) {
this.dueDate = dueDate;
}
+
public ExecutionImpl getExecution() {
return execution;
}
+
public void setExecution(Execution execution) {
this.execution = (ExecutionImpl) execution;
}
+
public String getState() {
return state;
}
+
public String getAssignee() {
return assignee;
}
+
public Swimlane getSwimlane() {
return swimlane;
}
+
public void setSwimlane(SwimlaneImpl swimlane) {
this.swimlane = swimlane;
}
+
public TaskImpl getSuperTask() {
return superTask;
}
+
public void setSuperTask(TaskImpl superTask) {
this.superTask = superTask;
}
+
public Integer getProgress() {
return progress;
}
+
public Long getExecutionDbid() {
return executionDbid;
}
+
public void setExecutionDbid(Long executionDbid) {
this.executionDbid = executionDbid;
}
+
public Long getSuperTaskDbid() {
return superTaskDbid;
}
+
public void setSuperTaskDbid(Long parentTaskDbid) {
this.superTaskDbid = parentTaskDbid;
}
+
public void setParticipations(Set<ParticipationImpl> participations) {
this.participations = participations;
}
+
public void setState(String state) {
this.state = state;
}
+
public void setExecution(ExecutionImpl execution) {
this.execution = execution;
}
+
public void setSubTasks(Set<TaskImpl> subTasks) {
this.subTasks = subTasks;
}
+
public ExecutionImpl getProcessInstance() {
return processInstance;
}
+
public void setProcessInstance(ExecutionImpl processInstance) {
this.processInstance = processInstance;
}
+
public boolean isSignalling() {
return isSignalling;
}
+
public void setSignalling(boolean isSignalling) {
this.isSignalling = isSignalling;
}
+
public String getForm() {
return form;
}
+
public void setForm(String form) {
this.form = form;
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/XmlUtil.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/XmlUtil.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/XmlUtil.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -247,14 +247,11 @@
}
public static boolean isTextOnly(Element element) {
- boolean isTextOnly = true;
- NodeList activityList = element.getChildNodes();
- for (int i = 0; ((i < activityList.getLength()) && (isTextOnly)); i++) {
- if (Element.class.isAssignableFrom(activityList.item(i).getClass())) {
- isTextOnly = false;
- }
+ for (Node child = element.getFirstChild(); child != null; child = child.getNextSibling()) {
+ if (child.getNodeType() == Node.ELEMENT_NODE)
+ return false;
}
- return isTextOnly;
+ return true;
}
public static List<Attr> attributes(Element element) {
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MailTemplateBinding.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MailTemplateBinding.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MailTemplateBinding.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -47,7 +47,7 @@
public Object parse(Element element, Parse parse, Parser parser) {
// MailTemplateRegistry is added to the WireDescriptor with a ProvidedObjectDescriptor
// The MailTemplateRegistry descriptor is lazy initialized by this binding
- // mail-templates will add a MailTemplate to the MailTemplateRegistry
+ // mail-template will add a MailTemplate to the MailTemplateRegistry
ProvidedObjectDescriptor templateRegistryDescriptor;
MailTemplateRegistry templateRegistry;
@@ -57,7 +57,6 @@
if (templateRegistryDescriptorName != null) {
templateRegistryDescriptor = (ProvidedObjectDescriptor) wireDefinition.getDescriptor(templateRegistryDescriptorName);
templateRegistry = (MailTemplateRegistry) templateRegistryDescriptor.getProvidedObject();
- templateRegistryDescriptor = null; // setting it to null so that the wire parser doesn't add it to the wiredefinition again
}
else {
templateRegistry = new MailTemplateRegistry();
@@ -65,21 +64,21 @@
}
// create the mail template and add it to the registry
- MailTemplate mailTemplate = parseMailTemplate(element, parse, parser);
+ MailTemplate mailTemplate = parseMailTemplate(element, parse);
String templateName = XmlUtil.attribute(element, "name", true, parse);
templateRegistry.addTemplate(templateName, mailTemplate);
return templateRegistryDescriptor;
}
- public MailTemplate parseMailTemplate(Element element, Parse parse, Parser parser) {
+ public static MailTemplate parseMailTemplate(Element element, Parse parse) {
MailTemplate mailTemplate = new MailTemplate();
mailTemplate.setLanguage(XmlUtil.attribute(element, "language"));
- mailTemplate.setFrom(parseRecipientTemplate(element, "from", parse, parser));
- mailTemplate.setTo(parseRecipientTemplate(element, "to", parse, parser));
- mailTemplate.setCc(parseRecipientTemplate(element, "cc", parse, parser));
- mailTemplate.setBcc(parseRecipientTemplate(element, "bcc", parse, parser));
+ mailTemplate.setFrom(parseRecipientTemplate(element, "from", parse));
+ mailTemplate.setTo(parseRecipientTemplate(element, "to", parse));
+ mailTemplate.setCc(parseRecipientTemplate(element, "cc", parse));
+ mailTemplate.setBcc(parseRecipientTemplate(element, "bcc", parse));
Element subjectElement = XmlUtil.element(element, "subject");
if (subjectElement != null) {
@@ -117,15 +116,22 @@
return mailTemplate;
}
- protected AddressTemplate parseRecipientTemplate(Element element, String tagName, Parse parse,
- Parser parser) {
+ private static AddressTemplate parseRecipientTemplate(Element element, String tagName, Parse parse) {
Element recipientElement = XmlUtil.element(element, tagName);
if (recipientElement == null) return null;
+ String addresses = XmlUtil.attribute(recipientElement, "addresses");
+ String users = XmlUtil.attribute(recipientElement, "users");
+ String groups = XmlUtil.attribute(recipientElement, "groups");
+
+ if (addresses == null && users == null && groups == null) {
+ parse.addProblem(tagName + " does not specify any recipient", element);
+ }
+
AddressTemplate addressTemplate = new AddressTemplate();
- addressTemplate.setAddresses(XmlUtil.attribute(recipientElement, "addresses"));
- addressTemplate.setUsers(XmlUtil.attribute(recipientElement, "users"));
- addressTemplate.setGroups(XmlUtil.attribute(recipientElement, "groups"));
+ addressTemplate.setAddresses(addresses);
+ addressTemplate.setUsers(users);
+ addressTemplate.setGroups(groups);
return addressTemplate;
}
}
Modified: jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/activities/WaitState.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/activities/WaitState.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/activities/WaitState.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -39,7 +39,7 @@
public void signal(ActivityExecution execution,
String signalName,
- Map<String, Object> parameters) {
+ Map<String, ?> parameters) {
execution.setVariables(parameters);
execution.take(signalName);
}
Modified: jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/executionmode/embedded/WaitState.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/executionmode/embedded/WaitState.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/executionmode/embedded/WaitState.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -40,7 +40,7 @@
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) throws Exception {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception {
execution.take(signalName);
}
}
\ No newline at end of file
Modified: jbpm4/trunk/modules/test-load/src/test/java/org/jbpm/test/load/async/ExclusiveMessagesTest.java
===================================================================
--- jbpm4/trunk/modules/test-load/src/test/java/org/jbpm/test/load/async/ExclusiveMessagesTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-load/src/test/java/org/jbpm/test/load/async/ExclusiveMessagesTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -92,7 +92,7 @@
public void execute(ActivityExecution execution) throws Exception {
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) throws Exception {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception {
execution.take(signalName);
}
}
Modified: jbpm4/trunk/modules/test-load/src/test/java/org/jbpm/test/load/async/WaitState.java
===================================================================
--- jbpm4/trunk/modules/test-load/src/test/java/org/jbpm/test/load/async/WaitState.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-load/src/test/java/org/jbpm/test/load/async/WaitState.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -40,7 +40,7 @@
ContinuationTest.recorder.record(execution.getId(), "execute("+execution.getActivity().getName()+")");
}
- public void signal(ActivityExecution execution, String signal, Map<String, Object> parameters) throws Exception {
+ public void signal(ActivityExecution execution, String signal, Map<String, ?> parameters) throws Exception {
throw new UnsupportedOperationException();
}
}
\ No newline at end of file
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/AutomaticDecisionTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/AutomaticDecisionTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/AutomaticDecisionTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -60,7 +60,7 @@
public void execute(ActivityExecution execution) {
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) {
execution.take(signalName);
}
}
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/BasicExecutionFlowTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/BasicExecutionFlowTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/BasicExecutionFlowTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -64,7 +64,7 @@
events.add("execute["+execution.getActivityName()+"]");
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) throws Exception {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception {
events.add("signal["+execution.getActivityName()+"]");
execution.take(signalName);
}
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/EventTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/EventTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/EventTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -170,7 +170,7 @@
public void execute(ActivityExecution execution) throws Exception {
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signal, Map<String, Object> parameters) throws Exception {
+ public void signal(ActivityExecution execution, String signal, Map<String, ?> parameters) throws Exception {
Activity activity = execution.getActivity();
if ( (signal!=null)
&& (activity!=null)
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExceptionHandlerTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExceptionHandlerTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExceptionHandlerTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -44,7 +44,7 @@
public void execute(ActivityExecution execution) {
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters){
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters){
}
}
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExecutionStateTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExecutionStateTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExecutionStateTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -70,7 +70,7 @@
assertEquals(Execution.STATE_ACTIVE_ROOT, execution.getState());
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) {
assertEquals(Execution.STATE_ACTIVE_ROOT, execution.getState());
execution.take(signalName);
}
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExternalDecisionTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExternalDecisionTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExternalDecisionTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -42,7 +42,7 @@
public void execute(ActivityExecution execution) throws Exception {
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) throws Exception {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception {
execution.take(signalName);
}
}
@@ -52,7 +52,7 @@
public void execute(ActivityExecution execution) {
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) {
execution.take(signalName);
}
}
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/FunctionalActivityTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/FunctionalActivityTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/FunctionalActivityTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -141,7 +141,7 @@
Activity nestedActivity = execution.getActivity().getActivities().get(0);
execution.execute(nestedActivity);
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) {
}
}
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/LoopingTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/LoopingTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/LoopingTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -45,7 +45,7 @@
}
}
}
- public void signal(ActivityExecution execution, String signal, Map<String, Object> parameters) throws Exception {
+ public void signal(ActivityExecution execution, String signal, Map<String, ?> parameters) throws Exception {
throw new UnsupportedOperationException();
}
@@ -77,7 +77,7 @@
public void execute(ActivityExecution execution) {
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters){
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters){
}
}
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeStateTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeStateTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeStateTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -51,7 +51,7 @@
assertEquals(Execution.STATE_ACTIVE_ROOT, execution.getState());
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) throws Exception {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception {
assertEquals(Execution.STATE_ACTIVE_ROOT, execution.getState());
execution.take(signalName);
}
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeVariableDeclarationTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeVariableDeclarationTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeVariableDeclarationTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -45,7 +45,7 @@
public void execute(ActivityExecution execution) {
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) {
execution.take(signalName);
}
}
@@ -56,7 +56,7 @@
Activity child = execution.getActivity().getActivities().get(0);
execution.execute(child);
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) {
}
}
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeVariableTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeVariableTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeVariableTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -23,7 +23,6 @@
import java.util.Map;
-import org.jbpm.api.JbpmException;
import org.jbpm.api.activity.ActivityExecution;
import org.jbpm.api.activity.ExternalActivityBehaviour;
import org.jbpm.api.client.ClientExecution;
@@ -50,7 +49,7 @@
public void execute(ActivityExecution execution) {
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) {
execution.take(signalName);
}
}
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/SubProcessTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/SubProcessTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/SubProcessTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -51,7 +51,7 @@
execution.waitForSignal();
}
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) throws Exception {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception {
}
}
@@ -66,11 +66,12 @@
public void execute(ActivityExecution execution) {
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters){
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters){
}
}
public static class EndState implements ActivityBehaviour {
+ private static final long serialVersionUID = 1L;
public void execute(ActivityExecution execution) throws Exception {
execution.end();
}
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/VariableTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/VariableTest.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/VariableTest.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -44,7 +44,7 @@
public void execute(ActivityExecution execution) {
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters){
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters){
}
}
@@ -195,7 +195,7 @@
execution.setVariable("message", "Killroy was here");
execution.waitForSignal();
}
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) {
}
}
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/WaitState.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/WaitState.java 2009-05-20 21:27:46 UTC (rev 4864)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/WaitState.java 2009-05-21 06:16:03 UTC (rev 4865)
@@ -39,6 +39,6 @@
public void signal(ActivityExecution execution,
String signalName,
- Map<String, Object> parameters) {
+ Map<String, ?> parameters) {
}
}
More information about the jbpm-commits
mailing list