Java builder pattern is not generated for rcp and grouping elements 06/806/1
authormsunal <msunal@cisco.com>
Tue, 6 Aug 2013 14:15:10 +0000 (16:15 +0200)
committermsunal <msunal@cisco.com>
Tue, 6 Aug 2013 14:15:10 +0000 (16:15 +0200)
- added method for checking whether generated type implements Augmentable interface.
If generated type is from rcp or grouping element then the generated type does not implement
Augmentable and java builder pattern is not generated.
- added test way that a generated type implements Augmentable into GeneratorJavaFileTest
- bugfix:
bug - javax.management.Notification import was used in generated interfaces extending Notification.
consequences - Therefore generated interfaces contained errors. javax.management.
fix - Notification was replaced by org.opendaylight.yangtools.yang.binding.Notification

Signed-off-by: Martin Sunal <msunal@cisco.com>
code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/GeneratorJavaFile.java
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/GeneratorJavaFileTest.java

index 37dd77aaa8c0f85ba5f5a5fbccbb363359b00097..5f67763d60497fadd8d34a5dfffc40ea51a5c5e4 100644 (file)
@@ -7,8 +7,13 @@
  */
 package org.opendaylight.yangtools.sal.binding.generator.impl;
 
-import static org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil.*;
-import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.*;
+import static org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil.moduleNamespaceToPackageName;
+import static org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil.packageNameForGeneratedType;
+import static org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil.parseToClassName;
+import static org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil.parseToValidParamName;
+import static org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil.schemaNodeToTransferObjectBuilder;
+import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findDataSchemaNode;
+import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findParentModule;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -19,8 +24,6 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.Future;
 
-import javax.management.Notification;
-
 import org.opendaylight.yangtools.binding.generator.util.ReferencedTypeImpl;
 import org.opendaylight.yangtools.binding.generator.util.Types;
 import org.opendaylight.yangtools.binding.generator.util.generated.type.builder.GeneratedTOBuilderImpl;
@@ -37,6 +40,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTy
 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.MethodSignatureBuilder;
 import org.opendaylight.yangtools.sal.binding.yang.types.GroupingDefinitionDependencySort;
 import org.opendaylight.yangtools.sal.binding.yang.types.TypeProviderImpl;
+import org.opendaylight.yangtools.yang.binding.Notification;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
index 8f114b3536a2f54d061f7cc5e9df6a9f7e325f8e..c3716256c2674204dd374c8da780e16ffcdd1e88 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;
 
@@ -63,14 +64,19 @@ 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 (genFile != null) {
+                result.add(genFile);
+            }
+            // "rpc" and "grouping" elements do not implement Augmentable interface
+            if (isAugmentableIfcImplemented(type)) {
+                final File genBuilderFile = generateTypeToJavaFile(parentDirectory, type, builderGenerator,
+                        BuilderGenerator.FILE_NAME_SUFFIX);
+                if (genBuilderFile != null) {
+                    result.add(genBuilderFile);
+                }
             }
         }
         for (GeneratedTransferObject transferObject : genTransferObjects) {
@@ -125,6 +131,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) {
index b2e0985708d54c6bcbf950514ebe4bdd4a94b6e4..2669573f8741af39461424280ede24354bb36720 100644 (file)
@@ -7,7 +7,8 @@
  */
 package org.opendaylight.yangtools.sal.java.api.generator.test;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 import java.io.File;
 import java.io.IOException;
@@ -26,6 +27,7 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
+import org.opendaylight.yangtools.binding.generator.util.Types;
 import org.opendaylight.yangtools.binding.generator.util.generated.type.builder.GeneratedTypeBuilderImpl;
 import org.opendaylight.yangtools.sal.binding.generator.api.BindingGenerator;
 import org.opendaylight.yangtools.sal.binding.generator.impl.BindingGeneratorImpl;
@@ -72,31 +74,33 @@ public class GeneratorJavaFileTest {
 
     @Test
     public void test() throws IOException {
-        final Set<GeneratedType> types = new HashSet<GeneratedType>();
+       final Set<GeneratedType> types = new HashSet<GeneratedType>();
         GeneratedType t1 = createGeneratedType(
-                "org.opendaylight.yangtools.gen", "Type1");
+                "org.opendaylight.controller.gen", "Type1");
         GeneratedType t2 = createGeneratedType(
-                "org.opendaylight.yangtools.gen", "Type2");
+                "org.opendaylight.controller.gen", "Type2");
         GeneratedType t3 = createGeneratedType(
-                "org.opendaylight.yangtools.gen", "Type3");
+                "org.opendaylight.controller.gen", "Type3");
         types.add(t1);
         types.add(t2);
         types.add(t3);
+        GeneratedTypeBuilder gtb = new GeneratedTypeBuilderImpl("org.opendaylight.controller.gen", "Type4");
+        gtb.addImplementsType(Types.augmentableTypeFor(gtb));
+        types.add(gtb.toInstance());
         GeneratorJavaFile generator = new GeneratorJavaFile(
                 new InterfaceGenerator(), types);
         generator.generateToFile(new File(PATH));
 
         String[] files = new File(PATH + FS + "org" + FS + "opendaylight" + FS
-                + "yangtools" + FS + "gen").list();
+                + "controller" + FS + "gen").list();
         List<String> filesList = Arrays.asList(files);
 
-        assertEquals(6, files.length);
+        assertEquals(5, files.length);
         assertTrue(filesList.contains("Type1.java"));
         assertTrue(filesList.contains("Type2.java"));
         assertTrue(filesList.contains("Type3.java"));
-        assertTrue(filesList.contains("Type1Builder.java"));
-        assertTrue(filesList.contains("Type2Builder.java"));
-        assertTrue(filesList.contains("Type3Builder.java"));
+        assertTrue(filesList.contains("Type4.java"));
+        assertTrue(filesList.contains("Type4Builder.java"));
     }
 
     @Ignore