Promote BindingRuntimeContext to binding-generator-api 28/87828/25
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 17 Feb 2020 21:50:45 +0000 (22:50 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 18 Feb 2020 19:28:00 +0000 (20:28 +0100)
BindingRuntimeContext only requires BindingRuntimeTypes, make
them required in factory method and have users take care of
implementation binding. This allows us to promote it to an API
utility, reducing cross-implementation clutter.

This refactor also shows that BindingCodecTreeFactory is mixing
apples and oranges, forcing users to deal with things that should
readily come from BindingRuntimeContext -- we refactor that support
code so that it is hosted in ModuleInfoBackedContext instead.

JIRA: MDSAL-392
Change-Id: I6381c889c7a1911f9e524aadf1c06c61e99fd75f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
39 files changed:
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodec.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/FutureSchema.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/ActionLookupTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMAdapterLoaderTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMCursorAwareWriteTransactionAdapterTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeServiceAdapterTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortAdapterTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeWriteCursorAdapterTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMMountPointServiceAdapterTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMTransactionChainAdapterTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingMountPointAdapterTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingNormalizedCodecTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodecTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/LazyDataTreeModificationTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractDataBrokerTestCustomizer.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/BindingTestContext.java
binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingCodecTreeFactory.java
binding/mdsal-binding-dom-codec-osgi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/osgi/BindingRuntimeContextListener.java
binding/mdsal-binding-dom-codec-osgi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/osgi/BindingRuntimeContextService.java
binding/mdsal-binding-dom-codec-osgi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/osgi/impl/SimpleBindingRuntimeContextService.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingNormalizedNodeCodecRegistry.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/IdentityCodec.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/NodeCodecContext.java
binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/AbstractBindingRuntimeTest.java
binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/AugmentationClassDiscoveredAfterCodecTest.java
binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/ExceptionReportingTest.java
binding/mdsal-binding-generator-api/pom.xml
binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/generator/api/BindingRuntimeContext.java [moved from binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/util/BindingRuntimeContext.java with 91% similarity]
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/ModuleInfoBackedContext.java
binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/BaseCompilationTest.java
binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/ClassCodeGeneratorTest.java
entityownership/mdsal-eos-binding-adapter/pom.xml
entityownership/mdsal-eos-binding-adapter/src/test/java/org/opendaylight/mdsal/eos/binding/dom/adapter/BindingDOMEntityOwnershipServiceAdapterTest.java
yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/YangModuleLibrarySupport.java
yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/YangModuleLibrarySupportFactory.java
yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupport.java
yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupportFactory.java

index 951d7c4c3e74be08ed966ef3e9601b24a12eecec..0d92e3fc1b4f98dee68be8d126809180fbd1263f 100644 (file)
@@ -41,8 +41,9 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingLazyContainerNode;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 import org.opendaylight.mdsal.binding.dom.codec.api.MissingSchemaException;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.api.ClassLoadingStrategy;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
 import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
@@ -100,27 +101,31 @@ public class BindingToNormalizedNodeCodec implements BindingCodecTreeFactory,
             });
     private final BindingNormalizedNodeCodecRegistry codecRegistry;
     private final ClassLoadingStrategy classLoadingStrategy;
+    private final BindingRuntimeGenerator generator;
     private final FutureSchema futureSchema;
+
     private ListenerRegistration<?> listenerRegistration;
 
     @Inject
