Remove MountPointIdentifier 15/106015/3
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 17 May 2023 16:17:45 +0000 (18:17 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 17 May 2023 17:58:22 +0000 (19:58 +0200)
Remove MountPointIdentifier as the last remnant of rfc8528-data-api.
This forces an adjustment to yang-data-codec-binfmt, which can no longer
read this PathArgument.

It also allows us to seal YangInstanceIdentifier.PathArgument, not
allowing any external implementations of it.

JIRA: YANGTOOLS-1172
Change-Id: Ibdbb5d2eb9d63f3d0e8a95065e8124ce6818a7af
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
29 files changed:
artifacts/pom.xml
codec/yang-data-codec-binfmt/pom.xml
codec/yang-data-codec-binfmt/src/main/java/module-info.java
codec/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractLithiumDataInput.java
codec/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractMagnesiumDataInput.java
codec/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/AbstractMagnesiumDataOutput.java
codec/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/ForwardingNormalizedNodeDataInput.java
codec/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/LegacyMountPointIdentifier.java
codec/yang-data-codec-binfmt/src/main/java/org/opendaylight/yangtools/yang/data/codec/binfmt/NormalizedNodeDataInput.java
codec/yang-data-codec-gson/src/main/java/module-info.java
codec/yang-data-codec-xml/src/main/java/module-info.java
data/pom.xml
data/rfc8528-data-api/pom.xml [deleted file]
data/rfc8528-data-api/src/main/java/module-info.java [deleted file]
data/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MPIv1.java [deleted file]
data/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointIdentifier.java [deleted file]
data/rfc8528-data-util/pom.xml
data/rfc8528-data-util/src/main/java/module-info.java
data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/YangInstanceIdentifier.java
data/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodesTest.java
data/yang-data-impl/pom.xml
data/yang-data-impl/src/main/java/module-info.java
data/yang-data-tree-ri/src/test/java/org/opendaylight/yangtools/yang/data/tree/leafref/LeafRefContextTreeBuilderTest.java
data/yang-data-tree-spi/src/test/java/org/opendaylight/yangtools/yang/data/tree/spi/DataTreeCandidatesTest.java
data/yang-data-tree-spi/src/test/java/org/opendaylight/yangtools/yang/data/tree/spi/NormalizedNodeDataTreeCandidateNodeTest.java
data/yang-data-util/pom.xml
data/yang-data-util/src/main/java/module-info.java
docs/pom.xml
features/odl-yangtools-data-api/pom.xml

index f88e14f710610731b620826436414b968de726ce..73d19ea49a6874d6b3bc097e1907be8a355a18c8 100644 (file)
                 <version>11.0.0-SNAPSHOT</version>
             </dependency>
 
-            <dependency>
-                <groupId>org.opendaylight.yangtools</groupId>
-                <artifactId>rfc8528-data-api</artifactId>
-                <version>11.0.0-SNAPSHOT</version>
-            </dependency>
             <dependency>
                 <groupId>org.opendaylight.yangtools</groupId>
                 <artifactId>rfc8528-data-util</artifactId>
index bc0925c0cc9afccbd178815774b4e830980a5b4a..83d232f0b25349590816429e04d060066f2d2530 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-model-api</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc8528-data-api</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-data-tree-api</artifactId>
index 03b464bd44584f542e164a83650a1b95f2f6ed75..ec77f1070614c6ec6630d5ec2efc36e25d5f6f52 100644 (file)
@@ -16,7 +16,6 @@ module org.opendaylight.yangtools.yang.data.codec.binfmt {
     requires transitive org.opendaylight.yangtools.yang.data.tree.spi;
     requires java.xml;
     requires org.opendaylight.yangtools.yang.data.impl;
-    requires org.opendaylight.yangtools.rfc8528.data.api;
     requires org.slf4j;
 
     // Annotations
index eec7c9beeff83431cb474bb6c2fcf8ed8848bc93..7aacdb81b4f6209c738753aaea40154e10499a6f 100644 (file)
@@ -26,6 +26,7 @@ import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.dom.DOMSource;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.concepts.Either;
 import org.opendaylight.yangtools.util.ImmutableOffsetMapTemplate;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Empty;
@@ -384,4 +385,10 @@ abstract class AbstractLithiumDataInput extends AbstractNormalizedNodeDataInput
             default -> throw new InvalidNormalizedNodeStreamException("Unexpected PathArgument type " + type);
         };
     }
