X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fbinding%2Fimpl%2FBindingDOMRpcImplementationAdapter.java;h=e67fba8920f5de47c17d8ae654eacd8694dcdc53;hb=40fb1fe3e59d720771af163ac344719b84bc86b4;hp=c81cce5a4b752e998b7b1b07015be77e24f60da5;hpb=96832df9d1d1bdc6f543e50e8bc20b2ec585d47e;p=controller.git diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcImplementationAdapter.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcImplementationAdapter.java index c81cce5a4b..e67fba8920 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcImplementationAdapter.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcImplementationAdapter.java @@ -14,20 +14,21 @@ import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.JdkFutureAdapters; import com.google.common.util.concurrent.ListenableFuture; import java.lang.reflect.Method; +import java.util.HashMap; import java.util.Map; -import java.util.concurrent.Callable; +import java.util.Map.Entry; import java.util.concurrent.ExecutionException; +import javax.annotation.Nonnull; import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; import org.opendaylight.controller.md.sal.dom.api.DOMRpcIdentifier; import org.opendaylight.controller.md.sal.dom.api.DOMRpcImplementation; import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; -import org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.RpcService; import org.opendaylight.yangtools.yang.binding.util.BindingReflections; import org.opendaylight.yangtools.yang.binding.util.RpcServiceInvoker; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -37,18 +38,20 @@ public class BindingDOMRpcImplementationAdapter implements DOMRpcImplementation private static final Cache, RpcServiceInvoker> SERVICE_INVOKERS = CacheBuilder.newBuilder().weakKeys().build(); - private final BindingNormalizedNodeCodecRegistry codec; + private final BindingNormalizedNodeSerializer codec; private final RpcServiceInvoker invoker; private final RpcService delegate; - private final QNameModule module; + private final QName inputQname; - public BindingDOMRpcImplementationAdapter(final BindingNormalizedNodeCodecRegistry codec, final Class type, final Map localNameToMethod, final T delegate) { + BindingDOMRpcImplementationAdapter(final BindingNormalizedNodeSerializer codec, final Class type, final Map localNameToMethod, final T delegate) { try { - this.invoker = SERVICE_INVOKERS.get(type, new Callable() { - @Override - public RpcServiceInvoker call() { - return RpcServiceInvoker.from(type); + this.invoker = SERVICE_INVOKERS.get(type, () -> { + final Map map = new HashMap<>(); + for (Entry e : localNameToMethod.entrySet()) { + map.put(e.getKey().getLastComponent(), e.getValue()); } + + return RpcServiceInvoker.from(map); }); } catch (ExecutionException e) { throw new IllegalArgumentException("Failed to create invokers for type " + type, e); @@ -56,36 +59,31 @@ public class BindingDOMRpcImplementationAdapter implements DOMRpcImplementation this.codec = Preconditions.checkNotNull(codec); this.delegate = Preconditions.checkNotNull(delegate); - module = BindingReflections.getQNameModule(type); - } - - public QNameModule getQNameModule() { - return module; + inputQname = QName.create(BindingReflections.getQNameModule(type), "input").intern(); } + @Nonnull @Override - public CheckedFuture invokeRpc(final DOMRpcIdentifier rpc, final NormalizedNode input) { + public CheckedFuture invokeRpc(@Nonnull final DOMRpcIdentifier rpc, final NormalizedNode input) { final SchemaPath schemaPath = rpc.getType(); - final DataObject bindingInput = input != null ? deserilialize(rpc.getType(),input) : null; - final ListenableFuture> bindingResult = invoke(schemaPath,bindingInput); - return transformResult(schemaPath,bindingResult); + final DataObject bindingInput = input != null ? deserialize(rpc.getType(), input) : null; + final ListenableFuture> bindingResult = invoke(schemaPath, bindingInput); + return transformResult(bindingResult); } - private DataObject deserilialize(final SchemaPath rpcPath, final NormalizedNode input) { + private DataObject deserialize(final SchemaPath rpcPath, final NormalizedNode input) { if (input instanceof LazySerializedContainerNode) { return ((LazySerializedContainerNode) input).bindingData(); } - final SchemaPath inputSchemaPath = rpcPath.createChild(QName.create(module,"input")); + final SchemaPath inputSchemaPath = rpcPath.createChild(inputQname); return codec.fromNormalizedNodeRpcData(inputSchemaPath, (ContainerNode) input); } - private ListenableFuture> invoke(final SchemaPath schemaPath, final DataObject input) { return JdkFutureAdapters.listenInPoolThread(invoker.invokeRpc(delegate, schemaPath.getLastComponent(), input)); } - private CheckedFuture transformResult(final SchemaPath schemaPath, - final ListenableFuture> bindingResult) { + private CheckedFuture transformResult(final ListenableFuture> bindingResult) { return LazyDOMRpcResultFuture.create(codec, bindingResult); }