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