weaver      2004/08/24 07:27:26

  Modified:    portal/src/java/org/apache/jetspeed/request
                        JetspeedRequestContext.java
  Log:
  Cache window response/request instead of recreating on each method call
  
  Revision  Changes    Path
  1.31      +57 -39    
jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/request/JetspeedRequestContext.java
  
  Index: JetspeedRequestContext.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/request/JetspeedRequestContext.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- JetspeedRequestContext.java       19 Aug 2004 13:59:34 -0000      1.30
  +++ JetspeedRequestContext.java       24 Aug 2004 14:27:26 -0000      1.31
  @@ -16,6 +16,7 @@
   package org.apache.jetspeed.request;
   
   import java.util.Enumeration;
  +import java.util.HashMap;
   import java.util.Iterator;
   import java.util.Locale;
   import java.util.Map;
  @@ -57,10 +58,6 @@
    */
   public class JetspeedRequestContext implements RequestContext
   {
  -    public static final String PREFERED_LANGUAGE_SESSION_KEY = 
"org.apache.jetspeed.prefered.language";
  -    public static final String PREFERED_LOCALE_SESSION_KEY = 
"org.apache.jetspeed.prefered.locale";
  -    public static final String PREFERED_CHARACTERENCODING_KEY = 
"org.apache.jetspeed.prefered.characterencoding";
  -
       private HttpServletRequest request;
       private HttpServletResponse response;
       private ServletConfig config;
  @@ -81,8 +78,8 @@
       private String requestPath = null;
       /** The user info manager. */
       private UserInfoManager userInfoMgr;
  -
  -    public final static String REQUEST_PORTALENV = 
"org.apache.jetspeed.request.RequestContext";
  +    private Map requestsForWindows;
  +    private Map responsesForWindows;
   
       /**
        * Create a new Request Context
  @@ -99,11 +96,13 @@
           this.response = response;
           this.config = config;
           this.userInfoMgr = userInfoMgr;
  +        this.requestsForWindows = new HashMap();
  +        this.responsesForWindows = new HashMap();
   
           // set context in Request for later use
           if (null != this.request)
           {
  -            this.request.setAttribute(REQUEST_PORTALENV, this);
  +            this.request.setAttribute(RequestContext.REQUEST_PORTALENV, this);
           }
   
           if (navcomponent != null)
  @@ -112,7 +111,6 @@
               navstate = navcomponent.create(this);
           }
   
  -
       }
   
       private JetspeedRequestContext()
  @@ -273,13 +271,13 @@
        */
       public void setCharacterEncoding( String enc )
       {
  -        String preferedEnc = (String) 
request.getSession().getAttribute(PREFERED_CHARACTERENCODING_KEY);
  +        String preferedEnc = (String) 
request.getSession().getAttribute(RequestContext.PREFERED_CHARACTERENCODING_KEY);
   
           if (preferedEnc == null || !enc.equals(preferedEnc))
           {
  -            request.setAttribute(PREFERED_CHARACTERENCODING_KEY, enc);
  +            request.setAttribute(RequestContext.PREFERED_CHARACTERENCODING_KEY, 
enc);
           }
  -        
  +
           this.encoding = enc;
       }
   
  @@ -294,11 +292,19 @@
        */
       public HttpServletRequest getRequestForWindow( PortletWindow window )
       {
  -        ServletRequestFactory reqFac = (ServletRequestFactory) Jetspeed.getEngine()
  -                .getFactory(javax.servlet.http.HttpServletRequest.class);
  -        HttpServletRequest requestWrapper = reqFac.getServletRequest(request, 
window);
  -        
  -        return requestWrapper;
  +        if (!requestsForWindows.containsKey(window.getId()))
  +        {
  +            ServletRequestFactory reqFac = (ServletRequestFactory) 
Jetspeed.getEngine().getFactory(
  +                    javax.servlet.http.HttpServletRequest.class);
  +            HttpServletRequest requestWrapper = reqFac.getServletRequest(request, 
window);
  +            requestsForWindows.put(window.getId(), requestWrapper);
  +            return requestWrapper;
  +        }
  +        else
  +        {
  +            return (HttpServletRequest) requestsForWindows.get(window.getId());
  +        }
  +
       }
   
       /**
  @@ -312,9 +318,18 @@
        */
       public HttpServletResponse getResponseForWindow( PortletWindow window )
       {
  -        ServletResponseFactory rspFac = (ServletResponseFactory) 
Jetspeed.getEngine().getFactory(HttpServletResponse.class);
  -        HttpServletResponse wrappedResponse = rspFac.getServletResponse(response);
  -        return wrappedResponse;
  +        if (!responsesForWindows.containsKey(window.getId()))
  +        {
  +            ServletResponseFactory rspFac = (ServletResponseFactory) 
Jetspeed.getEngine().getFactory(
  +                    HttpServletResponse.class);
  +            HttpServletResponse wrappedResponse = 
rspFac.getServletResponse(response);
  +            responsesForWindows.put(window.getId(), wrappedResponse);
  +            return wrappedResponse;
  +        }
  +        else
  +        {
  +            return (HttpServletResponse) responsesForWindows.get(window.getId());
  +        }
       }
   
       /**
  @@ -346,14 +361,15 @@
        */
       public void setLocale( Locale locale )
       {
  -        Locale preferedLocale = (Locale) 
request.getSession().getAttribute(PREFERED_LOCALE_SESSION_KEY);
  -        
  -        if(preferedLocale == null || !locale.equals(preferedLocale))
  -        {    
  -           request.getSession().setAttribute(PREFERED_LANGUAGE_SESSION_KEY, new 
WeakHashMap());
  -           request.getSession().setAttribute(PREFERED_LOCALE_SESSION_KEY, locale);
  +        Locale preferedLocale = (Locale) 
request.getSession().getAttribute(RequestContext.PREFERED_LOCALE_SESSION_KEY);
  +
  +        if (preferedLocale == null || !locale.equals(preferedLocale))
  +        {
  +            
request.getSession().setAttribute(RequestContext.PREFERED_LANGUAGE_SESSION_KEY, new 
WeakHashMap());
  +            
request.getSession().setAttribute(RequestContext.PREFERED_LOCALE_SESSION_KEY, locale);
  +            request.setAttribute(RequestContext.PREFERED_LOCALE_SESSION_KEY, 
locale);
           }
  -        
  +
           this.locale = locale;
       }
   
  @@ -449,9 +465,9 @@
               path.append(token);
               count++;
           }
  -        
  +
           this.requestPath = "/" + path.toString();
  -        
  +
           return this.requestPath;
       }
   
  @@ -467,22 +483,24 @@
       {
           return userInfoMgr.getUserInfoMap(oid, this);
       }
  -    
  +
       /**
        * 
        * <p>
        * getPreferedLanguage
        * </p>
  -     *
  +     * 
        * @see 
org.apache.jetspeed.request.RequestContext#getPreferedLanguage(org.apache.pluto.om.portlet.PortletDefinition)
        * @param portlet
        * @return
        */
  -    public Language getPreferedLanguage(PortletDefinition portlet)
  +    public Language getPreferedLanguage( PortletDefinition portlet )
       {
  -        // TODO cannot get a proper Language when changing a locale by Locale 
Selector
  +        // TODO cannot get a proper Language when changing a locale by Locale
  +        // Selector
           // HttpSession session = request.getSession();
  -        // Map languageMap = (Map) 
session.getAttribute(PREFERED_LANGUAGE_SESSION_KEY);
  +        // Map languageMap = (Map)
  +        // session.getAttribute(PREFERED_LANGUAGE_SESSION_KEY);
           // Language language = (Language) languageMap.get(portlet);
           // if(language != null)
           // {
  @@ -490,12 +508,12 @@
           // }
           LanguageSet languageSet = portlet.getLanguageSet();
           Language language = languageSet.get(locale);
  -        
  +
           Enumeration locales = request.getLocales();
           while (locales.hasMoreElements() && language == null)
           {
               Locale aLocale = (Locale) locales.nextElement();
  -            language = languageSet.get(aLocale);            
  +            language = languageSet.get(aLocale);
           }
   
           Iterator langItr = languageSet.iterator();
  @@ -503,7 +521,7 @@
           {
               language = (Language) langItr.next();
           }
  -        
  +
           if (language == null)
           {
               MutableLanguage languageCtl = new LanguageImpl();
  @@ -512,7 +530,7 @@
               languageCtl.setTitle(portlet.getName());
               language = languageCtl;
           }
  -        
  +
           // languageMap.put(portlet, language);
           return language;
       }
  @@ -521,12 +539,12 @@
        * <p>
        * setPath
        * </p>
  -     *
  +     * 
        * @see org.apache.jetspeed.request.RequestContext#setPath(java.lang.String)
        * @param path
        */
       public void setPath( String path )
       {
  -       this.requestPath = path;
  +        this.requestPath = path;
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to