You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-commits@incubator.apache.org by jw...@apache.org on 2006/12/05 02:02:55 UTC

svn commit: r482451 [5/5] - in /incubator/adffaces/branches/jwaldman-portal/trinidad: trinidad-api/ trinidad-api/src/main/java/org/apache/myfaces/trinidad/config/ trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/ trinidad-api/src/main/jav...

Modified: incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/LazyValueBinding.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/LazyValueBinding.java?view=diff&rev=482451&r1=482450&r2=482451
==============================================================================
--- incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/LazyValueBinding.java (original)
+++ incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/LazyValueBinding.java Mon Dec  4 18:02:50 2006
@@ -1,126 +0,0 @@
-/*
- * Copyright  2004-2006 The Apache Software Foundation.
- * 
- * Licensed 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.webapp;
-
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import javax.faces.context.FacesContext;
-import javax.faces.el.ReferenceSyntaxException;
-import javax.faces.el.ValueBinding;
-
-import org.apache.myfaces.trinidad.logging.TrinidadLogger;
-
-/**
- * A ValueBinding class that lazily parses the underlying EL expression
- * (in case the Application object is not yet available).  Unfortunately,
- * this implementation means that errors in the syntax of the EL
- * expression won't get detected until use.
- *
- * @author The Oracle ADF Faces Team
- */
-class LazyValueBinding extends ValueBinding
-{
-  /**
-   * Create a ValueBinding;  if the Application is not yet
-   * available, delay actual parsing until later.
-   */
-  static public ValueBinding createValueBinding(String expression)
-  {
-    ApplicationFactory factory = (ApplicationFactory)
-      FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-    if (factory != null)
-    {
-      Application application = factory.getApplication();
-      if (application != null)
-      {
-        try
-        {
-          return application.createValueBinding(expression);
-        }
-        catch (NullPointerException npe)
-        {
-          ;
-          // In the Sun RI, JSF 1.0 and 1.1, creating a ValueBinding
-          // when there isn't a FacesContext results in a NullPointerException.
-          // Work around this bug.
-        }
-      }
-    }
-
-    return new LazyValueBinding(expression);
-  }
-
-  private LazyValueBinding(String expression)
-  {
-    _expression = expression;
-  }
-
-  @Override
-  public Object getValue(FacesContext context)
-  {
-    return _getValueBinding().getValue(context);
-  }
-
-  @Override
-  public void setValue(FacesContext context, Object value)
-  {
-    _getValueBinding().setValue(context, value);
-  }
-
-  @Override
-  public boolean isReadOnly(FacesContext context)
-  {
-    return _getValueBinding().isReadOnly(context);
-  }
-
-  @Override
-  public Class<?> getType(FacesContext context)
-  {
-    return _getValueBinding().getType(context);
-  }
-
-  @Override
-  public String getExpressionString()
-  {
-    return _expression;
-  }
-
-  private ValueBinding _getValueBinding()
-  {
-    if (_binding == null)
-    {
-      ApplicationFactory factory = (ApplicationFactory)
-        FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
-      Application application = factory.getApplication();
-      try
-      {
-        _binding = application.createValueBinding(_expression);
-      }
-      catch (ReferenceSyntaxException rse)
-      {
-        _LOG.warning(rse);
-      }
-    }
-
-    return _binding;
-  }
-
-  private final String       _expression;
-  private       ValueBinding _binding;
-
-  static private final TrinidadLogger _LOG = TrinidadLogger.createTrinidadLogger(LazyValueBinding.class);
-}

Modified: incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/PseudoFacesContext.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/PseudoFacesContext.java?view=diff&rev=482451&r1=482450&r2=482451
==============================================================================
--- incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/PseudoFacesContext.java (original)
+++ incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/PseudoFacesContext.java Mon Dec  4 18:02:50 2006
@@ -15,17 +15,7 @@
  */
 package org.apache.myfaces.trinidadinternal.webapp;
 
-import java.io.InputStream;
-import java.net.URL;
-
-import java.util.AbstractMap;
-import java.util.Collections;
 import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-
-import java.security.Principal;
 
 import javax.faces.application.Application;
 import javax.faces.application.FacesMessage;
@@ -34,16 +24,8 @@
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseStream;
 import javax.faces.context.ResponseWriter;
-
 import javax.faces.render.RenderKit;
 
