Author: costin
Date: Tue Jul 14 05:38:02 2009
New Revision: 793797

URL: http://svn.apache.org/viewvc?rev=793797&view=rev
Log:
Some initial implementations for the 3.0 dynamic registration methods. Moving 
back web.xml config to separate package - with annotations requiring scanning 
of all files it needs to be done at deploy time - so it'll be better to just 
load a .ser file at startup.

Added:
    
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/webxml/ServletContextConfig.java
      - copied, changed from r793382, 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletContextConfig.java
Removed:
    
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletContextConfig.java
    
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/webxml/WebAnnotation.java
    
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/webxml/WebResourceCollectionData.java
Modified:
    
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/FilterConfigImpl.java
    
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletConfigImpl.java
    
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletContextImpl.java
    
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletResponseImpl.java
    
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/WebappFilterMapper.java
    
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/webxml/WebXml.java

Modified: 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/FilterConfigImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/FilterConfigImpl.java?rev=793797&r1=793796&r2=793797&view=diff
==============================================================================
--- 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/FilterConfigImpl.java
 (original)
+++ 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/FilterConfigImpl.java
 Tue Jul 14 05:38:02 2009
@@ -19,13 +19,19 @@
 
 
 import java.util.ArrayList;
+import java.util.EnumSet;
 import java.util.Enumeration;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
+import javax.servlet.DispatcherType;
 import javax.servlet.Filter;
 import javax.servlet.FilterConfig;
+import javax.servlet.FilterRegistration;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
+import javax.servlet.FilterRegistration.Dynamic;
 
 import org.apache.tomcat.servlets.util.Enumerator;
 
@@ -41,29 +47,37 @@
  * 
  * @see ServletConfigImpl
  */
-public final class FilterConfigImpl implements FilterConfig {
+public final class FilterConfigImpl implements FilterConfig, 
FilterRegistration {
 
+    DynamicFilterRegistration dynamic = new DynamicFilterRegistration();
+    
     public FilterConfigImpl(ServletContextImpl context) {
-        this.context = context;
+        this.ctx = context;
     }
     
-    private ServletContextImpl context = null;
+    boolean asyncSupported;
+    
+    private ServletContextImpl ctx = null;
 
     /**
      * The application Filter we are configured for.
      */
     private transient Filter filter = null;
-
+    
+    String descryption;
+    
     private String filterName;
 
-    private String filterClass;
+    private String filterClassName;
+
+    Map<String, String> initParams;
 
-    private Map<String, String> initParams;
+    private Class<? extends Filter> filterClass;
 
     public void setData(String filterName, String filterClass,
                         Map<String, String> params) {
         this.filterName = filterName;
-        this.filterClass = filterClass;
+        this.filterClassName = filterClass;
         this.initParams = params;
     }
     
@@ -75,6 +89,11 @@
         return filterName;
     }
 
+    public void setFilterClass(Class<? extends Filter> filterClass2) {
+        this.filterClass = filterClass2;
+    }
+    
+
     public String getInitParameter(String name) {
         if (initParams == null) return null;
         return initParams.get(name);
@@ -96,20 +115,20 @@
      * Return the ServletContext of our associated web application.
      */
     public ServletContext getServletContext() {
-        return context;
+        return ctx;
     }
 
     /**
      * Return the application Filter we are configured for.
      */
-    public Filter getFilter() throws ClassCastException, 
ClassNotFoundException,
+    public Filter createFilter() throws ClassCastException, 
ClassNotFoundException,
         IllegalAccessException, InstantiationException, ServletException {
 
         // Return the existing filter instance, if any
         if (filter != null)
             return filter;
 
-        ClassLoader classLoader = context.getClassLoader();
+        ClassLoader classLoader = ctx.getClassLoader();
 
         ClassLoader oldCtxClassLoader =
             Thread.currentThread().getContextClassLoader();
@@ -117,14 +136,23 @@
             Thread.currentThread().setContextClassLoader(classLoader);
         }
         try {
-            Class clazz = classLoader.loadClass(filterClass);
-            this.filter = (Filter) clazz.newInstance();
+            if (filterClass == null) {
+                filterClass = (Class<? extends Filter>) 
classLoader.loadClass(filterClassName);
+            }
+            this.filter = (Filter) filterClass.newInstance();
         } finally {        
             if (classLoader != oldCtxClassLoader) {
                 
Thread.currentThread().setContextClassLoader(oldCtxClassLoader);
             }
         }
         
+        // TODO: resource injection
+        
+        return filter;
+    }
+    
+    public Filter getFilter() throws ClassCastException, 
ClassNotFoundException, IllegalAccessException, InstantiationException, 
ServletException {
+        Filter filter = createFilter();
         filter.init(this);
         return (this.filter);
     }
@@ -140,4 +168,105 @@
         }
         this.filter = null;
      }
