1 package org.opendaylight.controller.config.yangjmxgenerator.plugin.gofactory;
3 import java.util.LinkedHashMap;
5 import org.opendaylight.controller.config.api.DependencyResolver;
6 import org.opendaylight.controller.config.api.ModuleIdentifier;
7 import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry;
8 import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.FullyQualifiedName;
9 import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.GeneratedObject;
10 import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.GeneratedObjectBuilder;
11 import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.JavaFileInputBuilder;
12 import org.opendaylight.controller.config.yangjmxgenerator.plugin.java.TypeName;
14 import com.google.common.base.Joiner;
15 import com.google.common.base.Optional;
17 public class ConcreteModuleGeneratedObjectFactory {
19 public GeneratedObject toGeneratedObject(ModuleMXBeanEntry mbe, Optional<String> copyright, Optional<String> header) {
20 FullyQualifiedName concreteFQN = new FullyQualifiedName(mbe.getPackageName(), mbe.getStubModuleName());
21 FullyQualifiedName abstractFQN = new FullyQualifiedName(mbe.getPackageName(), mbe.getAbstractModuleName());
22 Optional<String> classJavaDoc = Optional.fromNullable(mbe.getNullableDescription());
23 return toGeneratedObject(concreteFQN, abstractFQN, copyright, header, classJavaDoc);
26 GeneratedObject toGeneratedObject(FullyQualifiedName concreteFQN,
27 FullyQualifiedName abstractFQN,
28 Optional<String> copyright,
29 Optional<String> header,
30 Optional<String> classJavaDoc) {
31 // there are two constructors and two methods
32 JavaFileInputBuilder builder = new JavaFileInputBuilder();
33 builder.setTypeName(TypeName.classType);
34 builder.setFqn(concreteFQN);
35 builder.addExtendsFQN(abstractFQN);
37 builder.setCopyright(copyright);
38 builder.setHeader(header);
39 builder.setClassJavaDoc(classJavaDoc);
41 builder.addToBody(getNewCtor(concreteFQN));
42 builder.addToBody(getCopyCtor(concreteFQN));
43 builder.addToBody(getCustomValidationStub());
44 builder.addToBody(getCreateInstanceStub());
46 return new GeneratedObjectBuilder(builder.build()).toGeneratedObject();
49 private static String getNewCtor(FullyQualifiedName fqn) {
50 LinkedHashMap<String, String> parameters = new LinkedHashMap<>();
51 parameters.put(ModuleIdentifier.class.getCanonicalName(), "identifier");
52 parameters.put(DependencyResolver.class.getCanonicalName(), "dependencyResolver");
54 StringBuilder stringBuilder = getCtor(fqn, parameters);
55 return stringBuilder.toString();
58 private static StringBuilder getCtor(FullyQualifiedName fqn , LinkedHashMap<String, String> parameters) {
59 StringBuilder stringBuilder = new StringBuilder();
60 stringBuilder.append("public ").append(fqn.getTypeName()).append("(");
62 stringBuilder.append(Joiner.on(", ").withKeyValueSeparator(" ").join(parameters));
63 stringBuilder.append(") {\n");
64 if (parameters.isEmpty() == false) {
65 stringBuilder.append("super(");
66 stringBuilder.append(Joiner.on(", ").join(parameters.values()));
67 stringBuilder.append(");\n");
69 stringBuilder.append("}");
73 private static String getCopyCtor(final FullyQualifiedName fqn) {
74 LinkedHashMap<String, String> parameters = new LinkedHashMap<>();
75 parameters.put(ModuleIdentifier.class.getCanonicalName(), "identifier");
76 parameters.put(DependencyResolver.class.getCanonicalName(), "dependencyResolver");
77 parameters.put(fqn.toString(), "oldModule");
78 parameters.put(AutoCloseable.class.getCanonicalName(), "oldInstance");
79 StringBuilder stringBuilder = getCtor(fqn, parameters);
80 return stringBuilder.toString();
83 private static String getCustomValidationStub() {
84 return "@Override\n" +
85 "public void customValidation() {\n" +
86 "// add custom validation form module attributes here.\n" +
90 private static String getCreateInstanceStub() {
91 return "@Override\n" +
92 "public " + AutoCloseable.class.getCanonicalName() + " createInstance() {\n" +
93 "// TODO:implement\n" +
94 "throw new " + UnsupportedOperationException.class.getCanonicalName() + "();\n"+