-//import javax.servlet.ServletContext;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
 /**
  * Pseudo FacesContext, vended by the filter for code that 
  * needs to run before (or after) the FacesServlet, but needs
@@ -54,12 +36,10 @@
  */
 class PseudoFacesContext extends FacesContext
 {
-  public PseudoFacesContext(
-    ServletRequest  request,
-    ServletResponse response)
+  public PseudoFacesContext(ExternalContext ec)
   {
-    _external = new External((HttpServletRequest) request,
-                             (HttpServletResponse) response);
+    assert ec!= null;
+    _external = ec;
   }
 
   @Override
@@ -178,281 +158,4 @@
 
 
   private final ExternalContext _external;
-
-  private static final class External extends ExternalContext
-  {
-    public External(
-      HttpServletRequest  request,
-      HttpServletResponse response)
-    {
-      _request  = request;
-      _response = response;
-    }
-    
-    // Can't very well have a ServletContext before a servlet!!!
-    @Override
-    public Object getContext() { throw new UnsupportedOperationException(); }
-    @Override
-    public Object getRequest() { return _request; }
-    @Override
-    public Object getResponse() { return _response; }
-    @Override
-    public Object getSession(boolean create)
-    {
-      return _request.getSession(create);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public Map<String, Object> getSessionMap()
-    {
-      Object o = getSession(true);
-      if (o == null)
-        return Collections.EMPTY_MAP;
-
-      return new SessionMap((HttpSession) o);
-    }
-
-    @Override
-    public String getRequestContextPath()
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getRequestServletPath()
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getInitParameter(String name)
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String encodeResourceURL(String url)
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String encodeActionURL(String url)
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Map<String, Object> getRequestMap()
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Map<String, Object> getApplicationMap()
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void dispatch(String path)
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String encodeNamespace(String name)
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getAuthType()
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    // -= Simon Lessard =- 
-    // FIXME: Odd... JSF 1.2 does not give generics type for this map
-    @SuppressWarnings("unchecked")
-    @Override
-    public Map getInitParameterMap()
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getRemoteUser()
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Map<String, Object> getRequestCookieMap()
-    {
-      throw new UnsupportedOperationException();
-    }
-    
-    @Override
-    public Map<String, String> getRequestHeaderMap()
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Map<String, String[]> getRequestHeaderValuesMap()
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Locale getRequestLocale()
-    {
-      throw new UnsupportedOperationException();
-    }
-    
-    @Override
-    public Iterator<Locale> getRequestLocales()
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Map<String, String> getRequestParameterMap()
-    {
-      return new ParameterMap(_request);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public Iterator<String> getRequestParameterNames()
-    {
-      return _request.getParameterMap().keySet().iterator();
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public Map<String, String[]> getRequestParameterValuesMap()
-    {
-      return _request.getParameterMap();
-    }
-
-    @Override
-    public String getRequestPathInfo()
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public URL getResource(String path)
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public InputStream getResourceAsStream(String path)
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Set<String> getResourcePaths(String path)
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Principal getUserPrincipal()
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isUserInRole(String role)
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void log(String message)
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void log(String message, Throwable exception)
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void redirect(String url)
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    private HttpServletRequest  _request;
-    private HttpServletResponse _response;
-  }
-
-  private static final class ParameterMap extends AbstractMap<String, String>
-  {
-    public ParameterMap(ServletRequest request)
-    {
-      _request = request;
-    }
-    
-    @Override
-    public String get(Object key)
-    {
-      return _request.getParameter((String) key);
-    }
-        
-    @Override
-    public Set<Map.Entry<String, String>> entrySet()
-    {
-      throw new UnsupportedOperationException();
-    }
-    
-    private ServletRequest _request;
-  }
-
-  private static final class SessionMap extends AbstractMap<String, Object>
-  {
-    public SessionMap(HttpSession session)
-    {
-      _session = session;
-    }
-    
-    @Override
-    public Object get(Object key)
-    {
-      return _session.getAttribute((String) key);
-    }
-    
-    @Override
-    public Object put(String key, Object value)
-    {
-      Object old = _session.getAttribute(key);
-      _session.setAttribute(key, value);
-      return old;
-    }
-    
-    @Override
-    public Object remove(Object key)
-    {
-      Object old = _session.getAttribute((String) key);
-      _session.removeAttribute((String) key);
-      return old;
-    }
-    
-    @Override
-    public Set<Map.Entry<String, Object>> entrySet()
-    {
-      throw new UnsupportedOperationException();
-    }
-    
-    private HttpSession _session;
-  }
 }

Modified: incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadFilterImpl.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadFilterImpl.java?view=diff&rev=482451&r1=482450&r2=482451
==============================================================================
--- incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadFilterImpl.java (original)
+++ incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadFilterImpl.java Mon Dec  4 18:02:50 2006
@@ -16,14 +16,11 @@
 package org.apache.myfaces.trinidadinternal.webapp;
 
 import java.io.IOException;
-import java.io.InputStream;
-
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
-
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -36,20 +33,15 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponseWrapper;
 
+import org.apache.myfaces.trinidad.context.external.ServletExternalContext;
 import org.apache.myfaces.trinidad.logging.TrinidadLogger;
-import org.apache.myfaces.trinidad.context.RequestContext;
-import org.apache.myfaces.trinidad.context.RequestContextFactory;
-import org.apache.myfaces.trinidad.model.UploadedFile;
 import org.apache.myfaces.trinidad.util.ClassLoaderUtils;
-
-import org.apache.myfaces.trinidadinternal.context.RequestContextFactoryImpl;
+import org.apache.myfaces.trinidadinternal.config.GlobalConfiguratorImpl;
+import org.apache.myfaces.trinidadinternal.config.dispatch.DispatchResponseConfiguratorImpl;
+import org.apache.myfaces.trinidadinternal.config.dispatch.DispatchServletResponse;
+import org.apache.myfaces.trinidadinternal.config.upload.FileUploadConfiguratorImpl;
+import org.apache.myfaces.trinidadinternal.config.upload.UploadRequestWrapper;
 import org.apache.myfaces.trinidadinternal.context.RequestContextImpl;
-import org.apache.myfaces.trinidadinternal.context.TrinidadPhaseListener;
-import org.apache.myfaces.trinidadinternal.share.util.MultipartFormHandler;
-import org.apache.myfaces.trinidadinternal.share.util.MultipartFormItem;
-import org.apache.myfaces.trinidad.skin.SkinFactory;
-import org.apache.myfaces.trinidadinternal.skin.SkinFactoryImpl;
-import org.apache.myfaces.trinidadinternal.skin.SkinUtils;
 
 /**
  * Actual implementation of the Trinidad servlet filter.
@@ -88,69 +80,35 @@
       context.getExternalContext().getRequestMap().get(_IS_RETURNING_KEY));
   }
 
-
-
-  /**
-   * Sets the maximum number of bytes that MultipartFormItem.writeFile()
-   * will be allowed to write.  This value may be set immediately
-   * before or between calls to MultipartFormItem.writeFile().  If
-   * any call to writeFile() exceeds this value, an EOFException
-   * will be thrown.
-   * <p>
-   * @param maxAllowedBytes the maximum number of bytes that
-   * MultipartFormItem.writeFile() will be allowed to write.  Defaults
-   * to 128MB.
-   * @see org.apache.myfaces.trinidadinternal.share.util.MultipartFormItem#writeFile
-   */
-  public void setMaximumAllowedBytes(long maxAllowedBytes)
-  {
-    _maxAllowedBytes = Math.max(0L, maxAllowedBytes);
-  }
-
-  /**
-   * Gets the maximum number of bytes that MultipartFormItem.writeFile()
-   * will be allowed to write.
-   */
-  public long getMaximumAllowedBytes()
-  {
-    return _maxAllowedBytes;
-  }
-
   public void init(
     FilterConfig filterConfig) throws ServletException
   {
-    if (RequestContextFactory.getFactory() == null)
-      RequestContextFactory.setFactory(new RequestContextFactoryImpl());
-
-    _servletContext = filterConfig.getServletContext();
-
-    // Create a new SkinFactory if needed.
-    if (SkinFactory.getFactory() == null)
-      SkinFactory.setFactory(new SkinFactoryImpl());
-
-    // register the base skins
-    SkinUtils.registerBaseSkins();
-    
-    _filters = ClassLoaderUtils.getServices(TrinidadFilterImpl.class.getName());
-    for(Filter f:_filters)
-    {
-      f.init(filterConfig);
-    }
-    // after the 'services' filters are initialized, then register
-    // the skin extensions & skin additions found in trinidad-skins.xml. 
-    // This gives a chance to the 'services' filters to create more base
-    // skins that the skins in trinidad-skins.xml can extend.
-    SkinUtils.registerSkinExtensions(_servletContext);
-
+      _servletContext = filterConfig.getServletContext();
+      
+      //This is the container agnostic initialization filters.  These will work in the portal
+      //as well, but they will be tied to the creation of the Lifecycle.
+      ExternalContext externalContext = new ServletExternalContext(_servletContext, null, null);
+      GlobalConfiguratorImpl.getInstance().init(externalContext);
+      
+      //There is some functionality that still might require servlet-only filter services.
+      _filters = ClassLoaderUtils.getServices(TrinidadFilterImpl.class.getName());
+      for(Filter f:_filters)
+      {
+        f.init(filterConfig);
+      }
   }
 
   public void destroy()
   {
-    for(Filter f:_filters)
-    {
-      f.destroy();
-    }
-    _filters = null;
+      //Destroy filter services
+      for(Filter f:_filters)
+      {
+          f.destroy();
+      }
+      _filters = null;
+      
+      //Destroy container agnostic services
+      GlobalConfiguratorImpl.getInstance().destroy();
   }
 
   @SuppressWarnings("unchecked")
@@ -159,6 +117,7 @@
     ServletResponse response,
     FilterChain     chain) throws IOException, ServletException
   {
+    //Execute the filter services
     if (!_filters.isEmpty())
       chain = new FilterListChain(_filters, chain);
 
@@ -166,110 +125,26 @@
     // properly installed.
     request.setAttribute(_FILTER_EXECUTED_KEY, Boolean.TRUE);
 
-
-    // If someone didn't release the RequestContext on an earlier request,
-    // then it'd still be around, and trying to create a new one
-    // would trigger an exception.  We don't want to take down
-    // this thread for all eternity, so clean up after poorly-behaved code.
-    RequestContext context = RequestContext.getCurrentInstance();
-    if (context != null)
-    {
-      if (_LOG.isWarning())
-        _LOG.warning("RequestContext had not been properly released on earlier " +
-                     "request.");
-      context.release();
-    }
-
-    RequestContextFactory factory = RequestContextFactory.getFactory();
-    assert(factory != null);
-
-    // See if we've got a cached RequestContext instance;  if so,
-    // reattach it
-    Object cachedRequestContext = 
-      request.getAttribute(TrinidadPhaseListener.CACHED_REQUEST_CONTEXT);
-
-    // Catch both the null scenario and the 
-    // RequestContext-from-a-different-classloader scenario
-    if (cachedRequestContext instanceof RequestContext)
-    {
-      context = (RequestContext) cachedRequestContext;
-      context.attach();
-    }
-    else
+    ExternalContext externalContext = new ServletExternalContext(_servletContext, request, response);    
+    GlobalConfiguratorImpl.getInstance().beginRequest(externalContext);
+    
+    //To maintain backward compatibilty, wrap the request at the filter level
+    Map<String, String[]> addedParams = (Map<String, String[]>) externalContext.getRequestMap().get(FileUploadConfiguratorImpl._PARAMS);
+    
+    if(addedParams != null)
     {
-      context = factory.createContext(_servletContext, request);
-      request.setAttribute(TrinidadPhaseListener.CACHED_REQUEST_CONTEXT,
-                           context);
+      FileUploadConfiguratorImpl.apply(externalContext);
+      request = new UploadRequestWrapper((HttpServletRequest)request, addedParams);
     }
-
-    assert(RequestContext.getCurrentInstance() == context);
-
+    
     try
     {
-      // Only handle multipart and HTTP requests
-      if (!MultipartFormHandler.isMultipartRequest(request) ||
-          !(request instanceof HttpServletRequest))
-      {
-        _doFilterImpl(request, response, chain);
-      }
-      else
-      {
-        MultipartFormHandler mfh = new MultipartFormHandler(request);
-        mfh.setMaximumAllowedBytes(getMaximumAllowedBytes());
-        mfh.setCharacterEncoding(request.getCharacterEncoding());
-
-        HashMap<String, String[]> parameters = new HashMap<String, String[]>();
-
-        // Copy over all parameters that were already present (for example,
-        // query parameters)
-        parameters.putAll(request.getParameterMap());
-
-        MultipartFormItem item;
-        UploadedFiles files = new UploadedFiles(request);
-        while ((item = mfh.getNextPart()) != null)
-        {
-          String name = item.getName();
-          String value = null;
-          // No filename - it's not a file uploaded field
-          if (item.getFilename() == null)
-          {
-            value = item.getValue();
-            Object oldValue = parameters.get(name);
-            if (oldValue == null)
-            {
-              parameters.put(name, new String[]{value});
-            }
-            else
-            {
-              String[] oldArray = (String[]) oldValue;
-              String[] newArray = new String[oldArray.length + 1];
-              System.arraycopy(oldArray, 0, newArray, 1, oldArray.length);
-              newArray[0] = value;
-              parameters.put(name, newArray);
-            }
-          }
-          // Upload a file
-          else if (item.getFilename().length() > 0)
-          {
-            _doUploadFile(context, request, files, item);
-          }
-        }
-
-        request = new UploadRequestWrapper((HttpServletRequest) request,
-                                           parameters);
-
-        _doFilterImpl(request, response, chain);
-
-        files.dispose();
-      }
+      
+      _doFilterImpl(request, response, chain);
     }
     finally
     {
-      if (context != null)
-      {
-        context.release();
-        assert(RequestContext.getCurrentInstance() == null);
-      }
+      GlobalConfiguratorImpl.getInstance().endRequest(externalContext);
     }
   }
 
@@ -280,12 +155,17 @@
     ServletResponse response,
     FilterChain     chain) throws IOException, ServletException
   {
+    // -= Scott O'Bryan =-
+    // This is used for PPR.  Not needed in Portal Environment at the moment
+    // At some point we may want to make this a configurator
     HttpServletResponse monitor
-      = new MonitorRedirectServletResponse((HttpServletResponse) response,
-                                           request);
-
-    ServletResponse dispatch
-      = new DispatchServletResponse(monitor, (HttpServletRequest)request);
+      = new MonitorRedirectServletResponse((HttpServletResponse) response, request);
+    
+    // -= Scott O'Bryan =-
+    // Added for backward compatibility
+    ExternalContext ec = new ServletExternalContext(_servletContext, request, monitor);
+    HttpServletResponse dispatch = new DispatchServletResponse(ec);
+    DispatchResponseConfiguratorImpl.apply(ec);
 
     _invokeDoFilter(request, dispatch, chain);
 
@@ -298,6 +178,12 @@
     //        However, the Servlet specification suggest <String, Object> so this 
     //        could lead to some nasty problems one day. Especially if JEE spec includes 
     //        generics for its Servlet API soon.
+    //
+    // -= Scott O'Bryan =- 
+    // TODO: The following should be made available to the Portal.  This is not trivial 
+    //       because this just re-invokes the filter chain with a new set of parameters.
+    //       In the portal environment, this must rerun the portlet without the use of 
+    //       filters until Portlet 2.0.
     Map<String, String[]> launchParameters = (Map<String, String[]>)
       request.getAttribute(RequestContextImpl.LAUNCH_PARAMETERS);
     if (launchParameters != null)
@@ -319,7 +205,7 @@
     // Set up a PseudoFacesContext with the actual request and response
     // so that RequestContext can be more functional in the interval
     // between now and when the FacesServlet starts.
-    PseudoFacesContext pfc = new PseudoFacesContext(request, response);
+    PseudoFacesContext pfc = new PseudoFacesContext(new ServletExternalContext(_servletContext, request, response));
     _PSEUDO_FACES_CONTEXT.set(pfc);
     try
     {
@@ -331,28 +217,6 @@
     }
   }
 
-  private void _doUploadFile(
-    RequestContext   context,
-    ServletRequest    request,
-    UploadedFiles     files,
-    MultipartFormItem item) throws IOException
-  {
-    UploadedFile temp = new TempUploadedFile(item);
-
-    UploadedFile file =
-      context.getUploadedFileProcessor().processFile(request, temp);
-
-    if (file != null)
-    {
-      // Store the file.
-      files.__put(item.getName(), file);
-
-      if (_LOG.isFine())
-        _LOG.fine("Uploaded file " + file.getFilename() + "(" +
-                  file.getLength() + " bytes) for ID " + item.getName());
-    }
-  }
-
   /**
    * A ServletResponseWrapper that will catch partial page redirects
    * and handle them correctly.
@@ -424,50 +288,6 @@
       _filters.get(_index).doFilter(request, response, next);
     }
   }
-
-  static private class TempUploadedFile implements UploadedFile
-  {
-    public TempUploadedFile(MultipartFormItem item)
-    {
-      _item = item;
-      assert(item.getValue() == null);
-    }
-
-    public String getFilename()
-    {
-      return _item.getFilename();
-    }
-
-    public String getContentType()
-    {
-      return _item.getContentType();
-    }
-
-    public long getLength()
-    {
-      // The length is not known yet.
-      return -1L;
-    }
-
-    public Object getOpaqueData()
-    {
-      return null;
-    }
-
-    public InputStream getInputStream() throws IOException
-    {
-      return _item.getInputStream();
-    }
-
-    public void dispose()
-    {
-      throw new UnsupportedOperationException();
-    }
-
-    private MultipartFormItem _item;
-  }
-
-  private long _maxAllowedBytes = 1L << 27;
 
   private ServletContext _servletContext;
   private List<Filter> _filters = null;

Added: incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadListenerImpl.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadListenerImpl.java?view=auto&rev=482451
==============================================================================
--- incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadListenerImpl.java (added)
+++ incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadListenerImpl.java Mon Dec  4 18:02:50 2006
@@ -0,0 +1,55 @@
+/*
+ * Copyright  2004-2006 The Apache Software Foundation.
+ * 
+ * Licensed 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.webapp;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import org.apache.myfaces.trinidad.config.GlobalConfigurator;
+
+/**
+ * Implementation of the Trinidad Context Listener
+ *
+ * @author Scott O'Bryan (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+
+public class TrinidadListenerImpl implements ServletContextListener
+{
+
+  /* (non-Javadoc)
+   * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
+   */
+  public void contextDestroyed(ServletContextEvent arg0)
+  {
+    GlobalConfigurator config = GlobalConfigurator.getInstance();
+    
+    if(config.isInitialized())
+    {
+      //clean up the global configurator if it is initialized
+      config.destroy();
+    }
+  }
+
+  /* (non-Javadoc)
+   * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
+   */
+  public void contextInitialized(ServletContextEvent arg0)
+  {
+    //Do not initialize configurators here.  They should be initialized lazily.
+  }
+
+}

