[jboss-cvs] JBossAS SVN: r93416 - in projects/metadata/web/trunk/src: test/java/org/jboss/test/metadata/web and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Sep 11 12:04:42 EDT 2009


Author: remy.maucherat at jboss.com
Date: 2009-09-11 12:04:41 -0400 (Fri, 11 Sep 2009)
New Revision: 93416

Added:
   projects/metadata/web/trunk/src/test/java/org/jboss/test/metadata/web/FragmentMergeUnitTestCase.java
Modified:
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/CookieConfigMetaData.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/FiltersMetaData.java
   projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/SessionConfigMetaData.java
   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/WebMetaData.java
Log:
- Continue with some augment code.
- Add a fragment merge test case.

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/CookieConfigMetaData.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/CookieConfigMetaData.java	2009-09-11 16:03:32 UTC (rev 93415)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/CookieConfigMetaData.java	2009-09-11 16:04:41 UTC (rev 93416)
@@ -44,8 +44,11 @@
    private String path = null;
    private String comment = null;
    private boolean httpOnly = false;
+   private boolean httpOnlySet = false;
    private boolean secure = false;
+   private boolean secureSet = false;
    private int maxAge = -1;
+   private boolean maxAgeSet = false;
 
    public String getName() {
       return name;
@@ -88,6 +91,7 @@
    public void setHttpOnly(boolean httpOnly)
    {
       this.httpOnly = httpOnly;
+      httpOnlySet = true;
    }
 
    public boolean getSecure()
@@ -98,6 +102,7 @@
    public void setSecure(boolean secure)
    {
       this.secure = secure;
+      secureSet = true;
    }
 
    public int getMaxAge()
@@ -108,6 +113,111 @@
    public void setMaxAge(int maxAge)
    {
       this.maxAge = maxAge;
+      maxAgeSet = true;
    }
 
+   public void augment(CookieConfigMetaData webFragmentMetaData, CookieConfigMetaData webMetaData)
+   {
+      // Name
+      if (getName() == null)
+      {
+         setName(webFragmentMetaData.getName());
+      }
+      else if (webFragmentMetaData.getName() != null)
+      {
+         if (!getName().equals(webFragmentMetaData.getName()) 
+               && (webMetaData == null || webMetaData.getName() == null))
+         {
+            throw new IllegalStateException("Unresolved conflict on cookie name: " + getName());
+         }
+      }
+      // Domain
+      if (getDomain() == null)
+      {
+         setDomain(webFragmentMetaData.getDomain());
+      }
+      else if (webFragmentMetaData.getDomain() != null)
+      {
+         if (!getDomain().equals(webFragmentMetaData.getDomain()) 
+               && (webMetaData == null || webMetaData.getDomain() == null))
+         {
+            throw new IllegalStateException("Unresolved conflict on cookie domain: " + getDomain());
+         }
+      }
+      // Path
+      if (getPath() == null)
+      {
+         setPath(webFragmentMetaData.getPath());
+      }
+      else if (webFragmentMetaData.getPath() != null)
+      {
+         if (!getPath().equals(webFragmentMetaData.getPath()) 
+               && (webMetaData == null || webMetaData.getPath() == null))
+         {
+            throw new IllegalStateException("Unresolved conflict on cookie path: " + getPath());
+         }
+      }
+      // Comment
+      if (getComment() == null)
+      {
+         setComment(webFragmentMetaData.getComment());
+      }
+      else if (webFragmentMetaData.getComment() != null)
+      {
+         if (!getComment().equals(webFragmentMetaData.getComment()) 
+               && (webMetaData == null || webMetaData.getComment() == null))
+         {
+            throw new IllegalStateException("Unresolved conflict on cookie comment: " + getComment());
+         }
+      }
+      // HttpOnly
+      if (!httpOnlySet)
+      {
+         if (webFragmentMetaData.httpOnlySet)
+         {
+            setHttpOnly(webFragmentMetaData.getHttpOnly());
+         }
+      }
+      else
+      {
+         if (webFragmentMetaData.httpOnlySet && 
+               (webMetaData == null || !webMetaData.httpOnlySet))
+         {
+            throw new IllegalStateException("Unresolved conflict on http only");
+         }
+      }
+      // Secure
+      if (!secureSet)
+      {
+         if (webFragmentMetaData.secureSet)
+         {
+            setSecure(webFragmentMetaData.getSecure());
+         }
+      }
+      else
+      {
+         if (webFragmentMetaData.secureSet && 
+               (webMetaData == null || !webMetaData.secureSet))
+         {
+            throw new IllegalStateException("Unresolved conflict on secure");
+         }
+      }
+      // MaxAge
+      if (!maxAgeSet)
+      {
+         if (webFragmentMetaData.maxAgeSet)
+         {
+            setMaxAge(webFragmentMetaData.getMaxAge());
+         }
+      }
+      else
+      {
+         if (webFragmentMetaData.maxAgeSet && 
+               (webMetaData == null || !webMetaData.maxAgeSet))
+         {
+            throw new IllegalStateException("Unresolved conflict on max age");
+         }
+      }
+   }
+
 }

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/FiltersMetaData.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/FiltersMetaData.java	2009-09-11 16:03:32 UTC (rev 93415)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/FiltersMetaData.java	2009-09-11 16:04:41 UTC (rev 93416)
@@ -34,4 +34,10 @@
    {
       super("web app filters");
    }
