Updated binding-generator-impl to support more extensible logic.
[mdsal.git] / code-generator / binding-java-api-generator / src / main / java / org / opendaylight / yangtools / sal / java / api / generator / GeneratorJavaFile.java
index 8f114b3536a2f54d061f7cc5e9df6a9f7e325f8e..40480ff0c42992c66fec40b1c5f83fde96a328f8 100644 (file)
@@ -22,6 +22,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.Enumeration;
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject;
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;
 import org.opendaylight.yangtools.sal.binding.model.api.Type;
+import org.opendaylight.yangtools.yang.binding.Augmentable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -29,7 +30,7 @@ public final class GeneratorJavaFile {
 
     private static final Logger log = LoggerFactory.getLogger(GeneratorJavaFile.class);
     private final CodeGenerator interfaceGenerator;
-    private final ClassGenerator classGenerator;
+    private final TOGenerator TOGenerator;
     private final EnumGenerator enumGenerator;
     private final BuilderGenerator builderGenerator;
 
@@ -42,7 +43,7 @@ public final class GeneratorJavaFile {
         this.genTypes = types;
         this.genTransferObjects = new HashSet<>();
         this.enumerations = new HashSet<>();
-        this.classGenerator = new ClassGenerator();
+        this.TOGenerator = new TOGenerator();
         this.enumGenerator = new EnumGenerator();
         this.builderGenerator = new BuilderGenerator();
     }
@@ -50,7 +51,7 @@ public final class GeneratorJavaFile {
     public GeneratorJavaFile(final Set<GeneratedType> types, final Set<GeneratedTransferObject> genTransferObjects,
             final Set<Enumeration> enumerations) {
         this.interfaceGenerator = new InterfaceGenerator();
-        this.classGenerator = new ClassGenerator();
+        this.TOGenerator = new TOGenerator();
         this.enumGenerator = new EnumGenerator();
         this.builderGenerator = new BuilderGenerator();
 
@@ -63,18 +64,22 @@ public final class GeneratorJavaFile {
         final List<File> 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);
-
+            
             if (genFile != null) {
                 result.add(genFile);
             }
-            if (genBuilderFile != null) {
-                result.add(genBuilderFile);
+            
+            if(builderGenerator.isAcceptable(type)){
+                   final File genBuilderFile = generateTypeToJavaFile(parentDirectory, type, builderGenerator,
+                           BuilderGenerator.FILE_NAME_SUFFIX);
+       
+                   if (genBuilderFile != null) {
+                       result.add(genBuilderFile);
+                   }
             }
         }
         for (GeneratedTransferObject transferObject : genTransferObjects) {
-            final File genFile = generateTypeToJavaFile(parentDirectory, transferObject, classGenerator, "");
+            final File genFile = generateTypeToJavaFile(parentDirectory, transferObject, TOGenerator, "");
 
             if (genFile != null) {
                 result.add(genFile);
@@ -125,6 +130,15 @@ public final class GeneratorJavaFile {
         }
         return file;
     }
+    
+    private boolean isAugmentableIfcImplemented(GeneratedType genType) {
+        for (Type implType : genType.getImplements()) {
+            if (implType.getFullyQualifiedName().equals(Augmentable.class.getName())) {
+                return true;
+            }
+        }
+        return false;
+    }
 
     private File packageToDirectory(final File parentDirectory, final String packageName) {
         if (packageName == null) {