KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > pentaho > ui > component > SchedulerAdminUIComponent


1 /*
2  * Copyright 2006 Pentaho Corporation. All rights reserved.
3  * This software was developed by Pentaho Corporation and is provided under the terms
4  * of the Mozilla Public License, Version 1.1, or any later version. You may not use
5  * this file except in compliance with the license. If you need a copy of the license,
6  * please go to http://www.mozilla.org/MPL/MPL-1.1.txt. The Original Code is the Pentaho
7  * BI Platform. The Initial Developer is Pentaho Corporation.
8  *
9  * Software distributed under the Mozilla Public License is distributed on an "AS IS"
10  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
11  * the license for the specific language governing your rights and limitations.
12  *
13  * Created Aug 15, 2005
14  * @author wseyler
15  */

16
17 package org.pentaho.ui.component;
18
19 import java.util.Date JavaDoc;
20 import java.util.List JavaDoc;
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 /**
37  * @author wseyler
38  *
39  * TODO To change the template for this generated type comment go to Window -
40  * Preferences - Java - Code Style - Code Templates
41  */

42 public class SchedulerAdminUIComponent extends XmlComponent {
43     /**
44      *
45      */

46     private static final long serialVersionUID = 2963902264708970014L;
47
48     private static final String JavaDoc JOB = "job"; //$NON-NLS-1$
49

50     private static final String JavaDoc JOB_NAME = "jobName"; //$NON-NLS-1$
51

52     private static final String JavaDoc RESULT = "schedulerResults"; //$NON-NLS-1$
53

54     private static final String JavaDoc JOB_GROUP = "jobGroup"; //$NON-NLS-1$
55

56     public static final String JavaDoc RESUME_SCHEDULER_ACTION_STR = "resumeScheduler"; //$NON-NLS-1$
57

58     public static final String JavaDoc SUSPEND_SCHEDULER_ACTION_STR = "suspendScheduler"; //$NON-NLS-1$
59

60     public static final String JavaDoc GET_JOB_NAMES_ACTION_STR = "getJobNames"; //$NON-NLS-1$
61

62     public static final String JavaDoc GET_IS_SCHEDULER_PAUSED_ACTION_STR = "isSchedulerPaused"; //$NON-NLS-1$
63

64     public static final String JavaDoc PAUSE_JOB_ACTION_STR = "pauseJob"; //$NON-NLS-1$
65

66     public static final String JavaDoc RESUME_JOB_ACTION_STR = "resumeJob"; //$NON-NLS-1$
67

68     public static final String JavaDoc DELETE_JOB_ACTION_STR = "deleteJob"; //$NON-NLS-1$
69

70     public static final String JavaDoc SCHEDULER_ACTION_STR = "schedulerAction"; //$NON-NLS-1$
71

72     public static final String JavaDoc RUN_JOB_ACTION_STR = "executeJob"; //$NON-NLS-1$
73

74     private Scheduler sched = null;
75
76     private static final Log logger = LogFactory.getLog(SchedulerAdminUIComponent.class);
77
78     /**
79      * @param urlFactory
80      */

81     public SchedulerAdminUIComponent(IPentahoUrlFactory urlFactory, List JavaDoc messages) {
82         super(urlFactory, messages, null);
83         try {
84             sched = QuartzSystemListener.getSchedulerInstance();
85         } catch (Exception JavaDoc e) {
86             error(Messages.getString(Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0002_NoScheduler") + e.toString())); //$NON-NLS-1$
87
e.printStackTrace();
88         }
89         setXsl("text/html", "SchedulerAdmin.xsl"); //$NON-NLS-1$ //$NON-NLS-2$
90
}
91
92     /*
93      * (non-Javadoc)
94      *
95      * @see org.pentaho.core.system.PentahoBase#getLogger()
96      */

97     public Log getLogger() {
98         return logger;
99     }
100
101     /*
102      * (non-Javadoc)
103      *
104      * @see org.pentaho.core.ui.component.BaseUIComponent#validate()
105      */

106     public boolean validate() {
107         return true;
108     }
109
110     /*
111      * (non-Javadoc)
112      *
113      * @see org.pentaho.core.ui.component.BaseUIComponent#getXmlContent()
114      */

115     public Document getXmlContent() {
116         String JavaDoc schedulerActionStr = getParameter(SCHEDULER_ACTION_STR, GET_JOB_NAMES_ACTION_STR);
117         setXslProperty("baseUrl", urlFactory.getDisplayUrlBuilder().getUrl()); //$NON-NLS-1$
118

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             // returns a blank document if
141
// nothing else excuted.
142
/*
143              * TODO Create some sort of document to display when the default
144              * action occurs.
145              */

146         }
147     }
148
149     private Document doExecuteJobNow() {
150         String JavaDoc jobName = getParameter(JOB_NAME, ""); //$NON-NLS-1$
151
String JavaDoc groupName = getParameter(JOB_GROUP, ""); //$NON-NLS-1$
152
Trigger trigger = new SimpleTrigger("Immediate", "DEFAULT"); //$NON-NLS-1$ //$NON-NLS-2$
153

154         try {
155             JobDetail jobDetail = sched.getJobDetail(jobName, groupName);
156             jobDetail.setGroup("Immediate"); //$NON-NLS-1$
157
sched.scheduleJob(jobDetail, trigger);
158         } catch (SchedulerException e) {
159             // TODO Auto-generated catch block
160
e.printStackTrace();
161         }
162         return doGetJobNames();
163     }
164
165     private Document doDeleteJob() {
166         String JavaDoc jobName = getParameter(JOB_NAME, ""); //$NON-NLS-1$
167
String JavaDoc groupName = getParameter(JOB_GROUP, ""); //$NON-NLS-1$
168
try {
169             sched.deleteJob(jobName, groupName);
170         } catch (SchedulerException e) {
171             // TODO Auto-generated catch block
172
e.printStackTrace();
173         }
174
175         return doGetJobNames();
176     }
177
178     private Document doResumeJob() {
179         String JavaDoc jobName = getParameter(JOB_NAME, ""); //$NON-NLS-1$
180
String JavaDoc groupName = getParameter(JOB_GROUP, ""); //$NON-NLS-1$
181
try {
182             sched.resumeJob(jobName, groupName);
183         } catch (SchedulerException e) {
184             // TODO Auto-generated catch block
185
e.printStackTrace();
186         }
187
188         return doGetJobNames();
189     }
190
191     private Document doPauseJob() {
192         String JavaDoc jobName = getParameter(JOB_NAME, ""); //$NON-NLS-1$
193
String JavaDoc groupName = getParameter(JOB_GROUP, ""); //$NON-NLS-1$
194
try {
195             sched.pauseJob(jobName, groupName);
196         } catch (SchedulerException e) {
197             // TODO Auto-generated catch block
198
e.printStackTrace();
199         }
200         return doGetJobNames();
201     }
202
203     /**
204      * @return
205      */

206     private Document doIsSchedulerPaused() {
207         Document document = DocumentHelper.createDocument();
208         document.setName(SCHEDULER_ACTION_STR);
209         Element root = document.addElement(getParameter(SCHEDULER_ACTION_STR, "")); //$NON-NLS-1$
210
try {
211             boolean isInStandby = sched.isInStandbyMode();
212             root.addAttribute(RESULT, isInStandby ? Messages.getString("SchedulerAdminUIComponent.USER_isPaused") : Messages.getString("SchedulerAdminUIComponent.USER_isRunning")); //$NON-NLS-1$ //$NON-NLS-2$
213
} catch (SchedulerException e) {
214             error(Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); //$NON-NLS-1$
215
root.addAttribute(RESULT, Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); //$NON-NLS-1$
216
}
217         return document;
218     }
219
220     /**
221      * @return
222      */

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 JavaDoc[] triggerGroups = sched.getTriggerGroupNames();
229             for (int i = 0; i < triggerGroups.length; i++) {
230                 String JavaDoc[] 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]); //$NON-NLS-1$
234
job.addAttribute("triggerGroup", triggerGroups[i]); //$NON-NLS-1$
235

236                     try {
237                         job.addAttribute("triggerState", Integer.toString(sched.getTriggerState(triggerNames[j], triggerGroups[i]))); //$NON-NLS-1$
238

239                         Trigger trigger = sched.getTrigger(triggerNames[j], triggerGroups[i]);
240                         job.addAttribute("triggerName", trigger.getName()); //$NON-NLS-1$
241
job.addAttribute("triggerGroup", trigger.getGroup()); //$NON-NLS-1$
242
Date JavaDoc date = trigger.getNextFireTime();
243                         job.addAttribute("nextFireTime", (date == null) ? Messages.getString("SchedulerAdminUIComponent.USER_NEVER") : date.toString()); //$NON-NLS-1$ //$NON-NLS-2$
244
date = trigger.getPreviousFireTime();
245                         job.addAttribute("prevFireTime", (date == null) ? Messages.getString("SchedulerAdminUIComponent.USER_NEVER") : date.toString()); //$NON-NLS-1$ //$NON-NLS-2$
246

247                         // get the job info
248
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()); //$NON-NLS-1$
252
// job.addAttribute("class",
253
// jobDetail.getClass().getName()); //$NON-NLS-1$
254
} catch (Exception JavaDoc e) {
255                         job.addElement("description").addCDATA(e.getMessage()); //$NON-NLS-1$
256
job.addAttribute("triggerState", "3"); // ERROR //$NON-NLS-1$ //$NON-NLS-2$
257
}
258                 }
259             }
260         } catch (SchedulerException e) {
261             error(Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); //$NON-NLS-1$
262
root.addAttribute(RESULT, Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); //$NON-NLS-1$
263
}
264
265         return document;
266     }
267
268     /**
269      * @return
270      */

