[jbossws-commits] JBossWS SVN: r8573 - common/trunk/src/main/java/org/jboss/wsf/common.

jbossws-commits at lists.jboss.org jbossws-commits at lists.jboss.org
Tue Oct 28 11:34:26 EDT 2008


Author: alessio.soldano at jboss.com
Date: 2008-10-28 11:34:25 -0400 (Tue, 28 Oct 2008)
New Revision: 8573

Modified:
   common/trunk/src/main/java/org/jboss/wsf/common/DOMUtils.java
Log:
[JBWS-2346] Adding recursive flavour to many DOMUtil methods


Modified: common/trunk/src/main/java/org/jboss/wsf/common/DOMUtils.java
===================================================================
--- common/trunk/src/main/java/org/jboss/wsf/common/DOMUtils.java	2008-10-28 09:33:38 UTC (rev 8572)
+++ common/trunk/src/main/java/org/jboss/wsf/common/DOMUtils.java	2008-10-28 15:34:25 UTC (rev 8573)
@@ -62,6 +62,7 @@
  * DOM2 utilites
  *
  * @author Thomas.Diesler at jboss.org
+ * @author alessio.soldano at jboss.com
  */
 public final class DOMUtils
 {
@@ -483,32 +484,53 @@
       }
       return (hasTextContent ? buffer.toString() : null);
    }
-
+   
    /** Gets the first child element
     */
    public static Element getFirstChildElement(Node node)
    {
-      return getFirstChildElementIntern(node, null);
+      return getFirstChildElement(node, false);
    }
 
+   /** Gets the first child element
+    */
+   public static Element getFirstChildElement(Node node, boolean recursive)
+   {
+      return getFirstChildElementIntern(node, null, recursive);
+   }
+
    /** Gets the first child element for a given local name without namespace
     */
    public static Element getFirstChildElement(Node node, String nodeName)
    {
-      return getFirstChildElementIntern(node, new QName(nodeName));
+      return getFirstChildElement(node, nodeName, false);
    }
-
+   
+   /** Gets the first child element for a given local name without namespace
+    */
+   public static Element getFirstChildElement(Node node, String nodeName, boolean recursive)
+   {
+      return getFirstChildElementIntern(node, new QName(nodeName), recursive);
+   }
+   
    /** Gets the first child element for a given qname
     */
    public static Element getFirstChildElement(Node node, QName nodeName)
    {
-      return getFirstChildElementIntern(node, nodeName);
+      return getFirstChildElement(node, nodeName, false);
    }
 
-   private static Element getFirstChildElementIntern(Node node, QName nodeName)
+   /** Gets the first child element for a given qname
+    */
+   public static Element getFirstChildElement(Node node, QName nodeName, boolean recursive)
    {
+      return getFirstChildElementIntern(node, nodeName, recursive);
+   }
+
+   private static Element getFirstChildElementIntern(Node node, QName nodeName, boolean recursive)
+   {
       Element childElement = null;
-      Iterator it = getChildElementsIntern(node, nodeName);
+      Iterator it = getChildElementsIntern(node, nodeName, recursive);
       if (it.hasNext())
       {
          childElement = (Element)it.next();
@@ -520,28 +542,52 @@
     */
    public static Iterator getChildElements(Node node, String nodeName)
    {
-      return getChildElementsIntern(node, new QName(nodeName));
+      return getChildElements(node, nodeName, false);
    }
-
+   
+   /** Gets the child elements for a given local name without namespace
+    */
+   public static Iterator getChildElements(Node node, String nodeName, boolean recursive)
+   {
+      return getChildElementsIntern(node, new QName(nodeName), recursive);
+   }
+   
    /** Gets the child element for a given qname
     */
    public static Iterator getChildElements(Node node, QName nodeName)
    {
-      return getChildElementsIntern(node, nodeName);
+      return getChildElements(node, nodeName, false);
    }
+
+   /** Gets the child element for a given qname
+    */
+   public static Iterator getChildElements(Node node, QName nodeName, boolean recursive)
+   {
+      return getChildElementsIntern(node, nodeName, recursive);
+   }
    
    public static List<Element> getChildElementsAsList(Node node, String nodeName)
    {
-      return getChildElementsAsListIntern(node, new QName(nodeName));
+      return getChildElementsAsList(node, nodeName, false);
    }
    
+   public static List<Element> getChildElementsAsList(Node node, String nodeName, boolean recursive)
+   {
+      return getChildElementsAsListIntern(node, new QName(nodeName), recursive);
+   }
+   
    public static List<Element> getChildElementsAsList(Node node, QName nodeName)
    {
-      return getChildElementsAsListIntern(node, nodeName);
+      return getChildElementsAsList(node, nodeName, false);
    }
    
-   private static List<Element> getChildElementsAsListIntern(Node node, QName nodeName)
+   public static List<Element> getChildElementsAsList(Node node, QName nodeName, boolean recursive)
    {
+      return getChildElementsAsListIntern(node, nodeName, recursive);
+   }
+   
+   private static List<Element> getChildElementsAsListIntern(Node node, QName nodeName, boolean recursive)
+   {
       List<Element> list = new LinkedList<Element>();
       NodeList nlist = node.getChildNodes();
       for (int i = 0; i < nlist.getLength(); i++)
@@ -549,34 +595,51 @@
          Node child = nlist.item(i);
          if (child.getNodeType() == Node.ELEMENT_NODE)
          {
-            if (nodeName == null)
+            search(list, (Element)child, nodeName, recursive);
+         }
+      }
+      return list;
+   }
+   
+   private static void search(List<Element> list, Element baseElement, QName nodeName, boolean recursive)
+   {
+      if (nodeName == null)
+      {
+         list.add(baseElement);
+      }
+      else
+      {
+         QName qname;
+         if (nodeName.getNamespaceURI().length() > 0)
+         {
+            qname = new QName(baseElement.getNamespaceURI(), baseElement.getLocalName());
+         }
+         else
+         {
+            qname = new QName(baseElement.getLocalName());
+         }
+         if (qname.equals(nodeName))
+         {
+            list.add(baseElement);
+         }
+      }
+      if (recursive)
+      {
+         NodeList nlist = baseElement.getChildNodes();
+         for (int i = 0; i < nlist.getLength(); i++)
+         {
+            Node child = nlist.item(i);
+            if (child.getNodeType() == Node.ELEMENT_NODE)
             {
-               list.add((Element)child);
+               search(list, (Element)child, nodeName, recursive);
             }
-            else
-            {
-               QName qname;
-               if (nodeName.getNamespaceURI().length() > 0)
-               {
-                  qname = new QName(child.getNamespaceURI(), child.getLocalName());
-               }
-               else
-               {
-                  qname = new QName(child.getLocalName());
-               }
-               if (qname.equals(nodeName))
-               {
-                  list.add((Element)child);
-               }
-            }
          }
       }
-      return list;
    }
-
-   private static Iterator getChildElementsIntern(Node node, QName nodeName)
+   
+   private static Iterator getChildElementsIntern(Node node, QName nodeName, boolean recursive)
    {
-      return getChildElementsAsListIntern(node, nodeName).iterator();
+      return getChildElementsAsListIntern(node, nodeName, recursive).iterator();
    }
 
    /** Gets parent element or null if there is none




More information about the jbossws-commits mailing list