/* * Copyright 2002-2006 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.openuap.cms.schedule.action; import java.util.Hashtable; import java.util.Map; import java.util.StringTokenizer; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.openuap.base.util.ControllerHelper; import org.openuap.base.util.StringUtil; import org.openuap.base.util.resource.ConstantLoader; import org.openuap.cms.schedule.ScheduleService; import org.openuap.cms.schedule.ScheduledJob; import org.openuap.cms.schedule.manager.ScheduleManager; import org.openuap.cms.schedule.model.Schedule; import org.openuap.runtime.setup.BootstrapUtils; import org.springframework.web.servlet.ModelAndView; /** * <p> * Description:计划任务管理控制器. * </p> * * <p> * $Id: ScheduleAction.java 3992 2011-01-05 06:34:18Z orangeforjava $ * </p> * * @author Joseph * @version 1.0 */ public class ScheduleAction extends ScheduleBaseAction { private ScheduleManager scheduleManager; private ScheduleService scheduleService; private String listViewName; private String showPropertiesViewName; private String jobQueueViewName; private String defaultScreensPath; private String showHelpViewName; private String rsViewName; public ScheduleAction() { initDefaultViewName(); } protected void initDefaultViewName() { defaultScreensPath = "/plugin/cms/base/screens/schedule/"; listViewName = defaultScreensPath + "list.html"; showPropertiesViewName = defaultScreensPath + "show_properties.html"; jobQueueViewName = defaultScreensPath + "show_job_queue.html"; showHelpViewName = defaultScreensPath + "show_help.html"; rsViewName=defaultScreensPath + "schedule_operation_result.html"; host = BootstrapUtils.getBootstrapManager("base").getApplicationConfig().getString( "sys.host.id", "default"); } /** * 显示本机的任务 */ public ModelAndView perform(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) { String showHost=helper.getString("host",host); model.put("tasks", scheduleManager.getTasksByHost(showHost)); return new ModelAndView(listViewName, model); } /** * * @param request * @param response * @param helper * @param model * @return */ public ModelAndView doShowAllTasks(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) { model.put("tasks", scheduleManager.getAllTasks()); return new ModelAndView(listViewName, model); } /** * 保存计划任务定义 * @param request * @param response * @param helper * @param model * @return * @throws */ public ModelAndView doSaveTask(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { int id = helper.getInt("id"); Schedule schedule = scheduleManager.findById(id); if (schedule == null) { return errorPage(request, response, helper, "schedule_not_exist", model); } helper.setProperty(schedule); if (helper.getString("Host") == null) { schedule.setHost("NULL"); } scheduleManager.saveSchedule(schedule); return perform(request, response, helper, model); } /** * 添加新任务 * @param request * * @param response * * @param helper * * @param model * * @return * @throws */ public ModelAndView doAddTask(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { Schedule schedule = new Schedule(); schedule.setHost(host); schedule.setDayOfMonth(-1); schedule.setMinute(0); schedule.setHour(1); schedule.setWeekDay(-1); // Oracle empty String schedule.setTask(" "); scheduleManager.addSchedule(schedule); return perform(request, response, helper, model); } /** * 删除任务 * @param request * @param response * @param helper * @param model * @return * @throws Exception */ public ModelAndView doRemoveTask(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { int id = helper.getInt("id"); Schedule schedule = scheduleManager.findById(id); if (schedule == null) { return errorPage(request, response, helper, "schedule_not_exist", model); } scheduleManager.deleteSchedule(schedule); return perform(request, response, helper, model); } /** * 重新启动计划任务服务 * @param request * @param response * @param helper * @param model * @return * @throws Exception */ public ModelAndView doRestart(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { scheduleService.destroy(); scheduleService.init(); return doShowJobQueue(request, response, helper, model); } /** * 显示任务属性 * * @param request * * @param response * * @param helper * * @param model * * @return */ public ModelAndView doShowTaskProperties(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) { int id = helper.getInt("id"); Schedule schedule = scheduleManager.findById(id); if (schedule == null) { return errorPage(request, response, helper, "schedule_not_exist", model); } model.put("task", schedule); model.put("properties", StringUtil.str2hash(schedule.getProperty())); return new ModelAndView(showPropertiesViewName, model); } /** * 执行任务 * * @param request * * @param response * * @param helper * * @param model * * @return */ public ModelAndView doExecuteTask(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) { ModelAndView mv=new ModelAndView(rsViewName); int id = helper.getInt("id"); Schedule schedule = null; String className = null; String rs="success"; if (id > 0) { schedule = scheduleManager.findById(id); if (schedule == null) { rs="failed"; model.put("rs", rs); model.put("msgs","schedule_not_exist"); return mv; } className = schedule.getTask(); } else { className = helper.getString("class"); } try { Class task = this.getClass().forName(className); ScheduledJob job = (ScheduledJob) task.newInstance(); job.run(schedule.toJobEntry()); model.put("rs", rs); } catch (ClassNotFoundException e1) { rs="failed"; model.put("rs", rs); model.put("msgs","Class " + className + " is not found ! Please check the task name again."); return mv; } catch (Exception ex) { ex.printStackTrace(); log.error("Can't execute task", ex); rs="failed"; model.put("rs", rs); model.put("msgs",ex.getMessage()); return mv; } return mv; } /** * 保存任务属性 * * @param request * * @param response * * @param helper * * @param model * * @return * @throws */ public ModelAndView doSaveTaskProperty(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { int id = helper.getInt("id"); String key = helper.getString("key"); String value = helper.getString("value"); if (key.length() > 0 && value.length() > 0) { Schedule schedule = scheduleManager.findById(id); Hashtable hash = StringUtil.str2hash(schedule.getProperty()); hash.put(key, value); schedule.setProperty(StringUtil.hash2str(hash)); scheduleManager.saveSchedule(schedule); } return doShowTaskProperties(request, response, helper, model); } /** * 保存所有任务属性 * * @param request * * @param response * * @param helper * * @param model * * @return * @throws */ public ModelAndView doSaveAllTaskProperties(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { String str = helper.getString("value", ""); int id = helper.getInt("id"); Schedule schedule = scheduleManager.findById(id); Hashtable hash = StringUtil.str2hash(schedule.getProperty()); StringTokenizer st = new StringTokenizer(str, "&"); String key, value; while (st.hasMoreTokens()) { String pairs = st.nextToken(); int pos = pairs.indexOf("="); if (pos < 1) { continue; } key = pairs.substring(0, pos); value = pairs.substring(pos + 1, pairs.length()); hash.put(key, value); } schedule.setProperty(StringUtil.hash2str(hash)); scheduleManager.saveSchedule(schedule); return doShowTaskProperties(request, response, helper, model); } /** * 删除任务属性 * * @param request * * @param response * * @param helper * * @param model * * @return * @throws */ public ModelAndView doRemoveTaskProperty(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { int id = helper.getInt("id"); String key = helper.getString("key"); if (key.length() > 0) { Schedule schedule = scheduleManager.findById(id); Hashtable hash = StringUtil.str2hash(schedule.getProperty()); hash.remove(key); schedule.setProperty(StringUtil.hash2str(hash)); scheduleManager.saveSchedule(schedule); } return doShowTaskProperties(request, response, helper, model); } /** * 显示任务序列 * * @param request * * @param response * * @param helper * * @param model * * @return */ public ModelAndView doShowJobQueue(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) { model.put("jobs", scheduleService.getScheduleQueue().list()); return new ModelAndView(this.jobQueueViewName, model); } /** * 显示计划任务帮助 * * @param request * * @param response * * @param helper * * @param model * * @return */ public ModelAndView doShowHelp(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) { int id = helper.getInt("id"); Schedule schedule = scheduleManager.findById(id); if (schedule == null) { return errorPage(request, response, helper, "schedule_not_exist", model); } model.put("schedule", schedule); String help = ConstantLoader.load("TaskHelp.xml").getString(schedule.getTask()); if (help != null) { model.put("help", help); ConstantLoader.unload("TaskHelp.xml"); } helper.setLayout("layouts/none.html"); return new ModelAndView(showHelpViewName, model); } public void setShowPropertiesViewName(String showPropertiesViewName) { this.showPropertiesViewName = showPropertiesViewName; } public void setShowHelpViewName(String showHelpViewName) { this.showHelpViewName = showHelpViewName; } public void setScheduleService(ScheduleService scheduleService) { this.scheduleService = scheduleService; } public void setScheduleManager(ScheduleManager scheduleManager) { this.scheduleManager = scheduleManager; } public void setListViewName(String listViewName) { this.listViewName = listViewName; } public void setJobQueueViewName(String jobQueueViewName) { this.jobQueueViewName = jobQueueViewName; } public void setDefaultScreensPath(String defaultScreensPath) { this.defaultScreensPath = defaultScreensPath; } }