[jbpm-commits] JBoss JBPM SVN: r6123 - in jbpm4/trunk/modules: examples/src/test/resources/org/jbpm and 9 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Fri Jan 22 22:37:00 EST 2010
Author: alex.guizar at jboss.com
Date: 2010-01-22 22:37:00 -0500 (Fri, 22 Jan 2010)
New Revision: 6123
Added:
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/task/TaskDueDateTest.java
Removed:
jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/bpmn/usertask/
jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/test/
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/cache/
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/cfg/
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/subprocess/
Modified:
jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/timer/event/TimerEventTest.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/jpdl/src/test/java/org/jbpm/jpdl/parsing/TaskParsingTest.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/TimerImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskDefinitionImpl.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/timer/TimerTest.java
Log:
JBPM-2560: factor out due date calculation, test task due date
Modified: jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/timer/event/TimerEventTest.java
===================================================================
--- jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/timer/event/TimerEventTest.java 2010-01-22 11:51:41 UTC (rev 6122)
+++ jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/timer/event/TimerEventTest.java 2010-01-23 03:37:00 UTC (rev 6123)
@@ -22,7 +22,7 @@
package org.jbpm.examples.timer.event;
import java.util.ArrayList;
-import java.util.HashSet;
+import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -30,7 +30,6 @@
import org.jbpm.api.job.Job;
import org.jbpm.test.JbpmTestCase;
-
/**
* @author Tom Baeyens
*/
@@ -63,8 +62,7 @@
processInstance = executionService.findProcessInstanceById(processInstance.getId());
- Set<String> expectedActivityNames = new HashSet<String>();
- expectedActivityNames.add("guardedWait");
+ Set<String> expectedActivityNames = Collections.singleton("guardedWait");
assertEquals(expectedActivityNames, processInstance.findActiveActivityNames());
assertEquals(Boolean.TRUE, executionService.getVariable(processInstance.getId(), "escalation"));
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 2010-01-22 11:51:41 UTC (rev 6122)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java 2010-01-23 03:37:00 UTC (rev 6123)
@@ -21,19 +21,19 @@
*/
package org.jbpm.jpdl.internal.activity;
-import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.jbpm.api.JbpmException;
import org.jbpm.api.activity.ActivityExecution;
import org.jbpm.api.model.Transition;
-import org.jbpm.pvm.internal.cal.BusinessCalendar;
import org.jbpm.pvm.internal.env.EnvironmentImpl;
import org.jbpm.pvm.internal.history.HistoryEvent;
import org.jbpm.pvm.internal.history.events.TaskActivityStart;
+import org.jbpm.pvm.internal.job.TimerImpl;
import org.jbpm.pvm.internal.model.ActivityImpl;
import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.pvm.internal.script.ScriptManager;
import org.jbpm.pvm.internal.session.DbSession;
import org.jbpm.pvm.internal.task.ParticipationImpl;
import org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl;
@@ -42,9 +42,9 @@
import org.jbpm.pvm.internal.task.TaskDefinitionImpl;
import org.jbpm.pvm.internal.task.TaskImpl;
-
/**
* @author Tom Baeyens
+ * @author Alejandro Guizar
*/
public class TaskActivity extends JpdlExternalActivity {
@@ -71,14 +71,21 @@
task.setName(execution.getActivityName());
}
- task.setDescription(taskDefinition.getDescription());
+ String description = taskDefinition.getDescription();
+ if (description != null) {
+ if (description.contains("#{")) {
+ Object result = ScriptManager.getScriptManager().evaluateExpression(description, null);
+ description = result instanceof String ? (String) result : result.toString();
+ }
+ task.setDescription(description);
+ }
task.setPriority(taskDefinition.getPriority());
task.setFormResourceName(taskDefinition.getFormResourceName());
// calculate the due date of the task based on the due date duration
- if (taskDefinition.getDueDateDuration() != null) {
- BusinessCalendar businessCalendar = EnvironmentImpl.getFromCurrent(BusinessCalendar.class);
- task.setDuedate(businessCalendar.add(task.getCreateTime(), taskDefinition.getDueDateDuration()));
+ String dueDateDescription = taskDefinition.getDueDateDescription();
+ if (dueDateDescription != null) {
+ task.setDuedate(TimerImpl.calculateDueDate(dueDateDescription));
}
// save task so that TaskDbSession.findTaskByExecution works for assign event listeners
@@ -147,7 +154,6 @@
if (transition==null) { // no unnamed transition found
if (signalName == null) {
-
// null was explicitely given as outcome
throw new JbpmException("No unnamed transitions were found for the task '" + getTaskDefinition().getName() + "'");
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 2010-01-22 11:51:41 UTC (rev 6122)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java 2010-01-23 03:37:00 UTC (rev 6123)
@@ -528,7 +528,7 @@
taskDefinition.setFormResourceName(form);
String duedate = XmlUtil.attribute(element, "duedate");
- taskDefinition.setDueDateDuration(duedate);
+ taskDefinition.setDueDateDescription(duedate);
Integer priority = XmlUtil.attributeInteger(element, "priority", false, parse);
if (priority != null) {
Modified: jbpm4/trunk/modules/jpdl/src/test/java/org/jbpm/jpdl/parsing/TaskParsingTest.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/test/java/org/jbpm/jpdl/parsing/TaskParsingTest.java 2010-01-22 11:51:41 UTC (rev 6122)
+++ jbpm4/trunk/modules/jpdl/src/test/java/org/jbpm/jpdl/parsing/TaskParsingTest.java 2010-01-23 03:37:00 UTC (rev 6123)
@@ -9,19 +9,16 @@
public class TaskParsingTest extends JpdlParseTestCase {
- public static final String PROCESS = "<process name='Test Task Parsing'>"
- + " <start>"
- + " <transition to='t1' />"
- + " </start>"
- + " <task name='t1' duedate='1 day' priority='3' form='aForm'>"
- + " <description>first task</description>"
- + " <transition to='end' />"
- + " </task>"
- + " <end name='end' />"
- + "</process>";
-
public void testTaskParse() {
- ClientProcessDefinition definition = parse(PROCESS);
+ ClientProcessDefinition definition = parse(
+ "<process name='task parse'>" +
+ " <start>" +
+ " <transition to='t1' />" +
+ " </start>" +
+ " <task name='t1' duedate='1 day' priority='3' form='aForm'>" +
+ " <description>first task</description>" +
+ " </task>" +
+ "</process>");
Activity activity = definition.findActivity("t1");
assert activity instanceof ActivityImpl : activity.getClass();
@@ -37,7 +34,6 @@
assertEquals("first task", taskDefinition.getDescription());
assertEquals(3, taskDefinition.getPriority());
assertEquals("aForm", taskDefinition.getFormResourceName());
- assertEquals("1 day", taskDefinition.getDueDateDuration());
+ assertEquals("1 day", taskDefinition.getDueDateDescription());
}
-
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/TimerImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/TimerImpl.java 2010-01-22 11:51:41 UTC (rev 6122)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/TimerImpl.java 2010-01-23 03:37:00 UTC (rev 6123)
@@ -21,9 +21,12 @@
*/
package org.jbpm.pvm.internal.job;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.jbpm.api.JbpmException;
import org.jbpm.api.cmd.Environment;
@@ -41,11 +44,9 @@
import org.jbpm.pvm.internal.tx.Transaction;
import org.jbpm.pvm.internal.util.Clock;
-/** a runtime timer instance.
+/**
+ * a runtime timer instance.
*
- * <p>Timers can be
- * </p>
- *
* @author Tom Baeyens
* @author Pascal Verdage
* @author Alejandro Guizar
@@ -56,7 +57,11 @@
private static final long serialVersionUID = 1L;
private static final Log log = Log.getLog(TimerImpl.class.getName());
- private final static String dateFormat = "yyyy-MM-dd HH:mm:ss,SSS";
+ private final static String dateFormat = "yyyy-MM-dd HH:mm:ss";
+ private static final Pattern dateDurationPattern = Pattern.compile("\\s*(#\\{.+\\})\\s*"
+ + "(?:(\\+|-)\\s*(\\d+\\s+(?:business\\s+)?\\w+))?\\s*");
+ private static final Pattern durationPattern = Pattern.compile("\\s*(\\d+\\s+(?:business\\s+)?"
+ + "\\w+)\\s*");
protected String signalName;
protected String eventName;
@@ -73,60 +78,59 @@
timerSession.schedule(this);
}
- public void setDueDateDescription(String dueDateDescription) {
- if (dueDateDescription != null) {
- ScriptManager scriptManager = ScriptManager.getScriptManager();
+ public void setDueDateDescription(String dueDateDescription) {
+ if (dueDateDescription != null) {
+ duedate = calculateDueDate(dueDateDescription);
+ }
+ }
- Date baseDate;
- String durationString = null;
- char durationSeparator = '+'; // needs to be initialized
-
- if (dueDateDescription.startsWith("#")) {
-
- String baseDateEL = dueDateDescription.substring(0, dueDateDescription.indexOf("}") + 1);
- Object result = scriptManager.evaluateExpression(baseDateEL, null);
+ public static Date calculateDueDate(String dueDateDescription) {
+ Date dueDate;
+ // is due date description in date_expression +|- fixed_duration format?
+ Matcher dateDurationMatcher = dateDurationPattern.matcher(dueDateDescription);
+ if (dateDurationMatcher.matches()) {
+ // evaluate date expression
+ String dateExpression = dateDurationMatcher.group(1);
+ Object result = ScriptManager.getScriptManager().evaluateExpression(dateExpression, null);
+ // convert result to Date
+ if (result instanceof Date) {
+ dueDate = (Date) result;
+ } else if (result instanceof Calendar) {
+ Calendar calendar = (Calendar) result;
+ dueDate = calendar.getTime();
+ } else if (result instanceof String) {
+ try {
+ // TODO use a locale-sensitive date format?
+ dueDate = new SimpleDateFormat(dateFormat).parse((String) result);
+ } catch (ParseException e) {
+ throw new JbpmException("invalid base date: " + result, e);
+ }
+ } else {
+ throw new JbpmException("invalid base date: " + result);
+ }
- if (result instanceof Date) {
- baseDate = (Date)result;
- }
- else if (result instanceof Calendar) {
- baseDate = ((Calendar)result).getTime();
- } else {
- throw new JbpmException("Invalid basedate type: " + baseDateEL + " is of type " + result.getClass().getName()
- + ". Only Date and Calendar are supported");
- }
-
- int endOfELIndex = dueDateDescription.indexOf("}");
- if (endOfELIndex < (dueDateDescription.length() - 1)) {
- durationSeparator = dueDateDescription.substring(endOfELIndex + 1).trim().charAt(0);
- if (durationSeparator != '+' && durationSeparator != '-') {
- throw new JbpmException("Invalid duedate, + or - missing after EL");
- }
- durationString = dueDateDescription.substring(endOfELIndex + 1).substring(2).trim();
- log.debug("durationString: " + durationString);
- }
-
- } else {
-
- baseDate = Clock.getCurrentTime();
- durationString = dueDateDescription;
-
- }
-
- if (durationString == null || durationString.length() == 0) {
- duedate = baseDate;
- } else {
- if (durationString.contains("business") && durationSeparator == '-') {
- throw new JbpmException("Invalid duedate, subtraction ('-') not supported if duedate contains 'business'");
- }
- BusinessCalendar businessCalendar = EnvironmentImpl.getFromCurrent(BusinessCalendar.class);
- if (durationSeparator == '+') {
- duedate = businessCalendar.add(baseDate, durationString);
- } else {
- duedate = businessCalendar.subtract(baseDate, durationString);
- }
- }
- }
+ // fixed duration is optional
+ String operationString = dateDurationMatcher.group(2);
+ if (operationString != null) {
+ char operation = operationString.charAt(0);
+ String duration = dateDurationMatcher.group(3);
+ // add duration to base date
+ BusinessCalendar businessCalendar = EnvironmentImpl.getFromCurrent(BusinessCalendar.class);
+ dueDate = operation == '+' ? businessCalendar.add(dueDate, duration)
+ : businessCalendar.subtract(dueDate, duration);
+ }
+ } else {
+ // is due date description in fixed_duration format?
+ Matcher durationMatcher = durationPattern.matcher(dueDateDescription);
+ if (durationMatcher.matches()) {
+ // add duration to current date
+ dueDate = EnvironmentImpl.getFromCurrent(BusinessCalendar.class).add(
+ Clock.getCurrentTime(), durationMatcher.group(1));
+ } else {
+ throw new JbpmException("invalid due date duration: " + dueDateDescription);
+ }
+ }
+ return dueDate;
}
public Boolean execute(Environment environment) throws Exception {
@@ -190,16 +194,14 @@
StringBuilder text = new StringBuilder();
text.append("timer[");
text.append(dbid);
- if (duedate!=null) {
- text.append("|");
- text.append(formatDueDate(duedate));
+ if (duedate != null) {
+ text.append('|').append(formatDueDate(duedate));
}
- if (signalName!=null) {
- text.append("|");
- text.append(signalName);
+ if (signalName != null) {
+ text.append('|').append(signalName);
}
- if (eventName!=null) {
- text.append("|");
+ if (eventName != null) {
+ text.append('|');
text.append(eventName);
}
text.append("]");
@@ -207,7 +209,7 @@
}
public static String formatDueDate(Date date) {
- return new SimpleDateFormat(dateFormat).format(date);
+ return new SimpleDateFormat(dateFormat).format(date);
}
public String getSignalName() {
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 2010-01-22 11:51:41 UTC (rev 6122)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskDefinitionImpl.java 2010-01-23 03:37:00 UTC (rev 6123)
@@ -34,7 +34,7 @@
private static final long serialVersionUID = 1L;
- protected String dueDateDuration;
+ protected String dueDateDescription;
protected String formResourceName;
protected List<TaskDefinitionImpl> subTaskDefinitions = new ArrayList<TaskDefinitionImpl>();
protected int priority = Priority.NORMAL;
@@ -58,11 +58,11 @@
public void setSwimlaneDefinition(SwimlaneDefinitionImpl swimlaneDefinition) {
this.swimlaneDefinition = swimlaneDefinition;
}
- public String getDueDateDuration() {
- return dueDateDuration;
+ public String getDueDateDescription() {
+ return dueDateDescription;
}
- public void setDueDateDuration(String dueDateDuration) {
- this.dueDateDuration = dueDateDuration;
+ public void setDueDateDescription(String dueDateDescription) {
+ this.dueDateDescription = dueDateDescription;
}
public String getFormResourceName() {
return formResourceName;
Added: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/task/TaskDueDateTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/task/TaskDueDateTest.java (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/task/TaskDueDateTest.java 2010-01-23 03:37:00 UTC (rev 6123)
@@ -0,0 +1,134 @@
+/*
+ * 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.test.task;
+
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.jbpm.api.task.Task;
+import org.jbpm.pvm.internal.util.Clock;
+import org.jbpm.test.JbpmTestCase;
+
+/**
+ * Exercises for various ways to define the deadline of a task.
+ *
+ * @see <a href="https://jira.jboss.org/jira/browse/JBPM-2560">JBPM-2560</a>
+ * @author Alejandro Guizar
+ */
+public class TaskDueDateTest extends JbpmTestCase {
+
+ public void testBaseDate() {
+ deployJpdlXmlString(
+ "<process name='BaseDate'>" +
+ " <start><transition to='t'/></start>" +
+ " <task name='t' duedate='#{tomorrow}'/>" +
+ "</process>");
+
+ Calendar tomorrow = Calendar.getInstance();
+ tomorrow.add(Calendar.DATE, 1);
+ Map<String, ? > variables = Collections.singletonMap("tomorrow", tomorrow);
+ String processInstanceId = executionService.startProcessInstanceByKey("BaseDate", variables)
+ .getId();
+
+ List<Task> taskList = taskService.createTaskQuery()
+ .processInstanceId(processInstanceId)
+ .list();
+ assertEquals(1, taskList.size());
+
+ Task task = taskList.get(0);
+ assertEquals(tomorrow.getTime(), task.getDuedate());
+ }
+
+ public void testBaseDatePlusDuration() {
+ deployJpdlXmlString(
+ "<process name='BaseDatePlusDuration'>" +
+ " <start><transition to='t'/></start>" +
+ " <task name='t' duedate='#{tomorrow} + 1 hour'/>" +
+ "</process>");
+
+ Calendar tomorrow = Calendar.getInstance();
+ tomorrow.add(Calendar.DATE, 1);
+ Map<String, ? > variables = Collections.singletonMap("tomorrow", tomorrow);
+ String processInstanceId = executionService.startProcessInstanceByKey(
+ "BaseDatePlusDuration", variables).getId();
+
+ List<Task> taskList = taskService.createTaskQuery()
+ .processInstanceId(processInstanceId)
+ .list();
+ assertEquals(1, taskList.size());
+
+ Task task = taskList.get(0);
+ tomorrow.add(Calendar.HOUR, 1);
+ assertEquals(tomorrow.getTime(), task.getDuedate());
+ }
+
+ public void testBaseDateMinusDuration() {
+ deployJpdlXmlString(
+ "<process name='BaseDateMinusDuration'>" +
+ " <start><transition to='t'/></start>" +
+ " <task name='t' duedate='#{tomorrow} - 1 hour'/>" +
+ "</process>");
+
+ Calendar tomorrow = Calendar.getInstance();
+ tomorrow.add(Calendar.DATE, 1);
+ Map<String, ? > variables = Collections.singletonMap("tomorrow", tomorrow);
+ String processInstanceId = executionService.startProcessInstanceByKey(
+ "BaseDateMinusDuration", variables).getId();
+
+ List<Task> taskList = taskService.createTaskQuery()
+ .processInstanceId(processInstanceId)
+ .list();
+ assertEquals(1, taskList.size());
+
+ Task task = taskList.get(0);
+ tomorrow.add(Calendar.HOUR, -1);
+ assertEquals(tomorrow.getTime(), task.getDuedate());
+ }
+
+ public void testDuration() {
+ deployJpdlXmlString(
+ "<process name='Duration'>" +
+ " <start><transition to='t'/></start>" +
+ " <task name='t' duedate='1 hour'/>" +
+ "</process>");
+
+ Calendar now = Calendar.getInstance();
+ // prevent wrong results in databases lacking millisecond precision
+ now.set(Calendar.MILLISECOND, 0);
+ Clock.setCurrentTime(now.getTime());
+
+ String processInstanceId = executionService.startProcessInstanceByKey("Duration").getId();
+
+ List<Task> taskList = taskService.createTaskQuery()
+ .processInstanceId(processInstanceId)
+ .list();
+ assertEquals(1, taskList.size());
+
+ Task task = taskList.get(0);
+ now.add(Calendar.HOUR, 1);
+ // because task.getDuedate() returns java.sql.Timestamp here,
+ // comparison has to be made in milliseconds
+ assertEquals(now.getTimeInMillis(), task.getDuedate().getTime());
+ }
+}
Property changes on: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/task/TaskDueDateTest.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ native
Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/timer/TimerTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/timer/TimerTest.java 2010-01-22 11:51:41 UTC (rev 6122)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/timer/TimerTest.java 2010-01-23 03:37:00 UTC (rev 6123)
@@ -22,7 +22,6 @@
package org.jbpm.test.timer;
import java.util.Calendar;
-import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@@ -36,7 +35,6 @@
import org.jbpm.api.listener.EventListenerExecution;
import org.jbpm.test.JbpmTestCase;
-
/**
* @author Tom Baeyens
* @author Ronald Van Kuijk
@@ -198,117 +196,116 @@
}
public void testTimerELCalendarAdd() {
- deployJpdlXmlString(
- "<process name='Insurance claim' key='ICL'>" +
- " <start>" +
- " <transition to='a' />" +
- " </start>" +
- " <state name='a'>" +
- " <transition to='b' />" +
- " <transition name='timeout' to='escalate'>" +
- " <timer duedate='#{proc_var} + 5 days' />" +
- " </transition>" +
- " </state>" +
- " <state name='b' />" +
- " <end name='escalate' />" +
- "</process>"
- );
-
- Map<String, Object> proc_vars = new HashMap<String, Object>();
- Calendar cal = Calendar.getInstance();
- cal.add(Calendar.DAY_OF_MONTH, 6);
- proc_vars.put("proc_var", cal);
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", proc_vars, "82436");
-
- Job job = managementService.createJobQuery()
- .processInstanceId(processInstance.getId())
- .uniqueResult();
-
- Calendar jobDate = Calendar.getInstance();
- jobDate.setTime(job.getDuedate());
-
- cal.add(Calendar.DAY_OF_MONTH, 5);
- assertEquals(cal.get(Calendar.DAY_OF_MONTH), jobDate.get(Calendar.DAY_OF_MONTH));
-
- managementService.executeJob(job.getId());
- assertProcessInstanceEnded(processInstance);
- }
-
+ deployJpdlXmlString(
+ "<process name='Insurance claim' key='ICL'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <transition to='b' />" +
+ " <transition name='timeout' to='escalate'>" +
+ " <timer duedate='#{proc_var} + 5 days' />" +
+ " </transition>" +
+ " </state>" +
+ " <state name='b' />" +
+ " <end name='escalate' />" +
+ "</process>"
+ );
+
+ Map<String, Object> proc_vars = new HashMap<String, Object>();
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.DAY_OF_MONTH, 6);
+ proc_vars.put("proc_var", cal);
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", proc_vars, "82436");
+
+ Job job = managementService.createJobQuery()
+ .processInstanceId(processInstance.getId())
+ .uniqueResult();
+
+ Calendar jobDate = Calendar.getInstance();
+ jobDate.setTime(job.getDuedate());
+
+ cal.add(Calendar.DAY_OF_MONTH, 5);
+ assertEquals(cal.get(Calendar.DAY_OF_MONTH), jobDate.get(Calendar.DAY_OF_MONTH));
+
+ managementService.executeJob(job.getId());
+ assertProcessInstanceEnded(processInstance);
+ }
+
public void testTimerELCalendarSubtract() {
- deployJpdlXmlString(
- "<process name='Insurance claim' key='ICL'>" +
- " <start>" +
- " <transition to='a' />" +
- " </start>" +
- " <state name='a'>" +
- " <transition to='b' />" +
- " <transition name='timeout' to='escalate'>" +
- " <timer duedate='#{proc_var} - 5 days' />" +
- " </transition>" +
- " </state>" +
- " <state name='b' />" +
- " <end name='escalate' />" +
- "</process>"
- );
-
- Map<String, Object> proc_vars = new HashMap<String, Object>();
- Calendar cal = Calendar.getInstance();
- cal.add(Calendar.DAY_OF_MONTH, 6);
- proc_vars.put("proc_var", cal);
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", proc_vars, "82436");
-
- Job job = managementService.createJobQuery()
- .processInstanceId(processInstance.getId())
- .uniqueResult();
-
- Calendar jobDate = Calendar.getInstance();
- jobDate.setTime(job.getDuedate());
-
- // 6 days from now minus 5 days is tomorrow so subtract 5 from the original added 6.
- assertEquals(cal.get(Calendar.DAY_OF_MONTH) -5 , jobDate.get(Calendar.DAY_OF_MONTH));
-
- managementService.executeJob(job.getId());
- assertProcessInstanceEnded(processInstance);
- }
-
-
+ deployJpdlXmlString(
+ "<process name='Insurance claim' key='ICL'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <transition to='b' />" +
+ " <transition name='timeout' to='escalate'>" +
+ " <timer duedate='#{proc_var} - 5 days' />" +
+ " </transition>" +
+ " </state>" +
+ " <state name='b' />" +
+ " <end name='escalate' />" +
+ "</process>"
+ );
+
+ Map<String, Object> proc_vars = new HashMap<String, Object>();
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.DAY_OF_MONTH, 6);
+ proc_vars.put("proc_var", cal);
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", proc_vars, "82436");
+
+ Job job = managementService.createJobQuery()
+ .processInstanceId(processInstance.getId())
+ .uniqueResult();
+
+ Calendar jobDate = Calendar.getInstance();
+ jobDate.setTime(job.getDuedate());
+
+ // 6 days from now minus 5 days is tomorrow so subtract 5 from the original added 6.
+ assertEquals(cal.get(Calendar.DAY_OF_MONTH) -5 , jobDate.get(Calendar.DAY_OF_MONTH));
+
+ managementService.executeJob(job.getId());
+ assertProcessInstanceEnded(processInstance);
+ }
+
public void testTimerELCalendarAddBusiness() {
- deployJpdlXmlString(
- "<process name='Insurance claim' key='ICL'>" +
- " <start>" +
- " <transition to='a' />" +
- " </start>" +
- " <state name='a'>" +
- " <transition to='b' />" +
- " <transition name='timeout' to='escalate'>" +
- " <timer duedate='#{proc_var} + 5 business days' />" +
- " </transition>" +
- " </state>" +
- " <state name='b' />" +
- " <end name='escalate' />" +
- "</process>"
- );
-
- Map<String, Object> proc_vars = new HashMap<String, Object>();
- Calendar cal = Calendar.getInstance();
- cal.set(2010, 01, 12, 12, 00, 00); // 12 feb 2010 noon
- proc_vars.put("proc_var", cal);
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", proc_vars, "82436");
-
- Job job = managementService.createJobQuery()
- .processInstanceId(processInstance.getId())
- .uniqueResult();
-
- Calendar jobDate = Calendar.getInstance();
- jobDate.setTime(job.getDuedate());
-
- // 12 feb is friday, 5 businessdays further is friday 19th
- assertEquals(19 , jobDate.get(Calendar.DAY_OF_MONTH));
-
- managementService.executeJob(job.getId());
- assertProcessInstanceEnded(processInstance);
- }
-
+ deployJpdlXmlString(
+ "<process name='Insurance claim' key='ICL'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <transition to='b' />" +
+ " <transition name='timeout' to='escalate'>" +
+ " <timer duedate='#{proc_var} + 5 business days' />" +
+ " </transition>" +
+ " </state>" +
+ " <state name='b' />" +
+ " <end name='escalate' />" +
+ "</process>"
+ );
+
+ Map<String, Object> proc_vars = new HashMap<String, Object>();
+ Calendar cal = Calendar.getInstance();
+ cal.set(2010, 01, 12, 12, 00, 00); // 12 feb 2010 noon
+ proc_vars.put("proc_var", cal);
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", proc_vars, "82436");
+
+ Job job = managementService.createJobQuery()
+ .processInstanceId(processInstance.getId())
+ .uniqueResult();
+
+ Calendar jobDate = Calendar.getInstance();
+ jobDate.setTime(job.getDuedate());
+
+ // 12 feb is friday, 5 businessdays further is friday 19th
+ assertEquals(19 , jobDate.get(Calendar.DAY_OF_MONTH));
+
+ managementService.executeJob(job.getId());
+ assertProcessInstanceEnded(processInstance);
+ }
+
public void testTimerELFail() {
deployJpdlXmlString(
"<process name='Insurance claim' key='ICL'>" +
@@ -329,65 +326,65 @@
Map<String, Object> proc_vars = new HashMap<String, Object>();
proc_vars.put("proc_var", new Long(0));
try {
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", proc_vars, "82436");
+ executionService.startProcessInstanceByKey("ICL", proc_vars, "82436");
fail("Should not happen, exception expected");
} catch (Exception e) {}
}
public void testTimerELSubtractBusinessFail() {
- deployJpdlXmlString(
- "<process name='Insurance claim' key='ICL'>" +
- " <start>" +
- " <transition to='a' />" +
- " </start>" +
- " <state name='a'>" +
- " <transition to='b' />" +
- " <transition name='timeout' to='escalate'>" +
- " <timer duedate='#{proc_var} - 6 business days' />" +
- " </transition>" +
- " </state>" +
- " <state name='b' />" +
- " <end name='escalate' />" +
- "</process>"
- );
-
- Map<String, Object> proc_vars = new HashMap<String, Object>();
- Calendar cal = Calendar.getInstance();
- cal.set(2010, 01, 12, 12, 00, 00); // 12 feb 2010 noon
- proc_vars.put("proc_var", cal);
- try {
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", proc_vars, "82436");
- fail("Should not happen, exception expected");
- } catch (Exception e) {}
+ deployJpdlXmlString(
+ "<process name='Insurance claim' key='ICL'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <transition to='b' />" +
+ " <transition name='timeout' to='escalate'>" +
+ " <timer duedate='#{proc_var} - 6 business days' />" +
+ " </transition>" +
+ " </state>" +
+ " <state name='b' />" +
+ " <end name='escalate' />" +
+ "</process>"
+ );
+
+ Map<String, Object> proc_vars = new HashMap<String, Object>();
+ Calendar cal = Calendar.getInstance();
+ cal.set(2010, 01, 12, 12, 00, 00); // 12 feb 2010 noon
+ proc_vars.put("proc_var", cal);
+ try {
+ executionService.startProcessInstanceByKey("ICL", proc_vars, "82436");
+ fail("Should not happen, exception expected");
+ } catch (Exception e) {}
}
public void testTimerELSubtractPastFail() {
- deployJpdlXmlString(
- "<process name='Insurance claim' key='ICL'>" +
- " <start>" +
- " <transition to='a' />" +
- " </start>" +
- " <state name='a'>" +
- " <transition to='b' />" +
- " <transition name='timeout' to='escalate'>" +
- " <timer duedate='#{proc_var} - 3 days' />" +
- " </transition>" +
- " </state>" +
- " <state name='b' />" +
- " <end name='escalate' />" +
- "</process>"
- );
-
- Map<String, Object> proc_vars = new HashMap<String, Object>();
- Calendar cal = Calendar.getInstance();
- cal.add(Calendar.DAY_OF_MONTH, 2);
- proc_vars.put("proc_var", cal);
- try {
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", proc_vars, "82436");
- fail("Should not happen, exception expected");
- } catch (Exception e) {}
-}
-
+ deployJpdlXmlString(
+ "<process name='Insurance claim' key='ICL'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <transition to='b' />" +
+ " <transition name='timeout' to='escalate'>" +
+ " <timer duedate='#{proc_var} - 3 days' />" +
+ " </transition>" +
+ " </state>" +
+ " <state name='b' />" +
+ " <end name='escalate' />" +
+ "</process>"
+ );
+
+ Map<String, Object> proc_vars = new HashMap<String, Object>();
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.DAY_OF_MONTH, 2);
+ proc_vars.put("proc_var", cal);
+ try {
+ executionService.startProcessInstanceByKey("ICL", proc_vars, "82436");
+ fail("Should not happen, exception expected");
+ } catch (Exception e) {}
+ }
+
public void testTimerTimeoutCustom() {
deployJpdlXmlString(TEST_PROCESS_CUSTOM);
@@ -412,7 +409,6 @@
assertProcessInstanceActive(processInstance);
executionService.signalExecutionById(processInstance.getExecution("a").getId());
assertActivityActive(processInstance.getId(), "b");
-
}
public void testTimerSignalCustom() {
More information about the jbpm-commits
mailing list