+
+    @Override
+    public void addMappingForServletNames(EnumSet<DispatcherType> 
dispatcherTypes,
+                                          boolean isMatchAfter,
+                                          String... servletNames) {
+        if (ctx.startDone) {
+            // Use the context method instead of the servlet API to 
+            // add mappings after context init.
+            throw new IllegalStateException();
+        }
+        ArrayList<String> dispatchers = new ArrayList<String>();
+        for (DispatcherType dt: dispatcherTypes) {
+            dispatchers.add(dt.name());
+        }
+        for (String servletName: servletNames) {
+            ctx.getFilterMapper().addMapping(getFilterName(),
+                    null, servletName, (String[]) dispatchers.toArray(), 
isMatchAfter);
+        }
+    }
+
+    @Override
+    public void addMappingForUrlPatterns(EnumSet<DispatcherType> 
dispatcherTypes,
+                                         boolean isMatchAfter,
+                                         String... urlPatterns) {
+        if (ctx.startDone) {
+            // Use the context method instead of the servlet API to 
+            // add mappings after context init.
+            throw new IllegalStateException();
+        }
+        ArrayList<String> dispatchers = new ArrayList<String>();
+        for (DispatcherType dt: dispatcherTypes) {
+            dispatchers.add(dt.name());
+        }
+        for (String url: urlPatterns) {
+            ctx.getFilterMapper().addMapping(getFilterName(),
+                    url, null, (String[]) dispatchers.toArray(), isMatchAfter);
+        }
+    }
+
+    @Override
+    public boolean setInitParameter(String name, String value)
+            throws IllegalArgumentException, IllegalStateException {
+        return ServletContextImpl.setInitParameter(ctx, initParams, 
+                name, value);
+    }
+
+    @Override
+    public Set<String> setInitParameters(Map<String, String> initParameters)
+    throws IllegalArgumentException, IllegalStateException {
+        return ServletContextImpl.setInitParameters(ctx, initParams, 
+                initParameters);
+    }
+    
+    public Dynamic getDynamic() {
+        return dynamic;
+    }
+    
+    public class DynamicFilterRegistration implements Dynamic {
+
+        @Override
+        public void addMappingForServletNames(EnumSet<DispatcherType> 
dispatcherTypes,
+                                              boolean isMatchAfter,
+                                              String... servletNames) {
+            FilterConfigImpl.this.addMappingForServletNames(dispatcherTypes, 
isMatchAfter, servletNames);
+        }
+
+        @Override
+        public void addMappingForUrlPatterns(EnumSet<DispatcherType> 
dispatcherTypes,
+                                             boolean isMatchAfter,
+                                             String... urlPatterns) {
+            FilterConfigImpl.this.addMappingForUrlPatterns(dispatcherTypes, 
isMatchAfter, urlPatterns);
+        }
+
+        @Override
+        public boolean setInitParameter(String name, String value)
+                throws IllegalArgumentException, IllegalStateException {
+            return ServletContextImpl.setInitParameter(ctx, initParams, 
+                    name, value);
+        }
+
+        @Override
+        public Set<String> setInitParameters(Map<String, String> 
initParameters)
+                throws IllegalArgumentException, IllegalStateException {
+            return ServletContextImpl.setInitParameters(ctx, initParams, 
+                    initParameters);
+        }
+
+        @Override
+        public void setAsyncSupported(boolean isAsyncSupported)
+                throws IllegalStateException {
+            asyncSupported = isAsyncSupported;
+        }
+
+        @Override
+        public void setDescription(String description)
+                throws IllegalStateException {
+            FilterConfigImpl.this.descryption = description;
+        }
+    }
+
+    
 }

Modified: 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletConfigImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletConfigImpl.java?rev=793797&r1=793796&r2=793797&view=diff
==============================================================================
--- 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletConfigImpl.java
 (original)
+++ 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletConfigImpl.java
 Tue Jul 14 05:38:02 2009
