From: Robert Varga Date: Sun, 12 Dec 2021 01:14:38 +0000 (+0100) Subject: Make (Mutable)TreeNode a class X-Git-Tag: v8.0.0~134 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F42%2F98942%2F4;p=yangtools.git Make (Mutable)TreeNode a class A pure interface leads to us having AbstractTreeNode, which is superfluous. Turn interfaces into abstract classes instead. Change-Id: Icbf2daf28abb1c7b390006f61989d63d10329ecc Signed-off-by: Robert Varga --- diff --git a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractContainerNode.java b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractContainerNode.java index 294319abf1..873309d491 100644 --- a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractContainerNode.java +++ b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractContainerNode.java @@ -16,17 +16,17 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; * A TreeNode capable of holding child nodes. The fact that any of the children * changed is tracked by the subtree version. */ -abstract class AbstractContainerNode extends AbstractTreeNode { - protected AbstractContainerNode(final NormalizedNode data, final Version version) { +abstract class AbstractContainerNode extends TreeNode { + AbstractContainerNode(final NormalizedNode data, final Version version) { super(data, version); } @SuppressWarnings("unchecked") - protected final DistinctNodeContainer castData() { + final DistinctNodeContainer castData() { return (DistinctNodeContainer) getData(); } - protected final @Nullable TreeNode getChildFromData(final PathArgument childId) { + final @Nullable TreeNode getChildFromData(final PathArgument childId) { // We do not cache the instantiated node as it is dirt cheap return getChildFromData(castData(), childId, getVersion()); } diff --git a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractModifiedContainerNode.java b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractModifiedContainerNode.java index 93dc2d9aec..4d6b432397 100644 --- a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractModifiedContainerNode.java +++ b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractModifiedContainerNode.java @@ -22,18 +22,18 @@ abstract class AbstractModifiedContainerNode extends AbstractContainerNode { private final Map children; private final Version subtreeVersion; - protected AbstractModifiedContainerNode(final NormalizedNode data, final Version version, + AbstractModifiedContainerNode(final NormalizedNode data, final Version version, final Map children, final Version subtreeVersion) { super(data, version); this.subtreeVersion = requireNonNull(subtreeVersion); this.children = requireNonNull(children); } - protected final TreeNode getModifiedChild(final PathArgument childId) { + final TreeNode getModifiedChild(final PathArgument childId) { return children.get(childId); } - protected final Map snapshotChildren() { + final Map snapshotChildren() { return MapAdaptor.getDefaultInstance().takeSnapshot(children); } @@ -43,7 +43,7 @@ abstract class AbstractModifiedContainerNode extends AbstractContainerNode { } @Override - protected ToStringHelper addToStringAttributes(final ToStringHelper helper) { + ToStringHelper addToStringAttributes(final ToStringHelper helper) { return helper.add("subtreeVersion", subtreeVersion).add("children", children); } } diff --git a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractMutableContainerNode.java b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractMutableContainerNode.java index 69f4e63573..a8f43498cf 100644 --- a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractMutableContainerNode.java +++ b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractMutableContainerNode.java @@ -20,30 +20,29 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; * Abstract base for container-based {@link MutableTreeNode}s. It tracks modified nodes in a map and deals with * correctly implementing {@link #seal()}. */ -abstract class AbstractMutableContainerNode implements MutableTreeNode { +abstract class AbstractMutableContainerNode extends MutableTreeNode { private final Version version; private Map children; private NormalizedNode data; private Version subtreeVersion; - protected AbstractMutableContainerNode(final AbstractContainerNode parent, - final Map children) { - this.data = parent.getData(); - this.version = parent.getVersion(); - this.subtreeVersion = parent.getSubtreeVersion(); + AbstractMutableContainerNode(final AbstractContainerNode parent, final Map children) { + data = parent.getData(); + version = parent.getVersion(); + subtreeVersion = parent.getSubtreeVersion(); this.children = requireNonNull(children); } - protected final Version getVersion() { + final Version getVersion() { return version; } - protected final TreeNode getModifiedChild(final PathArgument child) { + final TreeNode getModifiedChild(final PathArgument child) { return children.get(child); } @SuppressWarnings("unchecked") - protected final DistinctNodeContainer getData() { + final DistinctNodeContainer getData() { return (DistinctNodeContainer) data; } diff --git a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractTreeNode.java b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractTreeNode.java deleted file mode 100644 index d55610cbf5..0000000000 --- a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/AbstractTreeNode.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.data.tree.impl.node; - -import static java.util.Objects.requireNonNull; - -import com.google.common.base.MoreObjects; -import com.google.common.base.MoreObjects.ToStringHelper; -import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; - -/** - * A very basic data tree node. Contains some versioned data. - */ -@NonNullByDefault -abstract class AbstractTreeNode implements TreeNode { - private final NormalizedNode data; - private final Version version; - - protected AbstractTreeNode(final NormalizedNode data, final Version version) { - this.data = requireNonNull(data); - this.version = requireNonNull(version); - } - - @Override - public final PathArgument getIdentifier() { - return data.getIdentifier(); - } - - @Override - public final Version getVersion() { - return version; - } - - @Override - public final NormalizedNode getData() { - return data; - } - - @Override - public final String toString() { - return addToStringAttributes(MoreObjects.toStringHelper(this).add("version", version)).toString(); - } - - protected abstract ToStringHelper addToStringAttributes(ToStringHelper helper); -} diff --git a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/LazyContainerNode.java b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/LazyContainerNode.java index cf9373baeb..be0eefb4e5 100644 --- a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/LazyContainerNode.java +++ b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/LazyContainerNode.java @@ -44,7 +44,7 @@ final class LazyContainerNode extends AbstractModifiedContainerNode { } @Override - protected ToStringHelper addToStringAttributes(final ToStringHelper helper) { + ToStringHelper addToStringAttributes(final ToStringHelper helper) { // Modified children add added by superclass. Here we filter the other children. return super.addToStringAttributes(helper).add("untouched", Collections2.filter(castData().body(), input -> getModifiedChild(input.getIdentifier()) == null)); diff --git a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/MaterializedContainerNode.java b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/MaterializedContainerNode.java index 24f065e6d2..1ce11454a2 100644 --- a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/MaterializedContainerNode.java +++ b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/MaterializedContainerNode.java @@ -15,7 +15,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; * A fully-modified node -- we know we have all children, so it performs lookups only. */ final class MaterializedContainerNode extends AbstractModifiedContainerNode { - protected MaterializedContainerNode(final NormalizedNode data, final Version version, + MaterializedContainerNode(final NormalizedNode data, final Version version, final Map children, final Version subtreeVersion) { super(data, version, children, subtreeVersion); } diff --git a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/MutableTreeNode.java b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/MutableTreeNode.java index d8cd869391..709b6acfad 100644 --- a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/MutableTreeNode.java +++ b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/MutableTreeNode.java @@ -17,14 +17,14 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.StoreTreeNode; * A mutable tree node. This is a transient view materialized from a pre-existing node. Modifications are isolated. Once * this object is {@link #seal()}ed, any interactions with it will result in undefined behavior. */ -public interface MutableTreeNode extends StoreTreeNode { +public abstract class MutableTreeNode implements StoreTreeNode { /** * Set the data component of the node. * * @param data New data component, may not be null. * @throws NullPointerException if {@code data} is null */ - void setData(NormalizedNode data); + public abstract void setData(NormalizedNode data); /** * Set the new subtree version. This is typically invoked when the user @@ -33,7 +33,7 @@ public interface MutableTreeNode extends StoreTreeNode { * @param subtreeVersion New subtree version. * @throws NullPointerException if {@code subtreeVersion} is null */ - void setSubtreeVersion(Version subtreeVersion); + public abstract void setSubtreeVersion(Version subtreeVersion); /** * Add a new child node. This acts as add-or-replace operation, e.g. it succeeds even if a conflicting child is @@ -43,7 +43,7 @@ public interface MutableTreeNode extends StoreTreeNode { * @return Replaced child, or null if there was no previous child * @throws NullPointerException if {@code child} is null */ - @Nullable TreeNode putChild(TreeNode child); + public abstract @Nullable TreeNode putChild(TreeNode child); /** * Remove a child node. This acts as delete-or-nothing operation, e.g. it succeeds even if the corresponding child @@ -53,7 +53,7 @@ public interface MutableTreeNode extends StoreTreeNode { * @return Removed child, or null if there was no matching child * @throws NullPointerException if {@code id} is null */ - @Nullable TreeNode removeChild(PathArgument id); + public abstract @Nullable TreeNode removeChild(PathArgument id); /** * Finish node modification and return a read-only view of this node. After @@ -62,5 +62,5 @@ public interface MutableTreeNode extends StoreTreeNode { * * @return Read-only view of this node. */ - @NonNull TreeNode seal(); + public abstract @NonNull TreeNode seal(); } diff --git a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/SimpleContainerNode.java b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/SimpleContainerNode.java index 8b2bc28ad5..3a623a1627 100644 --- a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/SimpleContainerNode.java +++ b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/SimpleContainerNode.java @@ -15,7 +15,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; * A container node which has not seen a modification. All nodes underneath it share the same subtree version. */ final class SimpleContainerNode extends AbstractContainerNode { - protected SimpleContainerNode(final NormalizedNode data, final Version version) { + SimpleContainerNode(final NormalizedNode data, final Version version) { super(data, version); } @@ -35,7 +35,7 @@ final class SimpleContainerNode extends AbstractContainerNode { } @Override - protected ToStringHelper addToStringAttributes(final ToStringHelper helper) { + ToStringHelper addToStringAttributes(final ToStringHelper helper) { return helper.add("data", getData()); } } diff --git a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/TreeNode.java b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/TreeNode.java index e69f661439..ccffdbb359 100644 --- a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/TreeNode.java +++ b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/node/TreeNode.java @@ -7,6 +7,10 @@ */ package org.opendaylight.yangtools.yang.data.tree.impl.node; +import static java.util.Objects.requireNonNull; + +import com.google.common.base.MoreObjects; +import com.google.common.base.MoreObjects.ToStringHelper; import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; @@ -31,7 +35,20 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.StoreTreeNode; // FIXME: BUG-2399: clarify that versioning rules are not enforced for non-presence containers, as they are not // considered to be data nodes. @NonNullByDefault -public interface TreeNode extends Identifiable, StoreTreeNode { +public abstract class TreeNode implements Identifiable, StoreTreeNode { + private final NormalizedNode data; + private final Version version; + + TreeNode(final NormalizedNode data, final Version version) { + this.data = requireNonNull(data); + this.version = requireNonNull(version); + } + + @Override + public final PathArgument getIdentifier() { + return data.getIdentifier(); + } + /** * Get the data node version. This version is updated whenever the data representation of this particular node * changes as a result of a direct write to this node or to its parent nodes -- thus indicating that this node @@ -39,7 +56,9 @@ public interface TreeNode extends Identifiable, StoreTreeNode, StoreTreeNode