-    public BindingToNormalizedNodeCodec(final ClassLoadingStrategy classLoadingStrategy,
-            final BindingNormalizedNodeCodecRegistry codecRegistry) {
-        this(classLoadingStrategy, codecRegistry, false);
+    public BindingToNormalizedNodeCodec(final BindingRuntimeGenerator generator,
+            final ClassLoadingStrategy classLoadingStrategy, final BindingNormalizedNodeCodecRegistry codecRegistry) {
+        this(generator, classLoadingStrategy, codecRegistry, false);
     }
 
-    public BindingToNormalizedNodeCodec(final ClassLoadingStrategy classLoadingStrategy,
-            final BindingNormalizedNodeCodecRegistry codecRegistry, final boolean waitForSchema) {
+    public BindingToNormalizedNodeCodec(final BindingRuntimeGenerator generator,
+            final ClassLoadingStrategy classLoadingStrategy, final BindingNormalizedNodeCodecRegistry codecRegistry,
+            final boolean waitForSchema) {
+        this.generator = requireNonNull(generator, "generator");
         this.classLoadingStrategy = requireNonNull(classLoadingStrategy, "classLoadingStrategy");
         this.codecRegistry = requireNonNull(codecRegistry, "codecRegistry");
         this.futureSchema = FutureSchema.create(WAIT_DURATION_SEC, TimeUnit.SECONDS, waitForSchema);
     }
 
-    public static BindingToNormalizedNodeCodec newInstance(final ClassLoadingStrategy classLoadingStrategy,
-            final DOMSchemaService schemaService) {
+    public static BindingToNormalizedNodeCodec newInstance(final BindingRuntimeGenerator generator,
+            final ClassLoadingStrategy classLoadingStrategy, final DOMSchemaService schemaService) {
         final BindingNormalizedNodeCodecRegistry codecRegistry = new BindingNormalizedNodeCodecRegistry();
-        BindingToNormalizedNodeCodec instance = new BindingToNormalizedNodeCodec(
-                classLoadingStrategy, codecRegistry, true);
+        BindingToNormalizedNodeCodec instance = new BindingToNormalizedNodeCodec(generator, classLoadingStrategy,
+            codecRegistry, true);
         instance.listenerRegistration = schemaService.registerSchemaContextListener(instance);
         return instance;
     }
@@ -304,7 +309,8 @@ public class BindingToNormalizedNodeCodec implements BindingCodecTreeFactory,
 
     @Override
     public void onGlobalContextUpdated(final SchemaContext context) {
-        final BindingRuntimeContext runtimeContext = BindingRuntimeContext.create(classLoadingStrategy, context);
+        final BindingRuntimeContext runtimeContext = BindingRuntimeContext.create(
+            generator.generateTypeMapping(context), classLoadingStrategy);
         codecRegistry.onBindingRuntimeContextUpdated(runtimeContext);
         futureSchema.onRuntimeContextUpdated(runtimeContext);
     }
@@ -405,11 +411,6 @@ public class BindingToNormalizedNodeCodec implements BindingCodecTreeFactory,
         return codecRegistry.create(context);
     }
 
-    @Override
-    public final BindingCodecTree create(final SchemaContext context, final Class<?>... bindingClasses) {
-        return codecRegistry.create(context, bindingClasses);
-    }
-
     protected @NonNull Entry<InstanceIdentifier<?>, BindingDataObjectCodecTreeNode<?>> getSubtreeCodec(
             final YangInstanceIdentifier domIdentifier) {
 
index 877f23c4e2dc8979080b85970fec53b6ee83c0b0..a4269e42e80b23efe99e252ab9e336190d503e14 100644 (file)
@@ -19,7 +19,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.function.Predicate;
 import org.checkerframework.checker.lock.qual.GuardedBy;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 
index 71de2ebc18cfbc760441e099453385c1e6bd4a41..9dc6e64650d35fb1c24c38e31d5808da4063db51 100644 (file)
@@ -14,6 +14,7 @@ import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
 import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.Cont;
@@ -32,8 +33,8 @@ public class ActionLookupTest {
         ctx.addModuleInfos(BindingReflections.loadModuleInfos());
 
         final BindingNormalizedNodeCodecRegistry registry = mock(BindingNormalizedNodeCodecRegistry.class);
-        CODEC = new BindingToNormalizedNodeCodec(ctx, registry);
-        CODEC.onGlobalContextUpdated(ctx.tryToCreateSchemaContext().get());
+        CODEC = new BindingToNormalizedNodeCodec(new DefaultBindingRuntimeGenerator(), ctx, registry);
+        CODEC.onGlobalContextUpdated(ctx.tryToCreateModelContext().get());
     }
 
     @AfterClass
index 8d897453b3ca31376a1a7b8ea172fbbc56fac8c6..d0a623a85e4a6b3c8f5cd3c1b1792cde04689cba 100644 (file)
@@ -22,6 +22,7 @@ import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.TransactionChainListener;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
 import org.opendaylight.mdsal.dom.api.DOMService;
@@ -41,9 +42,9 @@ public class BindingDOMAdapterLoaderTest {
     @Before
     public void setUp() {
         doReturn(ImmutableClassToInstanceMap.of()).when(domService).getExtensions();
-        bindingDOMAdapterLoader = new BindingDOMAdapterLoader(
-                new BindingToNormalizedNodeCodec(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(),
-                        mockCodecRegistry)) {
+        bindingDOMAdapterLoader = new BindingDOMAdapterLoader(new BindingToNormalizedNodeCodec(
+                new DefaultBindingRuntimeGenerator(), GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(),
+                mockCodecRegistry)) {
             @Override
             protected DOMService getDelegate(final Class<? extends DOMService> reqDeleg) {
                 return domService;
index 8daeeab3095f1df47518e75adee9ac95dba865da..6a058d4bb1a1793ae28712997073dffa27f25738 100644 (file)
@@ -17,6 +17,7 @@ import static org.mockito.Mockito.verify;
 import org.junit.Test;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeCursorAwareTransaction;
@@ -26,13 +27,13 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 
 public class BindingDOMCursorAwareWriteTransactionAdapterTest {
-
     @Test
     public void basicTest() throws Exception {
         final DOMDataTreeCursorAwareTransaction delegate = mock(DOMDataTreeCursorAwareTransaction.class);
         final BindingNormalizedNodeCodecRegistry registry = mock(BindingNormalizedNodeCodecRegistry.class);
-        final BindingToNormalizedNodeCodec codec =
-                new BindingToNormalizedNodeCodec(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(), registry);
+        final BindingToNormalizedNodeCodec codec = new BindingToNormalizedNodeCodec(
+            new DefaultBindingRuntimeGenerator(), GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(),
+                registry);
         final YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.empty();
         doReturn(yangInstanceIdentifier).when(registry).toYangInstanceIdentifier(any());
         doReturn(mock(DOMDataTreeWriteCursor.class)).when(delegate).createCursor(any());
index e3a6b13dc982a139edff0e0fb8a964c499ddb4c5..149eed6b5792b37b7ed879f4e019d464aa859850 100644 (file)
@@ -26,6 +26,7 @@ import org.opendaylight.mdsal.binding.api.DataTreeChangeService;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener;
@@ -69,8 +70,8 @@ public class BindingDOMDataTreeChangeServiceAdapterTest {
 
     @Test
     public void testRegisterDataTreeChangeListener() {
-        final BindingToNormalizedNodeCodec codec =
-                new BindingToNormalizedNodeCodec(this.classLoadingStrategy, this.codecRegistry);
+        final BindingToNormalizedNodeCodec codec = new BindingToNormalizedNodeCodec(
+            new DefaultBindingRuntimeGenerator(), classLoadingStrategy, codecRegistry);
 
         final DataTreeChangeService service = BindingDOMDataTreeChangeServiceAdapter.create(codec, this.mockDOMService);
 
index 1e3b699a4955309a63c61b149733b083d3e45a66..ee6d06c814ab8767c81f026c0d33f8f9a1c54424 100644 (file)
@@ -23,6 +23,7 @@ import org.opendaylight.mdsal.binding.api.DataTreeCommitCohort;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.common.api.PostCanCommitStep;
@@ -39,8 +40,9 @@ public class BindingDOMDataTreeCommitCohortAdapterTest {
     public void canCommitTest() throws Exception {
         final DataTreeCommitCohort<?> cohort = mock(DataTreeCommitCohort.class);
         final BindingNormalizedNodeCodecRegistry registry = mock(BindingNormalizedNodeCodecRegistry.class);
-        final BindingToNormalizedNodeCodec codec =
-                new BindingToNormalizedNodeCodec(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(), registry);
+        final BindingToNormalizedNodeCodec codec = new BindingToNormalizedNodeCodec(
+            new DefaultBindingRuntimeGenerator(), GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(),
+            registry);
 
         final BindingDOMDataTreeCommitCohortAdapter<?> adapter =
                 new BindingDOMDataTreeCommitCohortAdapter<>(codec, cohort);
index 5b3b178293b085d08b492f0aac1f4776fe2f3a61..9d6d2605dfd2916d909ef11e08cfa1db7f54a99d 100644 (file)
@@ -21,6 +21,7 @@ import java.util.Deque;
 import org.junit.Test;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteCursor;
@@ -40,8 +41,9 @@ public class BindingDOMDataTreeWriteCursorAdapterTest {
                         InstanceIdentifier.create(DataObject.class));
         final DOMDataTreeWriteCursor delegate = mock(DOMDataTreeWriteCursor.class);
         final BindingNormalizedNodeCodecRegistry registry = mock(BindingNormalizedNodeCodecRegistry.class);
-        final BindingToNormalizedNodeCodec codec =
-                new BindingToNormalizedNodeCodec(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(), registry);
+        final BindingToNormalizedNodeCodec codec = new BindingToNormalizedNodeCodec(
+            new DefaultBindingRuntimeGenerator(), GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(),
+            registry);
         final BindingDOMDataTreeWriteCursorAdapter<?> adapter =
                 new BindingDOMDataTreeWriteCursorAdapter<>(identifier, delegate, codec);
 
index 973ef77215ceda98c01f5a64124b8468849af04f..65abe9edbfb6e250cb8fdf6699f2bf82630a4d9b 100644 (file)
@@ -18,6 +18,7 @@ import java.util.Optional;
 import org.junit.Test;
 import org.opendaylight.mdsal.binding.api.MountPointService.MountPointListener;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
 import org.opendaylight.mdsal.dom.api.DOMMountPoint;
 import org.opendaylight.mdsal.dom.api.DOMMountPointService;
@@ -26,12 +27,12 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 
 public class BindingDOMMountPointServiceAdapterTest {
-
     @Test
     public void basicTest() throws Exception {
         final BindingNormalizedNodeCodecRegistry registry = mock(BindingNormalizedNodeCodecRegistry.class);
-        final BindingToNormalizedNodeCodec codec =
-                new BindingToNormalizedNodeCodec(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(), registry);
+        final BindingToNormalizedNodeCodec codec = new BindingToNormalizedNodeCodec(
+            new DefaultBindingRuntimeGenerator(), GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(),
+            registry);
         doReturn(YangInstanceIdentifier.empty()).when(registry).toYangInstanceIdentifier(any());
         final DOMMountPointService mountPointService = mock(DOMMountPointService.class);
 
index 666ba79678ed936bcef1f4dc85ea06827d9d0724..0ffbf52f9320c479c0126544aaa5422b68341a95 100644 (file)
@@ -23,6 +23,7 @@ import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.TransactionChainListener;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
@@ -52,9 +53,9 @@ public class BindingDOMTransactionChainAdapterTest {
         doReturn(transactionChain).when(domService).createTransactionChain(any());
         doReturn(ImmutableClassToInstanceMap.of()).when(domService).getExtensions();
 
-        BindingDOMAdapterLoader bindingDOMAdapterLoader = new BindingDOMAdapterLoader(
-                new BindingToNormalizedNodeCodec(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(),
-                        mockCodecRegistry)) {
+        BindingDOMAdapterLoader bindingDOMAdapterLoader = new BindingDOMAdapterLoader(new BindingToNormalizedNodeCodec(
+                new DefaultBindingRuntimeGenerator(), GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(),
+                mockCodecRegistry)) {
             @Override
             protected DOMService getDelegate(final Class<? extends DOMService> reqDeleg) {
                 return domService;
index 87ae80619b0d7011de03327ff35f911f88819ca0..8cd1c876fbb11982da4886bee7026ca8d2ee0d96 100644 (file)
@@ -13,16 +13,15 @@ import static org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadin
 
 import org.junit.Test;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
-import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.dom.api.DOMMountPoint;
 
 public class BindingMountPointAdapterTest {
-
     @Test
     public void basicTest() throws Exception {
-        final GeneratedClassLoadingStrategy loading = getTCCLClassLoadingStrategy();
-        final BindingNormalizedNodeCodecRegistry codecRegistry = mock(BindingNormalizedNodeCodecRegistry.class);
-        final BindingToNormalizedNodeCodec codec = new BindingToNormalizedNodeCodec(loading, codecRegistry);
+        final BindingToNormalizedNodeCodec codec = new BindingToNormalizedNodeCodec(
+            new DefaultBindingRuntimeGenerator(), getTCCLClassLoadingStrategy(),
+            mock(BindingNormalizedNodeCodecRegistry.class));
         final DOMMountPoint domMountPoint = mock(DOMMountPoint.class);
         final BindingMountPointAdapter bindingMountPointAdapter = new BindingMountPointAdapter(codec, domMountPoint);
         assertNull(bindingMountPointAdapter.getIdentifier());
index afa6eb2151ca8c157aee1f0e9fb197b64d8f2abc..a448a33610a36d091d1e44e9f28aecae6b65a7b3 100644 (file)
@@ -5,7 +5,6 @@
  * 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.binding.dom.adapter;
 
 import static org.junit.Assert.assertEquals;
@@ -28,6 +27,7 @@ import java.util.concurrent.atomic.AtomicReference;
 import org.junit.Test;
 import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractSchemaAwareTest;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.bi.ba.rpcservice.rev140701.OpendaylightTestRpcServiceService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.TreeComplexUsesAugment;
@@ -66,9 +66,9 @@ public class BindingNormalizedCodecTest extends AbstractSchemaAwareTest {
     @Override
     protected void setupWithSchema(final SchemaContext schemaContext) {
         this.context = schemaContext;
-        final BindingNormalizedNodeCodecRegistry registry = new BindingNormalizedNodeCodecRegistry();
-        this.codec = new BindingToNormalizedNodeCodec(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(),
-                registry, true);
+        this.codec = new BindingToNormalizedNodeCodec(new DefaultBindingRuntimeGenerator(),
+            GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(), new BindingNormalizedNodeCodecRegistry(),
+            true);
     }
 
     @Test
index 6094b485f28b763a4cb8af69c667b81efb4c6dfe..acfabd1f9963831618fc510cb8561daf6ec5ffb0 100644 (file)
@@ -18,8 +18,10 @@ import java.util.List;
 import java.util.Map.Entry;
 import org.junit.Test;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeGenerator;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -37,7 +39,6 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class BindingToNormalizedNodeCodecTest {
-
     /**
      * Positive test.
      *
@@ -116,10 +117,12 @@ public class BindingToNormalizedNodeCodecTest {
             final SchemaContext schemaCtx) {
         final GeneratedClassLoadingStrategy classLoadingStrategy =
                 GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy();
-        final BindingRuntimeContext ctx = BindingRuntimeContext.create(classLoadingStrategy, schemaCtx);
+        final BindingRuntimeGenerator generator = new DefaultBindingRuntimeGenerator();
+        final BindingRuntimeContext ctx = BindingRuntimeContext.create(
+            generator.generateTypeMapping(schemaCtx), classLoadingStrategy);
         final BindingNormalizedNodeCodecRegistry codecRegistry = new BindingNormalizedNodeCodecRegistry(ctx);
-        final BindingToNormalizedNodeCodec codec =
-                new BindingToNormalizedNodeCodec(classLoadingStrategy, codecRegistry);
+        final BindingToNormalizedNodeCodec codec = new BindingToNormalizedNodeCodec(
+            generator, classLoadingStrategy, codecRegistry);
         final List<PathArgument> pathArgs = new ArrayList<>();
         pathArgs.add(NodeIdentifier.create(QName.create("urn:test", "2017-01-01", "cont")));
 
index d54862ad3573be6c9021629730e9828ffbe83942..35608e81b2411a9be394fb746d3b689c3627e03e 100644 (file)
@@ -16,6 +16,7 @@ import org.junit.Test;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeCandidate;
@@ -26,12 +27,12 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
 
 public class LazyDataTreeModificationTest {
-
     @Test
     public void basicTest() throws Exception {
         final BindingNormalizedNodeCodecRegistry registry = mock(BindingNormalizedNodeCodecRegistry.class);
-        final BindingToNormalizedNodeCodec codec =
-                new BindingToNormalizedNodeCodec(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(), registry);
+        final BindingToNormalizedNodeCodec codec = new BindingToNormalizedNodeCodec(
+            new DefaultBindingRuntimeGenerator(), GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(),
+            registry);
         final DOMDataTreeCandidate domDataTreeCandidate = mock(DOMDataTreeCandidate.class);
         final DOMDataTreeIdentifier domDataTreeIdentifier =
                 new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.empty());
@@ -45,5 +46,4 @@ public class LazyDataTreeModificationTest {
 
         assertNotNull(LazyDataTreeModification.create(codec, domDataTreeCandidate));
     }
-
 }
\ No newline at end of file
index f1a2b66ac10b36474168d2aba5a01209f4b52f9a..2ed7574b7cceb8c0d1ecef693c8bd60662918cb6 100644 (file)
@@ -19,6 +19,7 @@ import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMNotificationServiceA
 import org.opendaylight.mdsal.binding.dom.adapter.BindingToNormalizedNodeCodec;
 import org.opendaylight.mdsal.binding.dom.adapter.test.util.MockSchemaService;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
@@ -46,9 +47,8 @@ public abstract class AbstractDataBrokerTestCustomizer {
 
     public AbstractDataBrokerTestCustomizer() {
         this.schemaService = new MockSchemaService();
-        final BindingNormalizedNodeCodecRegistry codecRegistry = new BindingNormalizedNodeCodecRegistry();
-        final GeneratedClassLoadingStrategy loading = GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy();
-        this.bindingToNormalized = new BindingToNormalizedNodeCodec(loading, codecRegistry);
+        this.bindingToNormalized = new BindingToNormalizedNodeCodec(new DefaultBindingRuntimeGenerator(),
+            GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(), new BindingNormalizedNodeCodecRegistry());
         this.schemaService.registerSchemaContextListener(this.bindingToNormalized);
         this.domNotificationRouter = DOMNotificationRouter.create(16);
     }
index 777c55cd42fc6777eb717c0901f8431b09a8dcf1..22c41ca22e150d270698dd04ae8d9634ac897d7a 100644 (file)
@@ -29,6 +29,7 @@ import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMRpcProviderServiceAd
 import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMRpcServiceAdapter;
 import org.opendaylight.mdsal.binding.dom.adapter.BindingToNormalizedNodeCodec;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
 import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
@@ -50,8 +51,6 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 @Beta
 public class BindingTestContext implements AutoCloseable {
-
-
     private BindingToNormalizedNodeCodec codec;
 
     private final ListeningExecutorService executor;
@@ -141,7 +140,7 @@ public class BindingTestContext implements AutoCloseable {
     public void startBindingToDomMappingService() {
         final BindingNormalizedNodeCodecRegistry codecRegistry = new BindingNormalizedNodeCodecRegistry();
         final GeneratedClassLoadingStrategy loading = GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy();
-        codec = new BindingToNormalizedNodeCodec(loading,  codecRegistry);
+        codec = new BindingToNormalizedNodeCodec(new DefaultBindingRuntimeGenerator(), loading,  codecRegistry);
         mockSchemaService.registerSchemaContextListener(codec);
     }
 
index 6ac1ddd1fadf4c4380fd5e9cd0a927b51ad669ff..2b215c0531cbf5d4b3034a1468faf02007364902 100644 (file)
@@ -7,9 +7,7 @@
  */
 package org.opendaylight.mdsal.binding.dom.codec.api;
 
-import com.google.common.annotations.Beta;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
 
 public interface BindingCodecTreeFactory {
     /**
@@ -21,19 +19,4 @@ public interface BindingCodecTreeFactory {
      * @return Binding Codec Tree for specified Binding runtime context.
      */
     BindingCodecTree create(BindingRuntimeContext context);
-
-    /**
-     * Creates Binding Codec Tree for specified Binding runtime context.
-     *
-     * @param context
-     *            Binding Runtime Context for which Binding codecs should be
-     *            instantiated.
-     * @param bindingClasses
-     *            Binding Runtime Context will be constructed using bindings
-     *            which contains specified classes, in order to support
-     *            deserialization in multi-classloader environment.
-     * @return Binding Codec Tree for specified Binding runtime context.
-     */
-    @Beta
-    BindingCodecTree create(SchemaContext context, Class<?>... bindingClasses);
 }
index 7537e25dd2907d7bc3cb09b08a53f230ea207c9f..5e3dfc6039b2e7144897a045d56f8db3c776b04a 100644 (file)
@@ -8,7 +8,7 @@
 package org.opendaylight.mdsal.binding.dom.codec.osgi;
 
 import java.util.EventListener;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
 
 @Deprecated
 public interface BindingRuntimeContextListener extends EventListener {
index 86ba87be1c0315974daf50e89da362b9c1205028..1fbb7ffd6291dde05661519342b0a602a2412886 100644 (file)
@@ -8,7 +8,7 @@
 package org.opendaylight.mdsal.binding.dom.codec.osgi;
 
 import com.google.common.annotations.Beta;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
 import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
 import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider;
 
index 550e7ca35526af2055101b7a2377221e8817d8ff..1f2062aab4d0e669d13edf98071a6357638e0fd3 100644 (file)
@@ -8,15 +8,15 @@
 package org.opendaylight.mdsal.binding.dom.codec.osgi.impl;
 
 import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.mdsal.binding.dom.codec.osgi.BindingRuntimeContextListener;
 import org.opendaylight.mdsal.binding.dom.codec.osgi.BindingRuntimeContextService;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
 import org.opendaylight.mdsal.binding.generator.api.ClassLoadingStrategy;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
@@ -57,7 +57,8 @@ final class SimpleBindingRuntimeContextService extends
     }
 
     void updateBindingRuntimeContext(final SchemaContext schemaContext) {
-        final BindingRuntimeContext next = verifyNotNull(BindingRuntimeContext.create(strategy, schemaContext));
+        final BindingRuntimeContext next = BindingRuntimeContext.create(
+            new DefaultBindingRuntimeGenerator().generateTypeMapping(schemaContext), strategy);
 
         final BindingRuntimeContextListener[] listeners;
         synchronized (lock) {
index 0a045000e155795b99d55457e0a9b8b080dde8e4..ada3311998bcfbdaf189a78e81e0f2fca5609814 100644 (file)
@@ -40,7 +40,7 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingStreamEventWriter;
 import org.opendaylight.mdsal.binding.dom.codec.impl.NodeCodecContext.CodecContextFactory;
 import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader;
 import org.opendaylight.mdsal.binding.dom.codec.util.BindingSchemaMapping;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
 import org.opendaylight.yangtools.concepts.Delegator;
index 30aea995cba51d00824d18d1f68944f737c04947..247ee2d9f44b9726db1f2bc283256c98ee5ff8d1 100644 (file)
@@ -31,9 +31,7 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSeriali
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeWriterFactory;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingStreamEventWriter;
 import org.opendaylight.mdsal.binding.dom.codec.util.AbstractBindingLazyContainerNode;
-import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
-import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
 import org.opendaylight.yangtools.yang.binding.Action;
 import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.opendaylight.yangtools.yang.binding.DataObject;
@@ -54,7 +52,6 @@ import org.opendaylight.yangtools.yang.data.api.schema.ValueNode;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -308,23 +305,6 @@ public class BindingNormalizedNodeCodecRegistry implements DataObjectSerializerR
         return new BindingCodecContext(context, this);
     }
 
-    @Override
-    @SuppressWarnings("checkstyle:illegalCatch")
-    public BindingCodecTree create(final SchemaContext context, final Class<?>... bindingClasses) {
-        final ModuleInfoBackedContext strategy = ModuleInfoBackedContext.create();
-        for (final Class<?> bindingCls : bindingClasses) {
-            try {
-                strategy.registerModuleInfo(BindingReflections.getModuleInfo(bindingCls));
-            } catch (final Exception e) {
-                throw new IllegalStateException(
-                        "Could not create BindingRuntimeContext from class " + bindingCls.getName(), e);
-            }
-        }
-        final BindingRuntimeContext runtimeCtx = BindingRuntimeContext.create(strategy, context);
-        return create(runtimeCtx);
-    }
-
-
     private static final class DeserializeFunction<T> implements Function<Optional<NormalizedNode<?, ?>>, Optional<T>> {
         private final DataObjectCodecContext<?,?> ctx;
 
index a6ffaaedd8add1388084e8e04b3889a4203f5335..760e75bb3bed66e654368f758bcfb13226104588 100644 (file)
@@ -27,8 +27,8 @@ import org.opendaylight.mdsal.binding.dom.codec.api.IncorrectNestingException;
 import org.opendaylight.mdsal.binding.dom.codec.api.MissingClassInLoadingStrategyException;
 import org.opendaylight.mdsal.binding.dom.codec.api.MissingSchemaException;
 import org.opendaylight.mdsal.binding.dom.codec.api.MissingSchemaForClassException;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
 import org.opendaylight.mdsal.binding.generator.api.ClassLoadingStrategy;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.BindingObject;
 import org.opendaylight.yangtools.yang.binding.DataObject;
index e3148704709b3d394b3d2b9ec48a777474582b75..5636287637dfad122414ff1a7c628f9e700f4d3b 100644 (file)
@@ -11,7 +11,7 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
 
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingIdentityCodec;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
 import org.opendaylight.yangtools.concepts.AbstractIllegalArgumentCodec;
 import org.opendaylight.yangtools.yang.binding.BaseIdentity;
index 351da8f2c534580b3ce255bdb3b856d91b8a7e90..fabe3c65364030c61772ddd525dea70cc344a9c7 100644 (file)
@@ -14,7 +14,7 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeNode;
 import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
index 980b1c589ca87de3b63fca6ae7563f29dd3b461b..a8e0ddd532934b18267283c5ccb8eb6cbe338bd4 100644 (file)
@@ -9,22 +9,24 @@ package org.opendaylight.mdsal.binding.dom.codec.impl;
 
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public abstract class AbstractBindingRuntimeTest {
-
-    private static SchemaContext schemaContext;
+    private static EffectiveModelContext schemaContext;
     private static BindingRuntimeContext runtimeContext;
 
     @BeforeClass
     public static void beforeClass() {
         ModuleInfoBackedContext ctx = ModuleInfoBackedContext.create();
         ctx.addModuleInfos(BindingReflections.loadModuleInfos());
-        schemaContext = ctx.tryToCreateSchemaContext().get();
-        runtimeContext = BindingRuntimeContext.create(ctx, schemaContext);
+        schemaContext = ctx.tryToCreateModelContext().get();
+
+        runtimeContext = BindingRuntimeContext.create(
+            new DefaultBindingRuntimeGenerator().generateTypeMapping(schemaContext), ctx);
     }
 
     @AfterClass
@@ -33,7 +35,7 @@ public abstract class AbstractBindingRuntimeTest {
         runtimeContext = null;
     }
 
-    public static final SchemaContext getSchemaContext() {
+    public static final EffectiveModelContext getSchemaContext() {
         return schemaContext;
     }
 
index bd95da644ec65f8dfc3e7fc3da2b73b5d538d238..a96b7e038ac09175c3be1665efd352b6b9a71293 100644 (file)
@@ -16,9 +16,10 @@ import java.util.Set;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.mdsal.binding.dom.codec.api.MissingClassInLoadingStrategyException;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
 import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.TreeComplexUsesAugment;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.TreeLeafOnlyAugment;
@@ -30,7 +31,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.te
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 /**
  * This sets of tests are designed in way, that schema context contains models for all augmentations, but backing class
@@ -41,7 +42,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext;
  */
 public class AugmentationClassDiscoveredAfterCodecTest {
 
-    private SchemaContext schemaContext;
+    private EffectiveModelContext schemaContext;
     private BindingRuntimeContext runtimeContext;
     private ClassExcludingClassLoadingStrategy mockedContext;
     private BindingNormalizedNodeCodecRegistry registry;
@@ -51,8 +52,9 @@ public class AugmentationClassDiscoveredAfterCodecTest {
         final ModuleInfoBackedContext ctx = ModuleInfoBackedContext.create();
         ctx.addModuleInfos(BindingReflections.loadModuleInfos());
         mockedContext = new ClassExcludingClassLoadingStrategy(ctx);
-        schemaContext = ctx.tryToCreateSchemaContext().get();
-        runtimeContext = BindingRuntimeContext.create(mockedContext, schemaContext);
+        schemaContext = ctx.tryToCreateModelContext().get();
+        runtimeContext = BindingRuntimeContext.create(
+            new DefaultBindingRuntimeGenerator().generateTypeMapping(schemaContext), mockedContext);
         registry = new BindingNormalizedNodeCodecRegistry(runtimeContext);
     }
 
index e1e9a04af467e95859743e6625e07218bfaed0fd..f876e2e98dc4d280cccdc194466e5d44e1b2676d 100644 (file)
@@ -11,8 +11,9 @@ import org.junit.Test;
 import org.opendaylight.mdsal.binding.dom.codec.api.IncorrectNestingException;
 import org.opendaylight.mdsal.binding.dom.codec.api.MissingSchemaException;
 import org.opendaylight.mdsal.binding.dom.codec.api.MissingSchemaForClassException;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.TreeComplexUsesAugment;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.TreeLeafOnlyAugment;
@@ -24,7 +25,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class ExceptionReportingTest {
     private static final BindingNormalizedNodeCodecRegistry CODEC_WITHOUT_TOP = codec(LowestLevel1.class);
@@ -86,8 +87,9 @@ public class ExceptionReportingTest {
                 throw new IllegalStateException(e);
             }
         }
-        final SchemaContext schema = ctx.tryToCreateSchemaContext().get();
-        final BindingRuntimeContext runtimeCtx = BindingRuntimeContext.create(ctx, schema);
+        final EffectiveModelContext schema = ctx.tryToCreateModelContext().get();
+        final BindingRuntimeContext runtimeCtx = BindingRuntimeContext.create(
+            new DefaultBindingRuntimeGenerator().generateTypeMapping(schema), ctx);
         final BindingNormalizedNodeCodecRegistry registry = new BindingNormalizedNodeCodecRegistry(runtimeCtx);
         return registry;
     }
index a5bf3b9b75e16795999c5758331f18fb1a800a90..465ca79476223105c20037bfa800811a71feab71 100644 (file)
     <dependencies>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>yang-model-api</artifactId>
+            <artifactId>yang-model-util</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-data-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
@@ -5,12 +5,13 @@
  * 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.binding.generator.util;
+package org.opendaylight.mdsal.binding.generator.api;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
 import static java.util.Objects.requireNonNull;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
@@ -25,12 +26,9 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
-import java.util.ServiceLoader;
 import java.util.Set;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeGenerator;
-import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeTypes;
-import org.opendaylight.mdsal.binding.generator.api.ClassLoadingStrategy;
 import org.opendaylight.mdsal.binding.model.api.DefaultType;
 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
 import org.opendaylight.mdsal.binding.model.api.MethodSignature;
@@ -60,28 +58,19 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Runtime Context for Java YANG Binding classes
+ * Runtime Context for Java YANG Binding classes. It provides information derived from the backing effective model,
+ * which is not captured in generated classes (and hence cannot be obtained from {@code BindingReflections}.
  *
- * <p>Runtime Context provides additional insight in Java YANG Binding,
- * binding classes and underlying YANG schema, it contains
- * runtime information, which could not be derived from generated
- * classes alone using {@link org.opendaylight.mdsal.binding.spec.reflect.BindingReflections}.
- *
- * <p>Some of this information are for example list of all available
- * children for cases {@link #getChoiceCaseChildren(DataNodeContainer)}, since
- * choices are augmentable and new choices may be introduced by additional models.
- *
- * <p>Same goes for all possible augmentations.
+ * <p>Some of this information are for example list of all available children for cases
+ * {@link #getChoiceCaseChildren(DataNodeContainer)}, since choices are augmentable and new choices may be introduced
+ * by additional models. Same goes for all possible augmentations.
  */
+@Beta
 public final class BindingRuntimeContext implements SchemaContextProvider, Immutable {
     private static final Logger LOG = LoggerFactory.getLogger(BindingRuntimeContext.class);
-    private static final BindingRuntimeGenerator GENERATOR = ServiceLoader.load(BindingRuntimeGenerator.class)
-            .findFirst()
-            .orElseThrow(() -> new IllegalStateException("No BindingRuntimeGenerator implementation found"));
-
 
-    private final BindingRuntimeTypes runtimeTypes;
-    private final ClassLoadingStrategy strategy;
+    private final @NonNull BindingRuntimeTypes runtimeTypes;
+    private final @NonNull ClassLoadingStrategy strategy;
 
     private final LoadingCache<QName, Class<?>> identityClasses = CacheBuilder.newBuilder().weakValues().build(
         new CacheLoader<QName, Class<?>>() {
@@ -106,11 +95,12 @@ public final class BindingRuntimeContext implements SchemaContextProvider, Immut
      * Creates Binding Runtime Context from supplied class loading strategy and schema context.
      *
      * @param strategy Class loading strategy to retrieve generated Binding classes
-     * @param ctx Schema Context which describes YANG model and to which Binding classes should be mapped
-     * @return Instance of BindingRuntimeContext for supplied schema context.
+     * @param runtimeTypes Binding classes to YANG schema mapping
+     * @return A new instance
      */
-    public static BindingRuntimeContext create(final ClassLoadingStrategy strategy, final SchemaContext ctx) {
-        return new BindingRuntimeContext(GENERATOR.generateTypeMapping(ctx), strategy);
+    public static @NonNull BindingRuntimeContext create(final BindingRuntimeTypes runtimeTypes,
+            final ClassLoadingStrategy strategy) {
+        return new BindingRuntimeContext(runtimeTypes, strategy);
     }
 
     /**
@@ -119,7 +109,7 @@ public final class BindingRuntimeContext implements SchemaContextProvider, Immut
      *
      * @return Class loading strategy.
      */
-    public ClassLoadingStrategy getStrategy() {
+    public @NonNull ClassLoadingStrategy getStrategy() {
         return strategy;
     }
 
index f9fbfebf48b85de1f2afc2a0769a317d89b9d7c3..75cefbf11c14d1def8cd795dd6dcb4f9d40fe369 100644 (file)
@@ -32,6 +32,8 @@ import java.util.Set;
 import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.checkerframework.checker.lock.qual.Holding;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.api.ClassLoadingStrategy;
 import org.opendaylight.mdsal.binding.generator.api.ModuleInfoRegistry;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
@@ -211,6 +213,12 @@ public final class ModuleInfoBackedContext extends GeneratedClassLoadingStrategy
         }
     }
 
+    @Beta
+    public @NonNull BindingRuntimeContext createRuntimeContext(final BindingRuntimeGenerator generator) {
+        return BindingRuntimeContext.create(generator.generateTypeMapping(tryToCreateModelContext().orElseThrow()),
+            this);
+    }
+
     // TODO finish schema parsing and expose as SchemaService
     // Unite with current SchemaService
 
index 12cfa8292d0b32a9da61a618a41059cef1829484..fbc86ec70654920bb2178f8c11f90c96ddb0e6d3 100644 (file)
@@ -19,10 +19,9 @@ import java.net.URISyntaxException;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Optional;
-import java.util.ServiceLoader;
 import java.util.function.Supplier;
 import org.junit.BeforeClass;
-import org.opendaylight.mdsal.binding.generator.api.BindingGenerator;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingGenerator;
 import org.opendaylight.mdsal.binding.java.api.generator.GeneratorJavaFile;
 import org.opendaylight.mdsal.binding.java.api.generator.YangModuleInfoTemplate;
 import org.opendaylight.mdsal.binding.model.api.Type;
@@ -33,8 +32,6 @@ import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public abstract class BaseCompilationTest {
 
-    private static BindingGenerator BINDING_GENERATOR;
-
     @BeforeClass
     public static void createTestDirs() {
         if (CompilationTestUtils.TEST_DIR.exists()) {
@@ -42,8 +39,6 @@ public abstract class BaseCompilationTest {
         }
         assertTrue(CompilationTestUtils.GENERATOR_OUTPUT_DIR.mkdirs());
         assertTrue(CompilationTestUtils.COMPILER_OUTPUT_DIR.mkdirs());
-
-        BINDING_GENERATOR = ServiceLoader.load(BindingGenerator.class).findFirst().orElseThrow();
     }
 
     protected static final void generateTestSources(final List<Type> types, final File sourcesOutputDir)
@@ -63,7 +58,7 @@ public abstract class BaseCompilationTest {
             throws IOException, URISyntaxException {
         final List<File> sourceFiles = CompilationTestUtils.getSourceFiles(resourceDirPath);
         final EffectiveModelContext context = YangParserTestUtils.parseYangFiles(sourceFiles);
-        final List<Type> types = BINDING_GENERATOR.generateTypes(context);
+        final List<Type> types = new DefaultBindingGenerator().generateTypes(context);
         generateTestSources(types, sourcesOutputDir);
 
         // Also generate YangModuleInfo
index d5485e0149c32c283ee95f7fd8d86f6328375471..447e812aa63f72d6f09c5091a317f46c9ea6a26b 100644 (file)
@@ -13,9 +13,8 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.List;
-import java.util.ServiceLoader;
 import org.junit.Test;
-import org.opendaylight.mdsal.binding.generator.api.BindingGenerator;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingGenerator;
 import org.opendaylight.mdsal.binding.java.api.generator.TOGenerator;
 import org.opendaylight.mdsal.binding.model.api.GeneratedProperty;
 import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
@@ -36,8 +35,7 @@ public class ClassCodeGeneratorTest {
         final SchemaContext context = YangParserTestUtils.parseYangResource("/list-composite-key.yang");
 
         assertNotNull(context);
-        final BindingGenerator bindingGen = ServiceLoader.load(BindingGenerator.class).findFirst().orElseThrow();
-        final List<Type> genTypes = bindingGen.generateTypes(context);
+        final List<Type> genTypes = new DefaultBindingGenerator().generateTypes(context);
 
         assertTrue(genTypes != null);
         assertEquals(7, genTypes.size());
index b0ed30e76af34cbda326cb3b41c2aa3290eae5ce..3c6428f6e432b189b255d696aeaaedae145f9898 100644 (file)
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>mdsal-binding-generator-impl</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
     <scm>
         <connection>scm:git:http://git.opendaylight.org/gerrit/controller.git</connection>
index ff8f44d6ee7dcdafe3ec7ff242acd455d20993f5..64c1823340de491f427a324de7d8c69f86e2f523 100644 (file)
@@ -25,6 +25,7 @@ import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.opendaylight.mdsal.binding.dom.adapter.BindingToNormalizedNodeCodec;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
 import org.opendaylight.mdsal.eos.binding.api.Entity;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipCandidateRegistration;
@@ -68,8 +69,8 @@ public class BindingDOMEntityOwnershipServiceAdapterTest {
                 DOM_ENTITY.getIdentifier());
 
         this.adapter = new BindingDOMEntityOwnershipServiceAdapter(this.mockDOMService,
-                new BindingToNormalizedNodeCodec(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(),
-                        this.mockCodecRegistry));
+                new BindingToNormalizedNodeCodec(new DefaultBindingRuntimeGenerator(),
+                    GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(), mockCodecRegistry));
     }
 
     @Test
@@ -140,8 +141,8 @@ public class BindingDOMEntityOwnershipServiceAdapterTest {
     public void testOwnershipChangeWithException() throws Exception {
         final DOMEntityOwnershipListenerAdapter domEntityOwnershipListenerAdapter =
                 new DOMEntityOwnershipListenerAdapter(mock(EntityOwnershipListener.class),
-                        new BindingToNormalizedNodeCodec(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(),
-                            this.mockCodecRegistry));
+                        new BindingToNormalizedNodeCodec(new DefaultBindingRuntimeGenerator(),
+                            GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(), mockCodecRegistry));
         final DOMEntityOwnershipChange domOwnershipChange = mock(DOMEntityOwnershipChange.class);
         doThrow(IllegalStateException.class).when(domOwnershipChange).getEntity();
         domEntityOwnershipListenerAdapter.ownershipChanged(domOwnershipChange);
index 922798fdbd9035db0100cacd3fd566fd639c71cd..70fdd8d7bac2d3e5381f92019f8ee165a973530b 100644 (file)
@@ -19,7 +19,8 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeGenerator;
 import org.opendaylight.mdsal.yanglib.api.SchemaContextResolver;
 import org.opendaylight.mdsal.yanglib.api.YangLibSupport;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.$YangModuleInfoImpl;
@@ -43,8 +44,8 @@ public final class YangModuleLibrarySupport implements YangLibSupport {
     private final EffectiveModelContext context;
 
     @Inject
-    public YangModuleLibrarySupport(final @Reference YangParserFactory parserFactory)
-            throws YangParserException, IOException {
+    public YangModuleLibrarySupport(final @Reference YangParserFactory parserFactory,
+            final @Reference BindingRuntimeGenerator generator) throws YangParserException, IOException {
         final YangModuleInfo yangLibModule = $YangModuleInfoImpl.getInstance();
 
         context = parserFactory.createParser()
@@ -53,7 +54,7 @@ public final class YangModuleLibrarySupport implements YangLibSupport {
                 .addSource(createSource(yangLibModule))
                 .buildEffectiveModel();
         final BindingCodecTree codecTree = new BindingNormalizedNodeCodecRegistry(BindingRuntimeContext.create(
-            SimpleStrategy.INSTANCE, context)).getCodecContext();
+            generator.generateTypeMapping(context), SimpleStrategy.INSTANCE)).getCodecContext();
 
         this.codec = verifyNotNull(codecTree.getSubtreeCodec(InstanceIdentifier.create(ModulesState.class)));
     }
index bd0a4ab55750351d876b9a08b54d46c96b702d13..a6e38c60c568fc1a1cd6371fe3308639197e58a3 100644 (file)
@@ -7,9 +7,13 @@
  */
 package org.opendaylight.mdsal.yanglib.rfc7895;
 
+import static java.util.Objects.requireNonNull;
+
 import java.io.IOException;
+import java.util.ServiceLoader;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.kohsuke.MetaInfServices;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeGenerator;
 import org.opendaylight.mdsal.yanglib.api.YangLibSupport;
 import org.opendaylight.mdsal.yanglib.api.YangLibSupportFactory;
 import org.opendaylight.yangtools.yang.model.parser.api.YangParserException;
@@ -18,9 +22,20 @@ import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory;
 @MetaInfServices
 @NonNullByDefault
 public final class YangModuleLibrarySupportFactory implements YangLibSupportFactory {
+    private final BindingRuntimeGenerator generator;
+
+    public YangModuleLibrarySupportFactory() {
+        this(ServiceLoader.load(BindingRuntimeGenerator.class).findFirst()
+            .orElseThrow(() -> new IllegalStateException("Failed to find a BindingRuntimeGenerator service")));
+    }
+
+    public YangModuleLibrarySupportFactory(final BindingRuntimeGenerator generator) {
+        this.generator = requireNonNull(generator);
+    }
+
     @Override
     public YangLibSupport createYangLibSupport(final YangParserFactory parserFactory)
             throws YangParserException, IOException {
-        return new YangModuleLibrarySupport(parserFactory);
+        return new YangModuleLibrarySupport(parserFactory, generator);
     }
 }
index c6f4e1f843780e22966dfb8b7208b3a39261a5b7..a92ba781fe6d01ef4aa3a788a3209c004fcea561 100644 (file)
@@ -20,7 +20,8 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingIdentityCodec;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeGenerator;
 import org.opendaylight.mdsal.yanglib.api.SchemaContextResolver;
 import org.opendaylight.mdsal.yanglib.api.YangLibSupport;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.$YangModuleInfoImpl;
@@ -48,8 +49,8 @@ public final class YangLibrarySupport implements YangLibSupport {
     private final EffectiveModelContext context;
 
     @Inject
-    public YangLibrarySupport(final @Reference YangParserFactory parserFactory)
-            throws YangParserException, IOException {
+    public YangLibrarySupport(final @Reference YangParserFactory parserFactory,
+            final @Reference BindingRuntimeGenerator generator) throws YangParserException, IOException {
         final YangModuleInfo yangLibModule = $YangModuleInfoImpl.getInstance();
 
         context = parserFactory.createParser()
@@ -58,7 +59,7 @@ public final class YangLibrarySupport implements YangLibSupport {
                 .addSource(createSource(yangLibModule))
                 .buildEffectiveModel();
         final BindingCodecTree codecTree = new BindingNormalizedNodeCodecRegistry(BindingRuntimeContext.create(
-            SimpleStrategy.INSTANCE, context)).getCodecContext();
+            generator.generateTypeMapping(context), SimpleStrategy.INSTANCE)).getCodecContext();
 
         this.identityCodec = codecTree.getIdentityCodec();
         this.codec = verifyNotNull(codecTree.getSubtreeCodec(InstanceIdentifier.create(YangLibrary.class)));
index 047df36f5b04990fbc61364d664c7f390046551d..03a6d93f445437801ee55c4defc0f281b9abe295 100644 (file)
@@ -7,9 +7,13 @@
  */
 package org.opendaylight.mdsal.yanglib.rfc8525;
 
+import static java.util.Objects.requireNonNull;
+
 import java.io.IOException;
+import java.util.ServiceLoader;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.kohsuke.MetaInfServices;
+import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeGenerator;
 import org.opendaylight.mdsal.yanglib.api.YangLibSupport;
 import org.opendaylight.mdsal.yanglib.api.YangLibSupportFactory;
 import org.opendaylight.yangtools.yang.model.parser.api.YangParserException;
@@ -18,9 +22,20 @@ import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory;
 @MetaInfServices
 @NonNullByDefault
 public final class YangLibrarySupportFactory implements YangLibSupportFactory {
+    private final BindingRuntimeGenerator generator;
+
+    public YangLibrarySupportFactory() {
+        this(ServiceLoader.load(BindingRuntimeGenerator.class).findFirst()
+            .orElseThrow(() -> new IllegalStateException("Failed to find a BindingRuntimeGenerator service")));
+    }
+
+    public YangLibrarySupportFactory(final BindingRuntimeGenerator generator) {
+        this.generator = requireNonNull(generator);
+    }
+
     @Override
     public YangLibSupport createYangLibSupport(final YangParserFactory parserFactory)
             throws YangParserException, IOException {
-        return new YangLibrarySupport(parserFactory);
+        return new YangLibrarySupport(parserFactory, generator);
     }
 }