X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fbinding-java-api-generator%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fjava%2Fapi%2Fgenerator%2FClassCodeGenerator.java;h=31b94a65cad703d8b78ca79c8fbaf94f62ea7f70;hb=82d16e9b6ada116bfcf1e6920aaf7d23e6b0ffe5;hp=6c8f9de0d423b7f2adcc12a2ca839859e3dad3c1;hpb=4171f99c226775c4646ad95f5484329eafb9c01d;p=controller.git diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/ClassCodeGenerator.java b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/ClassCodeGenerator.java index 6c8f9de0d4..31b94a65ca 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/ClassCodeGenerator.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/ClassCodeGenerator.java @@ -7,72 +7,132 @@ */ package org.opendaylight.controller.sal.java.api.generator; -import static org.opendaylight.controller.sal.java.api.generator.Constants.NL; -import static org.opendaylight.controller.sal.java.api.generator.Constants.RCB; -import static org.opendaylight.controller.sal.java.api.generator.Constants.TAB; +import static org.opendaylight.controller.sal.java.api.generator.Constants.*; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; 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.GeneratedProperty; -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 class ClassCodeGenerator implements CodeGenerator { +public final class ClassCodeGenerator implements CodeGenerator { + + private Map 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 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 fields = genTO.getProperties(); + final List enums = genTO.getEnumerations(); + final List 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; - final List fields = genTO.getProperties(); + imports = GeneratorUtil.createImports(genTO); - writer.write(GeneratorUtil.createClassDeclarationWithPkgName(genTO, - "")); - writer.write(NL); - writer.write(NL); + final String currentPkg = genTO.getPackageName(); - if (fields != null) { - for (GeneratedProperty field : fields) { - writer.write(GeneratorUtil.createField(field, TAB) + NL); - } - writer.write(NL); - writer.write(GeneratorUtil.createConstructor(genTO, TAB) + NL); - writer.write(NL); - for (GeneratedProperty field : fields) { - writer.write(GeneratorUtil.createGetter(field, TAB) + NL); - if (!field.isReadOnly()) { - writer.write(GeneratorUtil.createSetter(field, TAB) + 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); + generatePackage(writer, currentPkg); + + generateImports(writer); + + generateClassBody(writer, genTO, currentPkg, NO_INDENT, false); - } - - writer.write(RCB); - } } return writer; } + public Writer generateOnlyClass(Type type, Map 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; + } }