Modified: incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadRequestWrapper.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadRequestWrapper.java?view=diff&rev=482451&r1=482450&r2=482451
==============================================================================
--- incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadRequestWrapper.java (original)
+++ incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadRequestWrapper.java Mon Dec  4 18:02:50 2006
@@ -1,157 +0,0 @@
-/*
- * Copyright  2003-2006 The Apache Software Foundation.
- * 
- * Licensed 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.webapp;
-
-import java.io.UnsupportedEncodingException;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Enumeration;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-
-import org.apache.myfaces.trinidad.logging.TrinidadLogger;
-
-import org.apache.myfaces.trinidadinternal.share.util.CaboHttpUtils;
-
-/**
- * Request wrapper class that hooks in parameters identified in
- * the servlet request.
- *
- * @todo Stop going String -> bytes -> String;  change MultipartFormHandler
- *  to simply extract byte arrays, and do all the type conversion here.
- * @author The Oracle ADF Faces Team
- */
-@SuppressWarnings("deprecation")
-class UploadRequestWrapper extends HttpServletRequestWrapper
-{
-  public UploadRequestWrapper(
-      HttpServletRequest request, 
-      Map<String, String[]> extractedParams)
-  {
-    super(request);
-    _extractedParams = extractedParams;
-  }
-
-  /**
-   * Hide the content type so that no one tries to re-download the
-   * uploaded files.
-   */
-  @Override
-  public String getContentType()
-  {
-    return _WWW_FORM_URLENCODED_TYPE;
-  }
-
-  /**
-   * Trap calls to setCharacterEncoding() to decode parameters correctly
-   */
-  @Override
-  public void setCharacterEncoding(String encoding)
-    throws UnsupportedEncodingException
-  {
-    super.setCharacterEncoding(encoding);
-    if (_LOG.isFine())
-      _LOG.fine("Switching encoding of wrapper to " + encoding);
-
-    _extractedAndDecodedParams = 
-      new HashMap<String, String[]>(_extractedParams.size());
-      
-    byte[] buffer = new byte[256];
-    
-    for(Map.Entry<String, String[]> entry : _extractedParams.entrySet())
-    {
-      String key = entry.getKey();
-      key = CaboHttpUtils.decodeRequestParameter(key, encoding, buffer);
-
-      String[] oldValue = entry.getValue();
-      int length = oldValue.length;
-      String[] newValue = new String[length];
-      for (int i = 0; i < length; i++)
-      {
-        newValue[i] = CaboHttpUtils.decodeRequestParameter(oldValue[i],
-                                                           encoding,
-                                                           buffer);
-        if (_LOG.isFinest())
-          _LOG.finest("Parameter " + key + ":" + newValue[i]);
-      }
-
-      _extractedAndDecodedParams.put(key, newValue);
-    }
-
-    // Let the UploadedFiles know, so it can fix up filenames
-    UploadedFiles.setCharacterEncoding(this, encoding);
-  }
-
-  @Override
-  public String getParameter(String param)
-  {
-    String[] value = _getParameterValues(param);
-    if (value == null)
-      return null;
-
-    return value[0];
-  }
-
-  @Override
-  public Map<String, String[]> getParameterMap()
-  {
-    Map<String, String[]> map = _getMap();
-    return Collections.unmodifiableMap(map);
-  }
-
-  @Override
-  public Enumeration<String> getParameterNames()
-  {
-    return Collections.enumeration(_getMap().keySet());
-  }
-
-  @Override
-  public String[] getParameterValues(String param)
-  {
-    String[] value = _getParameterValues(param);
-    if (value == null)
-      return null;
-
-    return value.clone();
-  }
-
-  private String[] _getParameterValues(String param)
-  {
-    return _getMap().get(param);
-  }
-
-  /**
-   * Get the correct map of parameters whether or not setCharacterEncoding()
-   * was called.
-   */
-  private Map<String, String[]> _getMap()
-  {
-    if (_extractedAndDecodedParams != null)
-      return _extractedAndDecodedParams;
-
-    return _extractedParams;
-  }
-
-  private Map<String, String[]> _extractedAndDecodedParams;
-  private Map<String, String[]> _extractedParams;
-
-  private static final TrinidadLogger _LOG = TrinidadLogger.createTrinidadLogger(UploadRequestWrapper.class);
-  private static final String _WWW_FORM_URLENCODED_TYPE =
-    "application/x-www-form-urlencoded";
-}

