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 + -
显示快捷键?