[jboss-cvs] JBossAS SVN: r93499 - projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Sep 14 15:03:19 EDT 2009


Author: remy.maucherat at jboss.com
Date: 2009-09-14 15:03:18 -0400 (Mon, 14 Sep 2009)
New Revision: 93499

Modified:
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/FilterMetaData.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/JspConfigMetaData.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/LoginConfigMetaData.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/MultipartConfigMetaData.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMappingMetaData.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMetaData.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletsMetaData.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/WebFragmentMetaData.java
Log:
- More augment implementation.
- Skip JSP property group for now.

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/FilterMetaData.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/FilterMetaData.java	2009-09-14 19:00:15 UTC (rev 93498)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/FilterMetaData.java	2009-09-14 19:03:18 UTC (rev 93499)
@@ -121,9 +121,9 @@
                   if (!check.getParamValue().equals(initParam.getParamValue()))
                   {
                      // If the parameter name does not exist in the main web, it's an error
+                     boolean found2 = false;
                      if (webMetaData.getInitParam() != null)
                      {
-                        boolean found2 = false;
                         for (ParamValueMetaData check1 : webMetaData.getInitParam())
                         {
                            if (check1.getParamName().equals(check.getParamName()))
@@ -132,9 +132,9 @@
                               break;
                            }
                         }
-                        if (!found2)
-                           throw new IllegalStateException("Unresolved conflict on init parameter: " + check.getParamName());
                      }
+                     if (!found2)
+                        throw new IllegalStateException("Unresolved conflict on init parameter: " + check.getParamName());
                   }
                }
             }
@@ -161,7 +161,7 @@
                && (isAsyncSupported() != webFragmentMetaData.isAsyncSupported())
                && (webMetaData == null || !webMetaData.asyncSupportedSet))
          {
-            throw new IllegalStateException("Unresolved conflict on async supportedSet");
+            throw new IllegalStateException("Unresolved conflict on async supported");
          }
       }
    }

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/JspConfigMetaData.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/JspConfigMetaData.java	2009-09-14 19:00:15 UTC (rev 93498)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/JspConfigMetaData.java	2009-09-14 19:03:18 UTC (rev 93499)
@@ -21,6 +21,7 @@
  */
 package org.jboss.metadata.web.spec;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.xml.bind.annotation.XmlElement;
@@ -60,4 +61,79 @@
       this.propertyGroups = propertyGroups;
    }
 
+   public void augment(JspConfigMetaData webFragmentMetaData, JspConfigMetaData webMetaData)
+   {
+      // Taglib
+      if (getTaglibs() == null)
+      {
+         setTaglibs(webFragmentMetaData.getTaglibs());
+      }
+      else if (webFragmentMetaData.getTaglibs() != null)
+      {
+         List<TaglibMetaData> mergedTaglibs = new ArrayList<TaglibMetaData>();
+         for (TaglibMetaData taglib : webFragmentMetaData.getTaglibs())
+         {
+            boolean found = false;
+            for (TaglibMetaData check : getTaglibs())
+            {
+               if (check.getTaglibUri().equals(taglib.getTaglibUri()))
+               {
+                  found = true;
+                  // Check for a conflict
+                  if (!check.getTaglibLocation().equals(taglib.getTaglibLocation()))
+                  {
+                     // If the parameter name does not exist in the main web, it's an error
+                     boolean found2 = false;
+                     if (webMetaData.getTaglibs() != null)
+                     {
+                        for (TaglibMetaData check1 : webMetaData.getTaglibs())
+                        {
+                           if (check1.getTaglibUri().equals(check.getTaglibUri()))
+                           {
+                              found2 = true;
+                              break;
+                           }
+                        }
+                     }
+                     if (!found2)
+                        throw new IllegalStateException("Unresolved conflict on taglib uri: " + check.getTaglibUri());
+                  }
+               }
+            }
+            if (!found)
+               mergedTaglibs.add(taglib);
+         }
+         for (TaglibMetaData taglib : getTaglibs())
+         {
+            mergedTaglibs.add(taglib);
+         }
+         setTaglibs(mergedTaglibs);
+      }
+      
+      // JSP property group
+      if (getPropertyGroups() == null)
+      {
+         setPropertyGroups(webFragmentMetaData.getPropertyGroups());
+      }
+      else if (webFragmentMetaData.getPropertyGroups() != null)
+      {
+         // TODO: conflict detection (maybe if there's a url pattern in common between two
+         // property groups ?)
+         // TODO: possible method: add to a temp map keyed by pattern
+         List<JspPropertyGroupMetaData> mergedPropertyGroups = new ArrayList<JspPropertyGroupMetaData>();
+         for (JspPropertyGroupMetaData propertyGroup : webFragmentMetaData.getPropertyGroups())
+         {
+            // TODO: conflict check here, and augment in JspPropertyGroupMetaData
+            // Very complex: single elements conflict (lots of them ...), include prelude and coda
+            // should be additive
+            mergedPropertyGroups.add(propertyGroup);
+         }
+         for (JspPropertyGroupMetaData propertyGroup : getPropertyGroups())
+         {
+            mergedPropertyGroups.add(propertyGroup);
+         }
+         setPropertyGroups(mergedPropertyGroups);
+      }
+   }
+   
 }

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/LoginConfigMetaData.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/LoginConfigMetaData.java	2009-09-14 19:00:15 UTC (rev 93498)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/LoginConfigMetaData.java	2009-09-14 19:03:18 UTC (rev 93499)
@@ -67,4 +67,49 @@
    {
       this.formLoginConfig = formLoginConfig;
    }
