X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fconfig%2Fyang-jmx-generator-plugin%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyangjmxgenerator%2Fplugin%2Fgofactory%2FAbsFactoryGeneratedObjectFactory.java;h=dad6222c26049340acd254380136d351b4947f00;hp=48a6c15706a209fe5001b60c0c17e1bdf80d1c96;hb=f43b01b81319959b1907e3e04537f5169e7f33d8;hpb=28812157e806220a0ad70898901fad5f46a3c875 diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsFactoryGeneratedObjectFactory.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsFactoryGeneratedObjectFactory.java index 48a6c15706..dad6222c26 100644 --- a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsFactoryGeneratedObjectFactory.java +++ b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/gofactory/AbsFactoryGeneratedObjectFactory.java @@ -31,9 +31,9 @@ import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.Generated import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.JavaFileInputBuilder; import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.TypeName; import org.opendaylight.yangtools.yang.common.QName; -import org.osgi.framework.BundleContext; public class AbsFactoryGeneratedObjectFactory { + private static final String BUNDLE_CONTEXT = "org.osgi.framework.BundleContext"; public GeneratedObject toGeneratedObject(ModuleMXBeanEntry mbe, Optional copyright) { FullyQualifiedName absFactoryFQN = new FullyQualifiedName(mbe.getPackageName(), mbe.getAbstractFactoryName()); @@ -63,6 +63,10 @@ public class AbsFactoryGeneratedObjectFactory { FullyQualifiedName moduleFQN, List moduleFields) { JavaFileInputBuilder b = new JavaFileInputBuilder(); + + b.addImportFQN(new FullyQualifiedName(Module.class)); + b.addImportFQN(new FullyQualifiedName(ModuleIdentifier.class)); + Annotation moduleQNameAnnotation = Annotation.createModuleQNameANnotation(yangModuleQName); b.addClassAnnotation(moduleQNameAnnotation); @@ -91,7 +95,7 @@ public class AbsFactoryGeneratedObjectFactory { "public %s createModule(String instanceName, %s dependencyResolver, %s bundleContext) {\n"+ "return instantiateModule(instanceName, dependencyResolver, bundleContext);\n"+ "}\n", - Module.class.getCanonicalName(), DependencyResolver.class.getCanonicalName(), BundleContext.class.getCanonicalName())); + Module.class.getCanonicalName(), DependencyResolver.class.getCanonicalName(), BUNDLE_CONTEXT)); b.addToBody(getCreateModule(moduleFQN, moduleFields)); @@ -100,16 +104,27 @@ public class AbsFactoryGeneratedObjectFactory { "return new %s(new %s(NAME, instanceName), dependencyResolver, oldModule, oldInstance);\n"+ "}\n", moduleFQN, DependencyResolver.class.getCanonicalName(), moduleFQN, AutoCloseable.class.getCanonicalName(), - BundleContext.class.getCanonicalName(), moduleFQN, ModuleIdentifier.class.getCanonicalName())); + BUNDLE_CONTEXT, moduleFQN, ModuleIdentifier.class.getCanonicalName())); b.addToBody(format("\n"+ "public %s instantiateModule(String instanceName, %s dependencyResolver, %s bundleContext) {\n"+ "return new %s(new %s(NAME, instanceName), dependencyResolver);\n"+ - "}\n", moduleFQN, DependencyResolver.class.getCanonicalName(), BundleContext.class.getCanonicalName(), + "}\n", moduleFQN, DependencyResolver.class.getCanonicalName(), BUNDLE_CONTEXT, moduleFQN, ModuleIdentifier.class.getCanonicalName() )); b.addToBody(format("\n"+ + "public %s handleChangedClass(%s dependencyResolver, %s old, %s bundleContext) throws Exception {\n" + + // "// @Deprecated return handleChangedClass(old);\n" + + "String instanceName = old.getModule().getIdentifier().getInstanceName();\n" + + "%1$s newModule = new %1$s(new ModuleIdentifier(NAME, instanceName), dependencyResolver);\n" + + "Module oldModule = old.getModule();\n" + + "Class oldModuleClass = oldModule.getClass();\n" + + genCodeToCopyAttributes(moduleFields) + + "return newModule;\n" + + "}\n", moduleFQN, DependencyResolver.class.getCanonicalName(), DynamicMBeanWithInstance.class.getCanonicalName(), BUNDLE_CONTEXT)); + + b.addToBody(format("\n@Deprecated\n"+ "public %s handleChangedClass(%s old) throws Exception {\n"+ "throw new UnsupportedOperationException(\"Class reloading is not supported\");\n"+ "}\n", moduleFQN, DynamicMBeanWithInstance.class.getCanonicalName())); @@ -117,67 +132,86 @@ public class AbsFactoryGeneratedObjectFactory { b.addToBody(format("\n"+ "@Override\n"+ "public java.util.Set<%s> getDefaultModules(org.opendaylight.controller.config.api.DependencyResolverFactory dependencyResolverFactory, %s bundleContext) {\n"+ - "return new java.util.HashSet<%s>();\n"+ - "}\n", moduleFQN, BundleContext.class.getCanonicalName(), moduleFQN)); + "return new java.util.HashSet<>();\n"+ + "}\n", moduleFQN, BUNDLE_CONTEXT)); return new GeneratedObjectBuilder(b.build()).toGeneratedObject(); } + private String genCodeToCopyAttributes(List moduleFields) { + StringBuilder sb = new StringBuilder("\n"); + for (Field field : moduleFields) { + sb.append(format("newModule.set%1$s( (%2$s) oldModuleClass.getMethod(\"get%1$s\").invoke(oldModule));\n", field.getName(), field.getType())); + } + sb.append('\n'); + return sb.toString(); + } + private static String getCreateModule(FullyQualifiedName moduleFQN, List moduleFields) { - String result = "\n"+ - "@Override\n"+ - format("public %s createModule(String instanceName, %s dependencyResolver, %s old, %s bundleContext) throws Exception {\n", - Module.class.getCanonicalName(),DependencyResolver.class.getCanonicalName(), - DynamicMBeanWithInstance.class.getCanonicalName(),BundleContext.class.getCanonicalName())+ - format("%s oldModule = null;\n",moduleFQN)+ - "try {\n"+ - format("oldModule = (%s) old.getModule();\n",moduleFQN)+ - "} catch(Exception e) {\n"+ - "return handleChangedClass(old);\n"+ - "}\n"+ - format("%s module = instantiateModule(instanceName, dependencyResolver, oldModule, old.getInstance(), bundleContext);\n", moduleFQN); - - for(Field field: moduleFields) { - result += format("module.set%s(oldModule.get%1$s());\n", field.getName()); + StringBuilder result = new StringBuilder("\n" + + "@Override\n"); + result.append( + format("public %s createModule(String instanceName, %s dependencyResolver, %s old, %s bundleContext) " + + "throws Exception {\n", + Module.class.getCanonicalName(), DependencyResolver.class.getCanonicalName(), + DynamicMBeanWithInstance.class.getCanonicalName(), BUNDLE_CONTEXT)) + .append(format("%s oldModule;\n", moduleFQN)) + .append("try {\n") + .append(format("oldModule = (%s) old.getModule();\n", moduleFQN)) + .append("} catch(Exception e) {\n" + + "return handleChangedClass(dependencyResolver, old, bundleContext);\n" + + "}\n") + .append(format("%s module = instantiateModule(instanceName, dependencyResolver, oldModule, old" + + ".getInstance(), bundleContext);\n", + moduleFQN)); + + for (Field field : moduleFields) { + result.append(format("module.set%s(oldModule.get%1$s());\n", field.getName())); } - result += "\n"+ - "return module;\n"+ - "}\n"; - return result; + result.append("\n" + + "return module;\n" + + "}\n"); + return result.toString(); } private static String getServiceIfcsInitialization(List providedServices) { String generic = format("Class", AbstractServiceInterface.class.getCanonicalName()); - String result = format("static {\n"+ - "java.util.Set<%1$s> serviceIfcs2 = new java.util.HashSet<%1$s>();\n", generic); + StringBuilder result = new StringBuilder("static {\n"); + if (!providedServices.isEmpty()) { + result.append(format("java.util.Set<%1$s> serviceIfcs2 = new java.util.HashSet<>();\n", generic)); + + for (FullyQualifiedName fqn : providedServices) { + result.append(format("serviceIfcs2.add(%s.class);\n", fqn)); + } - for(FullyQualifiedName fqn: providedServices) { - result += format("serviceIfcs2.add(%s.class);\n", fqn); + result.append("serviceIfcs = java.util.Collections.unmodifiableSet(serviceIfcs2);\n"); + } else { + result.append("serviceIfcs = java.util.Collections.emptySet();\n"); } - result += "serviceIfcs = java.util.Collections.unmodifiableSet(serviceIfcs2);\n"+ - "}\n"; + result.append("}\n"); // add isModuleImplementingServiceInterface and getImplementedServiceIntefaces methods - result += format("\n"+ - "@Override\n"+ - "public final boolean isModuleImplementingServiceInterface(Class serviceInterface) {\n"+ - "for (Class ifc: serviceIfcs) {\n"+ - "if (serviceInterface.isAssignableFrom(ifc)){\n"+ - "return true;\n"+ - "}\n"+ - "}\n"+ - "return false;\n"+ - "}\n"+ - "\n"+ - "@Override\n"+ - "public java.util.Set> getImplementedServiceIntefaces() {\n"+ - "return serviceIfcs;\n"+ - "}\n", AbstractServiceInterface.class.getCanonicalName()); - - return result; + result.append(format("\n" + + "@Override\n" + + "public final boolean isModuleImplementingServiceInterface(Class serviceInterface) " + + "{\n" + + "for (Class ifc: serviceIfcs) {\n" + + "if (serviceInterface.isAssignableFrom(ifc)){\n" + + "return true;\n" + + "}\n" + + "}\n" + + "return false;\n" + + "}\n" + + "\n" + + "@Override\n" + + "public java.util.Set> getImplementedServiceIntefaces() {\n" + + "return serviceIfcs;\n" + + "}\n", AbstractServiceInterface.class.getCanonicalName())); + + return result.toString(); } }