Fix SchemaNodeIdentifier parlance 94/87794/4
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 16 Feb 2020 14:29:21 +0000 (15:29 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 17 Feb 2020 09:13:54 +0000 (10:13 +0100)
There is no 'relative' schema node identifier, there is only a
'descendant' schema node identifier.

JIRA: YANGTOOLS-1083
Change-Id: Ief5fe0140daee2d126e40ac52cb1d560f3d968aa
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UniqueConstraint.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SchemaNodeIdentifier.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/UniqueEffectiveStatement.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/UniqueStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/UniqueEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/UniqueStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/UniqueStatementSupport.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug5946Test.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserNegativeTest.java

index 92ba5530f137f9b650203a47ecce207db61b838a..36f4853d88d76ca7ddf45d15b3e0339523012b7f 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang.model.api;
 import com.google.common.annotations.Beta;
 import java.util.Set;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
 
 /**
  * Interface describing YANG 'unique' constraint.
@@ -22,5 +22,5 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relat
  */
 @Beta
 public interface UniqueConstraint {
-    @NonNull Set<Relative> getTag();
+    @NonNull Set<Descendant> getTag();
 }
index 86be319fede9d6a50c7c8d3b8d45490d63faa24c..544af2230831757239d884381e0bfc21f1bb6830 100644 (file)
@@ -24,10 +24,10 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
 /**
- * Represents unique path to the every schema node inside the schema node identifier namespace.
+ * Represents unique path to the every schema node inside the schema node identifier namespace. This concept is defined
+ * in <a href="https://tools.ietf.org/html/rfc7950#section-6.5">RFC7950</a>.
  */
 public abstract class SchemaNodeIdentifier implements Immutable {
-
     /**
      * An absolute schema node identifier.
      */
@@ -48,10 +48,10 @@ public abstract class SchemaNodeIdentifier implements Immutable {
     }
 
     /**
-     * A relative schema node identifier.
+     * A descendant schema node identifier.
      */
-    public static final class Relative extends SchemaNodeIdentifier {
-        private Relative(final SchemaNodeIdentifier parent, final QName qname) {
+    public static final class Descendant extends SchemaNodeIdentifier {
+        private Descendant(final SchemaNodeIdentifier parent, final QName qname) {
             super(parent, qname);
         }
 
@@ -61,8 +61,8 @@ public abstract class SchemaNodeIdentifier implements Immutable {
         }
 
         @Override
-        public Relative createChild(final QName element) {
-            return new Relative(this, requireNonNull(element));
+        public Descendant createChild(final QName element) {
+            return new Descendant(this, requireNonNull(element));
         }
     }
 
@@ -79,7 +79,7 @@ public abstract class SchemaNodeIdentifier implements Immutable {
     /**
      * Shared instance of the "same" relative schema node.
      */
-    public static final Relative SAME = new Relative(null, null);
+    public static final Descendant SAME = new Descendant(null, null);
 
     /**
      * Parent path.
@@ -231,7 +231,7 @@ public abstract class SchemaNodeIdentifier implements Immutable {
      *         path from the schema node towards the root.
      */
     public Iterable<QName> getPathTowardsRoot() {
-        return () -> new UnmodifiableIterator<QName>() {
+        return () -> new UnmodifiableIterator<>() {
             private SchemaNodeIdentifier current = SchemaNodeIdentifier.this;
 
             @Override
index f487414a52583ce801f85d27f5addf40bf6e6c6d..649013b76710ab684b23930248db1ce06c524273 100644 (file)
@@ -10,9 +10,9 @@ package org.opendaylight.yangtools.yang.model.api.stmt;
 import com.google.common.annotations.Beta;
 import java.util.Set;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
 
 @Beta
-public interface UniqueEffectiveStatement extends EffectiveStatement<Set<Relative>, UniqueStatement> {
+public interface UniqueEffectiveStatement extends EffectiveStatement<Set<Descendant>, UniqueStatement> {
 
 }
index 774418028366db0b516fd00839633ccee78538d2..9d05a2402359d5eba4009a6df27026d99d5390e1 100644 (file)
@@ -11,11 +11,11 @@ import static com.google.common.base.Verify.verifyNotNull;
 
 import java.util.Set;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
 
-public interface UniqueStatement extends DeclaredStatement<Set<SchemaNodeIdentifier.Relative>> {
+public interface UniqueStatement extends DeclaredStatement<Set<SchemaNodeIdentifier.Descendant>> {
 
-    default Set<Relative> getTag() {
+    default Set<Descendant> getTag() {
         // FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here
         return verifyNotNull(argument());
     }
index ddab93d2e62858aa6837ee606eafad137662edc1..62ac291313473d422769166d1d0dbc7e410d130d 100644 (file)
@@ -11,20 +11,20 @@ import static com.google.common.base.Verify.verifyNotNull;
 
 import java.util.Set;
 import org.opendaylight.yangtools.yang.model.api.UniqueConstraint;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-final class UniqueEffectiveStatementImpl extends DeclaredEffectiveStatementBase<Set<Relative>, UniqueStatement>
+final class UniqueEffectiveStatementImpl extends DeclaredEffectiveStatementBase<Set<Descendant>, UniqueStatement>
         implements UniqueConstraint, UniqueEffectiveStatement {
-    UniqueEffectiveStatementImpl(final StmtContext<Set<Relative>, UniqueStatement, ?> ctx) {
+    UniqueEffectiveStatementImpl(final StmtContext<Set<Descendant>, UniqueStatement, ?> ctx) {
         super(ctx);
     }
 
     @Override
-    public Set<Relative> getTag() {
+    public Set<Descendant> getTag() {
         // FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here
         return verifyNotNull(argument());
     }
index 06bf0824cdea37a98a8fce288b59f24b0d5fca64..2dc6de95833e3b01ab119c8cfff0851fcf0636e2 100644 (file)
@@ -8,13 +8,13 @@
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.unique;
 
 import java.util.Set;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-final class UniqueStatementImpl extends AbstractDeclaredStatement<Set<Relative>> implements UniqueStatement {
-    UniqueStatementImpl(final StmtContext<Set<Relative>, UniqueStatement, ?> context) {
+final class UniqueStatementImpl extends AbstractDeclaredStatement<Set<Descendant>> implements UniqueStatement {
+    UniqueStatementImpl(final StmtContext<Set<Descendant>, UniqueStatement, ?> context) {
         super(context);
     }
 }
index 8cb7cc96ddd43b9d405e754884b27ca33e08deb8..09b2f984b27b62010c25c466a3a207021ee591f9 100644 (file)
@@ -15,7 +15,7 @@ import java.util.Set;
 import java.util.regex.Pattern;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils;
@@ -25,7 +25,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 
 public final class UniqueStatementSupport
-        extends AbstractStatementSupport<Set<Relative>, UniqueStatement, UniqueEffectiveStatement> {
+        extends AbstractStatementSupport<Set<Descendant>, UniqueStatement, UniqueEffectiveStatement> {
     /**
      * Support 'sep' ABNF rule in RFC7950 section 14. CRLF pattern is used to squash line-break from CRLF to LF form
      * and then we use SEP_SPLITTER, which can operate on single characters.
@@ -48,8 +48,8 @@ public final class UniqueStatementSupport
     }
 
     @Override
-    public Set<Relative> parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-        final Set<Relative> uniqueConstraints = parseUniqueConstraintArgument(ctx, value);
+    public Set<Descendant> parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        final Set<Descendant> uniqueConstraints = parseUniqueConstraintArgument(ctx, value);
         SourceException.throwIf(uniqueConstraints.isEmpty(), ctx.getStatementSourceReference(),
                 "Invalid argument value '%s' of unique statement. The value must contains at least "
                         + "one descendant schema node identifier.", value);
@@ -57,13 +57,13 @@ public final class UniqueStatementSupport
     }
 
     @Override
-    public UniqueStatement createDeclared(final StmtContext<Set<Relative>, UniqueStatement, ?> ctx) {
+    public UniqueStatement createDeclared(final StmtContext<Set<Descendant>, UniqueStatement, ?> ctx) {
         return new UniqueStatementImpl(ctx);
     }
 
     @Override
     public UniqueEffectiveStatement createEffective(
-            final StmtContext<Set<Relative>, UniqueStatement, UniqueEffectiveStatement> ctx) {
+            final StmtContext<Set<Descendant>, UniqueStatement, UniqueEffectiveStatement> ctx) {
         return new UniqueEffectiveStatementImpl(ctx);
     }
 
@@ -72,18 +72,18 @@ public final class UniqueStatementSupport
         return SUBSTATEMENT_VALIDATOR;
     }
 
-    private static Set<Relative> parseUniqueConstraintArgument(final StmtContext<?, ?, ?> ctx,
+    private static Set<Descendant> parseUniqueConstraintArgument(final StmtContext<?, ?, ?> ctx,
             final String argumentValue) {
         // deal with 'line-break' rule, which is either "\n" or "\r\n", but not "\r"
         final String nocrlf = CRLF_PATTERN.matcher(argumentValue).replaceAll("\n");
 
-        final Set<Relative> uniqueConstraintNodes = new HashSet<>();
+        final Set<Descendant> uniqueConstraintNodes = new HashSet<>();
         for (final String uniqueArgToken : SEP_SPLITTER.split(nocrlf)) {
             final SchemaNodeIdentifier nodeIdentifier = ArgumentUtils.nodeIdentifierFromPath(ctx, uniqueArgToken);
             SourceException.throwIf(nodeIdentifier.isAbsolute(), ctx.getStatementSourceReference(),
                     "Unique statement argument '%s' contains schema node identifier '%s' "
                             + "which is not in the descendant node identifier form.", argumentValue, uniqueArgToken);
-            uniqueConstraintNodes.add((Relative) nodeIdentifier);
+            uniqueConstraintNodes.add((Descendant) nodeIdentifier);
         }
         return ImmutableSet.copyOf(uniqueConstraintNodes);
     }
index 533fb5d6ced7054976a78c991041836e1cb5d50a..8a3018c9fadf4c762f9d39edccd2fcd0921bc9a5 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.UniqueConstraint;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 
 public class Bug5946Test {
@@ -52,7 +52,7 @@ public class Bug5946Test {
         Collection<? extends UniqueConstraint> simpleUniqueConstraints = getListConstraints(context, SIMPLE_UNIQUE);
         assertNotNull(simpleUniqueConstraints);
         assertEquals(1, simpleUniqueConstraints.size());
-        Collection<Relative> simpleUniqueConstraintTag = simpleUniqueConstraints.iterator().next().getTag();
+        Collection<Descendant> simpleUniqueConstraintTag = simpleUniqueConstraints.iterator().next().getTag();
         assertTrue(simpleUniqueConstraintTag.contains(L1_ID));
         assertTrue(simpleUniqueConstraintTag.contains(C_L3_ID));
 
@@ -63,7 +63,7 @@ public class Bug5946Test {
         boolean l1cl3 = false;
         boolean cl3l2 = false;
         for (UniqueConstraint uniqueConstraint : multipleUniqueConstraints) {
-            Collection<Relative> uniqueConstraintTag = uniqueConstraint.getTag();
+            Collection<Descendant> uniqueConstraintTag = uniqueConstraint.getTag();
             if (uniqueConstraintTag.contains(L1_ID) && uniqueConstraintTag.contains(L2_ID)) {
                 l1l2 = true;
             } else if (uniqueConstraintTag.contains(L1_ID) && uniqueConstraintTag.contains(C_L3_ID)) {
index 55a4ada622d406494b10f1d50cf0c417c289db35..c46257223c8c02e34cd70a7f0dbdeaf93b7a6f45 100644 (file)
@@ -92,7 +92,7 @@ public class YangParserNegativeTest {
             fail("ReactorException should be thrown");
         } catch (final ReactorException e) {
             assertThat(e.getCause().getMessage(), containsString("Error in module 'test4' in the refine of uses "
-                    + "'Relative{path=[(urn:simple.container.demo)node]}': can not perform refine of 'PRESENCE' for"
+                    + "'Descendant{path=[(urn:simple.container.demo)node]}': can not perform refine of 'PRESENCE' for"
                     + " the target 'LEAF_LIST'."));
         }
     }