import static java.util.Objects.requireNonNull;
-import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableMap.Builder;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
-import java.util.Map.Entry;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.dom.api.DOMRpcService;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.RpcService;
-import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
class RpcServiceAdapter implements InvocationHandler {
private final ImmutableMap<Method, RpcInvocationStrategy> rpcNames;
private final @NonNull Class<? extends RpcService> type;
private final @NonNull AdapterContext adapterContext;
private final @NonNull DOMRpcService delegate;
- private final RpcService proxy;
+ private final @NonNull RpcService facade;
RpcServiceAdapter(final Class<? extends RpcService> type, final AdapterContext adapterContext,
final DOMRpcService domService) {
this.adapterContext = requireNonNull(adapterContext);
delegate = requireNonNull(domService);
- final ImmutableBiMap<Method, RpcDefinition> methods = adapterContext.currentSerializer()
- .getRpcMethodToSchema(type);
- final Builder<Method, RpcInvocationStrategy> rpcBuilder = ImmutableMap.builderWithExpectedSize(methods.size());
- for (final Entry<Method, RpcDefinition> rpc : methods.entrySet()) {
- rpcBuilder.put(rpc.getKey(),
- RpcInvocationStrategy.of(this, rpc.getKey(), rpc.getValue().asEffectiveStatement()));
+ final var methods = adapterContext.currentSerializer().getRpcMethodToSchema(type);
+ final var rpcBuilder = ImmutableMap.<Method, RpcInvocationStrategy>builderWithExpectedSize(methods.size());
+ for (var rpc : methods.entrySet()) {
+ final var method = rpc.getKey();
+ rpcBuilder.put(method, RpcInvocationStrategy.of(this, method, rpc.getValue().asEffectiveStatement()));
}
rpcNames = rpcBuilder.build();
- proxy = (RpcService) Proxy.newProxyInstance(type.getClassLoader(), new Class[] {type}, this);
+ facade = (RpcService) Proxy.newProxyInstance(type.getClassLoader(), new Class[] {type}, this);
}
final @NonNull CurrentAdapterSerializer currentSerializer() {
return delegate;
}
- RpcService getProxy() {
- return proxy;
+ final @NonNull RpcService facade() {
+ return facade;
}
@Override
- @SuppressWarnings("checkstyle:hiddenField")
public Object invoke(final Object proxy, final Method method, final Object[] args) {
- final RpcInvocationStrategy rpc = rpcNames.get(method);
- if (rpc != null) {
+ final var strategy = rpcNames.get(method);
+ if (strategy != null) {
if (args.length != 1) {
throw new IllegalArgumentException("Input must be provided.");
}
- return rpc.invoke((DataObject) requireNonNull(args[0]));
+ return strategy.invoke((DataObject) requireNonNull(args[0]));
}
switch (method.getName()) {
bindingTestContext.getCodec(), bindingTestContext.getDomRpcInvoker());
Method method = TestRpcService.class.getMethod("equals", Object.class);
- assertTrue((boolean) rpcServiceAdapter.invoke(rpcServiceAdapter.getProxy(), method,
- new Object[]{ rpcServiceAdapter.getProxy() }));
- assertFalse((boolean) rpcServiceAdapter.invoke(rpcServiceAdapter.getProxy(), method,
+ assertTrue((boolean) rpcServiceAdapter.invoke(rpcServiceAdapter.facade(), method,
+ new Object[]{ rpcServiceAdapter.facade() }));
+ assertFalse((boolean) rpcServiceAdapter.invoke(rpcServiceAdapter.facade(), method,
new Object[]{ new Object() }));
method = TestRpcService.class.getMethod("hashCode");
- assertEquals(rpcServiceAdapter.getProxy().hashCode(), rpcServiceAdapter.invoke(rpcServiceAdapter.getProxy(),
+ assertEquals(rpcServiceAdapter.facade().hashCode(), rpcServiceAdapter.invoke(rpcServiceAdapter.facade(),
method, new Object[]{ }));
method = TestRpcService.class.getMethod("toString");
- assertEquals(rpcServiceAdapter.getProxy().toString(), rpcServiceAdapter.invoke(rpcServiceAdapter.getProxy(),
+ assertEquals(rpcServiceAdapter.facade().toString(), rpcServiceAdapter.invoke(rpcServiceAdapter.facade(),
method, new Object[]{ }));
method = OpendaylightTestRpcServiceService.class.getMethod("rockTheHouse", RockTheHouseInput.class);
- assertNotNull(rpcServiceAdapter.invoke(rpcServiceAdapter.getProxy(), method,
+ assertNotNull(rpcServiceAdapter.invoke(rpcServiceAdapter.facade(), method,
new Object[]{ new RockTheHouseInputBuilder().build() }));
rpcServiceAdapter = new RpcServiceAdapter(OpendaylightTestRoutedRpcService.class,
bindingTestContext.getCodec(), bindingTestContext.getDomRpcInvoker());
method = OpendaylightTestRoutedRpcService.class.getMethod("routedSimpleRoute", RoutedSimpleRouteInput.class);
- assertNotNull(rpcServiceAdapter.invoke(rpcServiceAdapter.getProxy(), method,
+ assertNotNull(rpcServiceAdapter.invoke(rpcServiceAdapter.facade(), method,
new Object[]{ new RoutedSimpleRouteInputBuilder().build() }));
}