blob: 2d9538f8da30730bae8266c6fce9f2d89126ea13 [file] [log] [blame]
Bharat saraswal84366c52016-03-23 19:40:35 +05301/*
Brian O'Connor0f7908b2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswal84366c52016-03-23 19:40:35 +05303 *
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
Bharat saraswalaf413b82016-07-14 15:18:20 +053019import org.onosproject.yangutils.datamodel.YangAtomicPath;
Bharat saraswald14cbe82016-07-14 13:26:18 +053020import org.onosproject.yangutils.datamodel.YangAugment;
janani bb3be1332016-08-03 16:40:01 +053021import org.onosproject.yangutils.datamodel.YangLeafRef;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053022import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalaf413b82016-07-14 15:18:20 +053023import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
janani bb3be1332016-08-03 16:40:01 +053024import org.onosproject.yangutils.datamodel.YangType;
janani bb3be1332016-08-03 16:40:01 +053025import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053026import org.onosproject.yangutils.translator.exception.TranslatorException;
Bharat saraswalaf413b82016-07-14 15:18:20 +053027import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053028import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Bharat saraswale50edca2016-08-05 01:58:25 +053029import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Bharat saraswalaf413b82016-07-14 15:18:20 +053030import org.onosproject.yangutils.translator.tojava.JavaImportData;
Shankara-Huaweib7564772016-08-02 18:13:13 +053031import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053032import org.onosproject.yangutils.translator.tojava.TempJavaBeanFragmentFiles;
Bharat saraswalaf413b82016-07-14 15:18:20 +053033import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
Bharat saraswal250a7472016-05-12 13:16:57 +053034import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswal039f59c2016-07-14 21:57:13 +053035import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053036import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053037import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
38import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Bharat saraswale50edca2016-08-05 01:58:25 +053039import org.onosproject.yangutils.utils.io.YangPluginConfig;
Bharat saraswal84366c52016-03-23 19:40:35 +053040import org.onosproject.yangutils.utils.io.impl.CopyrightHeader;
41import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
42
Bharat saraswal9fab16b2016-09-23 23:27:24 +053043import java.io.File;
44import java.io.IOException;
45import java.util.ArrayList;
46import java.util.List;
47
Bharat saraswal84366c52016-03-23 19:40:35 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
49import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
53import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
Bharat saraswald14cbe82016-07-14 13:26:18 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswal84366c52016-03-23 19:40:35 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswal84366c52016-03-23 19:40:35 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
61import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
Bharat saraswal250a7472016-05-12 13:16:57 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EDIT_CONTENT_MASK;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053066import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053067import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053068import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
69import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053073import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
74import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
75import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053076import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053077import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
78import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
79import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053080import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053081import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053082import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053083import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
84import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
85import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Shankara-Huaweib7564772016-08-02 18:13:13 +053086import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Bharat saraswal8beac342016-08-04 02:00:03 +053087import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getNodesPackage;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053088import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
Shankara-Huawei234cd092016-07-14 11:35:34 +053089import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053090import static org.onosproject.yangutils.utils.UtilConstants.ERROR_MSG_FOR_GEN_CODE;
janani bb3be1332016-08-03 16:40:01 +053091import static org.onosproject.yangutils.utils.UtilConstants.LEAFREF;
Bharat saraswal84366c52016-03-23 19:40:35 +053092import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +053093import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal84366c52016-03-23 19:40:35 +053094import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053095import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053096import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +053097import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
98import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal84366c52016-03-23 19:40:35 +053099import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
100import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530101import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530102import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
103import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530104import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530105import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMPL_CLASS;
106import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530107import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530108import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530109import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
110import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
111import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
Bharat saraswal84366c52016-03-23 19:40:35 +0530112import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530113import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg;
Bharat saraswal84366c52016-03-23 19:40:35 +0530114
115/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530116 * Represents utilities for java file generator.
Bharat saraswal84366c52016-03-23 19:40:35 +0530117 */
118public final class JavaFileGeneratorUtils {
119
120 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530121 * Creates an instance of java file generator util.
Bharat saraswal84366c52016-03-23 19:40:35 +0530122 */
123 private JavaFileGeneratorUtils() {
124 }
125
126 /**
127 * Returns a file object for generated file.
128 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530129 * @param filePath file package path
130 * @param fileName file name
131 * @param extension file extension
132 * @param handler cached file handle
Bharat saraswal84366c52016-03-23 19:40:35 +0530133 * @return file object
134 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530135 public static File getFileObject(String filePath, String fileName,
136 String extension,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530137 JavaFileInfoTranslator handler) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530138 return new File(handler.getBaseCodeGenPath() + filePath + SLASH +
139 fileName + extension);
Bharat saraswal84366c52016-03-23 19:40:35 +0530140 }
141
142 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530143 * Returns data stored in temporary files.
Bharat saraswal84366c52016-03-23 19:40:35 +0530144 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530145 * @param tempFiles temporary file types
146 * @param tempHandle temp java fragment files
147 * @param path absolute path
Bharat saraswal84366c52016-03-23 19:40:35 +0530148 * @return data stored in temporary files
149 * @throws IOException when failed to get the data from temporary file handle
150 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530151 static String getDataFromTempFileHandle(
152 int tempFiles, TempJavaFragmentFiles tempHandle, String path)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530153 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530154
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530155 TempJavaTypeFragmentFiles typeHandle = null;
156 if (tempHandle instanceof TempJavaTypeFragmentFiles) {
157 typeHandle = (TempJavaTypeFragmentFiles) tempHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530158 }
159
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530160 TempJavaBeanFragmentFiles beanHandle = null;
161 if (tempHandle instanceof TempJavaBeanFragmentFiles) {
162 beanHandle = (TempJavaBeanFragmentFiles) tempHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530163 }
164
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530165 TempJavaServiceFragmentFiles serviceHandle = null;
166 if (tempHandle instanceof TempJavaServiceFragmentFiles) {
167 serviceHandle = (TempJavaServiceFragmentFiles) tempHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530168 }
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530169
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530170 TempJavaEventFragmentFiles eventHandle = null;
171 if (tempHandle instanceof TempJavaEventFragmentFiles) {
172 eventHandle = (TempJavaEventFragmentFiles) tempHandle;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530173 }
174
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530175 if ((tempFiles & ATTRIBUTES_MASK) != 0) {
176 return tempHandle.getTemporaryDataFromFileHandle(
177 tempHandle.getAttributesTempFileHandle(),
178 path);
179 }
180 if ((tempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
181 return tempHandle.getTemporaryDataFromFileHandle(
182 tempHandle.getGetterInterfaceTempFileHandle(),
183 path);
184 }
185 if ((tempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
186 return tempHandle.getTemporaryDataFromFileHandle(
187 tempHandle.getSetterInterfaceTempFileHandle(),
188 path);
189 }
190 if ((tempFiles & GETTER_FOR_CLASS_MASK) != 0) {
191 return tempHandle.getTemporaryDataFromFileHandle(
192 tempHandle.getGetterImplTempFileHandle(),
193 path);
194 }
195 if ((tempFiles & SETTER_FOR_CLASS_MASK) != 0) {
196 return tempHandle.getTemporaryDataFromFileHandle(
197 tempHandle.getSetterImplTempFileHandle(),
198 path);
199 }
200 if ((tempFiles & ADD_TO_LIST_INTERFACE_MASK) != 0) {
201 return tempHandle.getTemporaryDataFromFileHandle(
202 tempHandle.getAddToListInterfaceTempFileHandle(),
203 path);
204 }
205 if ((tempFiles & ADD_TO_LIST_IMPL_MASK) != 0) {
206 return tempHandle.getTemporaryDataFromFileHandle(
207 tempHandle.getAddToListImplTempFileHandle(),
208 path);
209 }
210 if ((tempFiles & FILTER_CONTENT_MATCH_FOR_LEAF_MASK) != 0) {
211 return tempHandle.getTemporaryDataFromFileHandle(
212 tempHandle.getSubtreeFilteringForLeafTempFileHandle(),
213 path);
214 }
215 if ((tempFiles & FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK) != 0) {
216 return tempHandle.getTemporaryDataFromFileHandle(
217 tempHandle.getGetSubtreeFilteringForListTempFileHandle(),
218 path);
219 }
220 if ((tempFiles & FILTER_CONTENT_MATCH_FOR_NODES_MASK) != 0) {
221 return tempHandle.getTemporaryDataFromFileHandle(
222 tempHandle.getGetSubtreeFilteringForChildNodeTempFileHandle(),
223 path);
224 }
225 if ((tempFiles & EDIT_CONTENT_MASK) != 0) {
226 return tempHandle.getTemporaryDataFromFileHandle(
227 tempHandle.getEditContentTempFileHandle(),
228 path);
229 }
230 if ((tempFiles & LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK) != 0) {
231 return tempHandle.getTemporaryDataFromFileHandle(
232 tempHandle.getLeafIdAttributeTempFileHandle(),
233 path);
234 }
235 if ((tempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
236 if (beanHandle == null) {
237 throw new TranslatorException("Required constructor info is" +
238 " missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530239 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530240 return beanHandle.getTemporaryDataFromFileHandle(
241 beanHandle.getConstructorImplTempFileHandle(),
242 path);
243 }
244 if ((tempFiles & HASH_CODE_IMPL_MASK) != 0) {
245 return tempHandle.getTemporaryDataFromFileHandle(
246 tempHandle.getHashCodeImplTempFileHandle(),
247 path);
248 }
249 if ((tempFiles & EQUALS_IMPL_MASK) != 0) {
250 return tempHandle.getTemporaryDataFromFileHandle(
251 tempHandle.getEqualsImplTempFileHandle(),
252 path);
253 }
254 if ((tempFiles & TO_STRING_IMPL_MASK) != 0) {
255 return tempHandle.getTemporaryDataFromFileHandle(
256 tempHandle.getToStringImplTempFileHandle(),
257 path);
258 }
259 if ((tempFiles & OF_STRING_IMPL_MASK) != 0) {
260 if (typeHandle == null) {
261 throw new TranslatorException("Required of string implementation" +
262 " info is missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530263 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530264 return typeHandle.getTemporaryDataFromFileHandle(
265 typeHandle.getOfStringImplTempFileHandle(), path);
266 }
267 if ((tempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
268 if (typeHandle == null) {
269 throw new TranslatorException("Required constructor implementation" +
270 " info is missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530271 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530272 return typeHandle.getTemporaryDataFromFileHandle(
273 typeHandle.getConstructorForTypeTempFileHandle(),
274 path);
275 }
276 if ((tempFiles & FROM_STRING_IMPL_MASK) != 0) {
277 return tempHandle.getTemporaryDataFromFileHandle(
278 tempHandle.getFromStringImplTempFileHandle(),
279 path);
280 }
281 if ((tempFiles & ENUM_IMPL_MASK) != 0) {
282 if (!(tempHandle instanceof TempJavaEnumerationFragmentFiles)) {
Bharat saraswal250a7472016-05-12 13:16:57 +0530283 throw new TranslatorException("Required enum info is missing.");
284 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530285 TempJavaEnumerationFragmentFiles enumHandle =
286 (TempJavaEnumerationFragmentFiles) tempHandle;
287 return enumHandle.getTemporaryDataFromFileHandle(
288 enumHandle.getEnumClassTempFileHandle(), path);
289 }
290 if ((tempFiles & RPC_INTERFACE_MASK) != 0) {
291 if (serviceHandle == null) {
292 throw new TranslatorException("Required rpc interface info is" +
293 " missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530294 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530295 return serviceHandle.getTemporaryDataFromFileHandle(
296 serviceHandle.getRpcInterfaceTempFileHandle(),
297 path);
298 }
299 if ((tempFiles & EVENT_ENUM_MASK) != 0) {
300 if (eventHandle == null) {
301 throw new TranslatorException(
302 "Required event enum implementation info is missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530303 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530304 return eventHandle.getTemporaryDataFromFileHandle(
305 eventHandle.getEventEnumTempFileHandle(),
306 path);
307 }
308 if ((tempFiles & EVENT_METHOD_MASK) != 0) {
309 if (eventHandle == null) {
310 throw new TranslatorException(
311 "Required event method implementation info is missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530312 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530313 return eventHandle.getTemporaryDataFromFileHandle(
314 eventHandle.getEventMethodTempFileHandle(),
315 path);
316 }
317 if ((tempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
318 if (eventHandle == null) {
319 throw new TranslatorException(
320 "Required event subject getter implementation info is" +
321 " missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530322 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530323 return eventHandle.getTemporaryDataFromFileHandle(
324 eventHandle.getEventSubjectGetterTempFileHandle(),
325 path);
326 }
327 if ((tempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
328 if (eventHandle == null) {
329 throw new TranslatorException(
330 "Required event subject setter implementation info is" +
331 " missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530332 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530333 return eventHandle.getTemporaryDataFromFileHandle(
334 eventHandle.getEventSubjectSetterTempFileHandle(),
335 path);
336 }
337 if ((tempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
338 if (eventHandle == null) {
339 throw new TranslatorException(
340 "Required event subject attribute implementation info is" +
341 " missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530342 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530343 return eventHandle.getTemporaryDataFromFileHandle(
344 eventHandle.getEventSubjectAttributeTempFileHandle(),
345 path);
Bharat saraswal84366c52016-03-23 19:40:35 +0530346 }
347 return null;
348 }
349
350 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530351 * Initiates generation of file based on generated file type.
Bharat saraswal84366c52016-03-23 19:40:35 +0530352 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530353 * @param file generated file
354 * @param className generated file class name
355 * @param genType generated file type
356 * @param imports imports for the file
357 * @param pkg generated file package
Bharat saraswal84366c52016-03-23 19:40:35 +0530358 * @throws IOException when fails to generate a file
359 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530360 public static void initiateJavaFileGeneration(File file, String className,
361 int genType, List<String> imports,
362 String pkg)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530363 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530364
Bharat saraswale3175d32016-08-31 17:50:11 +0530365 if (file.exists()) {
366 throw new IOException(" file " + file.getName() + " is already generated." +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530367 ERROR_MSG_FOR_GEN_CODE);
Bharat saraswale3175d32016-08-31 17:50:11 +0530368 }
369
Bharat saraswal039f59c2016-07-14 21:57:13 +0530370 boolean isFileCreated;
Bharat saraswal84366c52016-03-23 19:40:35 +0530371 try {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530372 isFileCreated = file.createNewFile();
373 if (!isFileCreated) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530374 throw new IOException("Failed to create " + file.getName() +
375 " class file.");
Bharat saraswal039f59c2016-07-14 21:57:13 +0530376 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530377 appendContents(file, className, genType, imports, pkg);
Bharat saraswal84366c52016-03-23 19:40:35 +0530378 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530379 throw new IOException("Failed to append contents in " + file.getName() +
380 " class file.");
Bharat saraswal84366c52016-03-23 19:40:35 +0530381 }
382 }
383
384 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530385 * Initiates generation of file based on generated file type.
386 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530387 * @param file generated file
388 * @param genType generated file type
389 * @param imports imports for the file
390 * @param curNode current YANG node
391 * @param name class name
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530392 * @throws IOException when fails to generate a file
393 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530394 public static void initiateJavaFileGeneration(File file, int genType,
395 List<String> imports,
396 YangNode curNode, String name)
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530397 throws IOException {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530398
Bharat saraswale3175d32016-08-31 17:50:11 +0530399 if (file.exists()) {
400 throw new IOException(" file " + file.getName() + " is already generated." +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530401 ERROR_MSG_FOR_GEN_CODE);
Bharat saraswale3175d32016-08-31 17:50:11 +0530402 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530403 boolean isFileCreated;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530404 try {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530405 isFileCreated = file.createNewFile();
406 if (!isFileCreated) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530407 throw new IOException("Failed to create " + file.getName() +
408 " class file.");
Bharat saraswal039f59c2016-07-14 21:57:13 +0530409 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530410 appendContents(file, genType, imports, curNode, name);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530411 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530412 throw new IOException("Failed to append contents in " + file.getName() +
413 " class file.");
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530414 }
415 }
416
417 /**
Bharat saraswal84366c52016-03-23 19:40:35 +0530418 * Appends all the contents into a generated java file.
419 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530420 * @param file generated file
421 * @param genType generated file type
sangyun-hanf352f532016-05-30 19:33:27 +0900422 * @param importsList list of java imports
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530423 * @param curNode current YANG node
424 * @param className class name
Shankara-Huaweib7564772016-08-02 18:13:13 +0530425 * @throws IOException when fails to do IO operations
Bharat saraswal84366c52016-03-23 19:40:35 +0530426 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530427 private static void appendContents(File file, int genType,
428 List<String> importsList, YangNode curNode,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530429 String className)
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530430 throws IOException {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530431
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530432 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode)
433 .getJavaFileInfo();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530434
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530435 String name = javaFileInfo.getJavaName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530436 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo
437 .getPackageFilePath();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530438
Bharat saraswal039f59c2016-07-14 21:57:13 +0530439 String pkgString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530440 if (genType == GENERATE_EVENT_CLASS ||
441 genType == GENERATE_EVENT_LISTENER_INTERFACE ||
442 genType == GENERATE_EVENT_SUBJECT_CLASS) {
443 pkgString = parsePackageString((path + PERIOD + name)
444 .toLowerCase(), importsList);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530445 } else {
446 pkgString = parsePackageString(path, importsList);
447 }
sangyun-hanf352f532016-05-30 19:33:27 +0900448 switch (genType) {
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530449 case INTERFACE_MASK:
Bharat saraswal039f59c2016-07-14 21:57:13 +0530450 appendHeaderContents(file, pkgString, importsList);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530451 write(file, genType, INTERFACE, curNode, className);
452 break;
Bharat saraswal8beac342016-08-04 02:00:03 +0530453 case DEFAULT_CLASS_MASK:
Bharat saraswald14cbe82016-07-14 13:26:18 +0530454 appendHeaderContents(file, pkgString, importsList);
455 write(file, genType, IMPL_CLASS, curNode, className);
456 break;
457 case BUILDER_CLASS_MASK:
458 write(file, genType, BUILDER_CLASS, curNode, className);
459 break;
460 case BUILDER_INTERFACE_MASK:
461 write(file, genType, BUILDER_INTERFACE, curNode, className);
462 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530463 case GENERATE_SERVICE_AND_MANAGER:
464 appendHeaderContents(file, pkgString, importsList);
465 write(file, genType, RPC_INTERFACE, curNode, className);
466 break;
467 case GENERATE_EVENT_CLASS:
468 appendHeaderContents(file, pkgString, importsList);
469 write(file, genType, EVENT, curNode, className);
470 break;
471 case GENERATE_EVENT_LISTENER_INTERFACE:
472 appendHeaderContents(file, pkgString, importsList);
473 write(file, genType, EVENT_LISTENER, curNode, className);
474 break;
475 case GENERATE_EVENT_SUBJECT_CLASS:
476 appendHeaderContents(file, pkgString, importsList);
477 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
478 break;
Shankara-Huawei234cd092016-07-14 11:35:34 +0530479 case GENERATE_IDENTITY_CLASS:
480 appendHeaderContents(file, pkgString, importsList);
481 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
482 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
483 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530484 default:
485 break;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530486 }
487 }
488
489 /**
490 * Appends all the contents into a generated java file.
491 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530492 * @param file generated file
493 * @param fileName generated file name
494 * @param genType generated file type
495 * @param importsList list of java imports
496 * @param pkg generated file package
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530497 * @throws IOException when fails to append contents
498 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530499 private static void appendContents(File file, String fileName, int genType,
500 List<String> importsList, String pkg)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530501 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530502
503 String pkgString = parsePackageString(pkg, importsList);
504
sangyun-hanf352f532016-05-30 19:33:27 +0900505 switch (genType) {
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530506 case GENERATE_TYPEDEF_CLASS:
507 appendHeaderContents(file, pkgString, importsList);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530508 write(file, fileName, genType, IMPL_CLASS);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530509 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530510 case GENERATE_UNION_CLASS:
511 appendHeaderContents(file, pkgString, importsList);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530512 write(file, fileName, genType, IMPL_CLASS);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530513 break;
514 case GENERATE_ENUM_CLASS:
515 appendHeaderContents(file, pkgString, importsList);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530516 write(file, fileName, genType, ENUM_CLASS);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530517 break;
518 default:
519 break;
Bharat saraswal84366c52016-03-23 19:40:35 +0530520 }
521 }
522
523 /**
524 * Removes base directory path from package and generates package string for file.
525 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530526 * @param javaPkg generated java package
Bharat saraswal84366c52016-03-23 19:40:35 +0530527 * @param importsList list of imports
528 * @return package string
529 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530530 private static String parsePackageString(String javaPkg,
531 List<String> importsList) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530532
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530533 javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
Bharat saraswal84366c52016-03-23 19:40:35 +0530534 if (importsList != null) {
535 if (!importsList.isEmpty()) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530536 return PACKAGE + SPACE + javaPkg + SEMI_COLON + NEW_LINE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530537 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530538 return PACKAGE + SPACE + javaPkg + SEMI_COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +0530539 }
540 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530541 return PACKAGE + SPACE + javaPkg + SEMI_COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +0530542 }
543 }
544
545 /**
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530546 * Appends other contents to interface, impl and typedef classes.
547 * for example : ONOS copyright, imports and package.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530548 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530549 * @param file generated file
550 * @param pkg generated package
Bharat saraswal84366c52016-03-23 19:40:35 +0530551 * @param importsList list of imports
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530552 * @throws IOException when fails to append contents
Bharat saraswal84366c52016-03-23 19:40:35 +0530553 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530554 private static void appendHeaderContents(File file, String pkg,
555 List<String> importsList)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530556 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530557
558 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
559 insertDataIntoJavaFile(file, pkg);
560
561 /*
Bharat saraswal039f59c2016-07-14 21:57:13 +0530562 * TODO: add the file header using comments for snippet of yang file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530563 * JavaCodeSnippetGen.getFileHeaderComment
564 */
565
566 if (importsList != null) {
567 insertDataIntoJavaFile(file, NEW_LINE);
568 for (String imports : importsList) {
569 insertDataIntoJavaFile(file, imports);
570 }
571 }
572 }
573
574 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530575 * Writes data to the specific generated file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530576 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530577 * @param file generated file
578 * @param genType generated file type
Bharat saraswal84366c52016-03-23 19:40:35 +0530579 * @param javaDocType java doc type
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530580 * @param curNode current YANG node
581 * @param fileName file name
Bharat saraswal84366c52016-03-23 19:40:35 +0530582 * @throws IOException when fails to write into a file
583 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530584 private static void write(File file, int genType, JavaDocType javaDocType,
585 YangNode curNode, String fileName)
Bharat saraswal84366c52016-03-23 19:40:35 +0530586 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530587 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName,
588 false, null));
589 insertDataIntoJavaFile(file, generateClassDefinition(genType,
590 fileName, curNode));
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530591 }
592
593 /**
594 * Writes data to the specific generated file.
595 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530596 * @param file generated file
597 * @param fileName file name
598 * @param genType generated file type
599 * @param javaDocType java doc type
sangyun-han54cb8322016-06-01 14:12:07 +0900600 * @throws IOException when fails to write into a file
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530601 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530602 private static void write(File file, String fileName, int genType,
603 JavaDocType javaDocType) throws IOException {
604 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false,
605 null));
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530606 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswal84366c52016-03-23 19:40:35 +0530607 }
608
Bharat saraswalaf413b82016-07-14 15:18:20 +0530609 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530610 * Returns set of node identifiers.
611 *
612 * @param parent parent node
613 * @return set of node identifiers
614 */
Bharat saraswal039f59c2016-07-14 21:57:13 +0530615 static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530616
617 List<YangAtomicPath> targets = new ArrayList<>();
618 YangNodeIdentifier nodeId;
619 List<YangAugment> augments = getListOfAugments(parent);
620 for (YangAugment augment : augments) {
621 nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
622
623 if (validateNodeIdentifierInSet(nodeId, targets)) {
624 targets.add(augment.getTargetNode().get(0));
625 }
626 }
627 return targets;
628 }
629
630 /* Returns list of augments.*/
631 private static List<YangAugment> getListOfAugments(YangNode parent) {
632 List<YangAugment> augments = new ArrayList<>();
633 YangNode child = parent.getChild();
634 while (child != null) {
635 if (child instanceof YangAugment) {
636 augments.add((YangAugment) child);
637 }
638 child = child.getNextSibling();
639 }
640 return augments;
641 }
642
643 /*Validates the set for duplicate names of node identifiers.*/
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530644 private static boolean validateNodeIdentifierInSet(
645 YangNodeIdentifier nodeId, List<YangAtomicPath> targets) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530646 boolean isPresent = true;
647 for (YangAtomicPath target : targets) {
648 if (target.getNodeIdentifier().getName().equals(nodeId.getName())) {
649 if (target.getNodeIdentifier().getPrefix() != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530650 isPresent = !target.getNodeIdentifier().getPrefix()
651 .equals(nodeId.getPrefix());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530652 } else {
653 isPresent = nodeId.getPrefix() != null;
654 }
655 }
656 }
657 return isPresent;
658 }
659
660 /**
661 * Adds resolved augmented node imports to manager class.
662 *
663 * @param parent parent node
664 */
665 public static void addResolvedAugmentedDataNodeImports(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530666 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530667 TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = (
668 (JavaCodeGeneratorInfo) parent)
Bharat saraswalaf413b82016-07-14 15:18:20 +0530669 .getTempJavaCodeFragmentFiles();
670 YangNode augmentedNode;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530671 JavaQualifiedTypeInfoTranslator typeInfo;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530672 String curNodeName;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530673 JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent)
674 .getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530675 for (YangAtomicPath nodeId : targets) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530676 augmentedNode = nodeId.getResolvedNode().getParent();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530677 curNodeName = getCurNodeName(augmentedNode, parentInfo
678 .getPluginConfig());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530679
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530680 typeInfo =
681 getQTypeInfoOfNode(
682 augmentedNode, curNodeName + OP_PARAM,
683 parentInfo.getPluginConfig());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530684
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530685 tempJavaCodeFragmentFiles.getServiceTempFiles()
686 .getJavaImportData().addImportInfo(
687 typeInfo, parentInfo.getJavaName(),
688 parentInfo.getPackage());
689 typeInfo =
690 getQTypeInfoOfNode(
691 augmentedNode, curNodeName, parentInfo
692 .getPluginConfig());
693
694 tempJavaCodeFragmentFiles.getServiceTempFiles()
695 .getJavaImportData().addImportInfo(
696 typeInfo, parentInfo.getJavaName(),
697 parentInfo.getPackage());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530698 }
699 }
700
701 /**
702 * Returns qualified type info of augmented node.
703 *
704 * @param augmentedNode augmented node
705 * @param curNodeName current node name
706 * @param pluginConfig plugin configurations
707 * @return qualified type info of augmented node
708 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530709 private static JavaQualifiedTypeInfoTranslator getQTypeInfoOfNode(
710 YangNode augmentedNode, String curNodeName, YangPluginConfig pluginConfig) {
711 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo =
712 getQualifiedTypeInfoOfCurNode(augmentedNode,
713 curNodeName);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530714 if (javaQualifiedTypeInfo.getPkgInfo() == null) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530715 javaQualifiedTypeInfo.setPkgInfo(getNodesPackage(augmentedNode,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530716 pluginConfig));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530717 }
718 return javaQualifiedTypeInfo;
719 }
720
721 /**
722 * Validates if augmented node is imported in parent node.
723 *
724 * @param javaQualifiedTypeInfo qualified type info
725 * @param importData import data
726 * @return true if present in imports
727 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530728 private static boolean validateQualifiedInfoOfAugmentedNode(
729 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo,
730 JavaImportData importData) {
731 for (JavaQualifiedTypeInfoTranslator curImportInfo : importData
732 .getImportSet()) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530733 if (curImportInfo.getClassInfo()
734 .contentEquals(javaQualifiedTypeInfo.getClassInfo())) {
735 return curImportInfo.getPkgInfo()
736 .contentEquals(javaQualifiedTypeInfo.getPkgInfo());
737 }
738 }
739 return true;
740 }
741
742 /**
743 * Return augmented class name for data methods in manager and service.
744 *
745 * @param augmentedNode augmented node
746 * @param parent parent node
747 * @return augmented class name for data methods in manager and service
748 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530749 static String getAugmentedClassNameForDataMethods(YangNode augmentedNode,
750 YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530751 String curNodeName;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530752 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530753 JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent)
754 .getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530755 YangPluginConfig pluginConfig = parentInfo.getPluginConfig();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530756 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = (
757 (JavaCodeGeneratorInfo) parent).getTempJavaCodeFragmentFiles()
758 .getServiceTempFiles();
759 curNodeName = getCurNodeName(augmentedNode, pluginConfig);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530760
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530761 javaQualifiedTypeInfo = getQTypeInfoOfNode(augmentedNode,
762 getCapitalCase(curNodeName),
763 parentInfo.getPluginConfig());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530764 if (validateQualifiedInfoOfAugmentedNode(javaQualifiedTypeInfo,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530765 tempJavaServiceFragmentFiles
766 .getJavaImportData())) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530767 return javaQualifiedTypeInfo.getClassInfo();
768 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530769 return javaQualifiedTypeInfo.getPkgInfo() + PERIOD +
770 javaQualifiedTypeInfo.getClassInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530771 }
772 }
773
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530774 //Returns class name of current node
775 static String getCurNodeName(YangNode node, YangPluginConfig config) {
776 if (((JavaFileInfoContainer) node).getJavaFileInfo()
777 .getJavaName() != null) {
778 return getCapitalCase(((JavaFileInfoContainer) node)
779 .getJavaFileInfo()
780 .getJavaName());
781 } else {
782 return getCapitalCase(getCamelCase(node.getName(), config
783 .getConflictResolver()));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530784 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530785 }
786
janani bb3be1332016-08-03 16:40:01 +0530787 /**
788 * Checks if the type name is leafref and returns the effective type name.
789 *
790 * @param attributeName name of the current type
791 * @param attributeType effective type
792 * @return name of the effective type
793 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530794 public static String isTypeNameLeafref(String attributeName,
795 YangType<?> attributeType) {
janani bb3be1332016-08-03 16:40:01 +0530796 if (attributeName.equalsIgnoreCase(LEAFREF)) {
797 return attributeType.getDataTypeName();
798 }
799 return attributeName;
800 }
801
802 /**
803 * Checks if the type is leafref and returns the effective type.
804 *
805 * @param attributeType current type
806 * @return effective type
807 */
808 public static YangType isTypeLeafref(YangType<?> attributeType) {
809 if (attributeType.getDataType() == YangDataTypes.LEAFREF) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530810 YangLeafRef leafRef = (YangLeafRef) attributeType
811 .getDataTypeExtendedInfo();
janani bb3be1332016-08-03 16:40:01 +0530812 return leafRef.getEffectiveDataType();
813 }
814 return attributeType;
815 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530816}