vmassol     2003/03/04 13:56:06

  Modified:    integration/ant/src/test/org/apache/cactus/integration/ant
                        TestWebMerge.java
               integration/ant/src/java/org/apache/cactus/integration/ant
                        WebMerge.java
  Log:
  Finished the initial version of WebMerge. Now need to perform integration tests...
  
  Revision  Changes    Path
  1.2       +55 -27    
jakarta-cactus/integration/ant/src/test/org/apache/cactus/integration/ant/TestWebMerge.java
  
  Index: TestWebMerge.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-cactus/integration/ant/src/test/org/apache/cactus/integration/ant/TestWebMerge.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestWebMerge.java 4 Mar 2003 17:41:47 -0000       1.1
  +++ TestWebMerge.java 4 Mar 2003 21:56:06 -0000       1.2
  @@ -87,14 +87,19 @@
           String xml = 
                 "<web-app>".trim()
               + "  <servlet>".trim()
  -            + "    <servlet-name>name1</servlet-name>".trim()
  -            + "    <servlet-class>class1</servlet-class>".trim()
  +            + "    <servlet-name>s1</servlet-name>".trim()
  +            + "    <servlet-class>sclass1</servlet-class>".trim()
               + "  </servlet>".trim()
               + "  <servlet>".trim()
  -            + "    <servlet-name>name2</servlet-name>".trim()
  -            + "    <servlet-class>class2</servlet-class>".trim()
  +            + "    <servlet-name>s2</servlet-name>".trim()
  +            + "    <servlet-class>sclass2</servlet-class>".trim()
               + "  </servlet>".trim()
  -            + "</web-app>".trim();
  +            + "  <security-role>".trim()
  +            + "    <description>Test role</description>".trim()
  +            + "    <role-name>test</role-name>".trim()
  +            + "  </security-role>".trim()
  +            + "  <security-constraint/>".trim()
  +            + "</web-app>".trim();
           WebMerge webMerge = new WebMerge();
           return webMerge.parse(new ByteArrayInputStream(xml.getBytes())); 
       }
  @@ -103,14 +108,23 @@
       {
           String xml = 
                 "<web-app>".trim()
  +            + "  <filter>".trim()
  +            + "    <filter-name>f1</filter-name>".trim()
  +            + "    <filter-class>fclass1</filter-class>".trim()
  +            + "  </filter>".trim()
               + "  <servlet>".trim()
  -            + "    <servlet-name>name3</servlet-name>".trim()
  -            + "    <servlet-class>class3</servlet-class>".trim()
  +            + "    <servlet-name>s3</servlet-name>".trim()
  +            + "    <servlet-class>sclass3</servlet-class>".trim()
               + "  </servlet>".trim()
               + "  <servlet>".trim()
  -            + "    <servlet-name>name4</servlet-name>".trim()
  -            + "    <servlet-class>class4</servlet-class>".trim()
  +            + "    <servlet-name>s4</servlet-name>".trim()
  +            + "    <servlet-class>sclass4</servlet-class>".trim()
               + "  </servlet>".trim()
  +            + "  <login-config>".trim()
  +            + "    <auth-method>BASIC</auth-method>".trim()
  +            + "    <realm-name>Test</realm-name>".trim()
  +            + "  </login-config>".trim()
  +            + "  <security-constraint/>".trim()
               + "</web-app>".trim();
   
           WebMerge webMerge = new WebMerge();
  @@ -127,22 +141,22 @@
       private void verifyMergedDocument(Node theCurrent)
       {
           assertEquals("servlet", theCurrent.getNodeName());
  -        assertEquals("name3", 
  +        assertEquals("s3", 
               theCurrent.getFirstChild().getFirstChild().getNodeValue());
   
           theCurrent = theCurrent.getNextSibling();
           assertEquals("servlet", theCurrent.getNodeName());
  -        assertEquals("name4", 
  +        assertEquals("s4", 
               theCurrent.getFirstChild().getFirstChild().getNodeValue());
   
           theCurrent = theCurrent.getNextSibling();
           assertEquals("servlet", theCurrent.getNodeName());
  -        assertEquals("name1",
  +        assertEquals("s1",
               theCurrent.getFirstChild().getFirstChild().getNodeValue());
   
           theCurrent = theCurrent.getNextSibling();
           assertEquals("servlet", theCurrent.getNodeName());
  -        assertEquals("name2", 
  +        assertEquals("s2", 
               theCurrent.getFirstChild().getFirstChild().getNodeValue());
       }
   
  @@ -160,7 +174,7 @@
   
           webMerge.insertBefore(nl, node);
   
  -        Node current = originalDoc.getFirstChild().getFirstChild();
  +        Node current = originalDoc.getElementsByTagName("servlet").item(0);
           verifyMergedDocument(current);
       }
   
  @@ -175,24 +189,24 @@
           webMerge.insertTag("servlet", insertPointNode, originalDoc, 
               overrideDoc);
   
  -        Node current = originalDoc.getFirstChild().getFirstChild();
  +        Node current = originalDoc.getElementsByTagName("servlet").item(0);
           assertEquals("servlet", current.getNodeName());
  -        assertEquals("name3", 
  +        assertEquals("s3", 
               current.getFirstChild().getFirstChild().getNodeValue());
   
           current = current.getNextSibling();
           assertEquals("servlet", current.getNodeName());
  -        assertEquals("name4", 
  +        assertEquals("s4", 
               current.getFirstChild().getFirstChild().getNodeValue());
   
           current = current.getNextSibling();
           assertEquals("servlet", current.getNodeName());
  -        assertEquals("name1", 
  +        assertEquals("s1", 
               current.getFirstChild().getFirstChild().getNodeValue());
   
           current = current.getNextSibling();
           assertEquals("servlet", current.getNodeName());
  -        assertEquals("name2", 
  +        assertEquals("s2", 
               current.getFirstChild().getFirstChild().getNodeValue());
       }
   
  @@ -208,14 +222,14 @@
           webMerge.insertTag("servlet", insertPointNode, originalDoc, 
               overrideDoc);
   
  -        Node current = originalDoc.getFirstChild().getFirstChild();
  +        Node current = originalDoc.getElementsByTagName("servlet").item(0);
           assertEquals("servlet", current.getNodeName());
  -        assertEquals("name1", 
  +        assertEquals("s1", 
               current.getFirstChild().getFirstChild().getNodeValue());
   
           current = current.getNextSibling();
           assertEquals("servlet", current.getNodeName());
  -        assertEquals("name2", 
  +        assertEquals("s2", 
               current.getFirstChild().getFirstChild().getNodeValue());
       }
   
  @@ -233,14 +247,14 @@
           webMerge.insertTag("servlet", insertPointNode, originalDoc, 
               overrideDoc);
   
  -        Node current = originalDoc.getFirstChild().getFirstChild();
  +        Node current = originalDoc.getElementsByTagName("servlet").item(0);
           assertEquals("servlet", current.getNodeName());
  -        assertEquals("name3", 
  +        assertEquals("s3", 
               current.getFirstChild().getFirstChild().getNodeValue());
   
           current = current.getNextSibling();
           assertEquals("servlet", current.getNodeName());
  -        assertEquals("name4", 
  +        assertEquals("s4", 
               current.getFirstChild().getFirstChild().getNodeValue());
       }
   
  @@ -252,7 +266,21 @@
           WebMerge webMerge = new WebMerge();
           Document resultDoc = webMerge.merge(originalDoc, overrideDoc);              
  
   
  -        Node current = resultDoc.getFirstChild().getFirstChild();
  +        Node current = resultDoc.getElementsByTagName("servlet").item(0);
           verifyMergedDocument(current);
       }
  +
  +    public void testMergeUniqueElements() throws Exception
  +    {
  +        Document originalDoc = createOriginalDocument();
  +        Document overrideDoc = createOverrideDocument();
  +
  +        WebMerge webMerge = new WebMerge();
  +        Document resultDoc = webMerge.merge(originalDoc, overrideDoc);              
  
  +
  +        NodeList nl = 
  +            resultDoc.getElementsByTagName("security-constraint");
  +        assertEquals(1, nl.getLength());
  +    }
  +
   }
  
  
  
  1.2       +39 -9     
jakarta-cactus/integration/ant/src/java/org/apache/cactus/integration/ant/WebMerge.java
  
  Index: WebMerge.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-cactus/integration/ant/src/java/org/apache/cactus/integration/ant/WebMerge.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- WebMerge.java     4 Mar 2003 17:41:47 -0000       1.1
  +++ WebMerge.java     4 Mar 2003 21:56:06 -0000       1.2
  @@ -101,6 +101,17 @@
       private File output;
   
       /**
  +     * List of XML elements to merge from the override document to the
  +     * original document. For each element we also specify if the element
  +     * can be inserted in the original document or whether it should replace
  +     * the element of the same name in the original document. 
  +     */
  +    private static final String[][] ELEMENTS = { 
  +        {"filter", "true"}, {"filter-mapping", "true"}, {"servlet", "true"},
  +        {"servlet-mapping", "true"}, {"security-constraint", "false"}, 
  +        {"login-config", "false"}, {"security-role", "false"}};
  +    
  +    /**
        * Noop entity resolver so that <code>DOCTYPE</code> entries in XML files
        * do not cause any exception when we are offline and the entity to 
        * resolve is an external URI. 
  @@ -166,14 +177,33 @@
           {
               return theOverrideDoc;
           }
  -        
  -        // Add <servlet> elements
  -        currentNode = insertTag("servlet", currentNode, theOriginalDoc, 
  -            theOverrideDoc);
  -
  -        // Add <servlet-mapping> elements
  -        currentNode = insertTag("servlet-mapping", currentNode, 
  -            theOriginalDoc, theOverrideDoc);
  +
  +        // Merge the elements
  +        for (int i = 0; i < ELEMENTS.length; i++)
  +        {
  +            currentNode = insertTag(ELEMENTS[i][0], currentNode, 
  +                theOriginalDoc, theOverrideDoc);            
  +
  +            // If the element is unique and present in the override document
  +            // and the original document, then remove it from the original
  +            // document.
  +            if (!new Boolean(ELEMENTS[i][1]).booleanValue()) 
  +            {
  +                NodeList originalNl = 
  +                    theOriginalDoc.getElementsByTagName(ELEMENTS[i][0]);
  +                NodeList overrideNl = 
  +                    theOverrideDoc.getElementsByTagName(ELEMENTS[i][0]);
  +                if (overrideNl.getLength() > 0)
  +                { 
  +                    if (originalNl.getLength() > 0)
  +                    {
  +                        theOriginalDoc.getDocumentElement().removeChild(
  +                            theOriginalDoc.getElementsByTagName(
  +                            ELEMENTS[i][0]).item(0));
  +                    }
  +                }
  +            }
  +        }
    
           return theOriginalDoc;       
       }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to