Modified: incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadedFileImpl.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadedFileImpl.java?view=diff&rev=482451&r1=482450&r2=482451
==============================================================================
--- incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadedFileImpl.java (original)
+++ incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadedFileImpl.java Mon Dec  4 18:02:50 2006
@@ -1,450 +0,0 @@
-/*
- * Copyright  2002-2006 The Apache Software Foundation.
- * 
- * Licensed 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.webapp;
-
-import java.io.BufferedInputStream;
-import java.io.EOFException;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.io.Serializable;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.myfaces.trinidad.model.UploadedFile;
-
-/**
- * UploadedFileImpl defines a single file that has been uploaded
- * to the server.
- * 
- * @version $Name:  $ ($Revision: adfrt/faces/adf-faces-impl/src/main/java/oracle/adfinternal/view/faces/webapp/UploadedFileImpl.java#0 $) $Date: 10-nov-2005.18:49:03 $
- * @author The Oracle ADF Faces Team
- */
-public class UploadedFileImpl implements UploadedFile, Serializable
-{
-  public UploadedFileImpl()
-  {
-  }
-
-  /**
-   * Returns the filename reported from the client.
-   */
-  public String getFilename()
-  {
-    return _filename;
-  }
-
-  /**
-   * Returns the MIME type of the file.
-   */
-  public String getContentType()
-  {
-    return _contentType;
-  }
-
-  /**
-   * Returns the total length (in bytes) of the file.
-   */
-  public long getLength()
-  {
-    return _length;
-  }
-
-  public Object getOpaqueData()
-  {
-    return null;
-  }
-
-  /**
-   * Returns an InputStream that can be used to read the file.
-   * This method can be called repeatedly.
-   */
-  public InputStream getInputStream() throws IOException
-  {
-    if (_buffers != null)
-    {
-      return new BufferIS(_buffers, _sizeOfLastBuffer);
-    }
-    else if (_file != null)
-    {
-      return new BufferedInputStream(new FileInputStream(_file));
-    }
-
-    return null;
-  }
-
-
-  /**
-   * Writes the entire contents of the file to an OutputStream.
-   */
-  private void _writeFile(OutputStream out) throws IOException
-  {
-    if (_buffers != null)
-    {
-      int size = _buffers.size();
-      for (int i = 0; i < size; i++)
-      {
-        byte[] buffer = _buffers.get(i);
-        int bytes;
-        if (i == (size - 1))
-          bytes = _sizeOfLastBuffer;
-        else
-          bytes = buffer.length;
-
-        out.write(buffer, 0, bytes);
-      }
-    }
-    else if (_file != null)
-    {
-      FileInputStream in = new FileInputStream(_file);
-      try
-      {
-        byte[] buffer = new byte[_DISK_BUFFER_SIZE];
-        while (true)
-        {
-          int bytes = in.read(buffer);
-          if (bytes < 0)
-            break;
-          out.write(buffer, 0, bytes);
-        }
-      }
-      finally
-      {
-        in.close();
-      }
-    }
-  }
-
-  /**
-   * Disposes of all resources used to store this file.
-   */ 
-  public void dispose()
-  {
-    _length = 0;
-    _buffers = null;
-    if (_file != null)
-    {
-      _file.delete();
-      _file = null;
-    }
-  }
-  
-  /**
-   * Loads the file from a MultipartFormItem.
-   */
-  public void loadFile(
-    UploadedFile      file,
-    long              remainingMemory,
-    long              remainingDiskSpace,
-    String            directory) throws IOException
-  {
-    _filename    = file.getFilename();
-    _contentType = file.getContentType();
-    
-    InputStream in = file.getInputStream();
-
-    // First step: try to read it into memory.  Instead of trying
-    // to build up one big buffer, we create a list of buffers
-    // that are each at most 4K.  This is vastly faster to create
-    // and insignificantly slower to read.
-    while (_length < remainingMemory)
-    {
-      // Read another block of buffered memory.  We'll read up to 4K
-      // at a time, but no more than the remaining amount of memory plus
-      // one byte.  Why plus one?  Well, we want to know when we've
-      // exceeded the memory size - not just reached it.
-      int size = Math.min(((int) (remainingMemory - _length)) + 1,
-                          _MEMORY_BUFFER_SIZE);
-      byte[] buffer = new byte[size];
-      int bytes = _fillBuffer(in, buffer, size);
-
-      _sizeOfLastBuffer = bytes;
-      _length           = _length + bytes;
-
-      if (_buffers == null)
-        _buffers = new ArrayList<byte[]>();
-      _buffers.add(buffer);
-      
-      // If we're done, bail right here.
-      if (bytes < size)
-        return;
-    }
-
-    // If we didn't have enough space to read the file into memory,
-    // and we also don't have enough space available on disk, then
-    // punt right here and now.
-    if (_length > remainingDiskSpace)
-    {
-      _buffers = null;
-      _length  = 0;
-      throw new EOFException("Per-request disk space limits exceeded.");
-    }
-
-    OutputStream out = _createOutputStream(directory);
-      
-    try
-    {
-      // First, copy the file from memory to the file
-      if (_length > 0)
-      {
-        _writeFile(out);
-      }
-      
-      // Free the buffers, since we're
-      _buffers = null;
-      
-      // Now, write directly to the file.
-      while (_length < remainingDiskSpace)
-      {
-        byte[] buffer = new byte[_DISK_BUFFER_SIZE];
-        int bytes = _fillBuffer(in, buffer, _DISK_BUFFER_SIZE);
-        out.write(buffer, 0, bytes);
-        _length = _length + bytes;
-
-        if (bytes < _DISK_BUFFER_SIZE)
-          break;
-      }
-    }
-    finally
-    {
-      out.close();
-
-      // If we read too much - then drop the file, and bail.
-      if (_length > remainingDiskSpace)
-      {
-        _file.delete();
-        _file = null;
-        _length = 0;
-
-        throw new EOFException("Per-request disk space limits exceeded.");
-      }
-    }
-  }
-  
-  @Override
-  public int hashCode()
-  {
-    if (_filename == null)
-      return 0;
-    return _filename.hashCode();
-  }
-
-  @Override
-  public boolean equals(Object o)
-  {
-    // UploadedFiles are only equal to themselves.
-    return (this == o);
-  }
-
-  //
-  // Create the OutputStream.
-  //
-  private OutputStream _createOutputStream(String directory) throws IOException
-  {
-    File tempDir;
-    if (directory == null)
-      tempDir = null;
-    else
-      tempDir = new File(directory);
-
-    // Create our temporary file.
-    _file = File.createTempFile("uix", null, tempDir);
-
-    // Even though we're supposed to clean up these files ourselves,
-    // make sure they get deleted even if an exception terminates
-    // our code.
-    _file.deleteOnExit();
-
-    // No need for additional buffering of the output - we always
-    // buffer the writes - so _don't_ add a BufferedOutputStream.
-    return new FileOutputStream(_file);
-  }
-
-
-  //
-  // If true, we're either in memory (or empty);  if false,
-  // we're on disk.
-  //
-  boolean __isInMemory()
-  {
-    return (_buffers != null);
-  }
-
-  //
-  // Fill a byte buffer from an InputStream.
-  //
-  private int _fillBuffer(
-    InputStream in,
-    byte[]      buffer,
-    int         size) throws IOException
-  {
-    int offset = 0;
-
-    // Read until the buffer is full, or the InputStream runs out.
-    do
-    {
-      int bytes = in.read(buffer, offset, size - offset);
-      if (bytes < 0)
-        break;
-      
-      offset = offset + bytes;
-    }
-    while (offset < size);
-
-    return offset;
-  }
-
-
-  //
-  // InputStream implementation that reads from an in-memory buffer.
-  //
-  static private class BufferIS extends InputStream
-  {
-    public BufferIS(List<byte[]> bufferList, int sizeOfLastBuffer)
-    {
-      _bufferList = bufferList;
-      _sizeOfLastBuffer = sizeOfLastBuffer;
-    }
-
-    // Read a single byte.
-    @Override
-    public int read()
-    {
-      int bufferIndex = _bufferIndex;
-      if (bufferIndex < 0)
-        return -1;
-
-      byte[] buffer = _getBuffer(bufferIndex);
-      byte currByte = buffer[_bufferPos];
-
-      int bufferSize = _getBufferSize(buffer, bufferIndex);
-      _advanceTo(_bufferPos + 1, bufferSize);
-     
-      return currByte & 0xff; 
-    }
-    
-    // Read into a buffer.
-    @Override
-    public int read(byte b[], int off, int len)
-    {
-      int bufferIndex = _bufferIndex;
-      if (bufferIndex < 0)
-        return -1;
-
-      byte[] buffer = _getBuffer(bufferIndex);
-      int bufferSize = _getBufferSize(buffer, bufferIndex);
-      
-      // Read as many bytes are available in the current buffer block,
-      // up to "len" bytes.  If "len" is larger, then in theory
-      // we could loop and read multiple blocks, but that'd complicate
-      // our logic here without actually simplifying the developer's
-      // logic any (they can't assume an InputStream behaves that way).
-      int bufferPos = _bufferPos;
-      int bytes = Math.min(len, bufferSize - bufferPos);
-      System.arraycopy(buffer, bufferPos, b, off, bytes);
-      _advanceTo(bufferPos + bytes, bufferSize);
-     
-      return bytes;
-    }
-
-    //
-    // Returns the number of bytes that will be made avaialable
-    // in the next call to read(byte[], int, int);
-    //
-    @Override
-    public int available()
-    {
-      int bufferIndex = _bufferIndex;
-      if (bufferIndex < 0)
-        return 0;
-
-      byte[] buffer = _getBuffer(bufferIndex);
-      int bufferSize = _getBufferSize(buffer, bufferIndex);
-
-      return bufferSize - _bufferPos;
-    }
-
-    // Advance the current buffer to a certain position.
-    private void _advanceTo(int pos, int bufferSize)
-    {
-      if (pos >= bufferSize)
-      {
-        _bufferPos = 0;
-        _bufferIndex = _bufferIndex + 1;
-        if (_bufferIndex >= _bufferList.size())
-          _bufferIndex = -1;
-      }
-      else
-      {
-        _bufferPos = pos;
-      }
-    }
-
-    // Return the size of a given buffer. (The last buffer
-    // may not be completely full.)
-    private int _getBufferSize(byte[] buffer, int bufferIndex)
-    {
-      if (bufferIndex == _bufferList.size() - 1)
-        return _sizeOfLastBuffer;
-      
-      return buffer.length;
-    }
-
-    // Return a buffer.
-    private byte[] _getBuffer(int bufferIndex)
-    {
-      return _bufferList.get(bufferIndex);
-    }
-
-    // ArrayList of all the buffers
-    private List<byte[]> _bufferList;
-    // The number of bytes in the last buffer (which may not be full)
-    private int  _sizeOfLastBuffer;
-
-    // Current index into _bufferList
-    private int  _bufferIndex;
-
-    // Current position in _bufferList[_bufferIndex]
-    private int  _bufferPos;
-  }
-
-
-  private String     _filename;
-  private String     _contentType;
-
-  // Total length fo the content, whether in memory or on disk
-  transient private long       _length;
-
-  // File where the content is stored (or null if the content
-  // is in memory)
-  transient private File       _file;
-
-  // ArrayList of all the in-memory buffers (or null if it's in
-  // a File)
-  transient private ArrayList<byte[]> _buffers;
-  // The number of bytes in the last buffer (which may not be full)
-  transient private int        _sizeOfLastBuffer;
-
-  // Buffer sizes.  The memory buffer size can be very small
-  // because of our list-of-small-buffers technique;  for disk I/O,
-  // use a larger buffer.
-  static private final int _MEMORY_BUFFER_SIZE = 2048;
-  static private final int _DISK_BUFFER_SIZE   = 8192;
-}