271     private Document doResumeAll() {
272         Document document = DocumentHelper.createDocument();
273         document.setName(SCHEDULER_ACTION_STR);
274         Element root = document.addElement(getParameter(SCHEDULER_ACTION_STR, "")); //$NON-NLS-1$
275
try {
276             sched.resumeAll();
277             root.addAttribute(RESULT, Messages.getString("SchedulerAdminUIComponent.USER_JobsResumed")); //$NON-NLS-1$
278
} catch (SchedulerException e) {
279             error(Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); //$NON-NLS-1$
280
root.addAttribute(RESULT, Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); //$NON-NLS-1$
281
}
282
283         return document;
284     }
285
286     /**
287      * @return
288      */

289     private Document doPauseAll() {
290         Document document = DocumentHelper.createDocument();
291         document.setName(SCHEDULER_ACTION_STR);
292         Element root = document.addElement(getParameter(SCHEDULER_ACTION_STR, "")); //$NON-NLS-1$
293
try {
294             sched.pauseAll();
295             root.addAttribute(RESULT, Messages.getString("SchedulerAdminUIComponent.USER_JobsSuspended")); //$NON-NLS-1$
296
} catch (SchedulerException e) {
297             error(Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); //$NON-NLS-1$
298
root.addAttribute(RESULT, Messages.getErrorString("SchedulerAdminUIComponent.ERROR_0001_ErrorInScheduler") + e.toString()); //$NON-NLS-1$
299
}
300
301         return document;
302     }
303
304 }
305
Popular Tags