1   package org.apache.turbine.services.schedule;
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  import java.util.Date;
23  import java.util.concurrent.atomic.AtomicBoolean;
24  
25  import org.apache.commons.lang3.StringUtils;
26  import org.apache.turbine.modules.ScheduledJobLoader;
27  import org.apache.turbine.util.TurbineException;
28  import org.quartz.Job;
29  import org.quartz.JobBuilder;
30  import org.quartz.JobDetail;
31  import org.quartz.JobExecutionContext;
32  import org.quartz.JobExecutionException;
33  import org.quartz.Trigger;
34  import org.quartz.core.QuartzScheduler;
35  
36  
37  
38  
39  
40  
41  public class JobEntryQuartz implements JobEntry, Job
42  {
43      private int jobId;
44      private Trigger jobTrigger;
45      private JobDetail jobDetail;
46      private String task;
47      private boolean isnew = true;
48      private AtomicBoolean active = new AtomicBoolean(false);
49  
50      
51  
52  
53      public static final String DEFAULT_JOB_GROUP_NAME = "TURBINE";
54  
55      
56  
57  
58      public JobEntryQuartz()
59      {
60          super();
61      }
62  
63      
64  
65  
66  
67  
68      public JobEntryQuartz(Trigger jobTrigger)
69      {
70          this(jobTrigger, JobBuilder
71                  .newJob(JobEntryQuartz.class)
72                  .withIdentity(jobTrigger.getJobKey().getName(), DEFAULT_JOB_GROUP_NAME).build());
73      }
74  
75      
76  
77  
78  
79  
80  
81      public JobEntryQuartz(Trigger jobTrigger, JobDetail jobDetail)
82      {
83          this();
84          setTask(jobTrigger.getJobKey().getName());
85          this.jobTrigger = jobTrigger;
86          this.jobDetail = jobDetail;
87      }
88  
89      
90  
91  
92      @Override
93      public boolean isNew()
94      {
95          boolean _isnew = isnew;
96          isnew = false;
97          return _isnew;
98      }
99  
100     
101 
102 
103 
104 
105     @Override
106     public int getJobId()
107     {
108         return jobId;
109     }
110 
111     
112 
113 
114 
115 
116     @Override
117     public void setJobId(int v)
118     {
119         this.jobId = v;
120     }
121 
122     
123 
124 
125 
126 
127     @Override
128     public String getTask()
129     {
130         return task;
131     }
132 
133     
134 
135 
136 
137 
138     @Override
139     public void setTask(String v)
140     {
141         this.task = v;
142     }
143 
144     
145 
146 
147     public Trigger getJobTrigger()
148     {
149         return jobTrigger;
150     }
151 
152     
153 
154 
155     public void setJobTrigger(Trigger jobTrigger)
156     {
157         this.jobTrigger = jobTrigger;
158     }
159 
160     
161 
162 
163     public JobDetail getJobDetail()
164     {
165         return jobDetail;
166     }
167 
168     
169 
170 
171     @Override
172     public int compareTo(JobEntry o)
173     {
174         return jobTrigger.compareTo(((JobEntryQuartz)o).getJobTrigger());
175     }
176 
177     
178 
179 
180     @Override
181     public void setActive(boolean isActive)
182     {
183         this.active.set(isActive);
184     }
185 
186     
187 
188 
189     @Override
190     public boolean isActive()
191     {
192         return active.get();
193     }
194 
195     
196 
197 
198     @Override
199     public long getNextRuntime()
200     {
201         return getNextRunDate().getTime();
202     }
203 
204     
205 
206 
207     @Override
208     public Date getNextRunDate()
209     {
210         return jobTrigger.getNextFireTime();
211     }
212 
213     
214 
215 
216     @Override
217     public String getNextRunAsString()
218     {
219         return getNextRunDate().toString();
220     }
221 
222     
223 
224 
225     @Override
226     public void calcRunTime() throws TurbineException
227     {
228         
229     }
230 
231     
232 
233 
234     @Override
235     public void execute(JobExecutionContext context) throws JobExecutionException
236     {
237         if (active.compareAndSet(false, true) == false)
238         {
239             return;
240         }
241 
242         try
243         {
244             String task = getTask();
245             if (StringUtils.isEmpty(task))
246             {
247                 
248                 task = context.getJobDetail().getKey().getName();
249             }
250             ScheduledJobLoader.getInstance().exec(this, task);
251         }
252         catch (Exception e)
253         {
254             throw new JobExecutionException("Error executing scheduled job #" +
255                     getJobId() + ", task: " + getTask(), e);
256         }
257         finally
258         {
259             active.compareAndSet(true, false);
260         }
261     }
262 }