blob: 982f7c3f464f3387b151b442d274171a091eb597 [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;
Vidyashree Rama36f2fab2016-07-15 14:06:56 +0530106import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530107import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530108import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.readAppendFile;
109import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530110import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530111import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530112import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
113import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
114import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530115import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
116import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.mergeJavaFiles;
Bharat saraswal96dfef02016-06-16 00:29:12 +0530117import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530118
119/**
Bharat saraswalb551aae2016-07-14 15:18:20 +0530120 * Represents implementation of java code fragments temporary implementations. Manages the common temp file required for
121 * Java file(s) generated.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530122 */
123public class TempJavaFragmentFiles {
Bharat saraswalc0e04842016-05-12 13:16:57 +0530124
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530125 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530126 * File type extension for java classes.
127 */
128 private static final String JAVA_FILE_EXTENSION = ".java";
Bharat saraswalc0e04842016-05-12 13:16:57 +0530129
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530130 /**
131 * File type extension for temporary classes.
132 */
133 private static final String TEMP_FILE_EXTENSION = ".tmp";
Bharat saraswalc0e04842016-05-12 13:16:57 +0530134
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530135 /**
136 * Folder suffix for temporary files folder.
137 */
Bharat saraswale707f032016-07-14 23:33:55 +0530138 private static final String TEMP_FOLDER_NAME_SUFFIX = "-Temp";
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530139
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530140 /**
141 * File name for getter method.
142 */
143 private static final String GETTER_METHOD_FILE_NAME = "GetterMethod";
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530144
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530145 /**
146 * File name for setter method.
147 */
148 private static final String SETTER_METHOD_FILE_NAME = "SetterMethod";
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530149
150 /**
151 * File name for getter method implementation.
152 */
153 private static final String GETTER_METHOD_IMPL_FILE_NAME = "GetterMethodImpl";
154
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530155 /**
156 * File name for setter method implementation.
157 */
158 private static final String SETTER_METHOD_IMPL_FILE_NAME = "SetterMethodImpl";
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530159
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530160 /**
161 * File name for attributes.
162 */
163 private static final String ATTRIBUTE_FILE_NAME = "Attributes";
Bharat saraswalc0e04842016-05-12 13:16:57 +0530164
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530165 /**
166 * File name for to string method.
167 */
168 private static final String TO_STRING_METHOD_FILE_NAME = "ToString";
Bharat saraswalc0e04842016-05-12 13:16:57 +0530169
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530170 /**
171 * File name for hash code method.
172 */
173 private static final String HASH_CODE_METHOD_FILE_NAME = "HashCode";
Bharat saraswalc0e04842016-05-12 13:16:57 +0530174
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530175 /**
176 * File name for equals method.
177 */
178 private static final String EQUALS_METHOD_FILE_NAME = "Equals";
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530179
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530180 /**
Bharat saraswalc0e04842016-05-12 13:16:57 +0530181 * File name for from string method.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530182 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530183 private static final String FROM_STRING_METHOD_FILE_NAME = "FromString";
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530184
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530185 /**
186 * File name for interface java file name suffix.
187 */
188 private static final String INTERFACE_FILE_NAME_SUFFIX = EMPTY_STRING;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530189
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530190 /**
191 * File name for builder interface file name suffix.
192 */
193 private static final String BUILDER_INTERFACE_FILE_NAME_SUFFIX = BUILDER + INTERFACE;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530194
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530195 /**
196 * File name for builder class file name suffix.
197 */
198 private static final String BUILDER_CLASS_FILE_NAME_SUFFIX = BUILDER;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530199
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530200 /**
Bharat saraswalb551aae2016-07-14 15:18:20 +0530201 * Information about the java files being generated.
202 */
203 private JavaFileInfo javaFileInfo;
204
205 /**
206 * Imported class info.
207 */
208 private JavaImportData javaImportData;
209
210 /**
211 * The variable which guides the types of temporary files generated using the temporary generated file types mask.
212 */
213 private int generatedTempFiles;
214
215 /**
216 * Absolute path where the target java file needs to be generated.
217 */
218 private String absoluteDirPath;
219
220 /**
221 * Contains all the interface(s)/class name which will be extended by generated files.
222 */
223 private JavaExtendsListHolder javaExtendsListHolder;
224
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530225 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530226 * Java file handle for interface file.
227 */
228 private File interfaceJavaFileHandle;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530229
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530230 /**
231 * Java file handle for builder interface file.
232 */
233 private File builderInterfaceJavaFileHandle;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530234
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530235 /**
236 * Java file handle for builder class file.
237 */
238 private File builderClassJavaFileHandle;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530239
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530240 /**
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530241 * Java file handle for builder op param class file.
242 */
243 private File builderOpParmClassJavaFileHandle;
244
245 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530246 * Java file handle for impl class file.
247 */
248 private File implClassJavaFileHandle;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530249
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530250 /**
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530251 * Java file handle for op param class file.
252 */
253 private File opParamClassJavaFileHandle;
254
255 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530256 * Temporary file handle for attribute.
257 */
258 private File attributesTempFileHandle;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530259
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530260 /**
261 * Temporary file handle for getter of interface.
262 */
263 private File getterInterfaceTempFileHandle;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530264
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530265 /**
266 * Temporary file handle for setter of interface.
267 */
268 private File setterInterfaceTempFileHandle;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530269
270 /**
271 * Temporary file handle for getter of class.
272 */
273 private File getterImplTempFileHandle;
274
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530275 /**
276 * Temporary file handle for setter of class.
277 */
278 private File setterImplTempFileHandle;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530279
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530280 /**
281 * Temporary file handle for hash code method of class.
282 */
283 private File hashCodeImplTempFileHandle;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530284
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530285 /**
286 * Temporary file handle for equals method of class.
287 */
288 private File equalsImplTempFileHandle;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530289
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530290 /**
291 * Temporary file handle for to string method of class.
292 */
293 private File toStringImplTempFileHandle;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530294
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530295 /**
Bharat saraswalc0e04842016-05-12 13:16:57 +0530296 * Temporary file handle for from string method of class.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530297 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530298 private File fromStringImplTempFileHandle;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530299
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530300 /**
301 * Import info for case.
302 */
303 private JavaQualifiedTypeInfo caseImportInfo;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530304
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530305 /**
306 * Is attribute added.
307 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530308 private boolean isAttributePresent;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530309
Bharat saraswalc0e04842016-05-12 13:16:57 +0530310 /**
Bharat saraswald50c6382016-07-14 21:57:13 +0530311 * Base code gen path.
312 */
313 private String baseCodePath;
314
Bharat saraswalb551aae2016-07-14 15:18:20 +0530315 TempJavaFragmentFiles() {
316 }
317
318 /**
319 * Creates an instance of temporary java code fragment.
320 *
321 * @param javaFileInfo generated java file information
322 * @throws IOException when fails to create new file handle
323 */
324 TempJavaFragmentFiles(JavaFileInfo javaFileInfo)
325 throws IOException {
326 setJavaExtendsListHolder(new JavaExtendsListHolder());
327 setJavaImportData(new JavaImportData());
328 setJavaFileInfo(javaFileInfo);
Bharat saraswald50c6382016-07-14 21:57:13 +0530329 if ((javaFileInfo.getGeneratedFileTypes() & GENERATE_SERVICE_AND_MANAGER) != 0) {
330 setBaseCodePath(getJavaFileInfo().getPluginConfig().getCodeGenDir());
331 setAbsoluteDirPath(getAbsolutePackagePath(getJavaFileInfo().getPluginConfig().getCodeGenDir(),
332 getJavaFileInfo().getPackageFilePath()));
333 } else {
334 setBaseCodePath(getJavaFileInfo().getBaseCodeGenPath());
335 setAbsoluteDirPath(getAbsolutePackagePath(getJavaFileInfo().getBaseCodeGenPath(),
336 getJavaFileInfo().getPackageFilePath()));
337 }
Bharat saraswalb551aae2016-07-14 15:18:20 +0530338 /*
339 * Initialize getter when generation file type matches to interface
340 * mask.
341 */
342 if ((getGeneratedJavaFiles() & INTERFACE_MASK) != 0) {
343 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK);
344 }
345
346 /*
347 * Initialize getter and setter when generation file type matches to
348 * builder interface mask.
349 */
350 if ((getGeneratedJavaFiles() & BUILDER_INTERFACE_MASK) != 0) {
351 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK);
352 addGeneratedTempFile(SETTER_FOR_INTERFACE_MASK);
353 }
354
355 /*
356 * Initialize getterImpl, setterImpl and attributes when generation file
357 * type matches to builder class mask.
358 */
359 if ((getGeneratedJavaFiles() & BUILDER_CLASS_MASK) != 0) {
360 addGeneratedTempFile(ATTRIBUTES_MASK);
361 addGeneratedTempFile(GETTER_FOR_CLASS_MASK);
362 addGeneratedTempFile(SETTER_FOR_CLASS_MASK);
Bharat saraswalb551aae2016-07-14 15:18:20 +0530363 }
364
365 /*
366 * Initialize getterImpl, attributes, constructor, hash code, equals and
367 * to strings when generation file type matches to impl class mask.
368 */
369 if ((getGeneratedJavaFiles() & IMPL_CLASS_MASK) != 0) {
370 addGeneratedTempFile(ATTRIBUTES_MASK);
371 addGeneratedTempFile(GETTER_FOR_CLASS_MASK);
372 addGeneratedTempFile(HASH_CODE_IMPL_MASK);
373 addGeneratedTempFile(EQUALS_IMPL_MASK);
374 addGeneratedTempFile(TO_STRING_IMPL_MASK);
375 }
376
377 /*
378 * Initialize temp files to generate type class.
379 */
380 if ((getGeneratedJavaFiles() & GENERATE_TYPE_CLASS) != 0) {
381 addGeneratedTempFile(ATTRIBUTES_MASK);
382 addGeneratedTempFile(GETTER_FOR_CLASS_MASK);
383 addGeneratedTempFile(HASH_CODE_IMPL_MASK);
384 addGeneratedTempFile(EQUALS_IMPL_MASK);
385 addGeneratedTempFile(TO_STRING_IMPL_MASK);
386 addGeneratedTempFile(FROM_STRING_IMPL_MASK);
387 }
388
389 /*
390 * Initialize temp files to generate enum class.
391 */
392 if ((getGeneratedJavaFiles() & GENERATE_ENUM_CLASS) != 0) {
393 addGeneratedTempFile(FROM_STRING_IMPL_MASK);
394 }
395
396 /*
397 * Set temporary file handles.
398 */
399 if ((getGeneratedTempFiles() & ATTRIBUTES_MASK) != 0) {
400 setAttributesTempFileHandle(getTemporaryFileHandle(ATTRIBUTE_FILE_NAME));
401 }
402
403 if ((getGeneratedTempFiles() & GETTER_FOR_INTERFACE_MASK) != 0) {
404 setGetterInterfaceTempFileHandle(getTemporaryFileHandle(GETTER_METHOD_FILE_NAME));
405 }
406
407 if ((getGeneratedTempFiles() & SETTER_FOR_INTERFACE_MASK) != 0) {
408 setSetterInterfaceTempFileHandle(getTemporaryFileHandle(SETTER_METHOD_FILE_NAME));
409 }
410
411 if ((getGeneratedTempFiles() & GETTER_FOR_CLASS_MASK) != 0) {
412 setGetterImplTempFileHandle(getTemporaryFileHandle(GETTER_METHOD_IMPL_FILE_NAME));
413 }
414
415 if ((getGeneratedTempFiles() & SETTER_FOR_CLASS_MASK) != 0) {
416 setSetterImplTempFileHandle(getTemporaryFileHandle(SETTER_METHOD_IMPL_FILE_NAME));
417 }
418
419 if ((getGeneratedTempFiles() & HASH_CODE_IMPL_MASK) != 0) {
420 setHashCodeImplTempFileHandle(getTemporaryFileHandle(HASH_CODE_METHOD_FILE_NAME));
421 }
422 if ((getGeneratedTempFiles() & EQUALS_IMPL_MASK) != 0) {
423 setEqualsImplTempFileHandle(getTemporaryFileHandle(EQUALS_METHOD_FILE_NAME));
424 }
425 if ((getGeneratedTempFiles() & TO_STRING_IMPL_MASK) != 0) {
426 setToStringImplTempFileHandle(getTemporaryFileHandle(TO_STRING_METHOD_FILE_NAME));
427 }
428 if ((getGeneratedTempFiles() & FROM_STRING_IMPL_MASK) != 0) {
429 setFromStringImplTempFileHandle(getTemporaryFileHandle(FROM_STRING_METHOD_FILE_NAME));
430 }
Bharat saraswalb551aae2016-07-14 15:18:20 +0530431 }
432
433 /**
434 * Adds current node info as and attribute to the parent generated file.
435 *
436 * @param curNode current node which needs to be added as an attribute in the parent generated code
437 * @param isList is list construct
438 * @param pluginConfig plugin configurations
439 * @throws IOException IO operation exception
440 */
Bharat saraswale707f032016-07-14 23:33:55 +0530441 static void addCurNodeInfoInParentTempFile(YangNode curNode,
442 boolean isList, YangPluginConfig pluginConfig)
Bharat saraswalb551aae2016-07-14 15:18:20 +0530443 throws IOException {
444 YangNode parent = getParentNodeInGenCode(curNode);
445 if (!(parent instanceof JavaCodeGenerator)) {
446 throw new TranslatorException("missing parent node to contain current node info in generated file");
447 }
448
449 if (parent instanceof YangJavaGrouping) {
450 /*
451 * In case of grouping, there is no need to add the information, it
452 * will be taken care in uses
453 */
454 return;
455 }
456 TempJavaBeanFragmentFiles tempJavaBeanFragmentFiles = ((JavaCodeGeneratorInfo) parent)
457 .getTempJavaCodeFragmentFiles().getBeanTempFiles();
458
459 JavaAttributeInfo javaAttributeInfo = getCurNodeAsAttributeInTarget(curNode,
460 parent, isList, tempJavaBeanFragmentFiles);
Bharat saraswale707f032016-07-14 23:33:55 +0530461
Bharat saraswalb551aae2016-07-14 15:18:20 +0530462 getNodesInterfaceFragmentFiles(parent, javaAttributeInfo, pluginConfig);
463 }
464
465 /**
466 * Creates an attribute info object corresponding to a data model node and return it.
467 *
468 * @param curNode current data model node for which the java code generation is being handled
469 * @param targetNode target node in which the current node is an attribute
470 * @param isListNode is the current added attribute needs to be a list
471 * @param tempJavaFragmentFiles temp java fragment files
472 * @return AttributeInfo attribute details required to add in temporary files
473 */
474 public static JavaAttributeInfo getCurNodeAsAttributeInTarget(YangNode curNode,
475 YangNode targetNode, boolean isListNode,
476 TempJavaFragmentFiles tempJavaFragmentFiles) {
477 String curNodeName = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName();
478 if (curNodeName == null) {
479 updateJavaFileInfo(curNode, null);
480 curNodeName = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName();
481 }
482
483 /*
484 * Get the import info corresponding to the attribute for import in
485 * generated java files or qualified access
486 */
487 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
488 getCapitalCase(curNodeName));
489 if (!(targetNode instanceof TempJavaCodeFragmentFilesContainer)) {
490 throw new TranslatorException("Parent node does not have file info");
491 }
492 JavaImportData parentImportData = tempJavaFragmentFiles.getJavaImportData();
493 JavaFileInfo fileInfo = ((JavaFileInfoContainer) targetNode).getJavaFileInfo();
494
495 boolean isQualified;
496 if ((targetNode instanceof YangJavaModule || targetNode instanceof YangJavaSubModule)
497 && (qualifiedTypeInfo.getClassInfo().contentEquals(SERVICE)
498 || qualifiedTypeInfo.getClassInfo().contentEquals(COMPONENT)
499 || qualifiedTypeInfo.getClassInfo().contentEquals(getCapitalCase(ACTIVATE))
500 || qualifiedTypeInfo.getClassInfo().contentEquals(getCapitalCase(DEACTIVATE))
501 || qualifiedTypeInfo.getClassInfo().contentEquals(REFERENCE_CARDINALITY)
502 || qualifiedTypeInfo.getClassInfo().contentEquals(REFERENCE))
503 || qualifiedTypeInfo.getClassInfo().contentEquals(getCapitalCase(fileInfo.getJavaName() + SERVICE))
504 || qualifiedTypeInfo.getClassInfo().contentEquals(getCapitalCase(fileInfo.getJavaName() + MANAGER))) {
505
506 isQualified = true;
507 } else {
508 String className;
509 if (targetNode instanceof YangJavaModule || targetNode instanceof YangJavaSubModule) {
510 className = getCapitalCase(fileInfo.getJavaName()) + "Service";
511 } else {
512 className = getCapitalCase(fileInfo.getJavaName());
513 }
514
515 isQualified = parentImportData.addImportInfo(qualifiedTypeInfo,
516 className, fileInfo.getPackage());
517 }
518
519 if (isListNode) {
520 parentImportData.setIfListImported(true);
521 }
522
523 return getAttributeInfoForTheData(qualifiedTypeInfo, curNodeName, null, isQualified, isListNode);
524 }
525
526 /**
527 * Adds java code snippet for corresponding files.
528 *
529 * @param node java node
530 * @param attr attribute info
531 * @param config plugin configurations
532 * @throws IOException when fails to do IO operations
533 */
Bharat saraswale707f032016-07-14 23:33:55 +0530534 private static void getNodesInterfaceFragmentFiles(YangNode node, JavaAttributeInfo attr,
535 YangPluginConfig config) throws IOException {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530536 TempJavaFragmentFiles tempJavaFragmentFiles;
537 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) node).getJavaFileInfo();
538 if ((javaFileInfo.getGeneratedFileTypes() & GENERATE_SERVICE_AND_MANAGER) != 0) {
539 tempJavaFragmentFiles = ((TempJavaCodeFragmentFilesContainer) node)
540 .getTempJavaCodeFragmentFiles()
541 .getServiceTempFiles();
542 tempJavaFragmentFiles.addJavaSnippetInfoToApplicableTempFiles(attr, config);
543 }
544 if ((javaFileInfo.getGeneratedFileTypes() & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
545 tempJavaFragmentFiles = ((TempJavaCodeFragmentFilesContainer) node)
546 .getTempJavaCodeFragmentFiles()
547 .getBeanTempFiles();
548 tempJavaFragmentFiles.addJavaSnippetInfoToApplicableTempFiles(attr, config);
549 }
550
551 }
552
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530553 /**
Bharat saraswale707f032016-07-14 23:33:55 +0530554 * Returns java attribute for leaf.
555 *
556 * @param tempJavaFragmentFiles temporary generated file
557 * @param leaf YANG leaf
558 * @param yangPluginConfig plugin configurations
559 * @return java attribute for leaf
560 */
561 public static JavaAttributeInfo getJavaAttributeOfLeaf(TempJavaFragmentFiles tempJavaFragmentFiles, YangLeaf leaf,
562 YangPluginConfig yangPluginConfig) {
563 JavaLeafInfoContainer javaLeaf = (JavaLeafInfoContainer) leaf;
564 javaLeaf.setConflictResolveConfig(yangPluginConfig.getConflictResolver());
565 javaLeaf.updateJavaQualifiedInfo();
566 return getAttributeInfoForTheData(
567 javaLeaf.getJavaQualifiedInfo(),
568 javaLeaf.getJavaName(yangPluginConfig.getConflictResolver()),
569 javaLeaf.getDataType(),
570 tempJavaFragmentFiles.getIsQualifiedAccessOrAddToImportList(javaLeaf.getJavaQualifiedInfo()),
571 false);
572 }
573
574 /**
575 * Returns java attribute for leaf-list.
576 *
577 * @param tempJavaFragmentFiles temporary generated file
578 * @param leafList YANG leaf-list
579 * @param yangPluginConfig plugin configurations
580 * @return java attribute for leaf-list
581 */
582 public static JavaAttributeInfo getJavaAttributeOfLeafList(TempJavaFragmentFiles tempJavaFragmentFiles,
583 YangLeafList leafList,
584 YangPluginConfig yangPluginConfig) {
585 JavaLeafInfoContainer javaLeaf = (JavaLeafInfoContainer) leafList;
586 javaLeaf.setConflictResolveConfig(yangPluginConfig.getConflictResolver());
587 javaLeaf.updateJavaQualifiedInfo();
588 tempJavaFragmentFiles.getJavaImportData().setIfListImported(true);
589 return getAttributeInfoForTheData(
590 javaLeaf.getJavaQualifiedInfo(),
591 javaLeaf.getJavaName(yangPluginConfig.getConflictResolver()),
592 javaLeaf.getDataType(),
593 tempJavaFragmentFiles.getIsQualifiedAccessOrAddToImportList(javaLeaf.getJavaQualifiedInfo()),
594 true);
595 }
596
597 /**
598 * Retrieves the temporary file handle of op param builder class.
599 *
600 * @return op param builder temporary file handle
601 */
602 private File getBuilderOpParmClassJavaFileHandle() {
603 return builderOpParmClassJavaFileHandle;
604 }
605
606 /**
607 * Sets the java file handle for op param builder class.
608 *
609 * @param builderOpParmClassJavaFileHandle java file handle
610 */
611 private void setBuilderOpParmClassJavaFileHandle(File builderOpParmClassJavaFileHandle) {
612 this.builderOpParmClassJavaFileHandle = builderOpParmClassJavaFileHandle;
613 }
614
615 /**
Bharat saraswald50c6382016-07-14 21:57:13 +0530616 * Returns base code path.
617 *
618 * @return base code path
619 */
Bharat saraswale707f032016-07-14 23:33:55 +0530620 private String getBaseCodePath() {
Bharat saraswald50c6382016-07-14 21:57:13 +0530621 return baseCodePath;
622 }
623
624 /**
625 * Sets base code path.
626 *
627 * @param baseCodePath base code path
628 */
Bharat saraswale707f032016-07-14 23:33:55 +0530629 void setBaseCodePath(String baseCodePath) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530630 this.baseCodePath = baseCodePath;
631 }
632
633 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530634 * Retrieves the absolute path where the file needs to be generated.
635 *
636 * @return absolute path where the file needs to be generated
637 */
638 private String getAbsoluteDirPath() {
639 return absoluteDirPath;
640 }
641
642 /**
643 * Sets absolute path where the file needs to be generated.
644 *
Bharat saraswalb551aae2016-07-14 15:18:20 +0530645 * @param absoluteDirPath absolute path where the file needs to be generated.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530646 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530647 void setAbsoluteDirPath(String absoluteDirPath) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530648 this.absoluteDirPath = absoluteDirPath;
649 }
650
651 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530652 * Retrieves the generated java file information.
653 *
654 * @return generated java file information
655 */
656 public JavaFileInfo getJavaFileInfo() {
657 return javaFileInfo;
658 }
659
660 /**
Bharat saraswalb551aae2016-07-14 15:18:20 +0530661 * Sets the generated java file information.
662 *
663 * @param javaFileInfo generated java file information
664 */
665 public void setJavaFileInfo(JavaFileInfo javaFileInfo) {
666 this.javaFileInfo = javaFileInfo;
667 }
668
669 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530670 * Retrieves the generated temp files.
671 *
672 * @return generated temp files
673 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530674 int getGeneratedTempFiles() {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530675 return generatedTempFiles;
676 }
677
678 /**
Bharat saraswalb551aae2016-07-14 15:18:20 +0530679 * Sets generated file files.
680 *
681 * @param fileType generated file type
682 */
Bharat saraswale707f032016-07-14 23:33:55 +0530683 private void setGeneratedTempFiles(int fileType) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530684 generatedTempFiles = fileType;
685 }
686
687 /**
Bharat saraswalc0e04842016-05-12 13:16:57 +0530688 * Adds to generated temporary files.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530689 *
690 * @param generatedTempFile generated file
691 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530692 void addGeneratedTempFile(int generatedTempFile) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530693 generatedTempFiles |= generatedTempFile;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530694 setGeneratedTempFiles(generatedTempFiles);
695 }
696
697 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530698 * Retrieves the generated Java files.
699 *
700 * @return generated Java files
701 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530702 int getGeneratedJavaFiles() {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530703 return getJavaFileInfo().getGeneratedFileTypes();
704 }
705
706 /**
707 * Retrieves the mapped Java class name.
708 *
709 * @return mapped Java class name
710 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530711 String getGeneratedJavaClassName() {
janani b4a6711a2016-05-17 13:12:22 +0530712 return getCapitalCase(getJavaFileInfo().getJavaName());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530713 }
714
715 /**
716 * Retrieves the import data for the generated Java file.
717 *
718 * @return import data for the generated Java file
719 */
720 public JavaImportData getJavaImportData() {
721 return javaImportData;
722 }
723
724 /**
725 * Sets import data for the generated Java file.
726 *
727 * @param javaImportData import data for the generated Java file
728 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530729 void setJavaImportData(JavaImportData javaImportData) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530730 this.javaImportData = javaImportData;
731 }
732
733 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530734 * Retrieves the status of any attributes added.
735 *
736 * @return status of any attributes added
737 */
Bharat saraswale707f032016-07-14 23:33:55 +0530738 boolean isAttributePresent() {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530739 return isAttributePresent;
740 }
741
742 /**
743 * Sets status of any attributes added.
744 *
745 * @param attributePresent status of any attributes added
746 */
Bharat saraswale707f032016-07-14 23:33:55 +0530747 private void setAttributePresent(boolean attributePresent) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530748 isAttributePresent = attributePresent;
749 }
750
751 /**
752 * Returns getter methods's temporary file handle.
753 *
754 * @return temporary file handle
755 */
756 public File getGetterInterfaceTempFileHandle() {
757 return getterInterfaceTempFileHandle;
758 }
759
760 /**
761 * Sets to getter method's temporary file handle.
762 *
763 * @param getterForInterface file handle for to getter method
764 */
765 private void setGetterInterfaceTempFileHandle(File getterForInterface) {
766 getterInterfaceTempFileHandle = getterForInterface;
767 }
768
769 /**
770 * Returns setter method's temporary file handle.
771 *
772 * @return temporary file handle
773 */
774 public File getSetterInterfaceTempFileHandle() {
775 return setterInterfaceTempFileHandle;
776 }
777
778 /**
779 * Sets to setter method's temporary file handle.
780 *
781 * @param setterForInterface file handle for to setter method
782 */
783 private void setSetterInterfaceTempFileHandle(File setterForInterface) {
784 setterInterfaceTempFileHandle = setterForInterface;
785 }
786
787 /**
788 * Returns setter method's impl's temporary file handle.
789 *
790 * @return temporary file handle
791 */
792 public File getSetterImplTempFileHandle() {
793 return setterImplTempFileHandle;
794 }
795
796 /**
797 * Sets to setter method's impl's temporary file handle.
798 *
799 * @param setterImpl file handle for to setter method's implementation class
800 */
801 private void setSetterImplTempFileHandle(File setterImpl) {
802 setterImplTempFileHandle = setterImpl;
803 }
804
805 /**
Bharat saraswalc0e04842016-05-12 13:16:57 +0530806 * Returns from string method's temporary file handle.
807 *
808 * @return from string method's temporary file handle
809 */
810 public File getFromStringImplTempFileHandle() {
811 return fromStringImplTempFileHandle;
812 }
813
814 /**
815 * Sets from string method's temporary file handle.
816 *
Bharat saraswalb551aae2016-07-14 15:18:20 +0530817 * @param fromStringImplTempFileHandle from string method's temporary file handle
Bharat saraswalc0e04842016-05-12 13:16:57 +0530818 */
819 private void setFromStringImplTempFileHandle(File fromStringImplTempFileHandle) {
820 this.fromStringImplTempFileHandle = fromStringImplTempFileHandle;
821 }
822
823 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530824 * Returns java file handle for interface file.
825 *
826 * @return java file handle for interface file
827 */
828 private File getInterfaceJavaFileHandle() {
829 return interfaceJavaFileHandle;
830 }
831
832 /**
833 * Sets the java file handle for interface file.
834 *
835 * @param interfaceJavaFileHandle java file handle
836 */
837 private void setInterfaceJavaFileHandle(File interfaceJavaFileHandle) {
838 this.interfaceJavaFileHandle = interfaceJavaFileHandle;
839 }
840
841 /**
842 * Returns java file handle for builder interface file.
843 *
844 * @return java file handle for builder interface file
845 */
846 private File getBuilderInterfaceJavaFileHandle() {
847 return builderInterfaceJavaFileHandle;
848 }
849
850 /**
851 * Sets the java file handle for builder interface file.
852 *
853 * @param builderInterfaceJavaFileHandle java file handle
854 */
855 private void setBuilderInterfaceJavaFileHandle(File builderInterfaceJavaFileHandle) {
856 this.builderInterfaceJavaFileHandle = builderInterfaceJavaFileHandle;
857 }
858
859 /**
860 * Returns java file handle for builder class file.
861 *
862 * @return java file handle for builder class file
863 */
864 private File getBuilderClassJavaFileHandle() {
865 return builderClassJavaFileHandle;
866 }
867
868 /**
869 * Sets the java file handle for builder class file.
870 *
871 * @param builderClassJavaFileHandle java file handle
872 */
873 private void setBuilderClassJavaFileHandle(File builderClassJavaFileHandle) {
874 this.builderClassJavaFileHandle = builderClassJavaFileHandle;
875 }
876
877 /**
878 * Returns java file handle for impl class file.
879 *
880 * @return java file handle for impl class file
881 */
882 private File getImplClassJavaFileHandle() {
883 return implClassJavaFileHandle;
884 }
885
886 /**
887 * Sets the java file handle for impl class file.
888 *
889 * @param implClassJavaFileHandle java file handle
890 */
891 private void setImplClassJavaFileHandle(File implClassJavaFileHandle) {
892 this.implClassJavaFileHandle = implClassJavaFileHandle;
893 }
894
895 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530896 * Returns attribute's temporary file handle.
897 *
898 * @return temporary file handle
899 */
900 public File getAttributesTempFileHandle() {
901 return attributesTempFileHandle;
902 }
903
904 /**
905 * Sets attribute's temporary file handle.
906 *
907 * @param attributeForClass file handle for attribute
908 */
Bharat saraswale707f032016-07-14 23:33:55 +0530909 private void setAttributesTempFileHandle(File attributeForClass) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530910 attributesTempFileHandle = attributeForClass;
911 }
912
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530913 /**
914 * Returns getter method's impl's temporary file handle.
915 *
916 * @return temporary file handle
917 */
918 public File getGetterImplTempFileHandle() {
919 return getterImplTempFileHandle;
920 }
921
922 /**
923 * Sets to getter method's impl's temporary file handle.
924 *
925 * @param getterImpl file handle for to getter method's impl
926 */
Bharat saraswale707f032016-07-14 23:33:55 +0530927 private void setGetterImplTempFileHandle(File getterImpl) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530928 getterImplTempFileHandle = getterImpl;
929 }
930
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530931 /**
932 * Returns hash code method's temporary file handle.
933 *
934 * @return temporary file handle
935 */
936 public File getHashCodeImplTempFileHandle() {
937 return hashCodeImplTempFileHandle;
938 }
939
940 /**
941 * Sets hash code method's temporary file handle.
942 *
943 * @param hashCodeMethod file handle for hash code method
944 */
Bharat saraswale707f032016-07-14 23:33:55 +0530945 private void setHashCodeImplTempFileHandle(File hashCodeMethod) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530946 hashCodeImplTempFileHandle = hashCodeMethod;
947 }
948
949 /**
Bharat saraswale707f032016-07-14 23:33:55 +0530950 * Returns equals method's temporary file handle.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530951 *
952 * @return temporary file handle
953 */
954 public File getEqualsImplTempFileHandle() {
955 return equalsImplTempFileHandle;
956 }
957
958 /**
959 * Sets equals method's temporary file handle.
960 *
961 * @param equalsMethod file handle for to equals method
962 */
Bharat saraswale707f032016-07-14 23:33:55 +0530963 private void setEqualsImplTempFileHandle(File equalsMethod) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530964 equalsImplTempFileHandle = equalsMethod;
965 }
966
967 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530968 * Returns to string method's temporary file handle.
969 *
970 * @return temporary file handle
971 */
972 public File getToStringImplTempFileHandle() {
973 return toStringImplTempFileHandle;
974 }
975
976 /**
977 * Sets to string method's temporary file handle.
978 *
979 * @param toStringMethod file handle for to string method
980 */
Bharat saraswale707f032016-07-14 23:33:55 +0530981 private void setToStringImplTempFileHandle(File toStringMethod) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530982 toStringImplTempFileHandle = toStringMethod;
983 }
984
985 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530986 * Returns java extends list holder.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530987 *
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530988 * @return java extends list holder
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530989 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530990 public JavaExtendsListHolder getJavaExtendsListHolder() {
991 return javaExtendsListHolder;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530992 }
993
994 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530995 * Sets java extends list holder.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530996 *
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530997 * @param javaExtendsListHolder java extends list holder
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530998 */
Bharat saraswale707f032016-07-14 23:33:55 +0530999 void setJavaExtendsListHolder(JavaExtendsListHolder javaExtendsListHolder) {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301000 this.javaExtendsListHolder = javaExtendsListHolder;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301001 }
1002
1003 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301004 * Adds attribute for class.
1005 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301006 * @param attr attribute info
1007 * @param yangPluginConfig plugin configurations
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301008 * @throws IOException when fails to append to temporary file
1009 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301010 private void addAttribute(JavaAttributeInfo attr, YangPluginConfig yangPluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301011 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301012 appendToFile(getAttributesTempFileHandle(), parseAttribute(attr, yangPluginConfig)
1013 + FOUR_SPACE_INDENTATION);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301014 }
1015
1016 /**
1017 * Adds getter for interface.
1018 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301019 * @param attr attribute info
Bharat saraswal33dfa012016-05-17 19:59:16 +05301020 * @param pluginConfig plugin configurations
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301021 * @throws IOException when fails to append to temporary file
1022 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301023 private void addGetterForInterface(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301024 throws IOException {
Bharat saraswalc0e04842016-05-12 13:16:57 +05301025 appendToFile(getGetterInterfaceTempFileHandle(),
Bharat saraswal33dfa012016-05-17 19:59:16 +05301026 getGetterString(attr, getGeneratedJavaFiles(), pluginConfig) + NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301027 }
1028
1029 /**
1030 * Adds setter for interface.
1031 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301032 * @param attr attribute info
Bharat saraswal33dfa012016-05-17 19:59:16 +05301033 * @param pluginConfig plugin configurations
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301034 * @throws IOException when fails to append to temporary file
1035 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301036 private void addSetterForInterface(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301037 throws IOException {
1038 appendToFile(getSetterInterfaceTempFileHandle(),
Bharat saraswal33dfa012016-05-17 19:59:16 +05301039 getSetterString(attr, getGeneratedJavaClassName(), getGeneratedJavaFiles(), pluginConfig)
1040 + NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301041 }
1042
1043 /**
1044 * Adds setter's implementation for class.
1045 *
1046 * @param attr attribute info
1047 * @throws IOException when fails to append to temporary file
1048 */
1049 private void addSetterImpl(JavaAttributeInfo attr)
1050 throws IOException {
1051 appendToFile(getSetterImplTempFileHandle(),
Bharat saraswalc0e04842016-05-12 13:16:57 +05301052 getOverRideString() + getSetterForClass(attr, getGeneratedJavaClassName(), getGeneratedJavaFiles())
Bharat saraswale707f032016-07-14 23:33:55 +05301053 + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301054 }
1055
1056 /**
1057 * Adds getter method's impl for class.
1058 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301059 * @param attr attribute info
Bharat saraswal33dfa012016-05-17 19:59:16 +05301060 * @param pluginConfig plugin configurations
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301061 * @throws IOException when fails to append to temporary file
1062 */
Bharat saraswale707f032016-07-14 23:33:55 +05301063 void addGetterImpl(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301064 throws IOException {
1065 if ((getGeneratedJavaFiles() & BUILDER_CLASS_MASK) != 0
1066 || (getGeneratedJavaFiles() & GENERATE_SERVICE_AND_MANAGER) != 0) {
1067 appendToFile(getGetterImplTempFileHandle(), getOverRideString() + getGetterForClass(attr,
1068 getGeneratedJavaFiles()) + NEW_LINE);
1069 } else {
janani b4a6711a2016-05-17 13:12:22 +05301070 appendToFile(getGetterImplTempFileHandle(),
Bharat saraswal33dfa012016-05-17 19:59:16 +05301071 getJavaDoc(GETTER_METHOD, getCapitalCase(attr.getAttributeName()), false, pluginConfig)
janani b4a6711a2016-05-17 13:12:22 +05301072 + getGetterForClass(attr, getGeneratedJavaFiles()) + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301073 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301074 }
1075
1076 /**
1077 * Adds build method for interface.
1078 *
Bharat saraswal33dfa012016-05-17 19:59:16 +05301079 * @param pluginConfig plugin configurations
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301080 * @return build method for interface
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301081 * @throws IOException when fails to append to temporary file
1082 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301083 String addBuildMethodForInterface(YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301084 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301085 return parseBuilderInterfaceBuildMethodString(getGeneratedJavaClassName(), pluginConfig);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301086 }
1087
1088 /**
1089 * Adds build method's implementation for class.
1090 *
1091 * @return build method implementation for class
1092 * @throws IOException when fails to append to temporary file
1093 */
1094 String addBuildMethodImpl()
1095 throws IOException {
1096 return getBuildString(getGeneratedJavaClassName()) + NEW_LINE;
1097 }
1098
1099 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301100 * Adds default constructor for class.
1101 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301102 * @param modifier modifier for constructor.
1103 * @param toAppend string which need to be appended with the class name
Bharat saraswal33dfa012016-05-17 19:59:16 +05301104 * @param pluginConfig plugin configurations
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301105 * @return default constructor for class
1106 * @throws IOException when fails to append to file
1107 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301108 String addDefaultConstructor(String modifier, String toAppend, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301109 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301110 return NEW_LINE
1111 + getDefaultConstructorString(getGeneratedJavaClassName() + toAppend, modifier, pluginConfig);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301112 }
1113
1114 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301115 * Adds hash code method for class.
1116 *
1117 * @param attr attribute info
1118 * @throws IOException when fails to append to temporary file
1119 */
1120 private void addHashCodeMethod(JavaAttributeInfo attr)
1121 throws IOException {
1122 appendToFile(getHashCodeImplTempFileHandle(), getHashCodeMethod(attr) + NEW_LINE);
1123 }
1124
1125 /**
1126 * Adds equals method for class.
1127 *
1128 * @param attr attribute info
1129 * @throws IOException when fails to append to temporary file
1130 */
1131 private void addEqualsMethod(JavaAttributeInfo attr)
1132 throws IOException {
1133 appendToFile(getEqualsImplTempFileHandle(), getEqualsMethod(attr) + NEW_LINE);
1134 }
1135
1136 /**
1137 * Adds ToString method for class.
1138 *
1139 * @param attr attribute info
1140 * @throws IOException when fails to append to temporary file
1141 */
1142 private void addToStringMethod(JavaAttributeInfo attr)
1143 throws IOException {
1144 appendToFile(getToStringImplTempFileHandle(), getToStringMethod(attr) + NEW_LINE);
1145 }
1146
1147 /**
Bharat saraswalc0e04842016-05-12 13:16:57 +05301148 * Adds from string method for union class.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301149 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301150 * @param javaAttributeInfo type attribute info
Bharat saraswalc0e04842016-05-12 13:16:57 +05301151 * @param fromStringAttributeInfo from string attribute info
1152 * @throws IOException when fails to append to temporary file
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301153 */
Bharat saraswale707f032016-07-14 23:33:55 +05301154 void addFromStringMethod(JavaAttributeInfo javaAttributeInfo,
1155 JavaAttributeInfo fromStringAttributeInfo)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301156 throws IOException {
Bharat saraswalc0e04842016-05-12 13:16:57 +05301157 appendToFile(getFromStringImplTempFileHandle(), getFromStringMethod(javaAttributeInfo,
1158 fromStringAttributeInfo) + NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301159 }
1160
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301161 /**
1162 * Returns a temporary file handle for the specific file type.
1163 *
1164 * @param fileName file name
1165 * @return temporary file handle
1166 * @throws IOException when fails to create new file handle
1167 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301168 File getTemporaryFileHandle(String fileName)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301169 throws IOException {
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301170 String path = getTempDirPath(getAbsoluteDirPath());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301171 File dir = new File(path);
1172 if (!dir.exists()) {
1173 dir.mkdirs();
1174 }
1175 File file = new File(path + fileName + TEMP_FILE_EXTENSION);
1176 if (!file.exists()) {
1177 file.createNewFile();
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301178 } else {
1179 throw new IOException(fileName + " is reused due to YANG naming");
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301180 }
1181 return file;
1182 }
1183
1184 /**
1185 * Returns a temporary file handle for the specific file type.
1186 *
1187 * @param fileName file name
1188 * @return temporary file handle
1189 * @throws IOException when fails to create new file handle
1190 */
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301191 File getJavaFileHandle(String fileName)
1192 throws IOException {
Bharat saraswald50c6382016-07-14 21:57:13 +05301193 return getFileObject(getDirPath(), fileName, JAVA_FILE_EXTENSION, getBaseCodePath());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301194 }
1195
1196 /**
1197 * Returns data from the temporary files.
1198 *
Bharat saraswalb551aae2016-07-14 15:18:20 +05301199 * @param file temporary file handle
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301200 * @param absolutePath absolute path
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301201 * @return stored data from temporary files
1202 * @throws IOException when failed to get data from the given file
1203 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301204 public String getTemporaryDataFromFileHandle(File file, String absolutePath)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301205 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301206
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301207 String path = getTempDirPath(absolutePath);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301208 if (new File(path + file.getName()).exists()) {
1209 return readAppendFile(path + file.getName(), EMPTY_STRING);
1210 } else {
1211 throw new IOException("Unable to get data from the given "
1212 + file.getName() + " file for " + getGeneratedJavaClassName() + PERIOD);
1213 }
1214 }
1215
1216 /**
1217 * Returns temporary directory path.
1218 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301219 * @param absolutePath absolute path
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301220 * @return directory path
1221 */
Bharat saraswale707f032016-07-14 23:33:55 +05301222 private String getTempDirPath(String absolutePath) {
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301223 return getPackageDirPathFromJavaJPackage(absolutePath) + SLASH + getGeneratedJavaClassName()
Bharat saraswale707f032016-07-14 23:33:55 +05301224 + TEMP_FOLDER_NAME_SUFFIX + SLASH;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301225 }
1226
1227 /**
1228 * Parses attribute to get the attribute string.
1229 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301230 * @param attr attribute info
Bharat saraswal33dfa012016-05-17 19:59:16 +05301231 * @param pluginConfig plugin configurations
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301232 * @return attribute string
1233 */
Bharat saraswale707f032016-07-14 23:33:55 +05301234 String parseAttribute(JavaAttributeInfo attr, YangPluginConfig pluginConfig) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301235 /*
1236 * TODO: check if this utility needs to be called or move to the caller
1237 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301238 String attributeName = getCamelCase(attr.getAttributeName(), pluginConfig.getConflictResolver());
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301239 String attributeAccessType = PRIVATE;
1240 if ((javaFileInfo.getGeneratedFileTypes() & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
1241 attributeAccessType = PROTECTED;
1242 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301243 if (attr.isQualifiedName()) {
Bharat saraswalc0e04842016-05-12 13:16:57 +05301244 return getJavaAttributeDefination(attr.getImportInfo().getPkgInfo(),
1245 attr.getImportInfo().getClassInfo(),
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301246 attributeName, attr.isListAttr(), attributeAccessType);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301247 } else {
1248 return getJavaAttributeDefination(null, attr.getImportInfo().getClassInfo(), attributeName,
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301249 attr.isListAttr(), attributeAccessType);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301250 }
1251 }
1252
1253 /**
1254 * Appends content to temporary file.
1255 *
1256 * @param file temporary file
1257 * @param data data to be appended
1258 * @throws IOException when fails to append to file
1259 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301260 void appendToFile(File file, String data)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301261 throws IOException {
1262 try {
1263 insertDataIntoJavaFile(file, data);
1264 } catch (IOException ex) {
1265 throw new IOException("failed to write in temp file.");
1266 }
1267 }
1268
1269 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301270 * Adds parent's info to current node import list.
1271 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301272 * @param curNode current node for which import list needs to be updated
Bharat saraswal33dfa012016-05-17 19:59:16 +05301273 * @param pluginConfig plugin configurations
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301274 */
Bharat saraswale707f032016-07-14 23:33:55 +05301275 void addParentInfoInCurNodeTempFile(YangNode curNode, YangPluginConfig pluginConfig) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301276 caseImportInfo = new JavaQualifiedTypeInfo();
1277 YangNode parent = getParentNodeInGenCode(curNode);
1278 if (!(parent instanceof JavaCodeGenerator)) {
1279 throw new TranslatorException("missing parent node to contain current node info in generated file");
1280 }
1281 if (!(curNode instanceof JavaFileInfoContainer)) {
1282 throw new TranslatorException("missing java file information to get the package details "
1283 + "of attribute corresponding to child node");
1284 }
Bharat saraswal33dfa012016-05-17 19:59:16 +05301285 caseImportInfo.setClassInfo(getCapitalCase(getCamelCase(parent.getName(),
1286 pluginConfig.getConflictResolver())));
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301287 caseImportInfo.setPkgInfo(((JavaFileInfoContainer) parent).getJavaFileInfo().getPackage());
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301288
1289 JavaFileInfo fileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
1290
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301291 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301292 .getBeanTempFiles().getJavaImportData().addImportInfo(caseImportInfo,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301293 getCapitalCase(fileInfo.getJavaName()), fileInfo.getPackage());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301294 }
1295
1296 /**
1297 * Adds leaf attributes in generated files.
1298 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301299 * @param listOfLeaves list of YANG leaf
1300 * @param yangPluginConfig plugin config
Bharat saraswale707f032016-07-14 23:33:55 +05301301 * @param curNode current node
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301302 * @throws IOException IO operation fail
1303 */
Bharat saraswale707f032016-07-14 23:33:55 +05301304 private void addLeavesInfoToTempFiles(List<YangLeaf> listOfLeaves,
1305 YangPluginConfig yangPluginConfig, YangNode curNode)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301306 throws IOException {
1307 if (listOfLeaves != null) {
1308 for (YangLeaf leaf : listOfLeaves) {
1309 if (!(leaf instanceof JavaLeafInfoContainer)) {
1310 throw new TranslatorException("Leaf does not have java information");
1311 }
Bharat saraswale707f032016-07-14 23:33:55 +05301312 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
1313 TempJavaBeanFragmentFiles tempJavaBeanFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1314 .getTempJavaCodeFragmentFiles().getBeanTempFiles();
1315 addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeaf(tempJavaBeanFragmentFiles, leaf,
1316 yangPluginConfig), yangPluginConfig);
1317 } else {
1318 addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeaf(this, leaf, yangPluginConfig),
1319 yangPluginConfig);
1320 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301321 }
1322 }
1323 }
1324
1325 /**
1326 * Adds leaf list's attributes in generated files.
1327 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301328 * @param listOfLeafList list of YANG leaves
1329 * @param yangPluginConfig plugin config
Bharat saraswale707f032016-07-14 23:33:55 +05301330 * @param curNode current node
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301331 * @throws IOException IO operation fail
1332 */
Bharat saraswale707f032016-07-14 23:33:55 +05301333 private void addLeafListInfoToTempFiles(List<YangLeafList> listOfLeafList, YangPluginConfig yangPluginConfig,
1334 YangNode curNode) throws IOException {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301335 if (listOfLeafList != null) {
1336 for (YangLeafList leafList : listOfLeafList) {
1337 if (!(leafList instanceof JavaLeafInfoContainer)) {
1338 throw new TranslatorException("Leaf-list does not have java information");
1339 }
Bharat saraswale707f032016-07-14 23:33:55 +05301340 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
1341 TempJavaBeanFragmentFiles tempJavaBeanFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1342 .getTempJavaCodeFragmentFiles().getBeanTempFiles();
1343 addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeafList(tempJavaBeanFragmentFiles,
1344 leafList, yangPluginConfig), yangPluginConfig);
1345 } else {
1346 addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeOfLeafList(this,
1347 leafList, yangPluginConfig), yangPluginConfig);
1348 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301349 }
1350 }
1351 }
1352
1353 /**
Bharat saraswale707f032016-07-14 23:33:55 +05301354 * Adds all the leaves in the current data model node as part of the generated temporary file.
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301355 *
Bharat saraswale707f032016-07-14 23:33:55 +05301356 * @param curNode current node
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301357 * @param yangPluginConfig plugin config
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301358 * @throws IOException IO operation fail
1359 */
Bharat saraswale707f032016-07-14 23:33:55 +05301360 void addCurNodeLeavesInfoToTempFiles(YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301361 YangPluginConfig yangPluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301362 throws IOException {
1363 if (!(curNode instanceof YangLeavesHolder)) {
1364 throw new TranslatorException("Data model node does not have any leaves");
1365 }
1366 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
Bharat saraswale707f032016-07-14 23:33:55 +05301367 addLeavesInfoToTempFiles(leavesHolder.getListOfLeaf(), yangPluginConfig, curNode);
1368 addLeafListInfoToTempFiles(leavesHolder.getListOfLeafList(), yangPluginConfig, curNode);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301369 }
1370
1371 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301372 * Adds the new attribute info to the target generated temporary files.
1373 *
Bharat saraswalb551aae2016-07-14 15:18:20 +05301374 * @param newAttrInfo the attribute info that needs to be added to temporary files
Bharat saraswal33dfa012016-05-17 19:59:16 +05301375 * @param pluginConfig plugin configurations
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301376 * @throws IOException IO operation fail
1377 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301378 void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo newAttrInfo, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301379 throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301380 setAttributePresent(true);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301381 if ((getGeneratedTempFiles() & ATTRIBUTES_MASK) != 0) {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301382 addAttribute(newAttrInfo, pluginConfig);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301383 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301384
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301385 if ((getGeneratedTempFiles() & GETTER_FOR_INTERFACE_MASK) != 0) {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301386 addGetterForInterface(newAttrInfo, pluginConfig);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301387 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301388
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301389 if ((getGeneratedTempFiles() & SETTER_FOR_INTERFACE_MASK) != 0) {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301390 addSetterForInterface(newAttrInfo, pluginConfig);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301391 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301392
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301393 if ((getGeneratedTempFiles() & SETTER_FOR_CLASS_MASK) != 0) {
1394 addSetterImpl(newAttrInfo);
1395 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301396
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301397 if ((getGeneratedTempFiles() & HASH_CODE_IMPL_MASK) != 0) {
1398 addHashCodeMethod(newAttrInfo);
1399 }
1400 if ((getGeneratedTempFiles() & EQUALS_IMPL_MASK) != 0) {
1401 addEqualsMethod(newAttrInfo);
1402 }
1403 if ((getGeneratedTempFiles() & TO_STRING_IMPL_MASK) != 0) {
1404 addToStringMethod(newAttrInfo);
1405 }
Bharat saraswalc0e04842016-05-12 13:16:57 +05301406
Bharat saraswale707f032016-07-14 23:33:55 +05301407 if (!newAttrInfo.isIntConflict() &&
1408 !newAttrInfo.isLongConflict()) {
1409 if ((getGeneratedTempFiles() & GETTER_FOR_CLASS_MASK) != 0) {
1410 addGetterImpl(newAttrInfo, pluginConfig);
1411 }
1412
1413 if ((getGeneratedTempFiles() & FROM_STRING_IMPL_MASK) != 0) {
1414 JavaQualifiedTypeInfo qualifiedInfoOfFromString = getQualifiedInfoOfFromString(newAttrInfo,
1415 pluginConfig.getConflictResolver());
Bharat saraswalc0e04842016-05-12 13:16:57 +05301416 /*
1417 * Create a new java attribute info with qualified information of
1418 * wrapper classes.
1419 */
Bharat saraswale707f032016-07-14 23:33:55 +05301420 JavaAttributeInfo fromStringAttributeInfo = getAttributeInfoForTheData(qualifiedInfoOfFromString,
1421 newAttrInfo.getAttributeName(),
1422 newAttrInfo.getAttributeType(),
1423 getIsQualifiedAccessOrAddToImportList(qualifiedInfoOfFromString), false);
Bharat saraswalc0e04842016-05-12 13:16:57 +05301424
Bharat saraswale707f032016-07-14 23:33:55 +05301425 addFromStringMethod(newAttrInfo, fromStringAttributeInfo);
1426 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301427 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301428 }
1429
1430 /**
1431 * Returns java class name.
1432 *
1433 * @param suffix for the class name based on the file type
1434 * @return java class name
1435 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301436 String getJavaClassName(String suffix) {
janani b4a6711a2016-05-17 13:12:22 +05301437 return getCapitalCase(getJavaFileInfo().getJavaName()) + suffix;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301438 }
1439
1440 /**
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301441 * Returns java class name.
1442 *
1443 * @return java class name
1444 */
Bharat saraswale707f032016-07-14 23:33:55 +05301445 private String getImplClassName() {
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301446 return getCapitalCase(DEFAULT) + getCapitalCase(getJavaFileInfo().getJavaName());
1447 }
1448
1449 /**
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301450 * Returns op param java class name.
1451 *
1452 * @return op param java class name
1453 */
Bharat saraswale707f032016-07-14 23:33:55 +05301454 private String getOpParamImplClassName() {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301455 return getCapitalCase(getJavaFileInfo().getJavaName()) + OPERATION;
1456 }
1457
1458 /**
1459 * Returns op param builder java class name.
1460 *
1461 * @return op param builder java class name
1462 */
Bharat saraswale707f032016-07-14 23:33:55 +05301463 private String getOpParamBuilderImplClassName() {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301464 return getCapitalCase(getJavaFileInfo().getJavaName()) + OPERATION + BUILDER;
1465 }
1466
1467 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301468 * Returns the directory path.
1469 *
1470 * @return directory path
1471 */
1472 private String getDirPath() {
1473 return getJavaFileInfo().getPackageFilePath();
1474 }
1475
1476 /**
1477 * Constructs java code exit.
1478 *
1479 * @param fileType generated file type
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301480 * @param curNode current YANG node
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301481 * @throws IOException when fails to generate java files
1482 */
1483 public void generateJavaFile(int fileType, YangNode curNode)
1484 throws IOException {
Bharat saraswalb551aae2016-07-14 15:18:20 +05301485
1486 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
1487 addResolvedAugmentedDataNodeImports(curNode);
1488 }
Bharat saraswald50c6382016-07-14 21:57:13 +05301489 TempJavaBeanFragmentFiles tempJavaBeanFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1490 .getTempJavaCodeFragmentFiles().getBeanTempFiles();
Bharat saraswalb551aae2016-07-14 15:18:20 +05301491 List<String> imports = ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getBeanTempFiles()
1492 .getJavaImportData().getImports();
Bharat saraswal33dfa012016-05-17 19:59:16 +05301493
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301494 createPackage(curNode);
1495
1496 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301497 * Generate java code.
1498 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301499 if ((fileType & INTERFACE_MASK) != 0 || (fileType &
1500 BUILDER_INTERFACE_MASK) != 0) {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301501
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301502 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301503 * Create interface file.
1504 */
1505 setInterfaceJavaFileHandle(getJavaFileHandle(getJavaClassName(INTERFACE_FILE_NAME_SUFFIX)));
1506 setInterfaceJavaFileHandle(
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301507 generateInterfaceFile(getInterfaceJavaFileHandle(), imports, curNode, isAttributePresent()));
1508 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301509 * Create builder interface file.
1510 */
1511 if ((fileType & BUILDER_INTERFACE_MASK) != 0) {
1512 setBuilderInterfaceJavaFileHandle(
1513 getJavaFileHandle(getJavaClassName(BUILDER_INTERFACE_FILE_NAME_SUFFIX)));
1514 setBuilderInterfaceJavaFileHandle(
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301515 generateBuilderInterfaceFile(getBuilderInterfaceJavaFileHandle(), curNode,
1516 isAttributePresent()));
1517 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301518 * Append builder interface file to interface file and close it.
1519 */
1520 mergeJavaFiles(getBuilderInterfaceJavaFileHandle(), getInterfaceJavaFileHandle());
Bharat saraswal96dfef02016-06-16 00:29:12 +05301521 validateLineLength(getInterfaceJavaFileHandle());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301522 }
1523 insertDataIntoJavaFile(getInterfaceJavaFileHandle(), getJavaClassDefClose());
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301524
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301525 if (curNode instanceof YangCase) {
1526 removeCaseImport(imports);
1527 }
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301528
Bharat saraswald50c6382016-07-14 21:57:13 +05301529 if (curNode instanceof YangAugment) {
1530 removeAugmentedInfoImport(imports);
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301531 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301532 }
Bharat saraswalc0e04842016-05-12 13:16:57 +05301533 if ((fileType & BUILDER_CLASS_MASK) != 0 || (fileType & IMPL_CLASS_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301534 if (isAttributePresent()) {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301535 addImportsToStringAndHasCodeMethods(imports, true);
Bharat saraswalb551aae2016-07-14 15:18:20 +05301536 }
1537 if (curNode instanceof YangAugmentableNode) {
Bharat saraswald50c6382016-07-14 21:57:13 +05301538 addImportsForAugmentableClass(imports, true);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301539 }
Bharat saraswalc0e04842016-05-12 13:16:57 +05301540 sortImports(imports);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301541 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301542 * Create impl class file.
1543 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301544 setImplClassJavaFileHandle(getJavaFileHandle(getImplClassName()));
1545 setImplClassJavaFileHandle(
1546 generateImplClassFile(getImplClassJavaFileHandle(), curNode, isAttributePresent(), imports));
1547
1548 /*
1549 * Create builder class file.
1550 */
1551 if ((fileType & BUILDER_CLASS_MASK) != 0) {
1552 setBuilderClassJavaFileHandle(getJavaFileHandle(getJavaClassName(BUILDER_CLASS_FILE_NAME_SUFFIX)));
1553 setBuilderClassJavaFileHandle(
1554 generateBuilderClassFile(getBuilderClassJavaFileHandle(), curNode,
1555 isAttributePresent()));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301556 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301557 * Append impl class to builder class and close it.
1558 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301559 mergeJavaFiles(getBuilderClassJavaFileHandle(), getImplClassJavaFileHandle());
1560 validateLineLength(getImplClassJavaFileHandle());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301561 }
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301562 insertDataIntoJavaFile(getImplClassJavaFileHandle(), getJavaClassDefClose());
Bharat saraswald50c6382016-07-14 21:57:13 +05301563 if (curNode instanceof YangAugmentableNode) {
1564 addImportsForAugmentableClass(imports, false);
1565 }
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301566 if (!(curNode instanceof YangModule)) {
1567 if (isAttributePresent()) {
1568 addImportsToStringAndHasCodeMethods(imports, false);
1569 }
Bharat saraswald50c6382016-07-14 21:57:13 +05301570 if (curNode instanceof YangAugmentableNode) {
1571 addYangAugmentedOpParamInfoImport(imports);
1572 }
1573 JavaQualifiedTypeInfo qualifiedTypeInfo = new JavaQualifiedTypeInfo();
1574 qualifiedTypeInfo.setClassInfo(getCapitalCase(DEFAULT) + getCapitalCase(getJavaFileInfo()
1575 .getJavaName()));
1576 qualifiedTypeInfo.setPkgInfo(getJavaFileInfo().getPackage());
1577 getJavaExtendsListHolder().addToExtendsList(qualifiedTypeInfo, curNode,
1578 tempJavaBeanFragmentFiles);
Bharat saraswale707f032016-07-14 23:33:55 +05301579 addBitSetImport(imports, true);
Bharat saraswald50c6382016-07-14 21:57:13 +05301580 if (curNode instanceof YangAugment) {
1581 addYangAugmentedOpParamInfoImport(imports);
1582 }
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301583 /*
1584 * Create impl class file.
1585 */
1586 setOpParamClassJavaFileHandle(getJavaFileHandle(getOpParamImplClassName()));
1587 setOpParamClassJavaFileHandle(
1588 generateOpParamImplClassFile(getOpParamClassJavaFileHandle(), curNode,
Bharat saraswald50c6382016-07-14 21:57:13 +05301589 isAttributePresent(), imports));
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301590
1591 /*
1592 * Create builder class file.
1593 */
1594 if ((fileType & BUILDER_CLASS_MASK) != 0) {
1595 setBuilderOpParmClassJavaFileHandle(getJavaFileHandle(getOpParamBuilderImplClassName()));
1596 setBuilderOpParmClassJavaFileHandle(
1597 generateOpParamBuilderClassFile(getBuilderOpParmClassJavaFileHandle(), curNode,
Bharat saraswald50c6382016-07-14 21:57:13 +05301598 isAttributePresent()));
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301599 /*
1600 * Append impl class to builder class and close it.
1601 */
1602 mergeJavaFiles(getBuilderOpParmClassJavaFileHandle(), getOpParamClassJavaFileHandle());
1603 validateLineLength(getOpParamClassJavaFileHandle());
1604
Bharat saraswale707f032016-07-14 23:33:55 +05301605 addBitSetImport(imports, false);
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301606 }
1607 insertDataIntoJavaFile(getOpParamClassJavaFileHandle(), getJavaClassDefClose());
Bharat saraswald50c6382016-07-14 21:57:13 +05301608
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301609 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301610 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301611 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301612 * Close all the file handles.
1613 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301614 freeTemporaryResources(false);
1615 }
1616
Bharat saraswald50c6382016-07-14 21:57:13 +05301617 /*Adds import for YANG augmented op param info.*/
1618 private void addYangAugmentedOpParamInfoImport(List<String> imports) {
1619 imports.add(getJavaImportData().getYangAugmentedOpParamInfoImport());
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301620 }
1621
1622 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301623 * Adds imports for ToString and HashCodeMethod.
1624 *
Bharat saraswald50c6382016-07-14 21:57:13 +05301625 * @param imports import list
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301626 * @param operation add or remove
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301627 */
Bharat saraswale707f032016-07-14 23:33:55 +05301628 void addImportsToStringAndHasCodeMethods(List<String> imports, boolean operation) {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301629 if (operation) {
1630 imports.add(getJavaImportData().getImportForHashAndEquals());
1631 imports.add(getJavaImportData().getImportForToString());
1632 } else {
1633 imports.remove(getJavaImportData().getImportForHashAndEquals());
1634 imports.remove(getJavaImportData().getImportForToString());
1635 }
1636 }
1637
1638 /**
Bharat saraswale707f032016-07-14 23:33:55 +05301639 * Adds imports for bitSet method.
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301640 *
Bharat saraswald50c6382016-07-14 21:57:13 +05301641 * @param imports import list
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301642 * @param operation add or remove
1643 */
Bharat saraswale707f032016-07-14 23:33:55 +05301644 private void addBitSetImport(List<String> imports, boolean operation) {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301645 if (operation) {
1646 imports.add(getJavaImportData().getImportForToBitSet());
1647 } else {
1648 imports.remove(getJavaImportData().getImportForToBitSet());
1649 }
Bharat saraswalb551aae2016-07-14 15:18:20 +05301650 }
1651
1652
1653 /**
1654 * Adds import for map and hash map.
1655 *
Bharat saraswald50c6382016-07-14 21:57:13 +05301656 * @param imports import list
1657 * @param operations true for adding and false for deletion
Bharat saraswalb551aae2016-07-14 15:18:20 +05301658 */
Bharat saraswale707f032016-07-14 23:33:55 +05301659 private void addImportsForAugmentableClass(List<String> imports, boolean operations) {
Bharat saraswald50c6382016-07-14 21:57:13 +05301660 if (operations) {
1661 imports.add(getJavaImportData().getHashMapImport());
1662 imports.add(getJavaImportData().getMapImport());
1663 imports.add(getJavaImportData().getYangAugmentedInfoImport());
1664 } else {
1665 imports.remove(getJavaImportData().getHashMapImport());
1666 imports.remove(getJavaImportData().getMapImport());
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301667 }
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301668 }
1669
1670 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301671 * Removes case import info from import list.
1672 *
1673 * @param imports list of imports
1674 * @return import for class
1675 */
1676 private List<String> removeCaseImport(List<String> imports) {
1677 if (imports != null && caseImportInfo != null) {
1678 String caseImport = IMPORT + caseImportInfo.getPkgInfo() + PERIOD + caseImportInfo.getClassInfo() +
1679 SEMI_COLAN + NEW_LINE;
1680 imports.remove(caseImport);
1681 }
1682 return imports;
1683 }
1684
1685 /**
Bharat saraswald50c6382016-07-14 21:57:13 +05301686 * Removes case import info from import list.
1687 *
1688 * @param imports list of imports
Bharat saraswald50c6382016-07-14 21:57:13 +05301689 */
1690 private void removeAugmentedInfoImport(List<String> imports) {
1691 imports.remove(getJavaImportData().getYangAugmentedInfoImport());
Vidyashree Rama36f2fab2016-07-15 14:06:56 +05301692 for (JavaQualifiedTypeInfo type : getJavaImportData().getImportSet()) {
1693 if (type.getClassInfo().equals(YANG_AUGMENTED_INFO)) {
1694 getJavaImportData().getImportSet().remove(type);
1695 getJavaExtendsListHolder().getExtendsList().remove(type);
1696 }
1697 }
Bharat saraswald50c6382016-07-14 21:57:13 +05301698 }
1699
1700 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301701 * Removes all temporary file handles.
1702 *
Bharat saraswale707f032016-07-14 23:33:55 +05301703 * @param isErrorOccurred flag to tell translator that error has occurred while file generation
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301704 * @throws IOException when failed to delete the temporary files
1705 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301706 public void freeTemporaryResources(boolean isErrorOccurred)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301707 throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301708 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301709 * Close all java file handles and when error occurs delete the files.
1710 */
1711 if ((getGeneratedJavaFiles() & INTERFACE_MASK) != 0) {
Bharat saraswale707f032016-07-14 23:33:55 +05301712 closeFile(getInterfaceJavaFileHandle(), isErrorOccurred);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301713 }
1714 if ((getGeneratedJavaFiles() & BUILDER_CLASS_MASK) != 0) {
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301715 closeFile(getBuilderClassJavaFileHandle(), true);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301716 }
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301717 if ((getGeneratedJavaFiles() & OPERATION_BUILDER_CLASS_MASK) != 0) {
1718 closeFile(getBuilderOpParmClassJavaFileHandle(), true);
1719 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301720 if ((getGeneratedJavaFiles() & BUILDER_INTERFACE_MASK) != 0) {
1721 closeFile(getBuilderInterfaceJavaFileHandle(), true);
1722 }
1723 if ((getGeneratedJavaFiles() & IMPL_CLASS_MASK) != 0) {
Bharat saraswale707f032016-07-14 23:33:55 +05301724 closeFile(getImplClassJavaFileHandle(), isErrorOccurred);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301725 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301726
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301727 /*
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301728 * Close all temporary file handles and delete the files.
1729 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301730 if ((getGeneratedTempFiles() & GETTER_FOR_CLASS_MASK) != 0) {
1731 closeFile(getGetterImplTempFileHandle(), true);
1732 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301733 if ((getGeneratedTempFiles() & ATTRIBUTES_MASK) != 0) {
1734 closeFile(getAttributesTempFileHandle(), true);
1735 }
1736 if ((getGeneratedTempFiles() & HASH_CODE_IMPL_MASK) != 0) {
1737 closeFile(getHashCodeImplTempFileHandle(), true);
1738 }
1739 if ((getGeneratedTempFiles() & TO_STRING_IMPL_MASK) != 0) {
1740 closeFile(getToStringImplTempFileHandle(), true);
1741 }
1742 if ((getGeneratedTempFiles() & EQUALS_IMPL_MASK) != 0) {
1743 closeFile(getEqualsImplTempFileHandle(), true);
1744 }
Bharat saraswalc0e04842016-05-12 13:16:57 +05301745 if ((getGeneratedTempFiles() & FROM_STRING_IMPL_MASK) != 0) {
1746 closeFile(getFromStringImplTempFileHandle(), true);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301747 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301748 }
1749
1750 /**
Bharat saraswalb551aae2016-07-14 15:18:20 +05301751 * Returns if the attribute needs to be accessed in a qualified manner or not, if it needs to be imported, then the
1752 * same needs to be done.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301753 *
1754 * @param importInfo import info for the current attribute being added
1755 * @return status of the qualified access to the attribute
1756 */
Bharat saraswale707f032016-07-14 23:33:55 +05301757 boolean getIsQualifiedAccessOrAddToImportList(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301758 JavaQualifiedTypeInfo importInfo) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +05301759
1760 return getJavaImportData().addImportInfo(importInfo, getGeneratedJavaClassName(),
1761 getJavaFileInfo().getPackage());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301762 }
1763
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301764 /**
1765 * Returns java file handle for op param class file.
1766 *
1767 * @return java file handle for op param class file
1768 */
Bharat saraswale707f032016-07-14 23:33:55 +05301769 private File getOpParamClassJavaFileHandle() {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301770 return opParamClassJavaFileHandle;
1771 }
1772
1773 /**
1774 * Sets the java file handle for op param class file.
1775 *
Bharat saraswald50c6382016-07-14 21:57:13 +05301776 * @param opParamClassJavaFileHandle java file handle
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301777 */
Bharat saraswale707f032016-07-14 23:33:55 +05301778 private void setOpParamClassJavaFileHandle(File opParamClassJavaFileHandle) {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +05301779 this.opParamClassJavaFileHandle = opParamClassJavaFileHandle;
1780 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301781}