Use SchemaNodeIdentifier in AugmentationSchemaNode 07/87807/7
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 17 Feb 2020 11:53:12 +0000 (12:53 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 17 Feb 2020 13:59:17 +0000 (14:59 +0100)
We do not want to use SchemaPath here, as the statement can only
target schema tree residents, not the generalized indeterminism
of SchemaPath.

JIRA: YANGTOOLS-1084
Change-Id: I882690ab9741ce5a09a38606e27ac0ad6673002f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/AugmentationSchemaNode.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/EffectiveAugmentationSchema.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/AugmentTest.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModuleTest.java

index dcb64f77250b45cd143d14932ea95b086bfa2c0e..5b24097bc9b4d273b4d07ad6831bdc7d48cdb2e2 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.yangtools.yang.model.api;
 
 import java.util.Optional;
 import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 
 /**
  * AugmentationSchema represents augment definition. The "augment" statement allows a module or submodule to add
@@ -20,13 +21,13 @@ public interface AugmentationSchemaNode extends DataNodeContainer, NotificationN
     /**
      * Returns augmentation schema path.
      *
-     * @return SchemaPath that identifies a node in the schema tree. This node
+     * @return SchemaNodeIdentifier that identifies a node in the schema tree. This node
      *         is called the augment's target node. The target node MUST be
      *         either a container, list, choice, case, input, output, or
      *         notification node. It is augmented with the nodes defined as
      *         child nodes of this AugmentationSchema.
      */
-    SchemaPath getTargetPath();
+    SchemaNodeIdentifier getTargetPath();
 
     /**
      * Returns Augmentation Definition from which this augmentation is derived
index 6cc2097adfb39eabeb380a0d3e72b4b86b5b1c91..d7926e0547ae3109447ab3bae479ab093c5edc59 100644 (file)
@@ -25,11 +25,11 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.UsesNode;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 
 /**
  * Proxy for AugmentationSchema. Child node schemas are replaced with actual schemas from parent.
@@ -89,7 +89,7 @@ public final class EffectiveAugmentationSchema implements AugmentationSchemaNode
     }
 
     @Override
-    public SchemaPath getTargetPath() {
+    public SchemaNodeIdentifier getTargetPath() {
         return delegate.getTargetPath();
     }
 
index 4b2993d2e7a92b2ec6e9bee268e01d880bcc94c6..b4258d8e8fc6ef954555b610d138692130cdf700 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment;
 
+import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.ImmutableList;
@@ -18,7 +19,6 @@ import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.NamespaceRevisionAware;
-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.AugmentEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
@@ -50,8 +50,9 @@ final class AugmentEffectiveStatementImpl extends DefaultDataNodeContainer<Schem
     }
 
     @Override
-    public SchemaNodeIdentifier argument() {
-        return getDeclared().argument();
+    public @NonNull SchemaNodeIdentifier argument() {
+        // FIXME: YANGTOOLS-1065: this is not okay, as this can actually have different namespaces
+        return verifyNotNull(getDeclared().argument());
     }
 
     @Override
@@ -60,8 +61,8 @@ final class AugmentEffectiveStatementImpl extends DefaultDataNodeContainer<Schem
     }
 
     @Override
-    public SchemaPath getTargetPath() {
-        return argument().asSchemaPath();
+    public SchemaNodeIdentifier getTargetPath() {
+        return argument();
     }
 
     @Override
@@ -84,5 +85,4 @@ final class AugmentEffectiveStatementImpl extends DefaultDataNodeContainer<Schem
         return AugmentEffectiveStatementImpl.class.getSimpleName() + "[" + "targetPath=" + getTargetPath() + ", when="
                 + getWhenCondition() + "]";
     }
-
 }
index 01fc1330eca9d4e9c9ed4572a0cc2061f37d0d5a..50e1190ac234177580aba47128e2980ccc73ec1f 100644 (file)
@@ -33,6 +33,7 @@ import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.opendaylight.yangtools.yang.model.util.BaseTypes;
 
 public class AugmentTest {
@@ -63,8 +64,7 @@ public class AugmentTest {
         final AugmentationSchemaNode augment = augmentations.iterator().next();
         assertNotNull(augment);
 
-        SchemaPath expectedSchemaPath = SchemaPath.create(qnames, true);
-        assertEquals(expectedSchemaPath, augment.getTargetPath());
+        assertEquals(Absolute.of(qnames), augment.getTargetPath());
 
         final Collection<? extends DataSchemaNode> augmentChildren = augment.getChildNodes();
         assertEquals(4, augmentChildren.size());
@@ -90,7 +90,7 @@ public class AugmentTest {
         QName qname = QName.create(FOO, "ds0ChannelNumber");
         qnames.add(qname);
         assertEquals(qname, ds0ChannelNumber.getQName());
-        expectedSchemaPath = SchemaPath.create(qnames, true);
+        SchemaPath expectedSchemaPath = SchemaPath.create(qnames, true);
         assertEquals(expectedSchemaPath, ds0ChannelNumber.getPath());
         assertFalse(ds0ChannelNumber.isAugmenting());
         // type of leaf ds0ChannelNumber
index 72de301c4e2507a6eeb21c7ed610717369a87857..78e396c53511337b25562a8de76c83bea8fa2181 100644 (file)
@@ -53,7 +53,6 @@ public class EffectiveModuleTest {
     private static final QName CONT = QName.create(ROOT_MODULE_QNAME, "cont");
     private static final QName FEATURE1 = QName.create(ROOT_MODULE_QNAME, "feature1");
 
-    private static final SchemaPath CONT_SCHEMA_PATH = SchemaPath.create(true, CONT);
     private static final SchemaPath FEATURE1_SCHEMA_PATH = SchemaPath.create(true, FEATURE1);
 
     private static final Revision REVISION = Revision.of("2000-01-01");
@@ -79,7 +78,7 @@ public class EffectiveModuleTest {
 
         final Collection<? extends AugmentationSchemaNode> augmentations = rootModule.getAugmentations();
         assertEquals(1, augmentations.size());
-        assertEquals(CONT_SCHEMA_PATH, augmentations.iterator().next().getTargetPath());
+        assertEquals(Absolute.of(CONT), augmentations.iterator().next().getTargetPath());
 
         final Collection<? extends ModuleImport> imports = rootModule.getImports();
         assertEquals(1, imports.size());