+   
+   public void augment(LoginConfigMetaData webFragmentMetaData, LoginConfigMetaData webMetaData)
+   {
+      if (getAuthMethod() == null)
+      {
+         setAuthMethod(webFragmentMetaData.getAuthMethod());
+      }
+      else if (webFragmentMetaData.getAuthMethod() != null)
+      {
+         if (!getAuthMethod().equals(webFragmentMetaData.getAuthMethod())
+               && (webMetaData == null || webMetaData.getAuthMethod() == null))
+         {
+            throw new IllegalStateException("Unresolved conflict on auth method: " + getAuthMethod());
+         }
+      }
+      if (getRealmName() == null)
+      {
+         setRealmName(webFragmentMetaData.getRealmName());
+      }
+      else if (webFragmentMetaData.getRealmName() != null)
+      {
+         if (!getRealmName().equals(webFragmentMetaData.getRealmName())
+               && (webMetaData == null || webMetaData.getRealmName() == null))
+         {
+            throw new IllegalStateException("Unresolved conflict on realm name: " + getRealmName());
+         }
+      }
+      if (getFormLoginConfig() == null)
+      {
+         setFormLoginConfig(webFragmentMetaData.getFormLoginConfig());
+      }
+      else if (webFragmentMetaData.getFormLoginConfig() != null)
+      {
+         if ((getFormLoginConfig().getErrorPage() != null 
+                 && !getFormLoginConfig().getErrorPage().equals(webFragmentMetaData.getFormLoginConfig().getErrorPage()))
+              || (getFormLoginConfig().getLoginPage() != null
+                 && !getFormLoginConfig().getLoginPage().equals(webFragmentMetaData.getFormLoginConfig().getLoginPage())))
+         {
+            if (webMetaData == null || webMetaData.getFormLoginConfig() == null)
+            {
+               throw new IllegalStateException("Unresolved conflict on form login config");
+            }
+         }
+      }
+   }
 }

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/MultipartConfigMetaData.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/MultipartConfigMetaData.java	2009-09-14 19:00:15 UTC (rev 93498)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/MultipartConfigMetaData.java	2009-09-14 19:03:18 UTC (rev 93499)
@@ -35,10 +35,13 @@
 {
    private static final long serialVersionUID = 1;
 
-   private String location = "";
+   private String location = null;
    private long maxFileSize = -1L;
+   private boolean maxFileSizeSet = false;
    private long maxRequestSize = -1L;
+   private boolean maxRequestSizeSet = false;
    private int fileSizeThreshold = 0;
+   private boolean fileSizeThresholdSet = false;
 
    public String getLocation()
    {
@@ -56,6 +59,7 @@
    public void setMaxFileSize(long maxFileSize)
    {
       this.maxFileSize = maxFileSize;
+      maxFileSizeSet = true;
    }
 
    public long getMaxRequestSize()
@@ -65,6 +69,7 @@
    public void setMaxRequestSize(long maxRequestSize)
    {
       this.maxRequestSize = maxRequestSize;
+      maxRequestSizeSet = true;
    }
 
    public int getFileSizeThreshold()
@@ -74,6 +79,75 @@
    public void setFileSizeThreshold(int fileSizeThreshold)
    {
       this.fileSizeThreshold = fileSizeThreshold;
+      fileSizeThresholdSet = true;
    }
 
+   public void augment(MultipartConfigMetaData webFragmentMetaData, MultipartConfigMetaData webMetaData)
+   {
+      // Location
+      if (getLocation() == null)
+      {
+         setLocation(webFragmentMetaData.getLocation());
+      }
+      else if (webFragmentMetaData.getLocation() != null)
+      {
+         if (!getLocation().equals(webFragmentMetaData.getLocation()) 
+               && (webMetaData == null || webMetaData.getLocation() == null))
+         {
+            throw new IllegalStateException("Unresolved conflict on location: " + getLocation());
+         }
+      }
+      // Max file size
+      if (!maxFileSizeSet)
+      {
+         if (webFragmentMetaData.maxFileSizeSet)
+         {
+            setMaxFileSize(webFragmentMetaData.getMaxFileSize());
+         }
+      }
+      else
+      {
+         if (webFragmentMetaData.maxFileSizeSet 
+               && (getMaxFileSize() != webFragmentMetaData.getMaxFileSize())
+               && (webMetaData == null || !webMetaData.maxFileSizeSet))
+         {
+            throw new IllegalStateException("Unresolved conflict on max file size");
+         }
+      }
+      // Max request size
+      if (!maxRequestSizeSet)
+      {
+         if (webFragmentMetaData.maxRequestSizeSet)
+         {
+            setMaxRequestSize(webFragmentMetaData.getMaxRequestSize());
+         }
+      }
+      else
+      {
+         if (webFragmentMetaData.maxRequestSizeSet 
+               && (getMaxRequestSize() != webFragmentMetaData.getMaxRequestSize())
+               && (webMetaData == null || !webMetaData.maxRequestSizeSet))
+         {
+            throw new IllegalStateException("Unresolved conflict on max request size");
+         }
+      }
+      // File size threshold
+      if (!fileSizeThresholdSet)
+      {
+         if (webFragmentMetaData.fileSizeThresholdSet)
+         {
+            setFileSizeThreshold(webFragmentMetaData.getFileSizeThreshold());
+         }
+      }
+      else
+      {
+         if (webFragmentMetaData.fileSizeThresholdSet 
+               && (getFileSizeThreshold() != webFragmentMetaData.getFileSizeThreshold())
+               && (webMetaData == null || !webMetaData.fileSizeThresholdSet))
+         {
+            throw new IllegalStateException("Unresolved conflict on file size threshold");
+         }
+      }
+   }
+   
 }

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMappingMetaData.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMappingMetaData.java	2009-09-14 19:00:15 UTC (rev 93498)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMappingMetaData.java	2009-09-14 19:03:18 UTC (rev 93499)
@@ -21,6 +21,7 @@
  */
 package org.jboss.metadata.web.spec;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.xml.bind.annotation.XmlElement;
@@ -60,6 +61,38 @@
       this.urlPatterns = urlPatterns;
    }
 
