1 19 20 package org.efs.openreports.providers.impl; 21 22 import java.text.ParseException ; 23 import java.util.ArrayList ; 24 import java.util.List ; 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 cronExpression = new StringBuffer (); 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 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 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 getScheduledReports(ReportUser reportUser) throws ProviderException 126 { 127 List scheduledReports = new ArrayList (); 128 129 String group = reportUser.getId().toString(); 130 131 String [] 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 name) 162 throws ProviderException 163 { 164 String group = reportUser.getId().toString(); 165 166 QuartzProvider.deleteJob(name, group); 167 } 168 169 public ReportSchedule getScheduledReport(ReportUser reportUser, String name) 170 throws ProviderException 171 { 172 String 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 name) 184 throws ProviderException 185 { 186 QuartzProvider.pauseJob(name, reportUser.getId().toString()); 187 } 188 189 public void resumeScheduledReport(ReportUser reportUser, String name) 190 throws ProviderException 191 { 192 QuartzProvider.resumeJob(name, reportUser.getId().toString()); 193 } 194 } | Popular Tags |