[jbpm-commits] JBoss JBPM SVN: r6454 - in jbpm4/trunk/modules: test-db/src/test/java/org/jbpm/test/timer and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Sat Jul 3 09:07:34 EDT 2010


Author: swiderski.maciej
Date: 2010-07-03 09:07:34 -0400 (Sat, 03 Jul 2010)
New Revision: 6454

Modified:
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java
   jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/timer/TimerTest.java
Log:
JBPM-2890: support for expression in timer repeat attribute, applies as well to reminder

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	2010-07-03 03:49:45 UTC (rev 6453)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java	2010-07-03 13:07:34 UTC (rev 6454)
@@ -34,6 +34,7 @@
 import org.jbpm.api.JbpmException;
 import org.jbpm.internal.log.Log;
 import org.jbpm.pvm.internal.cal.CronExpression;
+import org.jbpm.pvm.internal.el.Expression;
 import org.jbpm.pvm.internal.env.EnvironmentImpl;
 import org.jbpm.pvm.internal.history.HistoryEvent;
 import org.jbpm.pvm.internal.history.events.VariableCreate;
@@ -318,7 +319,14 @@
       if (retries!=null) {
         timer.setRetries(retries);
      }
-      timer.setRepeat(timerDefinition.getRepeat());
+      // support for repeat attribute given as expression 
+      // only if repeat is specified
+      if (timerDefinition.getRepeat() != null) {
+        Object repeatEl = Expression.create(timerDefinition.getRepeat(), Expression.LANGUAGE_UEL_VALUE).evaluate();
+        timer.setRepeat(repeatEl.toString());
+      } else {
+        timer.setRepeat(timerDefinition.getRepeat());
+      }
     }
     
     return timer;

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-07-03 03:49:45 UTC (rev 6453)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/timer/TimerTest.java	2010-07-03 13:07:34 UTC (rev 6454)
@@ -22,6 +22,7 @@
 package org.jbpm.test.timer;
 
 import java.util.Calendar;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -428,7 +429,98 @@
     
     assertProcessInstanceEnded(processInstance);
   }
+  
+  public void testTimerRepeat() {
+    deployJpdlXmlString(
+      "<process name='Insurance claim' key='ICL'>" +
+      "  <start>" +
+      "    <transition to='a' />" +
+      "  </start>" +
+      "  <state name='a'>" +
+      "    <on event='timeout'>" +
+      "     <timer duedate='20 minutes' repeat='10 seconds' />" +
+      "     <event-listener class='" + MyCustomWait.class.getName() + "' />" +
+      "   </on>" +
+      "    <transition to='b' />" +
+      "  </state>" +
+      "  <state name='b' >" +
+      "    <transition to='escalate' />" +
+      "  </state>" +
+      "  <end name='escalate' />" +
+      "</process>"
+    );
 
+    ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", "82436");
+
+    Job job = managementService.createJobQuery()
+      .processInstanceId(processInstance.getId())
+      .uniqueResult();
+    
+    managementService.executeJob(job.getId());
+    
+    
+    job = managementService.createJobQuery()
+    .processInstanceId(processInstance.getId())
+    .uniqueResult();
+  
+    managementService.executeJob(job.getId());
+    
+    processInstance = executionService.findProcessInstanceById(processInstance.getId());
+    String processInstanceId = processInstance.findActiveExecutionIn("a").getId();
+  
+    processInstance = executionService.signalExecutionById(processInstanceId);
+    
+    processInstance = executionService.signalExecutionById(processInstance.getId());
+    
+    assertProcessInstanceEnded(processInstance);
+  }
+  
+  public void testTimerELRepeat() {
+    deployJpdlXmlString(
+      "<process name='Insurance claim' key='ICL'>" +
+      "  <start>" +
+      "    <transition to='a' />" +
+      "  </start>" +
+      "  <state name='a'>" +
+      "    <on event='timeout'>" +
+      "     <timer duedate='20 minutes' repeat='#{repeat}' />" +
+      "     <event-listener class='" + MyCustomWait.class.getName() + "' />" +
+      "   </on>" +
+      "    <transition to='b' />" +
+      "  </state>" +
+      "  <state name='b' >" +
+      "    <transition to='escalate' />" +
+      "  </state>" +
+      "  <end name='escalate' />" +
+      "</process>"
+    );
+
+    Map<String, String> variables = Collections.singletonMap("repeat", "20 seconds");
+    ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", variables, "82436");
+
+    Job job = managementService.createJobQuery()
+      .processInstanceId(processInstance.getId())
+      .uniqueResult();
+    
+    managementService.executeJob(job.getId());
+    
+    
+    job = managementService.createJobQuery()
+    .processInstanceId(processInstance.getId())
+    .uniqueResult();
+  
+    managementService.executeJob(job.getId());
+    
+    processInstance = executionService.findProcessInstanceById(processInstance.getId());
+    String processInstanceId = processInstance.findActiveExecutionIn("a").getId();
+  
+    processInstance = executionService.signalExecutionById(processInstanceId);
+    
+    processInstance = executionService.signalExecutionById(processInstance.getId());
+    
+    assertProcessInstanceEnded(processInstance);
+  }
+
   public static class MyCustomWait implements ExternalActivityBehaviour, EventListener {
 
     private static final long serialVersionUID = 1L;



More information about the jbpm-commits mailing list