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%2FGeneratorJavaFile.java;h=1d2e60f511fc970b4ad931e521fe4cdeffba002f;hb=2f14a41bbd09010114116aef1499641f7251bf83;hp=32b3fa03eb0814e8a3902a63e7c4e370652818da;hpb=184e4f61d034f6c83da75de288d4f56ec48f60bf;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/GeneratorJavaFile.java b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorJavaFile.java index 32b3fa03eb..1d2e60f511 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorJavaFile.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorJavaFile.java @@ -7,147 +7,129 @@ */ package org.opendaylight.controller.sal.java.api.generator; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; +import java.io.*; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; -import org.opendaylight.controller.sal.binding.model.api.CodeGenerator; -import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject; -import org.opendaylight.controller.sal.binding.model.api.GeneratedType; +import org.opendaylight.controller.sal.binding.model.api.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -public class GeneratorJavaFile { +public final class GeneratorJavaFile { + private static final Logger log = LoggerFactory.getLogger(GeneratorJavaFile.class); private final CodeGenerator interfaceGenerator; private final ClassCodeGenerator classGenerator; - private final Set types; + private final EnumGenerator enumGenerator; + private final BuilderGenerator builderGenerator; + + private final Set genTypes; private final Set genTransferObjects; + private final Set enumerations; - public GeneratorJavaFile(final CodeGenerator codeGenerator, - final Set types) { + public GeneratorJavaFile(final CodeGenerator codeGenerator, final Set types) { this.interfaceGenerator = codeGenerator; - this.types = types; - this.genTransferObjects = new HashSet(); - classGenerator = new ClassCodeGenerator(); + this.genTypes = types; + this.genTransferObjects = new HashSet<>(); + this.enumerations = new HashSet<>(); + this.classGenerator = new ClassCodeGenerator(); + this.enumGenerator = new EnumGenerator(); + this.builderGenerator = new BuilderGenerator(); } - public GeneratorJavaFile(final Set types, - final Set genTransferObjects) { + public GeneratorJavaFile(final Set types, final Set genTransferObjects, + final Set enumerations) { this.interfaceGenerator = new InterfaceGenerator(); this.classGenerator = new ClassCodeGenerator(); - this.types = types; + this.enumGenerator = new EnumGenerator(); + this.builderGenerator = new BuilderGenerator(); + + this.genTypes = types; this.genTransferObjects = genTransferObjects; + this.enumerations = enumerations; } - public boolean generateToFile() { - return generateToFile(null); - } + public List generateToFile(final File parentDirectory) throws IOException { + final List result = new ArrayList<>(); + for (GeneratedType type : genTypes) { + final File genFile = generateTypeToJavaFile(parentDirectory, type, interfaceGenerator, ""); + final File genBuilderFile = generateTypeToJavaFile(parentDirectory, type, builderGenerator, + BuilderGenerator.FILE_NAME_SUFFIX); - public boolean generateToFile(String path) { - try { - for (GeneratedType type : types) { - String parentPath = generateParentPath(path, - type.getPackageName()); - - File file = new File(parentPath, type.getName() + ".java"); - File parent = file.getParentFile(); - if (!parent.exists()) { - parent.mkdirs(); - } - - if (!file.exists()) { - FileWriter fw = null; - BufferedWriter bw = null; - - file.createNewFile(); - fw = new FileWriter(file); - bw = new BufferedWriter(fw); - Writer writer = interfaceGenerator.generate(type); - bw.write(writer.toString()); - - if (bw != null) { - try { - bw.close(); - } catch (IOException e) { - // TODO: log? - } - } - } + if (genFile != null) { + result.add(genFile); } - for (GeneratedTransferObject transferObject : genTransferObjects) { - String parentPath = generateParentPath(path, - transferObject.getPackageName()); - - File file = new File(parentPath, transferObject.getName() + ".java"); - File parent = file.getParentFile(); - if (!parent.exists()) { - parent.mkdirs(); - } - - if (!file.exists()) { - FileWriter fw = null; - BufferedWriter bw = null; - - file.createNewFile(); - fw = new FileWriter(file); - bw = new BufferedWriter(fw); - Writer writer = classGenerator.generate(transferObject); - bw.write(writer.toString()); - - if (bw != null) { - try { - bw.close(); - } catch (IOException e) { - // TODO: log? - } - } - } + if (genBuilderFile != null) { + result.add(genBuilderFile); } - return true; - } catch (IOException e) { - // TODO: log? - return false; } - } + for (GeneratedTransferObject transferObject : genTransferObjects) { + final File genFile = generateTypeToJavaFile(parentDirectory, transferObject, classGenerator, ""); - private String generateParentPath(String path, String pkg) { - List dirs = new ArrayList(); - String pkgPath = ""; - if (pkg != null) { - if (pkg.length() > 0) { - if (pkg.contains(".")) { - String[] split = pkg.split("\\."); - for (String dir : split) { - dirs.add(dir); - } - } else { - dirs.add(pkg); - } - for (int i = 0; i < dirs.size(); i++) { - if (i == 0) { - pkgPath += dirs.get(i); - } else { - pkgPath += File.separator + dirs.get(i); - } - } + if (genFile != null) { + result.add(genFile); } } - String fullPath = ""; - if (path != null) { - if (path.endsWith(File.separator)) { - fullPath = path + pkgPath; - } else { - fullPath = path + File.separator + pkgPath; + + for (Enumeration enumeration : enumerations) { + final File genFile = generateTypeToJavaFile(parentDirectory, enumeration, enumGenerator, ""); + + if (genFile != null) { + result.add(genFile); + } + } + + return result; + } + + private File generateTypeToJavaFile(final File parentDir, final Type type, final CodeGenerator generator, String fileNameSuffix) + throws IOException { + if (parentDir == null) { + log.warn("Parent Directory not specified, files will be generated " + + "accordingly to generated Type package path."); + } + if (type == null) { + log.error("Cannot generate Type into Java File because " + "Generated Type is NULL!"); + throw new IllegalArgumentException("Generated Type Cannot be NULL!"); + } + if (generator == null) { + log.error("Cannot generate Type into Java File because " + "Code Generator instance is NULL!"); + throw new IllegalArgumentException("Code Generator Cannot be NULL!"); + } + final File packageDir = packageToDirectory(parentDir, type.getPackageName()); + + if (!packageDir.exists()) { + packageDir.mkdirs(); + } + final File file = new File(packageDir, type.getName() + fileNameSuffix + ".java"); + try (final FileWriter fw = new FileWriter(file)) { + file.createNewFile(); + + try (final BufferedWriter bw = new BufferedWriter(fw)) { + Writer writer = generator.generate(type); + bw.write(writer.toString()); } - } else { - fullPath = pkgPath; + } catch (IOException e) { + log.error(e.getMessage()); + throw new IOException(e.getMessage()); } - return fullPath; + return file; } + private File packageToDirectory(final File parentDirectory, final String packageName) { + if (packageName == null) { + throw new IllegalArgumentException("Package Name cannot be NULL!"); + } + + final String[] subDirNames = packageName.split("\\."); + final StringBuilder dirPathBuilder = new StringBuilder(); + dirPathBuilder.append(subDirNames[0]); + for (int i = 1; i < subDirNames.length; ++i) { + dirPathBuilder.append(File.separator); + dirPathBuilder.append(subDirNames[i]); + } + return new File(parentDirectory, dirPathBuilder.toString()); + } }