roadinspectionformcontroller.java

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

JAVA
287
字号
package mcaps.apps.prrm.roadinspection.webapp.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;

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

import mcaps.apps.prrm.roaddefect.model.RoadDefectSeverity;
import mcaps.apps.prrm.roaddefect.model.RoadDefectType;
import mcaps.apps.prrm.roadinspection.model.RoadInspection;
import mcaps.apps.prrm.roadinspection.model.RoadInspectionPicture;
import mcaps.apps.prrm.roadinspection.service.RoadInspectionManager;
import mcap.core.base.webapp.controller.BaseFormController;
import mcap.core.logging.Log;

import org.apache.commons.lang.StringUtils;
import org.springframework.validation.BindException;
import org.springframework.web.bind.RequestUtils;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;


/**
 * Implementation of BaseFormController that interacts with the 
 * RoadInspectionManager to handle request to retrieve/persist road 
 * inspection report info to data store.
 * 
 * @author jov
 * @date 05-Sep-2005
 * @version 1.0.1.0
 */
public class RoadInspectionFormController extends BaseFormController {

	private static final String UPLOAD_ROOT_DIR = "resources/pictures/roadinspection/";
	private static final String className="mcaps.apps.prrm.roadinspection.webapp.controller.RoadInspectionFormController";
	private static final String VIEW_URL="roadInspection.action?roadInspectionId=";
	private RoadInspectionManager roadInspectionManager;

	
	/**
	 * Returns the roadInspectionManager.
	 * @return RoadInspectionManager
	 */
	public RoadInspectionManager getRoadInspectionManager () {
		return roadInspectionManager;
	}

	
	/**
	 * Sets the roadInspectionManager.
	 * @param roadInspectionManager The roadInspectionManager to set.
	 */
	public void setRoadInspectionManager (RoadInspectionManager roadInspectionManager) {
		this.roadInspectionManager = roadInspectionManager;
	}
	

	//----------------------------------------------------------------------
	// ----------------------------------------------------------------------

	/**
	 * First to be called.
	 */
	public ModelAndView processFormSubmission (HttpServletRequest request,
			HttpServletResponse response, Object command, BindException errors)
			throws Exception {
		if (request.getParameter ("cancel") != null) {
			return new ModelAndView (getCancelView ());
		}
		return super.processFormSubmission (request, response, command, errors);
	}

	
	/**
	 * Next to be called if processFormSubmission method called the
	 * super.processFormSubmission
	 */
	public ModelAndView onSubmit (HttpServletRequest request,
			HttpServletResponse response, Object command, BindException errors)
			throws Exception {
		
    RoadInspection roadInspection = (RoadInspection) command;
		Locale locale = request.getLocale();
		System.out.println("onSubmit");
		
		if (request.getParameter ("delete") != null) {
			this.getRoadInspectionManager().removeRoadInspection(roadInspection);
			//TODO: Delete the file upload from filesystem
			saveMessage (request, getText ("roadInspection.deleted", roadInspection.getId().toString(),
										locale));
			return new ModelAndView (getSuccessView ());
		}else {
			//Integer id = this.getRoadInspectionManager().saveRoadInspection(roadInspection);
			//System.out.println("onSubmit (id) : " + id);
			Log.info(className + " onSubmit Add or Edit");
			this.getRoadInspectionManager().saveRoadInspection(roadInspection);
			Log.info(className + " onSubmit roadInspection.id=" + roadInspection.getId());
			if (StringUtils.equals (request.getParameter ("method"), "add")) {
				saveMessage (request, getText ("roadInspection.added", roadInspection.getId().toString(), locale));
			}else {
				saveMessage (request, getText ("roadInspection.saved", roadInspection.getId().toString(),locale));
			}
			processFileUpload(request,response,command,errors);
			return new ModelAndView (new RedirectView (VIEW_URL + roadInspection.getId()));
		}
	}


	
	/**
	 * 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 request
		// unless a bind error exists.
		if ((request.getRequestURI ().indexOf ("roadInspectionForm") > -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);
	}

	
	/**
	 * Retrieve a backing object for the current form from the given request.
	 */
	protected Object formBackingObject (HttpServletRequest request)
			throws Exception {
		
		RoadInspection roadInspection = null;
		if (StringUtils.equals (request.getParameter ("method"), "add")) {
			roadInspection = new RoadInspection();
			if (!StringUtils.equals (request.getParameter("roadDefectId"), null)) {
				roadInspection.setRoadDefectId(Integer.valueOf(request.getParameter ("roadDefectId")));
			}
			if (!StringUtils.equals (request.getParameter("taskId"), null)) {
				roadInspection.setTaskId(Integer.valueOf(request.getParameter ("taskId")));
			}
			roadInspection.setRepairRequired(Boolean.FALSE);
		}else{	
			roadInspection = roadInspectionManager.getRoadInspection(
					RequestUtils.getIntParameter(request, "roadInspectionId"));
			if (roadInspection != null){
				List picFiles = getPictureFiles(roadInspection.getId());
				request.setAttribute("roadinspectionpicturelist",picFiles);
			}
		}		
		return roadInspection;
	}
	
