blob: dd543cacf90ec1166ebde5bdb55f24eb55733d8f [file] [log] [blame]
Bharat saraswal870c56f2016-02-20 21:57:16 +05301/*
2 * Copyright 2016 Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava.utils;
18
19import java.util.ArrayList;
20
b.janani1fef2732016-03-04 12:29:05 +053021import org.onosproject.yangutils.translator.exception.TranslatorException;
Bharat saraswal870c56f2016-02-20 21:57:16 +053022import org.onosproject.yangutils.utils.UtilConstants;
23
24/**
25 * Utility Class for translating the name from YANG to java convention.
26 */
27public final class JavaIdentifierSyntax {
28
b.janani1fef2732016-03-04 12:29:05 +053029 private static final int MAX_MONTHS = 12;
30 private static final int MAX_DAYS = 31;
31 private static final int INDEX_ZERO = 0;
32 private static final int INDEX_ONE = 1;
33 private static final int INDEX_TWO = 2;
34 private static final int INDEX_THREE = 3;
35
Bharat saraswal870c56f2016-02-20 21:57:16 +053036 /**
b.janani1fef2732016-03-04 12:29:05 +053037 * Default constructor.
Bharat saraswal870c56f2016-02-20 21:57:16 +053038 */
39 private JavaIdentifierSyntax() {
40 }
41
42 /**
43 * Get the root package string.
44 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +053045 * @param version YANG version
46 * @param nameSpace name space of the module
Bharat saraswal870c56f2016-02-20 21:57:16 +053047 * @param revision revision of the module defined
Vinod Kumar Sc4216002016-03-03 19:55:30 +053048 * @return returns the root package string
Bharat saraswal870c56f2016-02-20 21:57:16 +053049 */
50 public static String getRootPackage(byte version, String nameSpace, String revision) {
51
52 String pkg;
53 pkg = UtilConstants.DEFAULT_BASE_PKG;
54 pkg = pkg + UtilConstants.PERIOD;
55 pkg = pkg + getYangVersion(version);
56 pkg = pkg + UtilConstants.PERIOD;
57 pkg = pkg + getPkgFromNameSpace(nameSpace);
58 pkg = pkg + UtilConstants.PERIOD;
59 pkg = pkg + getYangRevisionStr(revision);
60
Bharat saraswal4bf8b152016-02-25 02:26:43 +053061 return pkg.toLowerCase();
Bharat saraswal870c56f2016-02-20 21:57:16 +053062 }
63
64 /**
65 * Returns version.
66 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +053067 * @param ver YANG version
Bharat saraswal870c56f2016-02-20 21:57:16 +053068 * @return version
69 */
70 private static String getYangVersion(byte ver) {
71 return "v" + ver;
72 }
73
74 /**
75 * Get package name from name space.
76 *
77 * @param nameSpace name space of YANG module
Vinod Kumar Sc4216002016-03-03 19:55:30 +053078 * @return java package name as per java rules
Bharat saraswal870c56f2016-02-20 21:57:16 +053079 */
80 public static String getPkgFromNameSpace(String nameSpace) {
81 ArrayList<String> pkgArr = new ArrayList<String>();
b.janani1fef2732016-03-04 12:29:05 +053082 nameSpace = nameSpace.replace(UtilConstants.QUOTES, UtilConstants.EMPTY_STRING);
83 String properNameSpace = nameSpace.replaceAll(UtilConstants.REGEX_WITH_SPECIAL_CHAR, UtilConstants.COLAN);
84 String[] nameSpaceArr = properNameSpace.split(UtilConstants.COLAN);
Bharat saraswal870c56f2016-02-20 21:57:16 +053085
86 for (String nameSpaceString : nameSpaceArr) {
87 pkgArr.add(nameSpaceString);
88 }
89 return getPkgFrmArr(pkgArr);
90 }
91
92 /**
93 * Returns revision string array.
94 *
95 * @param date YANG module revision
96 * @return revision string
b.janani1fef2732016-03-04 12:29:05 +053097 * @throws TranslatorException when date is invalid.
Bharat saraswal870c56f2016-02-20 21:57:16 +053098 */
b.janani1fef2732016-03-04 12:29:05 +053099 public static String getYangRevisionStr(String date) throws TranslatorException {
Bharat saraswal870c56f2016-02-20 21:57:16 +0530100 String[] revisionArr = date.split(UtilConstants.HYPHEN);
101
102 String rev = "rev";
b.janani1fef2732016-03-04 12:29:05 +0530103 String year = revisionArr[INDEX_ZERO];
104 char[] yearBytes = year.toCharArray();
105 rev = rev + yearBytes[INDEX_TWO] + yearBytes[INDEX_THREE];
106
107 if ((Integer.parseInt(revisionArr[INDEX_ONE]) <= MAX_MONTHS)
108 && Integer.parseInt(revisionArr[INDEX_TWO]) <= MAX_DAYS) {
109 for (int i = INDEX_ONE; i < revisionArr.length; i++) {
110
111 Integer val = Integer.parseInt(revisionArr[i]);
112 if (val < 10) {
113 rev = rev + "0";
114 }
115 rev = rev + val;
Bharat saraswal870c56f2016-02-20 21:57:16 +0530116 }
b.janani1fef2732016-03-04 12:29:05 +0530117
118 return rev;
119 } else {
120 throw new TranslatorException("Date in revision is not proper: " + date);
Bharat saraswal870c56f2016-02-20 21:57:16 +0530121 }
Bharat saraswal870c56f2016-02-20 21:57:16 +0530122 }
123
124 /**
125 * Returns the package string.
126 *
127 * @param pkgArr package array
128 * @return package string
129 */
130 public static String getPkgFrmArr(ArrayList<String> pkgArr) {
131
b.janani1fef2732016-03-04 12:29:05 +0530132 String pkg = UtilConstants.EMPTY_STRING;
Bharat saraswal870c56f2016-02-20 21:57:16 +0530133 int size = pkgArr.size();
134 int i = 0;
135 for (String member : pkgArr) {
b.janani1fef2732016-03-04 12:29:05 +0530136 boolean presenceOfKeyword = UtilConstants.JAVA_KEY_WORDS.contains(member);
137 if (presenceOfKeyword || (member.matches(UtilConstants.REGEX_FOR_FIRST_DIGIT))) {
138 member = UtilConstants.UNDER_SCORE + member;
139 }
Bharat saraswal870c56f2016-02-20 21:57:16 +0530140 pkg = pkg + member;
141 if (i != size - 1) {
142 pkg = pkg + UtilConstants.PERIOD;
143 }
144 i++;
145 }
146 return pkg;
147 }
148
149 /**
150 * Get the package from parent's package and string.
151 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530152 * @param parentPkg parent's package
153 * @param parentName parent's name
154 * @return package string
Bharat saraswal870c56f2016-02-20 21:57:16 +0530155 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530156 public static String getPackageFromParent(String parentPkg, String parentName) {
157 return (parentPkg + UtilConstants.PERIOD + getSubPkgFromName(parentName)).toLowerCase();
Bharat saraswal870c56f2016-02-20 21:57:16 +0530158 }
159
160 /**
161 * Get package sub name from YANG identifier name.
162 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530163 * @param name YANG identifier name
164 * @return java package sub name as per java rules
Bharat saraswal870c56f2016-02-20 21:57:16 +0530165 */
166 public static String getSubPkgFromName(String name) {
167 ArrayList<String> pkgArr = new ArrayList<String>();
168 String[] nameArr = name.split(UtilConstants.COLAN);
169
170 for (String nameString : nameArr) {
171 pkgArr.add(nameString);
172 }
173 return getPkgFrmArr(pkgArr);
174 }
175
176 /**
177 * Translate the YANG identifier name to java identifier.
178 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530179 * @param yangIdentifier identifier in YANG file
Bharat saraswal870c56f2016-02-20 21:57:16 +0530180 * @return corresponding java identifier
181 */
182 public static String getCamelCase(String yangIdentifier) {
183 String[] strArray = yangIdentifier.split(UtilConstants.HYPHEN);
184 String camelCase = strArray[0];
185 for (int i = 1; i < strArray.length; i++) {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530186 camelCase = camelCase + strArray[i].substring(0, 1).toUpperCase() + strArray[i].substring(1);
Bharat saraswal870c56f2016-02-20 21:57:16 +0530187 }
188 return camelCase;
189 }
Bharat saraswal594bc6d2016-02-22 22:15:21 +0530190
191 /**
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530192 * Translate the YANG identifier name to java identifier with first letter
193 * in caps.
Bharat saraswal594bc6d2016-02-22 22:15:21 +0530194 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530195 * @param yangIdentifier identifier in YANG file
Bharat saraswal594bc6d2016-02-22 22:15:21 +0530196 * @return corresponding java identifier
197 */
198 public static String getCaptialCase(String yangIdentifier) {
199 return yangIdentifier.substring(0, 1).toUpperCase() + yangIdentifier.substring(1);
200 }
b.janani1fef2732016-03-04 12:29:05 +0530201
202 /**
203 * Translate the YANG identifier name to java identifier with first letter in small.
204 *
205 * @param yangIdentifier identifier in YANG file.
206 * @return corresponding java identifier
207 */
208 public static String getLowerCase(String yangIdentifier) {
209 return yangIdentifier.substring(0, 1).toLowerCase() + yangIdentifier.substring(1);
210 }
Bharat saraswal870c56f2016-02-20 21:57:16 +0530211}