@@ -23,6 +23,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 import java.util.Stack;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -31,6 +32,7 @@
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
 import javax.servlet.SingleThreadModel;
 import javax.servlet.UnavailableException;
 
@@ -48,7 +50,12 @@
  * @author Craig R. McClanahan
  * @author Remy Maucherat
  */
-public class ServletConfigImpl implements ServletConfig {
+...@suppresswarnings("deprecation")
+public class ServletConfigImpl implements ServletConfig, ServletRegistration {
+    
+    ServletDynamicRegistration dynamic = new ServletDynamicRegistration();
+    
+    protected boolean asyncSupported;
     
     private static Logger log=
         Logger.getLogger(ServletConfigImpl.class.getName());
@@ -60,10 +67,10 @@
     //    public static final String SINGLE_THREADED_PROXY =
     //             "org.apache.tomcat.servlets.jsp.SingleThreadedProxyServlet";
 
-
+    protected String description;
     protected Map<String, String> initParams = new HashMap<String, String>();
     protected String servletName;
-    protected String servletClass;
+    protected String servletClassName;
     protected String jspFile;
     protected int loadOnStartup = -1;
     protected String runAs;
@@ -89,7 +96,7 @@
      */
     private transient boolean unloading = false;
 
-    private Class classClass = null;
+    private Class servletClass = null;
 
     // Support for SingleThreaded
     /**
@@ -113,7 +120,7 @@
     public ServletConfigImpl(ServletContextImpl ctx, String name, 
                              String classname) {
         this.servletName = name;
-        this.servletClass = classname;
+        this.servletClassName = classname;
         this.ctx = ctx;
         ctx.facade.notifyAdd(this);
     }
@@ -183,7 +190,7 @@
      * Return the fully qualified servlet class name for this servlet.
      */
     public String getServletClass() {
-        return servletClass;
+        return servletClassName;
     }
 
     /**
@@ -368,9 +375,12 @@
         }
     }
 
-    private Servlet newInstance() throws ServletException {
-        String actualClass = servletClass;
+    public Servlet newInstance() throws ServletException {
+        String actualClass = servletClassName;
 
+        if (instance != null) {
+            return instance;
+        }
         if (actualClass == null) {
             // No explicit name. Try to use the framework
             if (jspFile != null) {
@@ -378,8 +388,8 @@
                 // Named JSPs can be handled by a servlet or by the mapper.
                 Servlet res = (Servlet) 
ctx.getObjectManager().get("filetemplate-servlet");
                 if (res != null) {
-                    classClass = res.getClass();
-                    actualClass = classClass.getName();
+                    servletClass = res.getClass();
+                    actualClass = servletClass.getName();
                     initParams.put("jsp-file", jspFile);
                     return res;
                 } else {
@@ -396,8 +406,8 @@
                 Servlet res = (Servlet) ctx.getObjectManager().get( 
servletName +
                         "-servlet");
                 if (res != null) {
-                    classClass = res.getClass();
-                    actualClass = classClass.getName();
+                    servletClass = res.getClass();
+                    actualClass = servletClass.getName();
                     return res;
                 }
             }
@@ -407,7 +417,7 @@
         }
             
         
-        if (classClass == null) {
+        if (servletClass == null) {
             // set classClass
             loadClass(actualClass);
         }
@@ -424,14 +434,14 @@
         
         // the jsp proxy is replaced by the web.xml processor
         
-        if (classClass == null) {
+        if (servletClass == null) {
             unavailable(null);
             throw new UnavailableException("ClassNotFound: " + actualClass);
         }
         
         // Instantiate and initialize an instance of the servlet class itself
         try {
-            return (Servlet) classClass.newInstance();
+            return (Servlet) servletClass.newInstance();
         } catch (ClassCastException e) {
             unavailable(null);
             throw new UnavailableException("ClassCast: (Servlet)" + 
@@ -509,9 +519,9 @@
         
         // Load the specified servlet class from the appropriate class loader
         try {
-            classClass = classLoader.loadClass(actualClass);
+            servletClass = classLoader.loadClass(actualClass);
         } catch (ClassNotFoundException e) {
-            classClass = null;
+            servletClass = null;
         }
     }
 
@@ -526,7 +536,7 @@
         }
         sb.append("Servlet[");
         sb.append(getServletName()).append(" ");
-        sb.append(servletClass);
+        sb.append(servletClassName);
         if (jspFile != null) {
             sb.append(" jsp=").append(jspFile);
         }
@@ -652,9 +662,7 @@
      * @param name Name of the initialization parameter to retrieve
      */
     public String getInitParameter(String name) {
-
-        return (String)initParams.get(name);
-
+        return initParams.get(name);
     }
 
 
@@ -663,11 +671,9 @@
      * servlet.  If none are defined, an empty Enumeration is returned.
      */
     public Enumeration getInitParameterNames() {
-
         synchronized (initParams) {
             return (new Enumerator(initParams.keySet()));
         }
-
     }
 
 
@@ -805,5 +811,63 @@
       this.loadOnStartup = loadOnStartup;
     }
 
+    @Override
+    public Set<String> addMapping(String... urlPatterns) {
+        if (ctx.startDone) {
+            // Use the context method instead of the servlet API to 
+            // add mappings after context init.
+            throw new IllegalStateException();
+        }
+        Set<String> failed = new HashSet<String>();
+        for (String url: urlPatterns) {
+            if (url == null) {
+                throw new IllegalArgumentException();
+            }
+            if (ctx.contextConfig.servletMapping.get(url) != null) {
+                failed.add(url);
+            } else {
+                ctx.contextConfig.servletMapping.put(url, getServletName());
+                ctx.addMapping(url, this);
+            }
+        }
+        return failed;
+    }
 
+    @Override
+    public boolean setInitParameter(String name, String value)
+            throws IllegalArgumentException, IllegalStateException {
+        return ServletContextImpl.setInitParameter(ctx, initParams, 
+                name, value);
+    }
+
+    @Override
+    public Set<String> setInitParameters(Map<String, String> initParameters)
+            throws IllegalArgumentException, IllegalStateException {
+        return ServletContextImpl.setInitParameters(ctx, initParams, 
+                initParameters);
+    }
+
+    public Dynamic getDynamic() {
+        return dynamic;
+    }
+    
+    class ServletDynamicRegistration implements Dynamic {
+
+        @Override
+        public void setAsyncSupported(boolean isAsyncSupported)
+                throws IllegalStateException {
+            asyncSupported = isAsyncSupported;
+        }
+
+        @Override
+        public void setDescription(String description)
+                throws IllegalStateException {
+            ServletConfigImpl.this.description = description;
+        }
+        
+    }
+
+    public void setServletClass(Class<? extends Servlet> servletClass2) {
+        servletClass = servletClass2;
+    }
 }

