Fixed bug with mapping YANG identifiers starting with number to Java. 14/914/1
authorTony Tkacik <ttkacik@cisco.com>
Mon, 19 Aug 2013 19:38:08 +0000 (21:38 +0200)
committerTony Tkacik <ttkacik@cisco.com>
Mon, 19 Aug 2013 19:38:08 +0000 (21:38 +0200)
Signed-off-by: Tony Tkacik <ttkacik@cisco.com>
code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/BindingGeneratorUtil.java

index 6c8012891f776ff808267c50308d3dfc1c7b3df5..2c75e5d377db87593c0a55b96b080b81af3ab258 100644 (file)
-package org.opendaylight.yangtools.binding.generator.util;
-
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.opendaylight.yangtools.binding.generator.util.generated.type.builder.GeneratedTOBuilderImpl;
-import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTOBuilder;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-
-public final class BindingGeneratorUtil {
-
-    private static final String[] SET_VALUES = new String[] { "abstract", "assert", "boolean", "break", "byte", "case",
-            "catch", "char", "class", "const", "continue", "default", "double", "do", "else", "enum", "extends",
-            "false", "final", "finally", "float", "for", "goto", "if", "implements", "import", "instanceof", "int",
-            "interface", "long", "native", "new", "null", "package", "private", "protected", "public", "return",
-            "short", "static", "strictfp", "super", "switch", "synchronized", "this", "throw", "throws", "transient",
-            "true", "try", "void", "volatile", "while" };
-
-    private BindingGeneratorUtil() {
-    }
-
-    public static final Set<String> JAVA_RESERVED_WORDS = new HashSet<String>(Arrays.asList(SET_VALUES));
-
-    public static String validateJavaPackage(final String packageName) {
-        if (packageName != null) {
-            final String[] packNameParts = packageName.split("\\.");
-            if (packNameParts != null) {
-                final StringBuilder builder = new StringBuilder();
-                for (int i = 0; i < packNameParts.length; ++i) {
-                    final String packNamePart = packNameParts[i];
-                    if (Character.isDigit(packNamePart.charAt(0))) {
-                        packNameParts[i] = "_" + packNamePart;
-                    } else if (JAVA_RESERVED_WORDS.contains(packNamePart)) {
-                        packNameParts[i] = "_" + packNamePart;
-                    }
-                    if (i > 0) {
-                        builder.append(".");
-                    }
-                    builder.append(packNameParts[i]);
-                }
-                return builder.toString();
-            }
-        }
-        return packageName;
-    }
-
-    public static String validateParameterName(final String parameterName) {
-        if (parameterName != null) {
-            if (JAVA_RESERVED_WORDS.contains(parameterName)) {
-                return "_" + parameterName;
-            }
-        }
-        return parameterName;
-    }
-
-    public static GeneratedTOBuilder schemaNodeToTransferObjectBuilder(final String packageName,
-            final SchemaNode schemaNode, final String transObjectName) {
-        if (packageName != null && schemaNode != null && transObjectName != null) {
-
-            final String genTOName = BindingGeneratorUtil.parseToClassName(transObjectName);
-            final GeneratedTOBuilder newType = new GeneratedTOBuilderImpl(packageName, genTOName);
-
-            return newType;
-
-        }
-        return null;
-    }
-
-    public static String moduleNamespaceToPackageName(final Module module) {
-        final StringBuilder packageNameBuilder = new StringBuilder();
-
-        final Calendar calendar = Calendar.getInstance();
-        if (module.getRevision() == null) {
-            throw new IllegalArgumentException("Module " + module.getName() + " does not specify revision date!");
-        }
-        packageNameBuilder.append("org.opendaylight.yang.gen.v");
-        packageNameBuilder.append(module.getYangVersion());
-        packageNameBuilder.append(".");
-
-        String namespace = module.getNamespace().toString();
-        namespace = namespace.replace("://", ".");
-        namespace = namespace.replace("/", ".");
-        namespace = namespace.replace(":", ".");
-        namespace = namespace.replace("-", ".");
-        namespace = namespace.replace("@", ".");
-        namespace = namespace.replace("$", ".");
-        namespace = namespace.replace("#", ".");
-        namespace = namespace.replace("'", ".");
-        namespace = namespace.replace("*", ".");
-        namespace = namespace.replace("+", ".");
-        namespace = namespace.replace(",", ".");
-        namespace = namespace.replace(";", ".");
-        namespace = namespace.replace("=", ".");
-
-        packageNameBuilder.append(namespace);
-        calendar.setTime(module.getRevision());
-        packageNameBuilder.append(".rev");
-        packageNameBuilder.append(calendar.get(Calendar.YEAR));
-        packageNameBuilder.append((calendar.get(Calendar.MONTH) + 1));
-        packageNameBuilder.append(calendar.get(Calendar.DAY_OF_MONTH));
-
-        return validateJavaPackage(packageNameBuilder.toString());
-    }
-
-    public static String packageNameForGeneratedType(final String basePackageName, final SchemaPath schemaPath) {
-        if (basePackageName == null) {
-            throw new IllegalArgumentException("Base Package Name cannot be NULL!");
-        }
-        if (schemaPath == null) {
-            throw new IllegalArgumentException("Schema Path cannot be NULL!");
-        }
-
-        final StringBuilder builder = new StringBuilder();
-        builder.append(basePackageName);
-        final List<QName> pathToNode = schemaPath.getPath();
-        final int traversalSteps = (pathToNode.size() - 1);
-        for (int i = 0; i < traversalSteps; ++i) {
-            builder.append(".");
-            String nodeLocalName = pathToNode.get(i).getLocalName();
-
-            nodeLocalName = nodeLocalName.replace(":", ".");
-            nodeLocalName = nodeLocalName.replace("-", ".");
-            builder.append(nodeLocalName);
-        }
-        return validateJavaPackage(builder.toString());
-    }
-
-    public static String packageNameForTypeDefinition(final String basePackageName,
-            final TypeDefinition<?> typeDefinition) {
-        if (basePackageName == null) {
-            throw new IllegalArgumentException("Base Package Name cannot be NULL!");
-        }
-        if (typeDefinition == null) {
-            throw new IllegalArgumentException("Type Definition reference cannot be NULL!");
-        }
-
-        final StringBuilder builder = new StringBuilder();
-        builder.append(basePackageName);
-        return validateJavaPackage(builder.toString());
-    }
-
-    public static String parseToClassName(String token) {
-        token = token.replace(".", "");
-        String correctStr = parseToCamelCase(token);
-
-        // make first char upper-case
-        char first = Character.toUpperCase(correctStr.charAt(0));
-        correctStr = first + correctStr.substring(1);
-        return correctStr;
-    }
-
-    public static String parseToValidParamName(final String token) {
-        final String validToken = token.replace(".", "");
-        String correctStr = parseToCamelCase(validToken);
-
-        // make first char lower-case
-        char first = Character.toLowerCase(correctStr.charAt(0));
-        correctStr = first + correctStr.substring(1);
-        return validateParameterName(correctStr);
-    }
-
-    public static String convertToCapitalLetters(final String token) {
-        String convertedStr = token.replace(" ", "_");
-        convertedStr = convertedStr.replace(".", "_");
-        convertedStr = convertedStr.toUpperCase();
-        return convertedStr;
-    }
-
-    private static String parseToCamelCase(String token) {
-        if (token == null) {
-            throw new NullPointerException("Name can not be null");
-        }
-
-        String correctStr = token.trim();
-        if (correctStr.length() == 0) {
-            throw new IllegalArgumentException("Name can not be emty");
-        }
-
-        correctStr = replaceWithCamelCase(correctStr, ' ');
-        correctStr = replaceWithCamelCase(correctStr, '-');
-        correctStr = replaceWithCamelCase(correctStr, '_');
-        return correctStr;
-    }
-
-    private static String replaceWithCamelCase(String text, char removalChar) {
-        StringBuilder sb = new StringBuilder(text);
-        String toBeRemoved = String.valueOf(removalChar);
-
-        int toBeRemovedPos = sb.indexOf(toBeRemoved);
-        while (toBeRemovedPos != -1) {
-            sb.replace(toBeRemovedPos, toBeRemovedPos + 1, "");
-            // check if 'toBeRemoved' character is not the only character in
-            // 'text'
-            if (sb.length() == 0) {
-                throw new IllegalArgumentException("Name can not be '" + toBeRemoved + "'");
-            }
-            String replacement = String.valueOf(sb.charAt(toBeRemovedPos)).toUpperCase();
-            sb.setCharAt(toBeRemovedPos, replacement.charAt(0));
-            toBeRemovedPos = sb.indexOf(toBeRemoved);
-        }
-        return sb.toString();
-    }
-}
+package org.opendaylight.yangtools.binding.generator.util;\r
+\r
+import java.util.Arrays;\r
+import java.util.Calendar;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.opendaylight.yangtools.binding.generator.util.generated.type.builder.GeneratedTOBuilderImpl;\r
+import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTOBuilder;\r
+import org.opendaylight.yangtools.yang.common.QName;\r
+import org.opendaylight.yangtools.yang.model.api.Module;\r
+import org.opendaylight.yangtools.yang.model.api.SchemaNode;\r
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;\r
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;\r
+\r
+public final class BindingGeneratorUtil {\r
+\r
+    private static final String[] SET_VALUES = new String[] { "abstract", "assert", "boolean", "break", "byte", "case",\r
+            "catch", "char", "class", "const", "continue", "default", "double", "do", "else", "enum", "extends",\r
+            "false", "final", "finally", "float", "for", "goto", "if", "implements", "import", "instanceof", "int",\r
+            "interface", "long", "native", "new", "null", "package", "private", "protected", "public", "return",\r
+            "short", "static", "strictfp", "super", "switch", "synchronized", "this", "throw", "throws", "transient",\r
+            "true", "try", "void", "volatile", "while" };\r
+\r
+    private BindingGeneratorUtil() {\r
+    }\r
+\r
+    public static final Set<String> JAVA_RESERVED_WORDS = new HashSet<String>(Arrays.asList(SET_VALUES));\r
+\r
+    public static String validateJavaPackage(final String packageName) {\r
+        if (packageName != null) {\r
+            final String[] packNameParts = packageName.split("\\.");\r
+            if (packNameParts != null) {\r
+                final StringBuilder builder = new StringBuilder();\r
+                for (int i = 0; i < packNameParts.length; ++i) {\r
+                    final String packNamePart = packNameParts[i];\r
+                    if (Character.isDigit(packNamePart.charAt(0))) {\r
+                        packNameParts[i] = "_" + packNamePart;\r
+                    } else if (JAVA_RESERVED_WORDS.contains(packNamePart)) {\r
+                        packNameParts[i] = "_" + packNamePart;\r
+                    }\r
+                    if (i > 0) {\r
+                        builder.append(".");\r
+                    }\r
+                    builder.append(packNameParts[i]);\r
+                }\r
+                return builder.toString();\r
+            }\r
+        }\r
+        return packageName;\r
+    }\r
+\r
+    public static String validateParameterName(final String parameterName) {\r
+        if (parameterName != null) {\r
+            if (JAVA_RESERVED_WORDS.contains(parameterName)) {\r
+                return "_" + parameterName;\r
+            }\r
+        }\r
+        return parameterName;\r
+    }\r
+\r
+    public static GeneratedTOBuilder schemaNodeToTransferObjectBuilder(final String packageName,\r
+            final SchemaNode schemaNode, final String transObjectName) {\r
+        if (packageName != null && schemaNode != null && transObjectName != null) {\r
+\r
+            final String genTOName = BindingGeneratorUtil.parseToClassName(transObjectName);\r
+            final GeneratedTOBuilder newType = new GeneratedTOBuilderImpl(packageName, genTOName);\r
+\r
+            return newType;\r
+\r
+        }\r
+        return null;\r
+    }\r
+\r
+    public static String moduleNamespaceToPackageName(final Module module) {\r
+        final StringBuilder packageNameBuilder = new StringBuilder();\r
+\r
+        final Calendar calendar = Calendar.getInstance();\r
+        if (module.getRevision() == null) {\r
+            throw new IllegalArgumentException("Module " + module.getName() + " does not specify revision date!");\r
+        }\r
+        packageNameBuilder.append("org.opendaylight.yang.gen.v");\r
+        packageNameBuilder.append(module.getYangVersion());\r
+        packageNameBuilder.append(".");\r
+\r
+        String namespace = module.getNamespace().toString();\r
+        namespace = namespace.replace("://", ".");\r
+        namespace = namespace.replace("/", ".");\r
+        namespace = namespace.replace(":", ".");\r
+        namespace = namespace.replace("-", ".");\r
+        namespace = namespace.replace("@", ".");\r
+        namespace = namespace.replace("$", ".");\r
+        namespace = namespace.replace("#", ".");\r
+        namespace = namespace.replace("'", ".");\r
+        namespace = namespace.replace("*", ".");\r
+        namespace = namespace.replace("+", ".");\r
+        namespace = namespace.replace(",", ".");\r
+        namespace = namespace.replace(";", ".");\r
+        namespace = namespace.replace("=", ".");\r
+\r
+        packageNameBuilder.append(namespace);\r
+        calendar.setTime(module.getRevision());\r
+        packageNameBuilder.append(".rev");\r
+        packageNameBuilder.append(calendar.get(Calendar.YEAR));\r
+        packageNameBuilder.append((calendar.get(Calendar.MONTH) + 1));\r
+        packageNameBuilder.append(calendar.get(Calendar.DAY_OF_MONTH));\r
+\r
+        return validateJavaPackage(packageNameBuilder.toString());\r
+    }\r
+\r
+    public static String packageNameForGeneratedType(final String basePackageName, final SchemaPath schemaPath) {\r
+        if (basePackageName == null) {\r
+            throw new IllegalArgumentException("Base Package Name cannot be NULL!");\r
+        }\r
+        if (schemaPath == null) {\r
+            throw new IllegalArgumentException("Schema Path cannot be NULL!");\r
+        }\r
+\r
+        final StringBuilder builder = new StringBuilder();\r
+        builder.append(basePackageName);\r
+        final List<QName> pathToNode = schemaPath.getPath();\r
+        final int traversalSteps = (pathToNode.size() - 1);\r
+        for (int i = 0; i < traversalSteps; ++i) {\r
+            builder.append(".");\r
+            String nodeLocalName = pathToNode.get(i).getLocalName();\r
+\r
+            nodeLocalName = nodeLocalName.replace(":", ".");\r
+            nodeLocalName = nodeLocalName.replace("-", ".");\r
+            builder.append(nodeLocalName);\r
+        }\r
+        return validateJavaPackage(builder.toString());\r
+    }\r
+\r
+    public static String packageNameForTypeDefinition(final String basePackageName,\r
+            final TypeDefinition<?> typeDefinition) {\r
+        if (basePackageName == null) {\r
+            throw new IllegalArgumentException("Base Package Name cannot be NULL!");\r
+        }\r
+        if (typeDefinition == null) {\r
+            throw new IllegalArgumentException("Type Definition reference cannot be NULL!");\r
+        }\r
+\r
+        final StringBuilder builder = new StringBuilder();\r
+        builder.append(basePackageName);\r
+        return validateJavaPackage(builder.toString());\r
+    }\r
+\r
+    public static String parseToClassName(String token) {\r
+        token = token.replace(".", "");\r
+        String correctStr = parseToCamelCase(token);\r
+\r
+        // make first char upper-case\r
+        char first = Character.toUpperCase(correctStr.charAt(0));\r
+        if(first >= '0' && first <= '9') {\r
+            \r
+            correctStr = "_" + correctStr;\r
+        } else {\r
+            correctStr = first + correctStr.substring(1);\r
+        }\r
+        return correctStr;\r
+    }\r
+\r
+    public static String parseToValidParamName(final String token) {\r
+        final String validToken = token.replace(".", "");\r
+        String correctStr = parseToCamelCase(validToken);\r
+\r
+        // make first char lower-case\r
+        char first = Character.toLowerCase(correctStr.charAt(0));\r
+        correctStr = first + correctStr.substring(1);\r
+        return validateParameterName(correctStr);\r
+    }\r
+\r
+    public static String convertToCapitalLetters(final String token) {\r
+        String convertedStr = token.replace(" ", "_");\r
+        convertedStr = convertedStr.replace(".", "_");\r
+        convertedStr = convertedStr.toUpperCase();\r
+        return convertedStr;\r
+    }\r
+\r
+    private static String parseToCamelCase(String token) {\r
+        if (token == null) {\r
+            throw new NullPointerException("Name can not be null");\r
+        }\r
+\r
+        String correctStr = token.trim();\r
+        if (correctStr.length() == 0) {\r
+            throw new IllegalArgumentException("Name can not be emty");\r
+        }\r
+\r
+        correctStr = replaceWithCamelCase(correctStr, ' ');\r
+        correctStr = replaceWithCamelCase(correctStr, '-');\r
+        correctStr = replaceWithCamelCase(correctStr, '_');\r
+        return correctStr;\r
+    }\r
+\r
+    private static String replaceWithCamelCase(String text, char removalChar) {\r
+        StringBuilder sb = new StringBuilder(text);\r
+        String toBeRemoved = String.valueOf(removalChar);\r
+\r
+        int toBeRemovedPos = sb.indexOf(toBeRemoved);\r
+        while (toBeRemovedPos != -1) {\r
+            sb.replace(toBeRemovedPos, toBeRemovedPos + 1, "");\r
+            // check if 'toBeRemoved' character is not the only character in\r
+            // 'text'\r
+            if (sb.length() == 0) {\r
+                throw new IllegalArgumentException("Name can not be '" + toBeRemoved + "'");\r
+            }\r
+            String replacement = String.valueOf(sb.charAt(toBeRemovedPos)).toUpperCase();\r
+            sb.setCharAt(toBeRemovedPos, replacement.charAt(0));\r
+            toBeRemovedPos = sb.indexOf(toBeRemoved);\r
+        }\r
+        return sb.toString();\r
+    }\r
+}\r