KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > efs > openreports > providers > impl > SchedulerProviderImpl


1 /*
2  * Copyright (C) 2003 Erik Swenson - eswenson@opensourcesoft.net
3  *
4  * This program is free software; you can redistribute it and/or modify it under
5  * the terms of the GNU General Public License as published by the Free Software
6  * Foundation; either version 2 of the License, or (at your option) any later
7  * version.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
12  * details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16  * Place - Suite 330, Boston, MA 02111-1307, USA.
17  *
18  */

19
20 package org.efs.openreports.providers.impl;
21
22 import java.text.ParseException JavaDoc;
23 import java.util.ArrayList JavaDoc;
24 import java.util.List JavaDoc;
25
26 import org.apache.log4j.Logger;
27 import org.efs.openreports.ORStatics;
28 import org.efs.openreports.objects.ReportSchedule;
29 import org.efs.openreports.objects.ReportUser;
30 import org.efs.openreports.providers.ProviderException;
31 import org.efs.openreports.providers.QuartzProvider;
32 import org.efs.openreports.providers.SchedulerProvider;
33 import org.efs.openreports.util.ScheduledReportJob;
34 import org.quartz.*;
35
36 public class SchedulerProviderImpl implements SchedulerProvider
37 {
38     protected static Logger log = Logger.getLogger(SchedulerProviderImpl.class.getName());
39
40     public SchedulerProviderImpl()
41     {
42         log.info("SchedulerProviderImpl created.");
43     }
44
45     public void scheduleReport(ReportSchedule reportSchedule) throws ProviderException
46     {
47         JobDetail jobDetail = new JobDetail(reportSchedule.getScheduleName(), reportSchedule
48                 .getScheduleGroup(), ScheduledReportJob.class);
49
50         jobDetail.getJobDataMap().put(ORStatics.REPORT_SCHEDULE, reportSchedule);
51         jobDetail.setDescription(reportSchedule.getScheduleDescription());
52
53         if (reportSchedule.getScheduleType() == ReportSchedule.DAILY
54                 || reportSchedule.getScheduleType() == ReportSchedule.WEEKLY
55                 || reportSchedule.getScheduleType() == ReportSchedule.MONTHLY
56                 || reportSchedule.getScheduleType() == ReportSchedule.WEEKDAYS
57                 || reportSchedule.getScheduleType() == ReportSchedule.HOURLY
58                 || reportSchedule.getScheduleType() == ReportSchedule.CRON)
59         {
60             StringBuffer JavaDoc cronExpression = new StringBuffer JavaDoc();
61             
62             if (reportSchedule.getScheduleType() == ReportSchedule.CRON)
63             {
64                 cronExpression.append(reportSchedule.getCronExpression());
65             }
66             else
67             {
68                 cronExpression.append("0 ");
69                 cronExpression.append(reportSchedule.getStartMinute());
70                 cronExpression.append(" ");
71                 cronExpression.append(reportSchedule.getAbsoluteStartHour());
72
73                 if (reportSchedule.getScheduleType() == ReportSchedule.HOURLY)
74                 {
75                     cronExpression.append("-" + reportSchedule.getAbsoluteEndHour());
76                 }
77                 
78                 if (reportSchedule.getScheduleType() == ReportSchedule.WEEKLY)
79                 {
80                     cronExpression.append(" ? * ");
81                     cronExpression.append(reportSchedule.getDayOfWeek());
82                 }
83                 else if (reportSchedule.getScheduleType() == ReportSchedule.MONTHLY)
84                 {
85                     cronExpression.append(" " + reportSchedule.getDayOfMonth());
86                     cronExpression.append(" * ? ");
87                 }
88                 else if (reportSchedule.getScheduleType() == ReportSchedule.WEEKDAYS)
89                 {
90                     cronExpression.append(" ? * MON-FRI");
91                 }
92                 else
93                 {
94                     cronExpression.append(" * * ?");
95                 }
96             }
97
98             CronTrigger cronTrigger = new CronTrigger(reportSchedule.getScheduleName(),
99                     reportSchedule.getScheduleGroup());
100
101             try
102             {
103                 cronTrigger.setCronExpression(cronExpression.toString());
104             }
105             catch(ParseException JavaDoc pe)
106             {
107                 throw new ProviderException(pe);
108             }
109             
110             cronTrigger.setStartTime(reportSchedule.getStartDate());
111
112             QuartzProvider.scheduleJob(jobDetail, cronTrigger);
113         }
114         else
115         {
116             // default to run once...
117
SimpleTrigger trigger = new SimpleTrigger(reportSchedule.getScheduleName(),
118                     reportSchedule.getScheduleGroup(), reportSchedule.getStartDateTime(), null,
119                     0, 0L);
120
121             QuartzProvider.scheduleJob(jobDetail, trigger);
122         }
123     }
124
125     public List JavaDoc getScheduledReports(ReportUser reportUser) throws ProviderException
126     {
127         List JavaDoc scheduledReports = new ArrayList JavaDoc();
128
129         String JavaDoc group = reportUser.getId().toString();
130
131         String JavaDoc[] jobNames = QuartzProvider.getJobNames(group);
132
133         for (int i = 0; i < jobNames.length; i++)
134         {
135             try
136             {
137                 JobDetail jobDetail = QuartzProvider.getJobDetail(jobNames[i], group);
138
139                 ReportSchedule reportSchedule = (ReportSchedule) jobDetail.getJobDataMap().get(
140                         ORStatics.REPORT_SCHEDULE);
141                 reportSchedule.setScheduleDescription(jobDetail.getDescription());
142                 reportSchedule.setScheduleState(QuartzProvider.getTriggerState(jobNames[i], group));
143                 
144                 Trigger trigger = QuartzProvider.getTrigger(jobNames[i], group);
145                 if (trigger != null)
146                 {
147                     reportSchedule.setNextFireDate(trigger.getNextFireTime());
148                 }
149
150                 scheduledReports.add(reportSchedule);
151             }
152             catch(ProviderException pe)
153             {
154                 log.error(group + " | " + jobNames[i] + " | " + pe.toString());
155             }
156         }
157
158         return scheduledReports;
159     }
160
161     public void deleteScheduledReport(ReportUser reportUser, String JavaDoc name)
162             throws ProviderException
163     {
164         String JavaDoc group = reportUser.getId().toString();
165
166         QuartzProvider.deleteJob(name, group);
167     }
168
169     public ReportSchedule getScheduledReport(ReportUser reportUser, String JavaDoc name)
170             throws ProviderException
171     {
172         String JavaDoc group = reportUser.getId().toString();
173
174         JobDetail jobDetail = QuartzProvider.getJobDetail(name, group);
175
176         ReportSchedule reportSchedule = (ReportSchedule) jobDetail.getJobDataMap().get(ORStatics.REPORT_SCHEDULE);
177         reportSchedule.setScheduleDescription(jobDetail.getDescription());
178         reportSchedule.setScheduleState(QuartzProvider.getTriggerState(name, group));
179                 
180         return reportSchedule;
181     }
182     
183     public void pauseScheduledReport(ReportUser reportUser, String JavaDoc name)
184             throws ProviderException
185     {
186         QuartzProvider.pauseJob(name, reportUser.getId().toString());
187     }
188     
189     public void resumeScheduledReport(ReportUser reportUser, String JavaDoc name)
190             throws ProviderException
191     {
192         QuartzProvider.resumeJob(name, reportUser.getId().toString());
193     }
194 }
Popular Tags