[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