All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.htmlunit.cyberneko.xerces.dom.ChildNode Maven / Gradle / Ivy

/*
 * Copyright (c) 2017-2024 Ronald Brill
 *
 * 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
 * https://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.
 */
package org.htmlunit.cyberneko.xerces.dom;

import org.w3c.dom.Node;

/**
 * ChildNode inherits from NodeImpl and adds the capability of being a child by
 * having references to its previous and next siblings.
 *
 */
public abstract class ChildNode extends NodeImpl {

    /** Previous sibling. */
    protected ChildNode previousSibling_;

    /** Next sibling. */
    protected ChildNode nextSibling_;

    /**
     * No public constructor; only subclasses of Node should be instantiated, and
     * those normally via a Document's factory methods
     * 

* Every Node knows what Document it belongs to. * * @param ownerDocument the owner document */ protected ChildNode(final CoreDocumentImpl ownerDocument) { super(ownerDocument); } /** * {@inheritDoc} * * Returns a duplicate of a given node. You can consider this a generic "copy * constructor" for nodes. The newly returned object should be completely * independent of the source object's subtree, so changes in one after the clone * has been made will not affect the other. *

* Note: since we never have any children deep is meaningless here, ParentNode * overrides this behavior. * * @see ParentNode * *

* Example: Cloning a Text node will copy both the node and the text it * contains. *

* Example: Cloning something that has children -- Element or Attr, for * example -- will _not_ clone those children unless a "deep clone" has * been requested. A shallow clone of an Attr node will yield an empty Attr * of the same name. *

* NOTE: Clones will always be read/write, even if the node being cloned is * read-only, to permit applications using only the DOM API to obtain * editable copies of locked portions of the tree. */ @Override public Node cloneNode(final boolean deep) { final ChildNode newnode = (ChildNode) super.cloneNode(deep); // Need to break the association w/ original kids newnode.previousSibling_ = null; newnode.nextSibling_ = null; newnode.isFirstChild(false); return newnode; } /** * {@inheritDoc} */ @Override public Node getParentNode() { // if we have an owner, ownerNode is our parent, otherwise it's // our ownerDocument and we don't have a parent return isOwned() ? ownerNode_ : null; } /* * {@inheritDoc} */ @Override final NodeImpl parentNode() { // if we have an owner, ownerNode is our parent, otherwise it's // our ownerDocument and we don't have a parent return isOwned() ? ownerNode_ : null; } /** * {@inheritDoc} The next child of this node's parent, or null if none */ @Override public Node getNextSibling() { return nextSibling_; } /** * {@inheritDoc} */ @Override public Node getPreviousSibling() { // if we are the firstChild, previousSibling actually refers to our // parent's lastChild, but we hide that return isFirstChild() ? null : previousSibling_; } /* * {@inheritDoc} */ @Override final ChildNode previousSibling() { // if we are the firstChild, previousSibling actually refers to our // parent's lastChild, but we hide that return isFirstChild() ? null : previousSibling_; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy