/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.formio.portlet; import java.io.File; import java.util.Enumeration; import java.util.Map; import javax.portlet.ActionRequest; import javax.portlet.filter.PortletRequestWrapper; import net.formio.upload.MultipartRequestPreprocessor; import net.formio.upload.RequestProcessingError; import net.formio.upload.RequestUploadedFile; import org.apache.commons.fileupload.FileItem; /** * Wrapper for a file upload portlet request. * <p> * This class uses the Apache Commons <a * href='http://commons.apache.org/fileupload/'>File Upload tool</a>. * </p> */ class PortletFileUploadWrapper extends PortletRequestWrapper { private final MultipartRequestPreprocessor reqPreprocessor; /** * Wrapper which preprocesses multipart request. * @param req request * @param defaultEncoding header and request parameter encoding * @param tempDir temporary directory to store files bigger than specified size threshold * @param sizeThreshold max size of file (in bytes) that is loaded into the memory and not temporarily stored to disk * @param totalSizeMax maximum allowed size of the whole request in bytes * @param singleFileSizeMax maximum allowed size of a single uploaded file */ public PortletFileUploadWrapper(ActionRequest req, String defaultEncoding, File tempDir, int sizeThreshold, long totalSizeMax, long singleFileSizeMax) { super(req); final MultipartRequestPreprocessor reqPreprocessor = new MultipartRequestPreprocessor( new PortletMultipartRequestParser(req), defaultEncoding, tempDir, sizeThreshold, totalSizeMax, singleFileSizeMax ); this.reqPreprocessor = reqPreprocessor; } /** * Return all request parameter names, for both regular form fields and file * upload fields. */ @Override public Enumeration<String> getParameterNames() { return reqPreprocessor.getParameterNames(); } /** * Return the parameter value. Applies only to regular parameters, not to * file upload parameters. * * <p> * If the parameter is not present in the underlying request, then * <tt>null</tt> is returned. * <p> * If the parameter is present, but has no associated value, then an empty * string is returned. * <p> * If the parameter is multivalued, the first value that appears in the * request is returned. */ @Override public String getParameter(String name) { return reqPreprocessor.getParameter(name); } /** * Return the parameter values. Applies only to regular parameters, not to * file upload parameters. */ @Override public String[] getParameterValues(String name) { return reqPreprocessor.getParameterValues(name); } /** * Return a {@code Map<String, String[]>} for all regular parameters. Does * not return any file upload parameters at all. */ @Override public Map<String, String[]> getParameterMap() { return reqPreprocessor.getParameterMap(); } /** * Return the {@link FileItem} of the given name. * <p> * If the name is unknown, then return <tt>null</tt>. */ public RequestUploadedFile[] getUploadedFiles(String paramName) { return reqPreprocessor.getUploadedFiles(paramName); } /** * Returns error from processing the request if there was one, or {@code null}. * @return */ public RequestProcessingError getRequestProcessingError() { return reqPreprocessor.getError(); } }