001: /*
002: * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved
003: *
004: * This file is part of Resin(R) Open Source
005: *
006: * Each copy or derived work must preserve the copyright notice and this
007: * notice unmodified.
008: *
009: * Resin Open Source is free software; you can redistribute it and/or modify
010: * it under the terms of the GNU General Public License as published by
011: * the Free Software Foundation; either version 2 of the License, or
012: * (at your option) any later version.
013: *
014: * Resin Open Source is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
017: * of NON-INFRINGEMENT. See the GNU General Public License for more
018: * details.
019: *
020: * You should have received a copy of the GNU General Public License
021: * along with Resin Open Source; if not, write to the
022: * Free SoftwareFoundation, Inc.
023: * 59 Temple Place, Suite 330
024: * Boston, MA 02111-1307 USA
025: *
026: * @author Scott Ferguson
027: */
028:
029: package com.caucho.xml;
030:
031: import com.caucho.util.CharBuffer;
032: import com.caucho.xpath.pattern.NodeListIterator;
033:
034: import org.w3c.dom.Node;
035: import org.w3c.dom.NodeList;
036:
037: import java.util.ArrayList;
038: import java.util.Collection;
039: import java.util.Iterator;
040:
041: /**
042: * Generic implementation of a node list.
043: */
044: public class NodeListImpl implements NodeList {
045: private ArrayList<Node> _nodeList = new ArrayList<Node>();
046:
047: /**
048: * Creates an empty node list.
049: */
050: public NodeListImpl() {
051: }
052:
053: /**
054: * Creates a node list from a collection.
055: */
056: public NodeListImpl(Collection<Node> collection) {
057: _nodeList.addAll(collection);
058: }
059:
060: /**
061: * Adds an item.
062: */
063: public void add(Node node) {
064: _nodeList.add(node);
065: }
066:
067: /**
068: * Returns the item at the index.
069: */
070: public Node item(int index) {
071: if (index < 0 || _nodeList.size() <= index)
072: return null;
073:
074: return _nodeList.get(index);
075: }
076:
077: /**
078: * Returns the number of items in the list.
079: */
080: public int getLength() {
081: return _nodeList.size();
082: }
083:
084: public String toString() {
085: CharBuffer cb = new CharBuffer();
086:
087: cb.append("NodeListImpl[");
088: for (int i = 0; i < getLength(); i++) {
089: if (i != 0)
090: cb.append(", ");
091: cb.append(item(i));
092: }
093: cb.append("]");
094:
095: return cb.toString();
096: }
097:
098: // for quercus
099: public Iterator<Node> iterator() {
100: return new NodeListIterator(null, this);
101: }
102: }
|