blob: 480c3210784855ded8255df05934353710e2c224 [file] [log] [blame]
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.yangutils.translator.tojava;
17
18import java.io.File;
19import java.io.IOException;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053020import java.util.List;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053021
Bharat saraswal039f59c2016-07-14 21:57:13 +053022import org.onosproject.yangutils.datamodel.YangAugment;
Bharat saraswalaf413b82016-07-14 15:18:20 +053023import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053024import org.onosproject.yangutils.datamodel.YangCase;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053025import org.onosproject.yangutils.datamodel.YangLeaf;
26import org.onosproject.yangutils.datamodel.YangLeafList;
27import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Bharat saraswalaf413b82016-07-14 15:18:20 +053028import org.onosproject.yangutils.datamodel.YangModule;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053029import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalaf413b82016-07-14 15:18:20 +053030import org.onosproject.yangutils.datamodel.YangSubModule;
Shankara-Huaweib7564772016-08-02 18:13:13 +053031import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
32import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053033import org.onosproject.yangutils.translator.exception.TranslatorException;
34import org.onosproject.yangutils.translator.tojava.javamodel.JavaLeafInfoContainer;
Shankara-Huaweib7564772016-08-02 18:13:13 +053035import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaGroupingTranslator;
36import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModuleTranslator;
37import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModuleTranslator;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053038import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053039
Bharat saraswalc2d3be12016-06-16 00:29:12 +053040import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053041import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
42import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
43import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
Bharat saraswalaf413b82016-07-14 15:18:20 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
46import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPE_CLASS;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
48import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Shankara-Huaweia1039e52016-07-14 16:53:09 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_BUILDER_CLASS_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal250a7472016-05-12 13:16:57 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
55import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
57import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
58import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
59import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
Shankara-Huaweib7564772016-08-02 18:13:13 +053060import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedInfoOfFromString;
61import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +053062import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.updateJavaFileInfo;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053063import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefination;
64import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaClassDefClose;
Bharat saraswalaf413b82016-07-14 15:18:20 +053065import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.sortImports;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053066import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderClassFile;
67import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderInterfaceFile;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053068import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateImplClassFile;
69import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateInterfaceFile;
Shankara-Huaweia1039e52016-07-14 16:53:09 +053070import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateOpParamBuilderClassFile;
71import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateOpParamImplClassFile;
Bharat saraswal039f59c2016-07-14 21:57:13 +053072import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.addResolvedAugmentedDataNodeImports;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053073import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
Bharat saraswald14cbe82016-07-14 13:26:18 +053074import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053075import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildString;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053076import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getDefaultConstructorString;
77import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
Bharat saraswal250a7472016-05-12 13:16:57 +053078import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethod;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053079import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
80import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
81import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053082import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053083import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
84import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
85import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethod;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053086import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.parseBuilderInterfaceBuildMethodString;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +053087import static org.onosproject.yangutils.utils.UtilConstants.ACTIVATE;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053088import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +053089import static org.onosproject.yangutils.utils.UtilConstants.COMPONENT;
90import static org.onosproject.yangutils.utils.UtilConstants.DEACTIVATE;
Bharat saraswald14cbe82016-07-14 13:26:18 +053091import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053092import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
93import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053094import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
95import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +053096import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053097import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal039f59c2016-07-14 21:57:13 +053098import static org.onosproject.yangutils.utils.UtilConstants.OPERATION;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053099import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530100import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
101import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530102import static org.onosproject.yangutils.utils.UtilConstants.REFERENCE;
103import static org.onosproject.yangutils.utils.UtilConstants.REFERENCE_CARDINALITY;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530104import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530105import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530106import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
Vidyashree Rama72719fa2016-07-15 14:06:56 +0530107import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530108import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530109import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.readAppendFile;
110import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530111import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530112import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530113import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
114import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
115import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530116import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
117import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.mergeJavaFiles;
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530118import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530119
120/**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530121 * Represents implementation of java code fragments temporary implementations. Manages the common temp file required for
122 * Java file(s) generated.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530123 */
124public class TempJavaFragmentFiles {
Bharat saraswal250a7472016-05-12 13:16:57 +0530125
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530126 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530127 * File type extension for java classes.
128 */
129 private static final String JAVA_FILE_EXTENSION = ".java";
Bharat saraswal250a7472016-05-12 13:16:57 +0530130
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530131 /**
132 * File type extension for temporary classes.
133 */
134 private static final String TEMP_FILE_EXTENSION = ".tmp";
Bharat saraswal250a7472016-05-12 13:16:57 +0530135
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530136 /**
137 * Folder suffix for temporary files folder.
138 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530139 private static final String TEMP_FOLDER_NAME_SUFFIX = "-Temp";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530140
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530141 /**
142 * File name for getter method.
143 */
144 private static final String GETTER_METHOD_FILE_NAME = "GetterMethod";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530145
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530146 /**
147 * File name for setter method.
148 */
149 private static final String SETTER_METHOD_FILE_NAME = "SetterMethod";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530150
151 /**
152 * File name for getter method implementation.
153 */
154 private static final String GETTER_METHOD_IMPL_FILE_NAME = "GetterMethodImpl";
155
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530156 /**
157 * File name for setter method implementation.
158 */
159 private static final String SETTER_METHOD_IMPL_FILE_NAME = "SetterMethodImpl";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530160
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530161 /**
162 * File name for attributes.
163 */
164 private static final String ATTRIBUTE_FILE_NAME = "Attributes";
Bharat saraswal250a7472016-05-12 13:16:57 +0530165
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530166 /**
167 * File name for to string method.
168 */
169 private static final String TO_STRING_METHOD_FILE_NAME = "ToString";
Bharat saraswal250a7472016-05-12 13:16:57 +0530170
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530171 /**
172 * File name for hash code method.
173 */
174 private static final String HASH_CODE_METHOD_FILE_NAME = "HashCode";
Bharat saraswal250a7472016-05-12 13:16:57 +0530175
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530176 /**
177 * File name for equals method.
178 */
179 private static final String EQUALS_METHOD_FILE_NAME = "Equals";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530180
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530181 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530182 * File name for from string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530183 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530184 private static final String FROM_STRING_METHOD_FILE_NAME = "FromString";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530185
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530186 /**
187 * File name for interface java file name suffix.
188 */
189 private static final String INTERFACE_FILE_NAME_SUFFIX = EMPTY_STRING;
Bharat saraswal250a7472016-05-12 13:16:57 +0530190
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530191 /**
192 * File name for builder interface file name suffix.
193 */
194 private static final String BUILDER_INTERFACE_FILE_NAME_SUFFIX = BUILDER + INTERFACE;
Bharat saraswal250a7472016-05-12 13:16:57 +0530195
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530196 /**
197 * File name for builder class file name suffix.
198 */
199 private static final String BUILDER_CLASS_FILE_NAME_SUFFIX = BUILDER;
Bharat saraswal250a7472016-05-12 13:16:57 +0530200
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530201 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530202 * Information about the java files being generated.
203 */
204 private JavaFileInfo javaFileInfo;
205
206 /**
207 * Imported class info.
208 */
209 private JavaImportData javaImportData;
210
211 /**
212 * The variable which guides the types of temporary files generated using the temporary generated file types mask.
213 */
214 private int generatedTempFiles;
215
216 /**
217 * Absolute path where the target java file needs to be generated.
218 */
219 private String absoluteDirPath;
220
221 /**
222 * Contains all the interface(s)/class name which will be extended by generated files.
223 */
224 private JavaExtendsListHolder javaExtendsListHolder;
225
Bharat saraswald14cbe82016-07-14 13:26:18 +0530226 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530227 * Java file handle for interface file.
228 */
229 private File interfaceJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530230
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530231 /**
232 * Java file handle for builder interface file.
233 */
234 private File builderInterfaceJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530235
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530236 /**
237 * Java file handle for builder class file.
238 */
239 private File builderClassJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530240
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530241 /**
Shankara-Huaweia1039e52016-07-14 16:53:09 +0530242 * Java file handle for builder op param class file.
243 */
Shankara-Huaweib7564772016-08-02 18:13:13 +0530244 private File builderOpParamClassJavaFileHandle;
Shankara-Huaweia1039e52016-07-14 16:53:09 +0530245
246 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530247 * Java file handle for impl class file.
248 */
249 private File implClassJavaFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530250
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530251 /**
Shankara-Huaweia1039e52016-07-14 16:53:09 +0530252 * Java file handle for op param class file.
253 */
254 private File opParamClassJavaFileHandle;
255
256 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530257 * Temporary file handle for attribute.
258 */
259 private File attributesTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530260
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530261 /**
262 * Temporary file handle for getter of interface.
263 */
264 private File getterInterfaceTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530265
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530266 /**
267 * Temporary file handle for setter of interface.
268 */
269 private File setterInterfaceTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530270
271 /**
272 * Temporary file handle for getter of class.
273 */
274 private File getterImplTempFileHandle;
275
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530276 /**
277 * Temporary file handle for setter of class.
278 */
279 private File setterImplTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530280
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530281 /**
282 * Temporary file handle for hash code method of class.
283 */
284 private File hashCodeImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530285
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530286 /**
287 * Temporary file handle for equals method of class.
288 */
289 private File equalsImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530290
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530291 /**
292 * Temporary file handle for to string method of class.
293 */
294 private File toStringImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530295
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530296 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530297 * Temporary file handle for from string method of class.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530298 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530299 private File fromStringImplTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530300
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530301 /**
302 * Import info for case.
303 */
Shankara-Huaweib7564772016-08-02 18:13:13 +0530304 private JavaQualifiedTypeInfoTranslator caseImportInfo;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530305
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530306 /**
307 * Is attribute added.
308 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530309 private boolean isAttributePresent;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530310
Bharat saraswal250a7472016-05-12 13:16:57 +0530311 /**
Bharat saraswal039f59c2016-07-14 21:57:13 +0530312 * Base code gen path.
313 */
314 private String baseCodePath;
315
Bharat saraswalaf413b82016-07-14 15:18:20 +0530316 TempJavaFragmentFiles() {
317 }
318
319 /**
320 * Creates an instance of temporary java code fragment.
321 *
322 * @param javaFileInfo generated java file information
323 * @throws IOException when fails to create new file handle
324 */
325 TempJavaFragmentFiles(JavaFileInfo javaFileInfo)
326 throws IOException {
327 setJavaExtendsListHolder(new JavaExtendsListHolder());
328 setJavaImportData(new JavaImportData());
329 setJavaFileInfo(javaFileInfo);
Bharat saraswal039f59c2016-07-14 21:57:13 +0530330 if ((javaFileInfo.getGeneratedFileTypes() & GENERATE_SERVICE_AND_MANAGER) != 0) {
331 setBaseCodePath(getJavaFileInfo().getPluginConfig().getCodeGenDir());
332 setAbsoluteDirPath(getAbsolutePackagePath(getJavaFileInfo().getPluginConfig().getCodeGenDir(),
333 getJavaFileInfo().getPackageFilePath()));
334 } else {
335 setBaseCodePath(getJavaFileInfo().getBaseCodeGenPath());
336 setAbsoluteDirPath(getAbsolutePackagePath(getJavaFileInfo().getBaseCodeGenPath(),
337 getJavaFileInfo().getPackageFilePath()));
338 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530339 /*
340 * Initialize getter when generation file type matches to interface
341 * mask.
342 */
343 if ((getGeneratedJavaFiles() & INTERFACE_MASK) != 0) {
344 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK);
345 }
346
347 /*
348 * Initialize getter and setter when generation file type matches to
349 * builder interface mask.
350 */
351 if ((getGeneratedJavaFiles() & BUILDER_INTERFACE_MASK) != 0) {
352 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK);
353 addGeneratedTempFile(SETTER_FOR_INTERFACE_MASK);
354 }
355
356 /*
357 * Initialize getterImpl, setterImpl and attributes when generation file
358 * type matches to builder class mask.
359 */
360 if ((getGeneratedJavaFiles() & BUILDER_CLASS_MASK) != 0) {
361 addGeneratedTempFile(ATTRIBUTES_MASK);
362 addGeneratedTempFile(GETTER_FOR_CLASS_MASK);
363 addGeneratedTempFile(SETTER_FOR_CLASS_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530364 }
365
366 /*
367 * Initialize getterImpl, attributes, constructor, hash code, equals and
368 * to strings when generation file type matches to impl class mask.
369 */
370 if ((getGeneratedJavaFiles() & IMPL_CLASS_MASK) != 0) {
371 addGeneratedTempFile(ATTRIBUTES_MASK);
372 addGeneratedTempFile(GETTER_FOR_CLASS_MASK);
373 addGeneratedTempFile(HASH_CODE_IMPL_MASK);
374 addGeneratedTempFile(EQUALS_IMPL_MASK);
375 addGeneratedTempFile(TO_STRING_IMPL_MASK);
376 }
377
378 /*
379 * Initialize temp files to generate type class.
380 */
381 if ((getGeneratedJavaFiles() & GENERATE_TYPE_CLASS) != 0) {
382 addGeneratedTempFile(ATTRIBUTES_MASK);
383 addGeneratedTempFile(GETTER_FOR_CLASS_MASK);
384 addGeneratedTempFile(HASH_CODE_IMPL_MASK);
385 addGeneratedTempFile(EQUALS_IMPL_MASK);
386 addGeneratedTempFile(TO_STRING_IMPL_MASK);
387 addGeneratedTempFile(FROM_STRING_IMPL_MASK);
388 }
389
390 /*
391 * Initialize temp files to generate enum class.
392 */
393 if ((getGeneratedJavaFiles() & GENERATE_ENUM_CLASS) != 0) {
394 addGeneratedTempFile(FROM_STRING_IMPL_MASK);
395 }
396
397 /*
398 * Set temporary file handles.
399 */
400 if ((getGeneratedTempFiles() & ATTRIBUTES_MASK) != 0) {
401 setAttributesTempFileHandle(getTemporaryFileHandle(ATTRIBUTE_FILE_NAME));
402 }
403
404 if ((getGeneratedTempFiles() & GETTER_FOR_INTERFACE_MASK) != 0) {
405 setGetterInterfaceTempFileHandle(getTemporaryFileHandle(GETTER_METHOD_FILE_NAME));
406 }
407
408 if ((getGeneratedTempFiles() & SETTER_FOR_INTERFACE_MASK) != 0) {
409 setSetterInterfaceTempFileHandle(getTemporaryFileHandle(SETTER_METHOD_FILE_NAME));
410 }
411
412 if ((getGeneratedTempFiles() & GETTER_FOR_CLASS_MASK) != 0) {
413 setGetterImplTempFileHandle(getTemporaryFileHandle(GETTER_METHOD_IMPL_FILE_NAME));
414 }
415
416 if ((getGeneratedTempFiles() & SETTER_FOR_CLASS_MASK) != 0) {
417 setSetterImplTempFileHandle(getTemporaryFileHandle(SETTER_METHOD_IMPL_FILE_NAME));
418 }
419
420 if ((getGeneratedTempFiles() & HASH_CODE_IMPL_MASK) != 0) {
421 setHashCodeImplTempFileHandle(getTemporaryFileHandle(HASH_CODE_METHOD_FILE_NAME));
422 }
423 if ((getGeneratedTempFiles() & EQUALS_IMPL_MASK) != 0) {
424 setEqualsImplTempFileHandle(getTemporaryFileHandle(EQUALS_METHOD_FILE_NAME));
425 }
426 if ((getGeneratedTempFiles() & TO_STRING_IMPL_MASK) != 0) {
427 setToStringImplTempFileHandle(getTemporaryFileHandle(TO_STRING_METHOD_FILE_NAME));
428 }
429 if ((getGeneratedTempFiles() & FROM_STRING_IMPL_MASK) != 0) {
430 setFromStringImplTempFileHandle(getTemporaryFileHandle(FROM_STRING_METHOD_FILE_NAME));
431 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530432 }
433
434 /**
435 * Adds current node info as and attribute to the parent generated file.
436 *
437 * @param curNode current node which needs to be added as an attribute in the parent generated code
438 * @param isList is list construct
439 * @param pluginConfig plugin configurations
440 * @throws IOException IO operation exception
441 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530442 static void addCurNodeInfoInParentTempFile(YangNode curNode,
443 boolean isList, YangPluginConfig pluginConfig)
Bharat saraswalaf413b82016-07-14 15:18:20 +0530444 throws IOException {
445 YangNode parent = getParentNodeInGenCode(curNode);
446 if (!(parent instanceof JavaCodeGenerator)) {
447 throw new TranslatorException("missing parent node to contain current node info in generated file");
448 }
449
Shankara-Huaweib7564772016-08-02 18:13:13 +0530450 if (parent instanceof YangJavaGroupingTranslator) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530451 /*
452 * In case of grouping, there is no need to add the information, it
453 * will be taken care in uses
454 */
455 return;
456 }
457 TempJavaBeanFragmentFiles tempJavaBeanFragmentFiles = ((JavaCodeGeneratorInfo) parent)
458 .getTempJavaCodeFragmentFiles().getBeanTempFiles();
459
460 JavaAttributeInfo javaAttributeInfo = getCurNodeAsAttributeInTarget(curNode,
461 parent, isList, tempJavaBeanFragmentFiles);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530462
Bharat saraswalaf413b82016-07-14 15:18:20 +0530463 getNodesInterfaceFragmentFiles(parent, javaAttributeInfo, pluginConfig);
464 }
465
466 /**
467 * Creates an attribute info object corresponding to a data model node and return it.
468 *
469 * @param curNode current data model node for which the java code generation is being handled
470 * @param targetNode target node in which the current node is an attribute
471 * @param isListNode is the current added attribute needs to be a list
472 * @param tempJavaFragmentFiles temp java fragment files
473 * @return AttributeInfo attribute details required to add in temporary files
474 */
475 public static JavaAttributeInfo getCurNodeAsAttributeInTarget(YangNode curNode,
476 YangNode targetNode, boolean isListNode,
477 TempJavaFragmentFiles tempJavaFragmentFiles) {
478 String curNodeName = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName();
479 if (curNodeName == null) {
480 updateJavaFileInfo(curNode, null);
481 curNodeName = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName();
482 }
483
484 /*
485 * Get the import info corresponding to the attribute for import in
486 * generated java files or qualified access
487 */
Shankara-Huaweib7564772016-08-02 18:13:13 +0530488 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
Bharat saraswalaf413b82016-07-14 15:18:20 +0530489 getCapitalCase(curNodeName));
490 if (!(targetNode instanceof TempJavaCodeFragmentFilesContainer)) {
491 throw new TranslatorException("Parent node does not have file info");
492 }
493 JavaImportData parentImportData = tempJavaFragmentFiles.getJavaImportData();
494 JavaFileInfo fileInfo = ((JavaFileInfoContainer) targetNode).getJavaFileInfo();
495
496 boolean isQualified;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530497 if ((targetNode instanceof YangJavaModuleTranslator || targetNode instanceof YangJavaSubModuleTranslator)
Bharat saraswalaf413b82016-07-14 15:18:20 +0530498 && (qualifiedTypeInfo.getClassInfo().contentEquals(SERVICE)
499 || qualifiedTypeInfo.getClassInfo().contentEquals(COMPONENT)
500 || qualifiedTypeInfo.getClassInfo().contentEquals(getCapitalCase(ACTIVATE))
501 || qualifiedTypeInfo.getClassInfo().contentEquals(getCapitalCase(DEACTIVATE))
502 || qualifiedTypeInfo.getClassInfo().contentEquals(REFERENCE_CARDINALITY)
503 || qualifiedTypeInfo.getClassInfo().contentEquals(REFERENCE))
504 || qualifiedTypeInfo.getClassInfo().contentEquals(getCapitalCase(fileInfo.getJavaName() + SERVICE))
505 || qualifiedTypeInfo.getClassInfo().contentEquals(getCapitalCase(fileInfo.getJavaName() + MANAGER))) {
506
507 isQualified = true;
508 } else {
509 String className;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530510 if (targetNode instanceof YangJavaModuleTranslator || targetNode instanceof YangJavaSubModuleTranslator) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530511 className = getCapitalCase(fileInfo.getJavaName()) + "Service";
512 } else {
513 className = getCapitalCase(fileInfo.getJavaName());
514 }
515
516 isQualified = parentImportData.addImportInfo(qualifiedTypeInfo,
517 className, fileInfo.getPackage());
518 }
519
520 if (isListNode) {
521 parentImportData.setIfListImported(true);
522 }
523
524 return getAttributeInfoForTheData(qualifiedTypeInfo, curNodeName, null, isQualified, isListNode);
525 }
526
527 /**
528 * Adds java code snippet for corresponding files.
529 *
530 * @param node java node
531 * @param attr attribute info
532 * @param config plugin configurations
533 * @throws IOException when fails to do IO operations
534 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530535 private static void getNodesInterfaceFragmentFiles(YangNode node, JavaAttributeInfo attr,
536 YangPluginConfig config) throws IOException {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530537 TempJavaFragmentFiles tempJavaFragmentFiles;
538 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) node).getJavaFileInfo();
539 if ((javaFileInfo.getGeneratedFileTypes() & GENERATE_SERVICE_AND_MANAGER) != 0) {
540 tempJavaFragmentFiles = ((TempJavaCodeFragmentFilesContainer) node)
541 .getTempJavaCodeFragmentFiles()
542 .getServiceTempFiles();
543 tempJavaFragmentFiles.addJavaSnippetInfoToApplicableTempFiles(attr, config);
544 }
545 if ((javaFileInfo.getGeneratedFileTypes() & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
546 tempJavaFragmentFiles = ((TempJavaCodeFragmentFilesContainer) node)
547 .getTempJavaCodeFragmentFiles()
548 .getBeanTempFiles();
549 tempJavaFragmentFiles.addJavaSnippetInfoToApplicableTempFiles(attr, config);
550 }
551
552 }
553
Bharat saraswald14cbe82016-07-14 13:26:18 +0530554 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +0530555 * Returns java attribute for leaf.
556 *
557 * @param tempJavaFragmentFiles temporary generated file
558 * @param leaf YANG leaf
559 * @param yangPluginConfig plugin configurations
560 * @return java attribute for leaf
561 */
562 public static JavaAttributeInfo getJavaAttributeOfLeaf(TempJavaFragmentFiles tempJavaFragmentFiles, YangLeaf leaf,
563 YangPluginConfig yangPluginConfig) {
564 JavaLeafInfoContainer javaLeaf = (JavaLeafInfoContainer) leaf;
565 javaLeaf.setConflictResolveConfig(yangPluginConfig.getConflictResolver());
566 javaLeaf.updateJavaQualifiedInfo();
567 return getAttributeInfoForTheData(
568 javaLeaf.getJavaQualifiedInfo(),
569 javaLeaf.getJavaName(yangPluginConfig.getConflictResolver()),
570 javaLeaf.getDataType(),
571 tempJavaFragmentFiles.getIsQualifiedAccessOrAddToImportList(javaLeaf.getJavaQualifiedInfo()),
572 false);
573 }
574
575 /**
576 * Returns java attribute for leaf-list.
577 *
578 * @param tempJavaFragmentFiles temporary generated file
579 * @param leafList YANG leaf-list
580 * @param yangPluginConfig plugin configurations
581 * @return java attribute for leaf-list
582 */
583 public static JavaAttributeInfo getJavaAttributeOfLeafList(TempJavaFragmentFiles tempJavaFragmentFiles,
584 YangLeafList leafList,
585 YangPluginConfig yangPluginConfig) {
586 JavaLeafInfoContainer javaLeaf = (JavaLeafInfoContainer) leafList;
587 javaLeaf.setConflictResolveConfig(yangPluginConfig.getConflictResolver());
588 javaLeaf.updateJavaQualifiedInfo();
589 tempJavaFragmentFiles.getJavaImportData().setIfListImported(true);
590 return getAttributeInfoForTheData(
591 javaLeaf.getJavaQualifiedInfo(),
592 javaLeaf.getJavaName(yangPluginConfig.getConflictResolver()),
593 javaLeaf.getDataType(),
594 tempJavaFragmentFiles.getIsQualifiedAccessOrAddToImportList(javaLeaf.getJavaQualifiedInfo()),
595 true);
596 }
597
598 /**
599 * Retrieves the temporary file handle of op param builder class.
600 *
601 * @return op param builder temporary file handle
602 */
Shankara-Huaweib7564772016-08-02 18:13:13 +0530603 private File getBuilderOpParamClassJavaFileHandle() {
604 return builderOpParamClassJavaFileHandle;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530605 }
606
607 /**
608 * Sets the java file handle for op param builder class.
609 *
Shankara-Huaweib7564772016-08-02 18:13:13 +0530610 * @param builderOpParamClassJavaFileHandle java file handle
Bharat saraswal64e7e232016-07-14 23:33:55 +0530611 */
Shankara-Huaweib7564772016-08-02 18:13:13 +0530612 private void setBuilderOpParamClassJavaFileHandle(File builderOpParamClassJavaFileHandle) {
613 this.builderOpParamClassJavaFileHandle = builderOpParamClassJavaFileHandle;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530614 }
615
616 /**
Bharat saraswal039f59c2016-07-14 21:57:13 +0530617 * Returns base code path.
618 *
619 * @return base code path
620 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530621 private String getBaseCodePath() {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530622 return baseCodePath;
623 }
624
625 /**
626 * Sets base code path.
627 *
628 * @param baseCodePath base code path
629 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530630 void setBaseCodePath(String baseCodePath) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530631 this.baseCodePath = baseCodePath;
632 }
633
634 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530635 * Retrieves the absolute path where the file needs to be generated.
636 *
637 * @return absolute path where the file needs to be generated
638 */
639 private String getAbsoluteDirPath() {
640 return absoluteDirPath;
641 }
642
643 /**
644 * Sets absolute path where the file needs to be generated.
645 *
Bharat saraswalaf413b82016-07-14 15:18:20 +0530646 * @param absoluteDirPath absolute path where the file needs to be generated.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530647 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530648 void setAbsoluteDirPath(String absoluteDirPath) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530649 this.absoluteDirPath = absoluteDirPath;
650 }
651
652 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530653 * Retrieves the generated java file information.
654 *
655 * @return generated java file information
656 */
657 public JavaFileInfo getJavaFileInfo() {
658 return javaFileInfo;
659 }
660
661 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530662 * Sets the generated java file information.
663 *
664 * @param javaFileInfo generated java file information
665 */
666 public void setJavaFileInfo(JavaFileInfo javaFileInfo) {
667 this.javaFileInfo = javaFileInfo;
668 }
669
670 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530671 * Retrieves the generated temp files.
672 *
673 * @return generated temp files
674 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530675 int getGeneratedTempFiles() {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530676 return generatedTempFiles;
677 }
678
679 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530680 * Sets generated file files.
681 *
682 * @param fileType generated file type
683 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530684 private void setGeneratedTempFiles(int fileType) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530685 generatedTempFiles = fileType;
686 }
687
688 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530689 * Adds to generated temporary files.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530690 *
691 * @param generatedTempFile generated file
692 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530693 void addGeneratedTempFile(int generatedTempFile) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530694 generatedTempFiles |= generatedTempFile;
Bharat saraswal250a7472016-05-12 13:16:57 +0530695 setGeneratedTempFiles(generatedTempFiles);
696 }
697
698 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530699 * Retrieves the generated Java files.
700 *
701 * @return generated Java files
702 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530703 int getGeneratedJavaFiles() {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530704 return getJavaFileInfo().getGeneratedFileTypes();
705 }
706
707 /**
708 * Retrieves the mapped Java class name.
709 *
710 * @return mapped Java class name
711 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530712 String getGeneratedJavaClassName() {
janani b703cfe42016-05-17 13:12:22 +0530713 return getCapitalCase(getJavaFileInfo().getJavaName());
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530714 }
715
716 /**
717 * Retrieves the import data for the generated Java file.
718 *
719 * @return import data for the generated Java file
720 */
721 public JavaImportData getJavaImportData() {
722 return javaImportData;
723 }
724
725 /**
726 * Sets import data for the generated Java file.
727 *
728 * @param javaImportData import data for the generated Java file
729 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530730 void setJavaImportData(JavaImportData javaImportData) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530731 this.javaImportData = javaImportData;
732 }
733
734 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530735 * Retrieves the status of any attributes added.
736 *
737 * @return status of any attributes added
738 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530739 boolean isAttributePresent() {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530740 return isAttributePresent;
741 }
742
743 /**
744 * Sets status of any attributes added.
745 *
746 * @param attributePresent status of any attributes added
747 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530748 private void setAttributePresent(boolean attributePresent) {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530749 isAttributePresent = attributePresent;
750 }
751
752 /**
753 * Returns getter methods's temporary file handle.
754 *
755 * @return temporary file handle
756 */
757 public File getGetterInterfaceTempFileHandle() {
758 return getterInterfaceTempFileHandle;
759 }
760
761 /**
762 * Sets to getter method's temporary file handle.
763 *
764 * @param getterForInterface file handle for to getter method
765 */
766 private void setGetterInterfaceTempFileHandle(File getterForInterface) {
767 getterInterfaceTempFileHandle = getterForInterface;
768 }
769
770 /**
771 * Returns setter method's temporary file handle.
772 *
773 * @return temporary file handle
774 */
775 public File getSetterInterfaceTempFileHandle() {
776 return setterInterfaceTempFileHandle;
777 }
778
779 /**
780 * Sets to setter method's temporary file handle.
781 *
782 * @param setterForInterface file handle for to setter method
783 */
784 private void setSetterInterfaceTempFileHandle(File setterForInterface) {
785 setterInterfaceTempFileHandle = setterForInterface;
786 }
787
788 /**
789 * Returns setter method's impl's temporary file handle.
790 *
791 * @return temporary file handle
792 */
793 public File getSetterImplTempFileHandle() {
794 return setterImplTempFileHandle;
795 }
796
797 /**
798 * Sets to setter method's impl's temporary file handle.
799 *
800 * @param setterImpl file handle for to setter method's implementation class
801 */
802 private void setSetterImplTempFileHandle(File setterImpl) {
803 setterImplTempFileHandle = setterImpl;
804 }
805
806 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530807 * Returns from string method's temporary file handle.
808 *
809 * @return from string method's temporary file handle
810 */
811 public File getFromStringImplTempFileHandle() {
812 return fromStringImplTempFileHandle;
813 }
814
815 /**
816 * Sets from string method's temporary file handle.
817 *
Bharat saraswalaf413b82016-07-14 15:18:20 +0530818 * @param fromStringImplTempFileHandle from string method's temporary file handle
Bharat saraswal250a7472016-05-12 13:16:57 +0530819 */
820 private void setFromStringImplTempFileHandle(File fromStringImplTempFileHandle) {
821 this.fromStringImplTempFileHandle = fromStringImplTempFileHandle;
822 }
823
824 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530825 * Returns java file handle for interface file.
826 *
827 * @return java file handle for interface file
828 */
829 private File getInterfaceJavaFileHandle() {
830 return interfaceJavaFileHandle;
831 }
832
833 /**
834 * Sets the java file handle for interface file.
835 *
836 * @param interfaceJavaFileHandle java file handle
837 */
838 private void setInterfaceJavaFileHandle(File interfaceJavaFileHandle) {
839 this.interfaceJavaFileHandle = interfaceJavaFileHandle;
840 }
841
842 /**
843 * Returns java file handle for builder interface file.
844 *
845 * @return java file handle for builder interface file
846 */
847 private File getBuilderInterfaceJavaFileHandle() {
848 return builderInterfaceJavaFileHandle;
849 }
850
851 /**
852 * Sets the java file handle for builder interface file.
853 *
854 * @param builderInterfaceJavaFileHandle java file handle
855 */
856 private void setBuilderInterfaceJavaFileHandle(File builderInterfaceJavaFileHandle) {
857 this.builderInterfaceJavaFileHandle = builderInterfaceJavaFileHandle;
858 }
859
860 /**
861 * Returns java file handle for builder class file.
862 *
863 * @return java file handle for builder class file
864 */
865 private File getBuilderClassJavaFileHandle() {
866 return builderClassJavaFileHandle;
867 }
868
869 /**
870 * Sets the java file handle for builder class file.
871 *
872 * @param builderClassJavaFileHandle java file handle
873 */
874 private void setBuilderClassJavaFileHandle(File builderClassJavaFileHandle) {
875 this.builderClassJavaFileHandle = builderClassJavaFileHandle;
876 }
877
878 /**
879 * Returns java file handle for impl class file.
880 *
881 * @return java file handle for impl class file
882 */
883 private File getImplClassJavaFileHandle() {
884 return implClassJavaFileHandle;
885 }
886
887 /**
888 * Sets the java file handle for impl class file.
889 *
890 * @param implClassJavaFileHandle java file handle
891 */
892 private void setImplClassJavaFileHandle(File implClassJavaFileHandle) {
893 this.implClassJavaFileHandle = implClassJavaFileHandle;
894 }
895
896 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530897 * Returns attribute's temporary file handle.
898 *
899 * @return temporary file handle
900 */
901 public File getAttributesTempFileHandle() {
902 return attributesTempFileHandle;
903 }
904
905 /**
906 * Sets attribute's temporary file handle.
907 *
908 * @param attributeForClass file handle for attribute
909 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530910 private void setAttributesTempFileHandle(File attributeForClass) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530911 attributesTempFileHandle = attributeForClass;
912 }
913
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530914 /**
915 * Returns getter method's impl's temporary file handle.
916 *
917 * @return temporary file handle
918 */
919 public File getGetterImplTempFileHandle() {
920 return getterImplTempFileHandle;
921 }
922
923 /**
924 * Sets to getter method's impl's temporary file handle.
925 *
926 * @param getterImpl file handle for to getter method's impl
927 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530928 private void setGetterImplTempFileHandle(File getterImpl) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530929 getterImplTempFileHandle = getterImpl;
930 }
931
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530932 /**
933 * Returns hash code method's temporary file handle.
934 *
935 * @return temporary file handle
936 */
937 public File getHashCodeImplTempFileHandle() {
938 return hashCodeImplTempFileHandle;
939 }
940
941 /**
942 * Sets hash code method's temporary file handle.
943 *
944 * @param hashCodeMethod file handle for hash code method
945 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530946 private void setHashCodeImplTempFileHandle(File hashCodeMethod) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530947 hashCodeImplTempFileHandle = hashCodeMethod;
948 }
949
950 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +0530951 * Returns equals method's temporary file handle.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530952 *
953 * @return temporary file handle
954 */
955 public File getEqualsImplTempFileHandle() {
956 return equalsImplTempFileHandle;
957 }
958
959 /**
960 * Sets equals method's temporary file handle.
961 *
962 * @param equalsMethod file handle for to equals method
963 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530964 private void setEqualsImplTempFileHandle(File equalsMethod) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530965 equalsImplTempFileHandle = equalsMethod;
966 }
967
968 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530969 * Returns to string method's temporary file handle.
970 *
971 * @return temporary file handle
972 */
973 public File getToStringImplTempFileHandle() {
974 return toStringImplTempFileHandle;
975 }
976
977 /**
978 * Sets to string method's temporary file handle.
979 *
980 * @param toStringMethod file handle for to string method
981 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530982 private void setToStringImplTempFileHandle(File toStringMethod) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530983 toStringImplTempFileHandle = toStringMethod;
984 }
985
986 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530987 * Returns java extends list holder.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530988 *
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530989 * @return java extends list holder
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530990 */
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530991 public JavaExtendsListHolder getJavaExtendsListHolder() {
992 return javaExtendsListHolder;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530993 }
994
995 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530996 * Sets java extends list holder.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530997 *
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530998 * @param javaExtendsListHolder java extends list holder
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530999 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301000 void setJavaExtendsListHolder(JavaExtendsListHolder javaExtendsListHolder) {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301001 this.javaExtendsListHolder = javaExtendsListHolder;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301002 }
1003
1004 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301005 * Adds attribute for class.
1006 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301007 * @param attr attribute info
1008 * @param yangPluginConfig plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301009 * @throws IOException when fails to append to temporary file
1010 */
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301011 private void addAttribute(JavaAttributeInfo attr, YangPluginConfig yangPluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301012 throws IOException {
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301013 appendToFile(getAttributesTempFileHandle(), parseAttribute(attr, yangPluginConfig)
1014 + FOUR_SPACE_INDENTATION);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301015 }
1016
1017 /**
1018 * Adds getter for interface.
1019 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301020 * @param attr attribute info
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301021 * @param pluginConfig plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301022 * @throws IOException when fails to append to temporary file
1023 */
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301024 private void addGetterForInterface(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301025 throws IOException {
Bharat saraswal250a7472016-05-12 13:16:57 +05301026 appendToFile(getGetterInterfaceTempFileHandle(),
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301027 getGetterString(attr, getGeneratedJavaFiles(), pluginConfig) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301028 }
1029
1030 /**
1031 * Adds setter for interface.
1032 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301033 * @param attr attribute info
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301034 * @param pluginConfig plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301035 * @throws IOException when fails to append to temporary file
1036 */
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301037 private void addSetterForInterface(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301038 throws IOException {
1039 appendToFile(getSetterInterfaceTempFileHandle(),
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301040 getSetterString(attr, getGeneratedJavaClassName(), getGeneratedJavaFiles(), pluginConfig)
1041 + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301042 }
1043
1044 /**
1045 * Adds setter's implementation for class.
1046 *
1047 * @param attr attribute info
1048 * @throws IOException when fails to append to temporary file
1049 */
1050 private void addSetterImpl(JavaAttributeInfo attr)
1051 throws IOException {
1052 appendToFile(getSetterImplTempFileHandle(),
Bharat saraswal250a7472016-05-12 13:16:57 +05301053 getOverRideString() + getSetterForClass(attr, getGeneratedJavaClassName(), getGeneratedJavaFiles())
Bharat saraswal64e7e232016-07-14 23:33:55 +05301054 + NEW_LINE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301055 }
1056
1057 /**
1058 * Adds getter method's impl for class.
1059 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301060 * @param attr attribute info
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301061 * @param pluginConfig plugin configurations
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301062 * @throws IOException when fails to append to temporary file
1063 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301064 void addGetterImpl(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301065 throws IOException {
1066 if ((getGeneratedJavaFiles() & BUILDER_CLASS_MASK) != 0
1067 || (getGeneratedJavaFiles() & GENERATE_SERVICE_AND_MANAGER) != 0) {
1068 appendToFile(getGetterImplTempFileHandle(), getOverRideString() + getGetterForClass(attr,
1069 getGeneratedJavaFiles()) + NEW_LINE);
1070 } else {
janani b703cfe42016-05-17 13:12:22 +05301071 appendToFile(getGetterImplTempFileHandle(),
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301072 getJavaDoc(GETTER_METHOD, getCapitalCase(attr.getAttributeName()), false, pluginConfig)
janani b703cfe42016-05-17 13:12:22 +05301073 + getGetterForClass(attr, getGeneratedJavaFiles()) + NEW_LINE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301074 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301075 }
1076
1077 /**
1078 * Adds build method for interface.
1079 *
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301080 * @param pluginConfig plugin configurations
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301081 * @return build method for interface
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301082 * @throws IOException when fails to append to temporary file
1083 */
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301084 String addBuildMethodForInterface(YangPluginConfig pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301085 throws IOException {
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301086 return parseBuilderInterfaceBuildMethodString(getGeneratedJavaClassName(), pluginConfig);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301087 }
1088
1089 /**
1090 * Adds build method's implementation for class.
1091 *
1092 * @return build method implementation for class
1093 * @throws IOException when fails to append to temporary file
1094 */
1095 String addBuildMethodImpl()
1096 throws IOException {
1097 return getBuildString(getGeneratedJavaClassName()) + NEW_LINE;
1098 }
1099
1100 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301101 * Adds default constructor for class.
1102 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301103 * @param modifier modifier for constructor.
1104 * @param toAppend string which need to be appended with the class name
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301105 * @param pluginConfig plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301106 * @return default constructor for class
1107 * @throws IOException when fails to append to file
1108 */
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301109 String addDefaultConstructor(String modifier, String toAppend, YangPluginConfig pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301110 throws IOException {
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301111 return NEW_LINE
1112 + getDefaultConstructorString(getGeneratedJavaClassName() + toAppend, modifier, pluginConfig);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301113 }
1114
1115 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301116 * Adds hash code method for class.
1117 *
1118 * @param attr attribute info
1119 * @throws IOException when fails to append to temporary file
1120 */
1121 private void addHashCodeMethod(JavaAttributeInfo attr)
1122 throws IOException {
1123 appendToFile(getHashCodeImplTempFileHandle(), getHashCodeMethod(attr) + NEW_LINE);
1124 }
1125
1126 /**
1127 * Adds equals method for class.
1128 *
1129 * @param attr attribute info
1130 * @throws IOException when fails to append to temporary file
1131 */
1132 private void addEqualsMethod(JavaAttributeInfo attr)
1133 throws IOException {
1134 appendToFile(getEqualsImplTempFileHandle(), getEqualsMethod(attr) + NEW_LINE);
1135 }
1136
1137 /**
1138 * Adds ToString method for class.
1139 *
1140 * @param attr attribute info
1141 * @throws IOException when fails to append to temporary file
1142 */
1143 private void addToStringMethod(JavaAttributeInfo attr)
1144 throws IOException {
1145 appendToFile(getToStringImplTempFileHandle(), getToStringMethod(attr) + NEW_LINE);
1146 }
1147
1148 /**
Bharat saraswal250a7472016-05-12 13:16:57 +05301149 * Adds from string method for union class.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301150 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301151 * @param javaAttributeInfo type attribute info
Bharat saraswal250a7472016-05-12 13:16:57 +05301152 * @param fromStringAttributeInfo from string attribute info
1153 * @throws IOException when fails to append to temporary file
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301154 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301155 void addFromStringMethod(JavaAttributeInfo javaAttributeInfo,
1156 JavaAttributeInfo fromStringAttributeInfo)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301157 throws IOException {
Bharat saraswal250a7472016-05-12 13:16:57 +05301158 appendToFile(getFromStringImplTempFileHandle(), getFromStringMethod(javaAttributeInfo,
1159 fromStringAttributeInfo) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301160 }
1161
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301162 /**
1163 * Returns a temporary file handle for the specific file type.
1164 *
1165 * @param fileName file name
1166 * @return temporary file handle
1167 * @throws IOException when fails to create new file handle
1168 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301169 File getTemporaryFileHandle(String fileName)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301170 throws IOException {
Bharat saraswald14cbe82016-07-14 13:26:18 +05301171 String path = getTempDirPath(getAbsoluteDirPath());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301172 File dir = new File(path);
1173 if (!dir.exists()) {
Shankara-Huaweib7564772016-08-02 18:13:13 +05301174 boolean isCreated = dir.mkdirs();
1175 if (!isCreated) {
1176 throw new IOException("failed to create temporary directory for " + fileName);
1177 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301178 }
1179 File file = new File(path + fileName + TEMP_FILE_EXTENSION);
1180 if (!file.exists()) {
Shankara-Huaweib7564772016-08-02 18:13:13 +05301181 boolean isCreated = file.createNewFile();
1182 if (!isCreated) {
1183 throw new IOException("failed to create temporary files for " + fileName);
1184 }
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301185 } else {
1186 throw new IOException(fileName + " is reused due to YANG naming");
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301187 }
1188 return file;
1189 }
1190
1191 /**
1192 * Returns a temporary file handle for the specific file type.
1193 *
1194 * @param fileName file name
1195 * @return temporary file handle
1196 * @throws IOException when fails to create new file handle
1197 */
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301198 File getJavaFileHandle(String fileName)
1199 throws IOException {
Bharat saraswal039f59c2016-07-14 21:57:13 +05301200 return getFileObject(getDirPath(), fileName, JAVA_FILE_EXTENSION, getBaseCodePath());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301201 }
1202
1203 /**
1204 * Returns data from the temporary files.
1205 *
Bharat saraswalaf413b82016-07-14 15:18:20 +05301206 * @param file temporary file handle
Bharat saraswald14cbe82016-07-14 13:26:18 +05301207 * @param absolutePath absolute path
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301208 * @return stored data from temporary files
1209 * @throws IOException when failed to get data from the given file
1210 */
Bharat saraswald14cbe82016-07-14 13:26:18 +05301211 public String getTemporaryDataFromFileHandle(File file, String absolutePath)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301212 throws IOException {
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301213
Bharat saraswald14cbe82016-07-14 13:26:18 +05301214 String path = getTempDirPath(absolutePath);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301215 if (new File(path + file.getName()).exists()) {
1216 return readAppendFile(path + file.getName(), EMPTY_STRING);
1217 } else {
1218 throw new IOException("Unable to get data from the given "
1219 + file.getName() + " file for " + getGeneratedJavaClassName() + PERIOD);
1220 }
1221 }
1222
1223 /**
1224 * Returns temporary directory path.
1225 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301226 * @param absolutePath absolute path
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301227 * @return directory path
1228 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301229 private String getTempDirPath(String absolutePath) {
Bharat saraswald14cbe82016-07-14 13:26:18 +05301230 return getPackageDirPathFromJavaJPackage(absolutePath) + SLASH + getGeneratedJavaClassName()
Bharat saraswal64e7e232016-07-14 23:33:55 +05301231 + TEMP_FOLDER_NAME_SUFFIX + SLASH;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301232 }
1233
1234 /**
1235 * Parses attribute to get the attribute string.
1236 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301237 * @param attr attribute info
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301238 * @param pluginConfig plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301239 * @return attribute string
1240 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301241 String parseAttribute(JavaAttributeInfo attr, YangPluginConfig pluginConfig) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301242 /*
1243 * TODO: check if this utility needs to be called or move to the caller
1244 */
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301245 String attributeName = getCamelCase(attr.getAttributeName(), pluginConfig.getConflictResolver());
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301246 String attributeAccessType = PRIVATE;
1247 if ((javaFileInfo.getGeneratedFileTypes() & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
1248 attributeAccessType = PROTECTED;
1249 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301250 if (attr.isQualifiedName()) {
Bharat saraswal250a7472016-05-12 13:16:57 +05301251 return getJavaAttributeDefination(attr.getImportInfo().getPkgInfo(),
1252 attr.getImportInfo().getClassInfo(),
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301253 attributeName, attr.isListAttr(), attributeAccessType);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301254 } else {
1255 return getJavaAttributeDefination(null, attr.getImportInfo().getClassInfo(), attributeName,
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301256 attr.isListAttr(), attributeAccessType);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301257 }
1258 }
1259
1260 /**
1261 * Appends content to temporary file.
1262 *
1263 * @param file temporary file
1264 * @param data data to be appended
1265 * @throws IOException when fails to append to file
1266 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301267 void appendToFile(File file, String data)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301268 throws IOException {
1269 try {
1270 insertDataIntoJavaFile(file, data);
1271 } catch (IOException ex) {
1272 throw new IOException("failed to write in temp file.");
1273 }
1274 }
1275
1276 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301277 * Adds parent's info to current node import list.
1278 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301279 * @param curNode current node for which import list needs to be updated
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301280 * @param pluginConfig plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301281 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301282 void addParentInfoInCurNodeTempFile(YangNode curNode, YangPluginConfig pluginConfig) {
Shankara-Huaweib7564772016-08-02 18:13:13 +05301283 caseImportInfo = new JavaQualifiedTypeInfoTranslator();
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301284 YangNode parent = getParentNodeInGenCode(curNode);
1285 if (!(parent instanceof JavaCodeGenerator)) {
1286 throw new TranslatorException("missing parent node to contain current node info in generated file");
1287 }
1288 if (!(curNode instanceof JavaFileInfoContainer)) {
1289 throw new TranslatorException("missing java file information to get the package details "
1290 + "of attribute corresponding to child node");
1291 }
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301292 caseImportInfo.setClassInfo(getCapitalCase(getCamelCase(parent.getName(),
1293 pluginConfig.getConflictResolver())));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301294 caseImportInfo.setPkgInfo(((JavaFileInfoContainer) parent).getJavaFileInfo().getPackage());
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301295
1296 JavaFileInfo fileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
1297
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301298 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301299 .getBeanTempFiles().getJavaImportData().addImportInfo(caseImportInfo,
Bharat saraswald14cbe82016-07-14 13:26:18 +05301300 getCapitalCase(fileInfo.getJavaName()), fileInfo.getPackage());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301301 }
1302
1303 /**
1304 * Adds leaf attributes in generated files.
1305 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301306 * @param listOfLeaves list of YANG leaf
1307 * @param yangPluginConfig plugin config
Bharat saraswal64e7e232016-07-14 23:33:55 +05301308 * @param curNode current node
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301309 * @throws IOException IO operation fail
1310 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301311 private void addLeavesInfoToTempFiles(List<YangLeaf> listOfLeaves,
1312 YangPluginConfig yangPluginConfig, YangNode curNode)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301313 throws IOException {
1314 if (listOfLeaves != null) {
1315 for (YangLeaf leaf : listOfLeaves) {
1316 if (!(leaf instanceof JavaLeafInfoContainer)) {
1317 throw new TranslatorException("Leaf does not have java information");
1318 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301319 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
1320 TempJavaBeanFragmentFiles tempJavaBeanFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1321 .getTempJavaCodeFragmentFiles().getBeanTempFiles();
1322 addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeaf(tempJavaBeanFragmentFiles, leaf,
1323 yangPluginConfig), yangPluginConfig);
1324 } else {
1325 addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeaf(this, leaf, yangPluginConfig),
1326 yangPluginConfig);
1327 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301328 }
1329 }
1330 }
1331
1332 /**
1333 * Adds leaf list's attributes in generated files.
1334 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301335 * @param listOfLeafList list of YANG leaves
1336 * @param yangPluginConfig plugin config
Bharat saraswal64e7e232016-07-14 23:33:55 +05301337 * @param curNode current node
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301338 * @throws IOException IO operation fail
1339 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301340 private void addLeafListInfoToTempFiles(List<YangLeafList> listOfLeafList, YangPluginConfig yangPluginConfig,
1341 YangNode curNode) throws IOException {
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301342 if (listOfLeafList != null) {
1343 for (YangLeafList leafList : listOfLeafList) {
1344 if (!(leafList instanceof JavaLeafInfoContainer)) {
1345 throw new TranslatorException("Leaf-list does not have java information");
1346 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301347 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
1348 TempJavaBeanFragmentFiles tempJavaBeanFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1349 .getTempJavaCodeFragmentFiles().getBeanTempFiles();
1350 addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeafList(tempJavaBeanFragmentFiles,
1351 leafList, yangPluginConfig), yangPluginConfig);
1352 } else {
1353 addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeafList(this,
1354 leafList, yangPluginConfig), yangPluginConfig);
1355 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301356 }
1357 }
1358 }
1359
1360 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301361 * Adds all the leaves in the current data model node as part of the generated temporary file.
Bharat saraswald14cbe82016-07-14 13:26:18 +05301362 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301363 * @param curNode current node
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301364 * @param yangPluginConfig plugin config
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301365 * @throws IOException IO operation fail
1366 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301367 void addCurNodeLeavesInfoToTempFiles(YangNode curNode,
Shankara-Huaweib7564772016-08-02 18:13:13 +05301368 YangPluginConfig yangPluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301369 throws IOException {
1370 if (!(curNode instanceof YangLeavesHolder)) {
1371 throw new TranslatorException("Data model node does not have any leaves");
1372 }
1373 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301374 addLeavesInfoToTempFiles(leavesHolder.getListOfLeaf(), yangPluginConfig, curNode);
1375 addLeafListInfoToTempFiles(leavesHolder.getListOfLeafList(), yangPluginConfig, curNode);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301376 }
1377
1378 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301379 * Adds the new attribute info to the target generated temporary files.
1380 *
Bharat saraswalaf413b82016-07-14 15:18:20 +05301381 * @param newAttrInfo the attribute info that needs to be added to temporary files
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301382 * @param pluginConfig plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301383 * @throws IOException IO operation fail
1384 */
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301385 void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo newAttrInfo, YangPluginConfig pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301386 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301387 setAttributePresent(true);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301388 if ((getGeneratedTempFiles() & ATTRIBUTES_MASK) != 0) {
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301389 addAttribute(newAttrInfo, pluginConfig);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301390 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301391
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301392 if ((getGeneratedTempFiles() & GETTER_FOR_INTERFACE_MASK) != 0) {
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301393 addGetterForInterface(newAttrInfo, pluginConfig);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301394 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301395
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301396 if ((getGeneratedTempFiles() & SETTER_FOR_INTERFACE_MASK) != 0) {
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301397 addSetterForInterface(newAttrInfo, pluginConfig);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301398 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301399
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301400 if ((getGeneratedTempFiles() & SETTER_FOR_CLASS_MASK) != 0) {
1401 addSetterImpl(newAttrInfo);
1402 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301403
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301404 if ((getGeneratedTempFiles() & HASH_CODE_IMPL_MASK) != 0) {
1405 addHashCodeMethod(newAttrInfo);
1406 }
1407 if ((getGeneratedTempFiles() & EQUALS_IMPL_MASK) != 0) {
1408 addEqualsMethod(newAttrInfo);
1409 }
1410 if ((getGeneratedTempFiles() & TO_STRING_IMPL_MASK) != 0) {
1411 addToStringMethod(newAttrInfo);
1412 }
Bharat saraswal250a7472016-05-12 13:16:57 +05301413
Bharat saraswal64e7e232016-07-14 23:33:55 +05301414 if (!newAttrInfo.isIntConflict() &&
1415 !newAttrInfo.isLongConflict()) {
1416 if ((getGeneratedTempFiles() & GETTER_FOR_CLASS_MASK) != 0) {
1417 addGetterImpl(newAttrInfo, pluginConfig);
1418 }
1419
1420 if ((getGeneratedTempFiles() & FROM_STRING_IMPL_MASK) != 0) {
Shankara-Huaweib7564772016-08-02 18:13:13 +05301421 JavaQualifiedTypeInfoTranslator qualifiedInfoOfFromString = getQualifiedInfoOfFromString(newAttrInfo,
Bharat saraswal64e7e232016-07-14 23:33:55 +05301422 pluginConfig.getConflictResolver());
Bharat saraswal250a7472016-05-12 13:16:57 +05301423 /*
1424 * Create a new java attribute info with qualified information of
1425 * wrapper classes.
1426 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301427 JavaAttributeInfo fromStringAttributeInfo = getAttributeInfoForTheData(qualifiedInfoOfFromString,
1428 newAttrInfo.getAttributeName(),
1429 newAttrInfo.getAttributeType(),
1430 getIsQualifiedAccessOrAddToImportList(qualifiedInfoOfFromString), false);
Bharat saraswal250a7472016-05-12 13:16:57 +05301431
Bharat saraswal64e7e232016-07-14 23:33:55 +05301432 addFromStringMethod(newAttrInfo, fromStringAttributeInfo);
1433 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301434 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301435 }
1436
1437 /**
1438 * Returns java class name.
1439 *
1440 * @param suffix for the class name based on the file type
1441 * @return java class name
1442 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301443 String getJavaClassName(String suffix) {
janani b703cfe42016-05-17 13:12:22 +05301444 return getCapitalCase(getJavaFileInfo().getJavaName()) + suffix;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301445 }
1446
1447 /**
Bharat saraswald14cbe82016-07-14 13:26:18 +05301448 * Returns java class name.
1449 *
1450 * @return java class name
1451 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301452 private String getImplClassName() {
Bharat saraswald14cbe82016-07-14 13:26:18 +05301453 return getCapitalCase(DEFAULT) + getCapitalCase(getJavaFileInfo().getJavaName());
1454 }
1455
1456 /**
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301457 * Returns op param java class name.
1458 *
1459 * @return op param java class name
1460 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301461 private String getOpParamImplClassName() {
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301462 return getCapitalCase(getJavaFileInfo().getJavaName()) + OPERATION;
1463 }
1464
1465 /**
1466 * Returns op param builder java class name.
1467 *
1468 * @return op param builder java class name
1469 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301470 private String getOpParamBuilderImplClassName() {
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301471 return getCapitalCase(getJavaFileInfo().getJavaName()) + OPERATION + BUILDER;
1472 }
1473
1474 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301475 * Returns the directory path.
1476 *
1477 * @return directory path
1478 */
1479 private String getDirPath() {
1480 return getJavaFileInfo().getPackageFilePath();
1481 }
1482
1483 /**
1484 * Constructs java code exit.
1485 *
1486 * @param fileType generated file type
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301487 * @param curNode current YANG node
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301488 * @throws IOException when fails to generate java files
1489 */
1490 public void generateJavaFile(int fileType, YangNode curNode)
1491 throws IOException {
Bharat saraswalaf413b82016-07-14 15:18:20 +05301492
1493 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
1494 addResolvedAugmentedDataNodeImports(curNode);
1495 }
Bharat saraswal039f59c2016-07-14 21:57:13 +05301496 TempJavaBeanFragmentFiles tempJavaBeanFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1497 .getTempJavaCodeFragmentFiles().getBeanTempFiles();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301498 List<String> imports = ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getBeanTempFiles()
1499 .getJavaImportData().getImports();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301500
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301501 createPackage(curNode);
1502
1503 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301504 * Generate java code.
1505 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301506 if ((fileType & INTERFACE_MASK) != 0 || (fileType &
1507 BUILDER_INTERFACE_MASK) != 0) {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301508
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301509 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301510 * Create interface file.
1511 */
1512 setInterfaceJavaFileHandle(getJavaFileHandle(getJavaClassName(INTERFACE_FILE_NAME_SUFFIX)));
1513 setInterfaceJavaFileHandle(
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301514 generateInterfaceFile(getInterfaceJavaFileHandle(), imports, curNode, isAttributePresent()));
1515 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301516 * Create builder interface file.
1517 */
1518 if ((fileType & BUILDER_INTERFACE_MASK) != 0) {
1519 setBuilderInterfaceJavaFileHandle(
1520 getJavaFileHandle(getJavaClassName(BUILDER_INTERFACE_FILE_NAME_SUFFIX)));
1521 setBuilderInterfaceJavaFileHandle(
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301522 generateBuilderInterfaceFile(getBuilderInterfaceJavaFileHandle(), curNode,
1523 isAttributePresent()));
1524 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301525 * Append builder interface file to interface file and close it.
1526 */
1527 mergeJavaFiles(getBuilderInterfaceJavaFileHandle(), getInterfaceJavaFileHandle());
Bharat saraswalc2d3be12016-06-16 00:29:12 +05301528 validateLineLength(getInterfaceJavaFileHandle());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301529 }
1530 insertDataIntoJavaFile(getInterfaceJavaFileHandle(), getJavaClassDefClose());
Bharat saraswald14cbe82016-07-14 13:26:18 +05301531
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301532 if (curNode instanceof YangCase) {
1533 removeCaseImport(imports);
1534 }
Bharat saraswald14cbe82016-07-14 13:26:18 +05301535
Bharat saraswal039f59c2016-07-14 21:57:13 +05301536 if (curNode instanceof YangAugment) {
1537 removeAugmentedInfoImport(imports);
Bharat saraswald14cbe82016-07-14 13:26:18 +05301538 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301539 }
Bharat saraswal250a7472016-05-12 13:16:57 +05301540 if ((fileType & BUILDER_CLASS_MASK) != 0 || (fileType & IMPL_CLASS_MASK) != 0) {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301541 if (isAttributePresent()) {
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301542 addImportsToStringAndHasCodeMethods(imports, true);
Bharat saraswalaf413b82016-07-14 15:18:20 +05301543 }
1544 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal039f59c2016-07-14 21:57:13 +05301545 addImportsForAugmentableClass(imports, true);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301546 }
Bharat saraswal250a7472016-05-12 13:16:57 +05301547 sortImports(imports);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301548 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301549 * Create impl class file.
1550 */
Bharat saraswald14cbe82016-07-14 13:26:18 +05301551 setImplClassJavaFileHandle(getJavaFileHandle(getImplClassName()));
1552 setImplClassJavaFileHandle(
1553 generateImplClassFile(getImplClassJavaFileHandle(), curNode, isAttributePresent(), imports));
1554
1555 /*
1556 * Create builder class file.
1557 */
1558 if ((fileType & BUILDER_CLASS_MASK) != 0) {
1559 setBuilderClassJavaFileHandle(getJavaFileHandle(getJavaClassName(BUILDER_CLASS_FILE_NAME_SUFFIX)));
1560 setBuilderClassJavaFileHandle(
1561 generateBuilderClassFile(getBuilderClassJavaFileHandle(), curNode,
1562 isAttributePresent()));
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301563 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301564 * Append impl class to builder class and close it.
1565 */
Bharat saraswald14cbe82016-07-14 13:26:18 +05301566 mergeJavaFiles(getBuilderClassJavaFileHandle(), getImplClassJavaFileHandle());
1567 validateLineLength(getImplClassJavaFileHandle());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301568 }
Bharat saraswald14cbe82016-07-14 13:26:18 +05301569 insertDataIntoJavaFile(getImplClassJavaFileHandle(), getJavaClassDefClose());
Bharat saraswal039f59c2016-07-14 21:57:13 +05301570 if (curNode instanceof YangAugmentableNode) {
1571 addImportsForAugmentableClass(imports, false);
1572 }
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301573 if (!(curNode instanceof YangModule)) {
1574 if (isAttributePresent()) {
1575 addImportsToStringAndHasCodeMethods(imports, false);
1576 }
Bharat saraswal039f59c2016-07-14 21:57:13 +05301577 if (curNode instanceof YangAugmentableNode) {
1578 addYangAugmentedOpParamInfoImport(imports);
1579 }
Shankara-Huaweib7564772016-08-02 18:13:13 +05301580 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo = new JavaQualifiedTypeInfoTranslator();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301581 qualifiedTypeInfo.setClassInfo(getCapitalCase(DEFAULT) + getCapitalCase(getJavaFileInfo()
1582 .getJavaName()));
1583 qualifiedTypeInfo.setPkgInfo(getJavaFileInfo().getPackage());
1584 getJavaExtendsListHolder().addToExtendsList(qualifiedTypeInfo, curNode,
1585 tempJavaBeanFragmentFiles);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301586 addBitSetImport(imports, true);
Bharat saraswal039f59c2016-07-14 21:57:13 +05301587 if (curNode instanceof YangAugment) {
1588 addYangAugmentedOpParamInfoImport(imports);
1589 }
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301590 /*
1591 * Create impl class file.
1592 */
1593 setOpParamClassJavaFileHandle(getJavaFileHandle(getOpParamImplClassName()));
1594 setOpParamClassJavaFileHandle(
1595 generateOpParamImplClassFile(getOpParamClassJavaFileHandle(), curNode,
Bharat saraswal039f59c2016-07-14 21:57:13 +05301596 isAttributePresent(), imports));
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301597
1598 /*
1599 * Create builder class file.
1600 */
1601 if ((fileType & BUILDER_CLASS_MASK) != 0) {
Shankara-Huaweib7564772016-08-02 18:13:13 +05301602 setBuilderOpParamClassJavaFileHandle(getJavaFileHandle(getOpParamBuilderImplClassName()));
1603 setBuilderOpParamClassJavaFileHandle(
1604 generateOpParamBuilderClassFile(getBuilderOpParamClassJavaFileHandle(), curNode,
Bharat saraswal039f59c2016-07-14 21:57:13 +05301605 isAttributePresent()));
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301606 /*
1607 * Append impl class to builder class and close it.
1608 */
Shankara-Huaweib7564772016-08-02 18:13:13 +05301609 mergeJavaFiles(getBuilderOpParamClassJavaFileHandle(), getOpParamClassJavaFileHandle());
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301610 validateLineLength(getOpParamClassJavaFileHandle());
1611
Bharat saraswal64e7e232016-07-14 23:33:55 +05301612 addBitSetImport(imports, false);
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301613 }
1614 insertDataIntoJavaFile(getOpParamClassJavaFileHandle(), getJavaClassDefClose());
Bharat saraswal039f59c2016-07-14 21:57:13 +05301615
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301616 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301617 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301618 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301619 * Close all the file handles.
1620 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301621 freeTemporaryResources(false);
1622 }
1623
Bharat saraswal039f59c2016-07-14 21:57:13 +05301624 /*Adds import for YANG augmented op param info.*/
1625 private void addYangAugmentedOpParamInfoImport(List<String> imports) {
1626 imports.add(getJavaImportData().getYangAugmentedOpParamInfoImport());
Bharat saraswald14cbe82016-07-14 13:26:18 +05301627 }
1628
1629 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301630 * Adds imports for ToString and HashCodeMethod.
1631 *
Bharat saraswal039f59c2016-07-14 21:57:13 +05301632 * @param imports import list
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301633 * @param operation add or remove
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301634 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301635 void addImportsToStringAndHasCodeMethods(List<String> imports, boolean operation) {
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301636 if (operation) {
1637 imports.add(getJavaImportData().getImportForHashAndEquals());
1638 imports.add(getJavaImportData().getImportForToString());
1639 } else {
1640 imports.remove(getJavaImportData().getImportForHashAndEquals());
1641 imports.remove(getJavaImportData().getImportForToString());
1642 }
1643 }
1644
1645 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301646 * Adds imports for bitSet method.
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301647 *
Bharat saraswal039f59c2016-07-14 21:57:13 +05301648 * @param imports import list
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301649 * @param operation add or remove
1650 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301651 private void addBitSetImport(List<String> imports, boolean operation) {
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301652 if (operation) {
1653 imports.add(getJavaImportData().getImportForToBitSet());
1654 } else {
1655 imports.remove(getJavaImportData().getImportForToBitSet());
1656 }
Bharat saraswalaf413b82016-07-14 15:18:20 +05301657 }
1658
1659
1660 /**
1661 * Adds import for map and hash map.
1662 *
Bharat saraswal039f59c2016-07-14 21:57:13 +05301663 * @param imports import list
1664 * @param operations true for adding and false for deletion
Bharat saraswalaf413b82016-07-14 15:18:20 +05301665 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301666 private void addImportsForAugmentableClass(List<String> imports, boolean operations) {
Bharat saraswal039f59c2016-07-14 21:57:13 +05301667 if (operations) {
1668 imports.add(getJavaImportData().getHashMapImport());
1669 imports.add(getJavaImportData().getMapImport());
1670 imports.add(getJavaImportData().getYangAugmentedInfoImport());
1671 } else {
1672 imports.remove(getJavaImportData().getHashMapImport());
1673 imports.remove(getJavaImportData().getMapImport());
Bharat saraswald14cbe82016-07-14 13:26:18 +05301674 }
Bharat saraswald14cbe82016-07-14 13:26:18 +05301675 }
1676
1677 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301678 * Removes case import info from import list.
1679 *
1680 * @param imports list of imports
1681 * @return import for class
1682 */
1683 private List<String> removeCaseImport(List<String> imports) {
1684 if (imports != null && caseImportInfo != null) {
1685 String caseImport = IMPORT + caseImportInfo.getPkgInfo() + PERIOD + caseImportInfo.getClassInfo() +
1686 SEMI_COLAN + NEW_LINE;
1687 imports.remove(caseImport);
1688 }
1689 return imports;
1690 }
1691
1692 /**
Bharat saraswal039f59c2016-07-14 21:57:13 +05301693 * Removes case import info from import list.
1694 *
1695 * @param imports list of imports
Bharat saraswal039f59c2016-07-14 21:57:13 +05301696 */
1697 private void removeAugmentedInfoImport(List<String> imports) {
1698 imports.remove(getJavaImportData().getYangAugmentedInfoImport());
Shankara-Huaweib7564772016-08-02 18:13:13 +05301699 for (JavaQualifiedTypeInfoTranslator type : getJavaImportData().getImportSet()) {
Vidyashree Rama72719fa2016-07-15 14:06:56 +05301700 if (type.getClassInfo().equals(YANG_AUGMENTED_INFO)) {
1701 getJavaImportData().getImportSet().remove(type);
1702 getJavaExtendsListHolder().getExtendsList().remove(type);
1703 }
1704 }
Bharat saraswal039f59c2016-07-14 21:57:13 +05301705 }
1706
1707 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301708 * Removes all temporary file handles.
1709 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301710 * @param isErrorOccurred flag to tell translator that error has occurred while file generation
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301711 * @throws IOException when failed to delete the temporary files
1712 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301713 public void freeTemporaryResources(boolean isErrorOccurred)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301714 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301715 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301716 * Close all java file handles and when error occurs delete the files.
1717 */
1718 if ((getGeneratedJavaFiles() & INTERFACE_MASK) != 0) {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301719 closeFile(getInterfaceJavaFileHandle(), isErrorOccurred);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301720 }
1721 if ((getGeneratedJavaFiles() & BUILDER_CLASS_MASK) != 0) {
Bharat saraswald14cbe82016-07-14 13:26:18 +05301722 closeFile(getBuilderClassJavaFileHandle(), true);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301723 }
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301724 if ((getGeneratedJavaFiles() & OPERATION_BUILDER_CLASS_MASK) != 0) {
Shankara-Huaweib7564772016-08-02 18:13:13 +05301725 closeFile(getBuilderOpParamClassJavaFileHandle(), true);
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301726 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301727 if ((getGeneratedJavaFiles() & BUILDER_INTERFACE_MASK) != 0) {
1728 closeFile(getBuilderInterfaceJavaFileHandle(), true);
1729 }
1730 if ((getGeneratedJavaFiles() & IMPL_CLASS_MASK) != 0) {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301731 closeFile(getImplClassJavaFileHandle(), isErrorOccurred);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301732 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301733
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301734 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301735 * Close all temporary file handles and delete the files.
1736 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301737 if ((getGeneratedTempFiles() & GETTER_FOR_CLASS_MASK) != 0) {
1738 closeFile(getGetterImplTempFileHandle(), true);
1739 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301740 if ((getGeneratedTempFiles() & ATTRIBUTES_MASK) != 0) {
1741 closeFile(getAttributesTempFileHandle(), true);
1742 }
1743 if ((getGeneratedTempFiles() & HASH_CODE_IMPL_MASK) != 0) {
1744 closeFile(getHashCodeImplTempFileHandle(), true);
1745 }
1746 if ((getGeneratedTempFiles() & TO_STRING_IMPL_MASK) != 0) {
1747 closeFile(getToStringImplTempFileHandle(), true);
1748 }
1749 if ((getGeneratedTempFiles() & EQUALS_IMPL_MASK) != 0) {
1750 closeFile(getEqualsImplTempFileHandle(), true);
1751 }
Bharat saraswal250a7472016-05-12 13:16:57 +05301752 if ((getGeneratedTempFiles() & FROM_STRING_IMPL_MASK) != 0) {
1753 closeFile(getFromStringImplTempFileHandle(), true);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301754 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301755 }
1756
1757 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +05301758 * Returns if the attribute needs to be accessed in a qualified manner or not, if it needs to be imported, then the
1759 * same needs to be done.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301760 *
1761 * @param importInfo import info for the current attribute being added
1762 * @return status of the qualified access to the attribute
1763 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301764 boolean getIsQualifiedAccessOrAddToImportList(
Shankara-Huaweib7564772016-08-02 18:13:13 +05301765 JavaQualifiedTypeInfoTranslator importInfo) {
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301766
1767 return getJavaImportData().addImportInfo(importInfo, getGeneratedJavaClassName(),
1768 getJavaFileInfo().getPackage());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301769 }
1770
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301771 /**
1772 * Returns java file handle for op param class file.
1773 *
1774 * @return java file handle for op param class file
1775 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301776 private File getOpParamClassJavaFileHandle() {
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301777 return opParamClassJavaFileHandle;
1778 }
1779
1780 /**
1781 * Sets the java file handle for op param class file.
1782 *
Bharat saraswal039f59c2016-07-14 21:57:13 +05301783 * @param opParamClassJavaFileHandle java file handle
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301784 */
Bharat saraswal64e7e232016-07-14 23:33:55 +05301785 private void setOpParamClassJavaFileHandle(File opParamClassJavaFileHandle) {
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301786 this.opParamClassJavaFileHandle = opParamClassJavaFileHandle;
1787 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301788}