Modified: 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletContextImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletContextImpl.java?rev=793797&r1=793796&r2=793797&view=diff
==============================================================================
--- 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletContextImpl.java
 (original)
+++ 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletContextImpl.java
 Tue Jul 14 05:38:02 2009
@@ -37,9 +37,11 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javax.servlet.DispatcherType;
 import javax.servlet.Filter;
 import javax.servlet.FilterRegistration;
 import javax.servlet.RequestDispatcher;
@@ -58,9 +60,10 @@
 
 import org.apache.tomcat.addons.UserSessionManager;
 import org.apache.tomcat.integration.ObjectManager;
-import org.apache.tomcat.lite.ServletContextConfig.FilterData;
-import org.apache.tomcat.lite.ServletContextConfig.FilterMappingData;
-import org.apache.tomcat.lite.ServletContextConfig.ServletData;
+import org.apache.tomcat.lite.webxml.ServletContextConfig;
+import org.apache.tomcat.lite.webxml.ServletContextConfig.FilterData;
+import org.apache.tomcat.lite.webxml.ServletContextConfig.FilterMappingData;
+import org.apache.tomcat.lite.webxml.ServletContextConfig.ServletData;
 import org.apache.tomcat.servlets.util.Enumerator;
 import org.apache.tomcat.servlets.util.RequestUtil;
 import org.apache.tomcat.servlets.util.UrlUtils;
@@ -144,6 +147,11 @@
 
     private String hostname;
 
+
+    boolean initDone = false;
+
+    boolean startDone = false;
+    
     // ------------------------------------------------- ServletContext Methods
     public ServletContextImpl() {
     }
@@ -836,13 +844,6 @@
         }
     }
     
-    public void addFilter(String filterName, String filterClass, 
-                          Map params) {
-        FilterConfigImpl fc = new FilterConfigImpl(this);
-        fc.setData(filterName, filterClass, params);
-        filters.put(filterName, fc);
-    }
-    
     public void initFilters() throws ServletException {
         Iterator fI = getFilters().values().iterator();
         while (fI.hasNext()) {
@@ -856,6 +857,7 @@
             
         }
     }
