blob: 19c2d54a6f547cd683b2d90c19c10390daa24807 [file] [log] [blame]
Vinod Kumar Se4b9b0c2016-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 Se4b9b0c2016-04-30 21:09:15 +053020import java.util.List;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053021
Bharat saraswald50c6382016-07-14 21:57:13 +053022import org.onosproject.yangutils.datamodel.YangAugment;
Bharat saraswalb551aae2016-07-14 15:18:20 +053023import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053024import org.onosproject.yangutils.datamodel.YangCase;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053025import org.onosproject.yangutils.datamodel.YangLeaf;
26import org.onosproject.yangutils.datamodel.YangLeafList;
27import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Bharat saraswalb551aae2016-07-14 15:18:20 +053028import org.onosproject.yangutils.datamodel.YangModule;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053029import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalb551aae2016-07-14 15:18:20 +053030import org.onosproject.yangutils.datamodel.YangSubModule;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053031import org.onosproject.yangutils.translator.exception.TranslatorException;
32import org.onosproject.yangutils.translator.tojava.javamodel.JavaLeafInfoContainer;
Bharat saraswalcad0e652016-05-26 23:48:38 +053033import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaGrouping;
Bharat saraswalcad0e652016-05-26 23:48:38 +053034import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule;
Bharat saraswalcad0e652016-05-26 23:48:38 +053035import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModule;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053036import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053037import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053038
Bharat saraswal96dfef02016-06-16 00:29:12 +053039import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053040import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
41import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
42import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
Bharat saraswalb551aae2016-07-14 15:18:20 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
45import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPE_CLASS;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
47import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_BUILDER_CLASS_MASK;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswalc0e04842016-05-12 13:16:57 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
53import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
56import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
57import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
58import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
Bharat saraswalc0e04842016-05-12 13:16:57 +053059import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedInfoOfFromString;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053060import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedTypeInfoOfCurNode;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053061import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.updateJavaFileInfo;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053062import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefination;
63import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaClassDefClose;
Bharat saraswalb551aae2016-07-14 15:18:20 +053064import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.sortImports;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053065import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderClassFile;
66import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderInterfaceFile;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053067import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateImplClassFile;
68import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateInterfaceFile;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +053069import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateOpParamBuilderClassFile;
70import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateOpParamImplClassFile;
Bharat saraswald50c6382016-07-14 21:57:13 +053071import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.addResolvedAugmentedDataNodeImports;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053072import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053073import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053074import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildString;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053075import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getDefaultConstructorString;
76import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
Bharat saraswalc0e04842016-05-12 13:16:57 +053077import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethod;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053078import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
79import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
80import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053081import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053082import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
83import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
84import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethod;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053085import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.parseBuilderInterfaceBuildMethodString;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053086import static org.onosproject.yangutils.utils.UtilConstants.ACTIVATE;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053087import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053088import static org.onosproject.yangutils.utils.UtilConstants.COMPONENT;
89import static org.onosproject.yangutils.utils.UtilConstants.DEACTIVATE;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053090import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053091import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
92import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053093import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
94import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053095import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053096import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswald50c6382016-07-14 21:57:13 +053097import static org.onosproject.yangutils.utils.UtilConstants.OPERATION;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053098import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswald50c6382016-07-14 21:57:13 +053099import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
100import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530101import static org.onosproject.yangutils.utils.UtilConstants.REFERENCE;
102import static org.onosproject.yangutils.utils.UtilConstants.REFERENCE_CARDINALITY;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530103import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530104import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530105import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530106import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530107import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.readAppendFile;
108import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530109import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530110import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530111import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
112import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
113import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530114import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
115import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.mergeJavaFiles;
Bharat saraswal96dfef02016-06-16 00:29:12 +0530116import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530117
118/**
Bharat saraswalb551aae2016-07-14 15:18:20 +0530119 * Represents implementation of java code fragments temporary implementations. Manages the common temp file required for
120 * Java file(s) generated.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530121 */
122public class TempJavaFragmentFiles {
Bharat saraswalc0e04842016-05-12 13:16:57 +0530123
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530124 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530125 * File type extension for java classes.
126 */
127 private static final String JAVA_FILE_EXTENSION = ".java";
Bharat saraswalc0e04842016-05-12 13:16:57 +0530128
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530129 /**
130 * File type extension for temporary classes.
131 */
132 private static final String TEMP_FILE_EXTENSION = ".tmp";
Bharat saraswalc0e04842016-05-12 13:16:57 +0530133
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530134 /**
135 * Folder suffix for temporary files folder.
136 */
Bharat saraswale707f032016-07-14 23:33:55 +0530137 private static final String TEMP_FOLDER_NAME_SUFFIX = "-Temp";
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530138
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530139 /**
140 * File name for getter method.
141 */
142 private static final String GETTER_METHOD_FILE_NAME = "GetterMethod";
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530143
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530144 /**
145 * File name for setter method.
146 */
147 private static final String SETTER_METHOD_FILE_NAME = "SetterMethod";
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530148
149 /**
150 * File name for getter method implementation.
151 */
152 private static final String GETTER_METHOD_IMPL_FILE_NAME = "GetterMethodImpl";
153
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530154 /**
155 * File name for setter method implementation.
156 */
157 private static final String SETTER_METHOD_IMPL_FILE_NAME = "SetterMethodImpl";
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530158
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530159 /**
160 * File name for attributes.
161 */
162 private static final String ATTRIBUTE_FILE_NAME = "Attributes";
Bharat saraswalc0e04842016-05-12 13:16:57 +0530163
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530164 /**
165 * File name for to string method.
166 */
167 private static final String TO_STRING_METHOD_FILE_NAME = "ToString";
Bharat saraswalc0e04842016-05-12 13:16:57 +0530168
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530169 /**
170 * File name for hash code method.
171 */
172 private static final String HASH_CODE_METHOD_FILE_NAME = "HashCode";
Bharat saraswalc0e04842016-05-12 13:16:57 +0530173
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530174 /**
175 * File name for equals method.
176 */
177 private static final String EQUALS_METHOD_FILE_NAME = "Equals";
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530178
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530179 /**
Bharat saraswalc0e04842016-05-12 13:16:57 +0530180 * File name for from string method.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530181 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530182 private static final String FROM_STRING_METHOD_FILE_NAME = "FromString";
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530183
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530184 /**
185 * File name for interface java file name suffix.
186 */
187 private static final String INTERFACE_FILE_NAME_SUFFIX = EMPTY_STRING;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530188
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530189 /**
190 * File name for builder interface file name suffix.
191 */
192 private static final String BUILDER_INTERFACE_FILE_NAME_SUFFIX = BUILDER + INTERFACE;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530193
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530194 /**
195 * File name for builder class file name suffix.
196 */
197 private static final String BUILDER_CLASS_FILE_NAME_SUFFIX = BUILDER;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530198
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530199 /**
Bharat saraswalb551aae2016-07-14 15:18:20 +0530200 * Information about the java files being generated.
201 */
202 private JavaFileInfo javaFileInfo;
203
204 /**
205 * Imported class info.
206 */
207 private JavaImportData javaImportData;
208
209 /**
210 * The variable which guides the types of temporary files generated using the temporary generated file types mask.
211 */
212 private int generatedTempFiles;
213
214 /**
215 * Absolute path where the target java file needs to be generated.
216 */
217 private String absoluteDirPath;
218
219 /**
220 * Contains all the interface(s)/class name which will be extended by generated files.
221 */
222 private JavaExtendsListHolder javaExtendsListHolder;
223
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530224 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530225 * Java file handle for interface file.
226 */
227 private File interfaceJavaFileHandle;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530228
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530229 /**
230 * Java file handle for builder interface file.
231 */
232 private File builderInterfaceJavaFileHandle;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530233
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530234 /**
235 * Java file handle for builder class file.
236 */
237 private File builderClassJavaFileHandle;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530238
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530239 /**
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530240 * Java file handle for builder op param class file.
241 */
242 private File builderOpParmClassJavaFileHandle;
243
244 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530245 * Java file handle for impl class file.
246 */
247 private File implClassJavaFileHandle;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530248
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530249 /**
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530250 * Java file handle for op param class file.
251 */
252 private File opParamClassJavaFileHandle;
253
254 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530255 * Temporary file handle for attribute.
256 */
257 private File attributesTempFileHandle;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530258
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530259 /**
260 * Temporary file handle for getter of interface.
261 */
262 private File getterInterfaceTempFileHandle;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530263
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530264 /**
265 * Temporary file handle for setter of interface.
266 */
267 private File setterInterfaceTempFileHandle;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530268
269 /**
270 * Temporary file handle for getter of class.
271 */
272 private File getterImplTempFileHandle;
273
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530274 /**
275 * Temporary file handle for setter of class.
276 */
277 private File setterImplTempFileHandle;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530278
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530279 /**
280 * Temporary file handle for hash code method of class.
281 */
282 private File hashCodeImplTempFileHandle;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530283
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530284 /**
285 * Temporary file handle for equals method of class.
286 */
287 private File equalsImplTempFileHandle;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530288
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530289 /**
290 * Temporary file handle for to string method of class.
291 */
292 private File toStringImplTempFileHandle;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530293
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530294 /**
Bharat saraswalc0e04842016-05-12 13:16:57 +0530295 * Temporary file handle for from string method of class.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530296 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530297 private File fromStringImplTempFileHandle;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530298
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530299 /**
300 * Import info for case.
301 */
302 private JavaQualifiedTypeInfo caseImportInfo;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530303
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530304 /**
305 * Is attribute added.
306 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530307 private boolean isAttributePresent;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530308
Bharat saraswalc0e04842016-05-12 13:16:57 +0530309 /**
Bharat saraswald50c6382016-07-14 21:57:13 +0530310 * Base code gen path.
311 */
312 private String baseCodePath;
313
Bharat saraswalb551aae2016-07-14 15:18:20 +0530314 TempJavaFragmentFiles() {
315 }
316
317 /**
318 * Creates an instance of temporary java code fragment.
319 *
320 * @param javaFileInfo generated java file information
321 * @throws IOException when fails to create new file handle
322 */
323 TempJavaFragmentFiles(JavaFileInfo javaFileInfo)
324 throws IOException {
325 setJavaExtendsListHolder(new JavaExtendsListHolder());
326 setJavaImportData(new JavaImportData());
327 setJavaFileInfo(javaFileInfo);
Bharat saraswald50c6382016-07-14 21:57:13 +0530328 if ((javaFileInfo.getGeneratedFileTypes() & GENERATE_SERVICE_AND_MANAGER) != 0) {
329 setBaseCodePath(getJavaFileInfo().getPluginConfig().getCodeGenDir());
330 setAbsoluteDirPath(getAbsolutePackagePath(getJavaFileInfo().getPluginConfig().getCodeGenDir(),
331 getJavaFileInfo().getPackageFilePath()));
332 } else {
333 setBaseCodePath(getJavaFileInfo().getBaseCodeGenPath());
334 setAbsoluteDirPath(getAbsolutePackagePath(getJavaFileInfo().getBaseCodeGenPath(),
335 getJavaFileInfo().getPackageFilePath()));
336 }
Bharat saraswalb551aae2016-07-14 15:18:20 +0530337 /*
338 * Initialize getter when generation file type matches to interface
339 * mask.
340 */
341 if ((getGeneratedJavaFiles() & INTERFACE_MASK) != 0) {
342 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK);
343 }
344
345 /*
346 * Initialize getter and setter when generation file type matches to
347 * builder interface mask.
348 */
349 if ((getGeneratedJavaFiles() & BUILDER_INTERFACE_MASK) != 0) {
350 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK);
351 addGeneratedTempFile(SETTER_FOR_INTERFACE_MASK);
352 }
353
354 /*
355 * Initialize getterImpl, setterImpl and attributes when generation file
356 * type matches to builder class mask.
357 */
358 if ((getGeneratedJavaFiles() & BUILDER_CLASS_MASK) != 0) {
359 addGeneratedTempFile(ATTRIBUTES_MASK);
360 addGeneratedTempFile(GETTER_FOR_CLASS_MASK);
361 addGeneratedTempFile(SETTER_FOR_CLASS_MASK);
Bharat saraswalb551aae2016-07-14 15:18:20 +0530362 }
363
364 /*
365 * Initialize getterImpl, attributes, constructor, hash code, equals and
366 * to strings when generation file type matches to impl class mask.
367 */
368 if ((getGeneratedJavaFiles() & IMPL_CLASS_MASK) != 0) {
369 addGeneratedTempFile(ATTRIBUTES_MASK);
370 addGeneratedTempFile(GETTER_FOR_CLASS_MASK);
371 addGeneratedTempFile(HASH_CODE_IMPL_MASK);
372 addGeneratedTempFile(EQUALS_IMPL_MASK);
373 addGeneratedTempFile(TO_STRING_IMPL_MASK);
374 }
375
376 /*
377 * Initialize temp files to generate type class.
378 */
379 if ((getGeneratedJavaFiles() & GENERATE_TYPE_CLASS) != 0) {
380 addGeneratedTempFile(ATTRIBUTES_MASK);
381 addGeneratedTempFile(GETTER_FOR_CLASS_MASK);
382 addGeneratedTempFile(HASH_CODE_IMPL_MASK);
383 addGeneratedTempFile(EQUALS_IMPL_MASK);
384 addGeneratedTempFile(TO_STRING_IMPL_MASK);
385 addGeneratedTempFile(FROM_STRING_IMPL_MASK);
386 }
387
388 /*
389 * Initialize temp files to generate enum class.
390 */
391 if ((getGeneratedJavaFiles() & GENERATE_ENUM_CLASS) != 0) {
392 addGeneratedTempFile(FROM_STRING_IMPL_MASK);
393 }
394
395 /*
396 * Set temporary file handles.
397 */
398 if ((getGeneratedTempFiles() & ATTRIBUTES_MASK) != 0) {
399 setAttributesTempFileHandle(getTemporaryFileHandle(ATTRIBUTE_FILE_NAME));
400 }
401
402 if ((getGeneratedTempFiles() & GETTER_FOR_INTERFACE_MASK) != 0) {
403 setGetterInterfaceTempFileHandle(getTemporaryFileHandle(GETTER_METHOD_FILE_NAME));
404 }
405
406 if ((getGeneratedTempFiles() & SETTER_FOR_INTERFACE_MASK) != 0) {
407 setSetterInterfaceTempFileHandle(getTemporaryFileHandle(SETTER_METHOD_FILE_NAME));
408 }
409
410 if ((getGeneratedTempFiles() & GETTER_FOR_CLASS_MASK) != 0) {
411 setGetterImplTempFileHandle(getTemporaryFileHandle(GETTER_METHOD_IMPL_FILE_NAME));
412 }
413
414 if ((getGeneratedTempFiles() & SETTER_FOR_CLASS_MASK) != 0) {
415 setSetterImplTempFileHandle(getTemporaryFileHandle(SETTER_METHOD_IMPL_FILE_NAME));
416 }
417
418 if ((getGeneratedTempFiles() & HASH_CODE_IMPL_MASK) != 0) {
419 setHashCodeImplTempFileHandle(getTemporaryFileHandle(HASH_CODE_METHOD_FILE_NAME));
420 }
421 if ((getGeneratedTempFiles() & EQUALS_IMPL_MASK) != 0) {
422 setEqualsImplTempFileHandle(getTemporaryFileHandle(EQUALS_METHOD_FILE_NAME));
423 }
424 if ((getGeneratedTempFiles() & TO_STRING_IMPL_MASK) != 0) {
425 setToStringImplTempFileHandle(getTemporaryFileHandle(TO_STRING_METHOD_FILE_NAME));
426 }
427 if ((getGeneratedTempFiles() & FROM_STRING_IMPL_MASK) != 0) {
428 setFromStringImplTempFileHandle(getTemporaryFileHandle(FROM_STRING_METHOD_FILE_NAME));
429 }
Bharat saraswalb551aae2016-07-14 15:18:20 +0530430 }
431
432 /**
433 * Adds current node info as and attribute to the parent generated file.
434 *
435 * @param curNode current node which needs to be added as an attribute in the parent generated code
436 * @param isList is list construct
437 * @param pluginConfig plugin configurations
438 * @throws IOException IO operation exception
439 */
Bharat saraswale707f032016-07-14 23:33:55 +0530440 static void addCurNodeInfoInParentTempFile(YangNode curNode,
441 boolean isList, YangPluginConfig pluginConfig)
Bharat saraswalb551aae2016-07-14 15:18:20 +0530442 throws IOException {
443 YangNode parent = getParentNodeInGenCode(curNode);
444 if (!(parent instanceof JavaCodeGenerator)) {
445 throw new TranslatorException("missing parent node to contain current node info in generated file");
446 }
447
448 if (parent instanceof YangJavaGrouping) {
449 /*
450 * In case of grouping, there is no need to add the information, it
451 * will be taken care in uses
452 */
453 return;
454 }
455 TempJavaBeanFragmentFiles tempJavaBeanFragmentFiles = ((JavaCodeGeneratorInfo) parent)
456 .getTempJavaCodeFragmentFiles().getBeanTempFiles();
457
458 JavaAttributeInfo javaAttributeInfo = getCurNodeAsAttributeInTarget(curNode,
459 parent, isList, tempJavaBeanFragmentFiles);
Bharat saraswale707f032016-07-14 23:33:55 +0530460
Bharat saraswalb551aae2016-07-14 15:18:20 +0530461 getNodesInterfaceFragmentFiles(parent, javaAttributeInfo, pluginConfig);
462 }
463
464 /**
465 * Creates an attribute info object corresponding to a data model node and return it.
466 *
467 * @param curNode current data model node for which the java code generation is being handled
468 * @param targetNode target node in which the current node is an attribute
469 * @param isListNode is the current added attribute needs to be a list
470 * @param tempJavaFragmentFiles temp java fragment files
471 * @return AttributeInfo attribute details required to add in temporary files
472 */
473 public static JavaAttributeInfo getCurNodeAsAttributeInTarget(YangNode curNode,
474 YangNode targetNode, boolean isListNode,
475 TempJavaFragmentFiles tempJavaFragmentFiles) {
476 String curNodeName = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName();
477 if (curNodeName == null) {
478 updateJavaFileInfo(curNode, null);
479 curNodeName = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName();
480 }
481
482 /*
483 * Get the import info corresponding to the attribute for import in
484 * generated java files or qualified access
485 */
486 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
487 getCapitalCase(curNodeName));
488 if (!(targetNode instanceof TempJavaCodeFragmentFilesContainer)) {
489 throw new TranslatorException("Parent node does not have file info");
490 }
491 JavaImportData parentImportData = tempJavaFragmentFiles.getJavaImportData();
492 JavaFileInfo fileInfo = ((JavaFileInfoContainer) targetNode).getJavaFileInfo();
493
494 boolean isQualified;
495 if ((targetNode instanceof YangJavaModule || targetNode instanceof YangJavaSubModule)
496 && (qualifiedTypeInfo.getClassInfo().contentEquals(SERVICE)
497 || qualifiedTypeInfo.getClassInfo().contentEquals(COMPONENT)
498 || qualifiedTypeInfo.getClassInfo().contentEquals(getCapitalCase(ACTIVATE))
499 || qualifiedTypeInfo.getClassInfo().contentEquals(getCapitalCase(DEACTIVATE))
500 || qualifiedTypeInfo.getClassInfo().contentEquals(REFERENCE_CARDINALITY)
501 || qualifiedTypeInfo.getClassInfo().contentEquals(REFERENCE))
502 || qualifiedTypeInfo.getClassInfo().contentEquals(getCapitalCase(fileInfo.getJavaName() + SERVICE))
503 || qualifiedTypeInfo.getClassInfo().contentEquals(getCapitalCase(fileInfo.getJavaName() + MANAGER))) {
504
505 isQualified = true;
506 } else {
507 String className;
508 if (targetNode instanceof YangJavaModule || targetNode instanceof YangJavaSubModule) {
509 className = getCapitalCase(fileInfo.getJavaName()) + "Service";
510 } else {
511 className = getCapitalCase(fileInfo.getJavaName());
512 }
513
514 isQualified = parentImportData.addImportInfo(qualifiedTypeInfo,
515 className, fileInfo.getPackage());
516 }
517
518 if (isListNode) {
519 parentImportData.setIfListImported(true);
520 }
521
522 return getAttributeInfoForTheData(qualifiedTypeInfo, curNodeName, null, isQualified, isListNode);
523 }
524
525 /**
526 * Adds java code snippet for corresponding files.
527 *
528 * @param node java node
529 * @param attr attribute info
530 * @param config plugin configurations
531 * @throws IOException when fails to do IO operations
532 */
Bharat saraswale707f032016-07-14 23:33:55 +0530533 private static void getNodesInterfaceFragmentFiles(YangNode node, JavaAttributeInfo attr,
534 YangPluginConfig config) throws IOException {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530535 TempJavaFragmentFiles tempJavaFragmentFiles;
536 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) node).getJavaFileInfo();
537 if ((javaFileInfo.getGeneratedFileTypes() & GENERATE_SERVICE_AND_MANAGER) != 0) {
538 tempJavaFragmentFiles = ((TempJavaCodeFragmentFilesContainer) node)
539 .getTempJavaCodeFragmentFiles()
540 .getServiceTempFiles();
541 tempJavaFragmentFiles.addJavaSnippetInfoToApplicableTempFiles(attr, config);
542 }
543 if ((javaFileInfo.getGeneratedFileTypes() & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
544 tempJavaFragmentFiles = ((TempJavaCodeFragmentFilesContainer) node)
545 .getTempJavaCodeFragmentFiles()
546 .getBeanTempFiles();
547 tempJavaFragmentFiles.addJavaSnippetInfoToApplicableTempFiles(attr, config);
548 }
549
550 }
551
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530552 /**
Bharat saraswale707f032016-07-14 23:33:55 +0530553 * Returns java attribute for leaf.
554 *
555 * @param tempJavaFragmentFiles temporary generated file
556 * @param leaf YANG leaf
557 * @param yangPluginConfig plugin configurations
558 * @return java attribute for leaf
559 */
560 public static JavaAttributeInfo getJavaAttributeOfLeaf(TempJavaFragmentFiles tempJavaFragmentFiles, YangLeaf leaf,
561 YangPluginConfig yangPluginConfig) {
562 JavaLeafInfoContainer javaLeaf = (JavaLeafInfoContainer) leaf;
563 javaLeaf.setConflictResolveConfig(yangPluginConfig.getConflictResolver());
564 javaLeaf.updateJavaQualifiedInfo();
565 return getAttributeInfoForTheData(
566 javaLeaf.getJavaQualifiedInfo(),
567 javaLeaf.getJavaName(yangPluginConfig.getConflictResolver()),
568 javaLeaf.getDataType(),
569 tempJavaFragmentFiles.getIsQualifiedAccessOrAddToImportList(javaLeaf.getJavaQualifiedInfo()),
570 false);
571 }
572
573 /**
574 * Returns java attribute for leaf-list.
575 *
576 * @param tempJavaFragmentFiles temporary generated file
577 * @param leafList YANG leaf-list
578 * @param yangPluginConfig plugin configurations
579 * @return java attribute for leaf-list
580 */
581 public static JavaAttributeInfo getJavaAttributeOfLeafList(TempJavaFragmentFiles tempJavaFragmentFiles,
582 YangLeafList leafList,
583 YangPluginConfig yangPluginConfig) {
584 JavaLeafInfoContainer javaLeaf = (JavaLeafInfoContainer) leafList;
585 javaLeaf.setConflictResolveConfig(yangPluginConfig.getConflictResolver());
586 javaLeaf.updateJavaQualifiedInfo();
587 tempJavaFragmentFiles.getJavaImportData().setIfListImported(true);
588 return getAttributeInfoForTheData(
589 javaLeaf.getJavaQualifiedInfo(),
590 javaLeaf.getJavaName(yangPluginConfig.getConflictResolver()),
591 javaLeaf.getDataType(),
592 tempJavaFragmentFiles.getIsQualifiedAccessOrAddToImportList(javaLeaf.getJavaQualifiedInfo()),
593 true);
594 }
595
596 /**
597 * Retrieves the temporary file handle of op param builder class.
598 *
599 * @return op param builder temporary file handle
600 */
601 private File getBuilderOpParmClassJavaFileHandle() {
602 return builderOpParmClassJavaFileHandle;
603 }
604
605 /**
606 * Sets the java file handle for op param builder class.
607 *
608 * @param builderOpParmClassJavaFileHandle java file handle
609 */
610 private void setBuilderOpParmClassJavaFileHandle(File builderOpParmClassJavaFileHandle) {
611 this.builderOpParmClassJavaFileHandle = builderOpParmClassJavaFileHandle;
612 }
613
614 /**
Bharat saraswald50c6382016-07-14 21:57:13 +0530615 * Returns base code path.
616 *
617 * @return base code path
618 */
Bharat saraswale707f032016-07-14 23:33:55 +0530619 private String getBaseCodePath() {
Bharat saraswald50c6382016-07-14 21:57:13 +0530620 return baseCodePath;
621 }
622
623 /**
624 * Sets base code path.
625 *
626 * @param baseCodePath base code path
627 */
Bharat saraswale707f032016-07-14 23:33:55 +0530628 void setBaseCodePath(String baseCodePath) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530629 this.baseCodePath = baseCodePath;
630 }
631
632 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530633 * Retrieves the absolute path where the file needs to be generated.
634 *
635 * @return absolute path where the file needs to be generated
636 */
637 private String getAbsoluteDirPath() {
638 return absoluteDirPath;
639 }
640
641 /**
642 * Sets absolute path where the file needs to be generated.
643 *
Bharat saraswalb551aae2016-07-14 15:18:20 +0530644 * @param absoluteDirPath absolute path where the file needs to be generated.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530645 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530646 void setAbsoluteDirPath(String absoluteDirPath) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530647 this.absoluteDirPath = absoluteDirPath;
648 }
649
650 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530651 * Retrieves the generated java file information.
652 *
653 * @return generated java file information
654 */
655 public JavaFileInfo getJavaFileInfo() {
656 return javaFileInfo;
657 }
658
659 /**
Bharat saraswalb551aae2016-07-14 15:18:20 +0530660 * Sets the generated java file information.
661 *
662 * @param javaFileInfo generated java file information
663 */
664 public void setJavaFileInfo(JavaFileInfo javaFileInfo) {
665 this.javaFileInfo = javaFileInfo;
666 }
667
668 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530669 * Retrieves the generated temp files.
670 *
671 * @return generated temp files
672 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530673 int getGeneratedTempFiles() {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530674 return generatedTempFiles;
675 }
676
677 /**
Bharat saraswalb551aae2016-07-14 15:18:20 +0530678 * Sets generated file files.
679 *
680 * @param fileType generated file type
681 */
Bharat saraswale707f032016-07-14 23:33:55 +0530682 private void setGeneratedTempFiles(int fileType) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530683 generatedTempFiles = fileType;
684 }
685
686 /**
Bharat saraswalc0e04842016-05-12 13:16:57 +0530687 * Adds to generated temporary files.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530688 *
689 * @param generatedTempFile generated file
690 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530691 void addGeneratedTempFile(int generatedTempFile) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530692 generatedTempFiles |= generatedTempFile;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530693 setGeneratedTempFiles(generatedTempFiles);
694 }
695
696 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530697 * Retrieves the generated Java files.
698 *
699 * @return generated Java files
700 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530701 int getGeneratedJavaFiles() {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530702 return getJavaFileInfo().getGeneratedFileTypes();
703 }
704
705 /**
706 * Retrieves the mapped Java class name.
707 *
708 * @return mapped Java class name
709 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530710 String getGeneratedJavaClassName() {
janani b4a6711a2016-05-17 13:12:22 +0530711 return getCapitalCase(getJavaFileInfo().getJavaName());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530712 }
713
714 /**
715 * Retrieves the import data for the generated Java file.
716 *
717 * @return import data for the generated Java file
718 */
719 public JavaImportData getJavaImportData() {
720 return javaImportData;
721 }
722
723 /**
724 * Sets import data for the generated Java file.
725 *
726 * @param javaImportData import data for the generated Java file
727 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530728 void setJavaImportData(JavaImportData javaImportData) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530729 this.javaImportData = javaImportData;
730 }
731
732 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530733 * Retrieves the status of any attributes added.
734 *
735 * @return status of any attributes added
736 */
Bharat saraswale707f032016-07-14 23:33:55 +0530737 boolean isAttributePresent() {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530738 return isAttributePresent;
739 }
740
741 /**
742 * Sets status of any attributes added.
743 *
744 * @param attributePresent status of any attributes added
745 */
Bharat saraswale707f032016-07-14 23:33:55 +0530746 private void setAttributePresent(boolean attributePresent) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530747 isAttributePresent = attributePresent;
748 }
749
750 /**
751 * Returns getter methods's temporary file handle.
752 *
753 * @return temporary file handle
754 */
755 public File getGetterInterfaceTempFileHandle() {
756 return getterInterfaceTempFileHandle;
757 }
758
759 /**
760 * Sets to getter method's temporary file handle.
761 *
762 * @param getterForInterface file handle for to getter method
763 */
764 private void setGetterInterfaceTempFileHandle(File getterForInterface) {
765 getterInterfaceTempFileHandle = getterForInterface;
766 }
767
768 /**
769 * Returns setter method's temporary file handle.
770 *
771 * @return temporary file handle
772 */
773 public File getSetterInterfaceTempFileHandle() {
774 return setterInterfaceTempFileHandle;
775 }
776
777 /**
778 * Sets to setter method's temporary file handle.
779 *
780 * @param setterForInterface file handle for to setter method
781 */
782 private void setSetterInterfaceTempFileHandle(File setterForInterface) {
783 setterInterfaceTempFileHandle = setterForInterface;
784 }
785
786 /**
787 * Returns setter method's impl's temporary file handle.
788 *
789 * @return temporary file handle
790 */
791 public File getSetterImplTempFileHandle() {
792 return setterImplTempFileHandle;
793 }
794
795 /**
796 * Sets to setter method's impl's temporary file handle.
797 *
798 * @param setterImpl file handle for to setter method's implementation class
799 */
800 private void setSetterImplTempFileHandle(File setterImpl) {
801 setterImplTempFileHandle = setterImpl;
802 }
803
804 /**
Bharat saraswalc0e04842016-05-12 13:16:57 +0530805 * Returns from string method's temporary file handle.
806 *
807 * @return from string method's temporary file handle
808 */
809 public File getFromStringImplTempFileHandle() {
810 return fromStringImplTempFileHandle;
811 }
812
813 /**
814 * Sets from string method's temporary file handle.
815 *
Bharat saraswalb551aae2016-07-14 15:18:20 +0530816 * @param fromStringImplTempFileHandle from string method's temporary file handle
Bharat saraswalc0e04842016-05-12 13:16:57 +0530817 */
818 private void setFromStringImplTempFileHandle(File fromStringImplTempFileHandle) {
819 this.fromStringImplTempFileHandle = fromStringImplTempFileHandle;
820 }
821
822 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530823 * Returns java file handle for interface file.
824 *
825 * @return java file handle for interface file
826 */
827 private File getInterfaceJavaFileHandle() {
828 return interfaceJavaFileHandle;
829 }
830
831 /**
832 * Sets the java file handle for interface file.
833 *
834 * @param interfaceJavaFileHandle java file handle
835 */
836 private void setInterfaceJavaFileHandle(File interfaceJavaFileHandle) {
837 this.interfaceJavaFileHandle = interfaceJavaFileHandle;
838 }
839
840 /**
841 * Returns java file handle for builder interface file.
842 *
843 * @return java file handle for builder interface file
844 */
845 private File getBuilderInterfaceJavaFileHandle() {
846 return builderInterfaceJavaFileHandle;
847 }
848
849 /**
850 * Sets the java file handle for builder interface file.
851 *
852 * @param builderInterfaceJavaFileHandle java file handle
853 */
854 private void setBuilderInterfaceJavaFileHandle(File builderInterfaceJavaFileHandle) {
855 this.builderInterfaceJavaFileHandle = builderInterfaceJavaFileHandle;
856 }
857
858 /**
859 * Returns java file handle for builder class file.
860 *
861 * @return java file handle for builder class file
862 */
863 private File getBuilderClassJavaFileHandle() {
864 return builderClassJavaFileHandle;
865 }
866
867 /**
868 * Sets the java file handle for builder class file.
869 *
870 * @param builderClassJavaFileHandle java file handle
871 */
872 private void setBuilderClassJavaFileHandle(File builderClassJavaFileHandle) {
873 this.builderClassJavaFileHandle = builderClassJavaFileHandle;
874 }
875
876 /**
877 * Returns java file handle for impl class file.
878 *
879 * @return java file handle for impl class file
880 */
881 private File getImplClassJavaFileHandle() {
882 return implClassJavaFileHandle;
883 }
884
885 /**
886 * Sets the java file handle for impl class file.
887 *
888 * @param implClassJavaFileHandle java file handle
889 */
890 private void setImplClassJavaFileHandle(File implClassJavaFileHandle) {
891 this.implClassJavaFileHandle = implClassJavaFileHandle;
892 }
893
894 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530895 * Returns attribute's temporary file handle.
896 *
897 * @return temporary file handle
898 */
899 public File getAttributesTempFileHandle() {
900 return attributesTempFileHandle;
901 }
902
903 /**
904 * Sets attribute's temporary file handle.
905 *
906 * @param attributeForClass file handle for attribute
907 */
Bharat saraswale707f032016-07-14 23:33:55 +0530908 private void setAttributesTempFileHandle(File attributeForClass) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530909 attributesTempFileHandle = attributeForClass;
910 }
911
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530912 /**
913 * Returns getter method's impl's temporary file handle.
914 *
915 * @return temporary file handle
916 */
917 public File getGetterImplTempFileHandle() {
918 return getterImplTempFileHandle;
919 }
920
921 /**
922 * Sets to getter method's impl's temporary file handle.
923 *
924 * @param getterImpl file handle for to getter method's impl
925 */
Bharat saraswale707f032016-07-14 23:33:55 +0530926 private void setGetterImplTempFileHandle(File getterImpl) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530927 getterImplTempFileHandle = getterImpl;
928 }
929
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530930 /**
931 * Returns hash code method's temporary file handle.
932 *
933 * @return temporary file handle
934 */
935 public File getHashCodeImplTempFileHandle() {
936 return hashCodeImplTempFileHandle;
937 }
938
939 /**
940 * Sets hash code method's temporary file handle.
941 *
942 * @param hashCodeMethod file handle for hash code method
943 */
Bharat saraswale707f032016-07-14 23:33:55 +0530944 private void setHashCodeImplTempFileHandle(File hashCodeMethod) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530945 hashCodeImplTempFileHandle = hashCodeMethod;
946 }
947
948 /**
Bharat saraswale707f032016-07-14 23:33:55 +0530949 * Returns equals method's temporary file handle.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530950 *
951 * @return temporary file handle
952 */
953 public File getEqualsImplTempFileHandle() {
954 return equalsImplTempFileHandle;
955 }
956
957 /**
958 * Sets equals method's temporary file handle.
959 *
960 * @param equalsMethod file handle for to equals method
961 */
Bharat saraswale707f032016-07-14 23:33:55 +0530962 private void setEqualsImplTempFileHandle(File equalsMethod) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530963 equalsImplTempFileHandle = equalsMethod;
964 }
965
966 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530967 * Returns to string method's temporary file handle.
968 *
969 * @return temporary file handle
970 */
971 public File getToStringImplTempFileHandle() {
972 return toStringImplTempFileHandle;
973 }
974
975 /**
976 * Sets to string method's temporary file handle.
977 *
978 * @param toStringMethod file handle for to string method
979 */
Bharat saraswale707f032016-07-14 23:33:55 +0530980 private void setToStringImplTempFileHandle(File toStringMethod) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530981 toStringImplTempFileHandle = toStringMethod;
982 }
983
984 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530985 * Returns java extends list holder.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530986 *
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530987 * @return java extends list holder
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530988 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530989 public JavaExtendsListHolder getJavaExtendsListHolder() {
990 return javaExtendsListHolder;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530991 }
992
993 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530994 * Sets java extends list holder.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530995 *
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530996 * @param javaExtendsListHolder java extends list holder
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530997 */
Bharat saraswale707f032016-07-14 23:33:55 +0530998 void setJavaExtendsListHolder(JavaExtendsListHolder javaExtendsListHolder) {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530999 this.javaExtendsListHolder = javaExtendsListHolder;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301000 }
1001
1002 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301003 * Adds attribute for class.
1004 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301005 * @param attr attribute info
1006 * @param yangPluginConfig plugin configurations
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301007 * @throws IOException when fails to append to temporary file
1008 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301009 private void addAttribute(JavaAttributeInfo attr, YangPluginConfig yangPluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301010 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301011 appendToFile(getAttributesTempFileHandle(), parseAttribute(attr, yangPluginConfig)
1012 + FOUR_SPACE_INDENTATION);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301013 }
1014
1015 /**
1016 * Adds getter for interface.
1017 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301018 * @param attr attribute info
Bharat saraswal33dfa012016-05-17 19:59:16 +05301019 * @param pluginConfig plugin configurations
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301020 * @throws IOException when fails to append to temporary file
1021 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301022 private void addGetterForInterface(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301023 throws IOException {
Bharat saraswalc0e04842016-05-12 13:16:57 +05301024 appendToFile(getGetterInterfaceTempFileHandle(),
Bharat saraswal33dfa012016-05-17 19:59:16 +05301025 getGetterString(attr, getGeneratedJavaFiles(), pluginConfig) + NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301026 }
1027
1028 /**
1029 * Adds setter for interface.
1030 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301031 * @param attr attribute info
Bharat saraswal33dfa012016-05-17 19:59:16 +05301032 * @param pluginConfig plugin configurations
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301033 * @throws IOException when fails to append to temporary file
1034 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301035 private void addSetterForInterface(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301036 throws IOException {
1037 appendToFile(getSetterInterfaceTempFileHandle(),
Bharat saraswal33dfa012016-05-17 19:59:16 +05301038 getSetterString(attr, getGeneratedJavaClassName(), getGeneratedJavaFiles(), pluginConfig)
1039 + NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301040 }
1041
1042 /**
1043 * Adds setter's implementation for class.
1044 *
1045 * @param attr attribute info
1046 * @throws IOException when fails to append to temporary file
1047 */
1048 private void addSetterImpl(JavaAttributeInfo attr)
1049 throws IOException {
1050 appendToFile(getSetterImplTempFileHandle(),
Bharat saraswalc0e04842016-05-12 13:16:57 +05301051 getOverRideString() + getSetterForClass(attr, getGeneratedJavaClassName(), getGeneratedJavaFiles())
Bharat saraswale707f032016-07-14 23:33:55 +05301052 + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301053 }
1054
1055 /**
1056 * Adds getter method's impl for class.
1057 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301058 * @param attr attribute info
Bharat saraswal33dfa012016-05-17 19:59:16 +05301059 * @param pluginConfig plugin configurations
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301060 * @throws IOException when fails to append to temporary file
1061 */
Bharat saraswale707f032016-07-14 23:33:55 +05301062 void addGetterImpl(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301063 throws IOException {
1064 if ((getGeneratedJavaFiles() & BUILDER_CLASS_MASK) != 0
1065 || (getGeneratedJavaFiles() & GENERATE_SERVICE_AND_MANAGER) != 0) {
1066 appendToFile(getGetterImplTempFileHandle(), getOverRideString() + getGetterForClass(attr,
1067 getGeneratedJavaFiles()) + NEW_LINE);
1068 } else {
janani b4a6711a2016-05-17 13:12:22 +05301069 appendToFile(getGetterImplTempFileHandle(),
Bharat saraswal33dfa012016-05-17 19:59:16 +05301070 getJavaDoc(GETTER_METHOD, getCapitalCase(attr.getAttributeName()), false, pluginConfig)
janani b4a6711a2016-05-17 13:12:22 +05301071 + getGetterForClass(attr, getGeneratedJavaFiles()) + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301072 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301073 }
1074
1075 /**
1076 * Adds build method for interface.
1077 *
Bharat saraswal33dfa012016-05-17 19:59:16 +05301078 * @param pluginConfig plugin configurations
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301079 * @return build method for interface
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301080 * @throws IOException when fails to append to temporary file
1081 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301082 String addBuildMethodForInterface(YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301083 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301084 return parseBuilderInterfaceBuildMethodString(getGeneratedJavaClassName(), pluginConfig);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301085 }
1086
1087 /**
1088 * Adds build method's implementation for class.
1089 *
1090 * @return build method implementation for class
1091 * @throws IOException when fails to append to temporary file
1092 */
1093 String addBuildMethodImpl()
1094 throws IOException {
1095 return getBuildString(getGeneratedJavaClassName()) + NEW_LINE;
1096 }
1097
1098 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301099 * Adds default constructor for class.
1100 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301101 * @param modifier modifier for constructor.
1102 * @param toAppend string which need to be appended with the class name
Bharat saraswal33dfa012016-05-17 19:59:16 +05301103 * @param pluginConfig plugin configurations
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301104 * @return default constructor for class
1105 * @throws IOException when fails to append to file
1106 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301107 String addDefaultConstructor(String modifier, String toAppend, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301108 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301109 return NEW_LINE
1110 + getDefaultConstructorString(getGeneratedJavaClassName() + toAppend, modifier, pluginConfig);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301111 }
1112
1113 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301114 * Adds hash code method for class.
1115 *
1116 * @param attr attribute info
1117 * @throws IOException when fails to append to temporary file
1118 */
1119 private void addHashCodeMethod(JavaAttributeInfo attr)
1120 throws IOException {
1121 appendToFile(getHashCodeImplTempFileHandle(), getHashCodeMethod(attr) + NEW_LINE);
1122 }
1123
1124 /**
1125 * Adds equals method for class.
1126 *
1127 * @param attr attribute info
1128 * @throws IOException when fails to append to temporary file
1129 */
1130 private void addEqualsMethod(JavaAttributeInfo attr)
1131 throws IOException {
1132 appendToFile(getEqualsImplTempFileHandle(), getEqualsMethod(attr) + NEW_LINE);
1133 }
1134
1135 /**
1136 * Adds ToString method for class.
1137 *
1138 * @param attr attribute info
1139 * @throws IOException when fails to append to temporary file
1140 */
1141 private void addToStringMethod(JavaAttributeInfo attr)
1142 throws IOException {
1143 appendToFile(getToStringImplTempFileHandle(), getToStringMethod(attr) + NEW_LINE);
1144 }
1145
1146 /**
Bharat saraswalc0e04842016-05-12 13:16:57 +05301147 * Adds from string method for union class.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301148 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301149 * @param javaAttributeInfo type attribute info
Bharat saraswalc0e04842016-05-12 13:16:57 +05301150 * @param fromStringAttributeInfo from string attribute info
1151 * @throws IOException when fails to append to temporary file
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301152 */
Bharat saraswale707f032016-07-14 23:33:55 +05301153 void addFromStringMethod(JavaAttributeInfo javaAttributeInfo,
1154 JavaAttributeInfo fromStringAttributeInfo)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301155 throws IOException {
Bharat saraswalc0e04842016-05-12 13:16:57 +05301156 appendToFile(getFromStringImplTempFileHandle(), getFromStringMethod(javaAttributeInfo,
1157 fromStringAttributeInfo) + NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301158 }
1159
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301160 /**
1161 * Returns a temporary file handle for the specific file type.
1162 *
1163 * @param fileName file name
1164 * @return temporary file handle
1165 * @throws IOException when fails to create new file handle
1166 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301167 File getTemporaryFileHandle(String fileName)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301168 throws IOException {
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301169 String path = getTempDirPath(getAbsoluteDirPath());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301170 File dir = new File(path);
1171 if (!dir.exists()) {
1172 dir.mkdirs();
1173 }
1174 File file = new File(path + fileName + TEMP_FILE_EXTENSION);
1175 if (!file.exists()) {
1176 file.createNewFile();
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301177 } else {
1178 throw new IOException(fileName + " is reused due to YANG naming");
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301179 }
1180 return file;
1181 }
1182
1183 /**
1184 * Returns a temporary file handle for the specific file type.
1185 *
1186 * @param fileName file name
1187 * @return temporary file handle
1188 * @throws IOException when fails to create new file handle
1189 */
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301190 File getJavaFileHandle(String fileName)
1191 throws IOException {
Bharat saraswald50c6382016-07-14 21:57:13 +05301192 return getFileObject(getDirPath(), fileName, JAVA_FILE_EXTENSION, getBaseCodePath());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301193 }
1194
1195 /**
1196 * Returns data from the temporary files.
1197 *
Bharat saraswalb551aae2016-07-14 15:18:20 +05301198 * @param file temporary file handle
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301199 * @param absolutePath absolute path
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301200 * @return stored data from temporary files
1201 * @throws IOException when failed to get data from the given file
1202 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301203 public String getTemporaryDataFromFileHandle(File file, String absolutePath)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301204 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301205
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301206 String path = getTempDirPath(absolutePath);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301207 if (new File(path + file.getName()).exists()) {
1208 return readAppendFile(path + file.getName(), EMPTY_STRING);
1209 } else {
1210 throw new IOException("Unable to get data from the given "
1211 + file.getName() + " file for " + getGeneratedJavaClassName() + PERIOD);
1212 }
1213 }
1214
1215 /**
1216 * Returns temporary directory path.
1217 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301218 * @param absolutePath absolute path
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301219 * @return directory path
1220 */
Bharat saraswale707f032016-07-14 23:33:55 +05301221 private String getTempDirPath(String absolutePath) {
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301222 return getPackageDirPathFromJavaJPackage(absolutePath) + SLASH + getGeneratedJavaClassName()
Bharat saraswale707f032016-07-14 23:33:55 +05301223 + TEMP_FOLDER_NAME_SUFFIX + SLASH;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301224 }
1225
1226 /**
1227 * Parses attribute to get the attribute string.
1228 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301229 * @param attr attribute info
Bharat saraswal33dfa012016-05-17 19:59:16 +05301230 * @param pluginConfig plugin configurations
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301231 * @return attribute string
1232 */
Bharat saraswale707f032016-07-14 23:33:55 +05301233 String parseAttribute(JavaAttributeInfo attr, YangPluginConfig pluginConfig) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301234 /*
1235 * TODO: check if this utility needs to be called or move to the caller
1236 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301237 String attributeName = getCamelCase(attr.getAttributeName(), pluginConfig.getConflictResolver());
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301238 String attributeAccessType = PRIVATE;
1239 if ((javaFileInfo.getGeneratedFileTypes() & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
1240 attributeAccessType = PROTECTED;
1241 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301242 if (attr.isQualifiedName()) {
Bharat saraswalc0e04842016-05-12 13:16:57 +05301243 return getJavaAttributeDefination(attr.getImportInfo().getPkgInfo(),
1244 attr.getImportInfo().getClassInfo(),
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301245 attributeName, attr.isListAttr(), attributeAccessType);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301246 } else {
1247 return getJavaAttributeDefination(null, attr.getImportInfo().getClassInfo(), attributeName,
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301248 attr.isListAttr(), attributeAccessType);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301249 }
1250 }
1251
1252 /**
1253 * Appends content to temporary file.
1254 *
1255 * @param file temporary file
1256 * @param data data to be appended
1257 * @throws IOException when fails to append to file
1258 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301259 void appendToFile(File file, String data)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301260 throws IOException {
1261 try {
1262 insertDataIntoJavaFile(file, data);
1263 } catch (IOException ex) {
1264 throw new IOException("failed to write in temp file.");
1265 }
1266 }
1267
1268 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301269 * Adds parent's info to current node import list.
1270 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301271 * @param curNode current node for which import list needs to be updated
Bharat saraswal33dfa012016-05-17 19:59:16 +05301272 * @param pluginConfig plugin configurations
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301273 */
Bharat saraswale707f032016-07-14 23:33:55 +05301274 void addParentInfoInCurNodeTempFile(YangNode curNode, YangPluginConfig pluginConfig) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301275 caseImportInfo = new JavaQualifiedTypeInfo();
1276 YangNode parent = getParentNodeInGenCode(curNode);
1277 if (!(parent instanceof JavaCodeGenerator)) {
1278 throw new TranslatorException("missing parent node to contain current node info in generated file");
1279 }
1280 if (!(curNode instanceof JavaFileInfoContainer)) {
1281 throw new TranslatorException("missing java file information to get the package details "
1282 + "of attribute corresponding to child node");
1283 }
Bharat saraswal33dfa012016-05-17 19:59:16 +05301284 caseImportInfo.setClassInfo(getCapitalCase(getCamelCase(parent.getName(),
1285 pluginConfig.getConflictResolver())));
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301286 caseImportInfo.setPkgInfo(((JavaFileInfoContainer) parent).getJavaFileInfo().getPackage());
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301287
1288 JavaFileInfo fileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
1289
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301290 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301291 .getBeanTempFiles().getJavaImportData().addImportInfo(caseImportInfo,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301292 getCapitalCase(fileInfo.getJavaName()), fileInfo.getPackage());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301293 }
1294
1295 /**
1296 * Adds leaf attributes in generated files.
1297 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301298 * @param listOfLeaves list of YANG leaf
1299 * @param yangPluginConfig plugin config
Bharat saraswale707f032016-07-14 23:33:55 +05301300 * @param curNode current node
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301301 * @throws IOException IO operation fail
1302 */
Bharat saraswale707f032016-07-14 23:33:55 +05301303 private void addLeavesInfoToTempFiles(List<YangLeaf> listOfLeaves,
1304 YangPluginConfig yangPluginConfig, YangNode curNode)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301305 throws IOException {
1306 if (listOfLeaves != null) {
1307 for (YangLeaf leaf : listOfLeaves) {
1308 if (!(leaf instanceof JavaLeafInfoContainer)) {
1309 throw new TranslatorException("Leaf does not have java information");
1310 }
Bharat saraswale707f032016-07-14 23:33:55 +05301311 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
1312 TempJavaBeanFragmentFiles tempJavaBeanFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1313 .getTempJavaCodeFragmentFiles().getBeanTempFiles();
1314 addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeaf(tempJavaBeanFragmentFiles, leaf,
1315 yangPluginConfig), yangPluginConfig);
1316 } else {
1317 addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeaf(this, leaf, yangPluginConfig),
1318 yangPluginConfig);
1319 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301320 }
1321 }
1322 }
1323
1324 /**
1325 * Adds leaf list's attributes in generated files.
1326 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301327 * @param listOfLeafList list of YANG leaves
1328 * @param yangPluginConfig plugin config
Bharat saraswale707f032016-07-14 23:33:55 +05301329 * @param curNode current node
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301330 * @throws IOException IO operation fail
1331 */
Bharat saraswale707f032016-07-14 23:33:55 +05301332 private void addLeafListInfoToTempFiles(List<YangLeafList> listOfLeafList, YangPluginConfig yangPluginConfig,
1333 YangNode curNode) throws IOException {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301334 if (listOfLeafList != null) {
1335 for (YangLeafList leafList : listOfLeafList) {
1336 if (!(leafList instanceof JavaLeafInfoContainer)) {
1337 throw new TranslatorException("Leaf-list does not have java information");
1338 }
Bharat saraswale707f032016-07-14 23:33:55 +05301339 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
1340 TempJavaBeanFragmentFiles tempJavaBeanFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1341 .getTempJavaCodeFragmentFiles().getBeanTempFiles();
1342 addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeafList(tempJavaBeanFragmentFiles,
1343 leafList, yangPluginConfig), yangPluginConfig);
1344 } else {
1345 addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeafList(this,
1346 leafList, yangPluginConfig), yangPluginConfig);
1347 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301348 }
1349 }
1350 }
1351
1352 /**
Bharat saraswale707f032016-07-14 23:33:55 +05301353 * Adds all the leaves in the current data model node as part of the generated temporary file.
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301354 *
Bharat saraswale707f032016-07-14 23:33:55 +05301355 * @param curNode current node
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301356 * @param yangPluginConfig plugin config
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301357 * @throws IOException IO operation fail
1358 */
Bharat saraswale707f032016-07-14 23:33:55 +05301359 void addCurNodeLeavesInfoToTempFiles(YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301360 YangPluginConfig yangPluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301361 throws IOException {
1362 if (!(curNode instanceof YangLeavesHolder)) {
1363 throw new TranslatorException("Data model node does not have any leaves");
1364 }
1365 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
Bharat saraswale707f032016-07-14 23:33:55 +05301366 addLeavesInfoToTempFiles(leavesHolder.getListOfLeaf(), yangPluginConfig, curNode);
1367 addLeafListInfoToTempFiles(leavesHolder.getListOfLeafList(), yangPluginConfig, curNode);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301368 }
1369
1370 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301371 * Adds the new attribute info to the target generated temporary files.
1372 *
Bharat saraswalb551aae2016-07-14 15:18:20 +05301373 * @param newAttrInfo the attribute info that needs to be added to temporary files
Bharat saraswal33dfa012016-05-17 19:59:16 +05301374 * @param pluginConfig plugin configurations
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301375 * @throws IOException IO operation fail
1376 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301377 void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo newAttrInfo, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301378 throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301379 setAttributePresent(true);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301380 if ((getGeneratedTempFiles() & ATTRIBUTES_MASK) != 0) {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301381 addAttribute(newAttrInfo, pluginConfig);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301382 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301383
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301384 if ((getGeneratedTempFiles() & GETTER_FOR_INTERFACE_MASK) != 0) {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301385 addGetterForInterface(newAttrInfo, pluginConfig);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301386 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301387
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301388 if ((getGeneratedTempFiles() & SETTER_FOR_INTERFACE_MASK) != 0) {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301389 addSetterForInterface(newAttrInfo, pluginConfig);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301390 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301391
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301392 if ((getGeneratedTempFiles() & SETTER_FOR_CLASS_MASK) != 0) {
1393 addSetterImpl(newAttrInfo);
1394 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301395
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301396 if ((getGeneratedTempFiles() & HASH_CODE_IMPL_MASK) != 0) {
1397 addHashCodeMethod(newAttrInfo);
1398 }
1399 if ((getGeneratedTempFiles() & EQUALS_IMPL_MASK) != 0) {
1400 addEqualsMethod(newAttrInfo);
1401 }
1402 if ((getGeneratedTempFiles() & TO_STRING_IMPL_MASK) != 0) {
1403 addToStringMethod(newAttrInfo);
1404 }
Bharat saraswalc0e04842016-05-12 13:16:57 +05301405
Bharat saraswale707f032016-07-14 23:33:55 +05301406 if (!newAttrInfo.isIntConflict() &&
1407 !newAttrInfo.isLongConflict()) {
1408 if ((getGeneratedTempFiles() & GETTER_FOR_CLASS_MASK) != 0) {
1409 addGetterImpl(newAttrInfo, pluginConfig);
1410 }
1411
1412 if ((getGeneratedTempFiles() & FROM_STRING_IMPL_MASK) != 0) {
1413 JavaQualifiedTypeInfo qualifiedInfoOfFromString = getQualifiedInfoOfFromString(newAttrInfo,
1414 pluginConfig.getConflictResolver());
Bharat saraswalc0e04842016-05-12 13:16:57 +05301415 /*
1416 * Create a new java attribute info with qualified information of
1417 * wrapper classes.
1418 */
Bharat saraswale707f032016-07-14 23:33:55 +05301419 JavaAttributeInfo fromStringAttributeInfo = getAttributeInfoForTheData(qualifiedInfoOfFromString,
1420 newAttrInfo.getAttributeName(),
1421 newAttrInfo.getAttributeType(),
1422 getIsQualifiedAccessOrAddToImportList(qualifiedInfoOfFromString), false);
Bharat saraswalc0e04842016-05-12 13:16:57 +05301423
Bharat saraswale707f032016-07-14 23:33:55 +05301424 addFromStringMethod(newAttrInfo, fromStringAttributeInfo);
1425 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301426 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301427 }
1428
1429 /**
1430 * Returns java class name.
1431 *
1432 * @param suffix for the class name based on the file type
1433 * @return java class name
1434 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301435 String getJavaClassName(String suffix) {
janani b4a6711a2016-05-17 13:12:22 +05301436 return getCapitalCase(getJavaFileInfo().getJavaName()) + suffix;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301437 }
1438
1439 /**
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301440 * Returns java class name.
1441 *
1442 * @return java class name
1443 */
Bharat saraswale707f032016-07-14 23:33:55 +05301444 private String getImplClassName() {
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301445 return getCapitalCase(DEFAULT) + getCapitalCase(getJavaFileInfo().getJavaName());
1446 }
1447
1448 /**
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301449 * Returns op param java class name.
1450 *
1451 * @return op param java class name
1452 */
Bharat saraswale707f032016-07-14 23:33:55 +05301453 private String getOpParamImplClassName() {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301454 return getCapitalCase(getJavaFileInfo().getJavaName()) + OPERATION;
1455 }
1456
1457 /**
1458 * Returns op param builder java class name.
1459 *
1460 * @return op param builder java class name
1461 */
Bharat saraswale707f032016-07-14 23:33:55 +05301462 private String getOpParamBuilderImplClassName() {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301463 return getCapitalCase(getJavaFileInfo().getJavaName()) + OPERATION + BUILDER;
1464 }
1465
1466 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301467 * Returns the directory path.
1468 *
1469 * @return directory path
1470 */
1471 private String getDirPath() {
1472 return getJavaFileInfo().getPackageFilePath();
1473 }
1474
1475 /**
1476 * Constructs java code exit.
1477 *
1478 * @param fileType generated file type
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301479 * @param curNode current YANG node
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301480 * @throws IOException when fails to generate java files
1481 */
1482 public void generateJavaFile(int fileType, YangNode curNode)
1483 throws IOException {
Bharat saraswalb551aae2016-07-14 15:18:20 +05301484
1485 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
1486 addResolvedAugmentedDataNodeImports(curNode);
1487 }
Bharat saraswald50c6382016-07-14 21:57:13 +05301488 TempJavaBeanFragmentFiles tempJavaBeanFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1489 .getTempJavaCodeFragmentFiles().getBeanTempFiles();
Bharat saraswalb551aae2016-07-14 15:18:20 +05301490 List<String> imports = ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getBeanTempFiles()
1491 .getJavaImportData().getImports();
Bharat saraswal33dfa012016-05-17 19:59:16 +05301492
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301493 createPackage(curNode);
1494
1495 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301496 * Generate java code.
1497 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301498 if ((fileType & INTERFACE_MASK) != 0 || (fileType &
1499 BUILDER_INTERFACE_MASK) != 0) {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301500
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301501 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301502 * Create interface file.
1503 */
1504 setInterfaceJavaFileHandle(getJavaFileHandle(getJavaClassName(INTERFACE_FILE_NAME_SUFFIX)));
1505 setInterfaceJavaFileHandle(
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301506 generateInterfaceFile(getInterfaceJavaFileHandle(), imports, curNode, isAttributePresent()));
1507 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301508 * Create builder interface file.
1509 */
1510 if ((fileType & BUILDER_INTERFACE_MASK) != 0) {
1511 setBuilderInterfaceJavaFileHandle(
1512 getJavaFileHandle(getJavaClassName(BUILDER_INTERFACE_FILE_NAME_SUFFIX)));
1513 setBuilderInterfaceJavaFileHandle(
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301514 generateBuilderInterfaceFile(getBuilderInterfaceJavaFileHandle(), curNode,
1515 isAttributePresent()));
1516 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301517 * Append builder interface file to interface file and close it.
1518 */
1519 mergeJavaFiles(getBuilderInterfaceJavaFileHandle(), getInterfaceJavaFileHandle());
Bharat saraswal96dfef02016-06-16 00:29:12 +05301520 validateLineLength(getInterfaceJavaFileHandle());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301521 }
1522 insertDataIntoJavaFile(getInterfaceJavaFileHandle(), getJavaClassDefClose());
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301523
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301524 if (curNode instanceof YangCase) {
1525 removeCaseImport(imports);
1526 }
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301527
Bharat saraswald50c6382016-07-14 21:57:13 +05301528 if (curNode instanceof YangAugment) {
1529 removeAugmentedInfoImport(imports);
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301530 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301531 }
Bharat saraswalc0e04842016-05-12 13:16:57 +05301532 if ((fileType & BUILDER_CLASS_MASK) != 0 || (fileType & IMPL_CLASS_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301533 if (isAttributePresent()) {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301534 addImportsToStringAndHasCodeMethods(imports, true);
Bharat saraswalb551aae2016-07-14 15:18:20 +05301535 }
1536 if (curNode instanceof YangAugmentableNode) {
Bharat saraswald50c6382016-07-14 21:57:13 +05301537 addImportsForAugmentableClass(imports, true);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301538 }
Bharat saraswalc0e04842016-05-12 13:16:57 +05301539 sortImports(imports);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301540 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301541 * Create impl class file.
1542 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301543 setImplClassJavaFileHandle(getJavaFileHandle(getImplClassName()));
1544 setImplClassJavaFileHandle(
1545 generateImplClassFile(getImplClassJavaFileHandle(), curNode, isAttributePresent(), imports));
1546
1547 /*
1548 * Create builder class file.
1549 */
1550 if ((fileType & BUILDER_CLASS_MASK) != 0) {
1551 setBuilderClassJavaFileHandle(getJavaFileHandle(getJavaClassName(BUILDER_CLASS_FILE_NAME_SUFFIX)));
1552 setBuilderClassJavaFileHandle(
1553 generateBuilderClassFile(getBuilderClassJavaFileHandle(), curNode,
1554 isAttributePresent()));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301555 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301556 * Append impl class to builder class and close it.
1557 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301558 mergeJavaFiles(getBuilderClassJavaFileHandle(), getImplClassJavaFileHandle());
1559 validateLineLength(getImplClassJavaFileHandle());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301560 }
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301561 insertDataIntoJavaFile(getImplClassJavaFileHandle(), getJavaClassDefClose());
Bharat saraswald50c6382016-07-14 21:57:13 +05301562 if (curNode instanceof YangAugmentableNode) {
1563 addImportsForAugmentableClass(imports, false);
1564 }
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301565 if (!(curNode instanceof YangModule)) {
1566 if (isAttributePresent()) {
1567 addImportsToStringAndHasCodeMethods(imports, false);
1568 }
Bharat saraswald50c6382016-07-14 21:57:13 +05301569 if (curNode instanceof YangAugmentableNode) {
1570 addYangAugmentedOpParamInfoImport(imports);
1571 }
1572 JavaQualifiedTypeInfo qualifiedTypeInfo = new JavaQualifiedTypeInfo();
1573 qualifiedTypeInfo.setClassInfo(getCapitalCase(DEFAULT) + getCapitalCase(getJavaFileInfo()
1574 .getJavaName()));
1575 qualifiedTypeInfo.setPkgInfo(getJavaFileInfo().getPackage());
1576 getJavaExtendsListHolder().addToExtendsList(qualifiedTypeInfo, curNode,
1577 tempJavaBeanFragmentFiles);
Bharat saraswale707f032016-07-14 23:33:55 +05301578 addBitSetImport(imports, true);
Bharat saraswald50c6382016-07-14 21:57:13 +05301579 if (curNode instanceof YangAugment) {
1580 addYangAugmentedOpParamInfoImport(imports);
1581 }
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301582 /*
1583 * Create impl class file.
1584 */
1585 setOpParamClassJavaFileHandle(getJavaFileHandle(getOpParamImplClassName()));
1586 setOpParamClassJavaFileHandle(
1587 generateOpParamImplClassFile(getOpParamClassJavaFileHandle(), curNode,
Bharat saraswald50c6382016-07-14 21:57:13 +05301588 isAttributePresent(), imports));
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301589
1590 /*
1591 * Create builder class file.
1592 */
1593 if ((fileType & BUILDER_CLASS_MASK) != 0) {
1594 setBuilderOpParmClassJavaFileHandle(getJavaFileHandle(getOpParamBuilderImplClassName()));
1595 setBuilderOpParmClassJavaFileHandle(
1596 generateOpParamBuilderClassFile(getBuilderOpParmClassJavaFileHandle(), curNode,
Bharat saraswald50c6382016-07-14 21:57:13 +05301597 isAttributePresent()));
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301598 /*
1599 * Append impl class to builder class and close it.
1600 */
1601 mergeJavaFiles(getBuilderOpParmClassJavaFileHandle(), getOpParamClassJavaFileHandle());
1602 validateLineLength(getOpParamClassJavaFileHandle());
1603
Bharat saraswale707f032016-07-14 23:33:55 +05301604 addBitSetImport(imports, false);
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301605 }
1606 insertDataIntoJavaFile(getOpParamClassJavaFileHandle(), getJavaClassDefClose());
Bharat saraswald50c6382016-07-14 21:57:13 +05301607
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301608 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301609 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301610 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301611 * Close all the file handles.
1612 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301613 freeTemporaryResources(false);
1614 }
1615
Bharat saraswald50c6382016-07-14 21:57:13 +05301616 /*Adds import for YANG augmented op param info.*/
1617 private void addYangAugmentedOpParamInfoImport(List<String> imports) {
1618 imports.add(getJavaImportData().getYangAugmentedOpParamInfoImport());
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301619 }
1620
1621 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301622 * Adds imports for ToString and HashCodeMethod.
1623 *
Bharat saraswald50c6382016-07-14 21:57:13 +05301624 * @param imports import list
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301625 * @param operation add or remove
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301626 */
Bharat saraswale707f032016-07-14 23:33:55 +05301627 void addImportsToStringAndHasCodeMethods(List<String> imports, boolean operation) {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301628 if (operation) {
1629 imports.add(getJavaImportData().getImportForHashAndEquals());
1630 imports.add(getJavaImportData().getImportForToString());
1631 } else {
1632 imports.remove(getJavaImportData().getImportForHashAndEquals());
1633 imports.remove(getJavaImportData().getImportForToString());
1634 }
1635 }
1636
1637 /**
Bharat saraswale707f032016-07-14 23:33:55 +05301638 * Adds imports for bitSet method.
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301639 *
Bharat saraswald50c6382016-07-14 21:57:13 +05301640 * @param imports import list
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301641 * @param operation add or remove
1642 */
Bharat saraswale707f032016-07-14 23:33:55 +05301643 private void addBitSetImport(List<String> imports, boolean operation) {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301644 if (operation) {
1645 imports.add(getJavaImportData().getImportForToBitSet());
1646 } else {
1647 imports.remove(getJavaImportData().getImportForToBitSet());
1648 }
Bharat saraswalb551aae2016-07-14 15:18:20 +05301649 }
1650
1651
1652 /**
1653 * Adds import for map and hash map.
1654 *
Bharat saraswald50c6382016-07-14 21:57:13 +05301655 * @param imports import list
1656 * @param operations true for adding and false for deletion
Bharat saraswalb551aae2016-07-14 15:18:20 +05301657 */
Bharat saraswale707f032016-07-14 23:33:55 +05301658 private void addImportsForAugmentableClass(List<String> imports, boolean operations) {
Bharat saraswald50c6382016-07-14 21:57:13 +05301659 if (operations) {
1660 imports.add(getJavaImportData().getHashMapImport());
1661 imports.add(getJavaImportData().getMapImport());
1662 imports.add(getJavaImportData().getYangAugmentedInfoImport());
1663 } else {
1664 imports.remove(getJavaImportData().getHashMapImport());
1665 imports.remove(getJavaImportData().getMapImport());
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301666 }
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301667 }
1668
1669 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301670 * Removes case import info from import list.
1671 *
1672 * @param imports list of imports
1673 * @return import for class
1674 */
1675 private List<String> removeCaseImport(List<String> imports) {
1676 if (imports != null && caseImportInfo != null) {
1677 String caseImport = IMPORT + caseImportInfo.getPkgInfo() + PERIOD + caseImportInfo.getClassInfo() +
1678 SEMI_COLAN + NEW_LINE;
1679 imports.remove(caseImport);
1680 }
1681 return imports;
1682 }
1683
1684 /**
Bharat saraswald50c6382016-07-14 21:57:13 +05301685 * Removes case import info from import list.
1686 *
1687 * @param imports list of imports
Bharat saraswald50c6382016-07-14 21:57:13 +05301688 */
1689 private void removeAugmentedInfoImport(List<String> imports) {
1690 imports.remove(getJavaImportData().getYangAugmentedInfoImport());
Bharat saraswald50c6382016-07-14 21:57:13 +05301691 }
1692
1693 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301694 * Removes all temporary file handles.
1695 *
Bharat saraswale707f032016-07-14 23:33:55 +05301696 * @param isErrorOccurred flag to tell translator that error has occurred while file generation
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301697 * @throws IOException when failed to delete the temporary files
1698 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301699 public void freeTemporaryResources(boolean isErrorOccurred)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301700 throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301701 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301702 * Close all java file handles and when error occurs delete the files.
1703 */
1704 if ((getGeneratedJavaFiles() & INTERFACE_MASK) != 0) {
Bharat saraswale707f032016-07-14 23:33:55 +05301705 closeFile(getInterfaceJavaFileHandle(), isErrorOccurred);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301706 }
1707 if ((getGeneratedJavaFiles() & BUILDER_CLASS_MASK) != 0) {
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301708 closeFile(getBuilderClassJavaFileHandle(), true);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301709 }
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301710 if ((getGeneratedJavaFiles() & OPERATION_BUILDER_CLASS_MASK) != 0) {
1711 closeFile(getBuilderOpParmClassJavaFileHandle(), true);
1712 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301713 if ((getGeneratedJavaFiles() & BUILDER_INTERFACE_MASK) != 0) {
1714 closeFile(getBuilderInterfaceJavaFileHandle(), true);
1715 }
1716 if ((getGeneratedJavaFiles() & IMPL_CLASS_MASK) != 0) {
Bharat saraswale707f032016-07-14 23:33:55 +05301717 closeFile(getImplClassJavaFileHandle(), isErrorOccurred);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301718 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301719
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301720 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301721 * Close all temporary file handles and delete the files.
1722 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301723 if ((getGeneratedTempFiles() & GETTER_FOR_CLASS_MASK) != 0) {
1724 closeFile(getGetterImplTempFileHandle(), true);
1725 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301726 if ((getGeneratedTempFiles() & ATTRIBUTES_MASK) != 0) {
1727 closeFile(getAttributesTempFileHandle(), true);
1728 }
1729 if ((getGeneratedTempFiles() & HASH_CODE_IMPL_MASK) != 0) {
1730 closeFile(getHashCodeImplTempFileHandle(), true);
1731 }
1732 if ((getGeneratedTempFiles() & TO_STRING_IMPL_MASK) != 0) {
1733 closeFile(getToStringImplTempFileHandle(), true);
1734 }
1735 if ((getGeneratedTempFiles() & EQUALS_IMPL_MASK) != 0) {
1736 closeFile(getEqualsImplTempFileHandle(), true);
1737 }
Bharat saraswalc0e04842016-05-12 13:16:57 +05301738 if ((getGeneratedTempFiles() & FROM_STRING_IMPL_MASK) != 0) {
1739 closeFile(getFromStringImplTempFileHandle(), true);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301740 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301741 }
1742
1743 /**
Bharat saraswalb551aae2016-07-14 15:18:20 +05301744 * Returns if the attribute needs to be accessed in a qualified manner or not, if it needs to be imported, then the
1745 * same needs to be done.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301746 *
1747 * @param importInfo import info for the current attribute being added
1748 * @return status of the qualified access to the attribute
1749 */
Bharat saraswale707f032016-07-14 23:33:55 +05301750 boolean getIsQualifiedAccessOrAddToImportList(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301751 JavaQualifiedTypeInfo importInfo) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301752
1753 return getJavaImportData().addImportInfo(importInfo, getGeneratedJavaClassName(),
1754 getJavaFileInfo().getPackage());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301755 }
1756
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301757 /**
1758 * Returns java file handle for op param class file.
1759 *
1760 * @return java file handle for op param class file
1761 */
Bharat saraswale707f032016-07-14 23:33:55 +05301762 private File getOpParamClassJavaFileHandle() {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301763 return opParamClassJavaFileHandle;
1764 }
1765
1766 /**
1767 * Sets the java file handle for op param class file.
1768 *
Bharat saraswald50c6382016-07-14 21:57:13 +05301769 * @param opParamClassJavaFileHandle java file handle
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301770 */
Bharat saraswale707f032016-07-14 23:33:55 +05301771 private void setOpParamClassJavaFileHandle(File opParamClassJavaFileHandle) {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301772 this.opParamClassJavaFileHandle = opParamClassJavaFileHandle;
1773 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301774}