Use BindingCodecTreeFactory in yanglib 43/88043/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 25 Feb 2020 13:49:17 +0000 (14:49 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 25 Feb 2020 13:50:55 +0000 (14:50 +0100)
Since BindingCodecTreeFactory is a proper component now, we can
use in our yanglib implementations, severing explicit dependency
on binding-dom-codec implementation.

JIRA: MDSAL-392
Change-Id: I76b3ce49a2b25ef7e2f9ff357f98c843659ad181
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yanglib/mdsal-yanglib-rfc7895/pom.xml
yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/OSGiYangModuleLibrarySupport.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/pom.xml
yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/OSGiYangLibrarySupport.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 49deed392abc0440a79ed39e90ec082ba49e95dc..f0045f7dcab01dc4f978e9eb7e1c12f8a3ce03a9 100644 (file)
             <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
             <artifactId>rfc7895</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-parser-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-binding-dom-codec</artifactId>
+            <artifactId>mdsal-binding-runtime-api</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>yang-parser-api</artifactId>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>mdsal-binding-dom-codec-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.kohsuke.metainf-services</groupId>
             <artifactId>yang-parser-impl</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>mdsal-binding-dom-codec</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
index 09b4d3b5b0516be1c97f18631f23993eb638a29c..bb0de59109a61f1a75209803441575ce0157cd82 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.mdsal.yanglib.rfc7895;
 import com.google.common.annotations.Beta;
 import java.io.IOException;
 import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory;
 import org.opendaylight.mdsal.yanglib.api.SchemaContextResolver;
 import org.opendaylight.mdsal.yanglib.api.YangLibSupport;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory;
@@ -32,6 +33,8 @@ public final class OSGiYangModuleLibrarySupport implements YangLibSupport {
     YangParserFactory parserFactory = null;
     @Reference
     BindingRuntimeGenerator generator = null;
+    @Reference
+    BindingCodecTreeFactory codecFactory = null;
 
     private YangModuleLibrarySupport delegate;
 
@@ -43,7 +46,7 @@ public final class OSGiYangModuleLibrarySupport implements YangLibSupport {
 
     @Activate
     void activate() throws YangParserException, IOException {
-        delegate = new YangModuleLibrarySupport(parserFactory, generator);
+        delegate = new YangModuleLibrarySupport(parserFactory, generator, codecFactory);
         LOG.info("RFC7895 YANG Module Library support activated");
     }
 
index ad803c8cfac292626ea546813dd0ee6ecbb1ba13..627928ba3540cf21c90455adfcb5c84a622cd81a 100644 (file)
@@ -18,8 +18,8 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator;
 import org.opendaylight.binding.runtime.api.DefaultBindingRuntimeContext;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
-import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
 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 +43,8 @@ public final class YangModuleLibrarySupport implements YangLibSupport {
     private final EffectiveModelContext context;
 
     @Inject
-    public YangModuleLibrarySupport(final YangParserFactory parserFactory, final BindingRuntimeGenerator generator)
-            throws YangParserException, IOException {
+    public YangModuleLibrarySupport(final YangParserFactory parserFactory, final BindingRuntimeGenerator generator,
+            final BindingCodecTreeFactory codecFactory) throws YangParserException, IOException {
         final YangModuleInfo yangLibModule = $YangModuleInfoImpl.getInstance();
 
         context = parserFactory.createParser()
@@ -52,8 +52,8 @@ public final class YangModuleLibrarySupport implements YangLibSupport {
                     YangModuleLibrarySupport::createSource))
                 .addSource(createSource(yangLibModule))
                 .buildEffectiveModel();
-        final BindingCodecTree codecTree = new BindingNormalizedNodeCodecRegistry(DefaultBindingRuntimeContext.create(
-            generator.generateTypeMapping(context), SimpleStrategy.INSTANCE)).getCodecContext();
+        final BindingCodecTree codecTree = codecFactory.create(DefaultBindingRuntimeContext.create(
+            generator.generateTypeMapping(context), SimpleStrategy.INSTANCE));
 
         this.codec = verifyNotNull(codecTree.getSubtreeCodec(InstanceIdentifier.create(ModulesState.class)));
     }
index acb9567e6a10a42f69e7de056def96bdcc23a208..ac4a8df5948aba4faa0155aa63cf780cebfbad3e 100644 (file)
@@ -15,6 +15,7 @@ import java.util.ServiceLoader;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.kohsuke.MetaInfServices;
 import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory;
 import org.opendaylight.mdsal.yanglib.api.YangLibSupport;
 import org.opendaylight.mdsal.yanglib.api.YangLibSupportFactory;
 import org.opendaylight.yangtools.yang.model.parser.api.YangParserException;
@@ -24,20 +25,27 @@ import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory;
 @MetaInfServices
 @NonNullByDefault
 public final class YangModuleLibrarySupportFactory implements YangLibSupportFactory {
+    private final BindingCodecTreeFactory codecFactory;
     private final BindingRuntimeGenerator generator;
 
     public YangModuleLibrarySupportFactory() {
-        this(ServiceLoader.load(BindingRuntimeGenerator.class).findFirst()
-            .orElseThrow(() -> new IllegalStateException("Failed to find a BindingRuntimeGenerator service")));
+        this(load(BindingRuntimeGenerator.class), load(BindingCodecTreeFactory.class));
     }
 
-    public YangModuleLibrarySupportFactory(final BindingRuntimeGenerator generator) {
+    public YangModuleLibrarySupportFactory(final BindingRuntimeGenerator generator,
+            final BindingCodecTreeFactory codecFactory) {
         this.generator = requireNonNull(generator);
+        this.codecFactory = requireNonNull(codecFactory);
     }
 
     @Override
     public YangLibSupport createYangLibSupport(final YangParserFactory parserFactory)
             throws YangParserException, IOException {
-        return new YangModuleLibrarySupport(parserFactory, generator);
+        return new YangModuleLibrarySupport(parserFactory, generator, codecFactory);
+    }
+
+    private static <T> T load(final Class<T> clazz) {
+        return ServiceLoader.load(clazz).findFirst()
+                .orElseThrow(() -> new IllegalStateException("Failed to find a " + clazz.getSimpleName() + " service"));
     }
 }
index a48aa1da703aa0fb8d8be0e5d44981e4e68f3a19..1c3b27867f1a2f04b29297ebb7b9f32a58e8f6ef 100644 (file)
             <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
             <artifactId>rfc8525</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-parser-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-binding-dom-codec</artifactId>
+            <artifactId>mdsal-binding-runtime-api</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>yang-parser-api</artifactId>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>mdsal-binding-dom-codec-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.kohsuke.metainf-services</groupId>
             <artifactId>yang-parser-impl</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>mdsal-binding-dom-codec</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
index 2827d38f2f1e23a1a047b3cda5201e1fe1686146..6d458e5aadad3eec592f8d75f2274b54f5fcb745 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.mdsal.yanglib.rfc8525;
 import com.google.common.annotations.Beta;
 import java.io.IOException;
 import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory;
 import org.opendaylight.mdsal.yanglib.api.SchemaContextResolver;
 import org.opendaylight.mdsal.yanglib.api.YangLibSupport;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory;
@@ -32,6 +33,8 @@ public final class OSGiYangLibrarySupport implements YangLibSupport {
     YangParserFactory parserFactory = null;
     @Reference
     BindingRuntimeGenerator generator = null;
+    @Reference
+    BindingCodecTreeFactory codecFactory = null;
 
     private YangLibrarySupport delegate;
 
@@ -43,7 +46,7 @@ public final class OSGiYangLibrarySupport implements YangLibSupport {
 
     @Activate
     void activate() throws YangParserException, IOException {
-        delegate = new YangLibrarySupport(parserFactory, generator);
+        delegate = new YangLibrarySupport(parserFactory, generator, codecFactory);
         LOG.info("RFC8525 YANG Library support activated");
     }
 
index 5a4e78322896931424646324ca334e01c1fd83e5..b2f264814e5147b44670ea88e4c955077c96026d 100644 (file)
@@ -18,9 +18,9 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator;
 import org.opendaylight.binding.runtime.api.DefaultBindingRuntimeContext;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory;
 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.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 +48,8 @@ public final class YangLibrarySupport implements YangLibSupport {
     private final EffectiveModelContext context;
 
     @Inject
-    public YangLibrarySupport(final YangParserFactory parserFactory, final BindingRuntimeGenerator generator)
-            throws YangParserException, IOException {
+    public YangLibrarySupport(final YangParserFactory parserFactory, final BindingRuntimeGenerator generator,
+            final BindingCodecTreeFactory codecFactory) throws YangParserException, IOException {
         final YangModuleInfo yangLibModule = $YangModuleInfoImpl.getInstance();
 
         context = parserFactory.createParser()
@@ -57,8 +57,8 @@ public final class YangLibrarySupport implements YangLibSupport {
                     YangLibrarySupport::createSource))
                 .addSource(createSource(yangLibModule))
                 .buildEffectiveModel();
-        final BindingCodecTree codecTree = new BindingNormalizedNodeCodecRegistry(DefaultBindingRuntimeContext.create(
-            generator.generateTypeMapping(context), SimpleStrategy.INSTANCE)).getCodecContext();
+        final BindingCodecTree codecTree = codecFactory.create(DefaultBindingRuntimeContext.create(
+            generator.generateTypeMapping(context), SimpleStrategy.INSTANCE));
 
         this.identityCodec = codecTree.getIdentityCodec();
         this.codec = verifyNotNull(codecTree.getSubtreeCodec(InstanceIdentifier.create(YangLibrary.class)));
index fcacf1148a711ed78154029b47e65cf1b375c9ab..59aeb22eb1d485f06763e6f62da237694ac5cf6e 100644 (file)
@@ -15,6 +15,7 @@ import java.util.ServiceLoader;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.kohsuke.MetaInfServices;
 import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory;
 import org.opendaylight.mdsal.yanglib.api.YangLibSupport;
 import org.opendaylight.mdsal.yanglib.api.YangLibSupportFactory;
 import org.opendaylight.yangtools.yang.model.parser.api.YangParserException;
@@ -24,20 +25,27 @@ import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory;
 @MetaInfServices
 @NonNullByDefault
 public final class YangLibrarySupportFactory implements YangLibSupportFactory {
+    private final BindingCodecTreeFactory codecFactory;
     private final BindingRuntimeGenerator generator;
 
     public YangLibrarySupportFactory() {
-        this(ServiceLoader.load(BindingRuntimeGenerator.class).findFirst()
-            .orElseThrow(() -> new IllegalStateException("Failed to find a BindingRuntimeGenerator service")));
+        this(load(BindingRuntimeGenerator.class), load(BindingCodecTreeFactory.class));
     }
 
-    public YangLibrarySupportFactory(final BindingRuntimeGenerator generator) {
+    public YangLibrarySupportFactory(final BindingRuntimeGenerator generator,
+            final BindingCodecTreeFactory codecFactory) {
         this.generator = requireNonNull(generator);
+        this.codecFactory = requireNonNull(codecFactory);
     }
 
     @Override
     public YangLibSupport createYangLibSupport(final YangParserFactory parserFactory)
             throws YangParserException, IOException {
-        return new YangLibrarySupport(parserFactory, generator);
+        return new YangLibrarySupport(parserFactory, generator, codecFactory);
+    }
+
+    private static <T> T load(final Class<T> clazz) {
+        return ServiceLoader.load(clazz).findFirst()
+                .orElseThrow(() -> new IllegalStateException("Failed to find a " + clazz.getSimpleName() + " service"));
     }
 }