+    
     public void initServlets() throws ServletException {
         Iterator fI = getServletConfigs().values().iterator();
         Map/*<Integer, List<ServletConfigImpl>>*/ onStartup = 
@@ -915,6 +917,8 @@
         getMapper().addWrapper(getMapper().contextMapElement, path, wrapper);
     }
     
+    
+    
     public void setWelcomeFiles(String[] name) {
       getMapper().contextMapElement.welcomeResources = name;
     }
@@ -1010,12 +1014,13 @@
       sc.setConfig(params);
       addServletConfig(sc);
     }
-    
+
+    @Override
     public javax.servlet.Registration.Dynamic addServlet(String servletName, 
Servlet servlet) {
       ServletConfigImpl sc = new ServletConfigImpl(this, servletName, null);
       sc.setServlet(servlet);
       addServletConfig(sc);
-      return null;
+      return sc.getDynamic();
     }
     
     public void addServletSec(String serlvetName, String runAs, Map roles) {
@@ -1027,7 +1032,7 @@
     public void addFilterMapping(String path, String filterName, 
                                  String[] dispatcher) {
       getFilterMapper().addMapping(filterName, 
-          path, null, dispatcher);
+          path, null, dispatcher, true);
       
     }
 
@@ -1036,11 +1041,9 @@
                                         String[] dispatcher) {
       getFilterMapper().addMapping(filterName, 
           null, servlet, 
-          dispatcher);      
+          dispatcher, true);      
     }
     
