blob: fe6a40bf72e91ac824fa0d1f75d8f2fc5ea5b6da [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 saraswal0663aff2016-10-18 23:16:14 +053019import org.onosproject.yangutils.datamodel.InvalidOpTypeHolder;
Bharat saraswalaf413b82016-07-14 15:18:20 +053020import org.onosproject.yangutils.datamodel.YangAtomicPath;
Bharat saraswald14cbe82016-07-14 13:26:18 +053021import org.onosproject.yangutils.datamodel.YangAugment;
janani bb3be1332016-08-03 16:40:01 +053022import org.onosproject.yangutils.datamodel.YangLeafRef;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053023import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalaf413b82016-07-14 15:18:20 +053024import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
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;
Bharat saraswala5c28512016-11-10 21:09:23 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_KEY_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswal84366c52016-03-23 19:40:35 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswal84366c52016-03-23 19:40:35 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
63import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
Bharat saraswal250a7472016-05-12 13:16:57 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053066import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053067import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EDIT_CONTENT_MASK;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053068import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053069import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053070import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
73import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
74import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053075import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
76import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
77import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053078import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053079import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
80import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
81import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053082import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053083import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053084import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053085import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
86import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
87import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Shankara-Huaweib7564772016-08-02 18:13:13 +053088import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Bharat saraswal8beac342016-08-04 02:00:03 +053089import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getNodesPackage;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053090import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
Vidyashree Ramad2c7f8d2016-11-02 12:38:12 +053091import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053092import static org.onosproject.yangutils.utils.UtilConstants.ERROR_MSG_FOR_GEN_CODE;
janani bb3be1332016-08-03 16:40:01 +053093import static org.onosproject.yangutils.utils.UtilConstants.LEAFREF;
Bharat saraswal84366c52016-03-23 19:40:35 +053094import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +053095import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal84366c52016-03-23 19:40:35 +053096import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053097import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053098import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Vidyashree Ramad2c7f8d2016-11-02 12:38:12 +053099import static org.onosproject.yangutils.utils.UtilConstants.SET_METHOD_PREFIX;
Bharat saraswal84366c52016-03-23 19:40:35 +0530100import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
101import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530102import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
103import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
Bharat saraswal94844d62016-10-13 13:28:03 +0530104import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CLASS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530105import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530106import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
107import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530108import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530109import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530110import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530111import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530112import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
113import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
114import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
Bharat saraswal84366c52016-03-23 19:40:35 +0530115import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530116import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg;
Bharat saraswal84366c52016-03-23 19:40:35 +0530117
118/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530119 * Represents utilities for java file generator.
Bharat saraswal84366c52016-03-23 19:40:35 +0530120 */
121public final class JavaFileGeneratorUtils {
122
123 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530124 * Creates an instance of java file generator util.
Bharat saraswal84366c52016-03-23 19:40:35 +0530125 */
126 private JavaFileGeneratorUtils() {
127 }
128
129 /**
130 * Returns a file object for generated file.
131 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530132 * @param filePath file package path
133 * @param fileName file name
134 * @param extension file extension
135 * @param handler cached file handle
Bharat saraswal84366c52016-03-23 19:40:35 +0530136 * @return file object
137 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530138 public static File getFileObject(String filePath, String fileName,
139 String extension,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530140 JavaFileInfoTranslator handler) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530141 return new File(handler.getBaseCodeGenPath() + filePath + SLASH +
142 fileName + extension);
Bharat saraswal84366c52016-03-23 19:40:35 +0530143 }
144
145 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530146 * Returns data stored in temporary files.
Bharat saraswal84366c52016-03-23 19:40:35 +0530147 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530148 * @param tempFiles temporary file types
149 * @param tempHandle temp java fragment files
150 * @param path absolute path
Bharat saraswal84366c52016-03-23 19:40:35 +0530151 * @return data stored in temporary files
152 * @throws IOException when failed to get the data from temporary file handle
153 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530154 static String getDataFromTempFileHandle(
155 int tempFiles, TempJavaFragmentFiles tempHandle, String path)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530156 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530157
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530158 TempJavaTypeFragmentFiles typeHandle = null;
159 if (tempHandle instanceof TempJavaTypeFragmentFiles) {
160 typeHandle = (TempJavaTypeFragmentFiles) tempHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530161 }
162
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530163 TempJavaBeanFragmentFiles beanHandle = null;
164 if (tempHandle instanceof TempJavaBeanFragmentFiles) {
165 beanHandle = (TempJavaBeanFragmentFiles) tempHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530166 }
167
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530168 TempJavaServiceFragmentFiles serviceHandle = null;
169 if (tempHandle instanceof TempJavaServiceFragmentFiles) {
170 serviceHandle = (TempJavaServiceFragmentFiles) tempHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530171 }
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530172
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530173 TempJavaEventFragmentFiles eventHandle = null;
174 if (tempHandle instanceof TempJavaEventFragmentFiles) {
175 eventHandle = (TempJavaEventFragmentFiles) tempHandle;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530176 }
177
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530178 if ((tempFiles & ATTRIBUTES_MASK) != 0) {
179 return tempHandle.getTemporaryDataFromFileHandle(
180 tempHandle.getAttributesTempFileHandle(),
181 path);
182 }
183 if ((tempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
184 return tempHandle.getTemporaryDataFromFileHandle(
185 tempHandle.getGetterInterfaceTempFileHandle(),
186 path);
187 }
188 if ((tempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
189 return tempHandle.getTemporaryDataFromFileHandle(
190 tempHandle.getSetterInterfaceTempFileHandle(),
191 path);
192 }
193 if ((tempFiles & GETTER_FOR_CLASS_MASK) != 0) {
194 return tempHandle.getTemporaryDataFromFileHandle(
195 tempHandle.getGetterImplTempFileHandle(),
196 path);
197 }
198 if ((tempFiles & SETTER_FOR_CLASS_MASK) != 0) {
199 return tempHandle.getTemporaryDataFromFileHandle(
200 tempHandle.getSetterImplTempFileHandle(),
201 path);
202 }
203 if ((tempFiles & ADD_TO_LIST_INTERFACE_MASK) != 0) {
204 return tempHandle.getTemporaryDataFromFileHandle(
205 tempHandle.getAddToListInterfaceTempFileHandle(),
206 path);
207 }
208 if ((tempFiles & ADD_TO_LIST_IMPL_MASK) != 0) {
209 return tempHandle.getTemporaryDataFromFileHandle(
210 tempHandle.getAddToListImplTempFileHandle(),
211 path);
212 }
213 if ((tempFiles & FILTER_CONTENT_MATCH_FOR_LEAF_MASK) != 0) {
214 return tempHandle.getTemporaryDataFromFileHandle(
215 tempHandle.getSubtreeFilteringForLeafTempFileHandle(),
216 path);
217 }
218 if ((tempFiles & FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK) != 0) {
219 return tempHandle.getTemporaryDataFromFileHandle(
220 tempHandle.getGetSubtreeFilteringForListTempFileHandle(),
221 path);
222 }
223 if ((tempFiles & FILTER_CONTENT_MATCH_FOR_NODES_MASK) != 0) {
224 return tempHandle.getTemporaryDataFromFileHandle(
225 tempHandle.getGetSubtreeFilteringForChildNodeTempFileHandle(),
226 path);
227 }
228 if ((tempFiles & EDIT_CONTENT_MASK) != 0) {
229 return tempHandle.getTemporaryDataFromFileHandle(
230 tempHandle.getEditContentTempFileHandle(),
231 path);
232 }
233 if ((tempFiles & LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK) != 0) {
234 return tempHandle.getTemporaryDataFromFileHandle(
235 tempHandle.getLeafIdAttributeTempFileHandle(),
236 path);
237 }
238 if ((tempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
239 if (beanHandle == null) {
240 throw new TranslatorException("Required constructor info is" +
241 " missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530242 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530243 return beanHandle.getTemporaryDataFromFileHandle(
244 beanHandle.getConstructorImplTempFileHandle(),
245 path);
246 }
247 if ((tempFiles & HASH_CODE_IMPL_MASK) != 0) {
248 return tempHandle.getTemporaryDataFromFileHandle(
249 tempHandle.getHashCodeImplTempFileHandle(),
250 path);
251 }
252 if ((tempFiles & EQUALS_IMPL_MASK) != 0) {
253 return tempHandle.getTemporaryDataFromFileHandle(
254 tempHandle.getEqualsImplTempFileHandle(),
255 path);
256 }
257 if ((tempFiles & TO_STRING_IMPL_MASK) != 0) {
258 return tempHandle.getTemporaryDataFromFileHandle(
259 tempHandle.getToStringImplTempFileHandle(),
260 path);
261 }
262 if ((tempFiles & OF_STRING_IMPL_MASK) != 0) {
263 if (typeHandle == null) {
264 throw new TranslatorException("Required of string implementation" +
265 " info is missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530266 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530267 return typeHandle.getTemporaryDataFromFileHandle(
268 typeHandle.getOfStringImplTempFileHandle(), path);
269 }
270 if ((tempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
271 if (typeHandle == null) {
272 throw new TranslatorException("Required constructor implementation" +
273 " info is missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530274 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530275 return typeHandle.getTemporaryDataFromFileHandle(
276 typeHandle.getConstructorForTypeTempFileHandle(),
277 path);
278 }
279 if ((tempFiles & FROM_STRING_IMPL_MASK) != 0) {
280 return tempHandle.getTemporaryDataFromFileHandle(
281 tempHandle.getFromStringImplTempFileHandle(),
282 path);
283 }
284 if ((tempFiles & ENUM_IMPL_MASK) != 0) {
285 if (!(tempHandle instanceof TempJavaEnumerationFragmentFiles)) {
Bharat saraswal250a7472016-05-12 13:16:57 +0530286 throw new TranslatorException("Required enum info is missing.");
287 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530288 TempJavaEnumerationFragmentFiles enumHandle =
289 (TempJavaEnumerationFragmentFiles) tempHandle;
290 return enumHandle.getTemporaryDataFromFileHandle(
291 enumHandle.getEnumClassTempFileHandle(), path);
292 }
293 if ((tempFiles & RPC_INTERFACE_MASK) != 0) {
294 if (serviceHandle == null) {
295 throw new TranslatorException("Required rpc interface info is" +
296 " missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530297 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530298 return serviceHandle.getTemporaryDataFromFileHandle(
299 serviceHandle.getRpcInterfaceTempFileHandle(),
300 path);
301 }
302 if ((tempFiles & EVENT_ENUM_MASK) != 0) {
303 if (eventHandle == null) {
304 throw new TranslatorException(
305 "Required event enum implementation info is missing.");
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530306 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530307 return eventHandle.getTemporaryDataFromFileHandle(
308 eventHandle.getEventEnumTempFileHandle(),
309 path);
310 }
311 if ((tempFiles & EVENT_METHOD_MASK) != 0) {
312 if (eventHandle == null) {
313 throw new TranslatorException(
314 "Required event method implementation info is missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530315 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530316 return eventHandle.getTemporaryDataFromFileHandle(
317 eventHandle.getEventMethodTempFileHandle(),
318 path);
319 }
320 if ((tempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
321 if (eventHandle == null) {
322 throw new TranslatorException(
323 "Required event subject getter implementation info is" +
324 " missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530325 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530326 return eventHandle.getTemporaryDataFromFileHandle(
327 eventHandle.getEventSubjectGetterTempFileHandle(),
328 path);
329 }
330 if ((tempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
331 if (eventHandle == null) {
332 throw new TranslatorException(
333 "Required event subject setter implementation info is" +
334 " missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530335 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530336 return eventHandle.getTemporaryDataFromFileHandle(
337 eventHandle.getEventSubjectSetterTempFileHandle(),
338 path);
339 }
340 if ((tempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
341 if (eventHandle == null) {
342 throw new TranslatorException(
343 "Required event subject attribute implementation info is" +
344 " missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530345 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530346 return eventHandle.getTemporaryDataFromFileHandle(
347 eventHandle.getEventSubjectAttributeTempFileHandle(),
348 path);
Bharat saraswal84366c52016-03-23 19:40:35 +0530349 }
350 return null;
351 }
352
353 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530354 * Initiates generation of file based on generated file type.
Bharat saraswal84366c52016-03-23 19:40:35 +0530355 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530356 * @param file generated file
357 * @param className generated file class name
358 * @param genType generated file type
359 * @param imports imports for the file
360 * @param pkg generated file package
Bharat saraswal84366c52016-03-23 19:40:35 +0530361 * @throws IOException when fails to generate a file
362 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530363 public static void initiateJavaFileGeneration(File file, String className,
364 int genType, List<String> imports,
365 String pkg)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530366 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530367
Bharat saraswale3175d32016-08-31 17:50:11 +0530368 if (file.exists()) {
369 throw new IOException(" file " + file.getName() + " is already generated." +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530370 ERROR_MSG_FOR_GEN_CODE);
Bharat saraswale3175d32016-08-31 17:50:11 +0530371 }
372
Bharat saraswal039f59c2016-07-14 21:57:13 +0530373 boolean isFileCreated;
Bharat saraswal84366c52016-03-23 19:40:35 +0530374 try {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530375 isFileCreated = file.createNewFile();
376 if (!isFileCreated) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530377 throw new IOException("Failed to create " + file.getName() +
378 " class file.");
Bharat saraswal039f59c2016-07-14 21:57:13 +0530379 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530380 appendContents(file, className, genType, imports, pkg);
Bharat saraswal84366c52016-03-23 19:40:35 +0530381 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530382 throw new IOException("Failed to append contents in " + file.getName() +
383 " class file.");
Bharat saraswal84366c52016-03-23 19:40:35 +0530384 }
385 }
386
387 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530388 * Initiates generation of file based on generated file type.
389 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530390 * @param file generated file
391 * @param genType generated file type
392 * @param imports imports for the file
393 * @param curNode current YANG node
394 * @param name class name
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530395 * @throws IOException when fails to generate a file
396 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530397 public static void initiateJavaFileGeneration(File file, int genType,
398 List<String> imports,
399 YangNode curNode, String name)
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530400 throws IOException {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530401
Bharat saraswale3175d32016-08-31 17:50:11 +0530402 if (file.exists()) {
403 throw new IOException(" file " + file.getName() + " is already generated." +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530404 ERROR_MSG_FOR_GEN_CODE);
Bharat saraswale3175d32016-08-31 17:50:11 +0530405 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530406 boolean isFileCreated;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530407 try {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530408 isFileCreated = file.createNewFile();
409 if (!isFileCreated) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530410 throw new IOException("Failed to create " + file.getName() +
411 " class file.");
Bharat saraswal039f59c2016-07-14 21:57:13 +0530412 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530413 appendContents(file, genType, imports, curNode, name);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530414 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530415 throw new IOException("Failed to append contents in " + file.getName() +
416 " class file.");
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530417 }
418 }
419
420 /**
Bharat saraswal84366c52016-03-23 19:40:35 +0530421 * Appends all the contents into a generated java file.
422 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530423 * @param file generated file
424 * @param genType generated file type
sangyun-hanf352f532016-05-30 19:33:27 +0900425 * @param importsList list of java imports
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530426 * @param curNode current YANG node
427 * @param className class name
Shankara-Huaweib7564772016-08-02 18:13:13 +0530428 * @throws IOException when fails to do IO operations
Bharat saraswal84366c52016-03-23 19:40:35 +0530429 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530430 private static void appendContents(File file, int genType,
431 List<String> importsList, YangNode curNode,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530432 String className)
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530433 throws IOException {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530434
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530435 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode)
436 .getJavaFileInfo();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530437
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530438 String name = javaFileInfo.getJavaName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530439 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo
440 .getPackageFilePath();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530441
Bharat saraswal039f59c2016-07-14 21:57:13 +0530442 String pkgString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530443 if (genType == GENERATE_EVENT_CLASS ||
444 genType == GENERATE_EVENT_LISTENER_INTERFACE ||
445 genType == GENERATE_EVENT_SUBJECT_CLASS) {
446 pkgString = parsePackageString((path + PERIOD + name)
447 .toLowerCase(), importsList);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530448 } else {
449 pkgString = parsePackageString(path, importsList);
450 }
sangyun-hanf352f532016-05-30 19:33:27 +0900451 switch (genType) {
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530452 case INTERFACE_MASK:
Bharat saraswal039f59c2016-07-14 21:57:13 +0530453 appendHeaderContents(file, pkgString, importsList);
Bharat saraswala5c28512016-11-10 21:09:23 +0530454 write(file, genType, INTERFACE, curNode, className, false);
455 break;
456 case GENERATE_KEY_CLASS:
457 appendHeaderContents(file, pkgString, importsList);
458 write(file, genType, DEFAULT_CLASS, curNode, className, false);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530459 break;
Bharat saraswal8beac342016-08-04 02:00:03 +0530460 case DEFAULT_CLASS_MASK:
Bharat saraswald14cbe82016-07-14 13:26:18 +0530461 appendHeaderContents(file, pkgString, importsList);
Bharat saraswald5b684f2016-11-17 13:06:26 +0530462 write(file, genType, DEFAULT_CLASS, curNode, className,
463 curNode.isOpTypeReq());
Bharat saraswald14cbe82016-07-14 13:26:18 +0530464 break;
465 case BUILDER_CLASS_MASK:
Bharat saraswala5c28512016-11-10 21:09:23 +0530466 write(file, genType, BUILDER_CLASS, curNode, className, false);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530467 break;
468 case BUILDER_INTERFACE_MASK:
Bharat saraswala5c28512016-11-10 21:09:23 +0530469 write(file, genType, BUILDER_INTERFACE, curNode, className, false);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530470 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530471 case GENERATE_SERVICE_AND_MANAGER:
472 appendHeaderContents(file, pkgString, importsList);
Bharat saraswala5c28512016-11-10 21:09:23 +0530473 write(file, genType, RPC_INTERFACE, curNode, className, false);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530474 break;
475 case GENERATE_EVENT_CLASS:
476 appendHeaderContents(file, pkgString, importsList);
Bharat saraswala5c28512016-11-10 21:09:23 +0530477 write(file, genType, EVENT, curNode, className, false);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530478 break;
479 case GENERATE_EVENT_LISTENER_INTERFACE:
480 appendHeaderContents(file, pkgString, importsList);
Bharat saraswala5c28512016-11-10 21:09:23 +0530481 write(file, genType, EVENT_LISTENER, curNode, className, false);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530482 break;
483 case GENERATE_EVENT_SUBJECT_CLASS:
484 appendHeaderContents(file, pkgString, importsList);
Bharat saraswala5c28512016-11-10 21:09:23 +0530485 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className, false);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530486 break;
Shankara-Huawei234cd092016-07-14 11:35:34 +0530487 case GENERATE_IDENTITY_CLASS:
488 appendHeaderContents(file, pkgString, importsList);
Bharat saraswala5c28512016-11-10 21:09:23 +0530489 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className, false);
Shankara-Huawei234cd092016-07-14 11:35:34 +0530490 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530491 default:
492 break;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530493 }
494 }
495
496 /**
497 * Appends all the contents into a generated java file.
498 *
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530499 * @param file generated file
500 * @param fileName generated file name
501 * @param genType generated file type
502 * @param importsList list of java imports
503 * @param pkg generated file package
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530504 * @throws IOException when fails to append contents
505 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530506 private static void appendContents(File file, String fileName, int genType,
507 List<String> importsList, String pkg)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530508 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530509
510 String pkgString = parsePackageString(pkg, importsList);
511
sangyun-hanf352f532016-05-30 19:33:27 +0900512 switch (genType) {
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530513 case GENERATE_TYPEDEF_CLASS:
514 appendHeaderContents(file, pkgString, importsList);
Bharat saraswal94844d62016-10-13 13:28:03 +0530515 write(file, fileName, genType, DEFAULT_CLASS);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530516 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530517 case GENERATE_UNION_CLASS:
518 appendHeaderContents(file, pkgString, importsList);
Bharat saraswal94844d62016-10-13 13:28:03 +0530519 write(file, fileName, genType, DEFAULT_CLASS);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530520 break;
521 case GENERATE_ENUM_CLASS:
522 appendHeaderContents(file, pkgString, importsList);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530523 write(file, fileName, genType, ENUM_CLASS);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530524 break;
525 default:
526 break;
Bharat saraswal84366c52016-03-23 19:40:35 +0530527 }
528 }
529
530 /**
531 * Removes base directory path from package and generates package string for file.
532 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530533 * @param javaPkg generated java package
Bharat saraswal84366c52016-03-23 19:40:35 +0530534 * @param importsList list of imports
535 * @return package string
536 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530537 private static String parsePackageString(String javaPkg,
538 List<String> importsList) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530539
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530540 javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
Bharat saraswal84366c52016-03-23 19:40:35 +0530541 if (importsList != null) {
542 if (!importsList.isEmpty()) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530543 return PACKAGE + SPACE + javaPkg + SEMI_COLON + NEW_LINE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530544 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530545 return PACKAGE + SPACE + javaPkg + SEMI_COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +0530546 }
547 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530548 return PACKAGE + SPACE + javaPkg + SEMI_COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +0530549 }
550 }
551
552 /**
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530553 * Appends other contents to interface, impl and typedef classes.
554 * for example : ONOS copyright, imports and package.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530555 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530556 * @param file generated file
557 * @param pkg generated package
Bharat saraswal84366c52016-03-23 19:40:35 +0530558 * @param importsList list of imports
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530559 * @throws IOException when fails to append contents
Bharat saraswal84366c52016-03-23 19:40:35 +0530560 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530561 private static void appendHeaderContents(File file, String pkg,
562 List<String> importsList)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530563 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530564
565 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
566 insertDataIntoJavaFile(file, pkg);
567
568 /*
Bharat saraswal039f59c2016-07-14 21:57:13 +0530569 * TODO: add the file header using comments for snippet of yang file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530570 * JavaCodeSnippetGen.getFileHeaderComment
571 */
572
573 if (importsList != null) {
574 insertDataIntoJavaFile(file, NEW_LINE);
575 for (String imports : importsList) {
576 insertDataIntoJavaFile(file, imports);
577 }
578 }
579 }
580
581 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530582 * Writes data to the specific generated file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530583 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530584 * @param file generated file
585 * @param genType generated file type
Bharat saraswal84366c52016-03-23 19:40:35 +0530586 * @param javaDocType java doc type
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530587 * @param curNode current YANG node
588 * @param fileName file name
Bharat saraswala5c28512016-11-10 21:09:23 +0530589 * @param isForClass is for default class
Bharat saraswal84366c52016-03-23 19:40:35 +0530590 * @throws IOException when fails to write into a file
591 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530592 private static void write(File file, int genType, JavaDocType javaDocType,
Bharat saraswala5c28512016-11-10 21:09:23 +0530593 YangNode curNode, String fileName, boolean isForClass)
Bharat saraswal84366c52016-03-23 19:40:35 +0530594 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530595 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName,
Bharat saraswala5c28512016-11-10 21:09:23 +0530596 isForClass, null));
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530597 insertDataIntoJavaFile(file, generateClassDefinition(genType,
598 fileName, curNode));
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530599 }
600
601 /**
602 * Writes data to the specific generated file.
603 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530604 * @param file generated file
605 * @param fileName file name
606 * @param genType generated file type
607 * @param javaDocType java doc type
sangyun-han54cb8322016-06-01 14:12:07 +0900608 * @throws IOException when fails to write into a file
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530609 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530610 private static void write(File file, String fileName, int genType,
611 JavaDocType javaDocType) throws IOException {
612 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false,
613 null));
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530614 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswal84366c52016-03-23 19:40:35 +0530615 }
616
Bharat saraswalaf413b82016-07-14 15:18:20 +0530617 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530618 * Returns set of node identifiers.
619 *
620 * @param parent parent node
621 * @return set of node identifiers
622 */
Bharat saraswal039f59c2016-07-14 21:57:13 +0530623 static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530624
625 List<YangAtomicPath> targets = new ArrayList<>();
626 YangNodeIdentifier nodeId;
627 List<YangAugment> augments = getListOfAugments(parent);
628 for (YangAugment augment : augments) {
629 nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
Vidyashree Ramad2c7f8d2016-11-02 12:38:12 +0530630 augment.setSetterMethodName(getAugmentSetterName(augment));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530631 if (validateNodeIdentifierInSet(nodeId, targets)) {
632 targets.add(augment.getTargetNode().get(0));
633 }
634 }
635 return targets;
636 }
637
638 /* Returns list of augments.*/
639 private static List<YangAugment> getListOfAugments(YangNode parent) {
640 List<YangAugment> augments = new ArrayList<>();
641 YangNode child = parent.getChild();
642 while (child != null) {
643 if (child instanceof YangAugment) {
644 augments.add((YangAugment) child);
645 }
646 child = child.getNextSibling();
647 }
648 return augments;
649 }
650
Vidyashree Ramad2c7f8d2016-11-02 12:38:12 +0530651 /* Returns setter method name for augment.*/
652 private static String getAugmentSetterName(YangAugment augment) {
653 YangAtomicPath atomicPath = augment.getTargetNode().get(0);
654 YangNode augmentedNode = atomicPath.getResolvedNode();
655 String setterName = SET_METHOD_PREFIX + AUGMENTED
656 + getCapitalCase(((JavaFileInfoContainer) augmentedNode.getParent())
657 .getJavaFileInfo().getJavaName())
658 + getCapitalCase(((JavaFileInfoContainer) augmentedNode)
659 .getJavaFileInfo().getJavaName());
660 return setterName;
661 }
662
Bharat saraswalaf413b82016-07-14 15:18:20 +0530663 /*Validates the set for duplicate names of node identifiers.*/
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530664 private static boolean validateNodeIdentifierInSet(
665 YangNodeIdentifier nodeId, List<YangAtomicPath> targets) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530666 boolean isPresent = true;
667 for (YangAtomicPath target : targets) {
668 if (target.getNodeIdentifier().getName().equals(nodeId.getName())) {
669 if (target.getNodeIdentifier().getPrefix() != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530670 isPresent = !target.getNodeIdentifier().getPrefix()
671 .equals(nodeId.getPrefix());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530672 } else {
673 isPresent = nodeId.getPrefix() != null;
674 }
675 }
676 }
677 return isPresent;
678 }
679
680 /**
681 * Adds resolved augmented node imports to manager class.
682 *
683 * @param parent parent node
684 */
685 public static void addResolvedAugmentedDataNodeImports(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530686 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
Bharat saraswal94844d62016-10-13 13:28:03 +0530687 if (targets.isEmpty()) {
688 return;
689 }
690
691 YangNode node = targets.get(0).getResolvedNode();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530692 if (node instanceof InvalidOpTypeHolder) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530693 return;
694 }
695
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530696 TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = (
697 (JavaCodeGeneratorInfo) parent)
Bharat saraswalaf413b82016-07-14 15:18:20 +0530698 .getTempJavaCodeFragmentFiles();
699 YangNode augmentedNode;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530700 JavaQualifiedTypeInfoTranslator typeInfo;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530701 String curNodeName;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530702 JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent)
703 .getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530704 for (YangAtomicPath nodeId : targets) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530705 augmentedNode = nodeId.getResolvedNode().getParent();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530706 curNodeName = getCurNodeName(augmentedNode, parentInfo
707 .getPluginConfig());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530708
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530709 typeInfo =
710 getQTypeInfoOfNode(
711 augmentedNode, curNodeName + OP_PARAM,
712 parentInfo.getPluginConfig());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530713
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530714 tempJavaCodeFragmentFiles.getServiceTempFiles()
715 .getJavaImportData().addImportInfo(
716 typeInfo, parentInfo.getJavaName(),
717 parentInfo.getPackage());
718 typeInfo =
719 getQTypeInfoOfNode(
720 augmentedNode, curNodeName, parentInfo
721 .getPluginConfig());
722
723 tempJavaCodeFragmentFiles.getServiceTempFiles()
724 .getJavaImportData().addImportInfo(
725 typeInfo, parentInfo.getJavaName(),
726 parentInfo.getPackage());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530727 }
728 }
729
730 /**
731 * Returns qualified type info of augmented node.
732 *
733 * @param augmentedNode augmented node
734 * @param curNodeName current node name
735 * @param pluginConfig plugin configurations
736 * @return qualified type info of augmented node
737 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530738 private static JavaQualifiedTypeInfoTranslator getQTypeInfoOfNode(
739 YangNode augmentedNode, String curNodeName, YangPluginConfig pluginConfig) {
740 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo =
741 getQualifiedTypeInfoOfCurNode(augmentedNode,
742 curNodeName);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530743 if (javaQualifiedTypeInfo.getPkgInfo() == null) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530744 javaQualifiedTypeInfo.setPkgInfo(getNodesPackage(augmentedNode,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530745 pluginConfig));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530746 }
747 return javaQualifiedTypeInfo;
748 }
749
750 /**
751 * Validates if augmented node is imported in parent node.
752 *
753 * @param javaQualifiedTypeInfo qualified type info
754 * @param importData import data
755 * @return true if present in imports
756 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530757 private static boolean validateQualifiedInfoOfAugmentedNode(
758 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo,
759 JavaImportData importData) {
760 for (JavaQualifiedTypeInfoTranslator curImportInfo : importData
761 .getImportSet()) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530762 if (curImportInfo.getClassInfo()
763 .contentEquals(javaQualifiedTypeInfo.getClassInfo())) {
764 return curImportInfo.getPkgInfo()
765 .contentEquals(javaQualifiedTypeInfo.getPkgInfo());
766 }
767 }
768 return true;
769 }
770
771 /**
772 * Return augmented class name for data methods in manager and service.
773 *
774 * @param augmentedNode augmented node
775 * @param parent parent node
776 * @return augmented class name for data methods in manager and service
777 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530778 static String getAugmentedClassNameForDataMethods(YangNode augmentedNode,
779 YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530780 String curNodeName;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530781 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530782 JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent)
783 .getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530784 YangPluginConfig pluginConfig = parentInfo.getPluginConfig();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530785 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = (
786 (JavaCodeGeneratorInfo) parent).getTempJavaCodeFragmentFiles()
787 .getServiceTempFiles();
788 curNodeName = getCurNodeName(augmentedNode, pluginConfig);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530789
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530790 javaQualifiedTypeInfo = getQTypeInfoOfNode(augmentedNode,
791 getCapitalCase(curNodeName),
792 parentInfo.getPluginConfig());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530793 if (validateQualifiedInfoOfAugmentedNode(javaQualifiedTypeInfo,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530794 tempJavaServiceFragmentFiles
795 .getJavaImportData())) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530796 return javaQualifiedTypeInfo.getClassInfo();
797 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530798 return javaQualifiedTypeInfo.getPkgInfo() + PERIOD +
799 javaQualifiedTypeInfo.getClassInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530800 }
801 }
802
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530803 //Returns class name of current node
804 static String getCurNodeName(YangNode node, YangPluginConfig config) {
805 if (((JavaFileInfoContainer) node).getJavaFileInfo()
806 .getJavaName() != null) {
807 return getCapitalCase(((JavaFileInfoContainer) node)
808 .getJavaFileInfo()
809 .getJavaName());
810 } else {
811 return getCapitalCase(getCamelCase(node.getName(), config
812 .getConflictResolver()));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530813 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530814 }
815
janani bb3be1332016-08-03 16:40:01 +0530816 /**
817 * Checks if the type name is leafref and returns the effective type name.
818 *
819 * @param attributeName name of the current type
820 * @param attributeType effective type
821 * @return name of the effective type
822 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530823 public static String isTypeNameLeafref(String attributeName,
824 YangType<?> attributeType) {
janani bb3be1332016-08-03 16:40:01 +0530825 if (attributeName.equalsIgnoreCase(LEAFREF)) {
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530826 YangLeafRef leafRef = (YangLeafRef) attributeType.getDataTypeExtendedInfo();
Bharat saraswal94844d62016-10-13 13:28:03 +0530827 if (leafRef != null && !leafRef.isInGrouping()) {
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530828 return attributeType.getDataTypeName();
829 }
janani bb3be1332016-08-03 16:40:01 +0530830 }
831 return attributeName;
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530832 // TODO handle union scenario, having multiple leafref.
janani bb3be1332016-08-03 16:40:01 +0530833 }
834
835 /**
836 * Checks if the type is leafref and returns the effective type.
837 *
838 * @param attributeType current type
839 * @return effective type
840 */
841 public static YangType isTypeLeafref(YangType<?> attributeType) {
842 if (attributeType.getDataType() == YangDataTypes.LEAFREF) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530843 YangLeafRef leafRef = (YangLeafRef) attributeType
844 .getDataTypeExtendedInfo();
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530845 if (!leafRef.isInGrouping()) {
846 return leafRef.getEffectiveDataType();
847 }
janani bb3be1332016-08-03 16:40:01 +0530848 }
849 return attributeType;
850 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530851
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530852}