Correct YangData{SchemaNode,EffectiveStatement} interfaces 59/65459/6
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 12 Nov 2017 18:07:00 +0000 (19:07 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 13 Nov 2017 13:55:43 +0000 (14:55 +0100)
These remain tightly bound, but YangDataEffectiveStatement provides
its proper argument in its parlance.

Change-Id: I7862cb6e594f661edea39ced468f680a869bc437
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataEffectiveStatement.java
yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataSchemaNode.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatementImpl.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangDataExtensionTest.java

index 8d99228f15662beb51d2400b0a6aea8c265d0ff1..92badbfabe164e8bdf8a244ce1238ca671fbf6ec 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.yangtools.rfc8040.model.api;
 
 import com.google.common.annotations.Beta;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
 
 /**
  * Effective statement representation of 'yang-data' extension defined in
@@ -17,4 +18,10 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 @Beta
 public interface YangDataEffectiveStatement extends EffectiveStatement<String, YangDataStatement>, YangDataSchemaNode {
 
+    /**
+     * Return the container statement defined in this yang-data statement instance.
+     *
+     * @return container statement
+     */
+    ContainerEffectiveStatement getContainer();
 }
index af7f5bc34902e72139facc0e35f118872dfea050..df7e581dcd034c410272a42c4f576fcbb5890cfe 100644 (file)
@@ -20,9 +20,9 @@ import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 @Beta
 public interface YangDataSchemaNode extends UnknownSchemaNode {
     /**
-     * Returns container schema node.
+     * Returns container schema node container within this yang-data definition.
      *
      * @return container schema node
      */
-    ContainerSchemaNode getContainer();
+    ContainerSchemaNode getContainerSchemaNode();
 }
index 117545b3f2a038f6405ddbd2dc94be7dca848725..a6cbc696a22530348071cc067f084aa45ba55e45 100644 (file)
@@ -10,16 +10,17 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc8040;
 
 import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
-import com.google.common.base.Preconditions;
+import com.google.common.base.Verify;
 import java.util.Objects;
 import javax.annotation.Nonnull;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.rfc8040.model.api.YangDataEffectiveStatement;
 import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.container.ContainerEffectiveStatementImpl;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 
@@ -29,7 +30,7 @@ final class YangDataEffectiveStatementImpl extends UnknownEffectiveStatementBase
 
     private final SchemaPath path;
     private final QName maybeQNameArgument;
-    private final ContainerSchemaNode containerSchemaNode;
+    private final @NonNull ContainerEffectiveStatement container;
 
     YangDataEffectiveStatementImpl(final StmtContext<String, YangDataStatement, ?> ctx) {
         super(ctx);
@@ -43,7 +44,11 @@ final class YangDataEffectiveStatementImpl extends UnknownEffectiveStatementBase
         this.maybeQNameArgument = maybeQNameArgumentInit;
 
         path = ctx.getParentContext().getSchemaPath().get().createChild(maybeQNameArgument);
-        containerSchemaNode = Preconditions.checkNotNull(firstEffective(ContainerEffectiveStatementImpl.class));
+        container = findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).get();
+
+        // TODO: this is strong binding of two API contracts. Unfortunately ContainerEffectiveStatement design is
+        //       incomplete.
+        Verify.verify(container instanceof ContainerSchemaNode);
     }
 
     @Nonnull
@@ -58,10 +63,16 @@ final class YangDataEffectiveStatementImpl extends UnknownEffectiveStatementBase
         return path;
     }
 
+    @Override
+    public ContainerEffectiveStatement getContainer() {
+        return container;
+    }
+
     @Nonnull
     @Override
-    public ContainerSchemaNode getContainer() {
-        return containerSchemaNode;
+    public ContainerSchemaNode getContainerSchemaNode() {
+        // Verified in the constructor
+        return (ContainerSchemaNode) container;
     }
 
     @Override
@@ -85,6 +96,9 @@ final class YangDataEffectiveStatementImpl extends UnknownEffectiveStatementBase
 
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(this).add("qname", maybeQNameArgument).add("path", path).toString();
+        return MoreObjects.toStringHelper(this).omitNullValues()
+                .add("qname", maybeQNameArgument)
+                .add("path", path)
+                .add("container", container).toString();
     }
 }
index c484ba2c90b8f9d42baba08c22ba0444fb0156b7..159c0f2d8054ca702c4957d8d6749fdd9c95ba71 100644 (file)
@@ -90,8 +90,8 @@ public class YangDataExtensionTest {
         assertNotNull(myYangDataANode);
         assertNotNull(myYangDataBNode);
 
-        assertNotNull(myYangDataANode.getContainer());
-        assertNotNull(myYangDataBNode.getContainer());
+        assertNotNull(myYangDataANode.getContainerSchemaNode());
+        assertNotNull(myYangDataBNode.getContainerSchemaNode());
     }
 
     @Test
@@ -110,7 +110,7 @@ public class YangDataExtensionTest {
         final YangDataSchemaNode myYangDataNode = (YangDataSchemaNode) unknownSchemaNode;
         assertNotNull(myYangDataNode);
 
-        final ContainerSchemaNode contInYangData = myYangDataNode.getContainer();
+        final ContainerSchemaNode contInYangData = myYangDataNode.getContainerSchemaNode();
         assertNotNull(contInYangData);
         assertTrue(contInYangData.isConfiguration());
         final ContainerSchemaNode innerCont = (ContainerSchemaNode) contInYangData.getDataChildByName(
@@ -140,7 +140,7 @@ public class YangDataExtensionTest {
         final YangDataSchemaNode myYangDataNode = (YangDataSchemaNode) unknownSchemaNode;
         assertNotNull(myYangDataNode);
 
-        final ContainerSchemaNode contInYangData = myYangDataNode.getContainer();
+        final ContainerSchemaNode contInYangData = myYangDataNode.getContainerSchemaNode();
         assertNotNull(contInYangData);
         final ContainerSchemaNode innerCont = (ContainerSchemaNode) contInYangData.getDataChildByName(
                 QName.create(foobar.getQNameModule(), "inner-cont"));