From: Jie Han Date: Wed, 21 Jun 2017 06:27:02 +0000 (+0800) Subject: Binding generator v2 - namespace fix #1 X-Git-Tag: release/carbon-sr1~6 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=mdsal.git;a=commitdiff_plain;h=d4a4748724a9c7adc4c70518333877262f3d7bce Binding generator v2 - namespace fix #1 - put builders to dto package - add test yang - fix merge conflicts TODO #2 - fix namespace of data type in grouping namespace - add "Grouping" suffix for grouping type name & "Data" for data type name #3 - support generate type from uses grouping Change-Id: Iac9fb8f76c8308860f166019d47b8849fb41f95e ChangeId: I08aa15ebdc6ebefb5aa38869d9fb04bfe9664ee9 Signed-off-by: Jie Han (cherry picked from commit 8d45e9e792a02e5aba4cef141f4df3955b21a378) --- diff --git a/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/GeneratedTypeForBuilder.java b/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/GeneratedTypeForBuilder.java new file mode 100644 index 0000000000..ff1a2e22e1 --- /dev/null +++ b/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/GeneratedTypeForBuilder.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.javav2.model.api; + +import com.google.common.annotations.Beta; + +/** + * Java interface for builders to get package name and so on. + */ +@Beta +public interface GeneratedTypeForBuilder { + /** + * Returns name of the package that builder class belongs to. + * + * @return name of the package that builder class belongs to + */ + String getPackageNameForBuilder(); + +} diff --git a/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/type/builder/GeneratedTypeBuilderBase.java b/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/type/builder/GeneratedTypeBuilderBase.java index 65b217b6f3..deba64cabe 100644 --- a/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/type/builder/GeneratedTypeBuilderBase.java +++ b/binding2/mdsal-binding2-generator-api/src/main/java/org/opendaylight/mdsal/binding/javav2/model/api/type/builder/GeneratedTypeBuilderBase.java @@ -209,6 +209,15 @@ public interface GeneratedTypeBuilderBase> */ void setModuleName(String moduleName); + /** + * Set the base package name of the module, used to generate package name for + * builders by reusing the original package name. + * + * @param basePackageName + * the base package name of the module + */ + void setBasePackageName(String basePackageName); + /** * Set a list of QNames which represent schema path in schema tree from * actual concrete type to the root. diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java index 4ca6c01b6a..220c7b6b4a 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java @@ -154,7 +154,7 @@ final class GenHelperUtil { moduleBuilder.setDescription(createDescription(module, verboseClassComments)); moduleBuilder.setReference(module.getReference()); moduleBuilder.setModuleName(moduleName); - + moduleBuilder.setBasePackageName(packageName); return moduleBuilder; } @@ -320,6 +320,7 @@ final class GenHelperUtil { augTypeBuilder.addImplementsType(BindingTypes.TREE_NODE); augTypeBuilder.addImplementsType(parameterizedTypeFor(BindingTypes.INSTANTIABLE, augTypeBuilder)); augTypeBuilder.addImplementsType(Types.augmentationTypeFor(targetTypeRef)); + augTypeBuilder.setBasePackageName(BindingMapping.getRootPackageName(module)); annotateDeprecatedIfNecessary(augSchema.getStatus(), augTypeBuilder); //produces getters for augTypeBuilder eventually @@ -516,6 +517,7 @@ final class GenHelperUtil { newType.setReference(schemaNode.getReference()); newType.setSchemaPath((List) schemaNode.getPath().getPathFromRoot()); newType.setModuleName(module.getName()); + newType.setBasePackageName(BindingMapping.getRootPackageName(module)); if (!genTypeBuilders.containsKey(packageName)) { final Map builders = new HashMap<>(); diff --git a/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AugmentToGenTypeTest.java b/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AugmentToGenTypeTest.java index a91da673cf..b37669d56b 100644 --- a/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AugmentToGenTypeTest.java +++ b/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AugmentToGenTypeTest.java @@ -32,6 +32,7 @@ import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.build import org.opendaylight.mdsal.binding.javav2.generator.yang.types.TypeProviderImpl; import org.opendaylight.mdsal.binding.javav2.model.api.Type; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilder; +import org.opendaylight.mdsal.binding.javav2.spec.structural.Augmentable; import org.opendaylight.mdsal.binding.javav2.spec.structural.Augmentation; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; @@ -1301,6 +1302,7 @@ public class AugmentToGenTypeTest { when(module.getNamespace()).thenReturn(qnamePath.getNamespace()); final String pckgName = "test.augment.choice.cases"; final Type targetType = mock(Type.class); + when(targetType.getFullyQualifiedName()).thenReturn(Augmentable.class.getName()); final Set augmentNodes = new HashSet<>(); final ChoiceCaseNode caseNode = mock(ChoiceCaseNode.class); when(caseNode.getPath()).thenReturn(path); @@ -1364,6 +1366,7 @@ public class AugmentToGenTypeTest { when(module.getNamespace()).thenReturn(qnamePath.getNamespace()); final String pckgName = "test.augment.choice.cases"; final Type targetType = mock(Type.class); + when(targetType.getFullyQualifiedName()).thenReturn(Augmentable.class.getName()); final Set augmentNodes = new HashSet<>(); final ChoiceCaseNode caseNode = mock(ChoiceCaseNode.class); when(caseNode.getPath()).thenReturn(path); diff --git a/binding2/mdsal-binding2-generator-impl/src/test/resources/namespace/namespace-test-dto.yang b/binding2/mdsal-binding2-generator-impl/src/test/resources/namespace/namespace-test-dto.yang new file mode 100644 index 0000000000..09b8c43612 --- /dev/null +++ b/binding2/mdsal-binding2-generator-impl/src/test/resources/namespace/namespace-test-dto.yang @@ -0,0 +1,21 @@ +module namespace-test-dto { + namespace "org.test.namespace.dto"; + prefix "dto"; + revision 2017-05-19; + + container a { + container b { + leaf leaf-b { + type string; + } + } + } + + grouping c { + container d { + leaf leaf-d { + type string; + } + } + } +} \ No newline at end of file diff --git a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java index c51a4bca77..f9930624a7 100644 --- a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java +++ b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java @@ -24,6 +24,8 @@ import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTOB import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilder; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilderBase; import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.MethodSignatureBuilder; +import org.opendaylight.mdsal.binding.javav2.spec.structural.Augmentable; +import org.opendaylight.mdsal.binding.javav2.spec.structural.Augmentation; import org.opendaylight.yangtools.util.LazyCollections; @Beta @@ -41,6 +43,8 @@ abstract class AbstractGeneratedTypeBuilder