BUG-4638: fix typedef types
[controller.git] / opendaylight / config / yang-jmx-generator / src / main / java / org / opendaylight / controller / config / yangjmxgenerator / TypeProviderWrapper.java
index 764ecd38868c7b224c1c8e0065d7989f8126fa37..fd19f7e38c2f5324000072afc5fd9c28c65d299d 100644 (file)
@@ -7,37 +7,75 @@
  */
 package org.opendaylight.controller.config.yangjmxgenerator;
 
+import org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil;
 import org.opendaylight.yangtools.sal.binding.generator.spi.TypeProvider;
 import org.opendaylight.yangtools.sal.binding.model.api.Type;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+import org.opendaylight.yangtools.yang.model.util.type.CompatUtils;
 
 public class TypeProviderWrapper {
     private final TypeProvider typeProvider;
 
-    public TypeProviderWrapper(TypeProvider typeProvider) {
+    public TypeProviderWrapper(final TypeProvider typeProvider) {
         this.typeProvider = typeProvider;
     }
 
-    public Type getType(LeafSchemaNode leaf) {
-        TypeDefinition<?> type = leaf.getType();
+    /**
+     * For input node, find if it contains config:java-name-prefix extension. If
+     * not found, convert local name of node converted to cammel case.
+     */
+    public static String findJavaNamePrefix(final SchemaNode schemaNode) {
+        return convertToJavaName(schemaNode, true);
+    }
+
+    public static String findJavaParameter(final SchemaNode schemaNode) {
+        return convertToJavaName(schemaNode, false);
+    }
+
+    public static String convertToJavaName(final SchemaNode schemaNode,
+                                           final boolean capitalizeFirstLetter) {
+        for (UnknownSchemaNode unknownNode : schemaNode.getUnknownSchemaNodes()) {
+            if (ConfigConstants.JAVA_NAME_PREFIX_EXTENSION_QNAME
+                    .equals(unknownNode.getNodeType())) {
+                String value = unknownNode.getNodeParameter();
+                return convertToJavaName(value, capitalizeFirstLetter);
+            }
+        }
+        return convertToJavaName(schemaNode.getQName().getLocalName(),
+                capitalizeFirstLetter);
+    }
+
+    public static String convertToJavaName(final String localName,
+                                           final boolean capitalizeFirstLetter) {
+        if (capitalizeFirstLetter) {
+            return BindingGeneratorUtil.parseToClassName(localName);
+        } else {
+            return BindingGeneratorUtil.parseToValidParamName(localName);
+        }
+    }
+
+    public Type getType(final LeafSchemaNode leaf) {
+        TypeDefinition<?> type = CompatUtils.compatLeafType(leaf);
         return getType(leaf, type);
     }
 
-    public String getDefault(LeafSchemaNode node) {
+    public String getDefault(final LeafSchemaNode node) {
         return typeProvider.getTypeDefaultConstruction(node);
     }
 
-    public Type getType(SchemaNode leaf, TypeDefinition<?> type) {
+    public Type getType(final SchemaNode leaf, final TypeDefinition<?> type) {
         Type javaType;
         try {
             javaType = typeProvider.javaTypeForSchemaDefinitionType(
                     type, leaf);
-            if (javaType == null)
+            if (javaType == null) {
                 throw new IllegalArgumentException("Unknown type received for "
                         + leaf.toString());
+            }
         } catch (IllegalArgumentException e) {
             throw new IllegalArgumentException("Error while resolving type of "
                     + leaf, e);
@@ -46,14 +84,15 @@ public class TypeProviderWrapper {
     }
 
     // there is no getType in common interface
-    public Type getType(LeafListSchemaNode leaf) {
+    public Type getType(final LeafListSchemaNode leaf) {
         Type javaType;
         try {
             javaType = typeProvider.javaTypeForSchemaDefinitionType(
                     leaf.getType(), leaf);
-            if (javaType == null)
+            if (javaType == null) {
                 throw new IllegalArgumentException(
                         "Unknown type received for  " + leaf.toString());
+            }
         } catch (IllegalArgumentException e) {
             throw new IllegalArgumentException("Error while resolving type of "
                     + leaf, e);
@@ -61,7 +100,11 @@ public class TypeProviderWrapper {
         return javaType;
     }
 
-    public String getJMXParamForBaseType(TypeDefinition<?> baseType) {
+    public String getJMXParamForBaseType(final TypeDefinition<?> baseType) {
         return typeProvider.getConstructorPropertyName(baseType);
     }
+
+    public String getJMXParamForUnionInnerType(final TypeDefinition<?> unionInnerType) {
+        return typeProvider.getParamNameFromType(unionInnerType);
+    }
 }