import java.util.Set
import java.util.HashMap
import org.opendaylight.controller.sal.binding.spi.RpcRoutingTable
-import org.opendaylight.yangtools.yang.binding.DataObject
import static org.opendaylight.controller.sal.binding.codegen.impl.XtendHelper.*
+import org.opendaylight.yangtools.yang.binding.DataContainer
+import org.opendaylight.yangtools.yang.binding.RpcImplementation
class RpcRouterCodegenInstance<T extends RpcService> implements RpcRouter<T> {
val T invocationProxy
@Property
- val Class<T> rpcServiceType
+ val RpcImplementation invokerDelegate;
+
+ @Property
+ val Class<T> serviceType
@Property
val Set<Class<? extends BaseIdentity>> contexts
- val routingTables = new HashMap<Class<? extends BaseIdentity>, RpcRoutingTableImpl<? extends BaseIdentity, ?>>;
+ @Property
+ val Set<Class<? extends DataContainer>> supportedInputs;
+
+ val routingTables = new HashMap<Class<? extends BaseIdentity>, RpcRoutingTableImpl<? extends BaseIdentity, ? extends RpcService>>;
@Property
var T defaultService
- new(Class<T> type, T routerImpl, Set<Class<? extends BaseIdentity>> contexts) {
- _rpcServiceType = type
+ new(Class<T> type, T routerImpl, Set<Class<? extends BaseIdentity>> contexts,
+ Set<Class<? extends DataContainer>> inputs) {
+ _serviceType = type
_invocationProxy = routerImpl
+ _invokerDelegate = routerImpl as RpcImplementation
_contexts = contexts
+ _supportedInputs = inputs;
for (ctx : contexts) {
val table = XtendHelper.createRoutingTable(ctx)
val table = getRoutingTable(context);
return table.getRoute(path);
}
+
+ override <T extends DataContainer> invoke(Class<T> type, T input) {
+ return invokerDelegate.invoke(type, input);
+ }
+
}