You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2010/04/02 18:25:44 UTC
svn commit: r930315 -
/myfaces/trinidad/branches/trinidad-1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/CompositeUploadedFileProcessorImpl.java
Author: gpetracek
Date: Fri Apr 2 16:25:43 2010
New Revision: 930315
URL: http://svn.apache.org/viewvc?rev=930315&view=rev
Log:
broken java 5 compatibility fixed
Modified:
myfaces/trinidad/branches/trinidad-1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/CompositeUploadedFileProcessorImpl.java
Modified: myfaces/trinidad/branches/trinidad-1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/CompositeUploadedFileProcessorImpl.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/trinidad-1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/CompositeUploadedFileProcessorImpl.java?rev=930315&r1=930314&r2=930315&view=diff
==============================================================================
--- myfaces/trinidad/branches/trinidad-1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/CompositeUploadedFileProcessorImpl.java (original)
+++ myfaces/trinidad/branches/trinidad-1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/upload/CompositeUploadedFileProcessorImpl.java Fri Apr 2 16:25:43 2010
@@ -1,474 +1,472 @@
-/*
- * 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 org.apache.myfaces.trinidadinternal.config.upload;
-
-
-import java.io.File;
-import java.io.IOException;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Collections;
-import java.util.Map;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.PortletContext;
-import javax.portlet.PortletRequest;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRequest;
-
-import org.apache.myfaces.trinidad.logging.TrinidadLogger;
-import org.apache.myfaces.trinidad.model.UploadedFile;
-import org.apache.myfaces.trinidad.util.ClassLoaderUtils;
-import org.apache.myfaces.trinidad.webapp.UploadedFileProcessor;
-import org.apache.myfaces.trinidadinternal.context.external.PortletApplicationMap;
-import org.apache.myfaces.trinidadinternal.context.external.PortletInitParameterMap;
-import org.apache.myfaces.trinidadinternal.context.external.PortletRequestMap;
-import org.apache.myfaces.trinidadinternal.context.external.ServletApplicationMap;
-import org.apache.myfaces.trinidadinternal.context.external.ServletInitParameterMap;
-import org.apache.myfaces.trinidadinternal.context.external.ServletRequestMap;
-
-/**
- * This is the default implementaion of UploadedFileProcessor. It works with
- * multiple ChainedUploadedFileProcessor declared in trinidad-config.xml by dispatching
- * the lifecycle calls to them in the order of declaration.
- **/
-public class CompositeUploadedFileProcessorImpl implements UploadedFileProcessor
-{
-
- public CompositeUploadedFileProcessorImpl()
- {
- chainedProcessors = Collections.emptyList();
- }
-
- public CompositeUploadedFileProcessorImpl(
- List<? extends UploadedFileProcessor> chainedProcessors)
- {
- this.chainedProcessors = chainedProcessors;
- }
-
- @Override
- public void init(Object context)
- {
- _init(context);
- for(UploadedFileProcessor processor: chainedProcessors)
- {
- //call other chained processor's init
- processor.init(context);
- }
-
- }
-
- @Override
- public UploadedFile processFile(Object request, UploadedFile tempFile) throws IOException
- {
- //NOTE: The following optimization was suggested at one point:
- // Check if there are any processors in the list. If yes then call _processFile
- // else just return tempFile we got. Calling _processFile buffers the entire
- // file content. tempFile arg however is not buffered. If there are no
- // ChainedUploadedFileProcessor in the list, then there is no need to buffer.
- // BUT, the call to getLength() and dispose() on tempFile fails.
- // This is becasue, the impl of these 2 methods are not complete -
- // Bug - https://issues.apache.org/jira/browse/TRINIDAD-1765
- // This bug could not be fixed due to the explanatio in the bug.
-
- //call _processFile first. This will create the auto buffer that we want.
- UploadedFile original = _processFile(request, tempFile);
- if(chainedProcessors.isEmpty())
- {
- return original;
- }
- else
- {
- List<UploadedFile> files = new ArrayList<UploadedFile>(chainedProcessors.size()+1);
- files.add(original);
- for(UploadedFileProcessor processor: chainedProcessors)
- {
- original = processor.processFile(request, original);
- files.add(original);
- }
- //the dispose order should be reverse!
- Collections.reverse(files);
- return new WrappedUploadedFileImpl(original, files);
- }
- }
-
-
- /**
- * Wrapper around UploadedFileImpl to listen for dispose() call and dispatch to
- * other UploadedFileImpls returned by other chained processors
- */
- private static class WrappedUploadedFileImpl implements UploadedFile{
-
- public WrappedUploadedFileImpl(UploadedFile original, List<UploadedFile> files)
- {
- this.original = original;
- this.files = files;
- }
-
- public void dispose()
- {
- try
- {
- original.dispose();
- }
- catch(Exception e)
- {
- _LOG.warning("Exception while disposing!", e);
- //log and continue disposing the rest.
- }
- if(!files.isEmpty())
- {
- List<UploadedFile> disposed = new ArrayList<UploadedFile>();
- disposed.add(original);
- for(UploadedFile file: files)
- {
- if(!disposed.contains(file))
- {
- try
- {
- file.dispose();
- }
- catch(Exception e)
- {
- _LOG.warning("Exception while disposing!", e);
- //log and continue disposing the rest.
- }
- disposed.add(file);
- }
- }
- }
- }
-
- public String getFilename()
- {
- return original.getFilename();
- }
-
- public String getContentType()
- {
- return original.getContentType();
- }
-
- public long getLength()
- {
- return original.getLength();
- }
-
- public Object getOpaqueData()
- {
- return original.getOpaqueData();
- }
-
- public InputStream getInputStream() throws IOException
- {
- return original.getInputStream();
- }
-
- private final UploadedFile original;
- private final List<UploadedFile> files;
- }
-
- private void _init(Object context)
- {
- ContextInfo info;
- if(_PORTLET_CONTEXT_CLASS != null && _PORTLET_CONTEXT_CLASS.isInstance(context))
- {
- info = _getPortletContextInfo(context);
- }
- else
- {
- info = _getServletContextInfo(context);
- }
-
- //
- // Get MaxMemory and TempDir properties from servlet init params
- //
- if (_maxMemory == -1)
- {
- String maxMemory = info.initParams.get(MAX_MEMORY_PARAM_NAME);
- if (maxMemory != null)
- {
- try
- {
- _maxMemory = Long.parseLong(maxMemory);
- }
- catch (NumberFormatException nfe)
- {
- _maxMemory = _DEFAULT_MAX_MEMORY;
- }
- }
- else
- {
- _maxMemory = _DEFAULT_MAX_MEMORY;
- }
- }
-
- if (_maxDiskSpace == -1)
- {
- String maxDiskSpace = info.initParams.get(MAX_DISK_SPACE_PARAM_NAME);
- if (maxDiskSpace != null)
- {
- try
- {
- _maxDiskSpace = Long.parseLong(maxDiskSpace);
- }
- catch (NumberFormatException nfe)
- {
- _maxDiskSpace = _DEFAULT_MAX_DISK_SPACE;
- }
- }
- else
- {
- _maxDiskSpace = _DEFAULT_MAX_DISK_SPACE;
- }
- }
-
- if (_tempDir == null)
- {
- _tempDir = info.initParams.get(TEMP_DIR_PARAM_NAME);
- // Use the webapp temporary directory if the temporary directory
- // has not been explicitly set.
- if (_tempDir == null)
- {
- File tempDirFile = (File)
- info.attributes.get("javax.servlet.context.tempdir");
- if (tempDirFile != null)
- _tempDir = tempDirFile.getAbsolutePath();
- }
- }
- }
-
- private UploadedFile _processFile(
- Object request, UploadedFile tempFile) throws IOException
- {
- RequestInfo info = _getRequestInfo(request);
- int contentLength = getContentLength(request);
- Map<String, Object> requestMap;
-
- if (_isPortletRequestClass(request))
- requestMap = _getPortletRequestMap(request);
- else
- requestMap = _getServletRequestMap(request);
-
- Long maxMemory = (Long)requestMap.get(MAX_MEMORY_PARAM_NAME);
- Long maxDiskSpace = (Long)requestMap.get(MAX_DISK_SPACE_PARAM_NAME);
- String tempDir = (String)requestMap.get(TEMP_DIR_PARAM_NAME);
-
- if (maxMemory != null)
- {
- _maxMemory = maxMemory;
- }
-
- if (maxDiskSpace != null)
- {
- _maxDiskSpace = maxDiskSpace;
- }
-
- if (tempDir != null)
- _tempDir = tempDir;
-
- if(contentLength>_maxDiskSpace)
- {
- return new ErrorFile();
- }
- // Process one new file, loading only as much as can fit
- // in the remaining memory and disk space.
- UploadedFileImpl file = new UploadedFileImpl();
- try
- {
- file.loadFile(tempFile,
- _maxMemory - info.totalBytesInMemory,
- _maxDiskSpace - info.totalBytesOnDisk,
- _tempDir);
- }
- catch(IOException ioe)
- {
- _LOG.severe(ioe);
- return new ErrorFile();
- }
-
- // Keep a tally of how much we've stored in memory and on disk.
- long length = file.getLength();
- if (file.__isInMemory())
- {
- info.totalBytesInMemory += length;
- }
- else
- {
- info.totalBytesOnDisk += length;
- }
-
- return file;
- }
-
- private int getContentLength(Object request)
- {
- int length = -1;
- if (_isPortletRequestClass(request))
- {
- length = _getPortletRequestLength(request);
- }
- else
- {
- length = _getServletRequestLength(request);
- }
-
- return length;
- }
-
- private RequestInfo _getRequestInfo(Object request)
- {
- Map<String, Object> attributes;
- if (_isPortletRequestClass(request))
- {
- attributes = _getPortletRequestMap(request);
- }
- else
- {
- attributes = _getServletRequestMap(request);
- }
-
-
- RequestInfo info = (RequestInfo) attributes.get(_REQUEST_INFO_KEY);
-
- if (info == null)
- {
- info = new RequestInfo();
- attributes.put(_REQUEST_INFO_KEY, info);
- }
-
- return info;
- }
-
- private boolean _isPortletRequestClass(Object request)
- {
- return (_PORTLET_REQUEST_CLASS != null && _PORTLET_REQUEST_CLASS.isInstance(request));
- }
-
- private static final ContextInfo _getServletContextInfo(final Object context)
- {
- assert(context instanceof ServletContext);
-
- final ServletContext sContext = (ServletContext)context;
- return new ContextInfo(
- new ServletInitParameterMap(sContext),
- new ServletApplicationMap(sContext));
- }
-
- private static final ContextInfo _getPortletContextInfo(final Object context)
- {
- assert(context instanceof PortletContext);
-
- final PortletContext pContext = (PortletContext)context;
- return new ContextInfo(
- new PortletInitParameterMap(pContext),
- new PortletApplicationMap(pContext));
- }
-
- private static final Map<String, Object> _getServletRequestMap(final Object request)
- {
- assert(request instanceof ServletRequest);
-
- return new ServletRequestMap((ServletRequest) request);
- }
-
- private static final Map<String, Object> _getPortletRequestMap(final Object request)
- {
- assert(request instanceof PortletRequest);
-
- return new PortletRequestMap((PortletRequest) request);
- }
-
- private static final int _getServletRequestLength(final Object request)
- {
- assert(request instanceof ServletRequest);
-
- return ((ServletRequest) request).getContentLength();
- }
-
- private static final int _getPortletRequestLength(final Object request)
- {
- if (!(request instanceof ActionRequest))
- return -1;
-
- return ((ActionRequest) request).getContentLength();
- }
-
- static private class RequestInfo
- {
- public long totalBytesInMemory;
- public long totalBytesOnDisk;
- }
-
- static private class ContextInfo
- {
- public ContextInfo(Map<String,String> init, Map<String, Object> attrib)
- {
- initParams= init;
- attributes = attrib;
- }
-
- public Map<String, String> initParams;
- public Map<String, Object> attributes;
- }
-
- private long _maxMemory = -1;
- private long _maxDiskSpace = -1;
- private String _tempDir = null;
-
- private static final long _DEFAULT_MAX_MEMORY = 102400;
- private static final long _DEFAULT_MAX_DISK_SPACE = 2048000;
-
- private static final String _REQUEST_INFO_KEY = CompositeUploadedFileProcessorImpl.class.getName()+
- ".UploadedFilesInfo";
-
- private static final TrinidadLogger _LOG =
- TrinidadLogger.createTrinidadLogger(CompositeUploadedFileProcessorImpl.class);
-
- private static final Class<?> _PORTLET_CONTEXT_CLASS;
- private static final Class<?> _PORTLET_REQUEST_CLASS;
-
- static
- {
- Class<?> context;
- Class<?> request;
- try
- {
- context = ClassLoaderUtils.loadClass("javax.portlet.PortletContext");
- request = ClassLoaderUtils.loadClass("javax.portlet.PortletRequest");
- }
- catch (final ClassNotFoundException e)
- {
- _LOG
- .fine("Portlet API is not available on the classpath. Portlet configurations are disabled.");
- context = null;
- request = null;
- }
-
- _PORTLET_CONTEXT_CLASS = context;
- _PORTLET_REQUEST_CLASS = request;
- }
-
-
- private final List<? extends UploadedFileProcessor> chainedProcessors;
-
-}
+/*
+ * 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 org.apache.myfaces.trinidadinternal.config.upload;
+
+
+import java.io.File;
+import java.io.IOException;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Collections;
+import java.util.Map;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletRequest;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+
+import org.apache.myfaces.trinidad.logging.TrinidadLogger;
+import org.apache.myfaces.trinidad.model.UploadedFile;
+import org.apache.myfaces.trinidad.util.ClassLoaderUtils;
+import org.apache.myfaces.trinidad.webapp.UploadedFileProcessor;
+import org.apache.myfaces.trinidadinternal.context.external.PortletApplicationMap;
+import org.apache.myfaces.trinidadinternal.context.external.PortletInitParameterMap;
+import org.apache.myfaces.trinidadinternal.context.external.PortletRequestMap;
+import org.apache.myfaces.trinidadinternal.context.external.ServletApplicationMap;
+import org.apache.myfaces.trinidadinternal.context.external.ServletInitParameterMap;
+import org.apache.myfaces.trinidadinternal.context.external.ServletRequestMap;
+
+/**
+ * This is the default implementaion of UploadedFileProcessor. It works with
+ * multiple ChainedUploadedFileProcessor declared in trinidad-config.xml by dispatching
+ * the lifecycle calls to them in the order of declaration.
+ **/
+public class CompositeUploadedFileProcessorImpl implements UploadedFileProcessor
+{
+
+ public CompositeUploadedFileProcessorImpl()
+ {
+ chainedProcessors = Collections.emptyList();
+ }
+
+ public CompositeUploadedFileProcessorImpl(
+ List<? extends UploadedFileProcessor> chainedProcessors)
+ {
+ this.chainedProcessors = chainedProcessors;
+ }
+
+ public void init(Object context)
+ {
+ _init(context);
+ for(UploadedFileProcessor processor: chainedProcessors)
+ {
+ //call other chained processor's init
+ processor.init(context);
+ }
+
+ }
+
+ public UploadedFile processFile(Object request, UploadedFile tempFile) throws IOException
+ {
+ //NOTE: The following optimization was suggested at one point:
+ // Check if there are any processors in the list. If yes then call _processFile
+ // else just return tempFile we got. Calling _processFile buffers the entire
+ // file content. tempFile arg however is not buffered. If there are no
+ // ChainedUploadedFileProcessor in the list, then there is no need to buffer.
+ // BUT, the call to getLength() and dispose() on tempFile fails.
+ // This is becasue, the impl of these 2 methods are not complete -
+ // Bug - https://issues.apache.org/jira/browse/TRINIDAD-1765
+ // This bug could not be fixed due to the explanatio in the bug.
+
+ //call _processFile first. This will create the auto buffer that we want.
+ UploadedFile original = _processFile(request, tempFile);
+ if(chainedProcessors.isEmpty())
+ {
+ return original;
+ }
+ else
+ {
+ List<UploadedFile> files = new ArrayList<UploadedFile>(chainedProcessors.size()+1);
+ files.add(original);
+ for(UploadedFileProcessor processor: chainedProcessors)
+ {
+ original = processor.processFile(request, original);
+ files.add(original);
+ }
+ //the dispose order should be reverse!
+ Collections.reverse(files);
+ return new WrappedUploadedFileImpl(original, files);
+ }
+ }
+
+
+ /**
+ * Wrapper around UploadedFileImpl to listen for dispose() call and dispatch to
+ * other UploadedFileImpls returned by other chained processors
+ */
+ private static class WrappedUploadedFileImpl implements UploadedFile{
+
+ public WrappedUploadedFileImpl(UploadedFile original, List<UploadedFile> files)
+ {
+ this.original = original;
+ this.files = files;
+ }
+
+ public void dispose()
+ {
+ try
+ {
+ original.dispose();
+ }
+ catch(Exception e)
+ {
+ _LOG.warning("Exception while disposing!", e);
+ //log and continue disposing the rest.
+ }
+ if(!files.isEmpty())
+ {
+ List<UploadedFile> disposed = new ArrayList<UploadedFile>();
+ disposed.add(original);
+ for(UploadedFile file: files)
+ {
+ if(!disposed.contains(file))
+ {
+ try
+ {
+ file.dispose();
+ }
+ catch(Exception e)
+ {
+ _LOG.warning("Exception while disposing!", e);
+ //log and continue disposing the rest.
+ }
+ disposed.add(file);
+ }
+ }
+ }
+ }
+
+ public String getFilename()
+ {
+ return original.getFilename();
+ }
+
+ public String getContentType()
+ {
+ return original.getContentType();
+ }
+
+ public long getLength()
+ {
+ return original.getLength();
+ }
+
+ public Object getOpaqueData()
+ {
+ return original.getOpaqueData();
+ }
+
+ public InputStream getInputStream() throws IOException
+ {
+ return original.getInputStream();
+ }
+
+ private final UploadedFile original;
+ private final List<UploadedFile> files;
+ }
+
+ private void _init(Object context)
+ {
+ ContextInfo info;
+ if(_PORTLET_CONTEXT_CLASS != null && _PORTLET_CONTEXT_CLASS.isInstance(context))
+ {
+ info = _getPortletContextInfo(context);
+ }
+ else
+ {
+ info = _getServletContextInfo(context);
+ }
+
+ //
+ // Get MaxMemory and TempDir properties from servlet init params
+ //
+ if (_maxMemory == -1)
+ {
+ String maxMemory = info.initParams.get(MAX_MEMORY_PARAM_NAME);
+ if (maxMemory != null)
+ {
+ try
+ {
+ _maxMemory = Long.parseLong(maxMemory);
+ }
+ catch (NumberFormatException nfe)
+ {
+ _maxMemory = _DEFAULT_MAX_MEMORY;
+ }
+ }
+ else
+ {
+ _maxMemory = _DEFAULT_MAX_MEMORY;
+ }
+ }
+
+ if (_maxDiskSpace == -1)
+ {
+ String maxDiskSpace = info.initParams.get(MAX_DISK_SPACE_PARAM_NAME);
+ if (maxDiskSpace != null)
+ {
+ try
+ {
+ _maxDiskSpace = Long.parseLong(maxDiskSpace);
+ }
+ catch (NumberFormatException nfe)
+ {
+ _maxDiskSpace = _DEFAULT_MAX_DISK_SPACE;
+ }
+ }
+ else
+ {
+ _maxDiskSpace = _DEFAULT_MAX_DISK_SPACE;
+ }
+ }
+
+ if (_tempDir == null)
+ {
+ _tempDir = info.initParams.get(TEMP_DIR_PARAM_NAME);
+ // Use the webapp temporary directory if the temporary directory
+ // has not been explicitly set.
+ if (_tempDir == null)
+ {
+ File tempDirFile = (File)
+ info.attributes.get("javax.servlet.context.tempdir");
+ if (tempDirFile != null)
+ _tempDir = tempDirFile.getAbsolutePath();
+ }
+ }
+ }
+
+ private UploadedFile _processFile(
+ Object request, UploadedFile tempFile) throws IOException
+ {
+ RequestInfo info = _getRequestInfo(request);
+ int contentLength = getContentLength(request);
+ Map<String, Object> requestMap;
+
+ if (_isPortletRequestClass(request))
+ requestMap = _getPortletRequestMap(request);
+ else
+ requestMap = _getServletRequestMap(request);
+
+ Long maxMemory = (Long)requestMap.get(MAX_MEMORY_PARAM_NAME);
+ Long maxDiskSpace = (Long)requestMap.get(MAX_DISK_SPACE_PARAM_NAME);
+ String tempDir = (String)requestMap.get(TEMP_DIR_PARAM_NAME);
+
+ if (maxMemory != null)
+ {
+ _maxMemory = maxMemory;
+ }
+
+ if (maxDiskSpace != null)
+ {
+ _maxDiskSpace = maxDiskSpace;
+ }
+
+ if (tempDir != null)
+ _tempDir = tempDir;
+
+ if(contentLength>_maxDiskSpace)
+ {
+ return new ErrorFile();
+ }
+ // Process one new file, loading only as much as can fit
+ // in the remaining memory and disk space.
+ UploadedFileImpl file = new UploadedFileImpl();
+ try
+ {
+ file.loadFile(tempFile,
+ _maxMemory - info.totalBytesInMemory,
+ _maxDiskSpace - info.totalBytesOnDisk,
+ _tempDir);
+ }
+ catch(IOException ioe)
+ {
+ _LOG.severe(ioe);
+ return new ErrorFile();
+ }
+
+ // Keep a tally of how much we've stored in memory and on disk.
+ long length = file.getLength();
+ if (file.__isInMemory())
+ {
+ info.totalBytesInMemory += length;
+ }
+ else
+ {
+ info.totalBytesOnDisk += length;
+ }
+
+ return file;
+ }
+
+ private int getContentLength(Object request)
+ {
+ int length = -1;
+ if (_isPortletRequestClass(request))
+ {
+ length = _getPortletRequestLength(request);
+ }
+ else
+ {
+ length = _getServletRequestLength(request);
+ }
+
+ return length;
+ }
+
+ private RequestInfo _getRequestInfo(Object request)
+ {
+ Map<String, Object> attributes;
+ if (_isPortletRequestClass(request))
+ {
+ attributes = _getPortletRequestMap(request);
+ }
+ else
+ {
+ attributes = _getServletRequestMap(request);
+ }
+
+
+ RequestInfo info = (RequestInfo) attributes.get(_REQUEST_INFO_KEY);
+
+ if (info == null)
+ {
+ info = new RequestInfo();
+ attributes.put(_REQUEST_INFO_KEY, info);
+ }
+
+ return info;
+ }
+
+ private boolean _isPortletRequestClass(Object request)
+ {
+ return (_PORTLET_REQUEST_CLASS != null && _PORTLET_REQUEST_CLASS.isInstance(request));
+ }
+
+ private static final ContextInfo _getServletContextInfo(final Object context)
+ {
+ assert(context instanceof ServletContext);
+
+ final ServletContext sContext = (ServletContext)context;
+ return new ContextInfo(
+ new ServletInitParameterMap(sContext),
+ new ServletApplicationMap(sContext));
+ }
+
+ private static final ContextInfo _getPortletContextInfo(final Object context)
+ {
+ assert(context instanceof PortletContext);
+
+ final PortletContext pContext = (PortletContext)context;
+ return new ContextInfo(
+ new PortletInitParameterMap(pContext),
+ new PortletApplicationMap(pContext));
+ }
+
+ private static final Map<String, Object> _getServletRequestMap(final Object request)
+ {
+ assert(request instanceof ServletRequest);
+
+ return new ServletRequestMap((ServletRequest) request);
+ }
+
+ private static final Map<String, Object> _getPortletRequestMap(final Object request)
+ {
+ assert(request instanceof PortletRequest);
+
+ return new PortletRequestMap((PortletRequest) request);
+ }
+
+ private static final int _getServletRequestLength(final Object request)
+ {
+ assert(request instanceof ServletRequest);
+
+ return ((ServletRequest) request).getContentLength();
+ }
+
+ private static final int _getPortletRequestLength(final Object request)
+ {
+ if (!(request instanceof ActionRequest))
+ return -1;
+
+ return ((ActionRequest) request).getContentLength();
+ }
+
+ static private class RequestInfo
+ {
+ public long totalBytesInMemory;
+ public long totalBytesOnDisk;
+ }
+
+ static private class ContextInfo
+ {
+ public ContextInfo(Map<String,String> init, Map<String, Object> attrib)
+ {
+ initParams= init;
+ attributes = attrib;
+ }
+
+ public Map<String, String> initParams;
+ public Map<String, Object> attributes;
+ }
+
+ private long _maxMemory = -1;
+ private long _maxDiskSpace = -1;
+ private String _tempDir = null;
+
+ private static final long _DEFAULT_MAX_MEMORY = 102400;
+ private static final long _DEFAULT_MAX_DISK_SPACE = 2048000;
+
+ private static final String _REQUEST_INFO_KEY = CompositeUploadedFileProcessorImpl.class.getName()+
+ ".UploadedFilesInfo";
+
+ private static final TrinidadLogger _LOG =
+ TrinidadLogger.createTrinidadLogger(CompositeUploadedFileProcessorImpl.class);
+
+ private static final Class<?> _PORTLET_CONTEXT_CLASS;
+ private static final Class<?> _PORTLET_REQUEST_CLASS;
+
+ static
+ {
+ Class<?> context;
+ Class<?> request;
+ try
+ {
+ context = ClassLoaderUtils.loadClass("javax.portlet.PortletContext");
+ request = ClassLoaderUtils.loadClass("javax.portlet.PortletRequest");
+ }
+ catch (final ClassNotFoundException e)
+ {
+ _LOG
+ .fine("Portlet API is not available on the classpath. Portlet configurations are disabled.");
+ context = null;
+ request = null;
+ }
+
+ _PORTLET_CONTEXT_CLASS = context;
+ _PORTLET_REQUEST_CLASS = request;
+ }
+
+
+ private final List<? extends UploadedFileProcessor> chainedProcessors;
+
+}