import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import org.opendaylight.controller.sal.binding.model.api.CodeGenerator;
-import org.opendaylight.controller.sal.binding.model.api.Enumeration;
-import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty;
-import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferIdentityObject;
-import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject;
-import org.opendaylight.controller.sal.binding.model.api.Type;
+import org.opendaylight.controller.sal.binding.model.api.*;
public final class ClassCodeGenerator implements CodeGenerator {
- private Map<String, LinkedHashMap<String, Integer>> imports;
+ private Map<String, String> imports;
+
+ private void generatePackage(Writer writer, String packageName) throws IOException {
+ writer.write(GeneratorUtil.createPackageDeclaration(packageName));
+ writer.write(NL);
+ }
+
+ private void generateImports(Writer writer) throws IOException {
+ List<String> importLines = GeneratorUtil.createImportLines(imports, null);
+ for (String line : importLines) {
+ writer.write(line + NL);
+ }
+ writer.write(NL);
+ }
+
+ private void generateClassBody(Writer writer, GeneratedTransferObject genTO, String packageName, String indent,
+ boolean isInnerClass) throws IOException {
+ final List<GeneratedProperty> fields = genTO.getProperties();
+ final List<Enumeration> enums = genTO.getEnumerations();
+ final List<Constant> consts = genTO.getConstantDefinitions();
+
+ writer.write(GeneratorUtil.createClassDeclaration(genTO, indent, imports, genTO.isAbstract(), isInnerClass));
+ writer.write(NL);
+ writer.write(NL);
+
+ if (consts != null) {
+ for (Constant con : consts) {
+ writer.write(GeneratorUtil.createConstant(con, indent + TAB, imports, packageName));
+ writer.write(NL);
+ }
+ }
+
+ if (enums != null) {
+ EnumGenerator enumGenerator = new EnumGenerator();
+ for (Enumeration e : enums) {
+ writer.write(enumGenerator.generateInnerEnumeration(e, indent + TAB).toString());
+ writer.write(NL);
+ }
+ }
+
+ writer.write(GeneratorUtil.createStaticInicializationBlock(genTO, indent + TAB));
+
+ if (fields != null) {
+ for (GeneratedProperty field : fields) {
+ writer.write(GeneratorUtil.createField(field, indent + TAB, imports, packageName) + NL);
+ }
+
+ writer.write(NL);
+ final boolean oneConstructor;
+ if (genTO.isUnionType()) {
+ oneConstructor = false;
+ } else {
+ oneConstructor = true;
+ }
+ writer.write(GeneratorUtil.createConstructor(genTO, indent + TAB, imports, genTO.isAbstract(),
+ oneConstructor));
+ writer.write(NL);
+
+ for (GeneratedProperty field : fields) {
+ writer.write(GeneratorUtil.createGetter(field, indent + TAB, imports, packageName) + NL);
+ if (!field.isReadOnly()) {
+ writer.write(GeneratorUtil.createSetter(field, indent + TAB, imports, packageName) + NL);
+ }
+ }
+
+ if (!genTO.getHashCodeIdentifiers().isEmpty()) {
+ writer.write(GeneratorUtil.createHashCode(genTO.getHashCodeIdentifiers(), indent + TAB) + NL);
+ }
+
+ if (!genTO.getEqualsIdentifiers().isEmpty()) {
+ writer.write(GeneratorUtil.createEquals(genTO, genTO.getEqualsIdentifiers(), indent + TAB) + NL);
+ }
+
+ if (!genTO.getToStringIdentifiers().isEmpty()) {
+ writer.write(GeneratorUtil.createToString(genTO, genTO.getToStringIdentifiers(), indent + TAB) + NL);
+ }
+
+ writer.write(indent + RCB);
+ }
+ }
@Override
public Writer generate(Type type) throws IOException {
final Writer writer = new StringWriter();
if (type instanceof GeneratedTransferObject) {
- GeneratedTransferObject genTO = (GeneratedTransferObject) type;
+ GeneratedTransferObject genTO = (GeneratedTransferObject) type;
imports = GeneratorUtil.createImports(genTO);
-
+
final String currentPkg = genTO.getPackageName();
- final List<GeneratedProperty> fields = genTO.getProperties();
- final List<Enumeration> enums = genTO.getEnumerations();
- writer.write(GeneratorUtil.createPackageDeclaration(currentPkg));
- writer.write(NL);
+ generatePackage(writer, currentPkg);
- List<String> importLines = GeneratorUtil.createImportLines(imports);
- for (String line : importLines) {
- writer.write(line + NL);
- }
- writer.write(NL);
+ generateImports(writer);
- writer.write(GeneratorUtil.createClassDeclaration(genTO, "",
- imports, genTO.isAbstract()));
- writer.write(NL);
- writer.write(NL);
-
- if (enums != null) {
- EnumGenerator enumGenerator = new EnumGenerator();
- for ( Enumeration e : enums ) {
- writer.write(enumGenerator.generateInnerEnumeration(e, TAB).toString());
- writer.write(NL);
- }
- }
+ generateClassBody(writer, genTO, currentPkg, NO_INDENT, false);
- if (fields != null) {
- for (GeneratedProperty field : fields) {
- writer.write(GeneratorUtil.createField(field, TAB, imports,
- currentPkg) + NL);
- }
- writer.write(NL);
- writer.write(GeneratorUtil.createConstructor(genTO, TAB,
- imports, genTO.isAbstract()) + NL);
- writer.write(NL);
- for (GeneratedProperty field : fields) {
- writer.write(GeneratorUtil.createGetter(field, TAB,
- imports, currentPkg) + NL);
- if (!field.isReadOnly()) {
- writer.write(GeneratorUtil.createSetter(field, TAB,
- imports, currentPkg) + NL);
- }
- }
- writer.write(NL);
+ }
+ return writer;
+ }
- if (!genTO.getHashCodeIdentifiers().isEmpty()) {
- writer.write(GeneratorUtil.createHashCode(
- genTO.getHashCodeIdentifiers(), TAB)
- + NL);
- }
+ public Writer generateOnlyClass(Type type, Map<String, String> imports) throws IOException {
+ this.imports = imports;
+ Writer writer = new StringWriter();
- if (!genTO.getEqualsIdentifiers().isEmpty()) {
- writer.write(GeneratorUtil.createEquals(genTO,
- genTO.getEqualsIdentifiers(), TAB)
- + NL);
- }
+ if (type instanceof GeneratedTransferObject) {
+ GeneratedTransferObject genTO = (GeneratedTransferObject) type;
- if (!genTO.getToStringIdentifiers().isEmpty()) {
- writer.write(GeneratorUtil.createToString(genTO,
- genTO.getToStringIdentifiers(), TAB)
- + NL);
+ final String currentPkg = "";
- }
+ generateClassBody(writer, genTO, currentPkg, TAB, true);
- writer.write(RCB);
- }
}
+
return writer;
}
-
}