Modified: incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadedFileProcessorImpl.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadedFileProcessorImpl.java?view=diff&rev=482451&r1=482450&r2=482451
==============================================================================
--- incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadedFileProcessorImpl.java (original)
+++ incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadedFileProcessorImpl.java Mon Dec  4 18:02:50 2006
@@ -1,159 +0,0 @@
-/*
- * Copyright  2002-2006 The Apache Software Foundation.
- * 
- * Licensed 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.webapp;
-
-import java.io.File;
-import java.io.IOException;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRequest;
-import org.apache.myfaces.trinidad.model.UploadedFile;
-import org.apache.myfaces.trinidad.webapp.UploadedFileProcessor;
-
-public class UploadedFileProcessorImpl implements UploadedFileProcessor
-{
-  public UploadedFileProcessorImpl()
-  {
-  }
-
-  public void init(Object c)
-  {
-    if (!(c instanceof ServletContext))
-      return;
-
-    ServletContext context = (ServletContext) c;
-    //
-    // Get MaxMemory and TempDir properties from servlet init params
-    //
-    if (_maxMemory == -1)
-    {
-      String maxMemory = context.getInitParameter(
-                                 MAX_MEMORY_PARAM_NAME);
-      if (maxMemory != null)
-      {
-        try
-        {
-          _maxMemory = Integer.parseInt(maxMemory);
-        }
-        catch (NumberFormatException nfe)
-        {
-          _maxMemory = _DEFAULT_MAX_MEMORY;
-        }
-      }
-      else
-      {
-        _maxMemory = _DEFAULT_MAX_MEMORY;
-      }
-    }
-      
-    if (_maxDiskSpace == -1)
-    {
-      String maxDiskSpace = context.getInitParameter(
-                                                  MAX_DISK_SPACE_PARAM_NAME);
-      if (maxDiskSpace != null)
-      {
-        try
-        {
-          _maxDiskSpace = Integer.parseInt(maxDiskSpace);
-        }
-        catch (NumberFormatException nfe)
-        {
-          _maxMemory = _DEFAULT_MAX_DISK_SPACE;
-        }
-      }
-      else
-      {
-        _maxDiskSpace = _DEFAULT_MAX_DISK_SPACE;
-      }
-    }
-    
-    if (_tempDir == null)
-    {
-      _tempDir = context.getInitParameter(TEMP_DIR_PARAM_NAME);
-      // Use the webapp temporary directory if the temporary directory
-      // has not been explicitly set.
-      if (_tempDir == null)
-      {
-        File tempDirFile = (File) 
-          context.getAttribute("javax.servlet.context.tempdir");
-        if (tempDirFile != null)
-          _tempDir = tempDirFile.getAbsolutePath();
-      }
-    }
-  }
-
-  public UploadedFile processFile(Object       request,
-                                  UploadedFile tempFile)
-    throws IOException
-  {
-    RequestInfo info = _getRequestInfo(request);
-
-    // Process one new file, loading only as much as can fit
-    // in the remaining memory and disk space.
-    UploadedFileImpl file = new UploadedFileImpl();
-    file.loadFile(tempFile,
-                  _maxMemory - info.totalBytesInMemory,
-                  _maxDiskSpace - info.totalBytesOnDisk,
-                  _tempDir);
-
-    // 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 RequestInfo _getRequestInfo(Object r)
-  {
-    if (!(r instanceof ServletRequest))
-      throw new IllegalArgumentException(
-        "Only servlet-based file upload is supported");
-
-    ServletRequest request = (ServletRequest) r;
-    RequestInfo info = (RequestInfo) request.getAttribute(_REQUEST_INFO_KEY);
-    if (info == null)
-    {
-      info = new RequestInfo();
-      request.setAttribute(_REQUEST_INFO_KEY, info);
-    }
-    
-    return info;
-  }
-
-
-  static private class RequestInfo
-  {
-    public long totalBytesInMemory;
-    public long totalBytesOnDisk;
-  }
-
-  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 = 
-    "org.apache.myfaces.trinidadinternal.webapp.UploadedFilesInfo";
-
-}

Modified: incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadedFiles.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadedFiles.java?view=diff&rev=482451&r1=482450&r2=482451
==============================================================================
--- incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadedFiles.java (original)
+++ incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/UploadedFiles.java Mon Dec  4 18:02:50 2006
@@ -1,222 +0,0 @@
-/*
- * Copyright  2002-2006 The Apache Software Foundation.
- * 
- * Licensed 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.webapp;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.faces.context.FacesContext;
-
-import javax.servlet.ServletRequest;
-
-import org.apache.myfaces.trinidad.model.UploadedFile;
-
-import org.apache.myfaces.trinidadinternal.share.util.CaboHttpUtils;
-
-/**
- * UploadedFiles defines the set of files that have been uploaded
- * to the server.
- * 
- * @version $Name:  $ ($Revision: adfrt/faces/adf-faces-impl/src/main/java/oracle/adfinternal/view/faces/webapp/UploadedFiles.java#0 $) $Date: 10-nov-2005.18:49:05 $
- * @author The Oracle ADF Faces Team
- */
-final public class UploadedFiles
-{
-  /**
-   * Returns the map of uploaded files for the current request.
-   */
-  @SuppressWarnings("unchecked")
-  static public UploadedFiles getUploadedFiles(FacesContext context)
-  {
-    Map<String, Object> requestMap = 
-      context.getExternalContext().getRequestMap();
-    return (UploadedFiles) requestMap.get(_UPLOADED_FILES_KEY);
-  }
-
-  /**
-   * Store the character encoding for the current request.
-   */
-  static public void setCharacterEncoding(
-    ServletRequest request,
-    String         encoding)
-  {
-    UploadedFiles files = (UploadedFiles)
-      request.getAttribute(_UPLOADED_FILES_KEY);
-    if (files != null)
-    {
-      files._characterEncoding = encoding;
-    }
-  }
-
-  /**
-   * Returns a single uploaded file.
-   * @param name the name under which the file is stored.  In HTML forms,
-   *   this will be derived from the "name" set on the &lt;input&gt; tag.
-   */
-  public UploadedFile getUploadedFile(String name)
-  {
-    UploadedFile file = _map.get(name);
-    if (file == null)
-      return null;
-
-    return new FixFilename(file, _characterEncoding);
-  }
-
-
-  /**
-   * Returns an Iterator of the names of all uploaded files.
-   */
-  public Iterator<String> getUploadedNames()
-  {
-    return _map.keySet().iterator();
-  }
-
-  /**
-   * Dispose of all UploadedFiles.  This will happen automatically
-   * when the current request ends, so clients do not need to
-   * call this method.  However, if a developer is finished with
-   * processing files, this will free up resources earlier.
-   */
-  public void dispose()
-  {
-    Iterator<UploadedFile> iterator = _map.values().iterator();
-    while (iterator.hasNext())
-    {
-      UploadedFile file = iterator.next();
-      file.dispose();
-    }
-
-    _map.clear();
-
-    _totalMemory    = 0;
-    _totalDiskSpace = 0;
-  }
-
-  /**
-   * Creates an UploadedFiles.
-   */
-  UploadedFiles(ServletRequest request)
-  {
-    request.setAttribute(_UPLOADED_FILES_KEY, this);
-    _map = new HashMap<String, UploadedFile>();
-  }
-
-  /**
-   * Store a single UploadedFile.
-   */
-  void __put(String name, UploadedFile file)
-  {
-    _map.put(name, file);
-  }
-
-
-  /**
-   * Return the tally of total memory used.
-   */
-  public long getTotalMemory()
-  {
-    return _totalMemory;
-  }
-
-
-  /**
-   * Return the tally of total disk space used.
-   */
-  public long getTotalDiskSpace()
-  {
-    return _totalDiskSpace;
-  }
-
-
-
-  private long   _totalMemory;
-  private long   _totalDiskSpace;
-  private String _characterEncoding;
-  private final Map<String, UploadedFile> _map;
-
-  private static final String _UPLOADED_FILES_KEY = 
-    "org.apache.myfaces.trinidadinternal.webapp.UploadedFiles";
-
-  static public class FixFilename implements UploadedFile, Serializable
-  {
-    public FixFilename()
-    {
-      // For serialization
-    }
-
-    public FixFilename(UploadedFile file, String encoding)
-    {
-      _file = file;
-      _encoding = encoding;
-    }
-    
-    public String getFilename()
-    {
-      String filename = _file.getFilename();
-      if (_encoding == null)
-        return filename;
-
-      try
-      {
-        return CaboHttpUtils.decodeRequestParameter(filename,
-                                                    _encoding,
-                                                    null);
-      }
-      catch (UnsupportedEncodingException uee)
-      {
-        // Should never happen, since the encoding should have
-        // already been vetted in UploadedRequestWrapper
-        assert false;
-        return filename;
-      }
-    }
-
-    public String getContentType()
-    {
-      return _file.getContentType();
-    }
-
-    public long getLength()
-    {
-      return _file.getLength();
-    }
-
-    public Object getOpaqueData()
-    {
-      return _file.getOpaqueData();
-    }
-
-    public InputStream getInputStream() throws IOException
-    {
-      return _file.getInputStream();
-    }
-
-
-    public void dispose()
-    {
-      _file.dispose();
-    }
-
-    private UploadedFile _file;
-    private String       _encoding;
-  }
-}