-    boolean initDone = false;
-    
     /**
      * Called from TomcatLite.init(), required before start.
      * 
@@ -1167,6 +1170,9 @@
 
 
     public void start() throws ServletException {
+        if (startDone) {
+            return;
+        }
         String base = getBasePath();
         
         ArrayList urls = getClasspath(new File(base + "/WEB-INF/lib"),
@@ -1205,6 +1211,7 @@
                 event = new ServletContextEvent(this);
             }
             try {
+                // May add servlets/filters
                 listener.contextInitialized(event);
             } catch (Throwable t) {
                 log.log(Level.WARNING, "Context.init() contextInitialized() 
error:", t);
@@ -1214,6 +1221,8 @@
         
         initFilters();
         initServlets();
+        
+        startDone = true;
     }
 
     public UserSessionManager getManager() {
@@ -1392,57 +1401,151 @@
    public void setSessionTrackingModes(EnumSet<SessionTrackingMode> 
sessionTrackingModes) {
    }
 
+   public void addFilter(String filterName, String filterClass, 
+                         Map params) {
+       FilterConfigImpl fc = new FilterConfigImpl(this);
+       fc.setData(filterName, filterClass, params);
+       filters.put(filterName, fc);
+   }
+   
    @Override
    public Dynamic addFilter(String filterName, String className) {
-       return null;
+       FilterConfigImpl fc = new FilterConfigImpl(this);
+       fc.setData(filterName, className, new HashMap());
+       filters.put(filterName, fc);
+       return fc.getDynamic();
    }
 
    @Override
    public Dynamic addFilter(String filterName, Filter filter) {
-       return null;
+       FilterConfigImpl fc = new FilterConfigImpl(this);
+       fc.setData(filterName, null, new HashMap());
+       fc.setFilter(filter);
+       filters.put(filterName, fc);
+       return fc.getDynamic();
    }
 
    @Override
    public Dynamic addFilter(String filterName, Class<? extends Filter> 
filterClass) {
-       return null;
+       FilterConfigImpl fc = new FilterConfigImpl(this);
+       fc.setData(filterName, null, new HashMap());
+       fc.setFilterClass(filterClass);
+       filters.put(filterName, fc);
+       return fc.getDynamic();
    }
 
    @Override
    public javax.servlet.Registration.Dynamic addServlet(String servletName,
                                                         String className) {
-       return null;
+       ServletConfigImpl sc = new ServletConfigImpl(this, servletName, 
className);
+       addServletConfig(sc);
+       return sc.getDynamic();
    }
 
    @Override
-   public javax.servlet.Registration.Dynamic addServlet(
-                                                        String servletName,
+   public javax.servlet.Registration.Dynamic addServlet(String servletName,
                                                         Class<? extends 
Servlet> servletClass) {
-       return null;
+       ServletConfigImpl sc = new ServletConfigImpl(this, servletName, 
servletClass.getName());
+       sc.setServletClass(servletClass);
+       addServletConfig(sc);
+       return sc.getDynamic();
    }
 
+   // That's tricky - this filter will have no name. We need to generate one 
+   // because our code relies on names.
+   AtomicInteger autoName = new AtomicInteger();
+   
    @Override
    public <T extends Filter> T createFilter(Class<T> c) throws 
ServletException {
-       return null;
+       FilterConfigImpl fc = new FilterConfigImpl(this);
+       String filterName = "_tomcat_auto_filter_" + autoName.incrementAndGet();
+       fc.setData(filterName, null, new HashMap());
+       fc.setFilterClass(c);
+       filters.put(filterName, fc);
+
+       try {
+           return (T) fc.createFilter();
+       } catch (ClassCastException e) {
+           throw new ServletException(e);
+       } catch (ClassNotFoundException e) {
+           throw new ServletException(e);
+       } catch (IllegalAccessException e) {
+           throw new ServletException(e);
+       } catch (InstantiationException e) {
+           throw new ServletException(e);
+       }
    }
 
    @Override
    public <T extends Servlet> T createServlet(Class<T> c) throws 
ServletException {
-       return null;
+       String filterName = "_tomcat_auto_servlet_" + 
autoName.incrementAndGet();
+       ServletConfigImpl fc = new ServletConfigImpl(this, filterName, null);
+       fc.setServletClass(c);
+       servlets.put(filterName, fc);
+
+       try {
+           return (T) fc.newInstance();
+       } catch (ClassCastException e) {
+           throw new ServletException(e);
+       }
    }
 
    @Override
    public FilterRegistration findFilterRegistration(String filterName) {
-       return null;
+       return filters.get(filterName);
    }
 
    @Override
    public ServletRegistration findServletRegistration(String servletName) {
-       return null;
+       return servlets.get(servletName);
    }
-
+   
    @Override
    public boolean setInitParameter(String name, String value) {
-       return false;
+       HashMap<String, String> params = contextConfig.contextParam;
+       return setInitParameter(this, params, name, value);
+   }
+   
+   static Set<String> setInitParameters(ServletContextImpl ctx, 
+           Map<String, String> params,
+           Map<String, String> initParameters)
+           throws IllegalArgumentException, IllegalStateException {
+       if (ctx.startDone) {
+           throw new IllegalStateException();
+       }
+       Set<String> result = new HashSet<String>();
+       for (String name: initParameters.keySet()) {
+           String value = initParameters.get(name);
+           if (name == null || value == null) {
+               throw new IllegalArgumentException();
+           }
+           if (!setInitParameter(ctx, params, name, value)) {
+               result.add(name);
+           }
+       }
+       return result;
+   }   
+
+   /**
+    * true if the context initialization parameter with the given name and 
value was set successfully on this ServletContext, and false if it was not set 
because this ServletContext already contains a context initialization parameter 
with a matching name
+    * Throws:
+    * java.lang.IllegalStateException - if this ServletContext has already 
been initialized
+    */
+   static boolean setInitParameter(ServletContextImpl ctx, Map<String, String> 
params, 
+                                   String name, String value) {
+       if (name == null || value == null) {
+           throw new IllegalArgumentException();
+       }
+       if (ctx.startDone) {
+           throw new IllegalStateException();
+       }
+       String oldValue = params.get(name);
+       if (oldValue != null) {
+           return false;
+       } else {
+           params.put(name, value);
+           return true;
+       }
    }
 }
 

Modified: 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletResponseImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletResponseImpl.java?rev=793797&r1=793796&r2=793797&view=diff
==============================================================================
--- 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletResponseImpl.java
 (original)
+++ 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletResponseImpl.java
 Tue Jul 14 05:38:02 2009
