001 // Copyright 2006 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 package org.apache.tapestry.portlet.multipart; 015 016 import java.io.IOException; 017 018 import javax.portlet.ActionRequest; 019 import javax.portlet.ActionResponse; 020 import javax.portlet.PortletException; 021 022 import org.apache.tapestry.portlet.ActionRequestServicer; 023 import org.apache.tapestry.portlet.ActionRequestServicerFilter; 024 025 /** 026 * @author Raphael Jean 027 * 028 */ 029 public class PortletMultipartDecoderFilter implements ActionRequestServicerFilter 030 { 031 private PortletMultipartDecoder _decoder; 032 033 public void service(ActionRequest request, ActionResponse response, 034 ActionRequestServicer servicer) throws IOException, PortletException 035 { 036 String contentType = request.getContentType(); 037 038 // contentType is occasionally null in testing. The browser tacks on additional 039 // information onto the contentType to indicate where the boundaries are in 040 // the stream. 041 042 boolean encoded = contentType != null && contentType.startsWith("multipart/form-data"); 043 044 try 045 { 046 ActionRequest newRequest = encoded ? _decoder.decode(request) : request; 047 048 servicer.service(newRequest, response); 049 } 050 finally 051 { 052 if (encoded) 053 _decoder.cleanup(); 054 } 055 } 056 057 public void setDecoder(PortletMultipartDecoder decoder) { 058 this._decoder = decoder; 059 } 060 061 }