From: Robert Varga Date: Mon, 5 Oct 2020 11:13:34 +0000 (+0200) Subject: Adjust to {Container,Input,Output}SchemaNode split X-Git-Tag: v7.0.0~18 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=91ec9773841613d40eac0784ce28789c8f779cc9;p=mdsal.git Adjust to {Container,Input,Output}SchemaNode split 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 --- diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ActionCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ActionCodecContext.java index c400a1492a..e32716cc0b 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ActionCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ActionCodecContext.java @@ -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 input; - private final DataContainerCodecContext output; + private final DataContainerCodecContext input; + private final DataContainerCodecContext output; - ActionCodecContext(final DataContainerCodecContext input, - final DataContainerCodecContext output) { + ActionCodecContext(final DataContainerCodecContext input, + final DataContainerCodecContext output) { this.input = requireNonNull(input); this.output = requireNonNull(output); } - DataContainerCodecContext input() { + DataContainerCodecContext input() { return input; } - DataContainerCodecContext output() { + DataContainerCodecContext output() { return output; } } diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ContainerNodeCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ContainerNodeCodecContext.java index a614fa8cd2..e2c16411e0 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ContainerNodeCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ContainerNodeCodecContext.java @@ -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 extends DataObjectCodecContext +final class ContainerNodeCodecContext extends DataObjectCodecContext implements RpcInputCodec { - ContainerNodeCodecContext(final DataContainerCodecPrototype prototype) { + ContainerNodeCodecContext(final DataContainerCodecPrototype prototype) { super(prototype); } diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java index 8294508bfe..eab01220c0 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java @@ -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 implements NodeCon // This method must allow concurrent loading, i.e. nothing in it may have effects outside of the loaded object private @NonNull DataContainerCodecContext 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()) diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java index 153806053e..c51374a4a2 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java @@ -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> 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 diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java index 8d10ff2948..fef5fea5d5 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java @@ -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 extends DataContainerCo new CacheLoader>() { @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 cls = (Class) factory().getRuntimeContext().getClassForSchema(schema); @@ -257,7 +257,7 @@ final class SchemaRootCodecContext 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(); } diff --git a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/CachingCodecTest.java b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/CachingCodecTest.java index b2657e90d3..040673229c 100644 --- a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/CachingCodecTest.java +++ b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/CachingCodecTest.java @@ -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()); } } diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java index 6baa592c00..1c8b7da099 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java @@ -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())) { diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/ModuleContext.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/ModuleContext.java index 9b323e512b..bd1a97d3e1 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/ModuleContext.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/ModuleContext.java @@ -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); diff --git a/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/RpcRoutingStrategyTest.java b/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/RpcRoutingStrategyTest.java index 3642ece433..aaa5195a63 100644 --- a/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/RpcRoutingStrategyTest.java +++ b/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/RpcRoutingStrategyTest.java @@ -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