Adjust to {Container,Input,Output}SchemaNode split 01/92901/5
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 5 Oct 2020 11:13:34 +0000 (13:13 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 5 Oct 2020 20:21:29 +0000 (22:21 +0200)
We no longer represent all cases using ContainerSchemaNode, hence
we need to adjust users to the new realities.

Change-Id: Ie7c6670d368cdea1220115ae93dd03c16945f75f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ActionCodecContext.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ContainerNodeCodecContext.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java
binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/CachingCodecTest.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/ModuleContext.java
dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/RpcRoutingStrategyTest.java

index c400a1492a1b319ad7598cf0b3dfd6bc16213a27..e32716cc0bc3aa798f07b35509a8f79c54d21e40 100644 (file)
@@ -9,26 +9,27 @@ package org.opendaylight.mdsal.binding.dom.codec.impl;
 
 import static java.util.Objects.requireNonNull;
 
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.InputSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.OutputSchemaNode;
 
 /**
  * This is not really a codec context, but rather a holder of input and output codec contexts.
  */
 final class ActionCodecContext {
-    private final DataContainerCodecContext<?, ContainerSchemaNode> input;
-    private final DataContainerCodecContext<?, ContainerSchemaNode> output;
+    private final DataContainerCodecContext<?, InputSchemaNode> input;
+    private final DataContainerCodecContext<?, OutputSchemaNode> output;
 
-    ActionCodecContext(final DataContainerCodecContext<?, ContainerSchemaNode> input,
-        final DataContainerCodecContext<?, ContainerSchemaNode> output) {
+    ActionCodecContext(final DataContainerCodecContext<?, InputSchemaNode> input,
+        final DataContainerCodecContext<?, OutputSchemaNode> output) {
         this.input = requireNonNull(input);
         this.output = requireNonNull(output);
     }
 
-    DataContainerCodecContext<?, ContainerSchemaNode> input() {
+    DataContainerCodecContext<?, InputSchemaNode> input() {
         return input;
     }
 
-    DataContainerCodecContext<?, ContainerSchemaNode> output() {
+    DataContainerCodecContext<?, OutputSchemaNode> output() {
         return output;
     }
 }
index a614fa8cd255e930343d6c14a1b7f8e292c10b3e..e2c16411e07f27ee64c3fa55f2ede76eb168597f 100644 (file)
@@ -11,12 +11,12 @@ import com.google.common.base.Preconditions;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ContainerLike;
 
-final class ContainerNodeCodecContext<D extends DataObject> extends DataObjectCodecContext<D, ContainerSchemaNode>
+final class ContainerNodeCodecContext<D extends DataObject> extends DataObjectCodecContext<D, ContainerLike>
         implements RpcInputCodec<D> {
 
-    ContainerNodeCodecContext(final DataContainerCodecPrototype<ContainerSchemaNode> prototype) {
+    ContainerNodeCodecContext(final DataContainerCodecPrototype<ContainerLike> prototype) {
         super(prototype);
     }
 
index 8294508bfe12f343d915775d1be6facbfe0f99ff..eab01220c0c281c40cea36aae5da8d971bf12550 100644 (file)
@@ -26,6 +26,7 @@ import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ContainerLike;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
@@ -229,7 +230,7 @@ final class DataContainerCodecPrototype<T extends WithStatus> implements NodeCon
     // This method must allow concurrent loading, i.e. nothing in it may have effects outside of the loaded object
     private @NonNull DataContainerCodecContext<?, T> createInstance() {
         // FIXME: make protected abstract
-        if (schema instanceof ContainerSchemaNode) {
+        if (schema instanceof ContainerLike) {
             return new ContainerNodeCodecContext(this);
         } else if (schema instanceof ListSchemaNode) {
             return Identifiable.class.isAssignableFrom(getBindingClass())
index 153806053e1bc564c74d05bee8a615cb41729d2c..c51374a4a29beb02131509d38e0226bd9eda6646 100644 (file)
@@ -67,6 +67,7 @@ import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ContainerLike;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
@@ -179,7 +180,7 @@ final class DataObjectStreamerGenerator<T extends DataObjectStreamer<?>> impleme
         final WithStatus schema = typeAndSchema.getValue();
 
         final StackManipulation startEvent;
-        if (schema instanceof ContainerSchemaNode || schema instanceof NotificationDefinition) {
+        if (schema instanceof ContainerLike || schema instanceof NotificationDefinition) {
             startEvent = classUnknownSizeMethod(START_CONTAINER_NODE, type);
         } else if (schema instanceof ListSchemaNode) {
             startEvent = ((ListSchemaNode) schema).getKeyDefinition().isEmpty() ? START_UNKEYED_LIST_ITEM
index 8d10ff2948155617b27553375c11a815be6dd685..fef5fea5d532bfc588ece0753c02737005047e38 100644 (file)
@@ -40,7 +40,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ContainerLike;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
@@ -114,7 +114,7 @@ final class SchemaRootCodecContext<D extends DataObject> extends DataContainerCo
         new CacheLoader<Absolute, RpcInputCodec<?>>() {
             @Override
             public RpcInputCodec<?> load(final Absolute key) {
-                final ContainerSchemaNode schema = SchemaContextUtil.getRpcDataSchema(getSchema(), key.asSchemaPath());
+                final ContainerLike schema = SchemaContextUtil.getRpcDataSchema(getSchema(), key.asSchemaPath());
                 @SuppressWarnings("unchecked")
                 final Class<? extends DataContainer> cls = (Class<? extends DataContainer>)
                         factory().getRuntimeContext().getClassForSchema(schema);
@@ -257,7 +257,7 @@ final class SchemaRootCodecContext<D extends DataObject> extends DataContainerCo
              * FIXME: Rework this to have more precise logic regarding Binding Specification.
              */
             if (key.getSimpleName().equals(BindingMapping.getClassName(potentialQName) + className)) {
-                final ContainerSchemaNode schema = SchemaNodeUtils.getRpcDataSchema(potential, qname);
+                final ContainerLike schema = SchemaNodeUtils.getRpcDataSchema(potential, qname);
                 checkArgument(schema != null, "Schema for %s does not define input / output.", potential.getQName());
                 return (ContainerNodeCodecContext<?>) DataContainerCodecPrototype.from(key, schema, factory()).get();
             }
index b2657e90d378bae3e61847f30a6327607a13d4f6..040673229c85383c6fae938daf1e18f8b9094c4f 100644 (file)
@@ -41,7 +41,6 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.impl.schema.nodes.LazyLeafOperations;
 
 public class CachingCodecTest extends AbstractBindingCodecTest {
 
@@ -179,12 +178,8 @@ public class CachingCodecTest extends AbstractBindingCodecTest {
         final DataContainerChild<?, ?> second = ((DataContainerNode<?>) secondCont).getChild(LEAF_ARG).get();
         assertTrue(second instanceof LeafNode);
 
-        if (LazyLeafOperations.isEnabled()) {
-            // The leaf nodes are transient, but the values should be the same
-            assertEquals(first, second);
-            assertSame(first.getValue(), second.getValue());
-        } else {
-            assertSame(first, second);
-        }
+        // The leaf nodes are transient, but the values should be the same
+        assertEquals(first, second);
+        assertSame(first.getValue(), second.getValue());
     }
 }
index 6baa592c0057f05956061a2147364c6ce2af30ca..1c8b7da09978832f6b1cac988ab631defb76b93a 100644 (file)
@@ -102,6 +102,7 @@ import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ContainerLike;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
@@ -111,6 +112,7 @@ import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
+import org.opendaylight.yangtools.yang.model.api.InputSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
@@ -118,6 +120,7 @@ import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
 import org.opendaylight.yangtools.yang.model.api.NotificationNodeContainer;
+import org.opendaylight.yangtools.yang.model.api.OutputSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
@@ -512,7 +515,7 @@ abstract class AbstractTypeGenerator {
     }
 
     private GeneratedType actionContainer(final ModuleContext context, final Type baseInterface,
-            final ContainerSchemaNode schema, final boolean inGrouping) {
+            final ContainerLike schema, final boolean inGrouping) {
         final GeneratedTypeBuilder genType = processDataSchemaNode(context, baseInterface, schema, inGrouping);
         resolveDataSchemaNodes(context, genType, genType, schema.getChildNodes(), inGrouping);
         return genType.build();
@@ -568,7 +571,7 @@ abstract class AbstractTypeGenerator {
     }
 
     private Type createRpcContainer(final ModuleContext context, final String rpcName, final RpcDefinition rpc,
-            final ContainerSchemaNode schema, final Type type) {
+            final ContainerLike schema, final Type type) {
         processUsesAugments(schema, context, false);
         final GeneratedTypeBuilder outType = addRawInterfaceDefinition(context,
             JavaTypeName.create(context.modulePackageName(), rpcName + BindingMapping.getClassName(schema.getQName())),
@@ -954,8 +957,8 @@ abstract class AbstractTypeGenerator {
                 final ActionDefinition action = (ActionDefinition) result;
                 final QName resultNode = node.bindTo(result.getQName().getModule());
 
-                final ContainerSchemaNode input = action.getInput();
-                final ContainerSchemaNode output = action.getOutput();
+                final InputSchemaNode input = action.getInput();
+                final OutputSchemaNode output = action.getOutput();
                 if (resultNode.equals(input.getQName())) {
                     result = input;
                 } else if (resultNode.equals(output.getQName())) {
index 9b323e512b619eed454cc7fe0d2be53d728e0908..bd1a97d3e115ad0a8123c7bb1c319481f2f847ef 100644 (file)
@@ -35,7 +35,7 @@ import org.opendaylight.yangtools.concepts.Mutable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ContainerLike;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
@@ -166,8 +166,8 @@ public final class ModuleContext implements Mutable {
         genTOs.add(builder);
     }
 
-    @NonNull GeneratedType addAliasType(final ModuleContext sourceContext, final ContainerSchemaNode source,
-            final ContainerSchemaNode alias) {
+    @NonNull GeneratedType addAliasType(final ModuleContext sourceContext, final ContainerLike source,
+            final ContainerLike alias) {
         final GeneratedTypeBuilder builder = sourceContext.getChildNode(source.getPath());
         checkState(builder != null, "Could not find builder for %s", source);
 
index 3642ece43374b21b64ac690074bbafb30d5830a4..aaa5195a63ef2fbc784f80dba0dc92842d86436f 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.mdsal.dom.spi;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
@@ -21,8 +22,8 @@ import java.lang.reflect.Field;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.InputSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 
@@ -36,7 +37,7 @@ public class RpcRoutingStrategyTest {
 
     @Before
     public void setUp() throws Exception {
-        final ContainerSchemaNode containerSchemaNode = mock(ContainerSchemaNode.class);
+        final InputSchemaNode containerSchemaNode = mock(InputSchemaNode.class);
 
         doReturn(containerSchemaNode).when(RPC_DEFINITION).getInput();
         doReturn(ImmutableSet.of(DATA_SCHEMA_NODE)).when(containerSchemaNode).getChildNodes();
@@ -71,13 +72,13 @@ public class RpcRoutingStrategyTest {
         assertEquals(Q_NAME, rpcRoutingStrategy.getLeaf());
     }
 
-    @Test(expected = UnsupportedOperationException.class)
+    @Test
     public void getLeafTest() throws Exception {
-        rpcRoutingStrategy.getLeaf();
+        assertThrows(UnsupportedOperationException.class, () -> rpcRoutingStrategy.getLeaf());
     }
 
-    @Test(expected = UnsupportedOperationException.class)
-    public void getContextTest() throws Exception {
-        rpcRoutingStrategy.getContext();
+    @Test
+    public void getContextTest() {
+        assertThrows(UnsupportedOperationException.class, () -> rpcRoutingStrategy.getContext());
     }
 }
\ No newline at end of file