advancedschedulewizardcontroller.java

来自「Java的框架」· Java 代码 · 共 784 行 · 第 1/3 页

JAVA
784
字号
package mcaps.core.scheduling.webapp.controller;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContextException;
import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.web.bind.RequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;


import mcap.core.base.webapp.controller.BaseWizardFormController;
import mcap.core.scheduling.model.AdvancedSchedule;
import mcap.core.scheduling.model.Job;
import mcap.core.scheduling.model.Schedule;
import mcap.core.scheduling.service.ScheduleException;
import mcap.core.scheduling.service.ScheduleManager;
import mcap.core.base.webapp.util.DateTimeUtil;
import mcap.core.docman.service.impl.DocManManagerImpl;
import mcap.core.scheduling.util.SchedulingUtil;
import mcap.core.scheduling.util.NameConstants;
import mcap.core.user.service.RoleManager;

/**
 * @author jov
 * @date Feb 27, 2006
 * @version 1.0.1.0
 */
public class AdvancedScheduleWizardController extends BaseWizardFormController implements
		InitializingBean {

	private final static Log logger = LogFactory.getLog(DocManManagerImpl.class);

	private ScheduleManager scheduleManager;
	private RoleManager roleManager;

	/**
	 * Returns the scheduleManager.
	 * @return ScheduleManager
	 */
	public ScheduleManager getScheduleManager () {
		return scheduleManager;
	}

	/**
	 * Sets the scheduleManager.
	 * @param scheduleManager The scheduleManager to set.
	 */
	public void setScheduleManager (ScheduleManager scheduleManager) {
		this.scheduleManager = scheduleManager;
	}

	/**
	 * Returns the roleManager.
	 * @return RoleManager
	 */
	public RoleManager getRoleManager () {
		return roleManager;
	}

	/**
	 * Sets the roleManager.
	 * @param roleManager The roleManager to set.
	 */
	public void setRoleManager (RoleManager roleManager) {
		this.roleManager = roleManager;
	}

	// ===========================================================================================================
	// INITIALIZING BEAN IMPLEMENTATION
	// ===========================================================================================================

	/*
	 * (non-Javadoc)
	 * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
	 *      Invoked by a BeanFactory after it has set all bean properties
	 *      supplied. This allows the bean instance to perform initialization only
	 *      possible when all bean properties have been set and to throw an
	 *      exception in the event of misconfiguration.
	 */
	public void afterPropertiesSet () throws Exception {
		if (scheduleManager == null){
			logger.warn("Must set scheduleManager bean property on " + getClass ());
			throw new ApplicationContextException (
					"Must set scheduleManager bean property on " + getClass ());
		}
		if (roleManager == null){
			logger.warn("Must set roleManager bean property on " + getClass ());
			throw new ApplicationContextException (
					"Must set roleManager bean property on " + getClass ());
		}
	}

	/* (non-Javadoc)
	 * @see org.springframework.web.servlet.mvc.AbstractFormController#formBackingObject(javax.servlet.http.HttpServletRequest)
	 * Retrieve a backing object for the current form from the given request.
	 */
	protected Object formBackingObject (HttpServletRequest request)
			throws Exception {

		AdvancedSchedule advSchedule = null;

		String jobName = request.getParameter("jobName");
		String jobGrp = request.getParameter("jobGroupName");

		if (StringUtils.equals (request.getParameter("method"), "edit")) {
			advSchedule = (AdvancedSchedule)getSchedule (
					RequestUtils.getStringParameter(request, "scheduleName"),
					RequestUtils.getStringParameter(request, "groupName"),
					jobName,jobGrp);
			bindAdvScheduleProperties(advSchedule);
		}
		if (advSchedule == null){
			advSchedule = new AdvancedSchedule ();
			if (jobName != null) advSchedule.setJob(jobName);
			if (jobGrp != null) advSchedule.setJobGroup(jobGrp);
		}
		setOtherRequestAttributes(request);
		return advSchedule;
	}

	/* (non-Javadoc)
	 * @see org.springframework.web.servlet.mvc.BaseCommandController#onBind(javax.servlet.http.HttpServletRequest, java.lang.Object, org.springframework.validation.BindException)
	 * Callback for custom post-processing in terms of binding. Called on each submit, after standard binding but before validation. 
	 */
	protected void onBind (HttpServletRequest request, Object command,
			BindException errors) {

		AdvancedSchedule advSchedule = (AdvancedSchedule) command;
		String jobName = advSchedule.getJob();
		String jobGrp = advSchedule.getJobGroup();
		Job job = null;

		//If next button was clicked, perform validation else
		//if previous button was clicked, ignore validation
		if (request.getParameter("_target0") == null){
			//Validate for any existing advSchedule
			try{
				job = getJob(jobName,jobGrp);
				if (job == null){
					errors.reject( NameConstants.ERROR_JOB_NOTFOUND, 
							new Object[] {jobName,jobGrp}, "Non-existing job");						
				}
				performGeneralValidation(request,jobName,jobGrp,advSchedule,errors);
			}catch (Exception e){
				errors.reject (NameConstants.ERROR_PROCESS_REQUEST,new Object[]{e.getMessage()},e.getMessage());						
			}
			
			if (this.getCurrentPage (request) == 0) {
				
			}else if (this.getCurrentPage (request) == 1) {
			//In page 1, we will process
			//(1) Start Time and End Time 
			//    Note that date is retrived from the command object getStartTime and getEndTime
			//    according to the date format set in the initBinder(). Thus the time is combined
			//	  from the mcaps.time tag using the request params: NameConstants.STARTTIME_HR,
			//    NameConstants.STARTTIME_MIN and NameConstants.STARTTIME_AMPM
		    //(2) Set the cron expression based on the recurrence pattern selected
				bindScheduleTime(request,errors,advSchedule);
			}else if (this.getCurrentPage (request) == 2) {
				//Bind parameter				
				//Get the non empty parameters input and assign to advSchedule parameters
				//Use the job param to loop thru every parameter
				String[] paramNames = null;
				try{
					paramNames = SchedulingUtil.getParameterNames(job);
					if ((paramNames != null) && (paramNames.length > 0)){
						Map paramMap = new HashMap();
					    for (int i = 0; i < paramNames.length; i++) {
					        String key = paramNames[i];
					        String value = request.getParameter("_" + key);
					        if (StringUtils.isNotEmpty(value)){
					        	paramMap.put(key,value);
					        }
					    }		
					    advSchedule.setParameters(paramMap);
					}
				}catch (Exception e){
					errors.reject (NameConstants.ERROR_PROCESS_REQUEST,
							new Object[]{e.getMessage()},e.getMessage());						
				}
			}

	 	}
	}


	/* (non-Javadoc)
	 * @see org.springframework.web.servlet.mvc.AbstractWizardFormController#getTargetPage(javax.servlet.http.HttpServletRequest, java.lang.Object, org.springframework.validation.Errors, int)
	 */
	protected int getTargetPage (HttpServletRequest request, Object command,
			Errors errors, int currentPage) {
		try{
			//Provide the page with the advSchedule list when navigating back to the
			//first page so that the combo boxes can be populated
			setOtherRequestAttributes(request);
			
			logger.info("Current TargetPage : " + currentPage);
			//If there is validation error on the current page, don navigate
			if (errors.getErrorCount() > 0) return currentPage;
	
			AdvancedSchedule advSchedule = (AdvancedSchedule) command;

			currentPage = super.getTargetPage (request, command, errors, currentPage);
			logger.info("New TargetPage : " + currentPage);

			switch (currentPage) {
				case 0:
					logger.debug("getTargetPage(0) : Do Nothing.");
					//Do Nothing
					break;					
				case 1:	
					logger.debug("getTargetPage(1) : Get parameters from job class.");
					//Get parameters name from job class, if key found in advSchedule parameters
					//use the value of the advSchedule parameter, else use empty string
					Job job = getJob(advSchedule.getJob(),advSchedule.getJobGroup());
					if (job != null){
						String[] paramNames = SchedulingUtil.getParameterNames(job);
						Map paramMap = advSchedule.getParameters();
						Map newMap = new HashMap();
						if ((paramNames != null) && (paramNames.length > 0)){
							for (int i = 0; i < paramNames.length; i++){
							   String key = paramNames[i];
							   if (!paramMap.containsKey(key)){
								   newMap.put(paramNames[i],"");
							   }else{
								   newMap.put(paramNames[i],paramMap.get(key));
							   }
							}
						}
						if (newMap.size() > 0){
							advSchedule.setParameters(newMap);
						}
					}
					
					break;
				case 2: 
					logger.debug("getTargetPage(2) : Do Nothing.");
					//Do Nothing
					break;
				default:
			}
		}catch (Exception e){
			logger.warn("Error in getTargetPage(" + currentPage + ").");
			errors.reject (NameConstants.ERROR_PROCESS_REQUEST,
					new Object[]{e.getMessage()},e.getMessage());	
			return currentPage;
		}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?