+
+    @Override
+    @Deprecated(since = "11.0.0", forRemoval = true)
+    public final Either<PathArgument, LegacyPathArgument> readLegacyPathArgument() throws IOException {
+        return Either.ofFirst(readPathArgument());
+    }
 }
index d334cade1ab322a4a3a20a58e6183c488f972c74..9213467f7293c4d7360167d2e2a38a5d15205bb3 100644 (file)
@@ -26,7 +26,7 @@ import java.util.List;
 import java.util.concurrent.ExecutionException;
 import javax.xml.transform.dom.DOMSource;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
+import org.opendaylight.yangtools.concepts.Either;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Empty;
@@ -375,22 +375,24 @@ abstract class AbstractMagnesiumDataInput extends AbstractNormalizedNodeDataInpu
     }
 
     @Override
-    public final PathArgument readPathArgument() throws IOException {
+    @Deprecated(since = "11.0.0", forRemoval = true)
+    public final Either<PathArgument, LegacyPathArgument> readLegacyPathArgument() throws IOException {
         final byte header = input.readByte();
         return switch (header & MagnesiumPathArgument.TYPE_MASK) {
-            case MagnesiumPathArgument.AUGMENTATION_IDENTIFIER -> readAugmentationIdentifier(header);
+            case MagnesiumPathArgument.AUGMENTATION_IDENTIFIER -> Either.ofFirst(readAugmentationIdentifier(header));
             case MagnesiumPathArgument.NODE_IDENTIFIER -> {
                 verifyPathIdentifierOnly(header);
-                yield readNodeIdentifier(header);
+                yield Either.ofFirst(readNodeIdentifier(header));
             }
-            case MagnesiumPathArgument.NODE_IDENTIFIER_WITH_PREDICATES -> readNodeIdentifierWithPredicates(header);
+            case MagnesiumPathArgument.NODE_IDENTIFIER_WITH_PREDICATES ->
+                Either.ofFirst(readNodeIdentifierWithPredicates(header));
             case MagnesiumPathArgument.NODE_WITH_VALUE -> {
                 verifyPathIdentifierOnly(header);
-                yield readNodeWithValue(header);
+                yield Either.ofFirst(readNodeWithValue(header));
             }
             case MagnesiumPathArgument.MOUNTPOINT_IDENTIFIER -> {
                 verifyPathIdentifierOnly(header);
-                yield MountPointIdentifier.create(readNodeIdentifier(header).getNodeType());
+                yield Either.ofSecond(new LegacyMountPointIdentifier(readNodeIdentifier(header).getNodeType()));
             }
             default -> throw new InvalidNormalizedNodeStreamException("Unexpected PathArgument header " + header);
         };
index 41e61b5bb65f90174bef09e5368e27dabe0d566d..1b9210d846802556af1258ff68b103e5396d0878 100644 (file)
@@ -28,7 +28,6 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -237,8 +236,6 @@ abstract class AbstractMagnesiumDataOutput extends AbstractNormalizedNodeDataOut
             writeAugmentationIdentifier(augid);
         } else if (pathArgument instanceof NodeWithValue<?> niv) {
             writeNodeWithValue(niv);
-        } else if (pathArgument instanceof MountPointIdentifier mpid) {
-            writeMountPointIdentifier(mpid);
         } else {
             throw new IOException("Unhandled PathArgument " + pathArgument);
         }
@@ -270,10 +267,6 @@ abstract class AbstractMagnesiumDataOutput extends AbstractNormalizedNodeDataOut
         writePathArgumentQName(identifier.getNodeType(), MagnesiumPathArgument.NODE_IDENTIFIER);
     }
 
