Binding v2 runtime - adapters - impl - operations invoker
[mdsal.git] / binding2 / mdsal-binding2-dom-adapter / src / main / java / org / opendaylight / mdsal / binding / javav2 / dom / adapter / impl / operation / invoker / OperationMethodInvokerWithInput.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.mdsal.binding.javav2.dom.adapter.impl.operation.invoker;
9
10 import com.google.common.annotations.Beta;
11 import java.lang.invoke.MethodHandle;
12 import java.lang.invoke.MethodType;
13 import java.util.concurrent.Future;
14 import org.opendaylight.mdsal.binding.javav2.spec.base.Action;
15 import org.opendaylight.mdsal.binding.javav2.spec.base.Instantiable;
16 import org.opendaylight.mdsal.binding.javav2.spec.base.ListAction;
17 import org.opendaylight.mdsal.binding.javav2.spec.base.Operation;
18 import org.opendaylight.mdsal.binding.javav2.spec.base.Rpc;
19 import org.opendaylight.yangtools.yang.common.RpcResult;
20
21 @Beta
22 class OperationMethodInvokerWithInput extends OperationMethodInvoker {
23
24     private static final MethodType INVOCATION_SIGNATURE =
25             MethodType.methodType(Future.class, Rpc.class, Action.class, ListAction.class, Instantiable.class);
26
27     private final MethodHandle handle;
28
29     OperationMethodInvokerWithInput(final MethodHandle methodHandle) {
30         this.handle = methodHandle.asType(INVOCATION_SIGNATURE);
31     }
32
33     @Override
34     public <T extends Operation> Future<RpcResult<?>> invokeOn(final T impl, final Instantiable<?> input) {
35         return invoking(handle, impl, input);
36     }
37 }