blob: 2f7993128253c5a814d9743f9cf3c87ed4371131 [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;
b.janani1fef2732016-03-04 12:29:05 +053034
Bharat saraswal870c56f2016-02-20 21:57:16 +053035 /**
b.janani1fef2732016-03-04 12:29:05 +053036 * Default constructor.
Bharat saraswal870c56f2016-02-20 21:57:16 +053037 */
38 private JavaIdentifierSyntax() {
39 }
40
41 /**
42 * Get the root package string.
43 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +053044 * @param version YANG version
45 * @param nameSpace name space of the module
Bharat saraswal870c56f2016-02-20 21:57:16 +053046 * @param revision revision of the module defined
Vinod Kumar Sc4216002016-03-03 19:55:30 +053047 * @return returns the root package string
Bharat saraswal870c56f2016-02-20 21:57:16 +053048 */
49 public static String getRootPackage(byte version, String nameSpace, String revision) {
50
51 String pkg;
52 pkg = UtilConstants.DEFAULT_BASE_PKG;
53 pkg = pkg + UtilConstants.PERIOD;
54 pkg = pkg + getYangVersion(version);
55 pkg = pkg + UtilConstants.PERIOD;
56 pkg = pkg + getPkgFromNameSpace(nameSpace);
57 pkg = pkg + UtilConstants.PERIOD;
58 pkg = pkg + getYangRevisionStr(revision);
59
Bharat saraswal4bf8b152016-02-25 02:26:43 +053060 return pkg.toLowerCase();
Bharat saraswal870c56f2016-02-20 21:57:16 +053061 }
62
63 /**
64 * Returns version.
65 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +053066 * @param ver YANG version
Bharat saraswal870c56f2016-02-20 21:57:16 +053067 * @return version
68 */
69 private static String getYangVersion(byte ver) {
70 return "v" + ver;
71 }
72
73 /**
74 * Get package name from name space.
75 *
76 * @param nameSpace name space of YANG module
Vinod Kumar Sc4216002016-03-03 19:55:30 +053077 * @return java package name as per java rules
Bharat saraswal870c56f2016-02-20 21:57:16 +053078 */
79 public static String getPkgFromNameSpace(String nameSpace) {
80 ArrayList<String> pkgArr = new ArrayList<String>();
b.janani1fef2732016-03-04 12:29:05 +053081 nameSpace = nameSpace.replace(UtilConstants.QUOTES, UtilConstants.EMPTY_STRING);
82 String properNameSpace = nameSpace.replaceAll(UtilConstants.REGEX_WITH_SPECIAL_CHAR, UtilConstants.COLAN);
83 String[] nameSpaceArr = properNameSpace.split(UtilConstants.COLAN);
Bharat saraswal870c56f2016-02-20 21:57:16 +053084
85 for (String nameSpaceString : nameSpaceArr) {
86 pkgArr.add(nameSpaceString);
87 }
88 return getPkgFrmArr(pkgArr);
89 }
90
91 /**
92 * Returns revision string array.
93 *
94 * @param date YANG module revision
95 * @return revision string
b.janani1fef2732016-03-04 12:29:05 +053096 * @throws TranslatorException when date is invalid.
Bharat saraswal870c56f2016-02-20 21:57:16 +053097 */
b.janani1fef2732016-03-04 12:29:05 +053098 public static String getYangRevisionStr(String date) throws TranslatorException {
Bharat saraswal870c56f2016-02-20 21:57:16 +053099 String[] revisionArr = date.split(UtilConstants.HYPHEN);
100
101 String rev = "rev";
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530102 rev = rev + revisionArr[INDEX_ZERO];
b.janani1fef2732016-03-04 12:29:05 +0530103
104 if ((Integer.parseInt(revisionArr[INDEX_ONE]) <= MAX_MONTHS)
105 && Integer.parseInt(revisionArr[INDEX_TWO]) <= MAX_DAYS) {
106 for (int i = INDEX_ONE; i < revisionArr.length; i++) {
107
108 Integer val = Integer.parseInt(revisionArr[i]);
109 if (val < 10) {
110 rev = rev + "0";
111 }
112 rev = rev + val;
Bharat saraswal870c56f2016-02-20 21:57:16 +0530113 }
b.janani1fef2732016-03-04 12:29:05 +0530114
115 return rev;
116 } else {
117 throw new TranslatorException("Date in revision is not proper: " + date);
Bharat saraswal870c56f2016-02-20 21:57:16 +0530118 }
Bharat saraswal870c56f2016-02-20 21:57:16 +0530119 }
120
121 /**
122 * Returns the package string.
123 *
124 * @param pkgArr package array
125 * @return package string
126 */
127 public static String getPkgFrmArr(ArrayList<String> pkgArr) {
128
b.janani1fef2732016-03-04 12:29:05 +0530129 String pkg = UtilConstants.EMPTY_STRING;
Bharat saraswal870c56f2016-02-20 21:57:16 +0530130 int size = pkgArr.size();
131 int i = 0;
132 for (String member : pkgArr) {
b.janani1fef2732016-03-04 12:29:05 +0530133 boolean presenceOfKeyword = UtilConstants.JAVA_KEY_WORDS.contains(member);
134 if (presenceOfKeyword || (member.matches(UtilConstants.REGEX_FOR_FIRST_DIGIT))) {
135 member = UtilConstants.UNDER_SCORE + member;
136 }
Bharat saraswal870c56f2016-02-20 21:57:16 +0530137 pkg = pkg + member;
138 if (i != size - 1) {
139 pkg = pkg + UtilConstants.PERIOD;
140 }
141 i++;
142 }
143 return pkg;
144 }
145
146 /**
147 * Get the package from parent's package and string.
148 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530149 * @param parentPkg parent's package
150 * @param parentName parent's name
151 * @return package string
Bharat saraswal870c56f2016-02-20 21:57:16 +0530152 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530153 public static String getPackageFromParent(String parentPkg, String parentName) {
154 return (parentPkg + UtilConstants.PERIOD + getSubPkgFromName(parentName)).toLowerCase();
Bharat saraswal870c56f2016-02-20 21:57:16 +0530155 }
156
157 /**
158 * Get package sub name from YANG identifier name.
159 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530160 * @param name YANG identifier name
161 * @return java package sub name as per java rules
Bharat saraswal870c56f2016-02-20 21:57:16 +0530162 */
163 public static String getSubPkgFromName(String name) {
164 ArrayList<String> pkgArr = new ArrayList<String>();
165 String[] nameArr = name.split(UtilConstants.COLAN);
166
167 for (String nameString : nameArr) {
168 pkgArr.add(nameString);
169 }
170 return getPkgFrmArr(pkgArr);
171 }
172
173 /**
174 * Translate the YANG identifier name to java identifier.
175 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530176 * @param yangIdentifier identifier in YANG file
Bharat saraswal870c56f2016-02-20 21:57:16 +0530177 * @return corresponding java identifier
178 */
179 public static String getCamelCase(String yangIdentifier) {
180 String[] strArray = yangIdentifier.split(UtilConstants.HYPHEN);
181 String camelCase = strArray[0];
182 for (int i = 1; i < strArray.length; i++) {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530183 camelCase = camelCase + strArray[i].substring(0, 1).toUpperCase() + strArray[i].substring(1);
Bharat saraswal870c56f2016-02-20 21:57:16 +0530184 }
185 return camelCase;
186 }
Bharat saraswal594bc6d2016-02-22 22:15:21 +0530187
188 /**
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530189 * Translate the YANG identifier name to java identifier with first letter
190 * in caps.
Bharat saraswal594bc6d2016-02-22 22:15:21 +0530191 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530192 * @param yangIdentifier identifier in YANG file
Bharat saraswal594bc6d2016-02-22 22:15:21 +0530193 * @return corresponding java identifier
194 */
195 public static String getCaptialCase(String yangIdentifier) {
196 return yangIdentifier.substring(0, 1).toUpperCase() + yangIdentifier.substring(1);
197 }
b.janani1fef2732016-03-04 12:29:05 +0530198
199 /**
200 * Translate the YANG identifier name to java identifier with first letter in small.
201 *
202 * @param yangIdentifier identifier in YANG file.
203 * @return corresponding java identifier
204 */
205 public static String getLowerCase(String yangIdentifier) {
206 return yangIdentifier.substring(0, 1).toLowerCase() + yangIdentifier.substring(1);
207 }
Bharat saraswal870c56f2016-02-20 21:57:16 +0530208}