blob: 818351dca6ab26ac8f4bcac1d4711a21796b460c [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;
Bharat saraswal94844d62016-10-13 13:28:03 +053024import org.onosproject.yangutils.datamodel.YangNotification;
janani bb3be1332016-08-03 16:40:01 +053025import org.onosproject.yangutils.datamodel.YangType;
janani bb3be1332016-08-03 16:40:01 +053026import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053027import org.onosproject.yangutils.translator.exception.TranslatorException;
Bharat saraswalaf413b82016-07-14 15:18:20 +053028import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053029import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Bharat saraswale50edca2016-08-05 01:58:25 +053030import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Bharat saraswalaf413b82016-07-14 15:18:20 +053031import org.onosproject.yangutils.translator.tojava.JavaImportData;
Shankara-Huaweib7564772016-08-02 18:13:13 +053032import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053033import org.onosproject.yangutils.translator.tojava.TempJavaBeanFragmentFiles;
Bharat saraswalaf413b82016-07-14 15:18:20 +053034import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
Bharat saraswal250a7472016-05-12 13:16:57 +053035import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswal039f59c2016-07-14 21:57:13 +053036import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053037import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053038import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
39import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Bharat saraswale50edca2016-08-05 01:58:25 +053040import org.onosproject.yangutils.utils.io.YangPluginConfig;
Bharat saraswal84366c52016-03-23 19:40:35 +053041import org.onosproject.yangutils.utils.io.impl.CopyrightHeader;
42import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
43
Bharat saraswal9fab16b2016-09-23 23:27:24 +053044import java.io.File;
45import java.io.IOException;
46import java.util.ArrayList;
47import java.util.List;
48
Bharat saraswal84366c52016-03-23 19:40:35 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
50import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
54import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
Bharat saraswald14cbe82016-07-14 13:26:18 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswal84366c52016-03-23 19:40:35 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswal84366c52016-03-23 19:40:35 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
62import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
Bharat saraswal250a7472016-05-12 13:16:57 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053066import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EDIT_CONTENT_MASK;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053067import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053068import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053069import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
73import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053074import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
75import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
76import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053077import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053078import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
79import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
80import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053081import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053082import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053083import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053084import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
85import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
86import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Shankara-Huaweib7564772016-08-02 18:13:13 +053087import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Bharat saraswal8beac342016-08-04 02:00:03 +053088import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getNodesPackage;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053089import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
Shankara-Huawei234cd092016-07-14 11:35:34 +053090import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053091import static org.onosproject.yangutils.utils.UtilConstants.ERROR_MSG_FOR_GEN_CODE;
janani bb3be1332016-08-03 16:40:01 +053092import static org.onosproject.yangutils.utils.UtilConstants.LEAFREF;
Bharat saraswal84366c52016-03-23 19:40:35 +053093import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +053094import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal84366c52016-03-23 19:40:35 +053095import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053096import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053097import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +053098import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
99import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530100import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
101import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
Bharat saraswal94844d62016-10-13 13:28:03 +0530102import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CLASS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530103import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530104import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
105import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530106import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530107import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530108import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530109import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530110import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
111import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
112import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
Bharat saraswal84366c52016-03-23 19:40:35 +0530113import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530114import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg;
Bharat saraswal84366c52016-03-23 19:40:35 +0530115
116/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530117 * Represents utilities for java file generator.
Bharat saraswal84366c52016-03-23 19:40:35 +0530118 */
119public final class JavaFileGeneratorUtils {
120
121 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530122 * Creates an instance of java file generator util.
Bharat saraswal84366c52016-03-23 19:40:35 +0530123 */
124 private JavaFileGeneratorUtils() {
125 }
126
127 /**
128 * Returns a file object for generated file.
129 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530130 * @param filePath file package path
131 * @param fileName file name
132 * @param extension file extension
133 * @param handler cached file handle
Bharat saraswal84366c52016-03-23 19:40:35 +0530134 * @return file object
135 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530136 public static File getFileObject(String filePath, String fileName,
137 String extension,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530138 JavaFileInfoTranslator handler) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530139 return new File(handler.getBaseCodeGenPath() + filePath + SLASH +
140 fileName + extension);
Bharat saraswal84366c52016-03-23 19:40:35 +0530141 }
142
143 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530144 * Returns data stored in temporary files.
Bharat saraswal84366c52016-03-23 19:40:35 +0530145 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530146 * @param tempFiles temporary file types
147 * @param tempHandle temp java fragment files
148 * @param path absolute path
Bharat saraswal84366c52016-03-23 19:40:35 +0530149 * @return data stored in temporary files
150 * @throws IOException when failed to get the data from temporary file handle
151 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530152 static String getDataFromTempFileHandle(
153 int tempFiles, TempJavaFragmentFiles tempHandle, String path)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530154 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530155
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530156 TempJavaTypeFragmentFiles typeHandle = null;
157 if (tempHandle instanceof TempJavaTypeFragmentFiles) {
158 typeHandle = (TempJavaTypeFragmentFiles) tempHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530159 }
160
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530161 TempJavaBeanFragmentFiles beanHandle = null;
162 if (tempHandle instanceof TempJavaBeanFragmentFiles) {
163 beanHandle = (TempJavaBeanFragmentFiles) tempHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530164 }
165
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530166 TempJavaServiceFragmentFiles serviceHandle = null;
167 if (tempHandle instanceof TempJavaServiceFragmentFiles) {
168 serviceHandle = (TempJavaServiceFragmentFiles) tempHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530169 }
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530170
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530171 TempJavaEventFragmentFiles eventHandle = null;
172 if (tempHandle instanceof TempJavaEventFragmentFiles) {
173 eventHandle = (TempJavaEventFragmentFiles) tempHandle;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530174 }
175
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530176 if ((tempFiles & ATTRIBUTES_MASK) != 0) {
177 return tempHandle.getTemporaryDataFromFileHandle(
178 tempHandle.getAttributesTempFileHandle(),
179 path);
180 }
181 if ((tempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
182 return tempHandle.getTemporaryDataFromFileHandle(
183 tempHandle.getGetterInterfaceTempFileHandle(),
184 path);
185 }
186 if ((tempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
187 return tempHandle.getTemporaryDataFromFileHandle(
188 tempHandle.getSetterInterfaceTempFileHandle(),
189 path);
190 }
191 if ((tempFiles & GETTER_FOR_CLASS_MASK) != 0) {
192 return tempHandle.getTemporaryDataFromFileHandle(
193 tempHandle.getGetterImplTempFileHandle(),
194 path);
195 }
196 if ((tempFiles & SETTER_FOR_CLASS_MASK) != 0) {
197 return tempHandle.getTemporaryDataFromFileHandle(
198 tempHandle.getSetterImplTempFileHandle(),
199 path);
200 }
201 if ((tempFiles & ADD_TO_LIST_INTERFACE_MASK) != 0) {
202 return tempHandle.getTemporaryDataFromFileHandle(
203 tempHandle.getAddToListInterfaceTempFileHandle(),
204 path);
205 }
206 if ((tempFiles & ADD_TO_LIST_IMPL_MASK) != 0) {
207 return tempHandle.getTemporaryDataFromFileHandle(
208 tempHandle.getAddToListImplTempFileHandle(),
209 path);
210 }
211 if ((tempFiles & FILTER_CONTENT_MATCH_FOR_LEAF_MASK) != 0) {
212 return tempHandle.getTemporaryDataFromFileHandle(
213 tempHandle.getSubtreeFilteringForLeafTempFileHandle(),
214 path);
215 }
216 if ((tempFiles & FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK) != 0) {
217 return tempHandle.getTemporaryDataFromFileHandle(
218 tempHandle.getGetSubtreeFilteringForListTempFileHandle(),
219 path);
220 }
221 if ((tempFiles & FILTER_CONTENT_MATCH_FOR_NODES_MASK) != 0) {
222 return tempHandle.getTemporaryDataFromFileHandle(
223 tempHandle.getGetSubtreeFilteringForChildNodeTempFileHandle(),
224 path);
225 }
226 if ((tempFiles & EDIT_CONTENT_MASK) != 0) {
227 return tempHandle.getTemporaryDataFromFileHandle(
228 tempHandle.getEditContentTempFileHandle(),
229 path);
230 }
231 if ((tempFiles & LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK) != 0) {
232 return tempHandle.getTemporaryDataFromFileHandle(
233 tempHandle.getLeafIdAttributeTempFileHandle(),
234 path);
235 }
236 if ((tempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
237 if (beanHandle == null) {
238 throw new TranslatorException("Required constructor info is" +
239 " missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530240 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530241 return beanHandle.getTemporaryDataFromFileHandle(
242 beanHandle.getConstructorImplTempFileHandle(),
243 path);
244 }
245 if ((tempFiles & HASH_CODE_IMPL_MASK) != 0) {
246 return tempHandle.getTemporaryDataFromFileHandle(
247 tempHandle.getHashCodeImplTempFileHandle(),
248 path);
249 }
250 if ((tempFiles & EQUALS_IMPL_MASK) != 0) {
251 return tempHandle.getTemporaryDataFromFileHandle(
252 tempHandle.getEqualsImplTempFileHandle(),
253 path);
254 }
255 if ((tempFiles & TO_STRING_IMPL_MASK) != 0) {
256 return tempHandle.getTemporaryDataFromFileHandle(
257 tempHandle.getToStringImplTempFileHandle(),
258 path);
259 }
260 if ((tempFiles & OF_STRING_IMPL_MASK) != 0) {
261 if (typeHandle == null) {
262 throw new TranslatorException("Required of string implementation" +
263 " info is missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530264 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530265 return typeHandle.getTemporaryDataFromFileHandle(
266 typeHandle.getOfStringImplTempFileHandle(), path);
267 }
268 if ((tempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
269 if (typeHandle == null) {
270 throw new TranslatorException("Required constructor implementation" +
271 " info is missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530272 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530273 return typeHandle.getTemporaryDataFromFileHandle(
274 typeHandle.getConstructorForTypeTempFileHandle(),
275 path);
276 }
277 if ((tempFiles & FROM_STRING_IMPL_MASK) != 0) {
278 return tempHandle.getTemporaryDataFromFileHandle(
279 tempHandle.getFromStringImplTempFileHandle(),
280 path);
281 }
282 if ((tempFiles & ENUM_IMPL_MASK) != 0) {
283 if (!(tempHandle instanceof TempJavaEnumerationFragmentFiles)) {
Bharat saraswal250a7472016-05-12 13:16:57 +0530284 throw new TranslatorException("Required enum info is missing.");
285 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530286 TempJavaEnumerationFragmentFiles enumHandle =
287 (TempJavaEnumerationFragmentFiles) tempHandle;
288 return enumHandle.getTemporaryDataFromFileHandle(
289 enumHandle.getEnumClassTempFileHandle(), path);
290 }
291 if ((tempFiles & RPC_INTERFACE_MASK) != 0) {
292 if (serviceHandle == null) {
293 throw new TranslatorException("Required rpc interface info is" +
294 " missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530295 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530296 return serviceHandle.getTemporaryDataFromFileHandle(
297 serviceHandle.getRpcInterfaceTempFileHandle(),
298 path);
299 }
300 if ((tempFiles & EVENT_ENUM_MASK) != 0) {
301 if (eventHandle == null) {
302 throw new TranslatorException(
303 "Required event enum implementation info is missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530304 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530305 return eventHandle.getTemporaryDataFromFileHandle(
306 eventHandle.getEventEnumTempFileHandle(),
307 path);
308 }
309 if ((tempFiles & EVENT_METHOD_MASK) != 0) {
310 if (eventHandle == null) {
311 throw new TranslatorException(
312 "Required event method implementation info is missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530313 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530314 return eventHandle.getTemporaryDataFromFileHandle(
315 eventHandle.getEventMethodTempFileHandle(),
316 path);
317 }
318 if ((tempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
319 if (eventHandle == null) {
320 throw new TranslatorException(
321 "Required event subject getter implementation info is" +
322 " missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530323 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530324 return eventHandle.getTemporaryDataFromFileHandle(
325 eventHandle.getEventSubjectGetterTempFileHandle(),
326 path);
327 }
328 if ((tempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
329 if (eventHandle == null) {
330 throw new TranslatorException(
331 "Required event subject setter implementation info is" +
332 " missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530333 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530334 return eventHandle.getTemporaryDataFromFileHandle(
335 eventHandle.getEventSubjectSetterTempFileHandle(),
336 path);
337 }
338 if ((tempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
339 if (eventHandle == null) {
340 throw new TranslatorException(
341 "Required event subject attribute implementation info is" +
342 " missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530343 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530344 return eventHandle.getTemporaryDataFromFileHandle(
345 eventHandle.getEventSubjectAttributeTempFileHandle(),
346 path);
Bharat saraswal84366c52016-03-23 19:40:35 +0530347 }
348 return null;
349 }
350
351 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530352 * Initiates generation of file based on generated file type.
Bharat saraswal84366c52016-03-23 19:40:35 +0530353 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530354 * @param file generated file
355 * @param className generated file class name
356 * @param genType generated file type
357 * @param imports imports for the file
358 * @param pkg generated file package
Bharat saraswal84366c52016-03-23 19:40:35 +0530359 * @throws IOException when fails to generate a file
360 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530361 public static void initiateJavaFileGeneration(File file, String className,
362 int genType, List<String> imports,
363 String pkg)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530364 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530365
Bharat saraswale3175d32016-08-31 17:50:11 +0530366 if (file.exists()) {
367 throw new IOException(" file " + file.getName() + " is already generated." +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530368 ERROR_MSG_FOR_GEN_CODE);
Bharat saraswale3175d32016-08-31 17:50:11 +0530369 }
370
Bharat saraswal039f59c2016-07-14 21:57:13 +0530371 boolean isFileCreated;
Bharat saraswal84366c52016-03-23 19:40:35 +0530372 try {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530373 isFileCreated = file.createNewFile();
374 if (!isFileCreated) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530375 throw new IOException("Failed to create " + file.getName() +
376 " class file.");
Bharat saraswal039f59c2016-07-14 21:57:13 +0530377 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530378 appendContents(file, className, genType, imports, pkg);
Bharat saraswal84366c52016-03-23 19:40:35 +0530379 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530380 throw new IOException("Failed to append contents in " + file.getName() +
381 " class file.");
Bharat saraswal84366c52016-03-23 19:40:35 +0530382 }
383 }
384
385 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530386 * Initiates generation of file based on generated file type.
387 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530388 * @param file generated file
389 * @param genType generated file type
390 * @param imports imports for the file
391 * @param curNode current YANG node
392 * @param name class name
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530393 * @throws IOException when fails to generate a file
394 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530395 public static void initiateJavaFileGeneration(File file, int genType,
396 List<String> imports,
397 YangNode curNode, String name)
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530398 throws IOException {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530399
Bharat saraswale3175d32016-08-31 17:50:11 +0530400 if (file.exists()) {
401 throw new IOException(" file " + file.getName() + " is already generated." +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530402 ERROR_MSG_FOR_GEN_CODE);
Bharat saraswale3175d32016-08-31 17:50:11 +0530403 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530404 boolean isFileCreated;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530405 try {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530406 isFileCreated = file.createNewFile();
407 if (!isFileCreated) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530408 throw new IOException("Failed to create " + file.getName() +
409 " class file.");
Bharat saraswal039f59c2016-07-14 21:57:13 +0530410 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530411 appendContents(file, genType, imports, curNode, name);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530412 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530413 throw new IOException("Failed to append contents in " + file.getName() +
414 " class file.");
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530415 }
416 }
417
418 /**
Bharat saraswal84366c52016-03-23 19:40:35 +0530419 * Appends all the contents into a generated java file.
420 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530421 * @param file generated file
422 * @param genType generated file type
sangyun-hanf352f532016-05-30 19:33:27 +0900423 * @param importsList list of java imports
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530424 * @param curNode current YANG node
425 * @param className class name
Shankara-Huaweib7564772016-08-02 18:13:13 +0530426 * @throws IOException when fails to do IO operations
Bharat saraswal84366c52016-03-23 19:40:35 +0530427 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530428 private static void appendContents(File file, int genType,
429 List<String> importsList, YangNode curNode,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530430 String className)
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530431 throws IOException {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530432
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530433 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode)
434 .getJavaFileInfo();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530435
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530436 String name = javaFileInfo.getJavaName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530437 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo
438 .getPackageFilePath();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530439
Bharat saraswal039f59c2016-07-14 21:57:13 +0530440 String pkgString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530441 if (genType == GENERATE_EVENT_CLASS ||
442 genType == GENERATE_EVENT_LISTENER_INTERFACE ||
443 genType == GENERATE_EVENT_SUBJECT_CLASS) {
444 pkgString = parsePackageString((path + PERIOD + name)
445 .toLowerCase(), importsList);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530446 } else {
447 pkgString = parsePackageString(path, importsList);
448 }
sangyun-hanf352f532016-05-30 19:33:27 +0900449 switch (genType) {
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530450 case INTERFACE_MASK:
Bharat saraswal039f59c2016-07-14 21:57:13 +0530451 appendHeaderContents(file, pkgString, importsList);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530452 write(file, genType, INTERFACE, curNode, className);
453 break;
Bharat saraswal8beac342016-08-04 02:00:03 +0530454 case DEFAULT_CLASS_MASK:
Bharat saraswald14cbe82016-07-14 13:26:18 +0530455 appendHeaderContents(file, pkgString, importsList);
Bharat saraswal94844d62016-10-13 13:28:03 +0530456 write(file, genType, DEFAULT_CLASS, curNode, className);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530457 break;
458 case BUILDER_CLASS_MASK:
459 write(file, genType, BUILDER_CLASS, curNode, className);
460 break;
461 case BUILDER_INTERFACE_MASK:
462 write(file, genType, BUILDER_INTERFACE, curNode, className);
463 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530464 case GENERATE_SERVICE_AND_MANAGER:
465 appendHeaderContents(file, pkgString, importsList);
466 write(file, genType, RPC_INTERFACE, curNode, className);
467 break;
468 case GENERATE_EVENT_CLASS:
469 appendHeaderContents(file, pkgString, importsList);
470 write(file, genType, EVENT, curNode, className);
471 break;
472 case GENERATE_EVENT_LISTENER_INTERFACE:
473 appendHeaderContents(file, pkgString, importsList);
474 write(file, genType, EVENT_LISTENER, curNode, className);
475 break;
476 case GENERATE_EVENT_SUBJECT_CLASS:
477 appendHeaderContents(file, pkgString, importsList);
478 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
479 break;
Shankara-Huawei234cd092016-07-14 11:35:34 +0530480 case GENERATE_IDENTITY_CLASS:
481 appendHeaderContents(file, pkgString, importsList);
482 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
483 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
484 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530485 default:
486 break;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530487 }
488 }
489
490 /**
491 * Appends all the contents into a generated java file.
492 *
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530493 * @param file generated file
494 * @param fileName generated file name
495 * @param genType generated file type
496 * @param importsList list of java imports
497 * @param pkg generated file package
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530498 * @throws IOException when fails to append contents
499 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530500 private static void appendContents(File file, String fileName, int genType,
501 List<String> importsList, String pkg)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530502 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530503
504 String pkgString = parsePackageString(pkg, importsList);
505
sangyun-hanf352f532016-05-30 19:33:27 +0900506 switch (genType) {
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530507 case GENERATE_TYPEDEF_CLASS:
508 appendHeaderContents(file, pkgString, importsList);
Bharat saraswal94844d62016-10-13 13:28:03 +0530509 write(file, fileName, genType, DEFAULT_CLASS);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530510 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530511 case GENERATE_UNION_CLASS:
512 appendHeaderContents(file, pkgString, importsList);
Bharat saraswal94844d62016-10-13 13:28:03 +0530513 write(file, fileName, genType, DEFAULT_CLASS);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530514 break;
515 case GENERATE_ENUM_CLASS:
516 appendHeaderContents(file, pkgString, importsList);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530517 write(file, fileName, genType, ENUM_CLASS);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530518 break;
519 default:
520 break;
Bharat saraswal84366c52016-03-23 19:40:35 +0530521 }
522 }
523
524 /**
525 * Removes base directory path from package and generates package string for file.
526 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530527 * @param javaPkg generated java package
Bharat saraswal84366c52016-03-23 19:40:35 +0530528 * @param importsList list of imports
529 * @return package string
530 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530531 private static String parsePackageString(String javaPkg,
532 List<String> importsList) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530533
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530534 javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
Bharat saraswal84366c52016-03-23 19:40:35 +0530535 if (importsList != null) {
536 if (!importsList.isEmpty()) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530537 return PACKAGE + SPACE + javaPkg + SEMI_COLON + NEW_LINE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530538 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530539 return PACKAGE + SPACE + javaPkg + SEMI_COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +0530540 }
541 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530542 return PACKAGE + SPACE + javaPkg + SEMI_COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +0530543 }
544 }
545
546 /**
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530547 * Appends other contents to interface, impl and typedef classes.
548 * for example : ONOS copyright, imports and package.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530549 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530550 * @param file generated file
551 * @param pkg generated package
Bharat saraswal84366c52016-03-23 19:40:35 +0530552 * @param importsList list of imports
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530553 * @throws IOException when fails to append contents
Bharat saraswal84366c52016-03-23 19:40:35 +0530554 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530555 private static void appendHeaderContents(File file, String pkg,
556 List<String> importsList)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530557 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530558
559 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
560 insertDataIntoJavaFile(file, pkg);
561
562 /*
Bharat saraswal039f59c2016-07-14 21:57:13 +0530563 * TODO: add the file header using comments for snippet of yang file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530564 * JavaCodeSnippetGen.getFileHeaderComment
565 */
566
567 if (importsList != null) {
568 insertDataIntoJavaFile(file, NEW_LINE);
569 for (String imports : importsList) {
570 insertDataIntoJavaFile(file, imports);
571 }
572 }
573 }
574
575 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530576 * Writes data to the specific generated file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530577 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530578 * @param file generated file
579 * @param genType generated file type
Bharat saraswal84366c52016-03-23 19:40:35 +0530580 * @param javaDocType java doc type
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530581 * @param curNode current YANG node
582 * @param fileName file name
Bharat saraswal84366c52016-03-23 19:40:35 +0530583 * @throws IOException when fails to write into a file
584 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530585 private static void write(File file, int genType, JavaDocType javaDocType,
586 YangNode curNode, String fileName)
Bharat saraswal84366c52016-03-23 19:40:35 +0530587 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530588 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName,
589 false, null));
590 insertDataIntoJavaFile(file, generateClassDefinition(genType,
591 fileName, curNode));
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530592 }
593
594 /**
595 * Writes data to the specific generated file.
596 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530597 * @param file generated file
598 * @param fileName file name
599 * @param genType generated file type
600 * @param javaDocType java doc type
sangyun-han54cb8322016-06-01 14:12:07 +0900601 * @throws IOException when fails to write into a file
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530602 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530603 private static void write(File file, String fileName, int genType,
604 JavaDocType javaDocType) throws IOException {
605 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false,
606 null));
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530607 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswal84366c52016-03-23 19:40:35 +0530608 }
609
Bharat saraswalaf413b82016-07-14 15:18:20 +0530610 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530611 * Returns set of node identifiers.
612 *
613 * @param parent parent node
614 * @return set of node identifiers
615 */
Bharat saraswal039f59c2016-07-14 21:57:13 +0530616 static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530617
618 List<YangAtomicPath> targets = new ArrayList<>();
619 YangNodeIdentifier nodeId;
620 List<YangAugment> augments = getListOfAugments(parent);
621 for (YangAugment augment : augments) {
622 nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
623
624 if (validateNodeIdentifierInSet(nodeId, targets)) {
625 targets.add(augment.getTargetNode().get(0));
626 }
627 }
628 return targets;
629 }
630
631 /* Returns list of augments.*/
632 private static List<YangAugment> getListOfAugments(YangNode parent) {
633 List<YangAugment> augments = new ArrayList<>();
634 YangNode child = parent.getChild();
635 while (child != null) {
636 if (child instanceof YangAugment) {
637 augments.add((YangAugment) child);
638 }
639 child = child.getNextSibling();
640 }
641 return augments;
642 }
643
644 /*Validates the set for duplicate names of node identifiers.*/
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530645 private static boolean validateNodeIdentifierInSet(
646 YangNodeIdentifier nodeId, List<YangAtomicPath> targets) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530647 boolean isPresent = true;
648 for (YangAtomicPath target : targets) {
649 if (target.getNodeIdentifier().getName().equals(nodeId.getName())) {
650 if (target.getNodeIdentifier().getPrefix() != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530651 isPresent = !target.getNodeIdentifier().getPrefix()
652 .equals(nodeId.getPrefix());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530653 } else {
654 isPresent = nodeId.getPrefix() != null;
655 }
656 }
657 }
658 return isPresent;
659 }
660
661 /**
662 * Adds resolved augmented node imports to manager class.
663 *
664 * @param parent parent node
665 */
666 public static void addResolvedAugmentedDataNodeImports(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530667 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
Bharat saraswal94844d62016-10-13 13:28:03 +0530668 if (targets.isEmpty()) {
669 return;
670 }
671
672 YangNode node = targets.get(0).getResolvedNode();
673 if (node instanceof YangNotification) {
674 return;
675 }
676
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530677 TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = (
678 (JavaCodeGeneratorInfo) parent)
Bharat saraswalaf413b82016-07-14 15:18:20 +0530679 .getTempJavaCodeFragmentFiles();
680 YangNode augmentedNode;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530681 JavaQualifiedTypeInfoTranslator typeInfo;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530682 String curNodeName;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530683 JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent)
684 .getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530685 for (YangAtomicPath nodeId : targets) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530686 augmentedNode = nodeId.getResolvedNode().getParent();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530687 curNodeName = getCurNodeName(augmentedNode, parentInfo
688 .getPluginConfig());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530689
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530690 typeInfo =
691 getQTypeInfoOfNode(
692 augmentedNode, curNodeName + OP_PARAM,
693 parentInfo.getPluginConfig());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530694
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530695 tempJavaCodeFragmentFiles.getServiceTempFiles()
696 .getJavaImportData().addImportInfo(
697 typeInfo, parentInfo.getJavaName(),
698 parentInfo.getPackage());
699 typeInfo =
700 getQTypeInfoOfNode(
701 augmentedNode, curNodeName, parentInfo
702 .getPluginConfig());
703
704 tempJavaCodeFragmentFiles.getServiceTempFiles()
705 .getJavaImportData().addImportInfo(
706 typeInfo, parentInfo.getJavaName(),
707 parentInfo.getPackage());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530708 }
709 }
710
711 /**
712 * Returns qualified type info of augmented node.
713 *
714 * @param augmentedNode augmented node
715 * @param curNodeName current node name
716 * @param pluginConfig plugin configurations
717 * @return qualified type info of augmented node
718 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530719 private static JavaQualifiedTypeInfoTranslator getQTypeInfoOfNode(
720 YangNode augmentedNode, String curNodeName, YangPluginConfig pluginConfig) {
721 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo =
722 getQualifiedTypeInfoOfCurNode(augmentedNode,
723 curNodeName);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530724 if (javaQualifiedTypeInfo.getPkgInfo() == null) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530725 javaQualifiedTypeInfo.setPkgInfo(getNodesPackage(augmentedNode,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530726 pluginConfig));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530727 }
728 return javaQualifiedTypeInfo;
729 }
730
731 /**
732 * Validates if augmented node is imported in parent node.
733 *
734 * @param javaQualifiedTypeInfo qualified type info
735 * @param importData import data
736 * @return true if present in imports
737 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530738 private static boolean validateQualifiedInfoOfAugmentedNode(
739 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo,
740 JavaImportData importData) {
741 for (JavaQualifiedTypeInfoTranslator curImportInfo : importData
742 .getImportSet()) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530743 if (curImportInfo.getClassInfo()
744 .contentEquals(javaQualifiedTypeInfo.getClassInfo())) {
745 return curImportInfo.getPkgInfo()
746 .contentEquals(javaQualifiedTypeInfo.getPkgInfo());
747 }
748 }
749 return true;
750 }
751
752 /**
753 * Return augmented class name for data methods in manager and service.
754 *
755 * @param augmentedNode augmented node
756 * @param parent parent node
757 * @return augmented class name for data methods in manager and service
758 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530759 static String getAugmentedClassNameForDataMethods(YangNode augmentedNode,
760 YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530761 String curNodeName;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530762 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530763 JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent)
764 .getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530765 YangPluginConfig pluginConfig = parentInfo.getPluginConfig();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530766 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = (
767 (JavaCodeGeneratorInfo) parent).getTempJavaCodeFragmentFiles()
768 .getServiceTempFiles();
769 curNodeName = getCurNodeName(augmentedNode, pluginConfig);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530770
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530771 javaQualifiedTypeInfo = getQTypeInfoOfNode(augmentedNode,
772 getCapitalCase(curNodeName),
773 parentInfo.getPluginConfig());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530774 if (validateQualifiedInfoOfAugmentedNode(javaQualifiedTypeInfo,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530775 tempJavaServiceFragmentFiles
776 .getJavaImportData())) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530777 return javaQualifiedTypeInfo.getClassInfo();
778 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530779 return javaQualifiedTypeInfo.getPkgInfo() + PERIOD +
780 javaQualifiedTypeInfo.getClassInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530781 }
782 }
783
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530784 //Returns class name of current node
785 static String getCurNodeName(YangNode node, YangPluginConfig config) {
786 if (((JavaFileInfoContainer) node).getJavaFileInfo()
787 .getJavaName() != null) {
788 return getCapitalCase(((JavaFileInfoContainer) node)
789 .getJavaFileInfo()
790 .getJavaName());
791 } else {
792 return getCapitalCase(getCamelCase(node.getName(), config
793 .getConflictResolver()));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530794 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530795 }
796
janani bb3be1332016-08-03 16:40:01 +0530797 /**
798 * Checks if the type name is leafref and returns the effective type name.
799 *
800 * @param attributeName name of the current type
801 * @param attributeType effective type
802 * @return name of the effective type
803 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530804 public static String isTypeNameLeafref(String attributeName,
805 YangType<?> attributeType) {
janani bb3be1332016-08-03 16:40:01 +0530806 if (attributeName.equalsIgnoreCase(LEAFREF)) {
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530807 YangLeafRef leafRef = (YangLeafRef) attributeType.getDataTypeExtendedInfo();
Bharat saraswal94844d62016-10-13 13:28:03 +0530808 if (leafRef != null && !leafRef.isInGrouping()) {
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530809 return attributeType.getDataTypeName();
810 }
janani bb3be1332016-08-03 16:40:01 +0530811 }
812 return attributeName;
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530813 // TODO handle union scenario, having multiple leafref.
janani bb3be1332016-08-03 16:40:01 +0530814 }
815
816 /**
817 * Checks if the type is leafref and returns the effective type.
818 *
819 * @param attributeType current type
820 * @return effective type
821 */
822 public static YangType isTypeLeafref(YangType<?> attributeType) {
823 if (attributeType.getDataType() == YangDataTypes.LEAFREF) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530824 YangLeafRef leafRef = (YangLeafRef) attributeType
825 .getDataTypeExtendedInfo();
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530826 if (!leafRef.isInGrouping()) {
827 return leafRef.getEffectiveDataType();
828 }
janani bb3be1332016-08-03 16:40:01 +0530829 }
830 return attributeType;
831 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530832}