Rework BindingRuntimeTypes
[mdsal.git] / binding / mdsal-binding-runtime-api / src / main / java / org / opendaylight / mdsal / binding / runtime / api / DefaultBindingRuntimeContext.java
index 0e658e884bce4339fb539e2a7bcc4d462ea64e97..292f003c9815a2c5730598db187d47d5dc9e5ba5 100644 (file)
@@ -11,51 +11,29 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.annotations.Beta;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
+import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
 
 /**
  * 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>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 DefaultBindingRuntimeContext extends AbstractBindingRuntimeContext {
     private final @NonNull BindingRuntimeTypes runtimeTypes;
-    private final @NonNull ClassLoadingStrategy strategy;
+    private final @NonNull ModuleInfoSnapshot moduleInfos;
 
-    private DefaultBindingRuntimeContext(final BindingRuntimeTypes runtimeTypes, final ClassLoadingStrategy strategy) {
+    public DefaultBindingRuntimeContext(final BindingRuntimeTypes runtimeTypes, final ModuleInfoSnapshot moduleInfos) {
         this.runtimeTypes = requireNonNull(runtimeTypes);
-        this.strategy = requireNonNull(strategy);
-    }
-
-    /**
-     * Creates Binding Runtime Context from supplied class loading strategy and schema context.
-     *
-     * @param strategy Class loading strategy to retrieve generated Binding classes
-     * @param runtimeTypes Binding classes to YANG schema mapping
-     * @return A new instance
-     */
-    public static @NonNull DefaultBindingRuntimeContext create(final BindingRuntimeTypes runtimeTypes,
-            final ClassLoadingStrategy strategy) {
-        return new DefaultBindingRuntimeContext(runtimeTypes, strategy);
+        this.moduleInfos = requireNonNull(moduleInfos);
     }
 
-    /**
-     * Returns a class loading strategy associated with this binding runtime context
-     * which is used to load classes.
-     *
-     * @return Class loading strategy.
-     */
     @Override
-    public @NonNull ClassLoadingStrategy getStrategy() {
-        return strategy;
+    public BindingRuntimeTypes getTypes() {
+        return runtimeTypes;
     }
 
     @Override
-    public @NonNull BindingRuntimeTypes getTypes() {
-        return runtimeTypes;
+    public <T> Class<T> loadClass(final JavaTypeName type) throws ClassNotFoundException {
+        return moduleInfos.loadClass(type.toString());
     }
 }