Update ModuleInfoSnapshotBuilder a bit 68/93068/2
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 15 Oct 2020 05:49:31 +0000 (07:49 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 15 Oct 2020 06:55:48 +0000 (08:55 +0200)
While we are dealing with YangModuleInfo, users should not really
be mucking with that -- it is a binding-internal thing after all.

Expose a j.l.Class-based add() method, which performs proper
introspection to find the appropriate info -- thus allowing us to
simplify users a bit.

Change-Id: I2b00b40ffee2be977fba8b7c7fb80ea28dfd073b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotBuilder.java
yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/YangModuleLibrarySupport.java
yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupport.java

index 0b8343972ea5730c4839532e9a2f93a2e7d1da75..33961c2534b7c1d89b25077162fae67b285f69fc 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.mdsal.binding.runtime.spi;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.annotations.Beta;
+import com.google.common.base.Throwables;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -19,6 +20,7 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
 import org.opendaylight.yangtools.concepts.CheckedBuilder;
+import org.opendaylight.yangtools.yang.binding.BindingObject;
 import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
 import org.opendaylight.yangtools.yang.model.parser.api.YangParser;
 import org.opendaylight.yangtools.yang.model.parser.api.YangParserException;
@@ -36,6 +38,27 @@ public final class ModuleInfoSnapshotBuilder implements CheckedBuilder<ModuleInf
         this.parserFactory = requireNonNull(parserFactory);
     }
 
+    @SuppressWarnings("checkstyle:illegalCatch")
+    public @NonNull ModuleInfoSnapshotBuilder add(final Class<? extends BindingObject> clazz) {
+        final YangModuleInfo moduleInfo;
+        try {
+            moduleInfo = BindingReflections.getModuleInfo(clazz);
+        } catch (Exception e) {
+            Throwables.throwIfUnchecked(e);
+            throw new IllegalStateException("Failed to introspect " + clazz, e);
+        }
+
+        return add(moduleInfo);
+    }
+
+    @SuppressWarnings("unchecked")
+    public @NonNull ModuleInfoSnapshotBuilder add(final Class<? extends BindingObject>... classes) {
+        for (Class<? extends BindingObject> clazz : classes) {
+            add(clazz);
+        }
+        return this;
+    }
+
     public @NonNull ModuleInfoSnapshotBuilder add(final YangModuleInfo info) {
         ModuleInfoSnapshotResolver.flatDependencies(moduleInfos, info);
         return this;
index 07f488ddb3540988ad0886fea273630699411be6..3f5257032738e645883ff706a8dbf22e000f8e0d 100644 (file)
@@ -22,7 +22,6 @@ import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot;
 import org.opendaylight.mdsal.binding.runtime.spi.ModuleInfoSnapshotBuilder;
 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;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
@@ -45,7 +44,7 @@ public final class YangModuleLibrarySupport implements YangLibSupport {
     public YangModuleLibrarySupport(final YangParserFactory parserFactory, final BindingRuntimeGenerator generator,
             final BindingCodecTreeFactory codecFactory) throws YangParserException {
         final ModuleInfoSnapshot snapshot = new ModuleInfoSnapshotBuilder(parserFactory)
-                .add($YangModuleInfoImpl.getInstance())
+                .add(ModulesState.class)
                 .build();
         context = snapshot.getEffectiveModelContext();
 
index fb37196ae012450e90591a1cb999771d54e8e3bf..4147199a0a170d40baf527352ff470a8b124d120 100644 (file)
@@ -23,7 +23,6 @@ import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot;
 import org.opendaylight.mdsal.binding.runtime.spi.ModuleInfoSnapshotBuilder;
 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;
 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.YangLibrary;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory;
@@ -50,7 +49,7 @@ public final class YangLibrarySupport implements YangLibSupport {
     public YangLibrarySupport(final YangParserFactory parserFactory, final BindingRuntimeGenerator generator,
             final BindingCodecTreeFactory codecFactory) throws YangParserException {
         final ModuleInfoSnapshot snapshot = new ModuleInfoSnapshotBuilder(parserFactory)
-                .add($YangModuleInfoImpl.getInstance())
+                .add(YangLibrary.class)
                 .build();
         context = snapshot.getEffectiveModelContext();