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

Gavin King gavin.king at jboss.com
Fri Jun 22 11:41:30 EDT 2007


  User: gavin   
  Date: 07/06/22 11:41:30

  Modified:    src/main/org/jboss/seam/servlet     ResourceServlet.java
  Added:       src/main/org/jboss/seam/servlet     SeamFilter.java
                        SeamResourceServlet.java
  Removed:     src/main/org/jboss/seam/servlet     AbstractResource.java
  Log:
  much saner packaging
  
  Revision  Changes    Path
  1.11      +2 -71     jboss-seam/src/main/org/jboss/seam/servlet/ResourceServlet.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: ResourceServlet.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/servlet/ResourceServlet.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -b -r1.10 -r1.11
  --- ResourceServlet.java	10 Jun 2007 19:39:15 -0000	1.10
  +++ ResourceServlet.java	22 Jun 2007 15:41:30 -0000	1.11
  @@ -1,79 +1,10 @@
   package org.jboss.seam.servlet;
   
  -import java.io.IOException;
  -import java.util.HashMap;
  -import java.util.Map;
  -
  -import javax.servlet.ServletConfig;
  -import javax.servlet.ServletContext;
  -import javax.servlet.ServletException;
  -import javax.servlet.http.HttpServlet;
  -import javax.servlet.http.HttpServletRequest;
  -import javax.servlet.http.HttpServletResponse;
  -
  -import org.jboss.seam.contexts.ApplicationContext;
  -import org.jboss.seam.contexts.Context;
  -import org.jboss.seam.core.Init;
  -
   /**
  - * Serves extra resources such as Javascript, CSS, Images
  - * 
    * @author Shane Bryzak
  + * @deprecated use SeamResourceServlet
    */
  -public class ResourceServlet extends HttpServlet
  +public class ResourceServlet extends SeamResourceServlet
   {
  -   private ServletContext context;
  -
  -   private Map<String, AbstractResource> providers = new HashMap<String, AbstractResource>();
  -
  -   @Override
  -   public void init(ServletConfig config) throws ServletException
  -   {
  -      super.init(config);
  -      context = config.getServletContext();
  -      loadResourceProviders();
  -   }
  -
  -   protected void loadResourceProviders()
  -   {
  -      Context tempApplicationContext = new ApplicationContext( new ServletApplicationMap(context) );
  -
  -      Init init = (Init) tempApplicationContext.get(Init.class);
  -      for (String name : init.getResourceProviders())
  -      {
  -         AbstractResource provider = (AbstractResource) tempApplicationContext.get(name);
  -         if (provider != null)
  -         {
  -            provider.setServletContext(context);
  -            providers.put(provider.getResourcePath(), provider);
  -         }
  -      }
  -   }
  -
  -   @Override
  -   public void doGet(HttpServletRequest request, HttpServletResponse response)
  -            throws ServletException, IOException
  -   {
  -      String prefix = request.getContextPath() + request.getServletPath();
  -
  -      if (request.getRequestURI().startsWith(prefix))
  -      {
  -         String path = request.getRequestURI().replaceFirst(prefix, "");
  -         int index = path.indexOf('/', 1);
  -         if (index != -1) path = path.substring(0, index);
  -
  -         AbstractResource provider = providers.get(path);
  -         if (provider != null)
  -         {
  -            provider.getResource(request, response);            
  -         }
  -      }
  -   }
   
  -   @Override
  -   public void doPost(HttpServletRequest request, HttpServletResponse response)
  -            throws ServletException, IOException
  -   {
  -      doGet(request, response);
  -   }
   }
  
  
  
  1.7       +107 -48   jboss-seam/src/main/org/jboss/seam/servlet/SeamFilter.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: SeamFilter.java
  ===================================================================
  RCS file: SeamFilter.java
  diff -N SeamFilter.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ SeamFilter.java	22 Jun 2007 15:41:30 -0000	1.7
  @@ -0,0 +1,167 @@
  +package org.jboss.seam.servlet;
  +
  +import java.io.IOException;
  +import java.util.ArrayList;
  +import java.util.Arrays;
  +import java.util.HashMap;
  +import java.util.List;
  +import java.util.Map;
  +
  +import javax.servlet.Filter;
  +import javax.servlet.FilterChain;
  +import javax.servlet.FilterConfig;
  +import javax.servlet.ServletException;
  +import javax.servlet.ServletRequest;
  +import javax.servlet.ServletResponse;
  +
  +import org.jboss.seam.Component;
  +import org.jboss.seam.contexts.ApplicationContext;
  +import org.jboss.seam.contexts.Context;
  +import org.jboss.seam.core.Init;
  +import org.jboss.seam.log.LogProvider;
  +import org.jboss.seam.log.Logging;
  +import org.jboss.seam.servlet.ServletApplicationMap;
  +import org.jboss.seam.util.SortItem;
  +import org.jboss.seam.util.Sorter;
  +import org.jboss.seam.web.AbstractFilter;
  +
  +/**
  + * A servlet filter that orchestrates the stack of Seam
  + * component filters, and controls ordering. Filter
  + * ordering is specified via the @Filter annotation.
  + * Filters may optionally extend AbstractFilter.
  + * 
  + * @see org.jboss.seam.annotations.Filter
  + * @see AbstractFilter
  + * 
  + * @author Shane Bryzak
  + *
  + */
  +public class SeamFilter implements Filter
  +{
  +   private static final LogProvider log = Logging.getLogProvider(SeamFilter.class);   
  +   
  +   private List<Filter> filters = new ArrayList<Filter>();   
  +   
  +   private class FilterChainImpl implements FilterChain
  +   {  
  +      private FilterChain chain;
  +      private int index;
  +           
  +      private FilterChainImpl(FilterChain chain)
  +      {
  +         this.chain = chain;
  +         index = -1;
  +      }
  +      
  +      public void doFilter(ServletRequest request, ServletResponse response)
  +          throws IOException, ServletException
  +      {
  +         if ( ++index < filters.size() )
  +         {
  +            Filter filter = filters.get(index);
  +            
  +            if (filter instanceof AbstractFilter)
  +            {
  +               AbstractFilter bf = (AbstractFilter) filter;
  +               if ( bf.isMappedToCurrentRequestPath(request) )
  +               {
  +                  filter.doFilter(request, response, this);
  +               }
  +               else
  +               {
  +                  this.doFilter(request, response);
  +               }
  +            }            
  +            else
  +            {
  +               filter.doFilter(request, response, this);
  +            }
  +         }
  +         else
  +         {
  +            chain.doFilter(request, response);
  +         }
  +      }
  +   }
  +
  +   public void init(FilterConfig filterConfig) throws ServletException 
  +   {
  +      Context tempApplicationContext = new ApplicationContext( new ServletApplicationMap( filterConfig.getServletContext() ) ); 
  +      Init init = (Init) tempApplicationContext.get(Init.class);
  +      
  +      // Setup ready for sorting
  +      Map<String, SortItem<Filter>> sortItemsMap = new HashMap<String, SortItem<Filter>>();
  +      List<SortItem<Filter>> sortItems = new ArrayList<SortItem<Filter>>();
  +      
  +      for (String filterName : init.getInstalledFilters())
  +      {
  +         Filter filter = (Filter) tempApplicationContext.get(filterName);
  +         SortItem<Filter> si = new SortItem<Filter>(filter);         
  +         sortItemsMap.put(filterName, si);
  +         sortItems.add(si);
  +      }
  +
  +      for (SortItem<Filter> sortItem : sortItems)
  +      {
  +         org.jboss.seam.annotations.Filter filterAnn = getFilterAnnotation(sortItem.getObj().getClass());
  +         if ( filterAnn != null )
  +         {
  +            for (String s : Arrays.asList( filterAnn.around() ) )
  +            {
  +               SortItem<Filter> aroundSortItem = sortItemsMap.get(s);
  +               if (sortItem!=null && aroundSortItem != null) sortItem.getAround().add( aroundSortItem );
  +            }
  +            for (String s : Arrays.asList( filterAnn.within() ) )
  +            {
  +               SortItem<Filter> withinSortItem = sortItemsMap.get(s);
  +               if (sortItem!=null && withinSortItem != null) sortItem.getWithin().add( withinSortItem );
  +            }
  +         }
  +      }
  +
  +      // Do the sort
  +      Sorter<Filter> sList = new Sorter<Filter>();
  +      sortItems = sList.sort(sortItems);
  +      
  +      // Set the sorted filters, initialize them
  +      for (SortItem<Filter> sortItem : sortItems)
  +      {
  +         Filter filter = sortItem.getObj();
  +         filters.add(filter);
  +         log.info( "Initializing filter: " + Component.getComponentName(filter.getClass()));
  +         filter.init(filterConfig);
  +      }
  +   }
  +   
  +   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  +       throws IOException, ServletException
  +   {
  +      new FilterChainImpl(chain).doFilter(request, response);
  +   }
  +   
  +   public void destroy() 
  +   {
  +      for (Filter filter: filters)
  +      {
  +         filter.destroy();
  +      }
  +   }
  +   
  +   private org.jboss.seam.annotations.Filter getFilterAnnotation(Class<?> clazz)
  +   {
  +      while (!Object.class.equals(clazz))
  +      {
  +         if (clazz.isAnnotationPresent(org.jboss.seam.annotations.Filter.class))
  +         {
  +            return clazz.getAnnotation(org.jboss.seam.annotations.Filter.class);
  +         }
  +         else
  +         {
  +            clazz = clazz.getSuperclass();
  +         }
  +      }
  +      return null;
  +   }
  +   
  +}
  
  
  
  1.1      date: 2007/06/22 15:41:30;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/servlet/SeamResourceServlet.java
  
  Index: SeamResourceServlet.java
  ===================================================================
  package org.jboss.seam.servlet;
  
  import java.io.IOException;
  import java.util.HashMap;
  import java.util.Map;
  
  import javax.servlet.ServletConfig;
  import javax.servlet.ServletContext;
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import org.jboss.seam.contexts.ApplicationContext;
  import org.jboss.seam.contexts.Context;
  import org.jboss.seam.core.Init;
  import org.jboss.seam.web.AbstractResource;
  
  /**
   * Serves extra resources such as Javascript, CSS, Images
   * 
   * @author Shane Bryzak
   */
  public class SeamResourceServlet extends HttpServlet
  {
     private ServletContext context;
  
     private Map<String, AbstractResource> providers = new HashMap<String, AbstractResource>();
  
     @Override
     public void init(ServletConfig config) throws ServletException
     {
        super.init(config);
        context = config.getServletContext();
        loadResourceProviders();
     }
  
     protected void loadResourceProviders()
     {
        Context tempApplicationContext = new ApplicationContext( new ServletApplicationMap(context) );
  
        Init init = (Init) tempApplicationContext.get(Init.class);
        for (String name : init.getResourceProviders())
        {
           AbstractResource provider = (AbstractResource) tempApplicationContext.get(name);
           if (provider != null)
           {
              provider.setServletContext(context);
              providers.put( provider.getResourcePath(), provider );
           }
        }
     }
  
     @Override
     public void doGet(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException
     {
        String prefix = request.getContextPath() + request.getServletPath();
  
        if (request.getRequestURI().startsWith(prefix))
        {
           String path = request.getRequestURI().replaceFirst(prefix, "");
           int index = path.indexOf('/', 1);
           if (index != -1) path = path.substring(0, index);
  
           AbstractResource provider = providers.get(path);
           if (provider != null)
           {
              provider.getResource(request, response);            
           }
        }
     }
  
     @Override
     public void doPost(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException
     {
        doGet(request, response);
     }
  }
  
  
  



More information about the jboss-cvs-commits mailing list