@@ -1,5 +1,5 @@
 /*
- * ontentLicensed to the Apache Software Foundation (ASF) under one or more
+ * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The ASF licenses this file to You under the Apache License, Version 2.0

Modified: 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/WebappFilterMapper.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/WebappFilterMapper.java?rev=793797&r1=793796&r2=793797&view=diff
==============================================================================
--- 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/WebappFilterMapper.java
 (original)
+++ 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/WebappFilterMapper.java
 Tue Jul 14 05:38:02 2009
@@ -94,12 +94,16 @@
     public void addMapping(String filterName, 
                            String url, 
                            String servletName, 
-                           String type[]) {
+                           String type[], boolean isMatchAfter) {
         FilterMap map = new FilterMap();
         map.setURLPattern(url);
         map.setFilterName(filterName);
         map.setServletName(servletName);
-        filterMaps.add(map);
+        if (isMatchAfter) {
+            filterMaps.add(map);
+        } else {
+            filterMaps.add(0, map);
+        }
     }
 
     /**

Copied: 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/webxml/ServletContextConfig.java
 (from r793382, 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletContextConfig.java)
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/webxml/ServletContextConfig.java?p2=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/webxml/ServletContextConfig.java&p1=tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletContextConfig.java&r1=793382&r2=793797&rev=793797&view=diff
==============================================================================
--- 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/ServletContextConfig.java
 (original)
+++ 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/webxml/ServletContextConfig.java
 Tue Jul 14 05:38:02 2009
@@ -1,14 +1,15 @@
 /**
  * 
  */
-package org.apache.tomcat.lite;
+package org.apache.tomcat.lite.webxml;
 
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.HashMap;
 
 /**
- * All the data in web.xml should be represented here.
+ * All the data in web.xml, annotations, etc should be represented 
+ * here. This class is serializable.
  * 
  * Public fields to make it easy to access it. 
  * Naming should match the web.xml element name.
@@ -84,11 +85,16 @@
         public String filterName;
     }
     
+    // Normalized
     public static class FilterMappingData implements Serializable {
         private static final long serialVersionUID = -4533568066713041994L;
         public String filterName;
+        
+        // Only one of the 2
         public String urlPattern;
         public String servletName;
+        
+        // REQUEST, FORWARD, INCLUDE, ERROR, ASYNC
         public ArrayList<String> dispatcher = new ArrayList<String>();
     }
     
@@ -119,12 +125,19 @@
         
     }
     
+    public static class WebResourceCollectionData implements Serializable {
+        public String webResourceName;
+        public ArrayList urlPattern = new ArrayList();
+        public ArrayList httpMethod = new ArrayList();
+    }    
+    
     public static class SecurityConstraintData  implements Serializable {
         private static final long serialVersionUID = -4780214921810871769L;
 
         public ArrayList<String> roleName = new ArrayList<String>(); //   
auth-constraint/role
 
-        public ArrayList<String> webResourceCollection = new 
ArrayList<String>();
+        public ArrayList<WebResourceCollectionData> webResourceCollection = 
+            new ArrayList<WebResourceCollectionData>();
         public String transportGuarantee;
         
     }    

Modified: 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/webxml/WebXml.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/webxml/WebXml.java?rev=793797&r1=793796&r2=793797&view=diff
==============================================================================
--- 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/webxml/WebXml.java 
(original)
+++ 
tomcat/trunk/modules/tomcat-lite/java/org/apache/tomcat/lite/webxml/WebXml.java 
Tue Jul 14 05:38:02 2009
@@ -10,12 +10,12 @@
 
 import javax.servlet.ServletException;
 
-import org.apache.tomcat.lite.ServletContextConfig;
-import org.apache.tomcat.lite.ServletContextConfig.EnvEntryData;
-import org.apache.tomcat.lite.ServletContextConfig.FilterData;
-import org.apache.tomcat.lite.ServletContextConfig.FilterMappingData;
-import org.apache.tomcat.lite.ServletContextConfig.SecurityConstraintData;
-import org.apache.tomcat.lite.ServletContextConfig.ServletData;
+import org.apache.tomcat.lite.webxml.ServletContextConfig.EnvEntryData;
+import org.apache.tomcat.lite.webxml.ServletContextConfig.FilterData;
+import org.apache.tomcat.lite.webxml.ServletContextConfig.FilterMappingData;
+import 
org.apache.tomcat.lite.webxml.ServletContextConfig.SecurityConstraintData;
+import org.apache.tomcat.lite.webxml.ServletContextConfig.ServletData;
+import 
org.apache.tomcat.lite.webxml.ServletContextConfig.WebResourceCollectionData;
 import org.apache.tomcat.util.DomUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
@@ -252,7 +252,9 @@
                 scn = DomUtil.getNext(scn);
             }
             cn = DomUtil.getNext(cn);
+            sd.webResourceCollection.add(wrd);
         }
+        
         d.securityConstraint.add(sd);
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to