From: Robert Varga Date: Mon, 11 Dec 2023 10:19:04 +0000 (+0100) Subject: Bump yangtools to 13.0.0 X-Git-Tag: v13.0.0~48 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=mdsal.git;a=commitdiff_plain;h=e996a1b5aa1f8986deb917e0d1d77bd1dab0b82e Bump yangtools to 13.0.0 This adopts yangtools-13.0.0 and updates the various integration surfaces. Change-Id: Ie9e2ed6fec32bdb7cd98803552a4500a5b44f127 Signed-off-by: Robert Varga --- diff --git a/binding/binding-parent/pom.xml b/binding/binding-parent/pom.xml index 1ed2a3b2c5..7b87af3f6f 100644 --- a/binding/binding-parent/pom.xml +++ b/binding/binding-parent/pom.xml @@ -70,7 +70,7 @@ org.opendaylight.yangtools yang-maven-plugin - 11.0.5 + 13.0.0 org.opendaylight.mdsal diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/module-info.java b/binding/mdsal-binding-dom-adapter/src/main/java/module-info.java index bed4a62a3c..7efb5b51e4 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/module-info.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/module-info.java @@ -34,6 +34,7 @@ module org.opendaylight.mdsal.binding.dom.adapter { requires org.opendaylight.mdsal.binding.runtime.api; requires org.opendaylight.mdsal.binding.spec.util; requires org.opendaylight.mdsal.dom.spi; + requires org.opendaylight.yangtools.concepts; requires org.opendaylight.yangtools.yang.common; requires org.opendaylight.yangtools.yang.model.api; requires org.slf4j; diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMWriteTransactionAdapter.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMWriteTransactionAdapter.java index 742ba5c927..016b781d59 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMWriteTransactionAdapter.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMWriteTransactionAdapter.java @@ -147,8 +147,8 @@ class BindingDOMWriteTransactionAdapter e // AugmentationResult already points to parent path final var parentPath = normalized instanceof AugmentationResult ? path : path.getParent(); if (parentPath != null && !parentPath.isEmpty()) { - final var parentNode = ImmutableNodes.fromInstanceId( - serializer.getRuntimeContext().getEffectiveModelContext(), parentPath); + final var parentNode = ImmutableNodes.fromInstanceId(serializer.getRuntimeContext().modelContext(), + parentPath); getDelegate().merge(store, YangInstanceIdentifier.of(parentNode.name()), parentNode); } } diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializer.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializer.java index c5b99844f2..432a4a4aaf 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializer.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializer.java @@ -152,7 +152,7 @@ public final class CurrentAdapterSerializer extends ForwardingBindingDOMCodecSer } private @NonNull Entry resolvePath(final @NonNull InstanceIdentifier path) { - final var stack = SchemaInferenceStack.of(getRuntimeContext().getEffectiveModelContext()); + final var stack = SchemaInferenceStack.of(getRuntimeContext().modelContext()); final var it = toYangInstanceIdentifier(path).getPathArguments().iterator(); verify(it.hasNext(), "Unexpected empty instance identifier for %s", path); diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/FutureSchema.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/FutureSchema.java index 03248a75bc..fbe1d71f70 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/FutureSchema.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/FutureSchema.java @@ -132,7 +132,7 @@ abstract class FutureSchema implements AutoCloseable { return addPostponedOpAndWait(new FutureSchemaPredicate() { @Override public boolean test(final BindingRuntimeContext input) { - return input.getEffectiveModelContext().findModule(module).isPresent(); + return input.modelContext().findModule(module).isPresent(); } }); } diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingStructuralTypeTest.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingStructuralTypeTest.java index eeb519109f..18273b5b01 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingStructuralTypeTest.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingStructuralTypeTest.java @@ -7,25 +7,25 @@ */ package org.opendaylight.mdsal.binding.dom.adapter; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.doReturn; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.mockito.junit.jupiter.MockitoExtension; +import org.opendaylight.yangtools.yang.data.api.schema.AnydataNode; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidateNode; -@RunWith(MockitoJUnitRunner.StrictStubs.class) -public class BindingStructuralTypeTest { +@ExtendWith(MockitoExtension.class) +class BindingStructuralTypeTest { @Mock - private NormalizedNode normalizedNode; + private AnydataNode normalizedNode; @Mock private DataTreeCandidateNode dataTreeCandidateNode; @Test - public void basicTest() { + void basicTest() { doReturn(normalizedNode).when(dataTreeCandidateNode).dataBefore(); assertEquals(BindingStructuralType.UNKNOWN, BindingStructuralType.from(dataTreeCandidateNode)); } diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializerTest.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializerTest.java index a2e8e9b8a8..e677a8625e 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializerTest.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializerTest.java @@ -34,8 +34,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangTextSource; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; public class CurrentAdapterSerializerTest { @@ -126,12 +126,12 @@ public class CurrentAdapterSerializerTest { } @Override - public EffectiveModelContext getEffectiveModelContext() { + public EffectiveModelContext modelContext() { throw new UnsupportedOperationException(); } @Override - public ListenableFuture getSource(final SourceIdentifier sourceIdentifier) { + public ListenableFuture getSource(final SourceIdentifier sourceIdentifier) { throw new UnsupportedOperationException(); } diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractDataBrokerTestCustomizer.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractDataBrokerTestCustomizer.java index 4d69c99603..52c8f48f5f 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractDataBrokerTestCustomizer.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractDataBrokerTestCustomizer.java @@ -42,14 +42,14 @@ public abstract class AbstractDataBrokerTestCustomizer { } public DOMStore createConfigurationDatastore() { - final InMemoryDOMDataStore store = new InMemoryDOMDataStore("CFG", getDataTreeChangeListenerExecutor()); - schemaService.registerSchemaContextListener(store); + final var store = new InMemoryDOMDataStore("CFG", getDataTreeChangeListenerExecutor()); + schemaService.registerSchemaContextListener(store::onModelContextUpdated); return store; } public DOMStore createOperationalDatastore() { - final InMemoryDOMDataStore store = new InMemoryDOMDataStore("OPER", getDataTreeChangeListenerExecutor()); - schemaService.registerSchemaContextListener(store); + final var store = new InMemoryDOMDataStore("OPER", getDataTreeChangeListenerExecutor()); + schemaService.registerSchemaContextListener(store::onModelContextUpdated); return store; } diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractSchemaAwareTest.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractSchemaAwareTest.java index 2819d2837b..286aa99547 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractSchemaAwareTest.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractSchemaAwareTest.java @@ -53,12 +53,12 @@ public abstract class AbstractSchemaAwareTest { return RUNTIME_CONTEXT_CACHE.getUnchecked(getModuleInfos()); } - protected EffectiveModelContext getSchemaContext() throws Exception { - return getRuntimeContext().getEffectiveModelContext(); + protected EffectiveModelContext modelContext() throws Exception { + return getRuntimeContext().modelContext(); } protected void setupWithRuntimeContext(final BindingRuntimeContext runtimeContext) { - setupWithSchema(runtimeContext.getEffectiveModelContext()); + setupWithSchema(runtimeContext.modelContext()); } /** diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/BindingTestContext.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/BindingTestContext.java index 5a80df68ce..3d347256a5 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/BindingTestContext.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/BindingTestContext.java @@ -99,10 +99,8 @@ public class BindingTestContext implements AutoCloseable { public void startNewDomDataBroker() { checkState(executor != null, "Executor needs to be set"); - final InMemoryDOMDataStore operStore = new InMemoryDOMDataStore("OPER", - MoreExecutors.newDirectExecutorService()); - final InMemoryDOMDataStore configStore = new InMemoryDOMDataStore("CFG", - MoreExecutors.newDirectExecutorService()); + final var operStore = new InMemoryDOMDataStore("OPER", MoreExecutors.newDirectExecutorService()); + final var configStore = new InMemoryDOMDataStore("CFG", MoreExecutors.newDirectExecutorService()); newDatastores = ImmutableMap.builder() .put(LogicalDatastoreType.OPERATIONAL, operStore) .put(LogicalDatastoreType.CONFIGURATION, configStore) @@ -110,8 +108,8 @@ public class BindingTestContext implements AutoCloseable { newDOMDataBroker = new SerializedDOMDataBroker(newDatastores, executor); - mockSchemaService.registerSchemaContextListener(configStore); - mockSchemaService.registerSchemaContextListener(operStore); + mockSchemaService.registerSchemaContextListener(configStore::onModelContextUpdated); + mockSchemaService.registerSchemaContextListener(operStore::onModelContextUpdated); } public void startBindingDataBroker() { @@ -139,7 +137,7 @@ public class BindingTestContext implements AutoCloseable { } public EffectiveModelContext getContext() { - return mockSchemaService.getEffectiveModelContext(); + return mockSchemaService.getGlobalContext(); } public void start() { @@ -167,8 +165,7 @@ public class BindingTestContext implements AutoCloseable { private void startDomBroker() { checkState(executor != null); - domRouter = new DOMRpcRouter(); - mockSchemaService.registerSchemaContextListener(domRouter); + domRouter = new DOMRpcRouter(mockSchemaService); } public void startBindingNotificationBroker() { diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/MockSchemaService.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/MockSchemaService.java index 2d8a1de720..313a16eb45 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/MockSchemaService.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/MockSchemaService.java @@ -13,19 +13,18 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import java.util.ServiceLoader; +import java.util.function.Consumer; import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext; import org.opendaylight.mdsal.binding.dom.adapter.CurrentAdapterSerializer; import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecFactory; import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices; import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext; import org.opendaylight.mdsal.dom.api.DOMSchemaService; -import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.util.ListenerRegistry; +import org.opendaylight.yangtools.concepts.Registration; +import org.opendaylight.yangtools.util.ObjectRegistry; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; -public final class MockSchemaService implements DOMSchemaService, EffectiveModelContextProvider, AdapterContext { +public final class MockSchemaService implements DOMSchemaService, AdapterContext { // Codec has some amount of non-trivial state, such as generated classes. Its operation should not be affected by // anything except BindingRuntimeContext, hence we should be able to reuse it. private static final LoadingCache CODEC_CACHE = @@ -38,31 +37,25 @@ public final class MockSchemaService implements DOMSchemaService, EffectiveModel } }); - private EffectiveModelContext schemaContext; + private EffectiveModelContext modelContext; private CurrentAdapterSerializer serializer; - final ListenerRegistry listeners = ListenerRegistry.create(); + final ObjectRegistry> listeners = ObjectRegistry.createConcurrent("mock schema"); @Override public synchronized EffectiveModelContext getGlobalContext() { - return schemaContext; + return modelContext; } @Override - public ListenerRegistration registerSchemaContextListener( - final EffectiveModelContextListener listener) { + public Registration registerSchemaContextListener(final Consumer listener) { return listeners.register(listener); } - @Override - public synchronized EffectiveModelContext getEffectiveModelContext() { - return schemaContext; - } - public synchronized void changeSchema(final BindingRuntimeContext newContext) { serializer = new CurrentAdapterSerializer(CODEC_CACHE.getUnchecked(newContext)); - schemaContext = newContext.getEffectiveModelContext(); - listeners.streamListeners().forEach(listener -> listener.onModelContextUpdated(schemaContext)); + modelContext = newContext.modelContext(); + listeners.streamObjects().forEach(listener -> listener.accept(modelContext)); } @Override diff --git a/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/AbstractBindingLazyContainerNode.java b/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/AbstractBindingLazyContainerNode.java index cc65a621bc..827c420d9a 100644 --- a/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/AbstractBindingLazyContainerNode.java +++ b/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/AbstractBindingLazyContainerNode.java @@ -54,12 +54,6 @@ public abstract class AbstractBindingLazyContainerNode return identifier; } - @Override - @Deprecated(since = "12.0.0", forRemoval = true) - public final NodeIdentifier getIdentifier() { - return identifier; - } - @Override public final ContainerNode getDelegate() { return delegate(); diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java index 33d9e2ad89..c3e327ec9a 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java @@ -185,7 +185,7 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri final var child = type.schemaTreeChild(qname); if (child == null) { final var module = qname.getModule(); - if (context.getEffectiveModelContext().findModule(module).isEmpty()) { + if (context.modelContext().findModule(module).isEmpty()) { throw new MissingSchemaException( "Module " + module + " is not present in current schema context."); } @@ -649,7 +649,7 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri final Class valueType = method.getReturnType(); final ValueCodec codec = getCodec(valueType, leafSchema.getType()); valueNode = LeafNodeCodecContext.of(leafSchema, codec, method.getName(), valueType, - context.getEffectiveModelContext()); + context.modelContext()); } else if (schema instanceof LeafListSchemaNode leafListSchema) { final Optional optType = ClassLoaderUtils.getFirstGenericParameter( method.getGenericReturnType()); diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecDataObject.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecDataObject.java index 65e4008615..173ccccd44 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecDataObject.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecDataObject.java @@ -45,8 +45,8 @@ public abstract class CodecDataObject implements DataObjec private final @NonNull DataContainerNode data; // Accessed via a VarHandle - @SuppressWarnings("unused") // FIXME: consider using a primitive int-based cache (with 0 being uninit) + @SuppressWarnings("unused") @SuppressFBWarnings(value = "UUF_UNUSED_FIELD", justification = "https://github.com/spotbugs/spotbugs/issues/2749") private volatile Integer cachedHashcode; diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java index 403e3dc57e..67cbc1aa3b 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java @@ -43,7 +43,6 @@ import org.opendaylight.yangtools.yang.binding.DataContainer; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -194,8 +193,8 @@ abstract sealed class DataContainerCodecContext(Bar.QNAME, FOO); - final var data = Builders.containerBuilder() + final var data = ImmutableNodes.newContainerBuilder() .withNodeIdentifier(FOO) - .withChild(Builders.containerBuilder() + .withChild(ImmutableNodes.newContainerBuilder() .withNodeIdentifier(BAR) - .withChild(Builders.leafSetBuilder() + .withChild(ImmutableNodes.newSystemLeafSetBuilder() .withNodeIdentifier(BAR) - .withChild(Builders.leafSetEntryBuilder().withNodeIdentifier(identifier).withValue(FOO).build()) + .withChild(ImmutableNodes.leafSetEntry(Bar.QNAME, FOO)) .build()) .build()) .build(); diff --git a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/NonCachingCodecTest.java b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/NonCachingCodecTest.java index 3a4017a50c..6f2cd64b7e 100644 --- a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/NonCachingCodecTest.java +++ b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/NonCachingCodecTest.java @@ -17,14 +17,14 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeCodec; import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class NonCachingCodecTest { @Mock public BindingNormalizedNodeCodec codec; @Mock - public NormalizedNode node; + public ContainerNode node; @Mock public DataObject object; diff --git a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/BindingRuntimeTypesFactory.java b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/BindingRuntimeTypesFactory.java index 8d28821b53..8617b250b9 100644 --- a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/BindingRuntimeTypesFactory.java +++ b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/BindingRuntimeTypesFactory.java @@ -52,15 +52,15 @@ final class BindingRuntimeTypesFactory implements Mutable { // Hidden on purpose } - static @NonNull BindingRuntimeTypes createTypes(final @NonNull EffectiveModelContext context) { - final var moduleGens = new GeneratorReactor(context).execute(TypeBuilderFactory.runtime()); + static @NonNull BindingRuntimeTypes createTypes(final @NonNull EffectiveModelContext modelContext) { + final var moduleGens = new GeneratorReactor(modelContext).execute(TypeBuilderFactory.runtime()); final var sw = Stopwatch.createStarted(); final var factory = new BindingRuntimeTypesFactory(); factory.indexModules(moduleGens); LOG.debug("Indexed {} generators in {}", moduleGens.size(), sw); - return new DefaultBindingRuntimeTypes(context, factory.modules, factory.allTypes, factory.identities, + return new DefaultBindingRuntimeTypes(modelContext, factory.modules, factory.allTypes, factory.identities, factory.choiceToCases); } diff --git a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingRuntimeGenerator.java b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingRuntimeGenerator.java index f8ba855ea3..1abbcc0d36 100644 --- a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingRuntimeGenerator.java +++ b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingRuntimeGenerator.java @@ -26,8 +26,8 @@ public class DefaultBindingRuntimeGenerator implements BindingRuntimeGenerator { private static final Logger LOG = LoggerFactory.getLogger(DefaultBindingRuntimeGenerator.class); @Override - public BindingRuntimeTypes generateTypeMapping(final EffectiveModelContext context) { - return BindingRuntimeTypesFactory.createTypes(context); + public BindingRuntimeTypes generateTypeMapping(final EffectiveModelContext modelContext) { + return BindingRuntimeTypesFactory.createTypes(modelContext); } @Activate diff --git a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/GeneratorContext.java b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/GeneratorContext.java index a3edbfde57..92ca3341c0 100644 --- a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/GeneratorContext.java +++ b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/GeneratorContext.java @@ -7,6 +7,8 @@ */ package org.opendaylight.mdsal.binding.generator.impl.reactor; +import static java.util.Objects.requireNonNull; + import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; @@ -14,14 +16,19 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.PathExpression; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.spi.AbstractEffectiveModelContextProvider; /** * Abstract view on generation tree as viewed by a particular {@link Generator}. */ -abstract class GeneratorContext extends AbstractEffectiveModelContextProvider { +abstract class GeneratorContext { + private final @NonNull EffectiveModelContext modelContext; + GeneratorContext(final EffectiveModelContext modelContext) { - super(modelContext); + this.modelContext = requireNonNull(modelContext); + } + + final @NonNull EffectiveModelContext modelContext() { + return modelContext; } /** diff --git a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/rt/DefaultBindingRuntimeTypes.java b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/rt/DefaultBindingRuntimeTypes.java index a954560bdb..8f4f6c6167 100644 --- a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/rt/DefaultBindingRuntimeTypes.java +++ b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/rt/DefaultBindingRuntimeTypes.java @@ -37,18 +37,18 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; * The result of BindingGenerator run. Contains mapping between Types and SchemaNodes. */ public final class DefaultBindingRuntimeTypes implements BindingRuntimeTypes { - private final @NonNull EffectiveModelContext context; + private final @NonNull EffectiveModelContext modelContext; private final ImmutableSetMultimap choiceToCases; private final ImmutableMap modulesByNamespace; private final ImmutableSortedMap modulesByPackage; private final ImmutableMap identities; private final ImmutableMap types; - public DefaultBindingRuntimeTypes(final EffectiveModelContext context, + public DefaultBindingRuntimeTypes(final EffectiveModelContext modelContext, final Map modules, final Map types, final Map identities, final SetMultimap choiceToCases) { - this.context = requireNonNull(context); + this.modelContext = requireNonNull(modelContext); this.identities = ImmutableMap.copyOf(identities); this.types = ImmutableMap.copyOf(types); this.choiceToCases = ImmutableSetMultimap.copyOf(choiceToCases); @@ -59,8 +59,8 @@ public final class DefaultBindingRuntimeTypes implements BindingRuntimeTypes { } @Override - public EffectiveModelContext getEffectiveModelContext() { - return context; + public EffectiveModelContext modelContext() { + return modelContext; } @Override diff --git a/binding/mdsal-binding-generator/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal829Test.java b/binding/mdsal-binding-generator/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal829Test.java index 9c77304381..47f1a0200f 100644 --- a/binding/mdsal-binding-generator/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal829Test.java +++ b/binding/mdsal-binding-generator/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal829Test.java @@ -12,29 +12,24 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import java.util.Set; -import org.junit.BeforeClass; import org.junit.Test; import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; public class Mdsal829Test { - private static EffectiveModelContext CONTEXT; - - @BeforeClass - public static void beforeClass() { - CONTEXT = YangParserTestUtils.parseYangResource("/mdsal829.yang", Set.of()); - } + private static final EffectiveModelContext MODEL_CONTEXT = + YangParserTestUtils.parseYangResource("/mdsal829.yang", Set.of()); @Test public void testCompileTimeTypes() { - assertEquals(1, DefaultBindingGenerator.generateFor(CONTEXT).size()); + assertEquals(1, DefaultBindingGenerator.generateFor(MODEL_CONTEXT).size()); } @Test public void testRunTimeTypes() { - final var types = BindingRuntimeTypesFactory.createTypes(CONTEXT); - assertSame(CONTEXT, types.getEffectiveModelContext()); + final var types = BindingRuntimeTypesFactory.createTypes(MODEL_CONTEXT); + assertSame(MODEL_CONTEXT, types.modelContext()); final var schema = types.findSchema( JavaTypeName.create("org.opendaylight.yang.gen.v1.mdsal829.norev", "Mdsal829Data")).orElseThrow(); assertNotNull(schema); diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileGenerator.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileGenerator.java index f890b0a9d4..aed52dea08 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileGenerator.java +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileGenerator.java @@ -35,7 +35,7 @@ import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider; import org.opendaylight.yangtools.yang.binding.contract.Naming; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.YangTextSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,7 +76,7 @@ final class JavaFileGenerator implements FileGenerator { final Builder bindingProviders = ImmutableSet.builder(); for (Module module : localModules) { final YangModuleInfoTemplate template = new YangModuleInfoTemplate(module, context, - mod -> moduleResourcePathResolver.findModuleResourcePath(mod, YangTextSchemaSource.class)); + mod -> moduleResourcePathResolver.findModuleResourcePath(mod, YangTextSource.class)); final String path = DOT_MATCHER.replaceFrom(template.getPackageName(), '/') + "/"; result.put(GeneratedFileType.SOURCE, GeneratedFilePath.ofPath(path + MODULE_INFO), diff --git a/binding/mdsal-binding-runtime-api/pom.xml b/binding/mdsal-binding-runtime-api/pom.xml index c9e3ed1cb8..06a9bd4854 100644 --- a/binding/mdsal-binding-runtime-api/pom.xml +++ b/binding/mdsal-binding-runtime-api/pom.xml @@ -44,10 +44,6 @@ org.opendaylight.yangtools rfc8040-model-api - - org.opendaylight.yangtools - yang-repo-api - org.opendaylight.yangtools yang-repo-spi diff --git a/binding/mdsal-binding-runtime-api/src/main/java/module-info.java b/binding/mdsal-binding-runtime-api/src/main/java/module-info.java index 8d9ab777f9..e39a791783 100644 --- a/binding/mdsal-binding-runtime-api/src/main/java/module-info.java +++ b/binding/mdsal-binding-runtime-api/src/main/java/module-info.java @@ -12,7 +12,6 @@ module org.opendaylight.mdsal.binding.runtime.api { requires transitive org.opendaylight.yangtools.yang.common; requires transitive org.opendaylight.yangtools.yang.model.api; requires transitive org.opendaylight.yangtools.yang.binding; - requires transitive org.opendaylight.yangtools.yang.repo.api; requires transitive org.opendaylight.yangtools.yang.repo.spi; requires transitive org.opendaylight.yangtools.rfc8040.model.api; requires transitive org.opendaylight.mdsal.binding.model.api; diff --git a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeContext.java b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeContext.java index 43cd0cb712..b9219d3475 100644 --- a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeContext.java +++ b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeContext.java @@ -25,7 +25,6 @@ import org.opendaylight.yangtools.yang.common.YangDataName; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; @@ -35,7 +34,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absol */ @Beta // FIXME: refactor return to follow foo()/getFoo()/findFoo() naming -public interface BindingRuntimeContext extends EffectiveModelContextProvider, Immutable { +public interface BindingRuntimeContext extends Immutable { + @NonNull BindingRuntimeTypes getTypes(); @NonNull Class loadClass(JavaTypeName type) throws ClassNotFoundException; @@ -44,9 +44,8 @@ public interface BindingRuntimeContext extends EffectiveModelContextProvider, Im return loadClass(type.getIdentifier()); } - @Override - default EffectiveModelContext getEffectiveModelContext() { - return getTypes().getEffectiveModelContext(); + default @NonNull EffectiveModelContext modelContext() { + return getTypes().modelContext(); } /** diff --git a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeGenerator.java b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeGenerator.java index a44af58f0d..0e6fb1ce41 100644 --- a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeGenerator.java +++ b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeGenerator.java @@ -23,8 +23,8 @@ public interface BindingRuntimeGenerator { * The EffectiveModelContext MUST contain all of the sub modules otherwise the there is no guarantee that result * List of Generated Types will contain correct Generated Types. * - * @param context Schema Context + * @param modelContext effective model context * @return Generated type mapping. */ - BindingRuntimeTypes generateTypeMapping(EffectiveModelContext context); + BindingRuntimeTypes generateTypeMapping(EffectiveModelContext modelContext); } diff --git a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeTypes.java b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeTypes.java index 8114e0df1b..46369f132f 100644 --- a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeTypes.java +++ b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeTypes.java @@ -17,14 +17,21 @@ import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.YangDataName; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; /** * The result of BindingGenerator run. Contains mapping between Types and SchemaNodes. */ @Beta -public interface BindingRuntimeTypes extends EffectiveModelContextProvider, RuntimeTypeContainer, Immutable { +public interface BindingRuntimeTypes extends RuntimeTypeContainer, Immutable { + /** + * Return the {@link EffectiveModelContext} underlying this object. + * + * @return the {@link EffectiveModelContext} underlying this object + */ + @NonNull EffectiveModelContext modelContext(); + /** * Lookup {@link IdentityRuntimeType} by its QNamme. * diff --git a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/ModuleInfoSnapshot.java b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/ModuleInfoSnapshot.java index 733511d477..fa70bfb1f6 100644 --- a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/ModuleInfoSnapshot.java +++ b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/ModuleInfoSnapshot.java @@ -8,14 +8,24 @@ package org.opendaylight.mdsal.binding.runtime.api; import com.google.common.annotations.Beta; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Immutable; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.binding.YangModuleInfo; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.source.YangTextSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; +/** + * A snapshot of a set of {@link YangModuleInfo}s, assembled to form an {@link EffectiveModelContext}. + */ @Beta -public interface ModuleInfoSnapshot extends Immutable, EffectiveModelContextProvider, - SchemaSourceProvider { +public interface ModuleInfoSnapshot extends Immutable, SchemaSourceProvider { + /** + * The {@link EffectiveModelContext} resulting from all models exposed from constituent module infos. + * + * @return the resulting model context + */ + @NonNull EffectiveModelContext modelContext(); Class loadClass(String fullyQualifiedName) throws ClassNotFoundException; } diff --git a/binding/mdsal-binding-runtime-osgi/src/main/java/org/opendaylight/mdsal/binding/runtime/osgi/impl/OSGiBindingRuntime.java b/binding/mdsal-binding-runtime-osgi/src/main/java/org/opendaylight/mdsal/binding/runtime/osgi/impl/OSGiBindingRuntime.java index 4b9982df53..95dadcd1e1 100644 --- a/binding/mdsal-binding-runtime-osgi/src/main/java/org/opendaylight/mdsal/binding/runtime/osgi/impl/OSGiBindingRuntime.java +++ b/binding/mdsal-binding-runtime-osgi/src/main/java/org/opendaylight/mdsal/binding/runtime/osgi/impl/OSGiBindingRuntime.java @@ -19,9 +19,7 @@ import java.util.Set; import org.checkerframework.checker.lock.qual.GuardedBy; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeGenerator; -import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeTypes; import org.opendaylight.mdsal.binding.runtime.api.DefaultBindingRuntimeContext; -import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot; import org.opendaylight.mdsal.dom.schema.osgi.OSGiModuleInfoSnapshot; import org.osgi.service.component.ComponentFactory; import org.osgi.service.component.ComponentInstance; @@ -101,12 +99,12 @@ public final class OSGiBindingRuntime { @Override void add(final OSGiModuleInfoSnapshot snapshot) { - final ModuleInfoSnapshot context = snapshot.getService(); - final BindingRuntimeTypes types = generator.generateTypeMapping(context.getEffectiveModelContext()); + final var infoSnapshot = snapshot.getService(); + final var types = generator.generateTypeMapping(infoSnapshot.modelContext()); instances.put(snapshot, factory.newInstance(OSGiBindingRuntimeContextImpl.props( snapshot.getGeneration(), snapshot.getServiceRanking(), - new DefaultBindingRuntimeContext(types, context)))); + new DefaultBindingRuntimeContext(types, infoSnapshot)))); } @Override diff --git a/binding/mdsal-binding-runtime-spi/pom.xml b/binding/mdsal-binding-runtime-spi/pom.xml index ec3a29dcb4..a0ad389181 100644 --- a/binding/mdsal-binding-runtime-spi/pom.xml +++ b/binding/mdsal-binding-runtime-spi/pom.xml @@ -44,6 +44,10 @@ org.opendaylight.yangtools yang-model-api + + + org.opendaylight.yangtools + yang-model-spi org.opendaylight.yangtools diff --git a/binding/mdsal-binding-runtime-spi/src/main/java/module-info.java b/binding/mdsal-binding-runtime-spi/src/main/java/module-info.java index ec3c2e23ce..36e8fba403 100644 --- a/binding/mdsal-binding-runtime-spi/src/main/java/module-info.java +++ b/binding/mdsal-binding-runtime-spi/src/main/java/module-info.java @@ -13,6 +13,7 @@ module org.opendaylight.mdsal.binding.runtime.spi { requires org.opendaylight.yangtools.concepts; requires org.opendaylight.yangtools.util; requires org.opendaylight.yangtools.yang.model.api; + requires org.opendaylight.yangtools.yang.model.spi; requires org.opendaylight.yangtools.yang.parser.impl; requires org.opendaylight.mdsal.binding.model.api; requires org.opendaylight.mdsal.binding.spec.util; diff --git a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/BindingRuntimeHelpers.java b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/BindingRuntimeHelpers.java index ea026071a3..e4db5c3d44 100644 --- a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/BindingRuntimeHelpers.java +++ b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/BindingRuntimeHelpers.java @@ -55,7 +55,7 @@ public final class BindingRuntimeHelpers { public static @NonNull EffectiveModelContext createEffectiveModel(final YangParserFactory parserFactory, final Iterable moduleInfos) throws YangParserException { - return prepareContext(parserFactory, moduleInfos).getEffectiveModelContext(); + return prepareContext(parserFactory, moduleInfos).modelContext(); } public static @NonNull BindingRuntimeContext createRuntimeContext() { @@ -66,7 +66,7 @@ public final class BindingRuntimeHelpers { throw new IllegalStateException("Failed to parse models", e); } return new DefaultBindingRuntimeContext(ServiceLoaderState.Generator.INSTANCE.generateTypeMapping( - infos.getEffectiveModelContext()), infos); + infos.modelContext()), infos); } public static @NonNull BindingRuntimeContext createRuntimeContext(final Class... classes) { @@ -89,7 +89,7 @@ public final class BindingRuntimeHelpers { } return new DefaultBindingRuntimeContext( - ServiceLoaderState.Generator.INSTANCE.generateTypeMapping(snapshot.getEffectiveModelContext()), snapshot); + ServiceLoaderState.Generator.INSTANCE.generateTypeMapping(snapshot.modelContext()), snapshot); } public static @NonNull BindingRuntimeContext createRuntimeContext(final YangParserFactory parserFactory, @@ -99,10 +99,10 @@ public final class BindingRuntimeHelpers { public static @NonNull BindingRuntimeContext createRuntimeContext(final YangParserFactory parserFactory, final BindingRuntimeGenerator generator, final Collection> classes) throws YangParserException { - final ModuleInfoSnapshot infos = prepareContext(parserFactory, classes.stream() + final var infos = prepareContext(parserFactory, classes.stream() .map(BindingRuntimeHelpers::getYangModuleInfo) .collect(Collectors.toList())); - return new DefaultBindingRuntimeContext(generator.generateTypeMapping(infos.getEffectiveModelContext()), infos); + return new DefaultBindingRuntimeContext(generator.generateTypeMapping(infos.modelContext()), infos); } public static @NonNull YangModuleInfo getYangModuleInfo(final Class clazz) { diff --git a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/DefaultModuleInfoSnapshot.java b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/DefaultModuleInfoSnapshot.java index d5f4971a98..94298c1bb1 100644 --- a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/DefaultModuleInfoSnapshot.java +++ b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/DefaultModuleInfoSnapshot.java @@ -18,47 +18,45 @@ import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot; import org.opendaylight.yangtools.yang.binding.YangModuleInfo; import org.opendaylight.yangtools.yang.binding.contract.Naming; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangTextSource; import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.DelegatedYangTextSource; final class DefaultModuleInfoSnapshot implements ModuleInfoSnapshot { private final ImmutableMap moduleInfos; private final ImmutableMap classLoaders; - private final @NonNull EffectiveModelContext effectiveModel; + private final @NonNull EffectiveModelContext modelContext; - DefaultModuleInfoSnapshot(final EffectiveModelContext effectiveModel, + DefaultModuleInfoSnapshot(final EffectiveModelContext modelContext, final Map moduleInfos, final Map classLoaders) { - this.effectiveModel = requireNonNull(effectiveModel); + this.modelContext = requireNonNull(modelContext); this.moduleInfos = ImmutableMap.copyOf(moduleInfos); this.classLoaders = ImmutableMap.copyOf(classLoaders); } @Override - public EffectiveModelContext getEffectiveModelContext() { - return effectiveModel; + public EffectiveModelContext modelContext() { + return modelContext; } @Override - public ListenableFuture getSource(final SourceIdentifier sourceIdentifier) { - final YangModuleInfo info = moduleInfos.get(sourceIdentifier); - if (info == null) { - return Futures.immediateFailedFuture( - new MissingSchemaSourceException("No source registered", sourceIdentifier)); - } - return Futures.immediateFuture(YangTextSchemaSource.delegateForCharSource(sourceIdentifier, - info.getYangTextCharSource())); + public ListenableFuture getSource(final SourceIdentifier sourceId) { + final var info = moduleInfos.get(sourceId); + return info == null + ? Futures.immediateFailedFuture(new MissingSchemaSourceException(sourceId, "No source registered")) + : Futures.immediateFuture(new DelegatedYangTextSource(sourceId, info.getYangTextCharSource())); } @Override public Class loadClass(final String fullyQualifiedName) throws ClassNotFoundException { - final String packageName = Naming.getModelRootPackageName(fullyQualifiedName); - final ClassLoader loader = classLoaders.get(packageName); + final var packageName = Naming.getModelRootPackageName(fullyQualifiedName); + final var loader = classLoaders.get(packageName); if (loader == null) { throw new ClassNotFoundException("Package " + packageName + " not found"); } @SuppressWarnings("unchecked") - final Class loaded = (Class) loader.loadClass(fullyQualifiedName); + final var loaded = (Class) loader.loadClass(fullyQualifiedName); return loaded; } } diff --git a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ForwardingModuleInfoSnapshot.java b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ForwardingModuleInfoSnapshot.java index 90454856ee..1564797e7e 100644 --- a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ForwardingModuleInfoSnapshot.java +++ b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ForwardingModuleInfoSnapshot.java @@ -13,8 +13,8 @@ import com.google.common.util.concurrent.ListenableFuture; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangTextSource; @Beta public abstract class ForwardingModuleInfoSnapshot extends ForwardingObject implements ModuleInfoSnapshot { @@ -27,12 +27,12 @@ public abstract class ForwardingModuleInfoSnapshot extends ForwardingObject impl } @Override - public @NonNull EffectiveModelContext getEffectiveModelContext() { - return delegate().getEffectiveModelContext(); + public @NonNull EffectiveModelContext modelContext() { + return delegate().modelContext(); } @Override - public ListenableFuture getSource(final SourceIdentifier sourceIdentifier) { + public ListenableFuture getSource(final SourceIdentifier sourceIdentifier) { return delegate().getSource(sourceIdentifier); } } diff --git a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotBuilder.java b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotBuilder.java index b4cce3390c..363cdab4a3 100644 --- a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotBuilder.java +++ b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotBuilder.java @@ -29,8 +29,8 @@ import org.opendaylight.yangtools.yang.binding.YangModuleInfo; import org.opendaylight.yangtools.yang.binding.contract.Naming; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureSet; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.api.YangParser; import org.opendaylight.yangtools.yang.parser.api.YangParserException; import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; @@ -107,7 +107,7 @@ public final class ModuleInfoSnapshotBuilder { for (var info : moduleInfos) { final var source = ModuleInfoSnapshotResolver.toYangTextSource(info); - mappedInfos.put(source.getIdentifier(), info); + mappedInfos.put(source.sourceId(), info); final Class infoClass = info.getClass(); final String infoRoot = Naming.getModelRootPackageName(infoClass.getPackage().getName()); diff --git a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotResolver.java b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotResolver.java index ab655c8782..d98becaaba 100644 --- a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotResolver.java +++ b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotResolver.java @@ -37,12 +37,12 @@ import org.opendaylight.yangtools.yang.binding.YangFeature; import org.opendaylight.yangtools.yang.binding.YangModuleInfo; import org.opendaylight.yangtools.yang.binding.contract.Naming; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangTextSource; import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleEffectiveStatement; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.DelegatedYangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; import org.opendaylight.yangtools.yang.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.parser.repo.YangTextSchemaContextResolver; @@ -167,7 +167,7 @@ public final class ModuleInfoSnapshotResolver implements Mutable { public synchronized @NonNull ModuleInfoSnapshot takeSnapshot() { final var effectiveModel = ctxResolver.getEffectiveModelContext().orElseThrow(); final var local = currentSnapshot; - if (local != null && local.getEffectiveModelContext().equals(effectiveModel)) { + if (local != null && local.modelContext().equals(effectiveModel)) { return local; } @@ -175,10 +175,10 @@ public final class ModuleInfoSnapshotResolver implements Mutable { } @Holding("this") - private @NonNull ModuleInfoSnapshot updateSnapshot(final EffectiveModelContext effectiveModel) { + private @NonNull ModuleInfoSnapshot updateSnapshot(final EffectiveModelContext modelContext) { // Alright, now let's find out which sources got captured final var sources = new HashSet(); - for (var entry : effectiveModel.getModuleStatements().entrySet()) { + for (var entry : modelContext.getModuleStatements().entrySet()) { final var revision = entry.getKey().getRevision().orElse(null); final var module = entry.getValue(); @@ -202,7 +202,7 @@ public final class ModuleInfoSnapshotResolver implements Mutable { infoClass.getClassLoader()); } - final var next = new DefaultModuleInfoSnapshot(effectiveModel, moduleInfos, classLoaders); + final var next = new DefaultModuleInfoSnapshot(modelContext, moduleInfos, classLoaders); currentSnapshot = next; return next; } @@ -223,19 +223,18 @@ public final class ModuleInfoSnapshotResolver implements Mutable { } } - static @NonNull YangTextSchemaSource toYangTextSource(final YangModuleInfo moduleInfo) { - return YangTextSchemaSource.delegateForCharSource(sourceIdentifierFrom(moduleInfo), - moduleInfo.getYangTextCharSource()); + static @NonNull YangTextSource toYangTextSource(final YangModuleInfo moduleInfo) { + return new DelegatedYangTextSource(sourceIdentifierFrom(moduleInfo), moduleInfo.getYangTextCharSource()); } - private static @NonNull YangTextSchemaSource toYangTextSource(final SourceIdentifier identifier, + private static @NonNull YangTextSource toYangTextSource(final SourceIdentifier identifier, final YangModuleInfo moduleInfo) { - return YangTextSchemaSource.delegateForCharSource(identifier, moduleInfo.getYangTextCharSource()); + return new DelegatedYangTextSource(identifier, moduleInfo.getYangTextCharSource()); } private static SourceIdentifier sourceIdentifierFrom(final YangModuleInfo moduleInfo) { final var name = moduleInfo.getName(); - return new SourceIdentifier(name.getLocalName(), name.getRevision().map(Revision::toString).orElse(null)); + return new SourceIdentifier(name.getLocalName(), name.getRevision().orElse(null)); } private static @NonNull List<@NonNull YangModuleInfo> flatDependencies(final YangModuleInfo moduleInfo) { diff --git a/binding/mdsal-binding-runtime-spi/src/test/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotBuilderTest.java b/binding/mdsal-binding-runtime-spi/src/test/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotBuilderTest.java index 69306a65fc..babc6783d9 100644 --- a/binding/mdsal-binding-runtime-spi/src/test/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotBuilderTest.java +++ b/binding/mdsal-binding-runtime-spi/src/test/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotBuilderTest.java @@ -7,40 +7,31 @@ */ package org.opendaylight.mdsal.binding.runtime.spi; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; -import java.util.Map; import java.util.Set; -import org.junit.Test; -import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot; +import org.junit.jupiter.api.Test; import org.opendaylight.yang.gen.v1.mdsal767.norev.$YangModuleInfoImpl; import org.opendaylight.yang.gen.v1.mdsal767.norev.Mdsal767Data; import org.opendaylight.yang.gen.v1.mdsal767.norev.One$F; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.XMLNamespace; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.stmt.FeatureEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.api.YangParserException; -import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; import org.opendaylight.yangtools.yang.parser.impl.DefaultYangParserFactory; -public class ModuleInfoSnapshotBuilderTest { - private static final YangParserFactory PARSER_FACTORY = new DefaultYangParserFactory(); - +class ModuleInfoSnapshotBuilderTest { @Test - public void testModuleRegistration() throws YangParserException { - final ModuleInfoSnapshotBuilder snapshotBuilder = new ModuleInfoSnapshotBuilder(PARSER_FACTORY); + void testModuleRegistration() throws Exception { + final var snapshotBuilder = new ModuleInfoSnapshotBuilder(new DefaultYangParserFactory()); snapshotBuilder.add($YangModuleInfoImpl.getInstance()); snapshotBuilder.addModuleFeatures(Mdsal767Data.class, Set.of(One$F.VALUE)); - final ModuleInfoSnapshot snapshot = snapshotBuilder.build(); - final EffectiveModelContext modelContext = snapshot.getEffectiveModelContext(); - final Map modules = modelContext.getModuleStatements(); - final ModuleEffectiveStatement module = modules.get(QNameModule.create(XMLNamespace.of("mdsal767"))); + final var snapshot = snapshotBuilder.build(); + final var modelContext = snapshot.modelContext(); + final var modules = modelContext.getModuleStatements(); + final var module = modules.get(QNameModule.create(XMLNamespace.of("mdsal767"))); assertEquals(1, module.features().size()); - final FeatureEffectiveStatement feature = module.features().stream().findAny().orElseThrow(); + final var feature = module.features().stream().findAny().orElseThrow(); assertEquals(QName.create("mdsal767", "one"), feature.argument()); } } diff --git a/binding/mdsal-binding-test-utils/src/main/java/org/opendaylight/mdsal/binding/testutils/DataBrokerTestModule.java b/binding/mdsal-binding-test-utils/src/main/java/org/opendaylight/mdsal/binding/testutils/DataBrokerTestModule.java index 6d87d67129..79a86e2516 100644 --- a/binding/mdsal-binding-test-utils/src/main/java/org/opendaylight/mdsal/binding/testutils/DataBrokerTestModule.java +++ b/binding/mdsal-binding-test-utils/src/main/java/org/opendaylight/mdsal/binding/testutils/DataBrokerTestModule.java @@ -9,13 +9,14 @@ package org.opendaylight.mdsal.binding.testutils; import com.google.common.annotations.Beta; import com.google.common.base.Throwables; +import java.util.function.Supplier; import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.dom.adapter.CurrentAdapterSerializer; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest; import org.opendaylight.mdsal.dom.api.DOMDataBroker; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.mdsal.dom.broker.DOMNotificationRouter; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @Beta public class DataBrokerTestModule { @@ -65,7 +66,7 @@ public class DataBrokerTestModule { return dataBrokerTest.getDataBrokerTestCustomizer().getSchemaService(); } - public EffectiveModelContextProvider getSchemaContextProvider() { + public Supplier getModelContextSupplier() { return dataBrokerTest.getDataBrokerTestCustomizer().getSchemaService()::getGlobalContext; } } diff --git a/docs/pom.xml b/docs/pom.xml index d1db0ff011..1dbb8ae388 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -583,7 +583,7 @@ https://commons.apache.org/proper/commons-lang/javadocs/api-release/ https://www.javadoc.io/doc/org.opendaylight.odlparent/odlparent-docs/13.0.10/ - https://www.javadoc.io/doc/org.opendaylight.yangtools/yangtools-docs/11.0.5/ + https://www.javadoc.io/doc/org.opendaylight.yangtools/yangtools-docs/13.0.0/ diff --git a/dom/dom-parent/pom.xml b/dom/dom-parent/pom.xml index 2df5ffd31a..7aaaa62de6 100644 --- a/dom/dom-parent/pom.xml +++ b/dom/dom-parent/pom.xml @@ -29,7 +29,7 @@ org.opendaylight.yangtools yangtools-artifacts - 11.0.5 + 13.0.0 pom import diff --git a/dom/mdsal-dom-api/pom.xml b/dom/mdsal-dom-api/pom.xml index 33e30eb120..37d322d84e 100644 --- a/dom/mdsal-dom-api/pom.xml +++ b/dom/mdsal-dom-api/pom.xml @@ -73,7 +73,7 @@ org.opendaylight.yangtools - yang-repo-api + yang-model-spi org.opendaylight.yangtools diff --git a/dom/mdsal-dom-api/src/main/java/module-info.java b/dom/mdsal-dom-api/src/main/java/module-info.java index 96c88e0be4..dad7ab6946 100644 --- a/dom/mdsal-dom-api/src/main/java/module-info.java +++ b/dom/mdsal-dom-api/src/main/java/module-info.java @@ -14,7 +14,7 @@ module org.opendaylight.mdsal.dom.api { requires transitive org.opendaylight.yangtools.yang.data.api; requires transitive org.opendaylight.yangtools.yang.data.tree.api; requires transitive org.opendaylight.yangtools.yang.model.api; - requires transitive org.opendaylight.yangtools.yang.repo.api; + requires transitive org.opendaylight.yangtools.yang.model.spi; requires transitive org.opendaylight.yangtools.yang.repo.spi; requires transitive org.opendaylight.mdsal.common.api; requires transitive org.opendaylight.yangtools.concepts; diff --git a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMSchemaService.java b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMSchemaService.java index b8022ce455..8770f96f20 100644 --- a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMSchemaService.java +++ b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMSchemaService.java @@ -7,11 +7,12 @@ */ package org.opendaylight.mdsal.dom.api; -import org.eclipse.jdt.annotation.NonNull; +import java.util.function.Consumer; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; +@NonNullByDefault public interface DOMSchemaService extends DOMService { /** * Type capture of a {@link DOMService.Extension} applicable to {@link DOMSchemaService} implementations. @@ -34,5 +35,5 @@ public interface DOMSchemaService extends DOMService listener); } diff --git a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMYangTextSourceProvider.java b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMYangTextSourceProvider.java index 0f13330889..c547b94f6a 100644 --- a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMYangTextSourceProvider.java +++ b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMYangTextSourceProvider.java @@ -8,15 +8,15 @@ package org.opendaylight.mdsal.dom.api; import com.google.common.annotations.Beta; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.YangTextSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; /** - * A {@link DOMSchemaService.Extension} exposing access to {@link YangTextSchemaSource}. Instances of this method should + * A {@link DOMSchemaService.Extension} exposing access to {@link YangTextSource}. Instances of this method should * be acquired from {@link DOMSchemaService}. */ @Beta public interface DOMYangTextSourceProvider - extends DOMSchemaService.Extension, SchemaSourceProvider { + extends DOMSchemaService.Extension, SchemaSourceProvider { } diff --git a/dom/mdsal-dom-broker/pom.xml b/dom/mdsal-dom-broker/pom.xml index da6c07040d..1ccdb90429 100644 --- a/dom/mdsal-dom-broker/pom.xml +++ b/dom/mdsal-dom-broker/pom.xml @@ -75,7 +75,7 @@ org.opendaylight.yangtools - yang-repo-api + yang-model-spi com.guicedee.services diff --git a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java index 3b6587a802..a8daf7fe91 100644 --- a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java +++ b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java @@ -62,7 +62,6 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; @@ -73,7 +72,7 @@ import org.slf4j.LoggerFactory; @Singleton @Component(service = DOMRpcRouter.class) -public final class DOMRpcRouter extends AbstractRegistration implements EffectiveModelContextListener { +public final class DOMRpcRouter extends AbstractRegistration { private static final Logger LOG = LoggerFactory.getLogger(DOMRpcRouter.class); private static final ThreadFactory THREAD_FACTORY = new ThreadFactoryBuilder().setNameFormat( "DOMRpcRouter-listener-%s").setDaemon(true).build(); @@ -106,7 +105,7 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv @Inject @Activate public DOMRpcRouter(@Reference final DOMSchemaService schemaService) { - listenerRegistration = schemaService.registerSchemaContextListener(this); + listenerRegistration = schemaService.registerSchemaContextListener(this::onModelContextUpdated); LOG.info("DOM RPC/Action router started"); } @@ -209,8 +208,8 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv } } - @Override - public synchronized void onModelContextUpdated(final EffectiveModelContext newModelContext) { + + synchronized void onModelContextUpdated(final @NonNull EffectiveModelContext newModelContext) { final DOMRpcRoutingTable oldTable = routingTable; final DOMRpcRoutingTable newTable = (DOMRpcRoutingTable) oldTable.setSchemaContext(newModelContext); routingTable = newTable; diff --git a/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/Rpcs.java b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/Rpcs.java index 22f77b0471..6182099b02 100644 --- a/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/Rpcs.java +++ b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/Rpcs.java @@ -11,7 +11,9 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.extension.yang.ext.rev130709.$YangModuleInfoImpl; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.spi.source.DelegatedYangTextSource; +import org.opendaylight.yangtools.yang.model.spi.source.URLYangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; @@ -19,9 +21,9 @@ import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; final class Rpcs { static final EffectiveModelContext CONTEXT = YangParserTestUtils.parseYangSources(YangParserConfiguration.DEFAULT, null, - YangTextSchemaSource.delegateForCharSource("yang-ext.yang", + new DelegatedYangTextSource(new SourceIdentifier("yang-ext.yang"), $YangModuleInfoImpl.getInstance().getYangTextCharSource()), - YangTextSchemaSource.forResource(Rpcs.class, "/rpcs.yang")); + new URLYangTextSource(Rpcs.class.getResource("/rpcs.yang"))); static final QName FOO = QName.create("rpcs", "foo"); static final QName BAR = QName.create(FOO, "bar"); diff --git a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStore.java b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStore.java index 15f5fde879..abcfd7a965 100644 --- a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStore.java +++ b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStore.java @@ -37,7 +37,6 @@ import org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot; import org.opendaylight.yangtools.yang.data.tree.api.DataValidationFailedException; import org.opendaylight.yangtools.yang.data.tree.impl.di.InMemoryDataTreeFactory; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,7 +46,7 @@ import org.slf4j.LoggerFactory; * {@link org.opendaylight.mdsal.dom.spi.store.SnapshotBackedReadTransaction} to implement {@link DOMStore} contract. */ public class InMemoryDOMDataStore extends TransactionReadyPrototype implements DOMStore, - Identifiable, EffectiveModelContextListener, AutoCloseable, DOMStoreTreeChangePublisher { + Identifiable, AutoCloseable, DOMStoreTreeChangePublisher { private static final Logger LOG = LoggerFactory.getLogger(InMemoryDOMDataStore.class); private final AtomicLong txCounter = new AtomicLong(0); @@ -97,6 +96,10 @@ public class InMemoryDOMDataStore extends TransactionReadyPrototype impl return name; } + public final synchronized void onModelContextUpdated(final EffectiveModelContext newModelContext) { + dataTree.setEffectiveModelContext(newModelContext); + } + @Override public DOMStoreReadTransaction newReadOnlyTransaction() { return SnapshotBackedTransactions.newReadTransaction(nextIdentifier(), debugTransactions, @@ -120,11 +123,6 @@ public class InMemoryDOMDataStore extends TransactionReadyPrototype impl return new DOMStoreTransactionChainImpl(this); } - @Override - public synchronized void onModelContextUpdated(final EffectiveModelContext newModelContext) { - dataTree.setEffectiveModelContext(newModelContext); - } - @SuppressWarnings("checkstyle:IllegalCatch") @Override public void close() { diff --git a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStoreFactory.java b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStoreFactory.java index 0db38fe3aa..f780b4cbbc 100644 --- a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStoreFactory.java +++ b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStoreFactory.java @@ -50,7 +50,7 @@ public final class InMemoryDOMDataStoreFactory { properties.getMaxDataChangeListenerQueueSize(), properties.getDebugTransactions()); if (schemaService != null) { - schemaService.registerSchemaContextListener(dataStore); + schemaService.registerSchemaContextListener(dataStore::onModelContextUpdated); } return dataStore; diff --git a/dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStoreFactoryTest.java b/dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStoreFactoryTest.java index d774f698c6..86ce3e5d23 100644 --- a/dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStoreFactoryTest.java +++ b/dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStoreFactoryTest.java @@ -7,43 +7,45 @@ */ package org.opendaylight.mdsal.dom.store.inmemory; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; -public class InMemoryDOMDataStoreFactoryTest { +@ExtendWith(MockitoExtension.class) +class InMemoryDOMDataStoreFactoryTest { + @Mock + private DOMSchemaService domSchemaService; + @Mock + private DOMDataTreeChangeListener domDataTreeChangeListener; + @Mock + private AutoCloseable autoCloseable; @Test public void basicTest() throws Exception { final String testStoreName = "TestStore"; - final DOMSchemaService domSchemaService = mock(DOMSchemaService.class); - doReturn(null).when(domSchemaService).registerSchemaContextListener(any(EffectiveModelContextListener.class)); + doReturn(null).when(domSchemaService).registerSchemaContextListener(any()); - final InMemoryDOMDataStore inMemoryDOMDataStore = - InMemoryDOMDataStoreFactory.create(testStoreName, domSchemaService); + final var inMemoryDOMDataStore = InMemoryDOMDataStoreFactory.create(testStoreName, domSchemaService); assertNotNull(inMemoryDOMDataStore); assertEquals(testStoreName, inMemoryDOMDataStore.getIdentifier()); - final DOMDataTreeChangeListener domDataTreeChangeListener = mock(DOMDataTreeChangeListener.class); - doReturn("testListener").when(domDataTreeChangeListener).toString(); - doNothing().when(domDataTreeChangeListener).onDataTreeChanged(any()); doNothing().when(domDataTreeChangeListener).onInitialData(); inMemoryDOMDataStore.onModelContextUpdated(TestModel.createTestContext()); inMemoryDOMDataStore.registerTreeChangeListener(YangInstanceIdentifier.of(), domDataTreeChangeListener); - final AutoCloseable autoCloseable = mock(AutoCloseable.class); doNothing().when(autoCloseable).close(); inMemoryDOMDataStore.setCloseable(autoCloseable); inMemoryDOMDataStore.close(); diff --git a/dom/mdsal-dom-schema-osgi/pom.xml b/dom/mdsal-dom-schema-osgi/pom.xml index accfeb6e60..af320a17b2 100644 --- a/dom/mdsal-dom-schema-osgi/pom.xml +++ b/dom/mdsal-dom-schema-osgi/pom.xml @@ -22,7 +22,7 @@ org.opendaylight.mdsal - mdsal-dom-spi + mdsal-dom-api org.opendaylight.mdsal diff --git a/dom/mdsal-dom-schema-osgi/src/main/java/module-info.java b/dom/mdsal-dom-schema-osgi/src/main/java/module-info.java index 464e8b18db..48f5d80aff 100644 --- a/dom/mdsal-dom-schema-osgi/src/main/java/module-info.java +++ b/dom/mdsal-dom-schema-osgi/src/main/java/module-info.java @@ -11,7 +11,7 @@ module org.opendaylight.mdsal.dom.schema.osgi { requires transitive com.google.common; requires transitive org.opendaylight.mdsal.binding.runtime.api; requires org.opendaylight.mdsal.binding.runtime.spi; - requires org.opendaylight.mdsal.dom.spi; + requires org.opendaylight.mdsal.dom.api; requires org.opendaylight.yangtools.yang.binding; requires org.opendaylight.yangtools.yang.model.api; requires org.opendaylight.yangtools.yang.parser.api; @@ -23,4 +23,4 @@ module org.opendaylight.mdsal.dom.schema.osgi { // Annotations requires static org.apache.karaf.features.core; requires static org.osgi.service.component.annotations; -} \ No newline at end of file +} diff --git a/dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/EffectiveModelContextImpl.java b/dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/ModelContextListener.java similarity index 57% rename from dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/EffectiveModelContextImpl.java rename to dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/ModelContextListener.java index c790345e2a..14dc0e9e52 100644 --- a/dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/EffectiveModelContextImpl.java +++ b/dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/ModelContextListener.java @@ -12,34 +12,29 @@ import static com.google.common.base.Verify.verifyNotNull; import com.google.common.annotations.VisibleForTesting; import java.util.Dictionary; import java.util.Map; +import java.util.function.Consumer; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; import org.osgi.framework.FrameworkUtil; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Deactivate; /** - * A Factory Component which implements {@link EffectiveModelContextListener}. Instances of this component are created - * through by {@link OSGiDOMSchemaService} each time a listener is registered. + * A Factory Component for OSGi SR manifestation of a {@code Consumer}. Instances of this + * component are created through by {@link OSGiDOMSchemaService} each time a listener is registered. */ -@Component(factory = EffectiveModelContextImpl.FACTORY_NAME, service = EffectiveModelContextListener.class) -public final class EffectiveModelContextImpl implements EffectiveModelContextListener { +@Component(factory = ModelContextListener.FACTORY_NAME, service = ModelContextListener.class) +public final class ModelContextListener { static final String FACTORY_NAME = "org.opendaylight.mdsal.dom.schema.osgi.impl.SchemaSchemaContextListener"; @VisibleForTesting static final String DELEGATE = "org.opendaylight.mdsal.dom.schema.osgi.SchemaSchemaContextListener"; - private EffectiveModelContextListener delegate = null; - - @Override - public void onModelContextUpdated(final EffectiveModelContext newModelContext) { - delegate.onModelContextUpdated(newModelContext); - } + private Consumer delegate = null; @Activate - void activate(final Map properties) { - delegate = (EffectiveModelContextListener) verifyNotNull(properties.get(DELEGATE)); + public ModelContextListener(final Map properties) { + delegate = (Consumer) verifyNotNull(properties.get(DELEGATE)); } @Deactivate @@ -47,7 +42,11 @@ public final class EffectiveModelContextImpl implements EffectiveModelContextLis delegate = null; } - static Dictionary props(final EffectiveModelContextListener delegate) { + void onModelContextUpdated(final EffectiveModelContext newModelContext) { + delegate.accept(newModelContext); + } + + static Dictionary props(final Consumer delegate) { return FrameworkUtil.asDictionary(Map.of(DELEGATE, delegate)); } } diff --git a/dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/OSGiDOMSchemaService.java b/dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/OSGiDOMSchemaService.java index 0512f65cbe..a1ace089a0 100644 --- a/dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/OSGiDOMSchemaService.java +++ b/dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/OSGiDOMSchemaService.java @@ -13,17 +13,17 @@ import com.google.common.util.concurrent.ListenableFuture; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Consumer; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot; import org.opendaylight.mdsal.dom.api.DOMSchemaService; +import org.opendaylight.mdsal.dom.api.DOMYangTextSourceProvider; import org.opendaylight.mdsal.dom.schema.osgi.OSGiModuleInfoSnapshot; -import org.opendaylight.mdsal.dom.spi.AbstractDOMSchemaService; import org.opendaylight.yangtools.concepts.AbstractRegistration; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangTextSource; import org.osgi.service.component.ComponentFactory; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; @@ -39,20 +39,19 @@ import org.slf4j.LoggerFactory; * OSGi Service Registry-backed implementation of {@link DOMSchemaService}. */ @Component(service = DOMSchemaService.class, immediate = true) -public final class OSGiDOMSchemaService extends AbstractDOMSchemaService.WithYangTextSources { +public final class OSGiDOMSchemaService implements DOMSchemaService, DOMYangTextSourceProvider { private static final Logger LOG = LoggerFactory.getLogger(OSGiDOMSchemaService.class); - - private final List listeners = new CopyOnWriteArrayList<>(); + private final List> listeners = new CopyOnWriteArrayList<>(); private final AtomicReference currentSnapshot = new AtomicReference<>(); - private final ComponentFactory listenerFactory; + private final ComponentFactory listenerFactory; private boolean deactivated; @Activate public OSGiDOMSchemaService( - @Reference(target = "(component.factory=" + EffectiveModelContextImpl.FACTORY_NAME + ")") - final ComponentFactory listenerFactory) { + @Reference(target = "(component.factory=" + ModelContextListener.FACTORY_NAME + ")") + final ComponentFactory listenerFactory) { this.listenerFactory = requireNonNull(listenerFactory); LOG.info("DOM Schema services activated"); } @@ -67,7 +66,7 @@ public final class OSGiDOMSchemaService extends AbstractDOMSchemaService.WithYan void bindSnapshot(final OSGiModuleInfoSnapshot newContext) { LOG.info("Updating context to generation {}", newContext.getGeneration()); final var snapshot = newContext.getService(); - final var modelContext = snapshot.getEffectiveModelContext(); + final var modelContext = snapshot.modelContext(); final var previous = currentSnapshot.getAndSet(snapshot); LOG.debug("Snapshot updated from {} to {}", previous, snapshot); @@ -83,25 +82,25 @@ public final class OSGiDOMSchemaService extends AbstractDOMSchemaService.WithYan @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC, policyOption = ReferencePolicyOption.GREEDY) - void addListener(final EffectiveModelContextListener listener) { + void addListener(final Consumer listener) { LOG.trace("Adding listener {}", listener); listeners.add(listener); - listener.onModelContextUpdated(getGlobalContext()); + listener.accept(getGlobalContext()); } - void removeListener(final EffectiveModelContextListener listener) { + void removeListener(final Consumer listener) { LOG.trace("Removing listener {}", listener); listeners.remove(listener); } @Override public @NonNull EffectiveModelContext getGlobalContext() { - return currentSnapshot.get().getEffectiveModelContext(); + return currentSnapshot.get().modelContext(); } @Override - public Registration registerSchemaContextListener(final EffectiveModelContextListener listener) { - final var reg = listenerFactory.newInstance(EffectiveModelContextImpl.props(listener)); + public Registration registerSchemaContextListener(final Consumer listener) { + final var reg = listenerFactory.newInstance(ModelContextListener.props(listener)); return new AbstractRegistration() { @Override protected void removeRegistration() { @@ -111,15 +110,15 @@ public final class OSGiDOMSchemaService extends AbstractDOMSchemaService.WithYan } @Override - public ListenableFuture getSource(final SourceIdentifier sourceIdentifier) { + public ListenableFuture getSource(final SourceIdentifier sourceIdentifier) { return currentSnapshot.get().getSource(sourceIdentifier); } @SuppressWarnings("checkstyle:illegalCatch") private static void notifyListener(final @NonNull EffectiveModelContext modelContext, - final EffectiveModelContextListener listener) { + final Consumer listener) { try { - listener.onModelContextUpdated(modelContext); + listener.accept(modelContext); } catch (RuntimeException e) { LOG.warn("Failed to notify listener {}", listener, e); } diff --git a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/AbstractDOMSchemaService.java b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/AbstractDOMSchemaService.java deleted file mode 100644 index cd3e663d60..0000000000 --- a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/AbstractDOMSchemaService.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2019 Red Hat, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.mdsal.dom.spi; - -import java.util.List; -import org.opendaylight.mdsal.dom.api.DOMSchemaService; -import org.opendaylight.mdsal.dom.api.DOMYangTextSourceProvider; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; - -/** - * Base class to implement DOMSchemaService more easily while providing a bridge between MD-SAL DOM Schema services - * and YANG Tools Schema consumers. - * - * @author Michael Vorburger.ch - */ -public abstract class AbstractDOMSchemaService implements DOMSchemaService, EffectiveModelContextProvider { - public abstract static class WithYangTextSources extends AbstractDOMSchemaService - implements DOMYangTextSourceProvider { - @Override - public List supportedExtensions() { - return List.of(this); - } - } - - @Override - public final EffectiveModelContext getEffectiveModelContext() { - final var ret = getGlobalContext(); - if (ret == null) { - throw new IllegalStateException("Global context is not available in " + this); - } - return ret; - } -} diff --git a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/FixedDOMSchemaService.java b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/FixedDOMSchemaService.java index 42b364665a..c2d49c4492 100644 --- a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/FixedDOMSchemaService.java +++ b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/FixedDOMSchemaService.java @@ -12,32 +12,33 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import com.google.common.util.concurrent.ListenableFuture; import java.util.List; -import org.eclipse.jdt.annotation.NonNull; +import java.util.function.Consumer; +import java.util.function.Supplier; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.mdsal.dom.api.DOMYangTextSourceProvider; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangTextSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; /** * {@link DOMSchemaService} (and {@link DOMYangTextSourceProvider}) implementations backed by a - * {@link EffectiveModelContextProvider} (and {@link SchemaSourceProvider}) which are known to be fixed and never change - * schemas. + * {@code Supplier} (and {@link SchemaSourceProvider}) which are known to be fixed and never + * change schemas. * * @author Michael Vorburger.ch */ @Beta -public class FixedDOMSchemaService extends AbstractDOMSchemaService { +@NonNullByDefault +public sealed class FixedDOMSchemaService implements DOMSchemaService { private static final class WithYangTextSources extends FixedDOMSchemaService implements DOMYangTextSourceProvider { - private final @NonNull SchemaSourceProvider schemaSourceProvider; + private final SchemaSourceProvider schemaSourceProvider; - WithYangTextSources(final EffectiveModelContextProvider schemaContextProvider, - final SchemaSourceProvider schemaSourceProvider) { - super(schemaContextProvider); + WithYangTextSources(final Supplier modelContextSupplier, + final SchemaSourceProvider schemaSourceProvider) { + super(modelContextSupplier); this.schemaSourceProvider = requireNonNull(schemaSourceProvider); } @@ -47,39 +48,39 @@ public class FixedDOMSchemaService extends AbstractDOMSchemaService { } @Override - public ListenableFuture getSource(final SourceIdentifier sourceIdentifier) { + public ListenableFuture getSource(final SourceIdentifier sourceIdentifier) { return schemaSourceProvider.getSource(sourceIdentifier); } } - private final @NonNull EffectiveModelContextProvider schemaContextProvider; + private final Supplier modelContextSupplier; - private FixedDOMSchemaService(final EffectiveModelContextProvider schemaContextProvider) { - this.schemaContextProvider = requireNonNull(schemaContextProvider); + private FixedDOMSchemaService(final Supplier modelContextSupplier) { + this.modelContextSupplier = requireNonNull(modelContextSupplier); } - public static @NonNull DOMSchemaService of(final EffectiveModelContext effectiveModel) { + public static DOMSchemaService of(final EffectiveModelContext effectiveModel) { final var checked = requireNonNull(effectiveModel); - return of(() -> checked); + return new FixedDOMSchemaService(() -> checked); } - public static @NonNull DOMSchemaService of(final EffectiveModelContextProvider schemaContextProvider) { - return new FixedDOMSchemaService(schemaContextProvider); + public static DOMSchemaService of(final Supplier modelContextSupplier) { + return new FixedDOMSchemaService(modelContextSupplier); } - public static @NonNull DOMSchemaService of(final EffectiveModelContextProvider schemaContextProvider, - final SchemaSourceProvider yangTextSourceProvider) { - return new WithYangTextSources(schemaContextProvider, requireNonNull(yangTextSourceProvider)); + public static DOMSchemaService of(final Supplier modelContextSupplier, + final SchemaSourceProvider yangTextSourceProvider) { + return new WithYangTextSources(modelContextSupplier, requireNonNull(yangTextSourceProvider)); } @Override - public final @NonNull EffectiveModelContext getGlobalContext() { - return schemaContextProvider.getEffectiveModelContext(); + public final EffectiveModelContext getGlobalContext() { + return modelContextSupplier.get(); } @Override - public final Registration registerSchemaContextListener(final EffectiveModelContextListener listener) { - listener.onModelContextUpdated(getGlobalContext()); + public final Registration registerSchemaContextListener(final Consumer listener) { + listener.accept(getGlobalContext()); return () -> { }; } } diff --git a/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/ContentRoutedRpcContextTest.java b/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/ContentRoutedRpcContextTest.java index 93d97f1097..0fd28da92a 100644 --- a/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/ContentRoutedRpcContextTest.java +++ b/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/ContentRoutedRpcContextTest.java @@ -18,8 +18,10 @@ import org.junit.BeforeClass; import org.junit.Test; import org.opendaylight.yang.gen.v1.urn.opendaylight.yang.extension.yang.ext.rev130709.$YangModuleInfoImpl; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.RpcEffectiveStatement; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.DelegatedYangTextSource; +import org.opendaylight.yangtools.yang.model.spi.source.URLYangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; @@ -29,9 +31,9 @@ public class ContentRoutedRpcContextTest { @BeforeClass public static void beforeClass() { final var ctx = YangParserTestUtils.parseYangSources(YangParserConfiguration.DEFAULT, null, - YangTextSchemaSource.delegateForCharSource("yang-ext.yang", + new DelegatedYangTextSource(new SourceIdentifier("yang-ext.yang"), $YangModuleInfoImpl.getInstance().getYangTextCharSource()), - YangTextSchemaSource.forResource(ContentRoutedRpcContext.class, "/rpc-routing-strategy.yang")); + new URLYangTextSource(ContentRoutedRpcContext.class.getResource("/rpc-routing-strategy.yang"))); RPCS = ctx.findModuleStatements("foo").iterator().next() .streamEffectiveSubstatements(RpcEffectiveStatement.class) @@ -56,4 +58,4 @@ public class ContentRoutedRpcContextTest { assertEquals(QName.create("foo", "identity"), context.identity()); assertEquals(QName.create("foo", "ctx"), context.leaf()); } -} \ No newline at end of file +} diff --git a/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/PingPongTransactionChainTest.java b/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/PingPongTransactionChainTest.java index 7b9f49794e..cd6ae75e14 100644 --- a/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/PingPongTransactionChainTest.java +++ b/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/PingPongTransactionChainTest.java @@ -48,7 +48,7 @@ import org.opendaylight.mdsal.dom.api.DOMTransactionChain; import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener; import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class PingPongTransactionChainTest { @@ -151,7 +151,7 @@ public class PingPongTransactionChainTest { tx.delete(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.of()); verify(rwTx).delete(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.of()); - final var data = mock(NormalizedNode.class); + final var data = mock(ContainerNode.class); doNothing().when(rwTx).merge(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.of(), data); tx.merge(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.of(), data); verify(rwTx).merge(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.of(), data); diff --git a/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedReadTransactionTest.java b/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedReadTransactionTest.java index 772d660fe7..afde8a25c4 100644 --- a/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedReadTransactionTest.java +++ b/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedReadTransactionTest.java @@ -21,13 +21,12 @@ import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import com.google.common.util.concurrent.Futures; -import java.lang.reflect.Field; import java.util.Optional; import java.util.concurrent.ExecutionException; import org.junit.Test; import org.opendaylight.mdsal.common.api.ReadFailedException; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot; public class SnapshotBackedReadTransactionTest { @@ -39,14 +38,14 @@ public class SnapshotBackedReadTransactionTest { @Test public void basicTest() throws Exception { - final NormalizedNode testNode = mock(NormalizedNode.class); - final Optional optional = Optional.of(testNode); + final var testNode = mock(ContainerNode.class); + final var optional = Optional.of(testNode); doReturn("testNode").when(testNode).toString(); doReturn(Optional.of(testNode)).when(DATA_TREE_SNAPSHOT).readNode(YangInstanceIdentifier.of()); assertTrue(snapshotBackedReadTransaction.exists(YangInstanceIdentifier.of()).get()); assertEquals(optional, snapshotBackedReadTransaction.read(YangInstanceIdentifier.of()).get()); - final Field stableSnapshotField = SnapshotBackedReadTransaction.class.getDeclaredField("stableSnapshot"); + final var stableSnapshotField = SnapshotBackedReadTransaction.class.getDeclaredField("stableSnapshot"); stableSnapshotField.setAccessible(true); DataTreeSnapshot stableSnapshot = (DataTreeSnapshot) stableSnapshotField.get(snapshotBackedReadTransaction); diff --git a/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedReadWriteTransactionTest.java b/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedReadWriteTransactionTest.java index 14608d1f82..a0ff3fca7d 100644 --- a/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedReadWriteTransactionTest.java +++ b/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedReadWriteTransactionTest.java @@ -26,7 +26,7 @@ import org.junit.Test; import org.opendaylight.mdsal.common.api.ReadFailedException; import org.opendaylight.mdsal.dom.spi.store.SnapshotBackedWriteTransaction.TransactionReadyPrototype; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot; @@ -47,8 +47,8 @@ public class SnapshotBackedReadWriteTransactionTest { @Test public void basicTest() throws Exception { - final NormalizedNode testNode = mock(NormalizedNode.class); - final Optional optional = Optional.of(testNode); + final var testNode = mock(ContainerNode.class); + final var optional = Optional.of(testNode); doReturn("testNode").when(testNode).toString(); doReturn(Optional.of(testNode)).when(DATA_TREE_MODIFICATION).readNode(YangInstanceIdentifier.of()); assertTrue(snapshotBackedReadWriteTransaction.exists(YangInstanceIdentifier.of()).get()); diff --git a/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedWriteTransactionTest.java b/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedWriteTransactionTest.java index 41e11f524b..de792167cd 100644 --- a/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedWriteTransactionTest.java +++ b/dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedWriteTransactionTest.java @@ -27,7 +27,7 @@ import org.junit.Before; import org.junit.Test; import org.opendaylight.mdsal.dom.spi.store.SnapshotBackedWriteTransaction.TransactionReadyPrototype; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot; @@ -39,8 +39,8 @@ public class SnapshotBackedWriteTransactionTest { mock(TransactionReadyPrototype.class); private static final DOMStoreThreePhaseCommitCohort DOM_STORE_THREE_PHASE_COMMIT_COHORT = mock(DOMStoreThreePhaseCommitCohort.class); - private static final NormalizedNode NORMALIZED_NODE = mock(NormalizedNode.class); - private static final Optional NORMALIZED_NODE_OPTIONAL = Optional.of(NORMALIZED_NODE); + private static final ContainerNode NORMALIZED_NODE = mock(ContainerNode.class); + private static final Optional NORMALIZED_NODE_OPTIONAL = Optional.of(NORMALIZED_NODE); private static SnapshotBackedWriteTransaction snapshotBackedWriteTransaction; @Before diff --git a/features/feature-parent/pom.xml b/features/feature-parent/pom.xml index 53bdd85427..8b791a0288 100644 --- a/features/feature-parent/pom.xml +++ b/features/feature-parent/pom.xml @@ -27,7 +27,7 @@ org.opendaylight.yangtools yangtools-artifacts - 11.0.5 + 13.0.0 pom import diff --git a/features/odl-mdsal-binding-api/src/main/feature/feature.xml b/features/odl-mdsal-binding-api/src/main/feature/feature.xml index 998fc20dba..d316d875d9 100644 --- a/features/odl-mdsal-binding-api/src/main/feature/feature.xml +++ b/features/odl-mdsal-binding-api/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-yangtools-data-api + odl-yangtools-data-api diff --git a/features/odl-mdsal-binding-base/src/main/feature/feature.xml b/features/odl-mdsal-binding-base/src/main/feature/feature.xml index 01f47d6dee..4b948cf74a 100644 --- a/features/odl-mdsal-binding-base/src/main/feature/feature.xml +++ b/features/odl-mdsal-binding-base/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-yangtools-common + odl-yangtools-common diff --git a/features/odl-mdsal-binding-runtime-api/src/main/feature/feature.xml b/features/odl-mdsal-binding-runtime-api/src/main/feature/feature.xml index 119c5baab3..01e5171e58 100644 --- a/features/odl-mdsal-binding-runtime-api/src/main/feature/feature.xml +++ b/features/odl-mdsal-binding-runtime-api/src/main/feature/feature.xml @@ -1,7 +1,7 @@ - odl-yangtools-data - odl-yangtools-parser + odl-yangtools-data + odl-yangtools-parser diff --git a/features/odl-mdsal-common/src/main/feature/feature.xml b/features/odl-mdsal-common/src/main/feature/feature.xml index f4e3c49a0c..d3257d3697 100644 --- a/features/odl-mdsal-common/src/main/feature/feature.xml +++ b/features/odl-mdsal-common/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-yangtools-common + odl-yangtools-common diff --git a/features/odl-mdsal-dom-api/src/main/feature/feature.xml b/features/odl-mdsal-dom-api/src/main/feature/feature.xml index f3aa0821ea..b264cda5fe 100644 --- a/features/odl-mdsal-dom-api/src/main/feature/feature.xml +++ b/features/odl-mdsal-dom-api/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-yangtools-data-api + odl-yangtools-data-api diff --git a/features/odl-mdsal-eos-common/src/main/feature/feature.xml b/features/odl-mdsal-eos-common/src/main/feature/feature.xml index 1f9cfcd7be..04fcd00c6c 100644 --- a/features/odl-mdsal-eos-common/src/main/feature/feature.xml +++ b/features/odl-mdsal-eos-common/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-yangtools-data-api + odl-yangtools-data-api diff --git a/features/odl-mdsal-exp-yanglib-api/src/main/feature/feature.xml b/features/odl-mdsal-exp-yanglib-api/src/main/feature/feature.xml index db599fc192..cec4bd16ee 100644 --- a/features/odl-mdsal-exp-yanglib-api/src/main/feature/feature.xml +++ b/features/odl-mdsal-exp-yanglib-api/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-yangtools-data-api + odl-yangtools-data-api diff --git a/features/odl-mdsal-replicate-netty/src/main/feature/feature.xml b/features/odl-mdsal-replicate-netty/src/main/feature/feature.xml index 8819e78312..ce337af671 100644 --- a/features/odl-mdsal-replicate-netty/src/main/feature/feature.xml +++ b/features/odl-mdsal-replicate-netty/src/main/feature/feature.xml @@ -4,6 +4,6 @@ mvn:org.opendaylight.mdsal/mdsal-replicate-netty/${project.version}/config/sink mvn:org.opendaylight.mdsal/mdsal-replicate-netty/${project.version}/config/source odl-netty-4 - odl-yangtools-codec + odl-yangtools-codec diff --git a/features/odl-mdsal-rfc8294-netty/src/main/feature/feature.xml b/features/odl-mdsal-rfc8294-netty/src/main/feature/feature.xml index ecf2161ecd..18a66a0240 100644 --- a/features/odl-mdsal-rfc8294-netty/src/main/feature/feature.xml +++ b/features/odl-mdsal-rfc8294-netty/src/main/feature/feature.xml @@ -1,6 +1,6 @@ - odl-yangtools-netty + odl-yangtools-netty diff --git a/replicate/mdsal-replicate-common/src/main/java/org/opendaylight/mdsal/replicate/common/DOMDataBrokerModification.java b/replicate/mdsal-replicate-common/src/main/java/org/opendaylight/mdsal/replicate/common/DOMDataBrokerModification.java index eefbc639f2..9ecf490fbd 100644 --- a/replicate/mdsal-replicate-common/src/main/java/org/opendaylight/mdsal/replicate/common/DOMDataBrokerModification.java +++ b/replicate/mdsal-replicate-common/src/main/java/org/opendaylight/mdsal/replicate/common/DOMDataBrokerModification.java @@ -69,7 +69,7 @@ final class DOMDataBrokerModification implements DataTreeModification { } @Override - public EffectiveModelContext getEffectiveModelContext() { + public EffectiveModelContext modelContext() { throw new UnsupportedOperationException(); } } diff --git a/replicate/mdsal-replicate-common/src/main/java/org/opendaylight/mdsal/replicate/common/DOMStoreModification.java b/replicate/mdsal-replicate-common/src/main/java/org/opendaylight/mdsal/replicate/common/DOMStoreModification.java index 95e63cf122..543d159c18 100644 --- a/replicate/mdsal-replicate-common/src/main/java/org/opendaylight/mdsal/replicate/common/DOMStoreModification.java +++ b/replicate/mdsal-replicate-common/src/main/java/org/opendaylight/mdsal/replicate/common/DOMStoreModification.java @@ -52,7 +52,7 @@ final class DOMStoreModification implements DataTreeModification { } @Override - public EffectiveModelContext getEffectiveModelContext() { + public EffectiveModelContext modelContext() { throw new UnsupportedOperationException(); } diff --git a/replicate/mdsal-replicate-netty/src/main/java/org/opendaylight/mdsal/replicate/netty/NettyReplicationSource.java b/replicate/mdsal-replicate-netty/src/main/java/org/opendaylight/mdsal/replicate/netty/NettyReplicationSource.java index b264245f58..91ad211a31 100644 --- a/replicate/mdsal-replicate-netty/src/main/java/org/opendaylight/mdsal/replicate/netty/NettyReplicationSource.java +++ b/replicate/mdsal-replicate-netty/src/main/java/org/opendaylight/mdsal/replicate/netty/NettyReplicationSource.java @@ -48,10 +48,6 @@ public final class NettyReplicationSource { private Registration reg; - public NettyReplicationSource() { - // Visible for DI - } - @Activate public NettyReplicationSource(@Reference final BootstrapSupport bootstrapSupport, @Reference final DOMDataBroker dataBroker, diff --git a/yanglib/mdsal-yanglib-api/pom.xml b/yanglib/mdsal-yanglib-api/pom.xml index ebcd0b2e8f..8e49288941 100644 --- a/yanglib/mdsal-yanglib-api/pom.xml +++ b/yanglib/mdsal-yanglib-api/pom.xml @@ -50,10 +50,6 @@ org.opendaylight.yangtools yang-parser-api - - org.opendaylight.yangtools - yang-repo-api - diff --git a/yanglib/mdsal-yanglib-api/src/main/java/org/opendaylight/mdsal/yanglib/api/SourceReference.java b/yanglib/mdsal-yanglib-api/src/main/java/org/opendaylight/mdsal/yanglib/api/SourceReference.java index 50c14ec3e5..0d691ffd60 100644 --- a/yanglib/mdsal-yanglib-api/src/main/java/org/opendaylight/mdsal/yanglib/api/SourceReference.java +++ b/yanglib/mdsal-yanglib-api/src/main/java/org/opendaylight/mdsal/yanglib/api/SourceReference.java @@ -17,7 +17,7 @@ import java.util.Collection; import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yangtools.concepts.AbstractSimpleIdentifiable; import org.opendaylight.yangtools.concepts.Immutable; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; /** * A reference to a YANG source, potentially containing a location hint. diff --git a/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/MountPointContextFactoryImpl.java b/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/MountPointContextFactoryImpl.java index 2145c83f3a..85b725b20a 100644 --- a/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/MountPointContextFactoryImpl.java +++ b/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/MountPointContextFactoryImpl.java @@ -49,7 +49,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.MountPointContextFactory; import org.opendaylight.yangtools.yang.data.api.schema.MountPointException; import org.opendaylight.yangtools.yang.data.util.AbstractMountPointContextFactory; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.api.YangParserException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupport.java b/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupport.java index 015d4cdf8c..7cc6eee3c8 100644 --- a/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupport.java +++ b/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupport.java @@ -46,7 +46,7 @@ public final class YangLibrarySupport implements YangLibSupport { @SuppressWarnings("deprecation") private final BindingDataObjectCodecTreeNode legacyCodec; private final BindingIdentityCodec identityCodec; - private final EffectiveModelContext context; + private final EffectiveModelContext modelContext; private final BindingCodecTree codecTree; @Inject @@ -57,10 +57,10 @@ public final class YangLibrarySupport implements YangLibSupport { final ModuleInfoSnapshot snapshot = new ModuleInfoSnapshotBuilder(parserFactory) .add(YangLibrary.class) .build(); - context = snapshot.getEffectiveModelContext(); + modelContext = snapshot.modelContext(); codecTree = codecFactory.create(new DefaultBindingRuntimeContext( - generator.generateTypeMapping(context), snapshot)); + generator.generateTypeMapping(modelContext), snapshot)); identityCodec = codecTree.getIdentityCodec(); codec = codecTree.getDataObjectCodec(InstanceIdentifier.create(YangLibrary.class)); @@ -70,7 +70,7 @@ public final class YangLibrarySupport implements YangLibSupport { @Override public MountPointContextFactory createMountPointContextFactory(final MountPointLabel label, final SchemaContextResolver resolver) { - return new MountPointContextFactoryImpl(label, resolver, context, identityCodec, codec, legacyCodec); + return new MountPointContextFactoryImpl(label, resolver, modelContext, identityCodec, codec, legacyCodec); } @Override diff --git a/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/AbstractYangLibraryTest.java b/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/AbstractYangLibraryTest.java index 3a0fff17c6..204cb95514 100644 --- a/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/AbstractYangLibraryTest.java +++ b/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/AbstractYangLibraryTest.java @@ -8,8 +8,7 @@ package org.opendaylight.mdsal.yanglib.rfc8525; import java.util.ServiceLoader; -import org.junit.Before; -import org.junit.BeforeClass; +import org.junit.jupiter.api.BeforeEach; import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree; import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext; @@ -26,18 +25,12 @@ abstract class AbstractYangLibraryTest { private static final BindingCodecTreeFactory CODEC_FACTORY = ServiceLoader.load(BindingCodecTreeFactory.class) .findFirst().orElseThrow(); - static BindingRuntimeContext runtimeContext; - static BindingCodecTree codecTree; + static final BindingRuntimeContext RUNTIME_CONTEXT = BindingRuntimeHelpers.createRuntimeContext(); + static final BindingCodecTree CODEC_TREE = CODEC_FACTORY.create(RUNTIME_CONTEXT); YangLibrarySupport yangLib; - @BeforeClass - public static void beforeClass() { - runtimeContext = BindingRuntimeHelpers.createRuntimeContext(); - codecTree = CODEC_FACTORY.create(runtimeContext); - } - - @Before + @BeforeEach public void before() throws YangParserException { yangLib = new YangLibrarySupport(YANG_PARSER_FACTORY, BINDING_RUNTIME_GENERATOR, CODEC_FACTORY); } diff --git a/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/LegacyYangLibraryFormatTest.java b/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/LegacyYangLibraryFormatTest.java index 8ce1e350de..b97039d397 100644 --- a/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/LegacyYangLibraryFormatTest.java +++ b/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/LegacyYangLibraryFormatTest.java @@ -7,13 +7,11 @@ */ package org.opendaylight.mdsal.yanglib.rfc8525; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; -import java.util.Map; -import java.util.Optional; import java.util.Set; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.ModulesState; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.RevisionIdentifier; @@ -21,45 +19,38 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.librar import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.module.list.Module; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.module.list.Module.ConformanceType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.module.list.ModuleBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.module.list.ModuleKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.YangIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.util.BindingMap; -import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; -public class LegacyYangLibraryFormatTest extends AbstractYangLibraryTest { +class LegacyYangLibraryFormatTest extends AbstractYangLibraryTest { @Test - public void testLegacyFormat() { - final var legacyCodec = codecTree.getDataObjectCodec(InstanceIdentifier.create(ModulesState.class)); + void testLegacyFormat() { + final var legacyCodec = CODEC_TREE.getDataObjectCodec(InstanceIdentifier.create(ModulesState.class)); - final Optional legacyContent = yangLib.newContentBuilder() - .defaultContext(runtimeContext.getEffectiveModelContext()) + final var legacyContent = yangLib.newContentBuilder() + .defaultContext(RUNTIME_CONTEXT.modelContext()) .includeLegacy() .formatYangLibraryLegacyContent(); assertTrue(legacyContent.isPresent()); - final ModulesState modulesState = legacyCodec.deserialize(legacyContent.orElseThrow()); - - assertEquals(4, modulesState.nonnullModule().size()); - assertEquals(createControlModules(), modulesState.getModule()); - } - - private static Map createControlModules() { - return BindingMap.of( + final var modulesState = legacyCodec.deserialize(legacyContent.orElseThrow()); + assertEquals(BindingMap.of( createModule("ietf-yang-library", "urn:ietf:params:xml:ns:yang:ietf-yang-library", "2019-01-04"), createModule("ietf-inet-types", "urn:ietf:params:xml:ns:yang:ietf-inet-types", "2013-07-15"), createModule("ietf-datastores", "urn:ietf:params:xml:ns:yang:ietf-datastores", "2018-02-14"), - createModule("ietf-yang-types", "urn:ietf:params:xml:ns:yang:ietf-yang-types", "2013-07-15")); + createModule("ietf-yang-types", "urn:ietf:params:xml:ns:yang:ietf-yang-types", "2013-07-15")), + modulesState.getModule()); } private static Module createModule(final String name, final String namespace, final String revision) { return new ModuleBuilder() - .setName(new YangIdentifier(name)) - .setNamespace(new Uri(namespace)) - .setRevision(new Revision(new RevisionIdentifier(revision))) - .setConformanceType(ConformanceType.Implement) - .setFeature(Set.of()) - .build(); + .setName(new YangIdentifier(name)) + .setNamespace(new Uri(namespace)) + .setRevision(new Revision(new RevisionIdentifier(revision))) + .setConformanceType(ConformanceType.Implement) + .setFeature(Set.of()) + .build(); } } \ No newline at end of file diff --git a/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupportTest.java b/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupportTest.java index 147acdacbb..34dccc647c 100644 --- a/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupportTest.java +++ b/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupportTest.java @@ -7,45 +7,42 @@ */ package org.opendaylight.mdsal.yanglib.rfc8525; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import java.util.Map; import java.util.Set; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.RevisionIdentifier; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.YangLibrary; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.module.set.parameters.Module; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.module.set.parameters.ModuleBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.module.set.parameters.ModuleKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.yang.library.parameters.ModuleSet; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.yang.library.parameters.ModuleSetKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.YangIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.util.BindingMap; -import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; -public class YangLibrarySupportTest extends AbstractYangLibraryTest { +class YangLibrarySupportTest extends AbstractYangLibraryTest { @Test - public void testFormatSchema() { - final var codec = codecTree.getDataObjectCodec(InstanceIdentifier.create(YangLibrary.class)); + void testFormatSchema() { + final var codec = CODEC_TREE.getDataObjectCodec(InstanceIdentifier.create(YangLibrary.class)); - final ContainerNode nonLegacyContent = yangLib.newContentBuilder() - .defaultContext(runtimeContext.getEffectiveModelContext()).formatYangLibraryContent(); - final YangLibrary yangLibrary = codec.deserialize(nonLegacyContent); + final var nonLegacyContent = yangLib.newContentBuilder() + .defaultContext(RUNTIME_CONTEXT.modelContext()).formatYangLibraryContent(); + final var yangLibrary = codec.deserialize(nonLegacyContent); - assertEquals(1, yangLibrary.nonnullModuleSet().size()); - final ModuleSet moduleSet = yangLibrary.nonnullModuleSet().get(new ModuleSetKey("ODL_modules")); - assertEquals(4, moduleSet.nonnullModule().size()); - assertEquals(moduleSet.getModule(), createControlModules()); - } - - private static Map createControlModules() { - return BindingMap.of( + final var modulesSets = yangLibrary.nonnullModuleSet(); + assertNotNull(modulesSets); + assertEquals(1, modulesSets.size()); + final var moduleSet = modulesSets.get(new ModuleSetKey("ODL_modules")); + assertNotNull(moduleSet); + assertEquals(BindingMap.of( createModule("ietf-yang-library", "urn:ietf:params:xml:ns:yang:ietf-yang-library", "2019-01-04"), createModule("ietf-inet-types", "urn:ietf:params:xml:ns:yang:ietf-inet-types", "2013-07-15"), createModule("ietf-datastores", "urn:ietf:params:xml:ns:yang:ietf-datastores", "2018-02-14"), - createModule("ietf-yang-types", "urn:ietf:params:xml:ns:yang:ietf-yang-types", "2013-07-15")); + createModule("ietf-yang-types", "urn:ietf:params:xml:ns:yang:ietf-yang-types", "2013-07-15")), + moduleSet.getModule()); } private static Module createModule(final String name, final String namespace, final String revision) {