From 429479f2427b1d4139743cd0b4780287d3c26889 Mon Sep 17 00:00:00 2001 From: jeb228 Date: Tue, 1 Jun 2010 17:10:57 +0000 Subject: [PATCH] NIHVIVO-160 Rewrite JenaXMLFileUpload to use the FileUploadServletRequest. --- .../controller/jena/JenaXMLFileUpload.java | 107 ++++-------------- 1 file changed, 23 insertions(+), 84 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaXMLFileUpload.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaXMLFileUpload.java index c19d12a36..dbfb47ce5 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaXMLFileUpload.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaXMLFileUpload.java @@ -7,8 +7,6 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; @@ -27,8 +25,6 @@ import net.sf.saxon.s9api.XsltTransformer; 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; @@ -43,11 +39,12 @@ import edu.cornell.mannlib.vitro.webapp.beans.Portal; import edu.cornell.mannlib.vitro.webapp.controller.Controllers; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaSpecialModelMaker; +import edu.cornell.mannlib.vitro.webapp.filestorage.uploadrequest.FileUploadServletRequest; public class JenaXMLFileUpload extends BaseEditController { Log log = LogFactory.getLog(JenaXMLFileUpload.class); private String baseDirectoryForFiles; - private long maxFileSize = 1024 * 1024 * 500; + private int maxFileSize = 1024 * 1024 * 500; private XsltExecutable xsltExec; private Processor processor; @@ -91,83 +88,38 @@ public class JenaXMLFileUpload extends BaseEditController { * defaultNamespace - namespace to use for elements in xml that lack a namespace * */ - public void doPost(HttpServletRequest request, HttpServletResponse resp) + public void doPost(HttpServletRequest rawRequest, HttpServletResponse resp) throws ServletException, IOException { - boolean isMultipart = ServletFileUpload.isMultipartContent(request); - - /* - * the post parameters seem to get consumed by the parsing so we have to - * make a copy. - */ - Map> queryParameters = null; - Map> fileStreams = null; - if (!isMultipart) { - // TODO: forward to error message - throw new ServletException("Must POST a multipart encoded request"); + FileUploadServletRequest request = null; + try { + request = FileUploadServletRequest + .parseRequest(rawRequest, maxFileSize); + } catch (FileUploadException e) { + // TODO: forward to error message + throw new ServletException("Size limit exceeded: " + e.getLocalizedMessage()); } - - log.debug("multipart content detected"); - queryParameters = new HashMap>(); - fileStreams = new HashMap>(); - - Iterator iter; - try { - iter = getFileItemIterator(request); - } catch (FileUploadException e) { - log.debug(e); - request.setAttribute("errors", e.getLocalizedMessage()); - RequestDispatcher rd = request - .getRequestDispatcher("/edit/fileUploadError.jsp"); - rd.forward(request, resp); - return; - } - - // get files or parameter values - while (iter.hasNext()) { - FileItem item = (FileItem) iter.next(); - String name = item.getFieldName(); - if (item.isFormField()) { - if (queryParameters.containsKey(name)) { - // String value = new - // String(item.getString().getBytes("ISO-8859-1"), "UTF-8"); - String value = item.getString("UTF-8"); - queryParameters.get(name).add(value); - } else { - List valueList = new ArrayList(1); - // String value = new - // String(item.getString().getBytes("ISO-8859-1"), "UTF-8"); - 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); - } - } + if (request.isMultipart()) { + log.debug("multipart content detected"); + } else { + // TODO: forward to error message + throw new ServletException("Must POST a multipart encoded request"); } if (!checkLoginStatus(request,resp)) return; VitroRequest vreq = new VitroRequest(request); ModelMaker modelMaker = getVitroJenaModelMaker(vreq); - List targetModel = queryParameters.get("targetModel"); - if( targetModel == null || targetModel.size() < 1) - throw new ServletException("targetModel not specified."); + String targetModel = request.getParameter("targetModel"); + if (targetModel == null) { + throw new ServletException("targetModel not specified."); + } - Model m = modelMaker.getModel(targetModel.get(0)); + Model m = modelMaker.getModel(targetModel); if( m == null ) throw new ServletException("targetModel '" + targetModel + "' was not found."); - request.setAttribute("targetModel", targetModel.get(0)); + request.setAttribute("targetModel", targetModel); - List filesToLoad = saveFiles( fileStreams ); + List filesToLoad = saveFiles( request.getFiles() ); List rdfxmlToLoad = convertFiles( filesToLoad); List modelsToLoad = loadRdfXml( rdfxmlToLoad ); @@ -186,7 +138,7 @@ public class JenaXMLFileUpload extends BaseEditController { request.setAttribute("title","Uploaded files and converted to RDF"); request.setAttribute("bodyJsp","/jenaIngest/xmlFileUploadSuccess.jsp"); - request.setAttribute("fileItems",fileStreams); + request.setAttribute("fileItems",request.getFiles()); Portal portal = vreq.getPortal(); RequestDispatcher rd = request.getRequestDispatcher(Controllers.BASIC_JSP); @@ -341,17 +293,4 @@ public class JenaXMLFileUpload extends BaseEditController { } - private Iterator getFileItemIterator(HttpServletRequest request) - throws FileUploadException { - // Create a factory for disk-based file items - DiskFileItemFactory factory = new DiskFileItemFactory(); - factory.setSizeThreshold((int) 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(); - } - }