From 135a5848aa950dda6998203876b1daeb89a0a1c5 Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Tue, 28 Jun 2016 17:15:26 +0200 Subject: [PATCH] Gen. Abstract*ModuleFactory with WORKING handleChangedClass() Bug: 2855 Change-Id: I243da5822265db3913f6b0afb2f9393f78b0c24c Signed-off-by: Michael Vorburger --- .../AbsFactoryGeneratedObjectFactory.java | 23 +++++++++++++++++-- .../plugin/java/GeneratedObjectBuilder.java | 12 +++++++++- .../plugin/java/JavaFileInput.java | 2 ++ .../plugin/java/JavaFileInputBuilder.java | 12 ++++++++++ 4 files changed, 46 insertions(+), 3 deletions(-) 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 b37d9186d0..3ee43a6ba8 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 @@ -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); @@ -110,8 +114,14 @@ public class AbsFactoryGeneratedObjectFactory { )); b.addToBody(format("\n"+ - "public %s handleChangedClass(%s dependencyResolver, %s old, %s bundleContext) throws Exception {\n"+ - "return handleChangedClass(old);\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"+ @@ -129,6 +139,15 @@ public class AbsFactoryGeneratedObjectFactory { 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"+ diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/GeneratedObjectBuilder.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/GeneratedObjectBuilder.java index c2aeb89c2d..13418f3a47 100644 --- a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/GeneratedObjectBuilder.java +++ b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/GeneratedObjectBuilder.java @@ -34,6 +34,17 @@ public class GeneratedObjectBuilder { content.append(input.getFQN().getPackageName()); content.append(";\n"); } + + if (!input.getImports().isEmpty()) + content.append('\n'); + for (FullyQualifiedName importedType : input.getImports()) { + content.append("import "); + content.append(importedType.toString()); + content.append(";\n"); + } + if (!input.getImports().isEmpty()) + content.append('\n'); + content.append(maybeAddComment(input.getClassJavaDoc(), true)); for (String classAnnotation : input.getClassAnnotations()) { @@ -64,7 +75,6 @@ public class GeneratedObjectBuilder { } private static String maybeAddComment(Optional comment, boolean isJavadoc) { - if (comment.isPresent()) { String input = comment.get(); return StringUtil.writeComment(input, isJavadoc); diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/JavaFileInput.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/JavaFileInput.java index 76226d0c71..085b31a2d8 100644 --- a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/JavaFileInput.java +++ b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/JavaFileInput.java @@ -19,6 +19,8 @@ public interface JavaFileInput { Optional getHeader(); + List getImports(); + TypeName getType(); Optional getClassJavaDoc(); diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/JavaFileInputBuilder.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/JavaFileInputBuilder.java index 588e218e62..c498c5bf9f 100644 --- a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/JavaFileInputBuilder.java +++ b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/java/JavaFileInputBuilder.java @@ -26,6 +26,8 @@ public class JavaFileInputBuilder { private final List classAnnotations = new ArrayList<>(); + private final List importFQNs = new ArrayList<>(); + private final List extendsFQNs = new ArrayList<>(); private final List implementsFQNs = new ArrayList<>(); @@ -44,6 +46,10 @@ public class JavaFileInputBuilder { classAnnotations.add(checkNotNull(annotation)); } + public void addImportFQN(FullyQualifiedName fqn) { + importFQNs.add(fqn); + } + public void addExtendsFQN(FullyQualifiedName fqn) { extendsFQNs.add(fqn); } @@ -129,6 +135,11 @@ public class JavaFileInputBuilder { return header; } + @Override + public List getImports() { + return Collections.unmodifiableList(importFQNs); + } + @Override public Optional getClassJavaDoc() { return classJavaDoc; @@ -158,6 +169,7 @@ public class JavaFileInputBuilder { public List getBodyElements() { return Collections.unmodifiableList(bodyElements); } + }; } } -- 2.36.6