Binding generator v2 - Namespace - Typedef package name fix 91/59191/2
authorJie Han <han.jie@zte.com.cn>
Fri, 16 Jun 2017 09:37:05 +0000 (17:37 +0800)
committerMartin Ciglan <martin.ciglan@pantheon.tech>
Mon, 19 Jun 2017 20:48:56 +0000 (20:48 +0000)
- add namespace to typedef type package name:
  bits, unions, enumerations
Change-Id: Ifabac091c59e44780cdde34a18b6790c3b046d69
Signed-off-by: Jie Han <han.jie@zte.com.cn>
(cherry picked from commit e56ee666d5d3a0983b15bb681d9f25db326aad43)

binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeGenHelper.java
binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeProviderImpl.java
binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/BindingGeneratorUtil.java

index 081cad3fcc5e1f4ec256864c5ce1dd8a5c2757a5..bb9da5da3911a1696343795ec270716aec5a9f1c 100644 (file)
@@ -444,8 +444,17 @@ final class TypeGenHelper {
                 "Local Name in EnumTypeDefinition QName cannot be NULL!");
         final Module module = findParentModule(schemaContext, parentNode);
         final String basePackageName = BindingMapping.getRootPackageName(module);
+        final String packageName;
 
-        final EnumerationBuilderImpl enumBuilder = new EnumerationBuilderImpl(basePackageName, enumName);
+        if (parentNode instanceof TypeDefinition) {
+            packageName = BindingGeneratorUtil.packageNameWithNamespacePrefix(
+                    BindingMapping.getRootPackageName(module),
+                    BindingNamespaceType.Typedef);
+        } else {
+            packageName = basePackageName;
+        }
+
+        final EnumerationBuilderImpl enumBuilder = new EnumerationBuilderImpl(packageName, enumName);
         final String enumTypedefDescription = encodeAngleBrackets(enumTypeDef.getDescription());
         enumBuilder.setDescription(enumTypedefDescription);
         enumBuilder.setReference(enumTypeDef.getReference());
@@ -467,13 +476,10 @@ final class TypeGenHelper {
      */
     @SuppressWarnings({ "unchecked", "rawtypes" })
     private static GeneratedTOBuilderImpl typedefToTransferObject(final String basePackageName, final TypeDefinition<?> typedef, final String moduleName) {
-
-        final String packageName = BindingGeneratorUtil.packageNameForGeneratedType(basePackageName, typedef.getPath
-                (), BindingNamespaceType.Typedef);
         final String typeDefTOName = typedef.getQName().getLocalName();
 
-        if ((packageName != null) && (typeDefTOName != null)) {
-            final GeneratedTOBuilderImpl newType = new GeneratedTOBuilderImpl(packageName, typeDefTOName);
+        if ((basePackageName != null) && (typeDefTOName != null)) {
+            final GeneratedTOBuilderImpl newType = new GeneratedTOBuilderImpl(basePackageName, typeDefTOName);
             final String typedefDescription = encodeAngleBrackets(typedef.getDescription());
 
             newType.setDescription(typedefDescription);
index dd248e8c3e0ce6c664a08b464dc475fe67fd0337..c625401f9b2176146d20027e0e4a6f6cffc2b5fc 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.mdsal.binding.javav2.generator.yang.types;
 
 import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil.encodeAngleBrackets;
+import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil.packageNameWithNamespacePrefix;
 import static org.opendaylight.mdsal.binding.javav2.generator.util.Types.getOuterClassPackageName;
 import static org.opendaylight.mdsal.binding.javav2.generator.yang.types.TypeGenHelper.addStringRegExAsConstant;
 import static org.opendaylight.mdsal.binding.javav2.generator.yang.types.TypeGenHelper.baseTypeDefForExtendedType;
@@ -206,7 +207,8 @@ public final class TypeProviderImpl implements TypeProvider {
         }
 
         modulesSortedByDependency.stream().filter(module -> module != null).forEach(module -> {
-            final String basePackageName = getRootPackageName(module);
+            final String basePackageName = packageNameWithNamespacePrefix(getRootPackageName(module),
+                    BindingNamespaceType.Typedef);
             final List<TypeDefinition<?>> typeDefinitions = getAllTypedefs(module);
             final List<TypeDefinition<?>> listTypeDefinitions = sortTypeDefinitionAccordingDepth(typeDefinitions);
             if (listTypeDefinitions != null) {
@@ -365,16 +367,12 @@ public final class TypeProviderImpl implements TypeProvider {
         final Module module = findParentModule(schemaContext, parentNode);
 
         final GeneratedTOBuilderImpl unionGenTOBuilder;
-        if (typeDefName != null && !typeDefName.isEmpty()) {
-            unionGenTOBuilder = new GeneratedTOBuilderImpl(basePackageName, typeDefName, true, false);
-            final String typedefDescription = encodeAngleBrackets(typedef.getDescription());
-            unionGenTOBuilder.setDescription(typedefDescription);
-            unionGenTOBuilder.setReference(typedef.getReference());
-            unionGenTOBuilder.setSchemaPath((List) typedef.getPath().getPathFromRoot());
-            unionGenTOBuilder.setModuleName(module.getName());
-        } else {
-            unionGenTOBuilder = typedefToTransferObject(basePackageName, typedef, module.getName());
-        }
+        unionGenTOBuilder = new GeneratedTOBuilderImpl(basePackageName, typeDefName, true, false);
+        final String typedefDescription = encodeAngleBrackets(typedef.getDescription());
+        unionGenTOBuilder.setDescription(typedefDescription);
+        unionGenTOBuilder.setReference(typedef.getReference());
+        unionGenTOBuilder.setSchemaPath((List) typedef.getPath().getPathFromRoot());
+        unionGenTOBuilder.setModuleName(module.getName());
 
         generatedTOBuilders.add(unionGenTOBuilder);
         unionGenTOBuilder.setIsUnion(true);
index 0eb0124bbf144e7f712a16d0951a2d9968b37035..62636ac49f19ad050442f449d1c4264db4358ef8 100644 (file)
@@ -181,6 +181,30 @@ public final class BindingGeneratorUtil {
         return generateNormalizedPackageName(basePackageName, pathFromRoot, size, namespaceType);
     }
 
+    /**
+     * Creates package name from specified <code>basePackageName</code> (package
+     * name for module) and <code>namespaceType</code>.
+     *
+     * Resulting package name is concatenation of <code>basePackageName</code>
+     * and prefix of <code>namespaceType</code>.
+     *
+     * @param basePackageName
+     *            string with package name of the module, MUST be normalized,
+     *            otherwise this method may return an invalid string.
+     * @param namespaceType
+     *            the namespace to which the module belongs
+     * @return string with valid JAVA package name
+     * @throws NullPointerException if any of the arguments are null
+     */
+    public static String packageNameWithNamespacePrefix(final String basePackageName, final
+    BindingNamespaceType namespaceType) {
+        final StringBuilder sb = new StringBuilder();
+        sb.append(basePackageName)
+                .append('.')
+                .append(namespaceType.getPackagePrefix());
+        return JavaIdentifierNormalizer.normalizeFullPackageName(sb.toString());
+    }
+
     public static Restrictions getRestrictions(final TypeDefinition<?> type) {
         if ((type == null) || (type.getBaseType() == null)) {
             if (type instanceof DecimalTypeDefinition) {