From: msunal Date: Tue, 6 Aug 2013 14:15:10 +0000 (+0200) Subject: Java builder pattern is not generated for rcp and grouping elements X-Git-Tag: yangtools-0.1.0~83 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=8e7ac40e5002fdbe8f0a441fa56918a14ed965de;p=yangtools.git Java builder pattern is not generated for rcp and grouping elements - 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 --- diff --git a/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java b/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java index 37dd77aaa8..5f67763d60 100644 --- a/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java +++ b/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java @@ -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; diff --git a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/GeneratorJavaFile.java b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/GeneratorJavaFile.java index 8f114b3536..c3716256c2 100644 --- a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/GeneratorJavaFile.java +++ b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/GeneratorJavaFile.java @@ -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 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) { diff --git a/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/GeneratorJavaFileTest.java b/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/GeneratorJavaFileTest.java index b2e0985708..2669573f87 100644 --- a/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/GeneratorJavaFileTest.java +++ b/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/GeneratorJavaFileTest.java @@ -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 types = new HashSet(); + final Set types = new HashSet(); 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 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