	/**
	 * Set up a custom property editor for converting form inputs to real objects
	 */
	protected void initBinder (HttpServletRequest request,
			ServletRequestDataBinder binder) {
		//super.initBinder(request,binder);
//		binder.registerCustomEditor(RoadDefectType.class, new RoadDefectTypeSupport());
//		binder.registerCustomEditor(RoadDefectSeverity.class, new RoadDefectSeveritySupport());
	}
	
	protected Map referenceData(HttpServletRequest request) throws Exception {
		Map refMap = new HashMap();
		refMap.put("roaddefecttypelist", RoadDefectType.list);
		refMap.put("roaddefectseveritylist", RoadDefectSeverity.list);
		return refMap;
	}
	
	private List getPictureFiles(Integer roadInspectionId){
		System.out.println("getPictureFiles (roadInspectionId) : " + roadInspectionId);
		List pictureList = new ArrayList();
		String uploadDir = 	UPLOAD_ROOT_DIR + roadInspectionId + "/";
    String fullUploadDir = getServletContext().getRealPath(uploadDir);
   
		System.out.println("getPictureFiles (fullUploadDir) : " + fullUploadDir);
		File dir = new File(fullUploadDir);
    if (dir.exists()) {
			File[] files = dir.listFiles();
			RoadInspectionPicture pic = null;
			short cnt = 0;
			for (int i = 0; i < files.length; i++){
				File file = files[i];
				if (file.isFile()){
					if (isImageFile(file)){
						pic = new RoadInspectionPicture ();
						pic.setName (file.getName ());
						pic.setPath (uploadDir);
						pictureList.add (cnt++, pic);
						System.out.println("getPictureFiles (file.getName ()) : " + file.getName ());
					}
		    }
			}
		}
    return pictureList;
	}
	
	private boolean isImageFile(File file){
		String fileName = file.getName();
		String ext = fileName.substring(fileName.lastIndexOf(".",fileName.length())+1);
		if ((ext.equalsIgnoreCase("jpg")) || (ext.equalsIgnoreCase("jpeg")) ||
				(ext.equalsIgnoreCase("gif")) || (ext.equalsIgnoreCase("bmp")) ||
				(ext.equalsIgnoreCase("png") )){
			return true;
		}
		return false;
	}
	
	private void processFileUpload(HttpServletRequest request,
			HttpServletResponse response, Object command, BindException errors)
	throws Exception {
	
		System.out.println("processFileUpload");

    RoadInspection roadInspection = (RoadInspection) command;
   // the directory to upload to
		String uploadDir = 	UPLOAD_ROOT_DIR + roadInspection.getId() + "/";
    String fullUploadDir = getServletContext().getRealPath(uploadDir);

    String fileName = "";
    String fileNames = "";
    
    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    
    Map map = multipartRequest.getFileMap();
    
		System.out.println("processFileUpload [map size]:" + map.size());
		File dir = new File(fullUploadDir);
		if (map.size() < 1){
  		//If in editting mode, if all files are deleted from the form, 
    	//then delete the upload dir for the particular inspection 
  		if (!StringUtils.equals (request.getParameter ("method"), "edit")) {
  			dir.delete();
  		}
    }else{
    	if (!dir.exists()) dir.mkdirs();
	    Iterator iterator = map.entrySet().iterator();
	    for (int i = 0; i < map.size(); i++){
	      Map.Entry entry = (Map.Entry) iterator.next();
	      CommonsMultipartFile commonFile = (CommonsMultipartFile)entry.getValue();
	      
	      if (commonFile != null){
      		System.out.println("processFileUpload [file.getOriginalFilename] :" + commonFile.getOriginalFilename());
      		if (commonFile.getOriginalFilename().length() > 0){
      			fileName = fullUploadDir + "\\" + commonFile.getOriginalFilename();
	      		File file = new File(fileName);
	      		if (file.exists()){
	      			file.delete();
	      		}
	      		InputStream stream = commonFile.getInputStream();
	  	      FileOutputStream bos = new FileOutputStream(fileName);
	  	      int bytesRead = 0;
	  	      byte[] buffer = new byte[8192];  	
	  	      while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
	  	          bos.write(buffer, 0, bytesRead);
	  	      }
	  	      bos.close();
	  	      stream.close();
	  	      fileNames += commonFile.getOriginalFilename() + ","; 	
	      	}
	      }    
	    }
			Locale locale = request.getLocale();
	    if (fileNames.length() > 0){
		    fileNames = fileNames.substring(0,fileNames.length()-1);
				saveMessage (request, getText ("roadDefect.pictures.uploaded", fileNames,
						locale));
	    }
		}
	}
}

⌨️ 快捷键说明

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