[jboss-cvs] jboss-seam/src/main/org/jboss/seam/core ...

Gavin King gavin.king at jboss.com
Wed Jun 13 17:07:33 EDT 2007


  User: gavin   
  Date: 07/06/13 17:07:33

  Modified:    src/main/org/jboss/seam/core      IsUserInRole.java
                        LocaleSelector.java UserPrincipal.java
  Added:       src/main/org/jboss/seam/core     
                        ConversationPropagation.java ServletContexts.java
  Log:
  refactor
  
  Revision  Changes    Path
  1.7       +1 -2      jboss-seam/src/main/org/jboss/seam/core/IsUserInRole.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: IsUserInRole.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/IsUserInRole.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -b -r1.6 -r1.7
  --- IsUserInRole.java	24 Nov 2006 23:15:17 -0000	1.6
  +++ IsUserInRole.java	13 Jun 2007 21:07:33 -0000	1.7
  @@ -17,7 +17,6 @@
   import org.jboss.seam.annotations.Name;
   import org.jboss.seam.annotations.Scope;
   import org.jboss.seam.annotations.Unwrap;
  -import org.jboss.seam.contexts.Lifecycle;
   
   /**
    * Manager component for a map of roles assigned
  @@ -55,7 +54,7 @@
                  return facesContext.getExternalContext().isUserInRole(role);
               }
               
  -            ServletRequest servletRequest = Lifecycle.getServletRequest();
  +            ServletRequest servletRequest = ServletContexts.instance().getRequest();
               if ( servletRequest != null )
               {
                  return ( (HttpServletRequest) servletRequest ).isUserInRole(role);
  
  
  
  1.22      +1 -1      jboss-seam/src/main/org/jboss/seam/core/LocaleSelector.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: LocaleSelector.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/LocaleSelector.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -b -r1.21 -r1.22
  --- LocaleSelector.java	29 Mar 2007 16:26:46 -0000	1.21
  +++ LocaleSelector.java	13 Jun 2007 21:07:33 -0000	1.22
  @@ -156,7 +156,7 @@
            return facesContext.getApplication().getViewHandler().calculateLocale(facesContext);
         }
         
  -      ServletRequest request = Lifecycle.getServletRequest();
  +      ServletRequest request = ServletContexts.instance().getRequest();
         if (request!=null)
         {
            Locale requestLocale = ( (HttpServletRequest) request ).getLocale();
  
  
  
  1.10      +1 -2      jboss-seam/src/main/org/jboss/seam/core/UserPrincipal.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: UserPrincipal.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/UserPrincipal.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -b -r1.9 -r1.10
  --- UserPrincipal.java	24 Nov 2006 23:15:17 -0000	1.9
  +++ UserPrincipal.java	13 Jun 2007 21:07:33 -0000	1.10
  @@ -17,7 +17,6 @@
   import org.jboss.seam.annotations.Scope;
   import org.jboss.seam.annotations.Unwrap;
   import org.jboss.seam.contexts.Contexts;
  -import org.jboss.seam.contexts.Lifecycle;
   
   /**
    * Manager component for the current user Principal
  @@ -40,7 +39,7 @@
            return facesContext.getExternalContext().getUserPrincipal();
         }
         
  -      ServletRequest servletRequest = Lifecycle.getServletRequest();
  +      ServletRequest servletRequest = ServletContexts.instance().getRequest();
         if ( servletRequest != null )
         {
            return ( (HttpServletRequest) servletRequest ).getUserPrincipal();
  
  
  
  1.1      date: 2007/06/13 21:07:33;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/core/ConversationPropagation.java
  
  Index: ConversationPropagation.java
  ===================================================================
  package org.jboss.seam.core;
  
  import java.util.Map;
  
  import org.jboss.seam.Component;
  import org.jboss.seam.InterceptionType;
  import org.jboss.seam.ScopeType;
  import org.jboss.seam.annotations.Install;
  import org.jboss.seam.annotations.Intercept;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.contexts.Contexts;
  import org.jboss.seam.log.LogProvider;
  import org.jboss.seam.log.Logging;
  import org.jboss.seam.pages.Page;
  
  @Name("conversationPropagation")
  @Scope(ScopeType.EVENT)
  @Intercept(InterceptionType.NEVER)
  @Install(precedence=Install.BUILT_IN)
  public class ConversationPropagation
  {
     private static final LogProvider log = Logging.getLogProvider(ConversationPropagation.class);
     
     private String conversationId;
     private String parentConversationId;
     private boolean validateLongRunningConversation;
     private String propagationType; //TODO: make it an enum!
  
     /**
      * Initialize the request conversation id, taking
      * into account conversation propagation style, and
      * any conversation id passed as a request parameter
      * or in the PAGE context.
      * 
      * @param parameters the request parameters
      */
     public void restoreConversationId(Map parameters)
     {
        restoreNaturalConversationId(parameters);
        restoreSyntheticConversationId(parameters);
        restorePageContextConversationId();
        propagationType = getPropagationFromRequestParameter(parameters);
        handlePropagationType(parameters);
     }
  
     private void handlePropagationType(Map parameters)
     {
        if ( "none".equals(propagationType) )
        {
           conversationId = null;
           parentConversationId = null;
           validateLongRunningConversation = false;
        }
        else if ( "end".equals(propagationType) )
        {
           validateLongRunningConversation = false;
        }
     }
  
     private void restorePageContextConversationId()
     {
        if ( Contexts.isPageContextActive() && isMissing(conversationId) ) 
        {
           //checkPageContext is a workaround for a bug in MySQL server-side state saving
           
           //if it is not passed as a request parameter,
           //try to get it from the page context
           org.jboss.seam.core.FacesPage page = org.jboss.seam.core.FacesPage.instance();
           conversationId = page.getConversationId();
           parentConversationId = null;
           validateLongRunningConversation = page.isConversationLongRunning();
        }
     
        else
        {
           log.debug("Found conversation id in request parameter: " + conversationId);
        }
     }
  
     private void restoreNaturalConversationId(Map parameters)
     {
        //First, try to get the conversation id from the request parameter defined for the page
        String viewId = Pages.getCurrentViewId();
        if ( viewId!=null )
        {
           Page page = Pages.instance().getPage(viewId);
           conversationId = page.getConversationIdParameter().getRequestConversationId(parameters);
           //TODO: how about the parent conversation id?
        }
     }
  
     private void restoreSyntheticConversationId(Map parameters)
     {
        //Next, try to get the conversation id from the globally defined request parameters
        Manager manager = Manager.instance(); //TODO: move the conversationIdParameter to this class!
        if ( isMissing(conversationId) )
        {
           conversationId = getRequestParameterValue( parameters, manager.getConversationIdParameter() );
        }
        if ( isMissing(parentConversationId) )
        {
           parentConversationId = getRequestParameterValue( parameters, manager.getParentConversationIdParameter() );
        }
     }
  
     private String getPropagationFromRequestParameter(Map parameters)
     {
        Object type = parameters.get("conversationPropagation");
        if (type==null)
        {
           return null;
        }
        else if (type instanceof String)
        {
           return (String) type;
        }
        else
        {
           return ( (String[]) type )[0];
        }
     }
  
     private static boolean isMissing(String storedConversationId) 
     {
        return storedConversationId==null || "".equals(storedConversationId);
     }
  
     /**
      * Retrieve the conversation id from the request parameters.
      * 
      * @param parameters the request parameters
      * @return the conversation id
      */
     public static String getRequestParameterValue(Map parameters, String parameterName) 
     {
        Object object = parameters.get(parameterName);
        if (object==null)
        {
           return null;
        }
        else
        {
           if ( object instanceof String )
           {
              //when it comes from JSF it is (usually?) a plain string
              return (String) object;
           }
           else
           {
              //in a servlet it is a string array
              String[] values = (String[]) object;
              if (values.length!=1)
              {
                 throw new IllegalArgumentException("expected exactly one value for conversationId request parameter");
              }
              return values[0];
           }
        }
     }
  
     public String getConversationId()
     {
        return conversationId;
     }
  
     public void setConversationId(String conversationId)
     {
        this.conversationId = conversationId;
     }
  
     public String getParentConversationId()
     {
        return parentConversationId;
     }
  
     public void setParentConversationId(String parentConversationId)
     {
        this.parentConversationId = parentConversationId;
     }
  
     public boolean isValidateLongRunningConversation()
     {
        return validateLongRunningConversation;
     }
  
     public void setValidateLongRunningConversation(boolean validateLongRunningConversation)
     {
        this.validateLongRunningConversation = validateLongRunningConversation;
     }
  
     public static ConversationPropagation instance()
     {
        if ( !Contexts.isEventContextActive() )
        {
           throw new IllegalStateException("No active event context");
        }
        return (ConversationPropagation) Component.getInstance(ConversationPropagation.class, ScopeType.EVENT);
     }
  
     public String getPropagationType()
     {
        return propagationType;
     }
  
     public void setPropagationType(String propagationType)
     {
        this.propagationType = propagationType;
     }
  
  }
  
  
  
  1.1      date: 2007/06/13 21:07:33;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/core/ServletContexts.java
  
  Index: ServletContexts.java
  ===================================================================
  /*
   * JBoss, Home of Professional Open Source
   *
   * Distributable under LGPL license.
   * See terms of license at gnu.org.
   */
  package org.jboss.seam.core;
  
  import static org.jboss.seam.annotations.Install.BUILT_IN;
  
  import javax.servlet.http.HttpServletRequest;
  
  import org.jboss.seam.Component;
  import org.jboss.seam.InterceptionType;
  import org.jboss.seam.ScopeType;
  import org.jboss.seam.annotations.Install;
  import org.jboss.seam.annotations.Intercept;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.contexts.Contexts;
  
  /**
   * A Seam component that binds the HttpServletRequest object
   * to the current thread.
   * 
   * @author Gavin King
   */
  @Scope(ScopeType.EVENT)
  @Name("org.jboss.seam.core.httpServletRequest")
  @Intercept(InterceptionType.NEVER)
  @Install(precedence=BUILT_IN)
  public class ServletContexts 
  {
     
     private HttpServletRequest request;
     
     public static ServletContexts instance()
     {
        if ( !Contexts.isEventContextActive() ) 
        {
           throw new IllegalStateException("no event context active");
        }
        return (ServletContexts) Component.getInstance(ServletContexts.class, ScopeType.EVENT);
     }
  
     public HttpServletRequest getRequest()
     {
        return request;
     }
  
     public void setRequest(HttpServletRequest request)
     {
        this.request = request;
     }
     
  }
  
  
  



More information about the jboss-cvs-commits mailing list