DeviationStatement should use absolute SchemaNodeIdentifier 98/87798/8
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 16 Feb 2020 16:30:24 +0000 (17:30 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 17 Feb 2020 09:14:34 +0000 (10:14 +0100)
The spec is clear on this one -- we should capture the fact that
'deviation' always has an absolute path as its argument.

JIRA: YANGTOOLS-1083
Change-Id: Iff758465eee7fb568515773e7a067d54d20eb142
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DeviationEffectiveStatement.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DeviationStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ArgumentUtils.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationStatementSupport.java

index 41f33f198bd8f9774bbd8dba575e9e93dd5c465d..c043ac47daf564d05940afdc8d9d02e16830db57 100644 (file)
@@ -11,9 +11,10 @@ import com.google.common.annotations.Beta;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 
 @Beta
-public interface DeviationEffectiveStatement extends EffectiveStatement<SchemaNodeIdentifier, DeviationStatement> {
+public interface DeviationEffectiveStatement extends EffectiveStatement<Absolute, DeviationStatement> {
     @Override
     default StatementDefinition statementDefinition() {
         return YangStmtMapping.DEVIATION;
index 674001c33b9fc6835bbc84b718e79192d656bc8e..1369240c47e8e48fbc4732df8199e03fa1281a76 100644 (file)
@@ -13,14 +13,15 @@ import java.util.Collection;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 
-public interface DeviationStatement extends DocumentedDeclaredStatement<SchemaNodeIdentifier> {
+public interface DeviationStatement extends DocumentedDeclaredStatement<Absolute> {
     @Override
     default StatementDefinition statementDefinition() {
         return YangStmtMapping.DEVIATION;
     }
 
-    default @NonNull SchemaNodeIdentifier getTargetNode() {
+    default @NonNull Absolute getTargetNode() {
         // FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here
         return verifyNotNull(argument());
     }
index c4d12229d93e763f068f8d2b85745f4ab563fb31..942650519f8a5065e30e8d78e3e4b648c1246e40 100644 (file)
@@ -85,6 +85,11 @@ public final class ArgumentUtils {
         return PATH_ABS.matcher(path).matches();
     }
 
+    public static Absolute parseAbsoluteSchemaNodeIdentifier(final StmtContext<?, ?, ?> ctx, final String str) {
+        // FIXME: this does accept check for a leading slash
+        return Absolute.of(parseNodeIdentifiers(ctx, str));
+    }
+
     public static Descendant parseDescendantSchemaNodeIdentifier(final StmtContext<?, ?, ?> ctx, final String str) {
         // FIXME: this does accept a leading slash
         return Descendant.of(parseNodeIdentifiers(ctx, str));
index 833b36d00cff684f98bf350e781c2235be6f7a9d..d9bf700e0c0e16922b6e975e32da13bb58f7d918 100644 (file)
@@ -15,13 +15,12 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DeviationEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DocumentedNodeMixin;
 
-final class DeviationEffectiveStatementImpl extends WithSubstatements<SchemaNodeIdentifier, DeviationStatement>
-        implements DeviationEffectiveStatement, Deviation,
-            DocumentedNodeMixin<SchemaNodeIdentifier, DeviationStatement> {
+final class DeviationEffectiveStatementImpl extends WithSubstatements<Absolute, DeviationStatement>
+        implements DeviationEffectiveStatement, Deviation, DocumentedNodeMixin<Absolute, DeviationStatement> {
     DeviationEffectiveStatementImpl(final DeviationStatement declared,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared, substatements);
index a819935ced28a67a31abb12614cfd56f764629ec..ac86c8d29427af7a7ca37fa5d2197092ce9561e0 100644 (file)
@@ -10,13 +10,12 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.deviation;
 import com.google.common.collect.ImmutableList;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-final class DeviationStatementImpl extends WithSubstatements<SchemaNodeIdentifier>
-        implements DeviationStatement {
-    DeviationStatementImpl(final StmtContext<SchemaNodeIdentifier, DeviationStatement, ?> context,
+final class DeviationStatementImpl extends WithSubstatements<Absolute> implements DeviationStatement {
+    DeviationStatementImpl(final StmtContext<Absolute, DeviationStatement, ?> context,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
         super(context, substatements);
     }
index 0f1e78393fe5772410411cde44e862a7795fb8ce..36a044899871a4d4d0eea9ff090350127cea4b94 100644 (file)
@@ -15,7 +15,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DeviationEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
@@ -25,7 +25,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName;
 
 public final class DeviationStatementSupport
-        extends BaseStatementSupport<SchemaNodeIdentifier, DeviationStatement, DeviationEffectiveStatement> {
+        extends BaseStatementSupport<Absolute, DeviationStatement, DeviationEffectiveStatement> {
     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
         .DEVIATION)
         .addOptional(YangStmtMapping.DESCRIPTION)
@@ -43,13 +43,13 @@ public final class DeviationStatementSupport
     }
 
     @Override
-    public SchemaNodeIdentifier parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-        return ArgumentUtils.nodeIdentifierFromPath(ctx, value);
+    public Absolute parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        return ArgumentUtils.parseAbsoluteSchemaNodeIdentifier(ctx, value);
     }
 
     @Override
     public void onFullDefinitionDeclared(
-            final Mutable<SchemaNodeIdentifier, DeviationStatement, DeviationEffectiveStatement> ctx) {
+            final Mutable<Absolute, DeviationStatement, DeviationEffectiveStatement> ctx) {
         final QNameModule currentModule = ctx.getFromNamespace(ModuleCtxToModuleQName.class,
                 ctx.getRoot());
         final QNameModule targetModule = Iterables.getLast(ctx.coerceStatementArgument().getNodeIdentifiers())
@@ -67,27 +67,27 @@ public final class DeviationStatementSupport
     }
 
     @Override
-    protected DeviationStatement createDeclared(final StmtContext<SchemaNodeIdentifier, DeviationStatement, ?> ctx,
+    protected DeviationStatement createDeclared(final StmtContext<Absolute, DeviationStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
         return new DeviationStatementImpl(ctx, substatements);
     }
 
     @Override
     protected DeviationStatement createEmptyDeclared(
-            final StmtContext<SchemaNodeIdentifier, DeviationStatement, ?> ctx) {
+            final StmtContext<Absolute, DeviationStatement, ?> ctx) {
         return new DeviationStatementImpl(ctx, ImmutableList.of());
     }
 
     @Override
     protected DeviationEffectiveStatement createEffective(
-            final StmtContext<SchemaNodeIdentifier, DeviationStatement, DeviationEffectiveStatement> ctx,
+            final StmtContext<Absolute, DeviationStatement, DeviationEffectiveStatement> ctx,
             final DeviationStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         return new DeviationEffectiveStatementImpl(declared, substatements);
     }
 
     @Override
     protected DeviationEffectiveStatement createEmptyEffective(
-            final StmtContext<SchemaNodeIdentifier, DeviationStatement, DeviationEffectiveStatement> ctx,
+            final StmtContext<Absolute, DeviationStatement, DeviationEffectiveStatement> ctx,
             final DeviationStatement declared) {
         return new DeviationEffectiveStatementImpl(declared, ImmutableList.of());
     }