From f584aebbd52a00d4ca086e51b9e35ccca4fa2497 Mon Sep 17 00:00:00 2001 From: jeb228 Date: Tue, 1 Jun 2010 16:54:28 +0000 Subject: [PATCH] NIHVIVO-160 Rewrite FedoraDatastreamController to use the FileUploadServletRequest. --- .../FedoraDatastreamController.java | 108 ++++-------------- 1 file changed, 22 insertions(+), 86 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java index 539e05479..34e33a36f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java @@ -9,11 +9,7 @@ import java.io.InputStream; import java.net.MalformedURLException; import java.security.MessageDigest; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Properties; import javax.servlet.RequestDispatcher; @@ -25,8 +21,6 @@ import javax.servlet.http.HttpSession; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.disk.DiskFileItemFactory; -import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.joda.time.DateTime; @@ -51,6 +45,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement; import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; +import edu.cornell.mannlib.vitro.webapp.filestorage.uploadrequest.FileUploadServletRequest; import fedora.client.FedoraClient; import fedora.common.Constants; import fedora.server.management.FedoraAPIM; @@ -223,53 +218,20 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons } } - public void doPost(HttpServletRequest req, HttpServletResponse res) + public void doPost(HttpServletRequest rawRequest, HttpServletResponse res) throws ServletException,IOException { try{ - /* the post parameters seem to get consumed by the parsing so we have to - * make a copy. */ - boolean isMultipart = ServletFileUpload.isMultipartContent(req); - if (!isMultipart) - throw new FdcException("Must POST a multipart encoded request"); - - Iterator iter; - try { iter = getFileItemIterator(req); - } catch (FileUploadException e) { - e.printStackTrace(); - throw new FdcException("There was an error processing the " + - "parameters of your request."); - } - - // get files or parameter values - Map> queryParameters =new HashMap>(); - Map> fileStreams = new HashMap>(); - while (iter.hasNext()) { - FileItem item = (FileItem) iter.next(); - String name = item.getFieldName(); - if (item.isFormField()) { - if (queryParameters.containsKey(name)) { - String value = item.getString("UTF-8"); - queryParameters.get(name).add(value); - } else { - List valueList = new ArrayList(1); - String value = item.getString("UTF-8"); - valueList.add(value); - queryParameters.put(name, valueList); - } - } else { - if (fileStreams.containsKey(name)) { - fileStreams.get(name).add(item); - log.debug("File in multipart content request: field " - + name + " with file name " + item.getName() - + " detected."); - } else { - List itemList = new ArrayList(); - itemList.add(item); - fileStreams.put(name, itemList); - } - } - } - + FileUploadServletRequest req = null; + try { + req = FileUploadServletRequest + .parseRequest(rawRequest, maxFileSize); + } catch (FileUploadException e) { + throw new FdcException("Size limit exceeded: " + e.getLocalizedMessage()); + } + if (!req.isMultipart()) { + throw new FdcException("Must POST a multipart encoded request"); + } + //check if fedora is on line OntModel sessionOntModel = (OntModel)req.getSession().getAttribute("jenaOntModel"); synchronized (FedoraDatastreamController.class) { @@ -296,23 +258,12 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons } //get the parameters from the request - String pId=null; - if( queryParameters.containsKey("pid") && queryParameters.get("pid") != null && - queryParameters.get("pid").size() > 0 ){ - pId = queryParameters.get("pid").get(0); - } - String dsId=null; - if( queryParameters.containsKey("dsid") && queryParameters.get("dsid") != null && - queryParameters.get("dsid").size() > 0 ){ - dsId = queryParameters.get("dsid").get(0); - } - String fileUri=null; - if( queryParameters.containsKey("fileUri") && queryParameters.get("fileUri") != null && - queryParameters.get("fileUri").size() > 0 ){ - fileUri = queryParameters.get("fileUri").get(0); - } + String pId=req.getParameter("pid"); + String dsId=req.getParameter("dsid"); + String fileUri=req.getParameter("fileUri"); + boolean useNewName=false; - if( "true".equals(queryParameters.get("useNewName"))){ + if( "true".equals(req.getParameter("useNewName"))){ useNewName = true; } if( pId == null || pId.length() == 0 ) @@ -325,9 +276,7 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons throw new FdcException("Your form submission did not contain " + "enough information to complete your request.(Missing fileUri parameter)"); - FileItem fileRes = null; - if( fileStreams.containsKey("fileRes") && fileStreams.get("fileRes").size()>0) - fileRes = fileStreams.get("fileRes").get(0); + FileItem fileRes = req.getFileItem("fileRes"); if( fileRes == null ) throw new FdcException("Your form submission did not contain " + "enough information to complete your request.(Missing fileRes)"); @@ -517,9 +466,9 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons RequestDispatcher rd = req.getRequestDispatcher(Controllers.BASIC_JSP); rd.forward(req, res); }catch(FdcException ex){ - req.setAttribute("errors", ex.getMessage()); - RequestDispatcher rd = req.getRequestDispatcher("/edit/fileUploadError.jsp"); - rd.forward(req, res); + rawRequest.setAttribute("errors", ex.getMessage()); + RequestDispatcher rd = rawRequest.getRequestDispatcher("/edit/fileUploadError.jsp"); + rd.forward(rawRequest, res); return; } } @@ -729,19 +678,6 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons } }; - private Iterator getFileItemIterator(HttpServletRequest request) - throws FileUploadException { - //Create a factory for disk-based file items - DiskFileItemFactory factory = new DiskFileItemFactory(); - factory.setSizeThreshold(maxFileSize); - factory.setRepository(new File(baseDirectoryForFiles)); - - // Create a new file upload handler - ServletFileUpload upload = new ServletFileUpload(factory); - upload.setSizeMax(maxFileSize); - return upload.parseRequest(request).iterator(); - } - private static final String RELOAD_MSG = "

The fedora configuartion file will be reloaded if " + "you edit the properties file and check the status.

\n";