You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
352 lines
12 KiB
352 lines
12 KiB
5 years ago
|
/*
|
||
|
* Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
|
||
|
*
|
||
|
* This software is open source.
|
||
|
* See the bottom of this file for the licence.
|
||
|
*/
|
||
|
|
||
|
package org.dom4j;
|
||
|
|
||
|
import java.util.Iterator;
|
||
|
import java.util.List;
|
||
|
|
||
|
/**
|
||
|
* <p>
|
||
|
* <code>Branch</code> interface defines the common behaviour for Nodes which
|
||
|
* can contain child nodes (content) such as XML elements and documents. This
|
||
|
* interface allows both elements and documents to be treated in a polymorphic
|
||
|
* manner when changing or navigating child nodes (content).
|
||
|
* </p>
|
||
|
*
|
||
|
* @author <a href="mailto:jstrachan@apache.org">James Strachan </a>
|
||
|
* @version $Revision$
|
||
|
*/
|
||
|
public interface Branch extends Node {
|
||
|
/**
|
||
|
* Returns the <code>Node</code> at the specified index position.
|
||
|
*
|
||
|
* @param index
|
||
|
* the index of the node to return.
|
||
|
*
|
||
|
* @return the <code>Node</code> at the specified position.
|
||
|
*
|
||
|
* @throws IndexOutOfBoundsException
|
||
|
* if the index is out of range (index < 0 || index >=
|
||
|
* {@link Branch#nodeCount()}).
|
||
|
*/
|
||
|
Node node(int index) throws IndexOutOfBoundsException;
|
||
|
|
||
|
/**
|
||
|
* Returns the index of the given node if it is a child node of this branch
|
||
|
* or -1 if the given node is not a child node.
|
||
|
*
|
||
|
* @param node
|
||
|
* the content child node to find.
|
||
|
*
|
||
|
* @return the index of the given node starting at 0 or -1 if the node is
|
||
|
* not a child node of this branch
|
||
|
*/
|
||
|
int indexOf(Node node);
|
||
|
|
||
|
/**
|
||
|
* Returns the number of <code>Node</code> instances that this branch
|
||
|
* contains.
|
||
|
*
|
||
|
* @return the number of nodes this branch contains
|
||
|
*/
|
||
|
int nodeCount();
|
||
|
|
||
|
/**
|
||
|
* Returns the element of the given ID attribute value. If this tree is
|
||
|
* capable of understanding which attribute value should be used for the ID
|
||
|
* then it should be used, otherwise this method should return null.
|
||
|
*
|
||
|
* @param elementID
|
||
|
* DOCUMENT ME!
|
||
|
*
|
||
|
* @return DOCUMENT ME!
|
||
|
*/
|
||
|
Element elementByID(String elementID);
|
||
|
|
||
|
/**
|
||
|
* <p>
|
||
|
* Returns the content nodes of this branch as a backed {@link List}so that
|
||
|
* the content of this branch may be modified directly using the
|
||
|
* {@link List}interface. The <code>List</code> is backed by the
|
||
|
* <code>Branch</code> so that changes to the list are reflected in the
|
||
|
* branch and vice versa.
|
||
|
* </p>
|
||
|
*
|
||
|
* @return the nodes that this branch contains as a <code>List</code>
|
||
|
*/
|
||
|
List content();
|
||
|
|
||
|
/**
|
||
|
* Returns an iterator through the content nodes of this branch
|
||
|
*
|
||
|
* @return an iterator through the content nodes of this branch
|
||
|
*/
|
||
|
Iterator nodeIterator();
|
||
|
|
||
|
/**
|
||
|
* Sets the contents of this branch as a <code>List</code> of
|
||
|
* <code>Node</code> instances.
|
||
|
*
|
||
|
* @param content
|
||
|
* is the list of nodes to use as the content for this branch.
|
||
|
*/
|
||
|
void setContent(List content);
|
||
|
|
||
|
/**
|
||
|
* Appends the content of the given branch to this branch instance. This
|
||
|
* method behaves like the {@link
|
||
|
* java.util.Collection#addAll(java.util.Collection)} method.
|
||
|
*
|
||
|
* @param branch
|
||
|
* is the branch whose content will be added to me.
|
||
|
*/
|
||
|
void appendContent(Branch branch);
|
||
|
|
||
|
/**
|
||
|
* Clears the content for this branch, removing any <code>Node</code>
|
||
|
* instances this branch may contain.
|
||
|
*/
|
||
|
void clearContent();
|
||
|
|
||
|
/**
|
||
|
* <p>
|
||
|
* Returns a list of all the processing instructions in this branch. The
|
||
|
* list is backed by this branch so that changes to the list will be
|
||
|
* reflected in the branch but the reverse is not the case.
|
||
|
* </p>
|
||
|
*
|
||
|
* @return a backed list of the processing instructions
|
||
|
*/
|
||
|
List processingInstructions();
|
||
|
|
||
|
/**
|
||
|
* <p>
|
||
|
* Returns a list of the processing instructions for the given target. The
|
||
|
* list is backed by this branch so that changes to the list will be
|
||
|
* reflected in the branch but the reverse is not the case.
|
||
|
* </p>
|
||
|
*
|
||
|
* @param target
|
||
|
* DOCUMENT ME!
|
||
|
*
|
||
|
* @return a backed list of the processing instructions
|
||
|
*/
|
||
|
List processingInstructions(String target);
|
||
|
|
||
|
/**
|
||
|
* DOCUMENT ME!
|
||
|
*
|
||
|
* @param target
|
||
|
* DOCUMENT ME!
|
||
|
*
|
||
|
* @return the processing instruction for the given target
|
||
|
*/
|
||
|
ProcessingInstruction processingInstruction(String target);
|
||
|
|
||
|
/**
|
||
|
* Sets all the processing instructions for this branch
|
||
|
*
|
||
|
* @param listOfPIs
|
||
|
* DOCUMENT ME!
|
||
|
*/
|
||
|
void setProcessingInstructions(List listOfPIs);
|
||
|
|
||
|
/**
|
||
|
* Adds a new <code>Element</code> node with the given name to this branch
|
||
|
* and returns a reference to the new node.
|
||
|
*
|
||
|
* @param name
|
||
|
* is the name for the <code>Element</code> node.
|
||
|
*
|
||
|
* @return the newly added <code>Element</code> node.
|
||
|
*/
|
||
|
Element addElement(String name);
|
||
|
|
||
|
/**
|
||
|
* Adds a new <code>Element</code> node with the given {@link QName}to
|
||
|
* this branch and returns a reference to the new node.
|
||
|
*
|
||
|
* @param qname
|
||
|
* is the qualified name for the <code>Element</code> node.
|
||
|
*
|
||
|
* @return the newly added <code>Element</code> node.
|
||
|
*/
|
||
|
Element addElement(QName qname);
|
||
|
|
||
|
/**
|
||
|
* Adds a new <code>Element</code> node with the given qualified name and
|
||
|
* namespace URI to this branch and returns a reference to the new node.
|
||
|
*
|
||
|
* @param qualifiedName
|
||
|
* is the fully qualified name of the Element
|
||
|
* @param namespaceURI
|
||
|
* is the URI of the namespace to use
|
||
|
*
|
||
|
* @return the newly added <code>Element</code> node.
|
||
|
*/
|
||
|
Element addElement(String qualifiedName, String namespaceURI);
|
||
|
|
||
|
/**
|
||
|
* Removes the processing instruction for the given target if it exists
|
||
|
*
|
||
|
* @param target
|
||
|
* DOCUMENT ME!
|
||
|
*
|
||
|
* @return true if a processing instruction was removed else false
|
||
|
*/
|
||
|
boolean removeProcessingInstruction(String target);
|
||
|
|
||
|
/**
|
||
|
* Adds the given <code>Node</code> or throws {@link IllegalAddException}
|
||
|
* if the given node is not of a valid type. This is a polymorphic method
|
||
|
* which will call the typesafe method for the node type such as
|
||
|
* add(Element) or add(Comment).
|
||
|
*
|
||
|
* @param node
|
||
|
* is the given node to add
|
||
|
*/
|
||
|
void add(Node node);
|
||
|
|
||
|
/**
|
||
|
* Adds the given <code>Comment</code> to this branch. If the given node
|
||
|
* already has a parent defined then an <code>IllegalAddException</code>
|
||
|
* will be thrown.
|
||
|
*
|
||
|
* @param comment
|
||
|
* is the comment to be added
|
||
|
*/
|
||
|
void add(Comment comment);
|
||
|
|
||
|
/**
|
||
|
* Adds the given <code>Element</code> to this branch. If the given node
|
||
|
* already has a parent defined then an <code>IllegalAddException</code>
|
||
|
* will be thrown.
|
||
|
*
|
||
|
* @param element
|
||
|
* is the element to be added
|
||
|
*/
|
||
|
void add(Element element);
|
||
|
|
||
|
/**
|
||
|
* Adds the given <code>ProcessingInstruction</code> to this branch. If
|
||
|
* the given node already has a parent defined then an
|
||
|
* <code>IllegalAddException</code> will be thrown.
|
||
|
*
|
||
|
* @param pi
|
||
|
* is the processing instruction to be added
|
||
|
*/
|
||
|
void add(ProcessingInstruction pi);
|
||
|
|
||
|
/**
|
||
|
* Removes the given <code>Node</code> if the node is an immediate child
|
||
|
* of this branch. If the given node is not an immediate child of this
|
||
|
* branch then the {@link Node#detach()}method should be used instead. This
|
||
|
* is a polymorphic method which will call the typesafe method for the node
|
||
|
* type such as remove(Element) or remove(Comment).
|
||
|
*
|
||
|
* @param node
|
||
|
* is the given node to be removed
|
||
|
*
|
||
|
* @return true if the node was removed
|
||
|
*/
|
||
|
boolean remove(Node node);
|
||
|
|
||
|
/**
|
||
|
* Removes the given <code>Comment</code> if the node is an immediate
|
||
|
* child of this branch. If the given node is not an immediate child of this
|
||
|
* branch then the {@link Node#detach()}method should be used instead.
|
||
|
*
|
||
|
* @param comment
|
||
|
* is the comment to be removed
|
||
|
*
|
||
|
* @return true if the comment was removed
|
||
|
*/
|
||
|
boolean remove(Comment comment);
|
||
|
|
||
|
/**
|
||
|
* Removes the given <code>Element</code> if the node is an immediate
|
||
|
* child of this branch. If the given node is not an immediate child of this
|
||
|
* branch then the {@link Node#detach()}method should be used instead.
|
||
|
*
|
||
|
* @param element
|
||
|
* is the element to be removed
|
||
|
*
|
||
|
* @return true if the element was removed
|
||
|
*/
|
||
|
boolean remove(Element element);
|
||
|
|
||
|
/**
|
||
|
* Removes the given <code>ProcessingInstruction</code> if the node is an
|
||
|
* immediate child of this branch. If the given node is not an immediate
|
||
|
* child of this branch then the {@link Node#detach()}method should be used
|
||
|
* instead.
|
||
|
*
|
||
|
* @param pi
|
||
|
* is the processing instruction to be removed
|
||
|
*
|
||
|
* @return true if the processing instruction was removed
|
||
|
*/
|
||
|
boolean remove(ProcessingInstruction pi);
|
||
|
|
||
|
/**
|
||
|
* Puts all <code>Text</code> nodes in the full depth of the sub-tree
|
||
|
* underneath this <code>Node</code>, including attribute nodes, into a
|
||
|
* "normal" form where only structure (e.g., elements, comments, processing
|
||
|
* instructions, CDATA sections, and entity references) separates
|
||
|
* <code>Text</code> nodes, i.e., there are neither adjacent
|
||
|
* <code>Text</code> nodes nor empty <code>Text</code> nodes. This can
|
||
|
* be used to ensure that the DOM view of a document is the same as if it
|
||
|
* were saved and re-loaded, and is useful when operations (such as XPointer
|
||
|
* lookups) that depend on a particular document tree structure are to be
|
||
|
* used.In cases where the document contains <code>CDATASections</code>,
|
||
|
* the normalize operation alone may not be sufficient, since XPointers do
|
||
|
* not differentiate between <code>Text</code> nodes and
|
||
|
* <code>CDATASection</code> nodes.
|
||
|
*
|
||
|
* @since DOM Level 2
|
||
|
*/
|
||
|
void normalize();
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Redistribution and use of this software and associated documentation
|
||
|
* ("Software"), with or without modification, are permitted provided that the
|
||
|
* following conditions are met:
|
||
|
*
|
||
|
* 1. Redistributions of source code must retain copyright statements and
|
||
|
* notices. Redistributions must also contain a copy of this document.
|
||
|
*
|
||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||
|
* this list of conditions and the following disclaimer in the documentation
|
||
|
* and/or other materials provided with the distribution.
|
||
|
*
|
||
|
* 3. The name "DOM4J" must not be used to endorse or promote products derived
|
||
|
* from this Software without prior written permission of MetaStuff, Ltd. For
|
||
|
* written permission, please contact dom4j-info@metastuff.com.
|
||
|
*
|
||
|
* 4. Products derived from this Software may not be called "DOM4J" nor may
|
||
|
* "DOM4J" appear in their names without prior written permission of MetaStuff,
|
||
|
* Ltd. DOM4J is a registered trademark of MetaStuff, Ltd.
|
||
|
*
|
||
|
* 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org
|
||
|
*
|
||
|
* THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND
|
||
|
* ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
|
* ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE
|
||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||
|
*
|
||
|
* Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
|
||
|
*/
|