From 27e94a9b44c9394e1d679031777021fc2ebfb6ee Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 26 Nov 2015 15:13:17 +0100 Subject: [PATCH] Add to TreeNode.toString() Taking a peek at the data tree nodes is useful for state transitions. Teach SPI classes about toString(). Change-Id: I000ecc5520d138748a198aa4a0bfbfc5dd8b04bc Signed-off-by: Robert Varga --- .../tree/spi/AbstractModifiedContainerNode.java | 6 ++++++ .../api/schema/tree/spi/AbstractTreeNode.java | 9 +++++++++ .../api/schema/tree/spi/LazyContainerNode.java | 15 +++++++++++++++ .../api/schema/tree/spi/SimpleContainerNode.java | 6 ++++++ .../yang/data/api/schema/tree/spi/ValueNode.java | 9 +++++++-- 5 files changed, 43 insertions(+), 2 deletions(-) diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractModifiedContainerNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractModifiedContainerNode.java index b9f56f1023..182511da66 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractModifiedContainerNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractModifiedContainerNode.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.api.schema.tree.spi; +import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.Preconditions; import java.util.Map; import org.opendaylight.yangtools.util.MapAdaptor; @@ -39,4 +40,9 @@ abstract class AbstractModifiedContainerNode extends AbstractContainerNode { public final Version getSubtreeVersion() { return subtreeVersion; } + + @Override + protected ToStringHelper addToStringAttributes(final ToStringHelper helper) { + return helper.add("subtreeVersion", subtreeVersion).add("children", children); + } } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractTreeNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractTreeNode.java index 9d19cbd781..9108cf8a94 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractTreeNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/AbstractTreeNode.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.data.api.schema.tree.spi; +import com.google.common.base.MoreObjects; +import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.Preconditions; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -37,4 +39,11 @@ abstract class AbstractTreeNode implements TreeNode { 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/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/LazyContainerNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/LazyContainerNode.java index 5a320f80bb..0a737f2e66 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/LazyContainerNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/LazyContainerNode.java @@ -7,7 +7,10 @@ */ package org.opendaylight.yangtools.yang.data.api.schema.tree.spi; +import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; import java.util.Map; import org.opendaylight.yangtools.util.MapAdaptor; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; @@ -42,4 +45,16 @@ final class LazyContainerNode extends AbstractModifiedContainerNode { final TreeNode modified = getModifiedChild(childId); return modified == null ? getChildFromData(childId) : Optional.of(modified); } + + @Override + protected 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().getValue(), + new Predicate>() { + @Override + public boolean apply(final NormalizedNode input) { + return getModifiedChild(input.getIdentifier()) == null; + } + })); + } } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/SimpleContainerNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/SimpleContainerNode.java index 3d2f140e83..f184a97cc8 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/SimpleContainerNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/SimpleContainerNode.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.api.schema.tree.spi; +import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.Optional; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -33,4 +34,9 @@ final class SimpleContainerNode extends AbstractContainerNode { public MutableTreeNode mutable() { return new LazyMutableContainerNode(this); } + + @Override + protected ToStringHelper addToStringAttributes(final ToStringHelper helper) { + return helper.add("data", getData()); + } } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/ValueNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/ValueNode.java index ebf050859a..6177a91acf 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/ValueNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/ValueNode.java @@ -7,13 +7,13 @@ */ package org.opendaylight.yangtools.yang.data.api.schema.tree.spi; +import com.google.common.base.MoreObjects.ToStringHelper; +import com.google.common.base.Optional; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Optional; - /** * Concretization of AbstractTreeNode for leaf nodes which only contain data. * Instances of this class report all children as absent, subtree version @@ -45,4 +45,9 @@ final class ValueNode extends AbstractTreeNode { */ throw new UnsupportedOperationException(String.format("Attempted to mutate value-node %s", this)); } + + @Override + protected ToStringHelper addToStringAttributes(final ToStringHelper helper) { + return helper.add("value", getData()); + } } -- 2.36.6