Added: incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/resources/META-INF/services/org.apache.myfaces.trinidad.config.GlobalConfigurator
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/resources/META-INF/services/org.apache.myfaces.trinidad.config.GlobalConfigurator?view=auto&rev=482451
==============================================================================
--- incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/resources/META-INF/services/org.apache.myfaces.trinidad.config.GlobalConfigurator (added)
+++ incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/main/resources/META-INF/services/org.apache.myfaces.trinidad.config.GlobalConfigurator Mon Dec  4 18:02:50 2006
@@ -0,0 +1,2 @@
+org.apache.myfaces.trinidadinternal.config.upload.FileUploadConfiguratorImpl
+org.apache.myfaces.trinidadinternal.config.dispatch.DispatchResponseConfiguratorImpl

Modified: incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/context/RequestContextTest.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/context/RequestContextTest.java?view=diff&rev=482451&r1=482450&r2=482451
==============================================================================
--- incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/context/RequestContextTest.java (original)
+++ incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/context/RequestContextTest.java Mon Dec  4 18:02:50 2006
@@ -122,6 +122,6 @@
   {
     // =-=AEW Would be better to create it with a mock context so we
     // can test parsing
-    return (new RequestContextFactoryImpl()).createContext(null, null);
+    return (new RequestContextFactoryImpl()).createContext(null);
   }
 }

Added: incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/test/resources/META-INF/services/org.apache.myfaces.trinidad.config.GlobalConfigurator
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/test/resources/META-INF/services/org.apache.myfaces.trinidad.config.GlobalConfigurator?view=auto&rev=482451
==============================================================================
--- incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/test/resources/META-INF/services/org.apache.myfaces.trinidad.config.GlobalConfigurator (added)
+++ incubator/adffaces/branches/jwaldman-portal/trinidad/trinidad-impl/src/test/resources/META-INF/services/org.apache.myfaces.trinidad.config.GlobalConfigurator Mon Dec  4 18:02:50 2006
@@ -0,0 +1,2 @@
+org.apache.myfaces.trinidadinternal.config.upload.FileUploadConfiguratorImpl
+org.apache.myfaces.trinidadinternal.config.dispatch.DispatchResponseConfiguratorImpl