From cbda9a16cca1baa9f5aa8acdaedc32f54c7c9ca7 Mon Sep 17 00:00:00 2001 From: jeb228 Date: Mon, 7 Jun 2010 18:43:40 +0000 Subject: [PATCH] NIHVIVO-160 make the map of FileItems available as an attribute as well as through a method call. That way, if the request is wrapped in a VitroRequest, the map is still accessible. --- .../uploadrequest/FileUploadServletRequest.java | 10 ++++++++++ .../uploadrequest/MultipartHttpServletRequest.java | 1 + .../uploadrequest/SimpleHttpServletRequestWrapper.java | 3 ++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/FileUploadServletRequest.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/FileUploadServletRequest.java index 97de7b787..2e3be3253 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/FileUploadServletRequest.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/FileUploadServletRequest.java @@ -27,6 +27,14 @@ import org.apache.commons.fileupload.servlet.ServletFileUpload; * request parameters. *

*

+ * The request will have an attribute named by {@link #FILE_ITEM_MAP}. Either + * this attribute or the call to {@link #getFiles()} will produce a map that may + * be empty but is never null. The keys to the map are the field names for the + * file fields. Since a form may have multiple fields with the same name, each + * field name maps to a list of items. If a user does not provide a file to be + * uploaded in a given field, the length of the file will be 0. + *

+ *

* Most methods are declared here, and simply delegate to the wrapped request. * Methods that have to do with parameters or files are handled differently for * simple requests and multipart request, and are implemented in the @@ -35,6 +43,8 @@ import org.apache.commons.fileupload.servlet.ServletFileUpload; */ @SuppressWarnings("deprecation") public abstract class FileUploadServletRequest implements HttpServletRequest { + public static final String FILE_ITEM_MAP = "file_item_map"; + // ---------------------------------------------------------------------- // The factory method // ---------------------------------------------------------------------- diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java index 217a43a5c..2fbe92f1f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java @@ -69,6 +69,7 @@ class MultipartHttpServletRequest extends FileUploadServletRequest { LOG.debug("Parameters are: " + this.parameters); this.files = Collections.unmodifiableMap(files); LOG.debug("Files are: " + this.files); + request.setAttribute(FILE_ITEM_MAP, this.files); } /** diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/SimpleHttpServletRequestWrapper.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/SimpleHttpServletRequestWrapper.java index 48fb249ed..11f90360d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/SimpleHttpServletRequestWrapper.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/SimpleHttpServletRequestWrapper.java @@ -20,6 +20,7 @@ class SimpleHttpServletRequestWrapper extends FileUploadServletRequest { SimpleHttpServletRequestWrapper(HttpServletRequest request) { super(request); + request.setAttribute(FILE_ITEM_MAP, Collections.EMPTY_MAP); } // ---------------------------------------------------------------------- @@ -35,7 +36,7 @@ class SimpleHttpServletRequestWrapper extends FileUploadServletRequest { public Map> getFiles() { return Collections.emptyMap(); } - + @Override public FileItem getFileItem(String string) { return null;