import java.util.List;
import java.util.Map;
-import org.opendaylight.controller.binding.generator.util.TypeConstants;
import org.opendaylight.controller.sal.binding.model.api.*;
public final class ClassCodeGenerator implements CodeGenerator {
private Map<String, String> imports;
- @Override
- public Writer generate(Type type) throws IOException {
- final Writer writer = new StringWriter();
+ private void generatePackage(Writer writer, String packageName) throws IOException {
+ writer.write(GeneratorUtil.createPackageDeclaration(packageName));
+ writer.write(NL);
+ }
- if (type instanceof GeneratedTransferObject) {
- GeneratedTransferObject genTO = (GeneratedTransferObject) type;
- imports = GeneratorUtil.createImports(genTO);
+ 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);
+ }
- final String currentPkg = genTO.getPackageName();
- final List<GeneratedProperty> fields = genTO.getProperties();
- final List<Enumeration> enums = genTO.getEnumerations();
- final List<Constant> consts = genTO.getConstantDefinitions();
+ 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.createPackageDeclaration(currentPkg));
- writer.write(NL);
+ writer.write(GeneratorUtil.createClassDeclaration(genTO, indent, imports, genTO.isAbstract(), isInnerClass));
+ writer.write(NL);
+ writer.write(NL);
- List<String> importLines = GeneratorUtil.createImportLines(imports);
- for (String line : importLines) {
- writer.write(line + 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);
- writer.write(GeneratorUtil.createClassDeclaration(genTO, "", imports, genTO.isAbstract()));
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);
- if (consts != null) {
- for (Constant con : consts) {
- writer.write(GeneratorUtil.createConstant(con, TAB, imports, currentPkg));
- 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 (enums != null) {
- EnumGenerator enumGenerator = new EnumGenerator();
- for (Enumeration e : enums) {
- writer.write(enumGenerator.generateInnerEnumeration(e, TAB).toString());
- writer.write(NL);
- }
+ if (!genTO.getHashCodeIdentifiers().isEmpty()) {
+ writer.write(GeneratorUtil.createHashCode(genTO.getHashCodeIdentifiers(), indent + TAB) + NL);
}
- boolean memberPatternListCodeRequired = false;
- memberPatternListCodeRequired = (GeneratorUtil.isConstantInTO(TypeConstants.PATTERN_CONSTANT_NAME, genTO));
- if (fields != null || memberPatternListCodeRequired) {
- if (fields != null) {
- for (GeneratedProperty field : fields) {
- writer.write(GeneratorUtil.createField(field, TAB, imports, currentPkg) + NL);
- }
- }
- if (memberPatternListCodeRequired) {
- writer.write(TAB + PRIVATE + GAP + "List<Pattern>" + GAP + MEMBER_PATTERN_LIST + GAP + ASSIGN + GAP
- + "new ArrayList<Pattern>()" + GAP + SC + NL);
+ if (!genTO.getEqualsIdentifiers().isEmpty()) {
+ writer.write(GeneratorUtil.createEquals(genTO, genTO.getEqualsIdentifiers(), indent + TAB) + NL);
+ }
- }
- writer.write(NL);
- writer.write(GeneratorUtil.createConstructor(genTO, TAB, imports, genTO.isAbstract()) + NL);
- writer.write(NL);
- if (fields != null) {
- 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);
-
- if (!genTO.getHashCodeIdentifiers().isEmpty()) {
- writer.write(GeneratorUtil.createHashCode(genTO.getHashCodeIdentifiers(), TAB) + NL);
- }
-
- if (!genTO.getEqualsIdentifiers().isEmpty()) {
- writer.write(GeneratorUtil.createEquals(genTO, genTO.getEqualsIdentifiers(), TAB) + NL);
- }
-
- if (!genTO.getToStringIdentifiers().isEmpty()) {
- writer.write(GeneratorUtil.createToString(genTO, genTO.getToStringIdentifiers(), TAB) + NL);
- }
-
- writer.write(RCB);
- }
+ 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;
+ imports = GeneratorUtil.createImports(genTO);
+
+ final String currentPkg = genTO.getPackageName();
+
+ generatePackage(writer, currentPkg);
+
+ generateImports(writer);
+
+ generateClassBody(writer, genTO, currentPkg, NO_INDENT, false);
+
+ }
+ return writer;
+ }
+
+ public Writer generateOnlyClass(Type type, Map<String, String> imports) throws IOException {
+ this.imports = imports;
+ Writer writer = new StringWriter();
+
+ if (type instanceof GeneratedTransferObject) {
+ GeneratedTransferObject genTO = (GeneratedTransferObject) type;
+
+ final String currentPkg = "";
+
+ generateClassBody(writer, genTO, currentPkg, TAB, true);
+
}
+
return writer;
}
}