From 21249970a16898dd8e8472d20ecf1dd1f70a0aa3 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 24 Nov 2022 19:40:06 +0100 Subject: [PATCH] Rehost getRpcMethodToQName() This methods is only used by BindingDOMRpcProviderServiceAdapter, move it there. Change-Id: I676b7254386f15a447b753af01d5f71f1e15fa3b Signed-off-by: Robert Varga --- .../BindingDOMRpcProviderServiceAdapter.java | 37 +++++++++++++- .../dom/adapter/CurrentAdapterSerializer.java | 50 ------------------- .../adapter/BindingNormalizedCodecTest.java | 13 +++-- 3 files changed, 42 insertions(+), 58 deletions(-) diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMRpcProviderServiceAdapter.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMRpcProviderServiceAdapter.java index 07483d2cf6..f381a49292 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMRpcProviderServiceAdapter.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMRpcProviderServiceAdapter.java @@ -9,14 +9,18 @@ package org.opendaylight.mdsal.binding.dom.adapter; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableClassToInstanceMap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.opendaylight.mdsal.binding.api.RpcProviderService; +import org.opendaylight.mdsal.binding.spec.naming.BindingMapping; +import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier; import org.opendaylight.mdsal.dom.api.DOMRpcImplementation; import org.opendaylight.mdsal.dom.api.DOMRpcProviderService; @@ -27,10 +31,13 @@ import org.opendaylight.yangtools.yang.binding.Rpc; import org.opendaylight.yangtools.yang.binding.RpcService; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @VisibleForTesting public class BindingDOMRpcProviderServiceAdapter extends AbstractBindingAdapter implements RpcProviderService { + private static final Logger LOG = LoggerFactory.getLogger(BindingDOMRpcProviderServiceAdapter.class); private static final ImmutableSet GLOBAL = ImmutableSet.of(YangInstanceIdentifier.empty()); public BindingDOMRpcProviderServiceAdapter(final AdapterContext adapterContext, @@ -111,13 +118,41 @@ public class BindingDOMRpcProviderServiceAdapter extends AbstractBindingAdapter< private ObjectRegistration register( final CurrentAdapterSerializer serializer, final Class type, final T implementation, final Collection rpcContextPaths) { - final var rpcs = serializer.getRpcMethodToQName(type).inverse(); + final var rpcs = createQNameToMethod(currentSerializer(), type); return new BindingRpcAdapterRegistration<>(implementation, getDelegate().registerRpcImplementation( new LegacyDOMRpcImplementationAdapter<>(adapterContext(), type, rpcs, implementation), createDomRpcIdentifiers(rpcs.keySet(), rpcContextPaths))); } + @Deprecated + @VisibleForTesting + // FIXME: This should be probably part of Binding Runtime context + static ImmutableMap createQNameToMethod(final CurrentAdapterSerializer serializer, + final Class key) { + final var moduleName = BindingReflections.getQNameModule(key); + final var runtimeContext = serializer.getRuntimeContext(); + final var module = runtimeContext.getEffectiveModelContext().findModule(moduleName).orElse(null); + if (module == null) { + LOG.trace("Schema for {} is not available; expected module name: {}; BindingRuntimeContext: {}", + key, moduleName, runtimeContext); + throw new IllegalStateException(String.format("Schema for %s is not available; expected module name: %s;" + + " full BindingRuntimeContext available in trace log", key, moduleName)); + } + + final var ret = ImmutableBiMap.builder(); + try { + for (var rpcDef : module.getRpcs()) { + final var rpcName = rpcDef.getQName(); + ret.put(rpcName, key.getMethod(BindingMapping.getRpcMethodName(rpcName), + runtimeContext.getRpcInput(rpcName))); + } + } catch (NoSuchMethodException e) { + throw new IllegalStateException("Rpc defined in model does not have representation in generated class.", e); + } + return ret.build(); + } + private static Set createDomRpcIdentifiers(final Set rpcs, final Collection paths) { final Set ret = new HashSet<>(); diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializer.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializer.java index 45fd7a39ab..7a7cdf6ff1 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializer.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializer.java @@ -16,8 +16,6 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import com.google.common.collect.ImmutableBiMap; -import java.lang.reflect.Method; import java.util.Collection; import java.util.Map; import java.util.Map.Entry; @@ -32,34 +30,24 @@ import org.opendaylight.mdsal.binding.api.InstanceNotificationSpec; import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices; import org.opendaylight.mdsal.binding.dom.codec.spi.ForwardingBindingDOMCodecServices; import org.opendaylight.mdsal.binding.model.api.JavaTypeName; -import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext; import org.opendaylight.mdsal.binding.runtime.api.InputRuntimeType; -import org.opendaylight.mdsal.binding.spec.naming.BindingMapping; import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.RpcService; -import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Beta @VisibleForTesting public final class CurrentAdapterSerializer extends ForwardingBindingDOMCodecServices { - private static final Logger LOG = LoggerFactory.getLogger(CurrentAdapterSerializer.class); - private final LoadingCache, YangInstanceIdentifier> cache = CacheBuilder.newBuilder() .softValues().build(new CacheLoader, YangInstanceIdentifier>() { @Override @@ -170,42 +158,4 @@ public final class CurrentAdapterSerializer extends ForwardingBindingDOMCodecSer return Map.entry(stack, lastNamespace); } - - @Deprecated(since = "11.0.0", forRemoval = true) - // FIXME: This should be probably part of Binding Runtime context - ImmutableBiMap getRpcMethodToQName(final Class key) { - final Module module = getModule(key); - final ImmutableBiMap.Builder ret = ImmutableBiMap.builder(); - try { - for (final RpcDefinition rpcDef : module.getRpcs()) { - final Method method = findRpcMethod(key, rpcDef); - ret.put(method,rpcDef.getQName()); - } - } catch (final NoSuchMethodException e) { - throw new IllegalStateException("Rpc defined in model does not have representation in generated class.", e); - } - return ret.build(); - } - - private Module getModule(final Class modeledClass) { - final QNameModule moduleName = BindingReflections.getQNameModule(modeledClass); - final BindingRuntimeContext localRuntimeContext = getRuntimeContext(); - final Module module = localRuntimeContext.getEffectiveModelContext().findModule(moduleName).orElse(null); - if (module != null) { - return module; - } - - LOG.trace("Schema for {} is not available; expected module name: {}; BindingRuntimeContext: {}", - modeledClass, moduleName, localRuntimeContext); - throw new IllegalStateException(String.format("Schema for %s is not available; expected module name: %s; " - + "full BindingRuntimeContext available in trace log", modeledClass, moduleName)); - } - - @Deprecated(since = "11.0.0", forRemoval = true) - private Method findRpcMethod(final Class key, final RpcDefinition rpcDef) - throws NoSuchMethodException { - final var rpcName = rpcDef.getQName(); - final var inputClz = getRuntimeContext().getRpcInput(rpcName); - return key.getMethod(BindingMapping.getRpcMethodName(rpcName), inputClz); - } } diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingNormalizedCodecTest.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingNormalizedCodecTest.java index 3bb7678a5f..31a9044a47 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingNormalizedCodecTest.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingNormalizedCodecTest.java @@ -14,10 +14,8 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.SetMultimap; import java.lang.reflect.Method; -import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; import org.junit.Test; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractSchemaAwareTest; import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext; @@ -77,11 +75,12 @@ public class BindingNormalizedCodecTest extends AbstractSchemaAwareTest { @Test public void testGetRpcMethodToQName() { - final List retMap = serializer - .getRpcMethodToQName(OpendaylightTestRpcServiceService.class).keySet().stream() - .map(Method::getName) - .collect(Collectors.toList()); - assertTrue(retMap.contains("rockTheHouse")); + assertTrue( + BindingDOMRpcProviderServiceAdapter.createQNameToMethod(serializer, + OpendaylightTestRpcServiceService.class) + .values().stream() + .map(Method::getName) + .anyMatch("rockTheHouse"::equals)); } static class EmptyEffectiveModelContext extends AbstractSchemaContext implements EffectiveModelContext { -- 2.36.6