001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.commons.fileupload.portlet;
018    
019    import java.io.IOException;
020    import java.util.List;
021    
022    import javax.portlet.ActionRequest;
023    
024    import org.apache.commons.fileupload.FileItemFactory;
025    import org.apache.commons.fileupload.FileItemIterator;
026    import org.apache.commons.fileupload.FileUpload;
027    import org.apache.commons.fileupload.FileUploadBase;
028    import org.apache.commons.fileupload.FileUploadException;
029    
030    /**
031     * <p>High level API for processing file uploads.</p>
032     *
033     * <p>This class handles multiple files per single HTML widget, sent using
034     * <code>multipart/mixed</code> encoding type, as specified by
035     * <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>.  Use {@link
036     * #parseRequest(javax.servlet.http.HttpServletRequest)} to acquire a list
037     * of {@link org.apache.commons.fileupload.FileItem FileItems} associated
038     * with a given HTML widget.</p>
039     *
040     * <p>How the data for individual parts is stored is determined by the factory
041     * used to create them; a given part may be in memory, on disk, or somewhere
042     * else.</p>
043     *
044     * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
045     * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
046     * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
047     * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
048     * @author <a href="mailto:martinc@apache.org">Martin Cooper</a>
049     * @author Sean C. Sullivan
050     *
051     * @since FileUpload 1.1
052     *
053     * @version $Id: PortletFileUpload.java 479484 2006-11-27 01:06:53Z jochen $
054     */
055    public class PortletFileUpload extends FileUpload {
056    
057        // ---------------------------------------------------------- Class methods
058    
059    
060        /**
061         * Utility method that determines whether the request contains multipart
062         * content.
063         *
064         * @param request The portlet request to be evaluated. Must be non-null.
065         *
066         * @return <code>true</code> if the request is multipart;
067         *         <code>false</code> otherwise.
068         */
069        public static final boolean isMultipartContent(ActionRequest request) {
070            return FileUploadBase.isMultipartContent(
071                    new PortletRequestContext(request));
072        }
073    
074    
075        // ----------------------------------------------------------- Constructors
076    
077    
078        /**
079         * Constructs an uninitialised instance of this class. A factory must be
080         * configured, using <code>setFileItemFactory()</code>, before attempting
081         * to parse requests.
082         *
083         * @see FileUpload#FileUpload(FileItemFactory)
084         */
085        public PortletFileUpload() {
086            super();
087        }
088    
089    
090        /**
091         * Constructs an instance of this class which uses the supplied factory to
092         * create <code>FileItem</code> instances.
093         *
094         * @see FileUpload#FileUpload()
095         * @param fileItemFactory The factory to use for creating file items.
096         */
097        public PortletFileUpload(FileItemFactory fileItemFactory) {
098            super(fileItemFactory);
099        }
100    
101    
102        // --------------------------------------------------------- Public methods
103    
104    
105        /**
106         * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
107         * compliant <code>multipart/form-data</code> stream.
108         *
109         * @param request The portlet request to be parsed.
110         *
111         * @return A list of <code>FileItem</code> instances parsed from the
112         *         request, in the order that they were transmitted.
113         *
114         * @throws FileUploadException if there are problems reading/parsing
115         *                             the request or storing files.
116         */
117        public List /* FileItem */ parseRequest(ActionRequest request)
118                throws FileUploadException {
119            return parseRequest(new PortletRequestContext(request));
120        }
121    
122        /**
123         * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
124         * compliant <code>multipart/form-data</code> stream.
125         *
126         * @param request The portlet request to be parsed.
127         *
128         * @return An iterator to instances of <code>FileItemStream</code>
129         *         parsed from the request, in the order that they were
130         *         transmitted.
131         *
132         * @throws FileUploadException if there are problems reading/parsing
133         *                             the request or storing files.
134         * @throws IOException An I/O error occurred. This may be a network
135         *   error while communicating with the client or a problem while
136         *   storing the uploaded content.
137         */
138        public FileItemIterator getItemIterator(ActionRequest request)
139                throws FileUploadException, IOException {
140            return super.getItemIterator(new PortletRequestContext(request));
141        }
142    }