+   public void augment(ServletMappingMetaData webFragmentMetaData, ServletMappingMetaData webMetaData)
+   {
+      // Note: as this is purely additive, webMetaData is useless
+      // Url pattern
+      if (getUrlPatterns() == null)
+      {
+         setUrlPatterns(webFragmentMetaData.getUrlPatterns());
+      }
+      else if (webFragmentMetaData.getUrlPatterns() != null)
+      {
+         List<String> mergedUrlPatterns = new ArrayList<String>();
+         for (String urlPattern : webFragmentMetaData.getUrlPatterns())
+         {
+            boolean found = false;
+            for (String check : getUrlPatterns())
+            {
+               if (check.equals(urlPattern))
+               {
+                  found = true;
+               }
+            }
+            if (!found)
+               mergedUrlPatterns.add(urlPattern);
+         }
+         for (String urlPattern : getUrlPatterns())
+         {
+            mergedUrlPatterns.add(urlPattern);
+         }
+         setUrlPatterns(mergedUrlPatterns);
+      }
+   }
+
    public String toString()
    {
       StringBuilder tmp = new StringBuilder("ServletMappingMetaData(id=");

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMetaData.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMetaData.java	2009-09-14 19:00:15 UTC (rev 93498)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletMetaData.java	2009-09-14 19:03:18 UTC (rev 93499)
@@ -21,6 +21,7 @@
  */
 package org.jboss.metadata.web.spec;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.xml.bind.annotation.XmlElement;
@@ -28,6 +29,7 @@
 
 import org.jboss.metadata.javaee.spec.ParamValueMetaData;
 import org.jboss.metadata.javaee.spec.RunAsMetaData;
+import org.jboss.metadata.javaee.spec.SecurityRoleRefMetaData;
 import org.jboss.metadata.javaee.spec.SecurityRoleRefsMetaData;
 import org.jboss.metadata.javaee.support.MergeableMetaData;
 import org.jboss.metadata.javaee.support.NamedMetaDataWithDescriptionGroup;
@@ -54,11 +56,14 @@
    /** The servlet init-params */
    private List<ParamValueMetaData> initParam;
    private int loadOnStartup = loadOnStartupDefault;
+   private boolean loadOnStartupSet = false;
    private RunAsMetaData runAs;
    /** The security role ref */
    private SecurityRoleRefsMetaData securityRoleRefs;
    private boolean asyncSupported = asyncSupportedDefault;
+   private boolean asyncSupportedSet = false;
    private boolean enabled = enabledDefault;
+   private boolean enabledSet = false;
    private MultipartConfigMetaData multipartConfig;
 
    public String getServletName()
@@ -102,6 +107,7 @@
    public void setLoadOnStartup(int loadOnStartup)
    {
       this.loadOnStartup = loadOnStartup;
+      loadOnStartupSet = true;
    }
    public RunAsMetaData getRunAs()
    {
@@ -127,6 +133,7 @@
    public void setAsyncSupported(boolean asyncSupported)
    {
       this.asyncSupported = asyncSupported;
+      asyncSupportedSet = true;
    }
    public boolean isEnabled()
    {
@@ -135,6 +142,7 @@
    public void setEnabled(boolean enabled)
    {
       this.enabled = enabled;
+      enabledSet = true;
    }
 
    public MultipartConfigMetaData getMultipartConfig()
@@ -193,6 +201,187 @@
          setMultipartConfig(original.multipartConfig);
    }
 
+   public void augment(ServletMetaData webFragmentMetaData, ServletMetaData webMetaData)
+   {
+      // Servlet class
+      if (getServletClass() == null)
+      {
+         setServletClass(webFragmentMetaData.getServletClass());
+      }
+      else if (webFragmentMetaData.getServletClass() != null)
+      {
+         if (!getServletClass().equals(webFragmentMetaData.getServletClass()) 
+               && (webMetaData == null || webMetaData.getServletClass() == null))
+         {
+            throw new IllegalStateException("Unresolved conflict on servlet class: " + getServletClass());
+         }
+      }
+      // Jsp file
+      if (getJspFile() == null)
+      {
+         setJspFile(webFragmentMetaData.getJspFile());
+      }
+      else if (webFragmentMetaData.getJspFile() != null)
+      {
+         if (!getJspFile().equals(webFragmentMetaData.getJspFile()) 
+               && (webMetaData == null || webMetaData.getJspFile() == null))
+         {
+            throw new IllegalStateException("Unresolved conflict on jsp file: " + getJspFile());
+         }
+      }
+      // Init params
+      if (getInitParam() == null)
+      {
+         setInitParam(webFragmentMetaData.getInitParam());
+      }
+      else if (webFragmentMetaData.getInitParam() != null)
+      {
+         List<ParamValueMetaData> mergedInitParams = new ArrayList<ParamValueMetaData>();
+         for (ParamValueMetaData initParam : webFragmentMetaData.getInitParam())
+         {
+            boolean found = false;
+            for (ParamValueMetaData check : getInitParam())
+            {
+               if (check.getParamName().equals(initParam.getParamName()))
+               {
+                  found = true;
+                  // Check for a conflict
+                  if (!check.getParamValue().equals(initParam.getParamValue()))
+                  {
+                     // If the parameter name does not exist in the main web, it's an error
+                     boolean found2 = false;
+                     if (webMetaData.getInitParam() != null)
+                     {
+                        for (ParamValueMetaData check1 : webMetaData.getInitParam())
+                        {
+                           if (check1.getParamName().equals(check.getParamName()))
+                           {
+                              found2 = true;
+                              break;
+                           }
+                        }
+                     }
+                     if (!found2)
+                        throw new IllegalStateException("Unresolved conflict on init parameter: " + check.getParamName());
+                  }
+               }
+            }
+            if (!found)
+               mergedInitParams.add(initParam);
+         }
+         for (ParamValueMetaData initParam : getInitParam())
+         {
+            mergedInitParams.add(initParam);
+         }
+         setInitParam(mergedInitParams);
+      }
+      // Load on startup
+      if (!loadOnStartupSet)
+      {
+         if (webFragmentMetaData.loadOnStartupSet)
+         {
+            setLoadOnStartup(webFragmentMetaData.getLoadOnStartup());
+         }
+      }
+      else
+      {
+         if (webFragmentMetaData.loadOnStartupSet 
+               && (getLoadOnStartup() != webFragmentMetaData.getLoadOnStartup())
+               && (webMetaData == null || !webMetaData.loadOnStartupSet))
+         {
+            throw new IllegalStateException("Unresolved conflict on load on startup");
+         }
+      }
+      // Run as
+      if (getRunAs() == null)
+      {
+         setRunAs(webFragmentMetaData.getRunAs());
+      }
+      else if (webFragmentMetaData.getRunAs() != null)
+      {
+         if (getRunAs().getRoleName() != null 
+               && !getRunAs().getRoleName().equals(webFragmentMetaData.getRunAs().getRoleName()))
+         {
+            if (webMetaData == null || webMetaData.getRunAs() == null)
+            {
+               throw new IllegalStateException("Unresolved conflict on run as role name");
+            }
+         }
+
+      }
+      // Security role ref
+      if (getSecurityRoleRefs() == null)
+      {
+         setSecurityRoleRefs(webFragmentMetaData.getSecurityRoleRefs());
+      }
+      else if (webFragmentMetaData.getSecurityRoleRefs() != null)
+      {
+         for (SecurityRoleRefMetaData securityRoleRef : webFragmentMetaData.getSecurityRoleRefs())
+         {
+            if (getSecurityRoleRefs().containsKey(securityRoleRef.getKey()))
+            {
+               SecurityRoleRefMetaData check = getSecurityRoleRefs().get(securityRoleRef.getKey());
+               if (check.getRoleLink() != null
+                     && !check.getRoleLink().equals(securityRoleRef.getRoleLink()))
+               {
+                  if (webMetaData == null || webMetaData.getSecurityRoleRefs() == null
+                        || !webMetaData.getSecurityRoleRefs().containsKey(securityRoleRef.getKey()))
+                  {
+                     throw new IllegalStateException("Unresolved conflict on role ref: " + securityRoleRef.getKey());
+                  }
+               }
+            }
+            else
+            {
+               getSecurityRoleRefs().add(securityRoleRef);
+            }
+         }
+      }
+      // Async supported
+      if (!asyncSupportedSet)
+      {
+         if (webFragmentMetaData.asyncSupportedSet)
+         {
+            setAsyncSupported(webFragmentMetaData.isAsyncSupported());
+         }
+      }
+      else
+      {
+         if (webFragmentMetaData.asyncSupportedSet 
+               && (isAsyncSupported() != webFragmentMetaData.isAsyncSupported())
+               && (webMetaData == null || !webMetaData.asyncSupportedSet))
+         {
+            throw new IllegalStateException("Unresolved conflict on async supported");
+         }
+      }
+      // Enabled
+      if (!enabledSet)
+      {
+         if (webFragmentMetaData.enabledSet)
+         {
+            setEnabled(webFragmentMetaData.isEnabled());
+         }
+      }
+      else
+      {
+         if (webFragmentMetaData.enabledSet 
+               && (isEnabled() != webFragmentMetaData.isEnabled())
+               && (webMetaData == null || !webMetaData.enabledSet))
+         {
+            throw new IllegalStateException("Unresolved conflict on enabled");
+         }
+      }
+      // Multipart config
+      if (getMultipartConfig() == null)
+      {
+         setMultipartConfig(webFragmentMetaData.getMultipartConfig());
+      }
+      else if (webFragmentMetaData.getMultipartConfig() != null)
+      {
+         getMultipartConfig().augment(webFragmentMetaData.getMultipartConfig(), webMetaData.getMultipartConfig());
+      }
+   }
+   
    public String toString()
    {
       StringBuilder tmp = new StringBuilder("ServletMetaData(id=");

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletsMetaData.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletsMetaData.java	2009-09-14 19:00:15 UTC (rev 93498)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/ServletsMetaData.java	2009-09-14 19:03:18 UTC (rev 93499)
@@ -34,4 +34,21 @@
    {
       super("web app servlets");
    }
+
+   public void augment(ServletsMetaData webFragmentMetaData, ServletsMetaData webMetaData)
+   {
+      for (ServletMetaData servletMetaData : webFragmentMetaData)
+      {
+         if (containsKey(servletMetaData.getKey()))
+         {
+            get(servletMetaData.getKey()).augment(servletMetaData, 
+                  (webMetaData != null) ? webMetaData.get(servletMetaData.getKey()) : null);
+         }
+         else
+         {
+            add(servletMetaData);
+         }
+      }
+   }
+   
 }

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/WebFragmentMetaData.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/WebFragmentMetaData.java	2009-09-14 19:00:15 UTC (rev 93498)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/WebFragmentMetaData.java	2009-09-14 19:03:18 UTC (rev 93499)
@@ -86,9 +86,9 @@
                   if (!check.getParamValue().equals(contextParam.getParamValue()))
                   {
                      // If the parameter name does not exist in the main web, it's an error
+                     boolean found2 = false;
                      if (webMetaData.getContextParams() != null)
                      {
-                        boolean found2 = false;
                         for (ParamValueMetaData check1 : webMetaData.getContextParams())
                         {
                            if (check1.getParamName().equals(check.getParamName()))
@@ -97,9 +97,9 @@
                               break;
                            }
                         }
-                        if (!found2)
-                           throw new IllegalStateException("Unresolved conflict on init parameter: " + check.getParamName());
                      }
+                     if (!found2)
+                        throw new IllegalStateException("Unresolved conflict on init parameter: " + check.getParamName());
                   }
                }
             }
