001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.camel.routepolicy.quartz;
018
019 import java.util.Date;
020 import java.util.concurrent.TimeUnit;
021
022 import org.apache.camel.Route;
023 import org.apache.camel.component.quartz.QuartzComponent;
024 import org.apache.commons.logging.Log;
025 import org.apache.commons.logging.LogFactory;
026 import org.quartz.SimpleTrigger;
027 import org.quartz.Trigger;
028
029 public class SimpleScheduledRoutePolicy extends ScheduledRoutePolicy {
030 private static final transient Log LOG = LogFactory.getLog(CronScheduledRoutePolicy.class);
031 private Date routeStartDate;
032 private int routeStartRepeatCount;
033 private long routeStartRepeatInterval;
034 private Date routeStopDate;
035 private int routeStopRepeatCount;
036 private long routeStopRepeatInterval;
037 private Date routeSuspendDate;
038 private int routeSuspendRepeatCount;
039 private long routeSuspendRepeatInterval;
040 private Date routeResumeDate;
041 private int routeResumeRepeatCount;
042 private long routeResumeRepeatInterval;
043
044 public void onInit(Route route) {
045 try {
046 QuartzComponent quartz = route.getRouteContext().getCamelContext().getComponent("quartz", QuartzComponent.class);
047 setScheduler(quartz.getScheduler());
048
049 if (getRouteStopGracePeriod() == 0) {
050 setRouteStopGracePeriod(10000);
051 }
052
053 if (getTimeUnit() == null) {
054 setTimeUnit(TimeUnit.MILLISECONDS);
055 }
056
057 if ((getRouteStartDate() == null) && (getRouteStopDate() == null) && (getRouteSuspendDate() == null) && (getRouteResumeDate() == null)) {
058 if (LOG.isWarnEnabled()) {
059 LOG.warn("Scheduled Route Policy for route " + route.getId() + " is not set since the no start, stop and/or suspend times are specified");
060 }
061 return;
062 }
063
064 if (scheduledRouteDetails == null) {
065 scheduledRouteDetails = new ScheduledRouteDetails();
066 scheduledRouteDetails.setRoute(route);
067
068 if (getRouteStartDate() != null) {
069 scheduleRoute(Action.START);
070 }
071
072 if (getRouteStopDate() != null) {
073 scheduleRoute(Action.STOP);
074 }
075
076 if (getRouteSuspendDate() != null) {
077 scheduleRoute(Action.SUSPEND);
078 }
079 if (getRouteResumeDate() != null) {
080 scheduleRoute(Action.RESUME);
081 }
082 }
083
084 getScheduler().start();
085 } catch (Exception e) {
086 handleException(e);
087 }
088 }
089
090 @Override
091 protected void doStop() throws Exception {
092 if (scheduledRouteDetails.getStartJobDetail() != null) {
093 deleteRouteJob(Action.START);
094 }
095 if (scheduledRouteDetails.getStopJobDetail() != null) {
096 deleteRouteJob(Action.STOP);
097 }
098 if (scheduledRouteDetails.getSuspendJobDetail() != null) {
099 deleteRouteJob(Action.SUSPEND);
100 }
101 if (scheduledRouteDetails.getResumeJobDetail() != null) {
102 deleteRouteJob(Action.RESUME);
103 }
104 }
105
106 /* (non-Javadoc)
107 * @see org.apache.camel.routepolicy.quartz.ScheduledRoutePolicy#createTrigger(org.apache.camel.routepolicy.quartz.ScheduledRoutePolicyConstants.Action)
108 */
109 @Override
110 protected Trigger createTrigger(Action action, Route route) throws Exception {
111 SimpleTrigger trigger = null;
112
113 if (action == Action.START) {
114 trigger = new SimpleTrigger(TRIGGER_START + route.getId(), TRIGGER_GROUP + route.getId(),
115 getRouteStartDate(), null, getRouteStartRepeatCount(), getRouteStartRepeatInterval());
116 } else if (action == Action.STOP) {
117 trigger = new SimpleTrigger(TRIGGER_STOP + route.getId(), TRIGGER_GROUP + route.getId(),
118 getRouteStopDate(), null, getRouteStopRepeatCount(), getRouteStopRepeatInterval());
119 } else if (action == Action.SUSPEND) {
120 trigger = new SimpleTrigger(TRIGGER_SUSPEND + route.getId(), TRIGGER_GROUP + route.getId(),
121 getRouteSuspendDate(), null, getRouteSuspendRepeatCount(), getRouteSuspendRepeatInterval());
122 } else if (action == Action.RESUME) {
123 trigger = new SimpleTrigger(TRIGGER_RESUME + route.getId(), TRIGGER_GROUP + route.getId(),
124 getRouteResumeDate(), null, getRouteResumeRepeatCount(), getRouteResumeRepeatInterval());
125 }
126
127 return trigger;
128 }
129
130
131
132 public Date getRouteStartDate() {
133 return routeStartDate;
134 }
135
136 public void setRouteStartDate(Date routeStartDate) {
137 this.routeStartDate = routeStartDate;
138 }
139
140 public Date getRouteStopDate() {
141 return routeStopDate;
142 }
143
144 public void setRouteStopDate(Date routeStopDate) {
145 this.routeStopDate = routeStopDate;
146 }
147
148 public Date getRouteSuspendDate() {
149 return routeSuspendDate;
150 }
151
152 public void setRouteSuspendDate(Date routeSuspendDate) {
153 this.routeSuspendDate = routeSuspendDate;
154 }
155
156 public int getRouteStartRepeatCount() {
157 return routeStartRepeatCount;
158 }
159
160 public void setRouteStartRepeatCount(int routeStartRepeatCount) {
161 this.routeStartRepeatCount = routeStartRepeatCount;
162 }
163
164 public long getRouteStartRepeatInterval() {
165 return routeStartRepeatInterval;
166 }
167
168 public void setRouteStartRepeatInterval(long routeStartRepeatInterval) {
169 this.routeStartRepeatInterval = routeStartRepeatInterval;
170 }
171
172 public int getRouteStopRepeatCount() {
173 return routeStopRepeatCount;
174 }
175
176 public void setRouteStopRepeatCount(int routeStopRepeatCount) {
177 this.routeStopRepeatCount = routeStopRepeatCount;
178 }
179
180 public long getRouteStopRepeatInterval() {
181 return routeStopRepeatInterval;
182 }
183
184 public void setRouteStopRepeatInterval(long routeStopRepeatInterval) {
185 this.routeStopRepeatInterval = routeStopRepeatInterval;
186 }
187
188 public int getRouteSuspendRepeatCount() {
189 return routeSuspendRepeatCount;
190 }
191
192 public void setRouteSuspendRepeatCount(int routeSuspendRepeatCount) {
193 this.routeSuspendRepeatCount = routeSuspendRepeatCount;
194 }
195
196 public long getRouteSuspendRepeatInterval() {
197 return routeSuspendRepeatInterval;
198 }
199
200 public void setRouteSuspendRepeatInterval(long routeSuspendRepeatInterval) {
201 this.routeSuspendRepeatInterval = routeSuspendRepeatInterval;
202 }
203
204 public void setRouteResumeDate(Date routeResumeDate) {
205 this.routeResumeDate = routeResumeDate;
206 }
207
208 public Date getRouteResumeDate() {
209 return routeResumeDate;
210 }
211
212 public void setRouteResumeRepeatCount(int routeResumeRepeatCount) {
213 this.routeResumeRepeatCount = routeResumeRepeatCount;
214 }
215
216 public int getRouteResumeRepeatCount() {
217 return routeResumeRepeatCount;
218 }
219
220 public void setRouteResumeRepeatInterval(long routeResumeRepeatInterval) {
221 this.routeResumeRepeatInterval = routeResumeRepeatInterval;
222 }
223
224 public long getRouteResumeRepeatInterval() {
225 return routeResumeRepeatInterval;
226 }
227
228 }