/** * Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved. * EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * http://www.ewcms.com */ package com.ewcms.scheduling.manager.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import java.util.StringTokenizer; import javax.servlet.http.HttpServletRequest; import com.ewcms.plugin.report.generate.vo.PageShowParam; import com.ewcms.plugin.report.model.Parameter; import com.ewcms.scheduling.generate.job.report.model.EwcmsJobParameter; import com.ewcms.scheduling.manager.vo.PageDisplayVO; import com.ewcms.scheduling.model.JobCalendarTrigger; import com.ewcms.scheduling.model.JobInfo; import com.ewcms.scheduling.model.JobSimpleTrigger; import com.ewcms.scheduling.model.JobTrigger; /** * @author 吴智俊 */ public class ConversionUtil { /** * 字符串转换成整型数组 * * @param value 字符串 * @return 整型数组 */ public static Integer[] stringToArray(String value) { if (value != null && value.length() > 0) { StringTokenizer tokenizer = new StringTokenizer(value, ",", false); Integer[] values = new Integer[tokenizer.countTokens()]; for (int i = 0; tokenizer.hasMoreElements(); i++) { values[i] = Integer.valueOf(tokenizer.nextToken()); } return values; } else { return new Integer[0]; } } /** * 整型数组转换成字符串 * * @param values 整型数组 * @return 字符串 */ public static String arrayToString(Integer[] values) { String value = ""; if (values != null && values.length > 0) { for (Integer i : values) { value += i + ","; } if (value.length() > 0) { value = value.substring(0, value.length() - 1); } } return value; } public static PageDisplayVO constructPageVo(JobInfo jobInfo) { SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); PageDisplayVO pageDisplayVo = new PageDisplayVO(); if (jobInfo == null) return pageDisplayVo; // 任务(Job)信息 // pageDisplayVo.setJobId(jobInfo.getId()); pageDisplayVo.setJobVersion(jobInfo.getVersion()); pageDisplayVo.setLabel(jobInfo.getLabel()); pageDisplayVo.setUserName(jobInfo.getUserName()); pageDisplayVo.setDescription(jobInfo.getDescription()); if (jobInfo.getJobClass() != null){ pageDisplayVo.setJobClassId(jobInfo.getJobClass().getId()); } // 开始状态 // if (jobInfo.getTrigger().getStartType().intValue() == 1) {// 立刻执行 // pageDisplayVo.setStart(1); } else {// 开始时间 // pageDisplayVo.setStart(2); Date startDate = jobInfo.getTrigger().getStartDate(); if (startDate != null){ pageDisplayVo.setStartDate(bartDateFormat.format(startDate)); } } // 调度计划 // JobTrigger trigger = jobInfo.getTrigger(); if (trigger != null) { pageDisplayVo.setTriggerId(trigger.getId()); pageDisplayVo.setTriggerVersion(trigger.getVersion()); if (trigger instanceof JobSimpleTrigger) { Integer recurrenceInterval = ((JobSimpleTrigger) trigger).getRecurrenceInterval(); Integer recurrenceIntervalUnit = ((JobSimpleTrigger) trigger).getRecurrenceIntervalUnit(); Integer occurenceCount = ((JobSimpleTrigger) trigger).getOccurrenceCount(); if (recurrenceInterval == null && recurrenceIntervalUnit == null && occurenceCount == 1) { pageDisplayVo.setMode(0); pageDisplayVo.setOccurrenceCount(occurenceCount); } else {// 简单 // pageDisplayVo.setMode(1); pageDisplayVo.setRecurrenceInterval(((JobSimpleTrigger) trigger).getRecurrenceInterval()); pageDisplayVo.setRecurrenceIntervalUnit(((JobSimpleTrigger) trigger).getRecurrenceIntervalUnit()); Date endDate = ((JobSimpleTrigger) trigger).getEndDate(); if (endDate == null && occurenceCount == -1) {// 无限期 // pageDisplayVo.setOccur(1); pageDisplayVo.setEndDateSimple(null); pageDisplayVo.setOccurrenceCount(null); } else if (endDate != null && occurenceCount == -1) {// 结束日期 // pageDisplayVo.setOccur(2); pageDisplayVo.setEndDateSimple(bartDateFormat.format(endDate)); pageDisplayVo.setOccurrenceCount(null); } else if (endDate == null && occurenceCount > 0) {// 次数 // pageDisplayVo.setOccur(3); pageDisplayVo.setEndDateSimple(null); pageDisplayVo.setOccurrenceCount(occurenceCount); } } } else if (trigger instanceof JobCalendarTrigger) { pageDisplayVo.setMode(2);// 复杂 // pageDisplayVo.setMinutes(((JobCalendarTrigger) trigger).getMinutes());// 分钟 // pageDisplayVo.setHours(((JobCalendarTrigger) trigger).getHours());// 小时 // pageDisplayVo.setMonths(ConversionUtil.stringToArray(((JobCalendarTrigger) trigger).getMonths()));// 月份 // Date endDate = ((JobCalendarTrigger) trigger).getEndDate(); if (endDate != null){ pageDisplayVo.setEndDateCalendar(bartDateFormat.format(endDate)); } String weekDays = ((JobCalendarTrigger) trigger).getWeekDays(); String monthDays = ((JobCalendarTrigger) trigger).getMonthDays(); if (weekDays != null && weekDays.length() > 0) {// 一周之内 // pageDisplayVo.setDays(2); pageDisplayVo.setWeekDays(ConversionUtil.stringToArray(weekDays)); pageDisplayVo.setMonthDays(null); } else if (monthDays != null && monthDays.length() > 0) {// 一月之内 // pageDisplayVo.setDays(3); pageDisplayVo.setWeekDays(null); pageDisplayVo.setMonthDays(ConversionUtil.stringToArray(monthDays)); } else {// 每一天 // pageDisplayVo.setDays(1); pageDisplayVo.setWeekDays(null); pageDisplayVo.setMonthDays(null); } } else {// 无 // pageDisplayVo.setMode(0); pageDisplayVo.setOccurrenceCount(1); } } return pageDisplayVo; } public static JobInfo constructJobInfoVo(JobInfo jobInfo, PageDisplayVO pageDisplayVo) { SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); try { jobInfo.setVersion(pageDisplayVo.getJobVersion()); jobInfo.setLabel(pageDisplayVo.getLabel()); jobInfo.setUserName(pageDisplayVo.getUserName()); jobInfo.setDescription(pageDisplayVo.getDescription()); if (pageDisplayVo.getMode() == 0) {// 无 // JobSimpleTrigger t = new JobSimpleTrigger(); t.setId(pageDisplayVo.getTriggerId()); t.setVersion(pageDisplayVo.getTriggerVersion()); if (pageDisplayVo.getStart() == 1) {// 立刻执行 // t.setStartType(1); t.setStartDate(null); } else {// 开始时间 // t.setStartType(2); if (pageDisplayVo.getStartDate() != null && !pageDisplayVo.getStartDate().equals("")) { t.setStartDate(bartDateFormat.parse(pageDisplayVo.getStartDate())); } } t.setOccurrenceCount(1); jobInfo.setTrigger(t); } else if (pageDisplayVo.getMode() == 1) {// SimpleTrigger // JobSimpleTrigger st = new JobSimpleTrigger(); if (pageDisplayVo.getStart() == 1) {// 立刻执行 // st.setStartType(1); st.setStartDate(null); } else {// 开始时间 // st.setStartType(2); if (pageDisplayVo.getStartDate() != null && !pageDisplayVo.getStartDate().equals("")) { st.setStartDate(bartDateFormat.parse(pageDisplayVo.getStartDate())); } } st.setId(pageDisplayVo.getTriggerId()); st.setVersion(pageDisplayVo.getTriggerVersion()); st.setRecurrenceInterval(pageDisplayVo.getRecurrenceInterval()); st.setRecurrenceIntervalUnit(pageDisplayVo.getRecurrenceIntervalUnit()); if (pageDisplayVo.getOccur() == 1) {// 无限期 // st.setOccurrenceCount(-1); st.setEndDate(null); } else if (pageDisplayVo.getOccur() == 2) {// 结束日期 // st.setOccurrenceCount(-1); if (pageDisplayVo.getEndDateSimple() != null && !pageDisplayVo.getEndDateSimple().equals("")) { st.setEndDate(bartDateFormat.parse(pageDisplayVo.getEndDateSimple())); } } else if (pageDisplayVo.getOccur() == 3) {// 次数 // st.setOccurrenceCount(pageDisplayVo.getOccurrenceCount()); st.setEndDate(null); } jobInfo.setTrigger(st); } else if (pageDisplayVo.getMode() == 2) {// CalendarTrigger JobCalendarTrigger ct = new JobCalendarTrigger(); if (pageDisplayVo.getStart() == 1) {// 立刻执行 // ct.setStartType(1); ct.setStartDate(null); } else {// 开始时间 // ct.setStartType(2); if (pageDisplayVo.getStartDate() != null && !pageDisplayVo.getStartDate().equals("")) { ct.setStartDate(bartDateFormat.parse(pageDisplayVo.getStartDate())); } } ct.setId(pageDisplayVo.getTriggerId()); ct.setVersion(pageDisplayVo.getTriggerVersion()); if (pageDisplayVo.getEndDateCalendar() != null && !pageDisplayVo.getEndDateCalendar().equals("")) { ct.setEndDate(bartDateFormat.parse(pageDisplayVo.getEndDateCalendar())); } ct.setMinutes(pageDisplayVo.getMinutes()); ct.setHours(pageDisplayVo.getHours()); ct.setDaysType(pageDisplayVo.getDays()); ct.setMonths(ConversionUtil.arrayToString(pageDisplayVo.getMonths())); if (pageDisplayVo.getDays() == 1) {// 每天 // ct.setWeekDays(null); ct.setMonthDays(null); } else if (pageDisplayVo.getDays() == 2) {// 一周内 // ct.setWeekDays(ConversionUtil.arrayToString(pageDisplayVo.getWeekDays())); ct.setMonthDays(null); } else if (pageDisplayVo.getDays() == 3) {// 一个月内 // ct.setWeekDays(null); ct.setMonthDays(ConversionUtil.arrayToString(pageDisplayVo.getMonthDays())); } jobInfo.setTrigger(ct); } return jobInfo; } catch (ParseException e) { e.printStackTrace(); } return new JobInfo(); } /** * 如果调度器中有参数值与原参数的默认值不相等,则使用调度器中的参数值 * * @param ewcmsJobParameters * 调度器参数集合 * @param pageShowParams * 页面原参数集合 * @return 页面原参数集合 */ public static List<PageShowParam> coversionParameterFromPage(List<EwcmsJobParameter> ewcmsJobParameters, List<PageShowParam> pageShowParams) { for (PageShowParam pageShowParam : pageShowParams) { Long paramId = pageShowParam.getId(); String enName = pageShowParam.getEnName(); String pageValue = pageShowParam.getDefaultValue(); for (EwcmsJobParameter ewcmsJobParameter : ewcmsJobParameters) { if (paramId.intValue() == ewcmsJobParameter.getParameter().getId().intValue() && enName.equals(ewcmsJobParameter.getParameter().getEnName())) { String value = ewcmsJobParameter.getParameterValue(); if (value != null && !value.equals(pageValue)) { pageShowParam.setDefaultValue(value); break; } } } } return pageShowParams; } /** * * @param ewcmsJobParameters * @param parameters * @return */ public static Set<EwcmsJobParameter> pageToJob(Set<EwcmsJobParameter> ewcmsJobParameters,Set<Parameter> parameters,HttpServletRequest request){ EwcmsJobParameter jobParameter = null; if (!parameters.isEmpty()) { if (ewcmsJobParameters.isEmpty()){ ewcmsJobParameters = new LinkedHashSet<EwcmsJobParameter>(); for (Parameter parameter : parameters) { String value = (String) request.getParameter(parameter.getEnName()); jobParameter = new EwcmsJobParameter(); jobParameter.setParameter(parameter); jobParameter.setParameterValue(value); ewcmsJobParameters.add(jobParameter); } }else{ for (Parameter parameter : parameters){ String enName = parameter.getEnName(); String value = (String) request.getParameter(parameter.getEnName()); Boolean mate = false; for (EwcmsJobParameter ewcmsJobParameter : ewcmsJobParameters){ String jobEnName = ewcmsJobParameter.getParameter().getEnName(); if (enName.equals(jobEnName)){ ewcmsJobParameter.setParameterValue(value); mate = true; break; } } if (!mate){ jobParameter = new EwcmsJobParameter(); jobParameter.setParameter(parameter); jobParameter.setParameterValue(value); ewcmsJobParameters.add(jobParameter); } } } }else{ ewcmsJobParameters = new LinkedHashSet<EwcmsJobParameter>(); } return ewcmsJobParameters; } }