@@ -163,8 +163,217 @@
       }
       
       // Error page
-      // TODO
+      if (getErrorPages() == null)
+      {
+         setErrorPages(webFragmentMetaData.getErrorPages());
+      }
+      else if (webFragmentMetaData.getErrorPages() != null)
+      {
+         List<ErrorPageMetaData> mergedErrorPages = new ArrayList<ErrorPageMetaData>();
+         for (ErrorPageMetaData errorPage : webFragmentMetaData.getErrorPages())
+         {
+            boolean found = false;
+            for (ErrorPageMetaData check : getErrorPages())
+            {
+               if (check.getErrorCode() != null 
+                     && check.getErrorCode().equals(errorPage.getErrorCode()))
+               {
+                  found = true;
+                  if (check.getLocation() != null 
+                        && !check.getLocation().equals(errorPage.getLocation()))
+                  {
+                     boolean found2 = false;
+                     if (webMetaData.getErrorPages() != null)
+                     {
+                        for (ErrorPageMetaData check1 : webMetaData.getErrorPages())
+                        {
+                           if (check1.getErrorCode() != null
+                                 && check1.getErrorCode().equals(check.getErrorCode()))
+                           {
+                              found2 = true;
+                              break;
+                           }
+                        }
+                     }
+                     if (!found2)
+                        throw new IllegalStateException("Unresolved conflict on error page for code: " 
+                              + errorPage.getErrorCode());
+                  }
+               }
+               if (check.getExceptionType() != null 
+                     && check.getExceptionType().equals(errorPage.getExceptionType()))
+               {
+                  found = true;
+                  if (check.getLocation() != null 
+                        && !check.getLocation().equals(errorPage.getLocation()))
+                  {
+                     boolean found2 = false;
+                     if (webMetaData.getErrorPages() != null)
+                     {
+                        for (ErrorPageMetaData check1 : webMetaData.getErrorPages())
+                        {
+                           if (check1.getExceptionType() != null
+                                 && check1.getExceptionType().equals(check.getExceptionType()))
+                           {
+                              found2 = true;
+                              break;
+                           }
+                        }
+                     }
+                     if (!found2)
+                        throw new IllegalStateException("Unresolved conflict on error page for exception type: " 
+                              + errorPage.getExceptionType());
+                  }
+               }
+            }
+            if (!found)
+               mergedErrorPages.add(errorPage);
+         }
+         for (ErrorPageMetaData errorPage : getErrorPages())
+         {
+            mergedErrorPages.add(errorPage);
+         }
+         setErrorPages(mergedErrorPages);
+      }
       
