Author: markt
Date: Wed Oct 28 12:27:42 2009
New Revision: 830514

URL: http://svn.apache.org/viewvc?rev=830514&view=rev
Log:
Add FilterMaps to the web.xml file merge process

Modified:
    tomcat/trunk/java/org/apache/catalina/deploy/FilterMap.java
    tomcat/trunk/java/org/apache/catalina/startup/WebXml.java

Modified: tomcat/trunk/java/org/apache/catalina/deploy/FilterMap.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/deploy/FilterMap.java?rev=830514&r1=830513&r2=830514&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/deploy/FilterMap.java (original)
+++ tomcat/trunk/java/org/apache/catalina/deploy/FilterMap.java Wed Oct 28 
12:27:42 2009
@@ -37,7 +37,8 @@
 
 public class FilterMap implements Serializable {
 
-
+    private static final long serialVersionUID = 1L;
+    
     // ------------------------------------------------------------- Properties
 
 
@@ -99,6 +100,15 @@
         }
     }
 
+    public void addServletNames(String[] servletNames) {
+        if (servletNames != null) {
+            for (int i = 0; i < servletNames.length; i++) {
+                addServletName(servletNames[i]);
+            }
+        }
+    }
+
+
     
     /**
      * The flag that indicates this mapping will match all url-patterns
@@ -140,6 +150,14 @@
         }
     }
     
+    public void addUrlPatterns(String[] urlPatterns) {
+        if (urlPatterns != null) {
+            for (int i = 0; i < urlPatterns.length; i++) {
+                addURLPattern(urlPatterns[i]);
+            }
+        }
+    }
+
     /**
      *
      * This method will be used to set the current state of the FilterMap
@@ -217,11 +235,15 @@
     
     public int getDispatcherMapping() {
         // per the SRV.6.2.5 absence of any dispatcher elements is
-        // equivelant to a REQUEST value
+        // equivalent to a REQUEST value
         if (dispatcherMapping == NOT_SET) return REQUEST;
         else return dispatcherMapping; 
     }
 
+    public void addDispatcherMapping(int dispatcherMapping) {
+        // Merge the supplied mapping with the current mapping
+        this.dispatcherMapping =  getDispatcherMapping() | dispatcherMapping;
+    }
 
     // --------------------------------------------------------- Public Methods
 

Modified: tomcat/trunk/java/org/apache/catalina/startup/WebXml.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/WebXml.java?rev=830514&r1=830513&r2=830514&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/WebXml.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/WebXml.java Wed Oct 28 
12:27:42 2009
@@ -21,6 +21,7 @@
 import java.net.URL;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
@@ -170,7 +171,8 @@
     // TODO: Should support multiple display-name elements with language
     // TODO: Should support multiple icon elements
     // TODO: Description for init-param is ignored
-    private Map<String,FilterDef> filters = new HashMap<String,FilterDef>();
+    private Map<String,FilterDef> filters =
+        new LinkedHashMap<String,FilterDef>();
     public void addFilter(FilterDef filter) {
         if (filters.containsKey(filter.getFilterName())) {
             // Filter names must be unique within a web(-fragment).xml
@@ -182,11 +184,11 @@
     public Map<String,FilterDef> getFilters() { return filters; }
     
     // filter-mapping
-    private Set<FilterMap> filterMaps = new HashSet<FilterMap>();
+    private Map<String,FilterMap> filterMaps = new HashMap<String,FilterMap>();
     public void addFilterMapping(FilterMap filterMap) {
-        filterMaps.add(filterMap);
+        filterMaps.put(filterMap.getFilterName(),filterMap);
     }
-    public Set<FilterMap> getFilterMappings() { return filterMaps; }
+    public Map<String,FilterMap> getFilterMappings() { return filterMaps; }
     
     // listener
     // TODO: description (multiple with language) is ignored
@@ -468,7 +470,7 @@
         for (FilterDef filter : filters.values()) {
             context.addFilterDef(filter);
         }
-        for (FilterMap filterMap : filterMaps) {
+        for (FilterMap filterMap : filterMaps.values()) {
             context.addFilterMap(filterMap);
         }
         // jsp-property-group needs to be after servlet configuration
@@ -771,6 +773,25 @@
         }
         errorPages.putAll(temp.getErrorPages());
 
+        for (WebXml fragment : fragments) {
+            for (String filterName : fragment.getFilterMappings().keySet()) {
+                FilterMap filterMap =
+                    fragment.getFilterMappings().get(filterName);
+                // Always additive
+                if (filterMaps.containsKey(filterName)) {
+                    FilterMap appFilterMap = filterMaps.get(filterName);
+                    
+                    appFilterMap.addDispatcherMapping(
+                            filterMap.getDispatcherMapping());
+                    appFilterMap.addServletNames(filterMap.getServletNames());
+                    appFilterMap.addUrlPatterns(filterMap.getURLPatterns());
+                } else {
+                    addFilterMapping(filterMap);
+                }
+            }
+        }
+
+        
         // TODO SERVLET3 - Merge remaining elements
 
         for (WebXml fragment : fragments) {



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

Reply via email to