X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;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;hp=aaeec40604a61c264afef7d23e5f7111b115a1ef;hb=52df0e555243605003ee090150cf61b53c097563;hpb=8f13b5e59fc066808cc73879f8defcb9cf3dc82a 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 aaeec40604..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 @@ -12,98 +12,127 @@ 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.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> imports; + 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(); - boolean isIdentity = type instanceof GeneratedTransferIdentityObject; if (type instanceof GeneratedTransferObject) { - GeneratedTransferObject genTO = (GeneratedTransferObject) type; + GeneratedTransferObject genTO = (GeneratedTransferObject) type; imports = GeneratorUtil.createImports(genTO); - + final String currentPkg = genTO.getPackageName(); - final List fields = genTO.getProperties(); - final List enums = genTO.getEnumDefintions(); - writer.write(GeneratorUtil.createPackageDeclaration(currentPkg)); - writer.write(NL); + generatePackage(writer, currentPkg); - List importLines = GeneratorUtil.createImportLines(imports); - for (String line : importLines) { - writer.write(line + NL); - } - writer.write(NL); + generateImports(writer); - writer.write(GeneratorUtil.createClassDeclaration(genTO, "", - imports, isIdentity)); - 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, isIdentity) + 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 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; } - }