+      // JSP config
+      if (getJspConfig() == null)
+      {
+         setJspConfig(webFragmentMetaData.getJspConfig());
+      }
+      else if (webFragmentMetaData.getJspConfig() != null)
+      {
+         getJspConfig().augment(webFragmentMetaData.getJspConfig(), webMetaData.getJspConfig());
+      }
+      
+      // Listeners
+      if (getListeners() == null)
+      {
+         setListeners(webFragmentMetaData.getListeners());
+      }
+      else if (webFragmentMetaData.getListeners() != null)
+      {
+         List<ListenerMetaData> mergedListeners = new ArrayList<ListenerMetaData>();
+         for (ListenerMetaData listener : webFragmentMetaData.getListeners())
+         {
+            boolean found = false;
+            for (ListenerMetaData check : getListeners())
+            {
+               if (check.getListenerClass().equals(listener.getListenerClass()))
+               {
+                  found = true;
+               }
+            }
+            if (!found)
+               mergedListeners.add(listener);
+         }
+         for (ListenerMetaData listener : getListeners())
+         {
+            mergedListeners.add(listener);
+         }
+         setListeners(mergedListeners);
+      }
+      
+      // Login config
+      if (getLoginConfig() == null)
+      {
+         setLoginConfig(webFragmentMetaData.getLoginConfig());
+      }
+      else if (webFragmentMetaData.getLoginConfig() != null)
+      {
+         getLoginConfig().augment(webFragmentMetaData.getLoginConfig(), webMetaData.getLoginConfig());
+      }
+      
+      // Mime mappings
+      if (getMimeMappings() == null)
+      {
+         setMimeMappings(webFragmentMetaData.getMimeMappings());
+      }
+      else if (webFragmentMetaData.getMimeMappings() != null)
+      {
+         List<MimeMappingMetaData> mergedMimeMappings = new ArrayList<MimeMappingMetaData>();
+         for (MimeMappingMetaData mimeMapping : webFragmentMetaData.getMimeMappings())
+         {
+            boolean found = false;
+            for (MimeMappingMetaData check : getMimeMappings())
+            {
+               if (check.getExtension().equals(mimeMapping.getExtension()))
+               {
+                  found = true;
+                  if (check.getMimeType() != null 
+                        && !check.getMimeType().equals(mimeMapping.getMimeType()))
+                  {
+                     boolean found2 = false;
+                     if (webMetaData.getMimeMappings() != null)
+                     {
+                        for (MimeMappingMetaData check1 : webMetaData.getMimeMappings())
+                        {
+                           if (check1.getExtension() != null
+                                 && check1.getExtension().equals(check.getExtension()))
+                           {
+                              found2 = true;
+                              break;
+                           }
+                        }
+                     }
+                     if (!found2)
+                        throw new IllegalStateException("Unresolved conflict on mime mapping for extension: " 
+                              + mimeMapping.getExtension());
+                  }
+               }
+            }
+            if (!found)
+               mergedMimeMappings.add(mimeMapping);
+         }
+         for (MimeMappingMetaData mimeMapping : getMimeMappings())
+         {
+            mergedMimeMappings.add(mimeMapping);
+         }
+         setMimeMappings(mergedMimeMappings);
+      }
+
+      // Servlets
+      if (getServlets() == null)
+      {
+         setServlets(webFragmentMetaData.getServlets());
+      }
+      else if (webFragmentMetaData.getServlets() != null)
+      {
+         getServlets().augment(webFragmentMetaData.getServlets(), webMetaData.getServlets());
+      }
+
+      // Servlet mappings
+      if (getServletMappings() == null)
+      {
+         setServletMappings(webFragmentMetaData.getServletMappings());
+      }
+      else if (webFragmentMetaData.getServletMappings() != null)
+      {
+         List<ServletMappingMetaData> mergedServletMappings = new ArrayList<ServletMappingMetaData>();
+         for (ServletMappingMetaData servletMapping : webFragmentMetaData.getServletMappings())
+         {
+            boolean found = false;
+            for (ServletMappingMetaData check : getServletMappings())
+            {
+               if (check.getServletName().equals(servletMapping.getServletName()))
+               {
+                  found = true;
+                  check.augment(servletMapping, null);
+               }
+            }
+            if (!found)
+               mergedServletMappings.add(servletMapping);
+         }
+         for (ServletMappingMetaData servletMapping : getServletMappings())
+         {
+            mergedServletMappings.add(servletMapping);
+         }
+         setServletMappings(mergedServletMappings);
+      }
+
+      // Security constraints
+      
+      
    }
 
 }




More information about the jboss-cvs-commits mailing list