+   
+   public void augment(FiltersMetaData webFragmentMetaData, FiltersMetaData webMetaData)
+   {
+      // TODO
+   }
+   
 }

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/SessionConfigMetaData.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/SessionConfigMetaData.java	2009-09-11 16:03:32 UTC (rev 93415)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/SessionConfigMetaData.java	2009-09-11 16:04:41 UTC (rev 93416)
@@ -51,8 +51,8 @@
    @XmlElement(name = "session-timeout")
    public void setSessionTimeout(int sessionTimeout)
    {
+      this.sessionTimeout = sessionTimeout;
       sessionTimeoutSet = true;
-      this.sessionTimeout = sessionTimeout;
    }
 
    public CookieConfigMetaData getCookieConfig() {
@@ -85,7 +85,47 @@
     */
    public void augment(SessionConfigMetaData webFragmentMetaData, SessionConfigMetaData webMetaData)
    {
-      
+      // Session timeout
+      if (!sessionTimeoutSet)
+      {
+         if (webFragmentMetaData.sessionTimeoutSet)
+         {
+            setSessionTimeout(webFragmentMetaData.getSessionTimeout());
+         }
+      }
+      else
+      {
+         if (webFragmentMetaData.sessionTimeoutSet && 
+               (webMetaData == null || !webMetaData.sessionTimeoutSet))
+         {
+            throw new IllegalStateException("Unresolved conflict on session timeout");
+         }
+      }
+      // Cookie config
+      if (getCookieConfig() == null)
+      {
+         setCookieConfig(webFragmentMetaData.getCookieConfig());
+      }
+      else if (webFragmentMetaData.getCookieConfig() != null)
+      {
+         getCookieConfig().augment(webFragmentMetaData.getCookieConfig(), 
+               (webMetaData != null) ? webMetaData.getCookieConfig() : null);
+      }
+      // Tracking modes (multiple, so additive, no conflict)
+      if (getSessionTrackingModes() == null)
+      {
+         setSessionTrackingModes(webFragmentMetaData.getSessionTrackingModes());
+      }
+      else if (webFragmentMetaData.getSessionTrackingModes() != null)
+      {
+         for (SessionTrackingModeType sessionTrackingMode : webFragmentMetaData.getSessionTrackingModes())
+         {
+            if (!getSessionTrackingModes().contains(sessionTrackingMode))
+            {
+               getSessionTrackingModes().add(sessionTrackingMode);
+            }
+         }
+      }
    }
 
 }

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-11 16:03:32 UTC (rev 93415)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/WebFragmentMetaData.java	2009-09-11 16:04:41 UTC (rev 93416)
@@ -29,7 +29,7 @@
 
 /**
  * The web-fragment spec metadata
- * @author Scott.Stark at jboss.org
+ * @author Remy Maucherat
  * @version $Revision: 70996 $
  */
 public class WebFragmentMetaData extends WebCommonMetaData
@@ -52,7 +52,7 @@
     * specification. This is a special type of merging, where non conflicting meta data
     * augment existing meta data, rather than overriding it.
     * If there is a conflict when merging the fragment meta data, and the main
-    * webMetaData does not resolve the conflict, an error will be thrown. 
+    * webMetaData does not resolve the conflict, an error will be thrown.
     * 
     * @param webFragmentMetaData The web meta data which will be merged into this one
     * @param webMetaData The base web meta data, used for conflict error checking
@@ -95,7 +95,7 @@
                         }
                      }
                      if (!found)
-                        throw new IllegalStateException("Conflict on init parameter: " + check.getParamName());
+                        throw new IllegalStateException("Unresolved conflict on init parameter: " + check.getParamName());
                   }
                }
             }
