public class FilterMap implements Serializable {
-
+ private static final long serialVersionUID = 1L;
+
// ------------------------------------------------------------- Properties
}
}
+ 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
}
}
+ 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
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
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;
// 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
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
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
}
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) {