Add BindingRuntimeContext.getYangDataClass() 12/104212/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 1 Feb 2023 10:38:11 +0000 (11:38 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 1 Feb 2023 10:38:28 +0000 (11:38 +0100)
For runtime support we need the ability to load YangData classes, this
patch adds that ability.

JIRA: MDSAL-675
Change-Id: Ia318c2cd7b47e6477144938d9f67f69972e4d7c6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/AbstractBindingRuntimeContext.java
binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeContext.java
binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ForwardingBindingRuntimeContext.java

index 0c2b4b00dbf7ff36bb80fd9c2b2e2ad69b725594..6b22a84432c9c59ab7178a21cb26970750cedad9 100644 (file)
@@ -25,7 +25,9 @@ import org.opendaylight.yangtools.yang.binding.Notification;
 import org.opendaylight.yangtools.yang.binding.Rpc;
 import org.opendaylight.yangtools.yang.binding.RpcInput;
 import org.opendaylight.yangtools.yang.binding.RpcOutput;
+import org.opendaylight.yangtools.yang.binding.YangData;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.YangDataName;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 
 /**
@@ -115,6 +117,14 @@ public abstract class AbstractBindingRuntimeContext implements BindingRuntimeCon
             .asSubclass(RpcOutput.class);
     }
 
+    @Override
+    @SuppressWarnings("unchecked")
+    public final Class<? extends YangData<?>> getYangDataClass(final YangDataName templateName) {
+        return (Class) loadClass(getTypes().findYangData(templateName)
+            .orElseThrow(() -> new IllegalArgumentException("Failed to find YangData for " + templateName)))
+            .asSubclass(YangData.class);
+    }
+
     private Class<?> loadClass(final RuntimeType type) {
         try {
             return loadClass(type.javaType());
index bdfbfb2295b9b0058ae28e8cd5a8e5f656311cbc..43cd0cb71209b13d8c11207c01357afc56062b15 100644 (file)
@@ -19,7 +19,9 @@ import org.opendaylight.yangtools.yang.binding.BaseIdentity;
 import org.opendaylight.yangtools.yang.binding.Rpc;
 import org.opendaylight.yangtools.yang.binding.RpcInput;
 import org.opendaylight.yangtools.yang.binding.RpcOutput;
+import org.opendaylight.yangtools.yang.binding.YangData;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.YangDataName;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
@@ -105,4 +107,6 @@ public interface BindingRuntimeContext extends EffectiveModelContextProvider, Im
     @NonNull Class<?> getClassForSchema(Absolute schema);
 
     @NonNull Class<? extends BaseIdentity> getIdentityClass(QName input);
+
+    @NonNull Class<? extends YangData<?>> getYangDataClass(YangDataName templateName);
 }
index 8c5a678a03d963c0e18c20193b1e5b8fc7d0dc57..5ba5de37fa23f4f6a3c5a9101ed7ec2d04cdfb0a 100644 (file)
@@ -23,7 +23,9 @@ import org.opendaylight.yangtools.yang.binding.BaseIdentity;
 import org.opendaylight.yangtools.yang.binding.Rpc;
 import org.opendaylight.yangtools.yang.binding.RpcInput;
 import org.opendaylight.yangtools.yang.binding.RpcOutput;
+import org.opendaylight.yangtools.yang.binding.YangData;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.YangDataName;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 
 @Beta
@@ -85,4 +87,9 @@ public abstract class ForwardingBindingRuntimeContext extends ForwardingObject i
     public Class<? extends RpcOutput> getRpcOutput(final QName rpcName) {
         return delegate().getRpcOutput(rpcName);
     }
+
+    @Override
+    public Class<? extends YangData<?>> getYangDataClass(final YangDataName templateName) {
+        return delegate().getYangDataClass(templateName);
+    }
 }