@@ -118,6 +118,16 @@
          getSessionConfig().augment(webFragmentMetaData.getSessionConfig(), webMetaData.getSessionConfig());
       }
       
+      // Filters
+      if (getFilters() == null)
+      {
+         setFilters(webFragmentMetaData.getFilters());
+      }
+      else if (webFragmentMetaData.getFilters() != null)
+      {
+         getFilters().augment(webFragmentMetaData.getFilters(), webMetaData.getFilters());
+      }
+      
    }
 
 }

Modified: projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/WebMetaData.java
===================================================================
--- projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/WebMetaData.java	2009-09-11 16:03:32 UTC (rev 93415)
+++ projects/metadata/web/trunk/src/main/java/org/jboss/metadata/web/spec/WebMetaData.java	2009-09-11 16:04:41 UTC (rev 93416)
@@ -27,7 +27,7 @@
  * @author Scott.Stark at jboss.org
  * @version $Revision: 70996 $
  */
-public class WebMetaData  extends WebCommonMetaData
+public class WebMetaData extends WebCommonMetaData
 {
    private static final long serialVersionUID = 1;
 
@@ -39,7 +39,7 @@
     */
    public void merge(WebFragmentMetaData webFragmentMetaData)
    {
-      
+      // TODO: See JBossWebMetaData
    }
    
 }

Added: projects/metadata/web/trunk/src/test/java/org/jboss/test/metadata/web/FragmentMergeUnitTestCase.java
===================================================================
--- projects/metadata/web/trunk/src/test/java/org/jboss/test/metadata/web/FragmentMergeUnitTestCase.java	                        (rev 0)
+++ projects/metadata/web/trunk/src/test/java/org/jboss/test/metadata/web/FragmentMergeUnitTestCase.java	2009-09-11 16:04:41 UTC (rev 93416)
@@ -0,0 +1,91 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.metadata.web;
+
+import junit.framework.TestCase;
+
+import org.jboss.metadata.web.spec.CookieConfigMetaData;
+import org.jboss.metadata.web.spec.SessionConfigMetaData;
+import org.jboss.metadata.web.spec.WebFragmentMetaData;
+import org.jboss.metadata.web.spec.WebMetaData;
+
+/**
+ * Tests the correct merging of fragment meta data.
+ *
+ * @author Remy Maucherat
+ * @version $Revision: 88255 $
+ */
+public class FragmentMergeUnitTestCase extends TestCase
+{
+
+   public FragmentMergeUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   public void testAugment() throws Exception
+   {
+      WebFragmentMetaData fragment1 = new WebFragmentMetaData();
+      SessionConfigMetaData sessionConfig1 = new SessionConfigMetaData();
+      CookieConfigMetaData cookieConfig1 = new CookieConfigMetaData();
+      cookieConfig1.setName("foo");
+      sessionConfig1.setCookieConfig(cookieConfig1);
+      fragment1.setSessionConfig(sessionConfig1);
+      WebFragmentMetaData fragment2 = new WebFragmentMetaData();
+      SessionConfigMetaData sessionConfig2 = new SessionConfigMetaData();
+      CookieConfigMetaData cookieConfig2 = new CookieConfigMetaData();
+      cookieConfig2.setName("foo2");
+      sessionConfig2.setCookieConfig(cookieConfig2);
+      fragment2.setSessionConfig(sessionConfig2);
+      WebMetaData main = new WebMetaData();
+      boolean exception = false;
+      try
+      {
+         fragment1.augment(fragment2, main);
+      }
+      catch (IllegalStateException e)
+      {
+         exception = true;
+      }
+      assertTrue(exception);
+      sessionConfig2.setSessionTimeout(20);
+      SessionConfigMetaData sessionConfig3 = new SessionConfigMetaData();
+      CookieConfigMetaData cookieConfig3 = new CookieConfigMetaData();
+      cookieConfig3.setName("foo3");
+      sessionConfig3.setCookieConfig(cookieConfig3);
+      main.setSessionConfig(sessionConfig1);
+      cookieConfig2.setDomain(".foo.com");
+      exception = false;
+      try
+      {
+         fragment1.augment(fragment2, main);
+      }
+      catch (IllegalStateException e)
+      {
+         exception = true;
+      }
+      assertFalse(exception);
+      assertEquals(".foo.com", fragment1.getSessionConfig().getCookieConfig().getDomain());
+      assertEquals(20, fragment1.getSessionConfig().getSessionTimeout());
+   }
+
+}




More information about the jboss-cvs-commits mailing list