Coverage Report - org.seasar.teeda.extension.filter.MultipartFormDataRequestWrapper
 
Classes in this File Line Coverage Branch Coverage Complexity
MultipartFormDataRequestWrapper
0%
0/63
0%
0/16
1.917
 
 1  
 /*
 2  
  * Copyright 2004-2011 the Seasar Foundation and the Others.
 3  
  *
 4  
  * Licensed under the Apache License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  *     http://www.apache.org/licenses/LICENSE-2.0
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 13  
  * either express or implied. See the License for the specific language
 14  
  * governing permissions and limitations under the License.
 15  
  */
 16  
 package org.seasar.teeda.extension.filter;
 17  
 
 18  
 import java.io.File;
 19  
 import java.util.Collections;
 20  
 import java.util.Enumeration;
 21  
 import java.util.HashMap;
 22  
 import java.util.Iterator;
 23  
 import java.util.List;
 24  
 import java.util.Map;
 25  
 import java.util.Map.Entry;
 26  
 
 27  
 import javax.servlet.http.HttpServletRequest;
 28  
 import javax.servlet.http.HttpServletRequestWrapper;
 29  
 
 30  
 import org.apache.commons.fileupload.FileItem;
 31  
 import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
 32  
 import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
 33  
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 34  
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 35  
 import org.seasar.framework.log.Logger;
 36  
 import org.seasar.framework.util.ArrayUtil;
 37  
 import org.seasar.framework.util.StringUtil;
 38  
 import org.seasar.teeda.extension.ExtensionConstants;
 39  
 import org.seasar.teeda.extension.util.ExternalMessageUtil;
 40  
 
 41  
 /**
 42  
  * @author koichik
 43  
  */
 44  
 public class MultipartFormDataRequestWrapper extends HttpServletRequestWrapper {
 45  
 
 46  
     public static final String WWW_FORM_URLENCODED_TYPE = "application/x-www-form-urlencoded";
 47  
 
 48  0
     private static final Logger logger = Logger
 49  0
             .getLogger(MultipartFormDataRequestWrapper.class);
 50  
 
 51  
     protected ServletFileUpload fileUpload;
 52  
 
 53  0
     protected Map parameters = new HashMap(64);
 54  
 
 55  0
     protected Map fileItems = new HashMap(64);
 56  
 
 57  
     /**
 58  
      * @param request 
 59  
      * @param maxFileSize 
 60  
      * @param thresholdSize 
 61  
      * @param repositoryPath 
 62  
      */
 63  
     public MultipartFormDataRequestWrapper(final HttpServletRequest request,
 64  
             final int maxSize, final int maxFileSize, final int thresholdSize,
 65  
             final String repositoryPath) {
 66  0
         super(request);
 67  0
         final DiskFileItemFactory factory = new DiskFileItemFactory();
 68  0
         factory.setSizeThreshold(thresholdSize);
 69  0
         if (!StringUtil.isEmpty(repositoryPath)) {
 70  0
             factory.setRepository(new File(repositoryPath));
 71  
         }
 72  0
         fileUpload = new ServletFileUpload(factory);
 73  0
         fileUpload.setSizeMax(maxSize);
 74  0
         fileUpload.setFileSizeMax(maxFileSize);
 75  0
         parseRequest(request);
 76  0
     }
 77  
 
 78  
     protected void parseRequest(final HttpServletRequest request) {
 79  
         try {
 80  0
             final String encoding = request.getCharacterEncoding();
 81  0
             final List requestParameters = fileUpload.parseRequest(request);
 82  0
             for (final Iterator it = requestParameters.iterator(); it.hasNext();) {
 83  0
                 final FileItem fileItem = (FileItem) it.next();
 84  0
                 if (fileItem.isFormField()) {
 85  0
                     final String name = fileItem.getFieldName();
 86  0
                     final String value = fileItem.getString(encoding);
 87  0
                     addParameter(name, value);
 88  
                 } else {
 89  0
                     fileItems.put(fileItem.getFieldName(), fileItem);
 90  
                 }
 91  
             }
 92  0
         } catch (final SizeLimitExceededException e) {
 93  0
             logger.log("ETDA0110", new Object[0], e);
 94  0
             ExternalMessageUtil.addMessage(request,
 95  
                     ExtensionConstants.FILE_UPLOAD_SIZE_ERROR_MESSAGE,
 96  
                     new Object[] { new Long(e.getPermittedSize()),
 97  
                             new Long(e.getActualSize()) });
 98  0
         } catch (final FileSizeLimitExceededException e) {
 99  0
             logger.log("ETDA0110", new Object[0], e);
 100  0
             ExternalMessageUtil.addMessage(request,
 101  
                     ExtensionConstants.FILE_UPLOAD_FILE_SIZE_ERROR_MESSAGE,
 102  
                     new Object[] { new Long(e.getPermittedSize()),
 103  
                             new Long(e.getActualSize()) });
 104  0
         } catch (final Exception e) {
 105  0
             logger.log("ETDA0110", new Object[0], e);
 106  0
             ExternalMessageUtil.addMessage(request,
 107  
                     ExtensionConstants.FILE_UPLOAD_ERROR_MESSAGE);
 108  0
         }
 109  
 
 110  0
         for (final Iterator it = request.getParameterMap().entrySet()
 111  0
                 .iterator(); it.hasNext();) {
 112  0
             final Entry entry = (Entry) it.next();
 113  0
             final String name = (String) entry.getKey();
 114  0
             final String[] values = (String[]) entry.getValue();
 115  0
             addParameters(name, values);
 116  
         }
 117  0
     }
 118  
 
 119  
     public Enumeration getParameterNames() {
 120  0
         return Collections.enumeration(parameters.keySet());
 121  
     }
 122  
 
 123  
     public String getParameter(final String name) {
 124  0
         final String[] values = (String[]) parameters.get(name);
 125  0
         return values == null ? null : values[0];
 126  
     }
 127  
 
 128  
     public String[] getParameterValues(final String name) {
 129  0
         return (String[]) parameters.get(name);
 130  
     }
 131  
 
 132  
     public Map getParameterMap() {
 133  0
         return parameters;
 134  
     }
 135  
 
 136  
     public Object getAttribute(final String string) {
 137  0
         if (string.equals(ExtensionConstants.REQUEST_ATTRIBUTE_UPLOADED_FILES)) {
 138  0
             return getFileItems();
 139  
         }
 140  0
         return super.getAttribute(string);
 141  
     }
 142  
 
 143  
     public String getContentType() {
 144  0
         return WWW_FORM_URLENCODED_TYPE;
 145  
     }
 146  
 
 147  
     public FileItem getFileItem(final String fieldName) {
 148  0
         return (FileItem) fileItems.get(fieldName);
 149  
     }
 150  
 
 151  
     public Map getFileItems() {
 152  0
         return fileItems;
 153  
     }
 154  
 
 155  
     protected void addParameter(final String name, final String value) {
 156  0
         if (!parameters.containsKey(name)) {
 157  0
             parameters.put(name, new String[] { value });
 158  
         } else {
 159  0
             final String[] oldValues = (String[]) parameters.get(name);
 160  0
             final String[] newValues = (String[]) ArrayUtil.add(oldValues,
 161  
                     value);
 162  0
             parameters.put(name, newValues);
 163  
         }
 164  0
     }
 165  
 
 166  
     protected void addParameters(final String name, final String[] values) {
 167  0
         if (!parameters.containsKey(name)) {
 168  0
             parameters.put(name, values);
 169  
         } else {
 170  0
             final String[] oldValues = (String[]) parameters.get(name);
 171  0
             final String[] newValues = (String[]) ArrayUtil.add(oldValues,
 172  
                     values);
 173  0
             parameters.put(name, newValues);
 174  
         }
 175  0
     }
 176  
 
 177  
 }