folderformcontroller.java

来自「Java的框架」· Java 代码 · 共 169 行

JAVA
169
字号
package mcaps.core.docman.webapp.controller;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

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

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;

import mcaps.core.docman.util.DocManUtil;
import mcap.core.base.webapp.controller.BaseFormController;
import mcap.core.docman.model.FolderObject;
import mcap.core.docman.service.DocAccessException;
import mcap.core.docman.service.DocExistsException;
import mcap.core.docman.service.DocManManager;
import mcap.core.docman.service.DocPathNotFoundException;

/**
 * This class extends BaseFormController that will interacts with the
 * DocManManager to handle request to retrieve/persist folder info
 * to data store.
 *
 * @author Chan Chin Wei
 * @date Apr 12, 2006
 * @version 1.0.1.0
 */
public class FolderFormController extends BaseFormController {

	private DocManManager docManager;

	public DocManManager getDocManager() {
		return docManager;
	}

	public void setDocManager(DocManManager docManager) {
		this.docManager = docManager;
	}

//===========================================================================================================
	
	/* (non-Javadoc)
	 * @see org.springframework.web.servlet.mvc.AbstractFormController#processFormSubmission(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object, org.springframework.validation.BindException)
	 * Checks for an action that should be executed without respect to binding errors, like a cancel action.
	 */
	public ModelAndView processFormSubmission (HttpServletRequest request,
			HttpServletResponse response, Object command, BindException errors)
			throws Exception {
		if (request.getParameter ("cancel") != null) {
			String parentId = ((FolderObject) command).getFolderPath();
			if (parentId != null && !parentId.equals(""))
				parentId = DocManUtil.urlEncodePath (parentId);
			else
				parentId = DocManUtil.urlEncodePath (((FolderObject) command).getParentId());
			return new ModelAndView (new RedirectView ("docMan.action?path=" + parentId));
		}
		return super.processFormSubmission (request, response, command, errors);
	}

	
	/* (non-Javadoc)
	 * @see org.springframework.web.servlet.mvc.SimpleFormController#onSubmit(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object, org.springframework.validation.BindException)
	 * Next to be called if processFormSubmission method called the
	 * super.processFormSubmission
	 */
	public ModelAndView onSubmit (HttpServletRequest request,
			HttpServletResponse response, Object command, BindException errors)
			throws Exception {
		
		Locale locale = request.getLocale();
    	FolderObject folder = (FolderObject) command;
    
		if (request.getParameter ("delete") != null) {
			try {
				docManager.removeFolder(folder.getFolderPath());
				saveMessage (request, getText ("folderObject.deleted", folder.getName(), locale));
				return new ModelAndView (new RedirectView ("docMan.action?path=" + DocManUtil.urlEncodePath (folder.getParentId())));
			} catch (DocAccessException e) {
				e.printStackTrace();
				if (e instanceof DocPathNotFoundException)
					errors.reject("errors.folderObject.deleteNotFound", new Object[] {folder.getName ()}, "Unable to delete");
				else
					errors.reject ("errors.folderObject.deleteFail", new Object[] {folder.getName ()}, "Unable to delete");
				return showForm (request, response, errors);
			}
		}
		else {
			try {
				folder.setCreationDate(Calendar.getInstance());
				folder.setModificationDate(Calendar.getInstance());
				String username = request.getRemoteUser();
				folder.setCreator(username);
				folder.setModifier(username);
				String path = docManager.saveFolder(folder);
		    saveMessage (request, getText ("folderObject.saved", folder.getName(), locale));
		    return new ModelAndView (new RedirectView ("docMan.action?path=" + DocManUtil.urlEncodePath (path)));
			} catch (DocAccessException e) {
				e.printStackTrace();
//				if (e.getCause() instanceof DataIntegrityViolationException)
				if (e instanceof DocExistsException)
					errors.reject("errors.folderObject.saveFailExist", new Object[] {folder.getName ()}, "Unable to save");
				else
					errors.reject("errors.folderObject.saveFail", new Object[] {folder.getName ()}, "Unable to save");
				return showForm (request, response, errors);
			}
		}
	}

	
	/* (non-Javadoc)
	 * @see org.springframework.web.servlet.mvc.AbstractFormController#showForm(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.validation.BindException)
	 * Calling in case of validation errors, to show the form view again.
	 */
	protected ModelAndView showForm (HttpServletRequest request,
			HttpServletResponse response, BindException errors) throws Exception {

		// prevent ordinary users from calling a GET on folderForm.html
		// unless a bind error exists.
		if ((request.getRequestURI ().indexOf ("folderForm") > -1)
				&& (!request.isUserInRole (mcap.core.user.util.NameConstants.ADMIN_ROLE)
				&& (errors.getErrorCount () == 0) && 
				(request.getRemoteUser () != null))) { 
			response.sendError (HttpServletResponse.SC_FORBIDDEN);
			return null;
		}
		return super.showForm (request, response, errors);
	}

	
	/* (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 {
		FolderObject folder = null;
		String path = request.getParameter("path");
		if (StringUtils.equals (request.getParameter ("method"), "add")) {
			folder = new FolderObject();
			folder.setParentId(path);
		}else{	
			folder = docManager.getFolder(path, false);
		}		
		return folder;
	}
	
	/* (non-Javadoc)
	 * @see org.springframework.web.servlet.mvc.BaseCommandController#initBinder(javax.servlet.http.HttpServletRequest, org.springframework.web.bind.ServletRequestDataBinder)
	 * Set up a custom property editor for converting form inputs to real objects
	 */
	protected void initBinder (HttpServletRequest request,
			ServletRequestDataBinder binder) {
		// super.initBinder(request,binder);
		SimpleDateFormat dateFormat = new SimpleDateFormat (getText ("date.format",
				request.getLocale ()));
		dateFormat.setLenient (false);
		binder.registerCustomEditor (Date.class, null, new CustomDateEditor (
					dateFormat, true));
	}
	
}

⌨️ 快捷键说明

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