-    private void writeMountPointIdentifier(final MountPointIdentifier identifier) throws IOException {
-        writePathArgumentQName(identifier.getNodeType(), MagnesiumPathArgument.MOUNTPOINT_IDENTIFIER);
-    }
-
     private void writeNodeIdentifierWithPredicates(final NodeIdentifierWithPredicates identifier) throws IOException {
         final int size = identifier.size();
         if (size < 5) {
index 9527523b3de7e5ced2d74464ce985f9eccf67ced..779b0f6422a9f4bfdcbcdbf84e23657878715318 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.yangtools.yang.data.codec.binfmt;
 
 import java.io.IOException;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.concepts.Either;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
@@ -52,6 +53,12 @@ abstract class ForwardingNormalizedNodeDataInput extends ForwardingDataInput imp
         return delegate().readPathArgument();
     }
 
+    @Override
+    @Deprecated(since = "11.0.0", forRemoval = true)
+    public final Either<PathArgument, LegacyPathArgument> readLegacyPathArgument() throws IOException {
+        return delegate().readLegacyPathArgument();
+    }
+
     @Override
     public final SchemaNodeIdentifier readSchemaNodeIdentifier() throws IOException {
         return delegate().readSchemaNodeIdentifier();
index be4fa47844e8aa020863412c8eb2698b0df7e2bd..03b35baa62315179ca243b54f74208892042fb9f 100644 (file)
@@ -10,11 +10,10 @@ package org.opendaylight.yangtools.yang.data.codec.binfmt;
 import static java.util.Objects.requireNonNull;
 
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
 import org.opendaylight.yangtools.yang.common.QName;
 
 /**
- * Representation of legacy {@link MountPointIdentifier}.
+ * Representation of legacy {@code org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier}.
  */
 @Deprecated(since = "11.0.0")
 public record LegacyMountPointIdentifier(@NonNull QName qname) implements LegacyPathArgument {
index a5827238941a20668dfe25a05943714f9d6ce821..4ca1668a2dad408881d097eadf1f2ebd7ace62e0 100644 (file)
@@ -79,7 +79,13 @@ public interface NormalizedNodeDataInput extends QNameAwareDataInput {
      * @return A PathArgument
      * @throws IOException if an error occurs
      */
-    @NonNull PathArgument readPathArgument() throws IOException;
+    default @NonNull PathArgument readPathArgument() throws IOException {
+        final var legacy = readLegacyPathArgument();
+        if (legacy.isFirst()) {
+            return legacy.getFirst();
+        }
+        throw new IOException(legacy.getSecond() + " does not have a representation");
+    }
 
     /**
      * Read a {@link PathArgument} or a {@link LegacyPathArgument} from the reader.
@@ -88,9 +94,7 @@ public interface NormalizedNodeDataInput extends QNameAwareDataInput {
      * @throws IOException if an error occurs
      */
     @Deprecated(since = "11.0.0")
-    default Either<PathArgument, LegacyPathArgument> readLegacyPathArgument() throws IOException {
-        return Either.ofFirst(readPathArgument());
-    }
+    @NonNull Either<PathArgument, LegacyPathArgument> readLegacyPathArgument() throws IOException;
 
     @NonNull SchemaNodeIdentifier readSchemaNodeIdentifier() throws IOException;
 
index 3d3da91d0cb51c403950c6d6c28ade7aa02269ab..9fa22b613bafa537ebdfd31abada0780dec69856 100644 (file)
@@ -10,7 +10,6 @@ module org.opendaylight.yangtools.yang.data.codec.gson {
 
     requires transitive com.google.gson;
     requires transitive org.opendaylight.yangtools.yang.data.api;
-    requires transitive org.opendaylight.yangtools.rfc8528.data.api;
 
     requires com.google.common;
     requires java.xml;
index 50f7e74c2e59d6c496cc6fef51e52478df9944fa..b826fdf7a5dd85cdacd08d22cde7079b3329ac95 100644 (file)
@@ -11,7 +11,6 @@ module org.opendaylight.yangtools.yang.data.codec.xml {
     requires transitive org.opendaylight.yangtools.yang.data.api;
     requires transitive org.opendaylight.yangtools.yang.data.util;
     requires transitive org.opendaylight.yangtools.yang.model.api;
-    requires transitive org.opendaylight.yangtools.rfc8528.data.api;
 
     requires java.xml;
     requires com.google.common;
@@ -21,7 +20,6 @@ module org.opendaylight.yangtools.yang.data.codec.xml {
     requires org.opendaylight.yangtools.yang.data.impl;
     requires org.opendaylight.yangtools.rfc7952.model.api;
     requires org.opendaylight.yangtools.rfc8528.model.api;
-    requires org.opendaylight.yangtools.rfc8528.data.util;
     requires org.slf4j;
 
     // Annotations
index f9c4b91b8414b18e329dd4a514498d77751701bb..3561ea6f20686c90c153ccad66212527a9e7516f 100644 (file)
@@ -40,7 +40,6 @@
         <module>yang-data-tree-ri</module>
 
         <!-- RFC8528 (mount-point) metamodel support -->
-        <module>rfc8528-data-api</module>
         <module>rfc8528-data-util</module>
     </modules>
 </project>
diff --git a/data/rfc8528-data-api/pom.xml b/data/rfc8528-data-api/pom.xml
deleted file mode 100644 (file)
index b1a5911..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!--
- Copyright (c) 2019 PANTHEON.tech, s.r.o. 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
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.opendaylight.yangtools</groupId>
-        <artifactId>bundle-parent</artifactId>
-        <version>11.0.0-SNAPSHOT</version>
-        <relativePath>../../bundle-parent</relativePath>
-    </parent>
-
-    <artifactId>rfc8528-data-api</artifactId>
-    <packaging>bundle</packaging>
-    <name>${project.artifactId}</name>
-    <description>RFC8528 data model extensions</description>
-
-    <dependencies>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>concepts</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>util</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>yang-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>yang-data-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>yang-model-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>yang-parser-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc8528-model-api</artifactId>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/data/rfc8528-data-api/src/main/java/module-info.java b/data/rfc8528-data-api/src/main/java/module-info.java
deleted file mode 100644 (file)
index 425b3dc..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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
- */
-// 'rfc8528' in the name ends with a digit
-@SuppressWarnings("module")
-module org.opendaylight.yangtools.rfc8528.data.api {
-    exports org.opendaylight.yangtools.rfc8528.data.api;
-
-    requires transitive org.opendaylight.yangtools.concepts;
-    requires transitive org.opendaylight.yangtools.yang.common;
-    requires transitive org.opendaylight.yangtools.yang.data.api;
-    requires transitive org.opendaylight.yangtools.yang.model.api;
-    requires transitive org.opendaylight.yangtools.yang.parser.api;
-    requires transitive org.opendaylight.yangtools.rfc8528.model.api;
-    requires org.opendaylight.yangtools.util;
-
-    // Annotations
-    requires static transitive org.eclipse.jdt.annotation;
-}
diff --git a/data/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MPIv1.java b/data/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MPIv1.java
deleted file mode 100644 (file)
index 879d1ce..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2019 PANTHEON.tech s.r.o. 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.rfc8528.data.api;
-
-import static java.util.Objects.requireNonNull;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.common.QName;
-
-final class MPIv1 implements Externalizable {
-    @java.io.Serial
-    private static final long serialVersionUID = 1L;
-
-    private QName qname;
-
-    @SuppressWarnings("checkstyle:redundantModifier")
-    public MPIv1() {
-        // For Externalizable
-    }
-
-    MPIv1(final @NonNull QName qname) {
-        this.qname = requireNonNull(qname);
-    }
-
-    @Override
-    public void writeExternal(final ObjectOutput out) throws IOException {
-        qname.writeTo(out);
-    }
-
-    @Override
-    public void readExternal(final ObjectInput in) throws IOException {
-        qname = QName.readFrom(in);
-    }
-
-    @java.io.Serial
-    private Object readResolve() {
-        return MountPointIdentifier.create(qname);
-    }
-}
diff --git a/data/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointIdentifier.java b/data/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointIdentifier.java
deleted file mode 100644 (file)
index 1c7e5ca..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2019 PANTHEON.tech s.r.o. 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.rfc8528.data.api;
-
-import com.google.common.annotations.Beta;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.yangtools.concepts.WritableObject;
-import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel;
-import org.opendaylight.yangtools.util.AbstractIdentifier;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-
-@Beta
-@NonNullByDefault
-public final class MountPointIdentifier extends AbstractIdentifier<MountPointLabel>
-        implements PathArgument, WritableObject {
-    @java.io.Serial
-    private static final long serialVersionUID = 1L;
-
-    private static final LoadingCache<QName, MountPointIdentifier> CACHE = CacheBuilder.newBuilder().weakValues()
-        .build(new CacheLoader<QName, MountPointIdentifier>() {
-            @Override
-            public MountPointIdentifier load(final QName key) {
-                return new MountPointIdentifier(MountPointLabel.create(key));
-            }
-        });
-
-    public MountPointIdentifier(final MountPointLabel label) {
-        super(label);
-    }
-
-    public static MountPointIdentifier of(final QName qname) {
-        return new MountPointIdentifier(new MountPointLabel(qname));
-    }
-
-    public static MountPointIdentifier create(final QName qname) {
-        final MountPointIdentifier existing = CACHE.getIfPresent(qname);
-        return existing != null ? existing : CACHE.getUnchecked(qname.intern());
-    }
-
-    public static MountPointIdentifier readFrom(final DataInput in) throws IOException {
-        return create(QName.readFrom(in));
-    }
-
-    public MountPointLabel getLabel() {
-        return getValue();
-    }
-
-    @Override
-    public void writeTo(final DataOutput out) throws IOException {
-        getValue().writeTo(out);
-    }
-
-    @java.io.Serial
-    private Object writeReplace() {
-        return new MPIv1(getLabel().qname());
-    }
-
-    @Override
-    @SuppressWarnings("checkstyle:parameterName")
-    public int compareTo(final @Nullable PathArgument o) {
-        if (o instanceof AugmentationIdentifier) {
-            // Augmentations are strictly more, in keeping of their compare
-            return 1;
-        }
-        if (!(o instanceof MountPointIdentifier other)) {
-            // TODO: Yeah, okay, this declaration is not quite right, but we are following AugmentationIdenfier's lead
-            return -1;
-        }
-        return getNodeType().compareTo(other.getNodeType());
-    }
-
-    @Override
-    public QName getNodeType() {
-        return getLabel().qname();
-    }
-
-    @Override
-    public String toRelativeString(final @Nullable PathArgument previous) {
-        return toString();
-    }
-}
index 033510425989172595fed0b752a2c5adbfc945ee..adf5bb7e8f410623e7300c84ae7f0d7cb595878e 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-parser-api</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc8528-data-api</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>rfc8528-model-api</artifactId>
index f58d13121277e3983885dd3355c3b10929a31cc1..7e512cb1297eb9bed0385af768757fa9b56b46d2 100644 (file)
@@ -16,7 +16,6 @@ module org.opendaylight.yangtools.rfc8528.data.util {
     requires transitive org.opendaylight.yangtools.yang.model.api;
     requires transitive org.opendaylight.yangtools.yang.model.spi;
     requires transitive org.opendaylight.yangtools.yang.parser.api;
-    requires transitive org.opendaylight.yangtools.rfc8528.data.api;
 
     requires org.opendaylight.yangtools.rfc8528.model.api;
     requires org.opendaylight.yangtools.yang.common;
index f691310d279298dc88ac8f23cc91dafffdb5b28c..468322b1d5c43abf8e7133d5c515e59f59535ab4 100644 (file)
@@ -21,7 +21,6 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Sets;
-import java.io.Serial;
 import java.io.Serializable;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.VarHandle;
@@ -78,7 +77,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
  */
 public abstract sealed class YangInstanceIdentifier implements HierarchicalIdentifier<YangInstanceIdentifier>
         permits FixedYangInstanceIdentifier, StackedYangInstanceIdentifier {
-    @Serial
+    @java.io.Serial
     private static final long serialVersionUID = 4L;
     private static final VarHandle TO_STRING_CACHE;
     private static final VarHandle HASH;
@@ -395,7 +394,7 @@ public abstract sealed class YangInstanceIdentifier implements HierarchicalIdent
 
     abstract int computeHashCode();
 
-    @Serial
+    @java.io.Serial
     final Object writeReplace() {
         return new YIDv1(this);
     }
@@ -454,7 +453,8 @@ public abstract sealed class YangInstanceIdentifier implements HierarchicalIdent
      * <li>{@link NodeWithValue} - Identifier of leaf-list entry
      * </ul>
      */
-    public interface PathArgument extends Comparable<PathArgument>, Immutable, Serializable {
+    public sealed interface PathArgument extends Comparable<PathArgument>, Immutable, Serializable
+            permits AbstractPathArgument, AugmentationIdentifier {
         /**
          * Returns unique QName of data node as defined in YANG Schema, if available.
          *
@@ -475,7 +475,7 @@ public abstract sealed class YangInstanceIdentifier implements HierarchicalIdent
         @NonNull String toRelativeString(PathArgument previous);
     }
 
-    private abstract static class AbstractPathArgument implements PathArgument {
+    private abstract static sealed class AbstractPathArgument implements PathArgument {
         private static final long serialVersionUID = -4546547994250849340L;
         private final @NonNull QName nodeType;
         private transient volatile int hashValue;
@@ -576,7 +576,7 @@ public abstract sealed class YangInstanceIdentifier implements HierarchicalIdent
      * Composite path argument identifying a {@link org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode} leaf
      * overall data tree.
      */
-    public abstract static class NodeIdentifierWithPredicates extends AbstractPathArgument {
+    public abstract static sealed class NodeIdentifierWithPredicates extends AbstractPathArgument {
         @Beta
         public static final class Singleton extends NodeIdentifierWithPredicates {
             private static final long serialVersionUID = 1L;
index f1ab0fdca907f10bcfb9f3254c16876e8e32ba4f..48b0ed0fa8ec9992810b4cdc18ca2a67601d40e8 100644 (file)
@@ -32,7 +32,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum
 public class NormalizedNodesTest {
     @Test
     public void testGetDirectChild() {
-        final var mockedPathArgument = mock(PathArgument.class);
+        final var mockedPathArgument = new NodeIdentifier(QName.create("test", "test"));
 
         final var mockedLeafNode = mock(LeafNode.class);
         assertEquals(Optional.empty(), NormalizedNodes.getDirectChild(mockedLeafNode, mockedPathArgument));
index 4a5c39721ddc9e9bdad9379ab17ec5a5aaa5e45e..306b3f39b8ef2b0182569bb27f629c2bb479e2d4 100644 (file)
         </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc8528-data-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc8528-data-util</artifactId>
+            <artifactId>rfc8528-model-api</artifactId>
         </dependency>
 
         <dependency>
index 99d150471f78c7c26a0bbc7dafb77ec3fb7c272e..760411c06ff6bf5bb1fc82dcacd9a4e496eaa6d1 100644 (file)
@@ -22,9 +22,7 @@ module org.opendaylight.yangtools.yang.data.impl {
     requires transitive org.opendaylight.yangtools.yang.data.util;
     requires transitive org.opendaylight.yangtools.yang.model.api;
     requires transitive org.opendaylight.yangtools.yang.model.spi;
-    requires transitive org.opendaylight.yangtools.rfc8528.data.api;
 
-    requires org.opendaylight.yangtools.rfc8528.data.util;
     requires org.opendaylight.yangtools.yang.model.util;
     requires org.opendaylight.yangtools.util;
     requires org.slf4j;
index 469d3022fa14bb259075a21c571fb4684ec3b7ef..801c44ae144ce279b89c850f1f970548c590caec 100644 (file)
@@ -26,7 +26,6 @@ import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
-import org.opendaylight.yangtools.yang.parser.api.YangParserException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
@@ -210,7 +209,6 @@ public class LeafRefContextTreeBuilderTest {
         final IllegalStateException ise = assertThrows(IllegalStateException.class,
             () -> YangParserTestUtils.parseYangResourceDirectory("/leafref-context-test/incorrect-modules"));
         final Throwable ype = ise.getCause();
-        assertThat(ype, instanceOf(YangParserException.class));
         final Throwable reactor = ype.getCause();
         assertThat(reactor, instanceOf(ReactorException.class));
         final Throwable source = reactor.getCause();
index 5be065cb40187f62e02a0b94f3f81c3e28b2e75e..93dcf6d23b489919ddcc4a35bfcce3fbcef229c3 100644 (file)
@@ -28,7 +28,6 @@ import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 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.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.tree.api.CursorAwareDataTreeModification;
 import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate;
@@ -155,24 +154,20 @@ public class DataTreeCandidatesTest {
 
         final DataTreeCandidateNode mockedChildNode1 = mock(DataTreeCandidateNode.class);
         doReturn(ModificationType.DELETE).when(mockedChildNode1).getModificationType();
-        final PathArgument mockedPathArgument1 = mock(PathArgument.class);
-        doReturn(mockedPathArgument1).when(mockedChildNode1).getIdentifier();
+        doReturn(new NodeIdentifier(QName.create("test", "test1"))).when(mockedChildNode1).getIdentifier();
 
         final DataTreeCandidateNode mockedChildNode2 = mock(DataTreeCandidateNode.class);
         doReturn(ModificationType.WRITE).when(mockedChildNode2).getModificationType();
         final NormalizedNode mockedNormalizedNode = mock(NormalizedNode.class);
         doReturn(Optional.of(mockedNormalizedNode)).when(mockedChildNode2).getDataAfter();
-        final PathArgument mockedPathArgument2 = mock(PathArgument.class);
-        doReturn(mockedPathArgument2).when(mockedChildNode2).getIdentifier();
+        doReturn(new NodeIdentifier(QName.create("test", "test2"))).when(mockedChildNode2).getIdentifier();
 
         final DataTreeCandidateNode mockedChildNode3 = mock(DataTreeCandidateNode.class);
         doReturn(ModificationType.SUBTREE_MODIFIED).when(mockedChildNode3).getModificationType();
         final DataTreeCandidateNode mockedChildNode3ChildNode = mock(DataTreeCandidateNode.class);
         doReturn(ModificationType.DELETE).when(mockedChildNode3ChildNode).getModificationType();
-        final PathArgument mockedPathArgument31 = mock(PathArgument.class);
-        final PathArgument mockedPathArgument3 = mock(PathArgument.class);
-        doReturn(mockedPathArgument3).when(mockedChildNode3).getIdentifier();
-        doReturn(mockedPathArgument31).when(mockedChildNode3ChildNode).getIdentifier();
+        doReturn(new NodeIdentifier(QName.create("test", "test3"))).when(mockedChildNode3).getIdentifier();
+        doReturn(new NodeIdentifier(QName.create("test", "test4"))).when(mockedChildNode3ChildNode).getIdentifier();
         doReturn(List.of(mockedChildNode3ChildNode)).when(mockedChildNode3).getChildNodes();
 
         final List<DataTreeCandidateNode> childNodes = List.of(mockedChildNode1, mockedChildNode2, mockedChildNode3);
index d043545fc8d65e6c1daef6eac718082bf945795e..f40aec5d669a3aa4150ce71cf4bdbdfd9e74ba39 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.yang.data.tree.spi;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doCallRealMethod;
@@ -19,6 +20,8 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
 import org.junit.Test;
+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.DistinctNodeContainer;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -32,9 +35,9 @@ public class NormalizedNodeDataTreeCandidateNodeTest {
         final NormalizedNodeDataTreeCandidateNode normalizedNodeDataTreeCandidateNode = new
                 NormalizedNodeDataTreeCandidateNode(mockedNormalizedNode);
 
-        final PathArgument mockedPathArgument = mock(PathArgument.class);
+        final PathArgument mockedPathArgument = new NodeIdentifier(QName.create("test", "test"));
         doReturn(mockedPathArgument).when(mockedNormalizedNode).getIdentifier();
-        assertEquals(mockedPathArgument, normalizedNodeDataTreeCandidateNode.getIdentifier());
+        assertSame(mockedPathArgument, normalizedNodeDataTreeCandidateNode.getIdentifier());
 
         final Collection<DataTreeCandidateNode> childNodes = normalizedNodeDataTreeCandidateNode.getChildNodes();
         assertTrue(childNodes instanceof List);
index bf9706aa7e6e0b690dbe236829d781ca99a63fb6..a36fd3f5db3cba7b52437b215550a2090bff5133 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-xpath-api</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc8528-data-api</artifactId>
-        </dependency>
 
         <!-- Test dependencies -->
         <dependency>
index f654c3019d79e1d5d8b9e8482b0a06da630c851b..23cb81d63ca1733ec6c9f21febdbfa1dbc97229b 100644 (file)
@@ -17,7 +17,6 @@ module org.opendaylight.yangtools.yang.data.util {
     requires transitive org.opendaylight.yangtools.yang.model.spi;
     requires transitive org.opendaylight.yangtools.yang.model.util;
     requires transitive org.opendaylight.yangtools.yang.xpath.api;
-    requires transitive org.opendaylight.yangtools.rfc8528.data.api;
 
     requires java.xml;
     requires org.opendaylight.yangtools.yang.parser.api;
index 5afc139db263b2f7af126bcef00853e9a7496350..b6a5d4caf508ecb04d47e52ab7b911431a05b75f 100644 (file)
             <artifactId>rfc8040-parser-support</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc8528-data-api</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>rfc8528-data-util</artifactId>
index 70da98e2e62530a2029d29a056206938e8e32cec..7e61b0316f7926161358d20ff311dec62d589641 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-data-util</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>rfc8528-data-api</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>rfc8528-data-util</artifactId>