Wrap Node List to Collection : DOM Node « XML « Java






Wrap Node List to Collection

        
/*
  Copyright 2009 Tomer Gabel <tomer@tomergabel.com>

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.


  ant-intellij-tasks project (http://code.google.com/p/ant-intellij-tasks/)

  $Id: XmlUtils.java 106 2009-09-30 02:07:29Z tomergabel $
*/

//package com.tomergabel.util;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;

public final class XmlUtils {
    private XmlUtils() {
    }

    public static Collection<Node> wrapNodeList( final NodeList nodeList ) throws IllegalArgumentException {
        if ( nodeList == null )
            throw new IllegalArgumentException( "Cannot wrap null NodeList" );

        return new Collection<Node>() {
            @Override
            public int size() {
                return nodeList.getLength();
            }

            @Override
            public boolean isEmpty() {
                return nodeList.getLength() > 0;
            }

            @Override
            public boolean contains( final Object o ) {
                if ( o == null || !( o instanceof Node ) )
                    return false;
                for ( int i = 0; i < nodeList.getLength(); ++i )
                    if ( o == nodeList.item( i ) )
                        return true;
                return false;
            }

            @Override
            public Iterator<Node> iterator() {
                return new Iterator<Node>() {
                    private int index = 0;

                    @Override
                    public boolean hasNext() {
                        return nodeList.getLength() > this.index;
                    }

                    @Override
                    public Node next() {
                        if ( this.index >= nodeList.getLength() )
                            throw new NoSuchElementException();
                        return nodeList.item( this.index++ );
                    }

                    @Override
                    public void remove() {
                        throw new UnsupportedOperationException();
                    }
                };
            }

            @Override
            public Object[] toArray() {
                final Node[] array = new Node[nodeList.getLength()];
                for ( int i = 0; i < array.length; ++i )
                    array[ i ] = nodeList.item( i );
                return array;
            }

            @Override
            @SuppressWarnings( { "unchecked" } )
            public <T> T[] toArray( final T[] a ) throws ArrayStoreException {
                if ( !a.getClass().getComponentType().isAssignableFrom( Node.class ) )
                    throw new ArrayStoreException(
                            a.getClass().getComponentType().getName() + " is not the same or a supertype of Node" );

                if ( a.length >= nodeList.getLength() ) {
                    for ( int i = 0; i < nodeList.getLength(); ++i )
                        a[ i ] = (T) nodeList.item( i );
                    if ( a.length > nodeList.getLength() )
                        a[ nodeList.getLength() ] = null;
                    return a;
                }

                return (T[]) toArray();
            }

            @Override
            public boolean add( final Node node ) {
                throw new UnsupportedOperationException();
            }

            @Override
            public boolean remove( final Object o ) {
                throw new UnsupportedOperationException();
            }

            @Override
            public boolean containsAll( final Collection<?> c ) {
                for ( final Object o : c )
                    if ( !this.contains( o ) )
                        return false;
                return true;
            }

            @Override
            public boolean addAll( final Collection<? extends Node> c ) {
                throw new UnsupportedOperationException();
            }

            @Override
            public boolean removeAll( final Collection<?> c ) {
                throw new UnsupportedOperationException();
            }

            @Override
            public boolean retainAll( final Collection<?> c ) {
                throw new UnsupportedOperationException();
            }

            @Override
            public void clear() {
                throw new UnsupportedOperationException();
            }
        };
    }
}

   
    
    
    
    
    
    
    
  








Related examples in the same category

1.DOM Node query
2.Getting Elements with DOM
3.Getting Attributes with DOM
4.Getting the Root Element in a DOM Document
5.Getting a Node Relative to Another Node in a DOM Document
6.Verbose DOM Parser
7.Getting the Notations in a DOM Document
8.Getting the Declared Entities in a DOM Document
9.Use DOM parser to deal with XML document with attributes
10.List an XML document with DOM parser
11.Removing All the Attributes in a DOM Element
12.Listing All the Attributes of a DOM Element
13.Adding and Removing an Attribute in a DOM Element
14.Getting and Setting an Attribute in a DOM Element
15.Changing the Name of a DOM Element
16.Visiting All the Elements in a DOM Document
17.Remove all attributes by first making a copy of the attribute names and then using the list to remove the attributes:
18.Removing a Node from a DOM Document
19.Remove All nodes
20.Getting a DOM Element by Id
21.Determining If an Attribute Was Supplied in a DOM Element
22.DOM serializer
23.Add a text node to the element
24.Add a text node to the beginning of the element
25.Add a text node before the last child of the element
26.Add another element after the first child of the root element
27.Add a text node in front of the new item element
28.Adding a CDATA Section to a DOM Document
29.Accessing attributes of an element
30.Get the W3C NodeList instance associated with the XPath selection supplied
31.Get the W3C Node instance associated with the XPath selection supplied
32.Convert Hashtable to a Node
33.Convert NodeList To Node Array
34.Find the first text descendent node of an element
35.Returns a Properties object matching the given node
36.Returns a list of value for the given node
37.Returns the value of the attribute of the given element
38.Returns the value of the child node with the given name
39.Returns the value of the given node
40.Simplified implementation of a Node from a Document Object Model (DOM)
41.Extract all text children of an element
42.Extract the textual content from a Node.
43.Returns a first child DOM Node of type ELEMENT_NODE for the specified Node
44.Remove this node from its parent.
45.Find Node
46.Set or replace the text value
47.Gets the first child element of a node.
48.Gets the last child element of a node.
49.Gets the next sibling of a node that is an element.
50.Gets the first element with the specified qualified name that is descendant of e.
51.NodeList to List
52.Get Text from Node
53.Get text value from Node
54.Get text value by tag name