package cn.jcenterhome.web.action.admin; import java.io.File; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import cn.jcenterhome.util.Common; import cn.jcenterhome.util.JavaCenterHome; import cn.jcenterhome.web.action.BaseAction; public class CronAction extends BaseAction { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { if (!Common.checkPerm(request, response, "managecron")) { return cpMessage(request, mapping, "cp_no_authority_management_operation"); } int cronid = Common.intval(request.getParameter("cronid")); try { if (submitCheck(request, "cronsubmit")) { String name = Common.htmlSpecialChars(request.getParameter("name")); String fileName = Common.trim(request.getParameter("filename")); fileName = fileName.replace("..", "").replace("/", "").replace("\\", "").trim(); File file = new File(JavaCenterHome.jchRoot + "./source/cron/" + fileName); if (Common.empty(fileName) || !file.isFile() || !file.canRead()) { return cpMessage(request, mapping, "cp_designated_script_file_incorrect"); } String weekday = request.getParameter("weekday"); String day = request.getParameter("day"); if (!"-1".equals(weekday)) { day = "-1"; } String[] minute = request.getParameterValues("minute"); String postminute = ""; if (minute != null) { Map<String, String> tempMap = new HashMap<String, String>(); int tempI = 0; for (String subM : minute) { tempI = Integer.parseInt(subM); if (tempI > -1 && tempI < 60) { tempMap.put(subM, ""); } } tempI = tempMap.size(); if (tempI > 0) { minute = new String[tempI]; Set<String> keySet = tempMap.keySet(); Iterator<String> iterator = keySet.iterator(); tempI = 0; while (iterator.hasNext()) { minute[tempI++] = iterator.next(); } Arrays.sort(minute); StringBuilder builder = new StringBuilder(); for (String tempS : minute) { builder.append(tempS); builder.append("\t"); } postminute = builder.substring(0, builder.length() - 1); } } String hour = request.getParameter("hour"); if ("-1".equals(weekday) && "-1".equals(day) && "-1".equals(hour) && "".equals(postminute)) { return cpMessage(request, mapping, "cp_implementation_cycle_incorrect_script"); } Map<String, Object> setData = new HashMap<String, Object>(); setData.put("name", name); setData.put("filename", fileName); setData.put("available", request.getParameter("available")); setData.put("weekday", weekday); setData.put("day", day); setData.put("hour", hour); setData.put("minute", postminute); if (Common.empty(cronid)) { setData.put("type", "user"); Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal"); setData.put("nextrun", String.valueOf(sGlobal.get("timestamp"))); setData.put("cronid", dataBaseService.insertTable("cron", setData, true, false)); } else { Map<String, Object> whereData = new HashMap<String, Object>(); whereData.put("cronid", cronid); dataBaseService.updateTable("cron", setData, whereData); setData.put("cronid", cronid); } cronService.cronNextRun(request, setData); cronService.cron_config(request); return cpMessage(request, mapping, "do_success", "admincp.jsp?ac=cron"); } } catch (Exception exception) { return showMessage(request, response, exception.getMessage()); } Map<String, Object> thevalue = null; DecimalFormat format = new DecimalFormat("00"); String op = request.getParameter("op"); if ("edit".equals(op)) { List<Map<String, Object>> query = dataBaseService.executeQuery("SELECT * FROM " + JavaCenterHome.getTableName("cron") + " WHERE cronid='" + cronid + "'"); if (query.size() > 0) { thevalue = query.get(0); } } else if ("add".equals(op)) { thevalue = new HashMap<String, Object>(); thevalue.put("week", -1); thevalue.put("hour", -1); thevalue.put("day", -1); thevalue.put("minute", "0"); thevalue.put("available", 1); } else if ("delete".equals(op)) { dataBaseService.execute("DELETE FROM " + JavaCenterHome.getTableName("cron") + " WHERE cronid='" + cronid + "' AND type='user'"); try { cronService.cron_config(request); } catch (Exception e) { return showMessage(request, response, e.getMessage()); } return cpMessage(request, mapping, "do_success", "admincp.jsp?ac=cron"); } else if ("run".equals(op)) { try { cronService.runCron(request, response, cronid); } catch (Exception e) { return showMessage(request, response, e.getMessage()); } return cpMessage(request, mapping, "do_success", "admincp.jsp?ac=cron"); } else { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); List<Map<String, Object>> query = dataBaseService.executeQuery("SELECT * FROM " + JavaCenterHome.getTableName("cron") + " ORDER BY type DESC"); String[] tempArray = {"weekday", "day", "hour", "minute"}; String[] minuteArray = null; String tempS; for (Map<String, Object> cron : query) { for (String key : tempArray) { tempS = String.valueOf(cron.get(key)).trim(); if (tempS.equals("") || tempS.equals("-1")) { cron.put(key, "*"); } else if (key.equals("weekday")) { cron.put(key, 1 + (Integer) cron.get(key)); } else if (key.equals("minute")) { minuteArray = ((String) cron.get(key)).split("\t"); for (int i = 0; i < minuteArray.length; i++) { minuteArray[i] = format.format(Long.parseLong(minuteArray[i])); } StringBuilder buf = new StringBuilder(); for (int i = 0; i < minuteArray.length; i++) { if (i != 0) buf.append(", "); buf.append(minuteArray[i]); } cron.put(key, buf.toString()); } } int lastrun = (Integer) cron.get("lastrun"); if (lastrun == 0) { cron.put("lastrun", "N/A"); } else { cron.put("lastrun", Common.sgmdate(request, "yyyy-MM-dd HH:mm:ss", lastrun)); } int nextrun = (Integer) cron.get("nextrun"); if (nextrun == 0 || (Integer) cron.get("available") == 0) { cron.put("nextrun", "N/A"); } else { cron.put("nextrun", Common.sgmdate(request, "yyyy-MM-dd HH:mm:ss", nextrun)); } list.add(cron); } Map<String, String> actives = new HashMap<String, String>(); actives.put("view", " class=\"active\""); request.setAttribute("actives", actives); request.setAttribute("list", list); } if (thevalue != null) { StringBuilder daystr = new StringBuilder(); StringBuilder hourstr = new StringBuilder(); StringBuilder minuteselect = new StringBuilder(); String selstr; Object tempO = thevalue.get("weekday"); if (tempO != null) { Map<String, String> weekdays = new HashMap<String, String>(); weekdays.put(String.valueOf(tempO), " selected"); request.setAttribute("weekdays", weekdays); } for (int i = 1; i < 32; i++) { selstr = (Integer) thevalue.get("day") == i ? " selected" : ""; daystr.append("<option value=\""); daystr.append(i); daystr.append("\""); daystr.append(selstr); daystr.append(">"); daystr.append(i); daystr.append("</option>"); } for (int i = 1; i < 24; i++) { selstr = (Integer) thevalue.get("hour") == i ? " selected" : ""; hourstr.append("<option value=\""); hourstr.append(i); hourstr.append("\""); hourstr.append(selstr); hourstr.append(">"); hourstr.append(i); hourstr.append("</option>"); } String[] cronminutearr = ((String) thevalue.get("minute")).trim().split("\t"); String selected; for (int i = 0; i < 12; i++) { minuteselect.append("<select name=\"minute\"><option value=\"-1\">*</option>"); for (int j = 0; j < 60; j++) { selected = ""; if (cronminutearr.length - 1 >= i && Integer.parseInt(cronminutearr[i]) == j) { selected = " selected"; } minuteselect.append("<option value=\""); minuteselect.append(j); minuteselect.append("\""); minuteselect.append(selected); minuteselect.append(">"); minuteselect.append(format.format(j)); minuteselect.append("</option>"); } minuteselect.append("</select>"); if (i == 5) { minuteselect.append("<br>"); } else { minuteselect.append(" "); } } Map<String, String> availables = new HashMap<String, String>(); availables.put(String.valueOf(thevalue.get("available")), " checked"); request.setAttribute("thevalue", thevalue); request.setAttribute("daystr", daystr.toString()); request.setAttribute("hourstr", hourstr.toString()); request.setAttribute("minuteselect", minuteselect.toString()); request.setAttribute("availables", availables); } request.setAttribute("op", op); request.setAttribute("cronid", cronid); return mapping.findForward("cron"); } }