From: Robert Varga Date: Wed, 1 Feb 2023 10:38:11 +0000 (+0100) Subject: Add BindingRuntimeContext.getYangDataClass() X-Git-Tag: v11.0.5~1 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=31d8b86c80c54bb306acac4279a5f26dc9c78204;p=mdsal.git Add BindingRuntimeContext.getYangDataClass() 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 --- diff --git a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/AbstractBindingRuntimeContext.java b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/AbstractBindingRuntimeContext.java index 0c2b4b00db..6b22a84432 100644 --- a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/AbstractBindingRuntimeContext.java +++ b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/AbstractBindingRuntimeContext.java @@ -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> 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()); diff --git a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeContext.java b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeContext.java index bdfbfb2295..43cd0cb712 100644 --- a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeContext.java +++ b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeContext.java @@ -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 getIdentityClass(QName input); + + @NonNull Class> getYangDataClass(YangDataName templateName); } diff --git a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ForwardingBindingRuntimeContext.java b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ForwardingBindingRuntimeContext.java index 8c5a678a03..5ba5de37fa 100644 --- a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ForwardingBindingRuntimeContext.java +++ b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ForwardingBindingRuntimeContext.java @@ -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 getRpcOutput(final QName rpcName) { return delegate().getRpcOutput(rpcName); } + + @Override + public Class> getYangDataClass(final YangDataName templateName) { + return delegate().getYangDataClass(templateName); + } }