1 package org.opendaylight.controller.binding.generator.util;
4 import java.util.Arrays;
5 import java.util.Calendar;
6 import java.util.GregorianCalendar;
7 import java.util.HashSet;
11 import org.opendaylight.controller.binding.generator.util.generated.type.builder.GeneratedTOBuilderImpl;
12 import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedTOBuilder;
13 import org.opendaylight.controller.yang.common.QName;
14 import org.opendaylight.controller.yang.model.api.SchemaNode;
15 import org.opendaylight.controller.yang.model.api.SchemaPath;
17 public class BindingGeneratorUtil {
19 private static final String[] SET_VALUES = new String[] { "abstract",
20 "assert", "boolean", "break", "byte", "case", "catch", "char",
21 "class", "const", "continue", "default", "double", "do", "else",
22 "enum", "extends", "false", "final", "finally", "float", "for",
23 "goto", "if", "implements", "import", "instanceof", "int",
24 "interface", "long", "native", "new", "null", "package", "private",
25 "protected", "public", "return", "short", "static", "strictfp",
26 "super", "switch", "synchronized", "this", "throw", "throws",
27 "transient", "true", "try", "void", "volatile", "while" };
29 private static Calendar calendar = new GregorianCalendar();
31 private BindingGeneratorUtil() {
34 public static final Set<String> JAVA_RESERVED_WORDS = new HashSet<String>(
35 Arrays.asList(SET_VALUES));
37 public static String validateJavaPackage(final String packageName) {
38 if (packageName != null) {
39 final String[] packNameParts = packageName.split("\\.");
40 if (packNameParts != null) {
41 final StringBuilder builder = new StringBuilder();
42 for (int i = 0; i < packNameParts.length; ++i) {
43 if (JAVA_RESERVED_WORDS.contains(packNameParts[i])) {
44 packNameParts[i] = "_" + packNameParts[i];
49 builder.append(packNameParts[i]);
51 return builder.toString();
57 public static String validateParameterName(final String parameterName) {
58 if (parameterName != null) {
59 if (JAVA_RESERVED_WORDS.contains(parameterName)) {
60 return "_" + parameterName;
66 public static GeneratedTOBuilder schemaNodeToTransferObjectBuilder(
67 final String basePackageName, final SchemaNode schemaNode, final String transObjectName) {
68 if (basePackageName != null && schemaNode != null && transObjectName != null) {
69 final String packageName = packageNameForGeneratedType(basePackageName,
70 schemaNode.getPath());
72 if (packageName != null) {
73 final String genTOName = BindingGeneratorUtil
74 .parseToClassName(transObjectName);
75 final GeneratedTOBuilder newType = new GeneratedTOBuilderImpl(
76 packageName, genTOName);
84 public static String moduleNamespaceToPackageName(
85 final URI moduleNamespace, final String yangVersion) {
86 final StringBuilder packageNameBuilder = new StringBuilder();
88 packageNameBuilder.append("org.opendaylight.yang.gen.v");
89 packageNameBuilder.append(yangVersion);
90 packageNameBuilder.append(".rev");
91 packageNameBuilder.append(calendar.get(Calendar.YEAR));
92 packageNameBuilder.append((calendar.get(Calendar.MONTH) + 1));
93 packageNameBuilder.append(calendar.get(Calendar.DAY_OF_MONTH));
94 packageNameBuilder.append(".");
96 String namespace = moduleNamespace.toString();
97 namespace = namespace.replace("://", ".");
98 namespace = namespace.replace("/", ".");
99 namespace = namespace.replace(":", ".");
100 namespace = namespace.replace("-", ".");
101 namespace = namespace.replace("@", ".");
102 namespace = namespace.replace("$", ".");
103 namespace = namespace.replace("#", ".");
104 namespace = namespace.replace("'", ".");
105 namespace = namespace.replace("*", ".");
106 namespace = namespace.replace("+", ".");
107 namespace = namespace.replace(",", ".");
108 namespace = namespace.replace(";", ".");
109 namespace = namespace.replace("=", ".");
111 packageNameBuilder.append(namespace);
113 return packageNameBuilder.toString();
116 public static String packageNameForGeneratedType(
117 final String basePackageName, final SchemaPath schemaPath) {
118 final StringBuilder builder = new StringBuilder();
119 builder.append(basePackageName);
120 if ((schemaPath != null) && (schemaPath.getPath() != null)) {
121 final List<QName> pathToNode = schemaPath.getPath();
122 final int traversalSteps = (pathToNode.size() - 1);
123 for (int i = 0; i < traversalSteps; ++i) {
125 String nodeLocalName = pathToNode.get(i).getLocalName();
127 nodeLocalName = nodeLocalName.replace(":", ".");
128 nodeLocalName = nodeLocalName.replace("-", ".");
129 builder.append(nodeLocalName);
131 return validateJavaPackage(builder.toString());
136 public static String parseToClassName(String token) {
137 token = token.replace(".", "");
138 String correctStr = parseToCamelCase(token);
140 // make first char upper-case
141 char first = Character.toUpperCase(correctStr.charAt(0));
142 correctStr = first + correctStr.substring(1);
146 public static String parseToValidParamName(final String token) {
147 final String validToken = token.replace(".", "");
148 String correctStr = parseToCamelCase(validToken);
150 // make first char lower-case
151 char first = Character.toLowerCase(correctStr.charAt(0));
152 correctStr = first + correctStr.substring(1);
153 return validateParameterName(correctStr);
156 private static String parseToCamelCase(String token) {
158 throw new NullPointerException("Name can not be null");
161 String correctStr = token.trim();
162 if (correctStr.length() == 0) {
163 throw new IllegalArgumentException("Name can not be emty");
166 correctStr = replaceWithCamelCase(correctStr, ' ');
167 correctStr = replaceWithCamelCase(correctStr, '-');
168 correctStr = replaceWithCamelCase(correctStr, '_');
172 private static String replaceWithCamelCase(String text, char removalChar) {
173 StringBuilder sb = new StringBuilder(text);
174 String toBeRemoved = String.valueOf(removalChar);
176 int toBeRemovedPos = sb.indexOf(toBeRemoved);
177 while (toBeRemovedPos != -1) {
178 sb.replace(toBeRemovedPos, toBeRemovedPos + 1, "");
179 // check if 'toBeRemoved' character is not the only character in
181 if (sb.length() == 0) {
182 throw new IllegalArgumentException("Name can not be '"
183 + toBeRemoved + "'");
185 String replacement = String.valueOf(sb.charAt(toBeRemovedPos))
187 sb.setCharAt(toBeRemovedPos, replacement.charAt(0));
188 toBeRemovedPos = sb.indexOf(toBeRemoved);
190 return sb.toString();