From effa80094c9c1ad7450fcc822c00b95ba5092540 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 20 May 2023 22:02:10 +0200 Subject: [PATCH] Simplify *List* context nodes Ordered/Unordered specializations do not make a difference at the end of the day. Also we have a 'List'/'Map' parlance which is not exposed to the outside world. Clean this up, eliminating two classes in the process. JIRA: YANGTOOLS-1413 Change-Id: Ief920ece71809c7d6134b73ed49bf532652dfdd5 Signed-off-by: Robert Varga --- .../legacy/AbstractDataSchemaContextNode.java | 18 ++++-------------- .../legacy/AbstractListItemContextNode.java | 4 ++-- .../legacy/AbstractListLikeContextNode.java | 2 +- ...Node.java => LeafListMixinContextNode.java} | 9 ++++----- .../util/impl/legacy/ListItemContextNode.java | 12 +++--------- ...textNode.java => ListMixinContextNode.java} | 8 ++++---- ...ontextNode.java => MapItemContextNode.java} | 16 +++++++++++----- ...ntextNode.java => MapMixinContextNode.java} | 12 ++++++------ .../OrderedLeafListMixinContextNode.java | 16 ---------------- .../legacy/OrderedMapMixinContextNode.java | 16 ---------------- .../yang/data/util/impl/legacy/YT1412Test.java | 6 +++--- 11 files changed, 38 insertions(+), 81 deletions(-) rename data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/{UnorderedLeafListMixinContextNode.java => LeafListMixinContextNode.java} (77%) rename data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/{UnkeyedListMixinContextNode.java => ListMixinContextNode.java} (84%) rename data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/{UnkeyedListItemContextNode.java => MapItemContextNode.java} (55%) rename data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/{UnorderedMapMixinContextNode.java => MapMixinContextNode.java} (73%) delete mode 100644 data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/OrderedLeafListMixinContextNode.java delete mode 100644 data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/OrderedMapMixinContextNode.java diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractDataSchemaContextNode.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractDataSchemaContextNode.java index a8cac8390b..469e2a4b24 100644 --- a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractDataSchemaContextNode.java +++ b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractDataSchemaContextNode.java @@ -128,7 +128,7 @@ public abstract class AbstractDataSchemaContextNode implements DataSchemaContext } else if (schema instanceof ChoiceSchemaNode choice) { return new ChoiceNodeContextNode(choice); } else if (schema instanceof LeafListSchemaNode leafList) { - return fromLeafListSchemaNode(leafList); + return new LeafListMixinContextNode(leafList); } else if (schema instanceof AnydataSchemaNode anydata) { return new AnydataContextNode(anydata); } else if (schema instanceof AnyxmlSchemaNode anyxml) { @@ -149,7 +149,7 @@ public abstract class AbstractDataSchemaContextNode implements DataSchemaContext } else if (schema instanceof ChoiceSchemaNode choice) { return new ChoiceNodeContextNode(choice); } else if (schema instanceof LeafListSchemaNode leafList) { - return fromLeafListSchemaNode(leafList); + return new LeafListMixinContextNode(leafList); } else if (schema instanceof AnydataSchemaNode anydata) { return new AnydataContextNode(anydata); } else if (schema instanceof AnyxmlSchemaNode anyxml) { @@ -162,19 +162,9 @@ public abstract class AbstractDataSchemaContextNode implements DataSchemaContext private static @NonNull AbstractDataSchemaContextNode fromListSchemaNode(final ListSchemaNode potential) { var keyDefinition = potential.getKeyDefinition(); if (keyDefinition.isEmpty()) { - return new UnkeyedListMixinContextNode(potential); - } else if (potential.isUserOrdered()) { - return new OrderedMapMixinContextNode(potential); + return new ListMixinContextNode(potential); } else { - return new UnorderedMapMixinContextNode(potential); + return new MapMixinContextNode(potential); } } - - private static @NonNull AbstractDataSchemaContextNode fromLeafListSchemaNode( - final LeafListSchemaNode potential) { - if (potential.isUserOrdered()) { - return new OrderedLeafListMixinContextNode(potential); - } - return new UnorderedLeafListMixinContextNode(potential); - } } diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractListItemContextNode.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractListItemContextNode.java index 674b2cc809..ffaea49fc5 100644 --- a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractListItemContextNode.java +++ b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractListItemContextNode.java @@ -13,8 +13,8 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; /** - * Abstract superclass for individual list items -- be it {@link ListItemContextNode} or - * {@link UnkeyedListItemContextNode}. + * Abstract superclass for individual list items -- be it {@link MapItemContextNode} or + * {@link ListItemContextNode}. */ abstract class AbstractListItemContextNode extends DataContainerContextNode { AbstractListItemContextNode(final PathArgument pathArgument, final DataNodeContainer container, diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractListLikeContextNode.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractListLikeContextNode.java index 3a32192023..6737e73bad 100644 --- a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractListLikeContextNode.java +++ b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractListLikeContextNode.java @@ -19,7 +19,7 @@ import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; * levels backed by a single {@link DataSchemaNode}. */ abstract sealed class AbstractListLikeContextNode extends AbstractMixinContextNode - permits UnkeyedListMixinContextNode, UnorderedLeafListMixinContextNode, UnorderedMapMixinContextNode { + permits ListMixinContextNode, LeafListMixinContextNode, MapMixinContextNode { AbstractListLikeContextNode(final DataSchemaNode schema) { super(schema); } diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/UnorderedLeafListMixinContextNode.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/LeafListMixinContextNode.java similarity index 77% rename from data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/UnorderedLeafListMixinContextNode.java rename to data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/LeafListMixinContextNode.java index afd643773b..36f48ac73e 100644 --- a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/UnorderedLeafListMixinContextNode.java +++ b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/LeafListMixinContextNode.java @@ -13,23 +13,22 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; -sealed class UnorderedLeafListMixinContextNode extends AbstractListLikeContextNode - permits OrderedLeafListMixinContextNode { +final class LeafListMixinContextNode extends AbstractListLikeContextNode { private final LeafListEntryContextNode innerOp; - UnorderedLeafListMixinContextNode(final LeafListSchemaNode schema) { + LeafListMixinContextNode(final LeafListSchemaNode schema) { super(schema); innerOp = new LeafListEntryContextNode(schema); } @Override - public final DataSchemaContextNode getChild(final PathArgument child) { + public DataSchemaContextNode getChild(final PathArgument child) { // FIXME: 10.0.0: reject null and invalid return child instanceof NodeWithValue ? innerOp : null; } @Override - public final DataSchemaContextNode getChild(final QName child) { + public DataSchemaContextNode getChild(final QName child) { // FIXME: requireNonNull, common code with UnkeyedListMixinNode return pathArgument().getNodeType().equals(child) ? innerOp : null; } diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/ListItemContextNode.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/ListItemContextNode.java index 2897ef054f..e2cdbc882b 100644 --- a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/ListItemContextNode.java +++ b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/ListItemContextNode.java @@ -7,17 +7,11 @@ */ package org.opendaylight.yangtools.yang.data.util.impl.legacy; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; final class ListItemContextNode extends AbstractListItemContextNode { ListItemContextNode(final ListSchemaNode schema) { - // FIXME: YANGTOOLS-1413: this is wrong: we have no predicates at all! - super(NodeIdentifierWithPredicates.of(schema.getQName()), schema, schema); + super(NodeIdentifier.create(schema.getQName()), schema, schema); } - - @Override - public boolean isKeyedEntry() { - return true; - } -} \ No newline at end of file +} diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/UnkeyedListMixinContextNode.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/ListMixinContextNode.java similarity index 84% rename from data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/UnkeyedListMixinContextNode.java rename to data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/ListMixinContextNode.java index ccd3825b7d..522be7b086 100644 --- a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/UnkeyedListMixinContextNode.java +++ b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/ListMixinContextNode.java @@ -13,12 +13,12 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; -final class UnkeyedListMixinContextNode extends AbstractListLikeContextNode { - private final UnkeyedListItemContextNode innerNode; +final class ListMixinContextNode extends AbstractListLikeContextNode { + private final ListItemContextNode innerNode; - UnkeyedListMixinContextNode(final ListSchemaNode list) { + ListMixinContextNode(final ListSchemaNode list) { super(list); - innerNode = new UnkeyedListItemContextNode(list); + innerNode = new ListItemContextNode(list); } @Override diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/UnkeyedListItemContextNode.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/MapItemContextNode.java similarity index 55% rename from data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/UnkeyedListItemContextNode.java rename to data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/MapItemContextNode.java index 803d8e3f66..2f9ded4bb9 100644 --- a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/UnkeyedListItemContextNode.java +++ b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/MapItemContextNode.java @@ -7,11 +7,17 @@ */ package org.opendaylight.yangtools.yang.data.util.impl.legacy; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; -final class UnkeyedListItemContextNode extends AbstractListItemContextNode { - UnkeyedListItemContextNode(final ListSchemaNode schema) { - super(NodeIdentifier.create(schema.getQName()), schema, schema); +final class MapItemContextNode extends AbstractListItemContextNode { + MapItemContextNode(final ListSchemaNode schema) { + // FIXME: YANGTOOLS-1413: this is wrong: we have no predicates at all! + super(NodeIdentifierWithPredicates.of(schema.getQName()), schema, schema); } -} + + @Override + public boolean isKeyedEntry() { + return true; + } +} \ No newline at end of file diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/UnorderedMapMixinContextNode.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/MapMixinContextNode.java similarity index 73% rename from data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/UnorderedMapMixinContextNode.java rename to data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/MapMixinContextNode.java index 45d8186bbe..13286d4f32 100644 --- a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/UnorderedMapMixinContextNode.java +++ b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/MapMixinContextNode.java @@ -13,22 +13,22 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; -sealed class UnorderedMapMixinContextNode extends AbstractListLikeContextNode permits OrderedMapMixinContextNode { - private final ListItemContextNode innerNode; +final class MapMixinContextNode extends AbstractListLikeContextNode { + private final MapItemContextNode innerNode; - UnorderedMapMixinContextNode(final ListSchemaNode list) { + MapMixinContextNode(final ListSchemaNode list) { super(list); - innerNode = new ListItemContextNode(list); + innerNode = new MapItemContextNode(list); } @Override - public final DataSchemaContextNode getChild(final PathArgument child) { + public DataSchemaContextNode getChild(final PathArgument child) { // FIXME: validate PathArgument type return innerNodeIfMatch(child.getNodeType()); } @Override - public final DataSchemaContextNode getChild(final QName child) { + public DataSchemaContextNode getChild(final QName child) { return innerNodeIfMatch(child); } diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/OrderedLeafListMixinContextNode.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/OrderedLeafListMixinContextNode.java deleted file mode 100644 index 3d70c9efe1..0000000000 --- a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/OrderedLeafListMixinContextNode.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2015 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.util.impl.legacy; - -import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; - -final class OrderedLeafListMixinContextNode extends UnorderedLeafListMixinContextNode { - OrderedLeafListMixinContextNode(final LeafListSchemaNode potential) { - super(potential); - } -} diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/OrderedMapMixinContextNode.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/OrderedMapMixinContextNode.java deleted file mode 100644 index c7d05749c3..0000000000 --- a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/OrderedMapMixinContextNode.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2015 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.util.impl.legacy; - -import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; - -final class OrderedMapMixinContextNode extends UnorderedMapMixinContextNode { - OrderedMapMixinContextNode(final ListSchemaNode list) { - super(list); - } -} diff --git a/data/yang-data-util/src/test/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/YT1412Test.java b/data/yang-data-util/src/test/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/YT1412Test.java index 114bf8840a..97533373c6 100644 --- a/data/yang-data-util/src/test/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/YT1412Test.java +++ b/data/yang-data-util/src/test/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/YT1412Test.java @@ -71,10 +71,10 @@ class YT1412Test { final var one = assertInstanceOf(ContainerContextNode.class, CONTEXT.getRoot().enterChild(stack, ONE)); assertInstanceOf(ContainerEffectiveStatement.class, stack.currentStatement()); - final var five = assertInstanceOf(UnkeyedListMixinContextNode.class, one.enterChild(FIVE, stack)); + final var five = assertInstanceOf(ListMixinContextNode.class, one.enterChild(FIVE, stack)); assertInstanceOf(ListEffectiveStatement.class, stack.currentStatement()); - assertInstanceOf(UnkeyedListItemContextNode.class, five.enterChild(FIVE, stack)); + assertInstanceOf(ListItemContextNode.class, five.enterChild(FIVE, stack)); assertInstanceOf(ListEffectiveStatement.class, stack.currentStatement()); assertEquals(Absolute.of(ONE, FIVE), stack.toSchemaNodeIdentifier()); @@ -109,7 +109,7 @@ class YT1412Test { void testEnterAugmentPath() { final var result = CONTEXT.enterPath(YangInstanceIdentifier.of(ONE, FIVE, FIVE)).orElseThrow(); - assertInstanceOf(UnkeyedListItemContextNode.class, result.node()); + assertInstanceOf(ListItemContextNode.class, result.node()); assertEquals(Absolute.of(ONE, FIVE), result.stack().toSchemaNodeIdentifier()); } -- 2.36.6