*/
package org.opendaylight.controller.sal.binding.codegen.impl
+import java.util.Map
+import java.util.WeakHashMap
import javassist.ClassPool
-import org.opendaylight.yangtools.yang.binding.RpcService
-
import javassist.CtClass
import javassist.CtMethod
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
-import org.opendaylight.yangtools.yang.binding.annotations.RoutingContext
-import org.opendaylight.yangtools.yang.binding.BaseIdentity
-
-import java.util.Map
-import java.util.HashMap
-
-
-import org.opendaylight.yangtools.yang.binding.NotificationListener
-import org.opendaylight.yangtools.yang.binding.Notification
-
-
-import static extension org.opendaylight.controller.sal.binding.codegen.YangtoolsMappingHelper.*
-import static extension org.opendaylight.controller.sal.binding.codegen.RuntimeCodeSpecification.*
-import java.util.HashSet
-import static org.opendaylight.yangtools.concepts.util.ClassLoaderUtils.*
+import javassist.LoaderClassPath
+import org.opendaylight.controller.sal.binding.codegen.RuntimeCodeHelper
import org.opendaylight.controller.sal.binding.spi.NotificationInvokerFactory
import org.opendaylight.controller.sal.binding.spi.NotificationInvokerFactory.NotificationInvoker
-import java.util.Set
-import org.opendaylight.controller.sal.binding.codegen.RuntimeCodeHelper
-import java.util.WeakHashMap
-import org.opendaylight.yangtools.yang.binding.annotations.QName
+import org.opendaylight.yangtools.sal.binding.generator.util.JavassistUtils
import org.opendaylight.yangtools.yang.binding.DataContainer
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
+import org.opendaylight.yangtools.yang.binding.Notification
+import org.opendaylight.yangtools.yang.binding.NotificationListener
import org.opendaylight.yangtools.yang.binding.RpcImplementation
-import org.opendaylight.yangtools.sal.binding.generator.util.JavassistUtils
-import org.opendaylight.yangtools.sal.binding.generator.util.ClassLoaderUtils
-import javassist.LoaderClassPath
+import org.opendaylight.yangtools.yang.binding.RpcService
+import org.opendaylight.yangtools.yang.binding.annotations.RoutingContext
+import org.opendaylight.yangtools.yang.binding.util.ClassLoaderUtils
+
+import static extension org.opendaylight.controller.sal.binding.codegen.RuntimeCodeSpecification.*
+import static extension org.opendaylight.controller.sal.binding.codegen.YangtoolsMappingHelper.*
class RuntimeCodeGenerator implements org.opendaylight.controller.sal.binding.codegen.RuntimeCodeGenerator, NotificationInvokerFactory {
}
override <T extends RpcService> getDirectProxyFor(Class<T> iface) {
- val T instance = withClassLoaderAndLock(iface.classLoader,lock) [|
+ val T instance = ClassLoaderUtils.withClassLoaderAndLock(iface.classLoader,lock) [|
val proxyName = iface.directProxyName;
val potentialClass = ClassLoaderUtils.tryToLoadClassWithTCCL(proxyName)
if(potentialClass != null) {
}
override <T extends RpcService> getRouterFor(Class<T> iface,String routerInstanceName) {
- val metadata = withClassLoader(iface.classLoader) [|
+ val metadata = ClassLoaderUtils.withClassLoader(iface.classLoader) [|
val supertype = iface.asCtClass
return supertype.rpcMetadata;
]
- val instance = <T>withClassLoaderAndLock(iface.classLoader,lock) [ |
+ val instance = ClassLoaderUtils.<T>withClassLoaderAndLock(iface.classLoader,lock) [ |
val supertype = iface.asCtClass
val routerName = iface.routerName;
val potentialClass = ClassLoaderUtils.tryToLoadClassWithTCCL(routerName)
return inputClass.rpcMethodMetadata(inputClass,method.name);
}
- private def RpcMetadata rpcMethodMetadata(CtClass dataClass,CtClass inputClass,String rpcMethod) {
+ private def RpcMetadata rpcMethodMetadata(CtClass dataClass, CtClass inputClass, String rpcMethod) {
for (method : dataClass.methods) {
if (method.name.startsWith("get") && method.parameterTypes.size === 0) {
for (annotation : method.availableAnnotations) {
if (annotation instanceof RoutingContext) {
val encapsulated = !method.returnType.equals(InstanceIdentifier.asCtClass);
- return new RpcMetadata(null,rpcMethod,(annotation as RoutingContext).value, method, encapsulated,inputClass);
+ return new RpcMetadata(rpcMethod,(annotation as RoutingContext).value, method, encapsulated,inputClass);
}
}
}
protected def resolveInvokerClass(Class<? extends NotificationListener> class1) {
- return <RuntimeGeneratedInvokerPrototype>withClassLoaderAndLock(class1.classLoader,lock) [|
+ return ClassLoaderUtils.<RuntimeGeneratedInvokerPrototype>withClassLoaderAndLock(class1.classLoader,lock) [|
val invoker = invokerClasses.get(class1);
if (invoker !== null) {
return invoker;
override close() {
}
}
-
-@Data
-package class RuntimeGeneratedInvokerPrototype {
-
- @Property
- val Set<Class<? extends Notification>> supportedNotifications;
-
- @Property
- val Class<? extends org.opendaylight.controller.sal.binding.api.NotificationListener<?>> protoClass;
-}
-
-package class RpcServiceMetadata {
-
- @Property
- val contexts = new HashSet<Class<? extends BaseIdentity>>();
-
- @Property
- val rpcMethods = new HashMap<String, RpcMetadata>();
-
- @Property
- val rpcInputs = new HashMap<Class<? extends DataContainer>, RpcMetadata>();
-
-
- @Property
- val supportedInputs = new HashSet<Class<? extends DataContainer>>();
-}
-
-@Data
-package class RpcMetadata {
-
- @Property
- val QName qname;
-
- @Property
- val String methodName;
-
- @Property
- val Class<? extends BaseIdentity> context;
- @Property
- val CtMethod inputRouteGetter;
-
- @Property
- val boolean routeEncapsulated;
-
- @Property
- val CtClass inputType;
-}