From f2ac3b4fd76a384770669fa2bc6b7b7ba56bf0c7 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 10 Jan 2022 13:43:51 +0100 Subject: [PATCH] Remove overridden ImmmutableNodes.fromInstanceId() These methods are geared towards NETCONF filter creation, which is being solved in a different way -- as these do not work form leaves anyway. Remove the methods to reduce confusion. JIRA: YANGTOOLS-1390 Change-Id: I52ebe9be906e516ef23447f77e80c56dcf86a8d0 Signed-off-by: Robert Varga --- .../yang/data/impl/schema/ImmutableNodes.java | 43 +---- .../schema/InstanceIdToCompositeNodes.java | 12 +- .../data/impl/schema/InstanceIdToNodes.java | 75 ++------ .../impl/schema/InstanceIdToSimpleNodes.java | 13 +- .../impl/schema/InstanceIdToNodesTest.java | 174 +++--------------- 5 files changed, 53 insertions(+), 264 deletions(-) diff --git a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNodes.java b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNodes.java index 6f9519efb6..553243f24d 100644 --- a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNodes.java +++ b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNodes.java @@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.data.impl.schema; import static com.google.common.base.Preconditions.checkNotNull; import java.util.Iterator; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @@ -205,46 +204,6 @@ public final class ImmutableNodes { * @return serialized normalized node for provided instance Id */ public static @NonNull NormalizedNode fromInstanceId(final SchemaContext ctx, final YangInstanceIdentifier id) { - return fromInstanceIdImpl(ctx, id, Optional.empty()); - } - - /** - * Convert YangInstanceIdentifier into a normalized node structure. - * - * @param ctx schema context to used during serialization - * @param id instance identifier to convert to node structure starting from root - * @param deepestElement pre-built deepest child that will be inserted at the last path argument of provided - * instance identifier - * @return serialized normalized node for provided instance Id with overridden last child. - * @deprecated This method is a historic hack, which has only a single downstream user. It is scheduled for removal - * without a replacement. - */ - @Deprecated(since = "7.0.12", forRemoval = true) - public static @NonNull NormalizedNode fromInstanceId(final SchemaContext ctx, final YangInstanceIdentifier id, - final NormalizedNode deepestElement) { - return fromInstanceIdImpl(ctx, id, Optional.of(deepestElement)); - } - - /** - * Convert YangInstanceIdentifier into a normalized node structure. - * - * @param ctx schema context to used during serialization - * @param id instance identifier to convert to node structure starting from root - * @param deepestElement pre-built deepest child that will be inserted at the last path argument of provided - * instance identifier - * @return serialized normalized node for provided instance Id with (optionally) overridden last child - * and (optionally) marked with specific operation attribute. - * @deprecated This method is a historic hack, which has only a single downstream user. It is scheduled for removal - * without a replacement. - */ - @Deprecated(since = "7.0.12", forRemoval = true) - public static @NonNull NormalizedNode fromInstanceId(final SchemaContext ctx, final YangInstanceIdentifier id, - final Optional deepestElement) { - return fromInstanceIdImpl(ctx, id, deepestElement); - } - - private static @NonNull NormalizedNode fromInstanceIdImpl(final SchemaContext ctx, final YangInstanceIdentifier id, - final Optional deepestElement) { final PathArgument topLevelElement; final InstanceIdToNodes instanceIdToNodes; final Iterator it = id.getPathArguments().iterator(); @@ -259,6 +218,6 @@ public final class ImmutableNodes { instanceIdToNodes = InstanceIdToNodes.fromDataSchemaNode(ctx); } - return instanceIdToNodes.create(topLevelElement, it, deepestElement); + return instanceIdToNodes.create(topLevelElement, it); } } diff --git a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToCompositeNodes.java b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToCompositeNodes.java index 43316693e4..43899ce18a 100644 --- a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToCompositeNodes.java +++ b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToCompositeNodes.java @@ -11,17 +11,14 @@ import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; -import java.util.Collection; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.util.ImmutableOffsetMap; @@ -68,8 +65,7 @@ abstract class InstanceIdToCompositeNodes extends Instan @Override @SuppressWarnings("unchecked") - final NormalizedNode create(final PathArgument first, final Iterator others, - final Optional lastChild) { + final NormalizedNode create(final PathArgument first, final Iterator others) { if (!isMixin()) { final QName type = getIdentifier().getNodeType(); if (type != null) { @@ -84,9 +80,7 @@ abstract class InstanceIdToCompositeNodes extends Instan if (others.hasNext()) { final PathArgument childPath = others.next(); final InstanceIdToNodes childOp = getChildOperation(childPath); - builder.addChild(childOp.create(childPath, others, lastChild)); - } else if (lastChild.isPresent()) { - builder.withValue(ImmutableList.copyOf((Collection) lastChild.get().body())); + builder.addChild(childOp.create(childPath, others)); } return builder.build(); @@ -307,7 +301,7 @@ abstract class InstanceIdToCompositeNodes extends Instan UnorderedMapMixinNormalization(final ListSchemaNode list) { super(NodeIdentifier.create(list.getQName())); - this.innerNode = new MapEntryNormalization(list); + innerNode = new MapEntryNormalization(list); } @Override diff --git a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodes.java b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodes.java index 2fb2d87df4..4d4ffb77b0 100644 --- a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodes.java +++ b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodes.java @@ -8,26 +8,21 @@ package org.opendaylight.yangtools.yang.data.impl.schema; import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkState; import com.google.common.collect.Iterables; import java.util.Iterator; import java.util.List; import java.util.Optional; -import javax.xml.transform.dom.DOMSource; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.concepts.AbstractSimpleIdentifiable; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; -import org.opendaylight.yangtools.yang.data.api.schema.AnydataNode; -import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; import org.opendaylight.yangtools.yang.data.api.schema.builder.CollectionNodeBuilder; -import org.opendaylight.yangtools.yang.data.api.schema.builder.NormalizedNodeBuilder; import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode; import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; @@ -61,13 +56,11 @@ abstract class InstanceIdToNodes extends AbstractSimpleI /** * Convert instance identifier into a NormalizedNode structure. * - * @param instanceId Instance identifier to transform into NormalizedNodes - * @param deepestChild Optional normalized node to be inserted as the last child - * @param operation Optional modify operation to be set on the last child + * @param first First path argument + * @param others Subsequent path arguments * @return NormalizedNode structure corresponding to submitted instance ID */ - abstract @NonNull NormalizedNode create(PathArgument first, Iterator others, - Optional deepestChild); + abstract @NonNull NormalizedNode create(PathArgument first, Iterator others); abstract boolean isMixin(); @@ -76,7 +69,7 @@ abstract class InstanceIdToNodes extends AbstractSimpleI UnkeyedListMixinNormalization(final ListSchemaNode list) { super(NodeIdentifier.create(list.getQName())); - this.innerNode = new UnkeyedListItemNormalization(list); + innerNode = new UnkeyedListItemNormalization(list); } @Override @@ -95,60 +88,32 @@ abstract class InstanceIdToNodes extends AbstractSimpleI } } - private abstract static class AbstractOpaqueNormalization extends InstanceIdToNodes { - AbstractOpaqueNormalization(final DataSchemaNode schema) { - super(NodeIdentifier.create(schema.getQName())); + private static final class OpaqueNormalization extends InstanceIdToNodes { + private OpaqueNormalization(final QName qname) { + super(NodeIdentifier.create(qname)); } - @Override - final InstanceIdToNodes getChild(final PathArgument child) { - return null; + OpaqueNormalization(final AnydataSchemaNode schema) { + this(schema.getQName()); } - @Override - final boolean isMixin() { - return false; - } - } - - private static final class AnydataNormalization extends AbstractOpaqueNormalization { - AnydataNormalization(final AnydataSchemaNode schema) { - super(schema); + OpaqueNormalization(final AnyxmlSchemaNode schema) { + this(schema.getQName()); } @Override - NormalizedNode create(final PathArgument first, final Iterator others, - final Optional deepestChild) { - checkState(deepestChild.isPresent(), "Cannot instantiate anydata node without a value"); - final NormalizedNode child = deepestChild.get(); - checkState(child instanceof AnydataNode, "Invalid child %s", child); - return createAnydata((AnydataNode) child); - } - - private AnydataNode createAnydata(final AnydataNode child) { - return Builders.anydataBuilder(child.bodyObjectModel()).withValue(child.body()) - .withNodeIdentifier(getIdentifier()).build(); + InstanceIdToNodes getChild(final PathArgument child) { + return null; } - } - private static final class AnyXmlNormalization extends AbstractOpaqueNormalization { - AnyXmlNormalization(final AnyxmlSchemaNode schema) { - super(schema); + @Override + boolean isMixin() { + return false; } @Override - NormalizedNode create(final PathArgument first, final Iterator others, - final Optional deepestChild) { - final NormalizedNodeBuilder builder = - Builders.anyXmlBuilder() - .withNodeIdentifier(getIdentifier()); - if (deepestChild.isPresent()) { - final NormalizedNode child = deepestChild.get(); - checkState(child instanceof DOMSourceAnyxmlNode, "Invalid child %s", child); - builder.withValue(((DOMSourceAnyxmlNode) child).body()); - } - - return builder.build(); + NormalizedNode create(final PathArgument first, final Iterator others) { + throw new IllegalStateException("Cannot instantiate opaque node without a value"); } } @@ -214,9 +179,9 @@ abstract class InstanceIdToNodes extends AbstractSimpleI } else if (potential instanceof LeafListSchemaNode) { return fromLeafListSchemaNode((LeafListSchemaNode) potential); } else if (potential instanceof AnydataSchemaNode) { - return new AnydataNormalization((AnydataSchemaNode) potential); + return new OpaqueNormalization((AnydataSchemaNode) potential); } else if (potential instanceof AnyxmlSchemaNode) { - return new AnyXmlNormalization((AnyxmlSchemaNode) potential); + return new OpaqueNormalization((AnyxmlSchemaNode) potential); } return null; } diff --git a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToSimpleNodes.java b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToSimpleNodes.java index 420e2203a3..bf4018617c 100644 --- a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToSimpleNodes.java +++ b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToSimpleNodes.java @@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.data.impl.schema; import static com.google.common.base.Preconditions.checkArgument; import java.util.Iterator; -import java.util.Optional; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; @@ -32,16 +31,8 @@ abstract class InstanceIdToSimpleNodes extends InstanceI } @Override - final NormalizedNode create(final PathArgument first, final Iterator others, - final Optional deepestChild) { - final NormalizedNodeBuilder builder = - getBuilder(first); - - if (deepestChild.isPresent()) { - builder.withValue(deepestChild.orElseThrow().body()); - } - - return builder.build(); + final NormalizedNode create(final PathArgument first, final Iterator others) { + return getBuilder(first).build(); } @Override diff --git a/data/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodesTest.java b/data/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodesTest.java index 4deb1900c1..626a8c5165 100644 --- a/data/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodesTest.java +++ b/data/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodesTest.java @@ -13,7 +13,6 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; import java.util.Collection; import java.util.Map; import org.junit.AfterClass; @@ -22,12 +21,9 @@ import org.junit.Test; import org.opendaylight.yangtools.util.ImmutableOffsetMap; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; -import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -47,16 +43,9 @@ public class InstanceIdToNodesTest { private static EffectiveModelContext ctx; private final NodeIdentifier rootContainer = new NodeIdentifier(QName.create(NS, REVISION, "test")); - private final NodeIdentifier outerContainer = new NodeIdentifier(QName.create(NS, REVISION, "outer-container")); - private final NodeIdentifier augmentedLeaf = new NodeIdentifier(QName.create(NS, REVISION, "augmented-leaf")); - private final AugmentationIdentifier augmentation = new AugmentationIdentifier( - ImmutableSet.of(augmentedLeaf.getNodeType())); - private final NodeIdentifier outerList = new NodeIdentifier(QName.create(NS, REVISION, "outer-list")); private final NodeIdentifierWithPredicates outerListWithKey = NodeIdentifierWithPredicates.of( QName.create(NS, REVISION, "outer-list"), ID, 1); - private final NodeIdentifier choice = new NodeIdentifier(QName.create(NS, REVISION, "outer-choice")); - private final NodeIdentifier leafFromCase = new NodeIdentifier(QName.create(NS, REVISION, "one")); private final NodeIdentifier leafList = new NodeIdentifier(QName.create(NS, REVISION, "ordered-leaf-list")); private final NodeWithValue leafListWithValue = new NodeWithValue<>(leafList.getNodeType(), "abcd"); @@ -71,148 +60,39 @@ public class InstanceIdToNodesTest { ctx = null; } - @Test - @Deprecated(since = "7.0.12", forRemoval = true) - public void testInAugment() { - final LeafNode leaf = Builders.leafBuilder().withNodeIdentifier(augmentedLeaf).withValue("").build(); - final ContainerNode expectedFilter = Builders - .containerBuilder() - .withNodeIdentifier(rootContainer) - .withChild( - Builders.containerBuilder() - .withNodeIdentifier(outerContainer) - .withChild( - Builders.augmentationBuilder() - .withNodeIdentifier(augmentation) - .withChild( - leaf).build()).build()).build(); - - final NormalizedNode filter = ImmutableNodes.fromInstanceId(ctx, - YangInstanceIdentifier.create(rootContainer, outerContainer, augmentation, augmentedLeaf), leaf); - assertEquals(expectedFilter, filter); - } - - @Test - @Deprecated(since = "7.0.12", forRemoval = true) - public void testInAugmentLeafOverride() { - final LeafNode lastLeaf = Builders.leafBuilder().withNodeIdentifier(augmentedLeaf) - .withValue("randomValue").build(); - - final ContainerNode expectedFilter = Builders - .containerBuilder() - .withNodeIdentifier(rootContainer) - .withChild( - Builders.containerBuilder() - .withNodeIdentifier(outerContainer) - .withChild( - Builders.augmentationBuilder().withNodeIdentifier(augmentation) - .withChild(lastLeaf).build()).build()).build(); - - final NormalizedNode filter = ImmutableNodes.fromInstanceId(ctx, - YangInstanceIdentifier.create(rootContainer, outerContainer, augmentation, augmentedLeaf), lastLeaf); - assertEquals(expectedFilter, filter); - } - - @Test - @Deprecated(since = "7.0.12", forRemoval = true) - public void testListChoice() { - final LeafNode leaf = Builders.leafBuilder().withNodeIdentifier(leafFromCase).withValue("").build(); - final ContainerNode expectedFilter = Builders - .containerBuilder() - .withNodeIdentifier(rootContainer) - .withChild( - Builders.mapBuilder() - .withNodeIdentifier(outerList) - .withChild( - Builders.mapEntryBuilder() - .withNodeIdentifier(outerListWithKey) - .withChild( - Builders.leafBuilder() - .withNodeIdentifier( - new NodeIdentifier(ID)) - .withValue(1).build()) - .withChild( - Builders.choiceBuilder() - .withNodeIdentifier(choice) - .withChild(leaf) - .build()) - .build()) - .build()) - .build(); - - final NormalizedNode filter = ImmutableNodes.fromInstanceId(ctx, - YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey, choice, leafFromCase), leaf); - assertEquals(expectedFilter, filter); - } - - @Test - @Deprecated(since = "7.0.12", forRemoval = true) - public void testTopContainerLastChildOverride() { - final ContainerNode expectedStructure = Builders - .containerBuilder() - .withNodeIdentifier(rootContainer) - .withChild( - Builders.mapBuilder() - .withNodeIdentifier(outerList) - .withChild( - Builders.mapEntryBuilder() - .withNodeIdentifier(outerListWithKey) - .withChild( - Builders.leafBuilder() - .withNodeIdentifier( - new NodeIdentifier(ID)) - .withValue(1).build()) - .withChild( - Builders.choiceBuilder() - .withNodeIdentifier(choice) - .withChild( - Builders.leafBuilder() - .withNodeIdentifier(leafFromCase) - .withValue("") - .build()).build()).build()).build()) - .build(); - - final NormalizedNode filter = ImmutableNodes.fromInstanceId(ctx, - YangInstanceIdentifier.create(rootContainer), expectedStructure); - assertEquals(expectedStructure, filter); - } - @Test public void testListLastChildOverride() { - final MapEntryNode outerListEntry = Builders - .mapEntryBuilder() - .withNodeIdentifier(outerListWithKey) - .withChild( - Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(ID)) - .withValue(1).build()).build(); - final MapNode lastChild = Builders.mapBuilder().withNodeIdentifier(outerList).withChild(outerListEntry) - .build(); - final ContainerNode expectedStructure = Builders.containerBuilder().withNodeIdentifier(rootContainer) - .withChild(lastChild).build(); - - NormalizedNode filter = ImmutableNodes.fromInstanceId(ctx, - YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey), outerListEntry); - assertEquals(expectedStructure, filter); - filter = ImmutableNodes.fromInstanceId(ctx, - YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey)); - assertEquals(expectedStructure, filter); + assertEquals(Builders.containerBuilder() + .withNodeIdentifier(rootContainer) + .withChild(Builders.mapBuilder() + .withNodeIdentifier(outerList) + .withChild(Builders.mapEntryBuilder() + .withNodeIdentifier(outerListWithKey) + .withChild(Builders.leafBuilder() + .withNodeIdentifier(new NodeIdentifier(ID)) + .withValue(1) + .build()) + .build()) + .build()) + .build(), + ImmutableNodes.fromInstanceId(ctx, + YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey))); } @Test public void testLeafList() { - final ContainerNode expectedFilter = Builders - .containerBuilder() - .withNodeIdentifier(rootContainer) - .withChild( - Builders.orderedLeafSetBuilder() - .withNodeIdentifier(leafList) - .withChild( - Builders.leafSetEntryBuilder().withNodeIdentifier(leafListWithValue) - .withValue(leafListWithValue.getValue()).build()).build()).build(); - - final NormalizedNode filter = ImmutableNodes.fromInstanceId(ctx, - YangInstanceIdentifier.create(rootContainer, leafList, leafListWithValue)); - assertEquals(expectedFilter, filter); + assertEquals(Builders.containerBuilder() + .withNodeIdentifier(rootContainer) + .withChild(Builders.orderedLeafSetBuilder() + .withNodeIdentifier(leafList) + .withChild(Builders.leafSetEntryBuilder() + .withNodeIdentifier(leafListWithValue) + .withValue(leafListWithValue.getValue()) + .build()) + .build()) + .build(), + ImmutableNodes.fromInstanceId(ctx, + YangInstanceIdentifier.create(rootContainer, leafList, leafListWithValue))); } @Test -- 2.36.6