CAMEL-9424 Correctly build TriggerKey using the trigger prefix relevant to the 
Action. This fixes the fuplicate trigger name issue when setting both start and 
stop route times on a CronScheduledRoutePolicy.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b4aa8544
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b4aa8544
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b4aa8544

Branch: refs/heads/camel-2.16.x
Commit: b4aa8544a4b4fd4c6a711a2dca37274fbaf6cd94
Parents: 84842de
Author: Donovan Muller <donovan.mul...@gmail.com>
Authored: Wed Dec 16 00:56:44 2015 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Wed Dec 16 08:14:28 2015 +0100

----------------------------------------------------------------------
 .../quartz2/CronScheduledRoutePolicy.java       | 18 +++++--
 .../quartz2/CronScheduledRoutePolicyTest.java   | 56 ++++++++++++++++++++
 2 files changed, 69 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/b4aa8544/components/camel-quartz2/src/main/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicy.java
----------------------------------------------------------------------
diff --git 
a/components/camel-quartz2/src/main/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicy.java
 
b/components/camel-quartz2/src/main/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicy.java
index eb7978a..1b917a7 100644
--- 
a/components/camel-quartz2/src/main/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicy.java
+++ 
b/components/camel-quartz2/src/main/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicy.java
@@ -25,6 +25,7 @@ import org.apache.camel.util.ObjectHelper;
 import org.quartz.CronScheduleBuilder;
 import org.quartz.Trigger;
 import org.quartz.TriggerBuilder;
+import org.quartz.TriggerKey;
 
 public class CronScheduledRoutePolicy extends ScheduledRoutePolicy implements 
ScheduledRoutePolicyConstants {
     private String routeStartTime;
@@ -33,7 +34,7 @@ public class CronScheduledRoutePolicy extends 
ScheduledRoutePolicy implements Sc
     private String routeResumeTime;
     private String timeZoneString;
     private TimeZone timeZone;
-    
+
     public void onInit(Route route) {
         try {
             doOnInit(route);
@@ -80,25 +81,32 @@ public class CronScheduledRoutePolicy extends 
ScheduledRoutePolicy implements Sc
 
     @Override
     protected Trigger createTrigger(Action action, Route route) throws 
Exception {
-        Trigger  trigger = null;
-        
+        Trigger trigger = null;
+
         CronScheduleBuilder scheduleBuilder = null;
+        String triggerPrefix = null;
         if (action == Action.START) {
             scheduleBuilder = 
CronScheduleBuilder.cronSchedule(getRouteStartTime());
+            triggerPrefix = TRIGGER_START;
         } else if (action == Action.STOP) {
             scheduleBuilder = 
CronScheduleBuilder.cronSchedule(getRouteStopTime());
+            triggerPrefix = TRIGGER_STOP;
         } else if (action == Action.SUSPEND) {
             scheduleBuilder = 
CronScheduleBuilder.cronSchedule(getRouteSuspendTime());
+            triggerPrefix = TRIGGER_SUSPEND;
         } else if (action == Action.RESUME) {
             scheduleBuilder = 
CronScheduleBuilder.cronSchedule(getRouteResumeTime());
+            triggerPrefix = TRIGGER_RESUME;
         }
-        
+
         if (scheduleBuilder != null) {
             if (timeZone != null) {
                 scheduleBuilder.inTimeZone(timeZone);
             }
+
+            TriggerKey triggerKey = new TriggerKey(triggerPrefix + 
route.getId(), TRIGGER_GROUP + route.getId());
             trigger = TriggerBuilder.newTrigger()
-                .withIdentity(TRIGGER_START + route.getId(), TRIGGER_GROUP + 
route.getId())
+                .withIdentity(triggerKey)
                 .withSchedule(scheduleBuilder)
                 .build();
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/b4aa8544/components/camel-quartz2/src/test/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicyTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-quartz2/src/test/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicyTest.java
 
b/components/camel-quartz2/src/test/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicyTest.java
index 6b6ace4..4fd6876 100644
--- 
a/components/camel-quartz2/src/test/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicyTest.java
+++ 
b/components/camel-quartz2/src/test/java/org/apache/camel/routepolicy/quartz2/CronScheduledRoutePolicyTest.java
@@ -16,9 +16,11 @@
  */
 package org.apache.camel.routepolicy.quartz2;
 
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.Consumer;
+import org.apache.camel.Route;
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.SuspendableService;
 import org.apache.camel.builder.RouteBuilder;
@@ -156,6 +158,60 @@ public class CronScheduledRoutePolicyTest extends 
CamelTestSupport {
         Thread.sleep(5000);
         assertTrue(context.getRouteStatus("test") == ServiceStatus.Stopped);
     }
+
+    @Test
+    public void testScheduledStartAndStopRoutePolicy() throws Exception {
+        MockEndpoint success = context.getEndpoint("mock:success", 
MockEndpoint.class);
+        success.expectedMessageCount(1);
+
+        final CountDownLatch startedLatch = new CountDownLatch(1);
+        final CountDownLatch stoppedLatch = new CountDownLatch(1);
+
+        context.getComponent("quartz2", 
QuartzComponent.class).setPropertiesFile("org/apache/camel/routepolicy/quartz2/myquartz.properties");
+        context.addRoutes(new RouteBuilder() {
+            public void configure() {
+                CronScheduledRoutePolicy policy = new 
CronScheduledRoutePolicy() {
+
+                    @Override
+                    public void onStart(final Route route) {
+                        super.onStart(route);
+
+                        startedLatch.countDown();
+                    }
+
+                    @Override
+                    public void onStop(final Route route) {
+                        super.onStop(route);
+
+                        stoppedLatch.countDown();
+                    }
+                };
+                policy.setRouteStartTime("*/3 * * * * ?");
+                policy.setRouteStopTime("*/6 * * * * ?");
+                policy.setRouteStopGracePeriod(0);
+
+                from("direct:start")
+                        .routeId("test")
+                        .routePolicy(policy)
+                        .noAutoStartup()
+                        .to("mock:success");
+            }
+        });
+        context.start();
+
+        startedLatch.await(5000, TimeUnit.SECONDS);
+
+        ServiceStatus startedStatus = context.getRouteStatus("test");
+        assertTrue(startedStatus == ServiceStatus.Started || startedStatus == 
ServiceStatus.Starting);
+        template.sendBody("direct:start", "Ready or not, Here, I come");
+
+        stoppedLatch.await(5000, TimeUnit.SECONDS);
+
+        ServiceStatus stoppedStatus = context.getRouteStatus("test");
+        assertTrue(stoppedStatus == ServiceStatus.Stopped || stoppedStatus == 
ServiceStatus.Stopping);
+
+        success.assertIsSatisfied();
+    }
     
     @Test
     public void testScheduledStopRoutePolicyWithExtraPolicy() throws Exception 
{

Reply via email to