1 16 17 package org.pentaho.ui.component; 18 19 import java.util.Date ; 20 import java.util.List ; 21 import org.apache.commons.logging.Log; 22 import org.apache.commons.logging.LogFactory; 23 import org.dom4j.Document; 24 import org.dom4j.DocumentHelper; 25 import org.dom4j.Element; 26 import org.pentaho.core.ui.IPentahoUrlFactory; 27 import org.pentaho.messages.Messages; 28 import org.pentaho.plugin.quartz.QuartzSystemListener; 29 import org.pentaho.ui.XmlComponent; 30 import org.quartz.JobDetail; 31 import org.quartz.Scheduler; 32 import org.quartz.SchedulerException; 33 import org.quartz.SimpleTrigger; 34 import org.quartz.Trigger; 35 36 42 public class SchedulerAdminUIComponent extends XmlComponent { 43 46 private static final long serialVersionUID = 2963902264708970014L; 47 48 private static final String JOB = "job"; 50 private static final String JOB_NAME = "jobName"; 52 private static final String RESULT = "schedulerResults"; 54 private static final String JOB_GROUP = "jobGroup"; 56 public static final String RESUME_SCHEDULER_ACTION_STR = "resumeScheduler"; 58 public static final String SUSPEND_SCHEDULER_ACTION_STR = "suspendScheduler"; 60 public static final String GET_JOB_NAMES_ACTION_STR = "getJobNames"; 62 public static final String GET_IS_SCHEDULER_PAUSED_ACTION_STR = "isSchedulerPaused"; 64 public static final String PAUSE_JOB_ACTION_STR = "pauseJob"; 66 public static final String RESUME_JOB_ACTION_STR = "resumeJob"; 68 public static final String DELETE_JOB_ACTION_STR = "deleteJob"; 70 public static final String SCHEDULER_ACTION_STR = "schedulerAction"; 72 public static final String RUN_JOB_ACTION_STR = "executeJob"; 74 private Scheduler sched = null; 75 76 private static final Log logger = LogFactory.getLog(SchedulerAdminUIComponent.class); 77 78 81 public SchedulerAdminUIComponent(IPentahoUrlFactory urlFactory, List messages) { 82 super(urlFactory, messages, null); 83 try { 84 sched = QuartzSystemListener.getSchedulerInstance(); 85 } catch (Exception e) { 86 error(Messages.getString(Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0002_NoScheduler") + e.toString())); e.printStackTrace(); 88 } 89 setXsl("text/html", "SchedulerAdmin.xsl"); } 91 92 97 public Log getLogger() { 98 return logger; 99 } 100 101 106 public boolean validate() { 107 return true; 108 } 109 110 115 public Document getXmlContent() { 116 String schedulerActionStr = getParameter(SCHEDULER_ACTION_STR, GET_JOB_NAMES_ACTION_STR); 117 setXslProperty("baseUrl", urlFactory.getDisplayUrlBuilder().getUrl()); 119 if (SUSPEND_SCHEDULER_ACTION_STR.equals(schedulerActionStr)) { 120 return doPauseAll(); 121 } else if (RESUME_SCHEDULER_ACTION_STR.equals(schedulerActionStr)) { 122 return doResumeAll(); 123 } else if (GET_JOB_NAMES_ACTION_STR.equals(schedulerActionStr)) { 124 return doGetJobNames(); 125 } else if (GET_IS_SCHEDULER_PAUSED_ACTION_STR.equals(schedulerActionStr)) { 126 return doIsSchedulerPaused(); 127 } else if (PAUSE_JOB_ACTION_STR.equalsIgnoreCase(schedulerActionStr)) { 128 return doPauseJob(); 129 } else if (RESUME_JOB_ACTION_STR.equalsIgnoreCase(schedulerActionStr)) { 130 return doResumeJob(); 131 } else if (DELETE_JOB_ACTION_STR.equalsIgnoreCase(schedulerActionStr)) { 132 return doDeleteJob(); 133 } else if (RUN_JOB_ACTION_STR.equalsIgnoreCase(schedulerActionStr)) { 134 return doExecuteJobNow(); 135 } else { 136 Document document = DocumentHelper.createDocument(); 137 document.setName(SCHEDULER_ACTION_STR); 138 139 return document; 140 146 } 147 } 148 149 private Document doExecuteJobNow() { 150 String jobName = getParameter(JOB_NAME, ""); String groupName = getParameter(JOB_GROUP, ""); Trigger trigger = new SimpleTrigger("Immediate", "DEFAULT"); 154 try { 155 JobDetail jobDetail = sched.getJobDetail(jobName, groupName); 156 jobDetail.setGroup("Immediate"); sched.scheduleJob(jobDetail, trigger); 158 } catch (SchedulerException e) { 159 e.printStackTrace(); 161 } 162 return doGetJobNames(); 163 } 164 165 private Document doDeleteJob() { 166 String jobName = getParameter(JOB_NAME, ""); String groupName = getParameter(JOB_GROUP, ""); try { 169 sched.deleteJob(jobName, groupName); 170 } catch (SchedulerException e) { 171 e.printStackTrace(); 173 } 174 175 return doGetJobNames(); 176 } 177 178 private Document doResumeJob() { 179 String jobName = getParameter(JOB_NAME, ""); String groupName = getParameter(JOB_GROUP, ""); try { 182 sched.resumeJob(jobName, groupName); 183 } catch (SchedulerException e) { 184 e.printStackTrace(); 186 } 187 188 return doGetJobNames(); 189 } 190 191 private Document doPauseJob() { 192 String jobName = getParameter(JOB_NAME, ""); String groupName = getParameter(JOB_GROUP, ""); try { 195 sched.pauseJob(jobName, groupName); 196 } catch (SchedulerException e) { 197 e.printStackTrace(); 199 } 200 return doGetJobNames(); 201 } 202 203 206 private Document doIsSchedulerPaused() { 207 Document document = DocumentHelper.createDocument(); 208 document.setName(SCHEDULER_ACTION_STR); 209 Element root = document.addElement(getParameter(SCHEDULER_ACTION_STR, "")); try { 211 boolean isInStandby = sched.isInStandbyMode(); 212 root.addAttribute(RESULT, isInStandby ? Messages.getString("SchedulerAdminUIComponent.USER_isPaused") : Messages.getString("SchedulerAdminUIComponent.USER_isRunning")); } catch (SchedulerException e) { 214 error(Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); root.addAttribute(RESULT, Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); } 217 return document; 218 } 219 220 223 private Document doGetJobNames() { 224 Document document = DocumentHelper.createDocument(); 225 document.setName(SCHEDULER_ACTION_STR); 226 Element root = document.addElement(GET_JOB_NAMES_ACTION_STR); 227 try { 228 String [] triggerGroups = sched.getTriggerGroupNames(); 229 for (int i = 0; i < triggerGroups.length; i++) { 230 String [] triggerNames = sched.getTriggerNames(triggerGroups[i]); 231 for (int j = 0; j < triggerNames.length; j++) { 232 Element job = root.addElement(JOB); 233 job.addAttribute("triggerName", triggerNames[j]); job.addAttribute("triggerGroup", triggerGroups[i]); 236 try { 237 job.addAttribute("triggerState", Integer.toString(sched.getTriggerState(triggerNames[j], triggerGroups[i]))); 239 Trigger trigger = sched.getTrigger(triggerNames[j], triggerGroups[i]); 240 job.addAttribute("triggerName", trigger.getName()); job.addAttribute("triggerGroup", trigger.getGroup()); Date date = trigger.getNextFireTime(); 243 job.addAttribute("nextFireTime", (date == null) ? Messages.getString("SchedulerAdminUIComponent.USER_NEVER") : date.toString()); date = trigger.getPreviousFireTime(); 245 job.addAttribute("prevFireTime", (date == null) ? Messages.getString("SchedulerAdminUIComponent.USER_NEVER") : date.toString()); 247 job.addAttribute(JOB_NAME, trigger.getJobName()); 249 job.addAttribute(JOB_GROUP, trigger.getJobGroup()); 250 JobDetail jobDetail = sched.getJobDetail(trigger.getJobName(), trigger.getJobGroup()); 251 job.addElement("description").addCDATA(jobDetail.getDescription()); } catch (Exception e) { 255 job.addElement("description").addCDATA(e.getMessage()); job.addAttribute("triggerState", "3"); } 258 } 259 } 260 } catch (SchedulerException e) { 261 error(Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); root.addAttribute(RESULT, Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); } 264 265 return document; 266 } 267 268 271 private Document doResumeAll() { 272 Document document = DocumentHelper.createDocument(); 273 document.setName(SCHEDULER_ACTION_STR); 274 Element root = document.addElement(getParameter(SCHEDULER_ACTION_STR, "")); try { 276 sched.resumeAll(); 277 root.addAttribute(RESULT, Messages.getString("SchedulerAdminUIComponent.USER_JobsResumed")); } catch (SchedulerException e) { 279 error(Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); root.addAttribute(RESULT, Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); } 282 283 return document; 284 } 285 286 289 private Document doPauseAll() { 290 Document document = DocumentHelper.createDocument(); 291 document.setName(SCHEDULER_ACTION_STR); 292 Element root = document.addElement(getParameter(SCHEDULER_ACTION_STR, "")); try { 294 sched.pauseAll(); 295 root.addAttribute(RESULT, Messages.getString("SchedulerAdminUIComponent.USER_JobsSuspended")); } catch (SchedulerException e) { 297 error(Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); root.addAttribute(RESULT, Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); } 300 301 return document; 302 } 303 304 } 305 | Popular Tags |