blob: 2a2d97afeda6efe2e037b92ad28428c1ef40eb84 [file] [log] [blame]
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301/*
Brian O'Connor0f7908b2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava.utils;
18
19import java.io.File;
20import java.io.IOException;
Bharat saraswal022dae92016-03-04 20:08:09 +053021import java.util.ArrayList;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +053022import java.util.List;
Bharat saraswale304c252016-08-16 20:56:20 +053023
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053024import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Bharat saraswale50edca2016-08-05 01:58:25 +053025import org.onosproject.yangutils.datamodel.YangCase;
Bharat saraswal8beac342016-08-04 02:00:03 +053026import org.onosproject.yangutils.datamodel.YangChoice;
Shankara-Huaweib7564772016-08-02 18:13:13 +053027import org.onosproject.yangutils.datamodel.YangDerivedInfo;
Shankara-Huaweia1039e52016-07-14 16:53:09 +053028import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Bharat saraswal039f59c2016-07-14 21:57:13 +053029import org.onosproject.yangutils.datamodel.YangModule;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053030import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +053031import org.onosproject.yangutils.datamodel.YangSubModule;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053032import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswal039f59c2016-07-14 21:57:13 +053033import org.onosproject.yangutils.datamodel.YangTypeDef;
Bharat saraswale50edca2016-08-05 01:58:25 +053034import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053035import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswalaf413b82016-07-14 15:18:20 +053036import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswald14cbe82016-07-14 13:26:18 +053037import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053038import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053039import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053040import org.onosproject.yangutils.translator.tojava
41 .JavaQualifiedTypeInfoTranslator;
42import org.onosproject.yangutils.translator.tojava
43 .TempJavaCodeFragmentFilesContainer;
44import org.onosproject.yangutils.translator.tojava
45 .TempJavaEnumerationFragmentFiles;
Bharat saraswal039f59c2016-07-14 21:57:13 +053046import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053047import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +053048import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053049import org.onosproject.yangutils.utils.io.YangPluginConfig;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053050
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053051import static org.onosproject.yangutils.datamodel.utils.builtindatatype
52 .YangDataTypes.BINARY;
53import static org.onosproject.yangutils.datamodel.utils.builtindatatype
54 .YangDataTypes.BITS;
55import static org.onosproject.yangutils.translator.tojava
56 .GeneratedJavaFileType.BUILDER_CLASS_MASK;
57import static org.onosproject.yangutils.translator.tojava
58 .GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
59import static org.onosproject.yangutils.translator.tojava
60 .GeneratedJavaFileType.DEFAULT_CLASS_MASK;
61import static org.onosproject.yangutils.translator.tojava
62 .GeneratedJavaFileType.GENERATE_ENUM_CLASS;
63import static org.onosproject.yangutils.translator.tojava
64 .GeneratedJavaFileType.GENERATE_EVENT_CLASS;
65import static org.onosproject.yangutils.translator.tojava
66 .GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
67import static org.onosproject.yangutils.translator.tojava
68 .GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
69import static org.onosproject.yangutils.translator.tojava
70 .GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
71import static org.onosproject.yangutils.translator.tojava
72 .GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
73import static org.onosproject.yangutils.translator.tojava
74 .GeneratedJavaFileType.GENERATE_UNION_CLASS;
75import static org.onosproject.yangutils.translator.tojava
76 .GeneratedJavaFileType.INTERFACE_MASK;
77import static org.onosproject.yangutils.translator.tojava
78 .GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
79import static org.onosproject.yangutils.translator.tojava
80 .GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
81import static org.onosproject.yangutils.translator.tojava
82 .GeneratedTempFileType.ATTRIBUTES_MASK;
83import static org.onosproject.yangutils.translator.tojava
84 .GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
85import static org.onosproject.yangutils.translator.tojava
86 .GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
87import static org.onosproject.yangutils.translator.tojava
88 .GeneratedTempFileType.ENUM_IMPL_MASK;
89import static org.onosproject.yangutils.translator.tojava
90 .GeneratedTempFileType.EQUALS_IMPL_MASK;
91import static org.onosproject.yangutils.translator.tojava
92 .GeneratedTempFileType.EVENT_ENUM_MASK;
93import static org.onosproject.yangutils.translator.tojava
94 .GeneratedTempFileType.EVENT_METHOD_MASK;
95import static org.onosproject.yangutils.translator.tojava
96 .GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
97import static org.onosproject.yangutils.translator.tojava
98 .GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
99import static org.onosproject.yangutils.translator.tojava
100 .GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
101import static org.onosproject.yangutils.translator.tojava
102 .GeneratedTempFileType.FROM_STRING_IMPL_MASK;
103import static org.onosproject.yangutils.translator.tojava
104 .GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
105import static org.onosproject.yangutils.translator.tojava
106 .GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
107import static org.onosproject.yangutils.translator.tojava
108 .GeneratedTempFileType.HASH_CODE_IMPL_MASK;
109import static org.onosproject.yangutils.translator.tojava
110 .GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
111import static org.onosproject.yangutils.translator.tojava
112 .GeneratedTempFileType.OF_STRING_IMPL_MASK;
113import static org.onosproject.yangutils.translator.tojava
114 .GeneratedTempFileType.RPC_INTERFACE_MASK;
115import static org.onosproject.yangutils.translator.tojava
116 .GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
117import static org.onosproject.yangutils.translator.tojava
118 .GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
119import static org.onosproject.yangutils.translator.tojava
120 .GeneratedTempFileType.TO_STRING_IMPL_MASK;
121import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo
122 .getAttributeInfoForTheData;
123import static org.onosproject.yangutils.translator.tojava
124 .JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
125import static org.onosproject.yangutils.translator.tojava
126 .TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
127import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils
128 .getQualifierInfoForCasesParent;
Bharat saraswal1edde622016-09-06 10:18:04 +0530129import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils
130 .isGetSetOfRootNodeRequired;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530131import static org.onosproject.yangutils.translator.tojava.utils
132 .JavaCodeSnippetGen.addAugmentationAttribute;
133import static org.onosproject.yangutils.translator.tojava.utils
134 .JavaCodeSnippetGen.getEnumsValueAttribute;
135import static org.onosproject.yangutils.translator.tojava.utils
136 .JavaCodeSnippetGen.getEventEnumTypeStart;
137import static org.onosproject.yangutils.translator.tojava.utils
138 .JavaCodeSnippetGen.getOperationAttributeForConstructor;
139import static org.onosproject.yangutils.translator.tojava.utils
140 .JavaCodeSnippetGen.getOperationAttributes;
141import static org.onosproject.yangutils.translator.tojava.utils
142 .JavaCodeSnippetGen.getOperationTypeAttr;
143import static org.onosproject.yangutils.translator.tojava.utils
144 .JavaCodeSnippetGen.getOperationTypeEnum;
145import static org.onosproject.yangutils.translator.tojava.utils
146 .JavaCodeSnippetGen.getOperationTypeForConstructor;
147import static org.onosproject.yangutils.translator.tojava.utils
148 .JavaFileGeneratorUtils.getDataFromTempFileHandle;
149import static org.onosproject.yangutils.translator.tojava.utils
150 .JavaFileGeneratorUtils.initiateJavaFileGeneration;
151import static org.onosproject.yangutils.translator.tojava.utils
152 .MethodsGenerator.builderMethod;
153import static org.onosproject.yangutils.translator.tojava.utils
154 .MethodsGenerator.getAddAugmentInfoMethodImpl;
155import static org.onosproject.yangutils.translator.tojava.utils
156 .MethodsGenerator.getAddAugmentInfoMethodInterface;
157import static org.onosproject.yangutils.translator.tojava.utils
158 .MethodsGenerator.getAugmentsDataMethodForService;
159import static org.onosproject.yangutils.translator.tojava.utils
160 .MethodsGenerator.getConstructorStart;
161import static org.onosproject.yangutils.translator.tojava.utils
162 .MethodsGenerator.getEnumsConstructor;
163import static org.onosproject.yangutils.translator.tojava.utils
164 .MethodsGenerator.getEnumsOfMethod;
165import static org.onosproject.yangutils.translator.tojava.utils
166 .MethodsGenerator.getEqualsMethodClose;
167import static org.onosproject.yangutils.translator.tojava.utils
168 .MethodsGenerator.getEqualsMethodOpen;
169import static org.onosproject.yangutils.translator.tojava.utils
170 .MethodsGenerator.getFromStringMethodClose;
171import static org.onosproject.yangutils.translator.tojava.utils
172 .MethodsGenerator.getFromStringMethodSignature;
173import static org.onosproject.yangutils.translator.tojava.utils
174 .MethodsGenerator.getGetter;
175import static org.onosproject.yangutils.translator.tojava.utils
176 .MethodsGenerator.getGetterForOperationType;
177import static org.onosproject.yangutils.translator.tojava.utils
Bharat saraswal1edde622016-09-06 10:18:04 +0530178 .MethodsGenerator.getGetterString;
179import static org.onosproject.yangutils.translator.tojava.utils
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530180 .MethodsGenerator.getGettersForValueAndSelectLeaf;
181import static org.onosproject.yangutils.translator.tojava.utils
182 .MethodsGenerator.getHashCodeMethodClose;
183import static org.onosproject.yangutils.translator.tojava.utils
184 .MethodsGenerator.getHashCodeMethodOpen;
185import static org.onosproject.yangutils.translator.tojava.utils
186 .MethodsGenerator.getInterfaceLeafIdEnumMethods;
187import static org.onosproject.yangutils.translator.tojava.utils
188 .MethodsGenerator.getInterfaceLeafIdEnumSignature;
189import static org.onosproject.yangutils.translator.tojava.utils
190 .MethodsGenerator.getOmitNullValueString;
191import static org.onosproject.yangutils.translator.tojava.utils
192 .MethodsGenerator.getOperationAttributesGetters;
193import static org.onosproject.yangutils.translator.tojava.utils
194 .MethodsGenerator.getOverRideString;
195import static org.onosproject.yangutils.translator.tojava.utils
196 .MethodsGenerator.getRangeValidatorMethodForUnion;
197import static org.onosproject.yangutils.translator.tojava.utils
198 .MethodsGenerator.getSetterForOperationType;
199import static org.onosproject.yangutils.translator.tojava.utils
200 .MethodsGenerator.getSetterForSelectLeaf;
201import static org.onosproject.yangutils.translator.tojava.utils
Bharat saraswal1edde622016-09-06 10:18:04 +0530202 .MethodsGenerator.getSetterString;
203import static org.onosproject.yangutils.translator.tojava.utils
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530204 .MethodsGenerator.getToStringMethodClose;
205import static org.onosproject.yangutils.translator.tojava.utils
206 .MethodsGenerator.getToStringMethodOpen;
207import static org.onosproject.yangutils.translator.tojava.utils
208 .MethodsGenerator.getYangAugmentInfoImpl;
209import static org.onosproject.yangutils.translator.tojava.utils
210 .MethodsGenerator.getYangAugmentInfoInterface;
211import static org.onosproject.yangutils.translator.tojava.utils
212 .MethodsGenerator.getYangAugmentInfoMapImpl;
213import static org.onosproject.yangutils.translator.tojava.utils
214 .MethodsGenerator.getYangAugmentInfoMapInterface;
215import static org.onosproject.yangutils.translator.tojava.utils
216 .MethodsGenerator.isLeafValueSetInterface;
217import static org.onosproject.yangutils.translator.tojava.utils
218 .MethodsGenerator.isSelectLeafSetInterface;
219import static org.onosproject.yangutils.translator.tojava.utils
220 .MethodsGenerator.processSubtreeFilteringInterface;
221import static org.onosproject.yangutils.translator.tojava.utils
222 .MethodsGenerator.setSelectLeafSetInterface;
223import static org.onosproject.yangutils.translator.tojava.utils
224 .SubtreeFilteringMethodsGenerator.getAugmentableSubTreeFiltering;
225import static org.onosproject.yangutils.translator.tojava.utils
226 .SubtreeFilteringMethodsGenerator.getProcessChildNodeSubtreeFiltering;
227import static org.onosproject.yangutils.translator.tojava.utils
228 .SubtreeFilteringMethodsGenerator.getProcessLeafListSubtreeFiltering;
229import static org.onosproject.yangutils.translator.tojava.utils
230 .SubtreeFilteringMethodsGenerator.getProcessLeafSubtreeFiltering;
231import static org.onosproject.yangutils.translator.tojava.utils
232 .SubtreeFilteringMethodsGenerator.getProcessSubTreeFilteringEnd;
233import static org.onosproject.yangutils.translator.tojava.utils
234 .SubtreeFilteringMethodsGenerator.getProcessSubtreeFilteringStart;
235import static org.onosproject.yangutils.translator.tojava.utils
236 .SubtreeFilteringMethodsGenerator.getProcessSubtreeFunctionBody;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530237import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530238import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530239import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
240import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530241import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530242import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530243import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530244import static org.onosproject.yangutils.utils.UtilConstants
245 .EIGHT_SPACE_INDENTATION;
Bharat saraswal84366c52016-03-23 19:40:35 +0530246import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530247import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530248import static org.onosproject.yangutils.utils.UtilConstants
249 .EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530250import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530251import static org.onosproject.yangutils.utils.UtilConstants
252 .EVENT_SUBJECT_NAME_SUFFIX;
253import static org.onosproject.yangutils.utils.UtilConstants
254 .FOUR_SPACE_INDENTATION;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530255import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530256import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530257import static org.onosproject.yangutils.utils.UtilConstants.INT;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530258import static org.onosproject.yangutils.utils.UtilConstants
259 .JAVA_UTIL_IMPORT_BASE64_CLASS;
260import static org.onosproject.yangutils.utils.UtilConstants
261 .JAVA_UTIL_OBJECTS_IMPORT_PKG;
Bharat saraswal84366c52016-03-23 19:40:35 +0530262import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530263import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530264import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530265import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530266import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
267import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530268import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530269import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530270import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530271import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530272import static org.onosproject.yangutils.utils.UtilConstants
273 .SERVICE_METHOD_STRING;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530274import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530275import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
276import static org.onosproject.yangutils.utils.UtilConstants.TO;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530277import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType
278 .GETTER_METHOD;
279import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType
280 .TYPE_CONSTRUCTOR;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530281import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530282import static org.onosproject.yangutils.utils.io.impl.YangIoUtils
283 .getCapitalCase;
284import static org.onosproject.yangutils.utils.io.impl.YangIoUtils
285 .insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530286import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530287import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530288import static org.onosproject.yangutils.utils.io.impl.YangIoUtils
289 .validateLineLength;
Bharat saraswale3175d32016-08-31 17:50:11 +0530290import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen
291 .getYangAugmentedMapObjectForConstruct;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530292import static java.util.Collections.sort;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530293
Vinod Kumar S08710982016-03-03 19:55:30 +0530294/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530295 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530296 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530297public final class JavaFileGenerator {
298
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530299 private JavaFileGenerator() {
300 }
301
302 /**
303 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530304 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530305 * @param file file
306 * @param imports imports for the file
307 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530308 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530309 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530310 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530311 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530312 public static File generateInterfaceFile(File file, List<String> imports,
313 YangNode curNode,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530314 boolean isAttrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530315 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530316
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530317 JavaFileInfoTranslator javaFileInfo =
318 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530319
320 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530321 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530322 path = javaFileInfo.getPluginConfig().getCodeGenDir() +
323 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530324 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530325 path = javaFileInfo.getBaseCodeGenPath() +
326 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530327 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530328
janani b703cfe42016-05-17 13:12:22 +0530329 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530330
Bharat saraswal8beac342016-08-04 02:00:03 +0530331 boolean isLeavesPresent;
332 YangLeavesHolder leavesHolder;
333 if (curNode instanceof YangLeavesHolder) {
334 leavesHolder = (YangLeavesHolder) curNode;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530335 isLeavesPresent = leavesHolder.getListOfLeaf() != null &&
336 !leavesHolder.getListOfLeaf().isEmpty()
337 || leavesHolder.getListOfLeafList() != null &&
338 !leavesHolder.getListOfLeafList().isEmpty();
Bharat saraswal8beac342016-08-04 02:00:03 +0530339 } else {
340 isLeavesPresent = false;
341 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530342
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530343 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode,
344 className);
Bharat saraswal8beac342016-08-04 02:00:03 +0530345 List<String> methods = new ArrayList<>();
Bharat saraswald532a4c2016-03-25 18:19:46 +0530346 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530347 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530348 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530349 //Leaf identifier enum.
350 if (isLeavesPresent) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530351 insertDataIntoJavaFile(file, NEW_LINE +
352 getInterfaceLeafIdEnumSignature(className) +
353 NEW_LINE +
354 trimAtLast(replaceLast(getDataFromTempFileHandle(
355 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
356 ((TempJavaCodeFragmentFilesContainer)
357 curNode)
358 .getTempJavaCodeFragmentFiles()
359 .getBeanTempFiles(), path),
360 COMMA, SEMI_COLAN),
361 NEW_LINE) +
362 NEW_LINE + NEW_LINE +
363 getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530364 }
365
Bharat saraswal64e7e232016-07-14 23:33:55 +0530366 //Getter methods.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530367 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
368 GETTER_FOR_INTERFACE_MASK,
369 ((TempJavaCodeFragmentFilesContainer) curNode)
370 .getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530371 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530372 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530373 throw new IOException(
374 "No data found in temporary java code fragment files " +
375 "for " +
376 className
377 + " while interface file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530378 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530379 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530380
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530381 if (curNode instanceof YangAugmentableNode &&
382 !(curNode instanceof YangChoice)) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530383 methods.add(getYangAugmentInfoInterface());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530384 methods.add(getYangAugmentInfoMapInterface(
385 javaFileInfo.getPluginConfig()));
Bharat saraswal8beac342016-08-04 02:00:03 +0530386 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530387
Bharat saraswale50edca2016-08-05 01:58:25 +0530388 if (curNode instanceof YangCase) {
389 YangNode caseParent = curNode.getParent();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530390 JavaQualifiedTypeInfo qualifiedTypeInfo =
391 getQualifierInfoForCasesParent(caseParent,
392 javaFileInfo
393 .getPluginConfig());
394 methods.add(NEW_LINE + processSubtreeFilteringInterface
395 (qualifiedTypeInfo.getClassInfo()));
Bharat saraswale50edca2016-08-05 01:58:25 +0530396 } else {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530397 methods.add(NEW_LINE + processSubtreeFilteringInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530398 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530399
400 if (isLeavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530401 methods.add(NEW_LINE + isLeafValueSetInterface());
402 methods.add(NEW_LINE + isSelectLeafSetInterface());
403 }
404 for (String method : methods) {
405 insertDataIntoJavaFile(file, method);
406 }
Bharat saraswale304c252016-08-16 20:56:20 +0530407 return file;
Bharat saraswal8beac342016-08-04 02:00:03 +0530408
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530409 }
410
411 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530412 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530413 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530414 * @param file file
415 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530416 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530417 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530418 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530419 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530420 public static File generateBuilderInterfaceFile(File file, YangNode curNode,
421 boolean isAttrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530422 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530423
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530424 JavaFileInfoTranslator javaFileInfo =
425 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530426 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530427
Bharat saraswal8beac342016-08-04 02:00:03 +0530428 boolean isLeavesPresent;
429 YangLeavesHolder leavesHolder;
430 if (curNode instanceof YangLeavesHolder) {
431 leavesHolder = (YangLeavesHolder) curNode;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530432 isLeavesPresent = leavesHolder.getListOfLeaf() != null &&
433 !leavesHolder.getListOfLeaf().isEmpty()
434 || leavesHolder.getListOfLeafList() != null &&
435 !leavesHolder.getListOfLeafList().isEmpty();
Bharat saraswal8beac342016-08-04 02:00:03 +0530436 } else {
437 isLeavesPresent = false;
438 }
439
janani b703cfe42016-05-17 13:12:22 +0530440 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530441 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530442 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530443 path = javaFileInfo.getPluginConfig().getCodeGenDir() +
444 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530445 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530446 path = javaFileInfo.getBaseCodeGenPath() +
447 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530448 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530449
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530450 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode,
451 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530452 List<String> methods = new ArrayList<>();
Bharat saraswald532a4c2016-03-25 18:19:46 +0530453 if (isAttrPresent) {
454 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530455
456 //Getter methods.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530457 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(
458 GETTER_FOR_INTERFACE_MASK,
459 ((TempJavaCodeFragmentFilesContainer)
460 curNode)
461 .getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530462 .getBeanTempFiles(), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530463
464 //Setter methods.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530465 methods.add(NEW_LINE);
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530466 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(
467 SETTER_FOR_INTERFACE_MASK,
468 ((TempJavaCodeFragmentFilesContainer)
469 curNode)
470 .getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530471 .getBeanTempFiles(), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530472
473 //Add to list method.
474 methods.add(NEW_LINE);
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530475 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
476 ADD_TO_LIST_INTERFACE_MASK,
477 ((TempJavaCodeFragmentFilesContainer) curNode)
478 .getTempJavaCodeFragmentFiles()
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530479 .getBeanTempFiles(), path));
480
Bharat saraswald532a4c2016-03-25 18:19:46 +0530481 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530482 throw new IOException(
483 "No data found in temporary java code fragment files " +
484 "for " +
485 className
486 + " while builder interface file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530487 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530488 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530489
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530490 if (curNode instanceof YangAugmentableNode &&
491 !(curNode instanceof YangChoice)) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530492 methods.add(getAddAugmentInfoMethodInterface());
493 methods.add(getYangAugmentInfoInterface());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530494 methods.add(getYangAugmentInfoMapInterface(
495 javaFileInfo.getPluginConfig()));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530496 }
497
Bharat saraswal8beac342016-08-04 02:00:03 +0530498 if (isLeavesPresent) {
499 methods.add(NEW_LINE + setSelectLeafSetInterface(className));
500 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530501 //Add build method to builder interface file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530502 methods.add(
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530503 ((TempJavaCodeFragmentFilesContainer) curNode)
504 .getTempJavaCodeFragmentFiles()
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530505 .addBuildMethodForInterface(pluginConfig));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530506
Bharat saraswal64e7e232016-07-14 23:33:55 +0530507
508 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530509 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530510 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530511 }
512
Bharat saraswal84366c52016-03-23 19:40:35 +0530513 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale304c252016-08-16 20:56:20 +0530514 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530515 }
516
517 /**
518 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530519 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530520 * @param file file
521 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530522 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530523 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530524 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530525 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530526
Bharat saraswald14cbe82016-07-14 13:26:18 +0530527 public static File generateBuilderClassFile(File file, YangNode curNode,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530528 boolean isAttrPresent)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530529 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530530
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530531 JavaFileInfoTranslator javaFileInfo =
532 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530533 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530534
Bharat saraswal8beac342016-08-04 02:00:03 +0530535 boolean isLeavesPresent;
536 YangLeavesHolder leavesHolder;
537 if (curNode instanceof YangLeavesHolder) {
538 leavesHolder = (YangLeavesHolder) curNode;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530539 isLeavesPresent = leavesHolder.getListOfLeaf() != null &&
540 !leavesHolder.getListOfLeaf().isEmpty()
541 || leavesHolder.getListOfLeafList() != null &&
542 !leavesHolder.getListOfLeafList().isEmpty();
Bharat saraswal8beac342016-08-04 02:00:03 +0530543 } else {
544 isLeavesPresent = false;
545 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530546
Bharat saraswal8beac342016-08-04 02:00:03 +0530547 String className = getCapitalCase(javaFileInfo.getJavaName());
548 boolean isRootNode = false;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530549 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530550 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530551 isRootNode = true;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530552 path = javaFileInfo.getPluginConfig().getCodeGenDir() +
553 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530554 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530555 path = javaFileInfo.getBaseCodeGenPath() +
556 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530557 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530558
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530559 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode,
560 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530561 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530562
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530563 if (curNode instanceof YangAugmentableNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530564 insertDataIntoJavaFile(file, addAugmentationAttribute());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530565 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530566 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530567
568 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530569 try {
570 insertDataIntoJavaFile(file,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530571 NEW_LINE + FOUR_SPACE_INDENTATION +
572 getDataFromTempFileHandle(
573 ATTRIBUTES_MASK,
574 ((TempJavaCodeFragmentFilesContainer) curNode)
575 .getTempJavaCodeFragmentFiles()
576 .getBeanTempFiles(),
577 path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530578 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530579 throw new IOException(
580 "No data found in temporary java code fragment files " +
581 "for " + className +
582 " while builder class file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530583 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530584
Bharat saraswal8beac342016-08-04 02:00:03 +0530585 insertDataIntoJavaFile(file, getOperationTypeAttr());
586 if (isLeavesPresent) {
587 insertDataIntoJavaFile(file, getOperationAttributes());
588 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530589 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530590 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530591 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530592 ((TempJavaCodeFragmentFilesContainer) curNode)
593 .getTempJavaCodeFragmentFiles()
594 .getBeanTempFiles(),
595 path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530596 // Setter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530597 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530598 ((TempJavaCodeFragmentFilesContainer) curNode)
599 .getTempJavaCodeFragmentFiles()
600 .getBeanTempFiles(),
601 path));
Bharat saraswald14cbe82016-07-14 13:26:18 +0530602
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530603 //Add to list impl method.
604 methods.add(getDataFromTempFileHandle(ADD_TO_LIST_IMPL_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530605 ((TempJavaCodeFragmentFilesContainer) curNode)
606 .getTempJavaCodeFragmentFiles()
607 .getBeanTempFiles(),
608 path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530609
Bharat saraswald14cbe82016-07-14 13:26:18 +0530610 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530611
612 methods.add(getGetterForOperationType());
613 methods.add(getSetterForOperationType(className));
614 //Add operation attribute methods.
615 if (isLeavesPresent) {
616 methods.add(getOperationAttributesGetters() + NEW_LINE);
617 methods.add(getSetterForSelectLeaf(className, isRootNode));
618 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530619 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530620 throw new IOException(
621 "No data found in temporary java code fragment files " +
622 "for " + className +
623 " while builder class file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530624 }
625 } else {
626 insertDataIntoJavaFile(file, NEW_LINE);
627 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530628
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530629 if (curNode instanceof YangAugmentableNode) {
630 methods.add(getAddAugmentInfoMethodImpl());
631 methods.add(getYangAugmentInfoImpl());
632 methods.add(getYangAugmentInfoMapImpl());
633 }
634
Bharat saraswal64e7e232016-07-14 23:33:55 +0530635 // Add default constructor and build method impl.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530636 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
637 .getTempJavaCodeFragmentFiles()
638 .addBuildMethodImpl(curNode));
639 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
640 .getTempJavaCodeFragmentFiles()
641 .addDefaultConstructor(PUBLIC, BUILDER,
642 pluginConfig, curNode));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530643
Bharat saraswal64e7e232016-07-14 23:33:55 +0530644
645 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530646 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530647 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530648 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530649
Bharat saraswald14cbe82016-07-14 13:26:18 +0530650 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswale304c252016-08-16 20:56:20 +0530651 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530652 }
653
654 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530655 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530656 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530657 * @param file file
658 * @param curNode current YANG node
Bharat saraswald532a4c2016-03-25 18:19:46 +0530659 * @param isAttrPresent if any attribute is present or not
Bharat saraswald14cbe82016-07-14 13:26:18 +0530660 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530661 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530662 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530663 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530664 public static File generateDefaultClassFile(File file, YangNode curNode,
665 boolean isAttrPresent,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530666 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530667 throws IOException {
668
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530669 JavaFileInfoTranslator javaFileInfo =
670 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530671 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530672
Bharat saraswal8beac342016-08-04 02:00:03 +0530673 boolean isLeavesPresent;
674 YangLeavesHolder leavesHolder;
675 if (curNode instanceof YangLeavesHolder) {
676 leavesHolder = (YangLeavesHolder) curNode;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530677 isLeavesPresent = leavesHolder.getListOfLeaf() != null &&
678 !leavesHolder.getListOfLeaf().isEmpty() ||
679 leavesHolder.getListOfLeafList() != null &&
680 !leavesHolder.getListOfLeafList().isEmpty();
Bharat saraswal8beac342016-08-04 02:00:03 +0530681 } else {
682 isLeavesPresent = false;
683 }
684
685 boolean isRootNode = false;
686
janani b703cfe42016-05-17 13:12:22 +0530687 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530688 String opParamClassName = className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530689 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530690 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530691 opParamClassName = className + OP_PARAM;
692 isRootNode = true;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530693 path = javaFileInfo.getPluginConfig().getCodeGenDir() +
694 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530695 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530696 path = javaFileInfo.getBaseCodeGenPath() +
697 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530698 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530699
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530700 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode,
701 className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530702
Bharat saraswal022dae92016-03-04 20:08:09 +0530703 List<String> methods = new ArrayList<>();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530704 if (curNode instanceof YangAugmentableNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530705 insertDataIntoJavaFile(file, addAugmentationAttribute());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530706 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530707 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530708
709 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530710 try {
711 insertDataIntoJavaFile(file,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530712 NEW_LINE + FOUR_SPACE_INDENTATION +
713 getDataFromTempFileHandle(
714 ATTRIBUTES_MASK,
715 ((TempJavaCodeFragmentFilesContainer) curNode)
716 .getTempJavaCodeFragmentFiles()
717 .getBeanTempFiles(),
718 path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530719 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530720 throw new IOException(
721 "No data found in temporary java code fragment files " +
722 "for " + className +
723 " while impl class file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530724 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530725
Bharat saraswal8beac342016-08-04 02:00:03 +0530726 //Add operation attributes
727 insertDataIntoJavaFile(file, getOperationTypeEnum());
728 insertDataIntoJavaFile(file, getOperationTypeAttr());
729 if (isLeavesPresent) {
730 insertDataIntoJavaFile(file, getOperationAttributes());
731 }
732
Bharat saraswald532a4c2016-03-25 18:19:46 +0530733 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530734 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530735 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530736 ((TempJavaCodeFragmentFilesContainer) curNode)
737 .getTempJavaCodeFragmentFiles()
738 .getBeanTempFiles(),
739 path));
740
741 methods.add(getGetterForOperationType());
Bharat saraswald532a4c2016-03-25 18:19:46 +0530742
Bharat saraswal64e7e232016-07-14 23:33:55 +0530743 // Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530744 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530745 getDataFromTempFileHandle(
746 HASH_CODE_IMPL_MASK,
747 ((TempJavaCodeFragmentFilesContainer) curNode)
748 .getTempJavaCodeFragmentFiles()
749 .getBeanTempFiles(),
750 path)
751 .replace(
752 NEW_LINE,
753 EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530754
755 //Equals method.
Bharat saraswal8beac342016-08-04 02:00:03 +0530756 if (isRootNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530757 methods.add(getEqualsMethodClose(
758 getEqualsMethodOpen(opParamClassName) +
759 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
760 ((TempJavaCodeFragmentFilesContainer) curNode)
761 .getTempJavaCodeFragmentFiles()
762 .getBeanTempFiles(),
763 path)));
Bharat saraswal8beac342016-08-04 02:00:03 +0530764 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530765 methods.add(getEqualsMethodClose(getEqualsMethodOpen(
766 getCapitalCase(DEFAULT) + className) +
767 getDataFromTempFileHandle(
768 EQUALS_IMPL_MASK,
769 ((TempJavaCodeFragmentFilesContainer) curNode)
770 .getTempJavaCodeFragmentFiles()
771 .getBeanTempFiles(),
772 path)));
Bharat saraswal8beac342016-08-04 02:00:03 +0530773 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530774 // To string method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530775 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
776 TO_STRING_IMPL_MASK,
777 ((TempJavaCodeFragmentFilesContainer)
778 curNode)
779 .getTempJavaCodeFragmentFiles()
780 .getBeanTempFiles(), path) +
781 getToStringMethodClose());
Bharat saraswald532a4c2016-03-25 18:19:46 +0530782
Bharat saraswale50edca2016-08-05 01:58:25 +0530783
Bharat saraswald532a4c2016-03-25 18:19:46 +0530784 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530785 throw new IOException(
786 "No data found in temporary java code fragment files " +
787 "for " + className +
788 " while impl class file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530789 }
790 } else {
791 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530792 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530793
Bharat saraswal8beac342016-08-04 02:00:03 +0530794 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530795 methods.add(getYangAugmentInfoImpl());
796 methods.add(getYangAugmentInfoMapImpl());
797 }
798 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530799 //Constructor.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530800 String constructor =
801 getConstructorStart(className, pluginConfig, isRootNode);
802 constructor = constructor +
803 getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
804 ((TempJavaCodeFragmentFilesContainer) curNode)
805 .getTempJavaCodeFragmentFiles()
806 .getBeanTempFiles(),
807 path);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530808
Bharat saraswal8beac342016-08-04 02:00:03 +0530809 if (isAttrPresent) {
810 constructor = constructor + getOperationTypeForConstructor();
811 }
812 if (isLeavesPresent) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530813 constructor =
814 constructor + getOperationAttributeForConstructor();
Bharat saraswal8beac342016-08-04 02:00:03 +0530815 }
Bharat saraswale3175d32016-08-31 17:50:11 +0530816 if (curNode instanceof YangAugmentableNode) {
817 constructor = constructor + getYangAugmentedMapObjectForConstruct();
818 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530819 methods.add(
820 constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
821 NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +0530822
823 // add is filter content match.
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530824 String augmentableSubTreeFiltering = "";
825 if (curNode instanceof YangAugmentableNode) {
826 augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
827 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530828
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530829 methods.add(getProcessSubtreeFilteringStart(curNode, pluginConfig)
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530830 + getProcessSubtreeFunctionBody(curNode)
831 + augmentableSubTreeFiltering
832 + getProcessSubTreeFilteringEnd());
833
834 if (curNode instanceof YangLeavesHolder) {
835 if (((YangLeavesHolder) curNode).getListOfLeaf() != null
836 && !((YangLeavesHolder) curNode).getListOfLeaf()
837 .isEmpty()) {
838 methods.add(getProcessLeafSubtreeFiltering(curNode,
839 pluginConfig,
840 path));
841 }
842 }
843
844
845 if (curNode instanceof YangLeavesHolder) {
846 if (((YangLeavesHolder) curNode).getListOfLeafList() != null
847 && !((YangLeavesHolder) curNode).getListOfLeafList()
848 .isEmpty()) {
849 methods.add(getProcessLeafListSubtreeFiltering(curNode,
850 pluginConfig,
851 path));
852 }
853 }
854
855 if (curNode.getChild() != null) {
856 methods.add(getProcessChildNodeSubtreeFiltering(curNode,
857 pluginConfig,
858 path));
859 }
860
861
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530862 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530863 throw new IOException(
864 "No data found in temporary java code fragment files for " +
865 className + " while impl class file generation");
Vinod Kumar S08710982016-03-03 19:55:30 +0530866 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530867
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530868 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
869 .getTempJavaCodeFragmentFiles()
870 .addDefaultConstructor(PROTECTED, DEFAULT,
871 pluginConfig, curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530872
Bharat saraswale50edca2016-08-05 01:58:25 +0530873 methods.add(builderMethod(className) + NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530874 if (isLeavesPresent) {
875 methods.add(getOperationAttributesGetters());
876 methods.add(getGettersForValueAndSelectLeaf());
877 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530878 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530879 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530880 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530881 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530882
Bharat saraswale304c252016-08-16 20:56:20 +0530883 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530884 }
885
886 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530887 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530888 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530889 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530890 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530891 * @param imports imports for file
892 * @return type def class file
893 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530894 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530895 public static File generateTypeDefClassFile(File file, YangNode curNode,
896 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530897 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530898
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530899 JavaFileInfoTranslator javaFileInfo =
900 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530901 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530902
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530903 // import
janani b703cfe42016-05-17 13:12:22 +0530904 String className = getCapitalCase(javaFileInfo.getJavaName());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530905 String path = javaFileInfo.getBaseCodeGenPath() +
906 javaFileInfo.getPackageFilePath();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530907 YangTypeDef typeDef = (YangTypeDef) curNode;
908 List<YangType<?>> types = typeDef.getTypeList();
909 YangType type = types.get(0);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530910 YangDataTypes yangDataTypes = type.getDataType();
Bharat saraswal8beac342016-08-04 02:00:03 +0530911 if (type.getDataType().equals(BINARY)) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530912 imports.add(IMPORT + JAVA_UTIL_OBJECTS_IMPORT_PKG + PERIOD +
913 JAVA_UTIL_IMPORT_BASE64_CLASS);
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530914 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530915
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530916 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
917 imports, path, pluginConfig);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530918
Bharat saraswal84366c52016-03-23 19:40:35 +0530919 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530920
Bharat saraswal64e7e232016-07-14 23:33:55 +0530921
922 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530923 try {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530924 insertDataIntoJavaFile(file, NEW_LINE + FOUR_SPACE_INDENTATION +
925 getDataFromTempFileHandle(ATTRIBUTES_MASK,
926 ((TempJavaCodeFragmentFilesContainer) curNode)
927 .getTempJavaCodeFragmentFiles()
928 .getTypeTempFiles(),
929 path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530930 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530931 throw new IOException(
932 "No data found in temporary java code fragment files for " +
933 className + " while type def class file " +
934 "generation");
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530935 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530936
Bharat saraswal64e7e232016-07-14 23:33:55 +0530937
938 //Default constructor.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530939 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
940 .getTempJavaCodeFragmentFiles()
941 .addDefaultConstructor(PRIVATE, EMPTY_STRING,
942 pluginConfig, curNode));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530943
Bharat saraswal022dae92016-03-04 20:08:09 +0530944 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530945
Bharat saraswal64e7e232016-07-14 23:33:55 +0530946 //Type constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530947 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530948 ((TempJavaCodeFragmentFilesContainer) curNode)
949 .getTempJavaCodeFragmentFiles()
950 .getTypeTempFiles(),
951 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530952
Bharat saraswal64e7e232016-07-14 23:33:55 +0530953
954 //Of method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530955 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530956 ((TempJavaCodeFragmentFilesContainer) curNode)
957 .getTempJavaCodeFragmentFiles()
958 .getTypeTempFiles(),
959 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530960
Bharat saraswal64e7e232016-07-14 23:33:55 +0530961 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530962 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530963 ((TempJavaCodeFragmentFilesContainer) curNode)
964 .getTempJavaCodeFragmentFiles()
965 .getTypeTempFiles(),
966 path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530967
Bharat saraswal64e7e232016-07-14 23:33:55 +0530968 // Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530969 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530970 getDataFromTempFileHandle(
971 HASH_CODE_IMPL_MASK,
972 ((TempJavaCodeFragmentFilesContainer) curNode)
973 .getTempJavaCodeFragmentFiles()
974 .getTypeTempFiles(),
975 path)
976 .replace(
977 NEW_LINE,
978 EMPTY_STRING)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530979
Bharat saraswal64e7e232016-07-14 23:33:55 +0530980
981 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530982 methods.add(getEqualsMethodClose(
983 getEqualsMethodOpen(className + EMPTY_STRING)
984 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
985 ((TempJavaCodeFragmentFilesContainer) curNode)
986 .getTempJavaCodeFragmentFiles()
987 .getTypeTempFiles(),
988 path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530989
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530990
Bharat saraswal64e7e232016-07-14 23:33:55 +0530991 //To string method.
Bharat saraswal8beac342016-08-04 02:00:03 +0530992 if (type.getDataType().equals(BINARY)) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530993 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo =
994 getQualifiedTypeInfoOfCurNode(curNode, getCapitalCase(
995 "binary"));
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530996
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530997 JavaAttributeInfo attr =
998 getAttributeInfoForTheData(qualifiedTypeInfo, "binary",
999 null, false, false);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301000 String attributeName = attr.getAttributeName();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301001 String bitsToStringMethod =
1002 getOverRideString() + FOUR_SPACE_INDENTATION +
1003 PUBLIC + SPACE + STRING_DATA_TYPE + SPACE + TO +
1004 STRING_DATA_TYPE + OPEN_PARENTHESIS +
1005 CLOSE_PARENTHESIS + SPACE +
1006 OPEN_CURLY_BRACKET + NEW_LINE +
1007 EIGHT_SPACE_INDENTATION + RETURN + SPACE +
1008 BASE64 + PERIOD + GET_ENCODER +
1009 OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
1010 PERIOD + ENCODE_TO_STRING + OPEN_PARENTHESIS +
1011 attributeName + CLOSE_PARENTHESIS +
1012 SEMI_COLAN + NEW_LINE +
1013 FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
1014 NEW_LINE;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301015 methods.add(bitsToStringMethod);
Bharat saraswal8beac342016-08-04 02:00:03 +05301016 } else if (type.getDataType().equals(BITS)) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301017 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo =
1018 getQualifiedTypeInfoOfCurNode(curNode,
1019 getCapitalCase(
1020 "bits"));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301021
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301022 JavaAttributeInfo attr =
1023 getAttributeInfoForTheData(qualifiedTypeInfo, "bits",
1024 null, false, false);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301025 String attributeName = attr.getAttributeName();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301026 String bitsToStringMethod =
1027 getOverRideString() + FOUR_SPACE_INDENTATION +
1028 PUBLIC + SPACE + STRING_DATA_TYPE + SPACE + TO +
1029 STRING_DATA_TYPE + OPEN_PARENTHESIS +
1030 CLOSE_PARENTHESIS + SPACE +
1031 OPEN_CURLY_BRACKET + NEW_LINE +
1032 EIGHT_SPACE_INDENTATION + RETURN + SPACE +
1033 attributeName + PERIOD + TO +
1034 STRING_DATA_TYPE + OPEN_PARENTHESIS +
1035 CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE +
1036 FOUR_SPACE_INDENTATION +
1037 CLOSE_CURLY_BRACKET + NEW_LINE;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301038 methods.add(bitsToStringMethod);
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +05301039 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301040 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
1041 TO_STRING_IMPL_MASK,
1042 ((TempJavaCodeFragmentFilesContainer)
1043 curNode)
1044 .getTempJavaCodeFragmentFiles()
1045 .getTypeTempFiles(), path) +
1046 getToStringMethodClose());
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +05301047 }
Bharat saraswal84366c52016-03-23 19:40:35 +05301048
Bharat saraswal64e7e232016-07-14 23:33:55 +05301049 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
1050
Bharat saraswal8beac342016-08-04 02:00:03 +05301051 //From string method.
Shankara-Huaweib7564772016-08-02 18:13:13 +05301052 if ((type.getDataType().equals(YangDataTypes.DERIVED))
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301053 && (((YangDerivedInfo) type.getDataTypeExtendedInfo())
1054 .getEffectiveBuiltInType()
Shankara-Huaweib7564772016-08-02 18:13:13 +05301055 .equals(YangDataTypes.IDENTITYREF))) {
1056 yangDataTypes = YangDataTypes.IDENTITYREF;
1057 }
1058
1059 if (type.getDataType().equals(YangDataTypes.IDENTITYREF)) {
1060 yangDataTypes = YangDataTypes.IDENTITYREF;
1061 }
1062
1063 if (!yangDataTypes.equals(YangDataTypes.IDENTITYREF)) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301064 methods.add(
1065 getFromStringMethodSignature(className, pluginConfig) +
1066 getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
1067 javaGenInfo
1068 .getTempJavaCodeFragmentFiles()
1069 .getTypeTempFiles(),
1070 path) +
1071 getFromStringMethodClose());
Shankara-Huaweib7564772016-08-02 18:13:13 +05301072 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301073
Bharat saraswal022dae92016-03-04 20:08:09 +05301074 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301075 throw new IOException(
1076 "No data found in temporary java code fragment files for " +
1077 className + " while type def class file " +
1078 "generation");
Bharat saraswal022dae92016-03-04 20:08:09 +05301079 }
Bharat saraswal022dae92016-03-04 20:08:09 +05301080
Bharat saraswal84366c52016-03-23 19:40:35 +05301081 for (String method : methods) {
1082 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301083 }
Bharat saraswal84366c52016-03-23 19:40:35 +05301084 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +05301085
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301086 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +05301087 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301088
1089 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301090 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301091 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301092 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301093 * @param curNode current YANG node
1094 * @param imports imports for file
1095 * @return type def class file
1096 * @throws IOException when fails to generate class file
1097 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301098 public static File generateUnionClassFile(File file, YangNode curNode,
1099 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301100 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301101
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301102 JavaFileInfoTranslator javaFileInfo =
1103 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301104 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301105
janani b703cfe42016-05-17 13:12:22 +05301106 String className = getCapitalCase(javaFileInfo.getJavaName());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301107 String path = javaFileInfo.getBaseCodeGenPath() +
1108 javaFileInfo.getPackageFilePath();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301109
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301110 TempJavaTypeFragmentFiles tempJavaTypeFragmentFiles =
1111 ((JavaCodeGeneratorInfo) curNode)
1112 .getTempJavaCodeFragmentFiles().getTypeTempFiles();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301113
1114 boolean isIntConflict = false;
1115 boolean isLongConflict = false;
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301116 boolean isShortConflict = false;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301117 JavaAttributeInfo intAttr = tempJavaTypeFragmentFiles.getIntAttribute();
1118 if (intAttr == null) {
1119 intAttr = tempJavaTypeFragmentFiles.getUIntAttribute();
1120 }
1121
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301122 JavaAttributeInfo longAttr =
1123 tempJavaTypeFragmentFiles.getLongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301124 if (longAttr == null) {
1125 longAttr = tempJavaTypeFragmentFiles.getULongAttribute();
1126 }
1127
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301128 JavaAttributeInfo shortAttr =
1129 tempJavaTypeFragmentFiles.getShortAttribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301130 if (shortAttr == null) {
1131 shortAttr = tempJavaTypeFragmentFiles.getUInt8Attribute();
1132 }
1133
Bharat saraswal64e7e232016-07-14 23:33:55 +05301134 if (intAttr != null) {
1135 isIntConflict = intAttr.isIntConflict();
1136 }
1137 if (longAttr != null) {
1138 isLongConflict = longAttr.isLongConflict();
1139 }
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301140 if (shortAttr != null) {
1141 isShortConflict = shortAttr.isShortConflict();
1142 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301143 if (isLongConflict) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301144 imports.add(tempJavaTypeFragmentFiles.getJavaImportData()
1145 .getBigIntegerImport());
Bharat saraswal64e7e232016-07-14 23:33:55 +05301146 sort(imports);
1147 }
1148
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301149 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
1150 imports, path, pluginConfig);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301151
1152 List<String> methods = new ArrayList<>();
1153
Bharat saraswal64e7e232016-07-14 23:33:55 +05301154
1155 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301156 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301157 if (isIntConflict) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301158 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1159 .addStaticAttributeIntRange(PRIVATE,
1160 tempJavaTypeFragmentFiles
1161 .getIntIndex() <
1162 tempJavaTypeFragmentFiles
1163 .getUIntIndex()));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301164 }
1165
1166 if (isLongConflict) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301167 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1168 .addStaticAttributeLongRange(PRIVATE,
1169 tempJavaTypeFragmentFiles
1170 .getLongIndex() <
1171 tempJavaTypeFragmentFiles
1172 .getULongIndex()));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301173 }
1174
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301175 if (isShortConflict) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301176 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1177 .addStaticAttributeShortRange(PRIVATE,
1178 tempJavaTypeFragmentFiles
1179 .getShortIndex() <
1180 tempJavaTypeFragmentFiles
1181 .getUInt8Index()));
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301182 }
1183
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301184 insertDataIntoJavaFile(file,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301185 NEW_LINE + FOUR_SPACE_INDENTATION +
1186 getDataFromTempFileHandle(
1187 ATTRIBUTES_MASK,
1188 ((TempJavaCodeFragmentFilesContainer) curNode)
1189 .getTempJavaCodeFragmentFiles()
1190 .getTypeTempFiles(),
1191 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301192 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301193 throw new IOException(
1194 "No data found in temporary java code fragment files for " +
1195 className + " while union class file generation");
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301196 }
1197
Bharat saraswal64e7e232016-07-14 23:33:55 +05301198
1199 //Default constructor.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301200 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
1201 .getTempJavaCodeFragmentFiles()
1202 .addDefaultConstructor(PRIVATE, EMPTY_STRING,
1203 pluginConfig, curNode));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301204
1205 try {
1206
Bharat saraswal64e7e232016-07-14 23:33:55 +05301207
1208 //Type constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301209 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301210 ((TempJavaCodeFragmentFilesContainer) curNode)
1211 .getTempJavaCodeFragmentFiles()
1212 .getTypeTempFiles(),
1213 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301214
Bharat saraswal64e7e232016-07-14 23:33:55 +05301215
1216 // Of string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301217 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301218 ((TempJavaCodeFragmentFilesContainer) curNode)
1219 .getTempJavaCodeFragmentFiles()
1220 .getTypeTempFiles(),
1221 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301222
Bharat saraswal64e7e232016-07-14 23:33:55 +05301223 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301224 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301225 ((TempJavaCodeFragmentFilesContainer) curNode)
1226 .getTempJavaCodeFragmentFiles()
1227 .getTypeTempFiles(),
1228 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301229
Bharat saraswal64e7e232016-07-14 23:33:55 +05301230
1231 //Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301232 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301233 getDataFromTempFileHandle(
1234 HASH_CODE_IMPL_MASK,
1235 ((TempJavaCodeFragmentFilesContainer) curNode)
1236 .getTempJavaCodeFragmentFiles()
1237 .getTypeTempFiles(),
1238 path).replace(
1239 NEW_LINE,
1240 EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301241
Bharat saraswal64e7e232016-07-14 23:33:55 +05301242 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301243 methods.add(getEqualsMethodClose(
1244 getEqualsMethodOpen(className + EMPTY_STRING)
1245 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
1246 ((TempJavaCodeFragmentFilesContainer) curNode)
1247 .getTempJavaCodeFragmentFiles()
1248 .getTypeTempFiles(),
1249 path)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301250
Bharat saraswal64e7e232016-07-14 23:33:55 +05301251
1252 //To string method.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301253 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301254 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
1255 ((TempJavaCodeFragmentFilesContainer) curNode)
1256 .getTempJavaCodeFragmentFiles()
1257 .getTypeTempFiles(),
1258 path) +
1259 getToStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301260
Bharat saraswal64e7e232016-07-14 23:33:55 +05301261
1262 //From string method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301263 methods.add(getFromStringMethodSignature(className, pluginConfig) +
1264 getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
1265 ((TempJavaCodeFragmentFilesContainer) curNode)
1266 .getTempJavaCodeFragmentFiles()
1267 .getTypeTempFiles(),
1268 path) +
1269 getFromStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301270
Bharat saraswal64e7e232016-07-14 23:33:55 +05301271 if (isIntConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301272 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301273 }
1274 if (isLongConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301275 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301276 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301277 if (isShortConflict && !isIntConflict) {
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301278 methods.add(getRangeValidatorMethodForUnion(INT));
1279 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301280
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301281 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301282 throw new IOException(
1283 "No data found in temporary java code fragment files for " +
1284 className + " while union class file generation");
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301285 }
1286
1287 for (String method : methods) {
1288 insertDataIntoJavaFile(file, method);
1289 }
1290 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1291
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301292 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301293 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301294
1295 /**
1296 * Generates class file for type enum.
1297 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301298 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301299 * @param curNode current YANG node
1300 * @return class file for type enum
1301 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301302 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301303 public static File generateEnumClassFile(File file, YangNode curNode)
1304 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301305
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301306 JavaFileInfoTranslator javaFileInfo =
1307 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301308 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301309
janani b703cfe42016-05-17 13:12:22 +05301310 String className = javaFileInfo.getJavaName();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301311 String path = javaFileInfo.getBaseCodeGenPath() +
1312 javaFileInfo.getPackageFilePath();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301313
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301314 initiateJavaFileGeneration(file, getCapitalCase(className),
1315 GENERATE_ENUM_CLASS, null, path,
1316 pluginConfig);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301317
1318 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301319 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301320 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301321 insertDataIntoJavaFile(file,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301322 trimAtLast(trimAtLast(
1323 getDataFromTempFileHandle(
1324 ENUM_IMPL_MASK, javaGenInfo
1325 .getTempJavaCodeFragmentFiles()
1326 .getEnumerationTempFiles(),
1327 path), COMMA),
1328 NEW_LINE) + SEMI_COLAN +
1329 NEW_LINE);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301330 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301331 throw new IOException(
1332 "No data found in temporary java code fragment files for " +
1333 getCapitalCase(className) + " while enum class " +
1334 "file generation");
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301335 }
1336
Bharat saraswal64e7e232016-07-14 23:33:55 +05301337
1338 // Add an attribute to get the enum's values.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301339 insertDataIntoJavaFile(file, getEnumsValueAttribute(
1340 getCapitalCase(className)));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301341
Bharat saraswal64e7e232016-07-14 23:33:55 +05301342 // Add a constructor for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301343 insertDataIntoJavaFile(file,
1344 getJavaDoc(TYPE_CONSTRUCTOR, className, false,
1345 pluginConfig, null)
1346 + getEnumsConstructor(
1347 getCapitalCase(className)) + NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301348
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301349 TempJavaEnumerationFragmentFiles enumFragFiles =
1350 ((TempJavaCodeFragmentFilesContainer) curNode)
1351 .getTempJavaCodeFragmentFiles()
1352 .getEnumerationTempFiles();
1353 insertDataIntoJavaFile(file,
1354 getEnumsOfMethod(className, enumFragFiles
1355 .getJavaAttributeForEnum(
1356 pluginConfig),
1357 enumFragFiles
1358 .getEnumSetJavaMap(),
1359 enumFragFiles
1360 .getEnumStringList(),
1361 pluginConfig) + NEW_LINE);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301362
Bharat saraswal64e7e232016-07-14 23:33:55 +05301363 // Add a getter method for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301364 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
1365 pluginConfig, null) +
1366 getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301367
1368 try {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301369 insertDataIntoJavaFile(file, getFromStringMethodSignature(
1370 getCapitalCase(className), pluginConfig) +
1371 getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
1372 ((TempJavaCodeFragmentFilesContainer) curNode)
1373 .getTempJavaCodeFragmentFiles()
1374 .getEnumerationTempFiles(),
1375 path) +
1376 getFromStringMethodClose());
Bharat saraswal250a7472016-05-12 13:16:57 +05301377 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301378 throw new IOException(
1379 "No data found in temporary java code fragment files for " +
1380 getCapitalCase(className) +
1381 " while enum class file generation");
Bharat saraswal250a7472016-05-12 13:16:57 +05301382 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301383
1384 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1385
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301386 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301387 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301388
1389 /**
1390 * Generates interface file for rpc.
1391 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301392 * @param file generated file
1393 * @param curNode current YANG node
1394 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301395 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301396 * @throws IOException when fails to generate class file
1397 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301398 public static File generateServiceInterfaceFile(File file, YangNode curNode,
1399 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301400 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301401
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301402 JavaFileInfoTranslator javaFileInfo =
1403 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301404
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301405 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles =
1406 ((JavaCodeGeneratorInfo) curNode)
1407 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
1408 String className = getCapitalCase(javaFileInfo.getJavaName()) +
1409 SERVICE_METHOD_STRING;
1410 String path = javaFileInfo.getBaseCodeGenPath() +
1411 javaFileInfo.getPackageFilePath();
1412 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports,
1413 curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301414
1415 List<String> methods = new ArrayList<>();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301416 JavaAttributeInfo rootAttribute =
1417 getCurNodeAsAttributeInTarget(curNode, curNode, false,
1418 tempJavaServiceFragmentFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301419
1420 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301421
Bharat saraswal1edde622016-09-06 10:18:04 +05301422 if (isGetSetOfRootNodeRequired(curNode)) {
1423 //Getter methods.
1424 methods.add(getGetterString(rootAttribute,
1425 GENERATE_SERVICE_AND_MANAGER,
1426 javaFileInfo.getPluginConfig()) +
1427 NEW_LINE);
1428 // Setter methods.
1429 methods.add(getSetterString(rootAttribute, className,
1430 GENERATE_SERVICE_AND_MANAGER,
1431 javaFileInfo.getPluginConfig()) +
1432 NEW_LINE);
1433 }
1434
Bharat saraswalaf413b82016-07-14 15:18:20 +05301435 methods.add(getAugmentsDataMethodForService(curNode) + NEW_LINE);
1436
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301437 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
1438 .getServiceTempFiles() != null) {
1439 JavaCodeGeneratorInfo javaGenInfo =
1440 (JavaCodeGeneratorInfo) curNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301441
1442 // Rpc methods
Bharat saraswal250a7472016-05-12 13:16:57 +05301443 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301444 javaGenInfo
1445 .getTempJavaCodeFragmentFiles()
1446 .getServiceTempFiles(),
1447 path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301448 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301449 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301450 throw new IOException(
1451 "No data found in temporary java code fragment files for " +
1452 className + " while rpc class file generation");
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301453 }
1454
1455 for (String method : methods) {
1456 insertDataIntoJavaFile(file, method);
1457 }
1458 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1459
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301460 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301461 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301462
1463 /**
1464 * Generates event file.
1465 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301466 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301467 * @param curNode current YANG node
1468 * @param imports imports for file
1469 * @throws IOException when fails to generate class file
1470 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301471 public static void generateEventFile(File file, YangNode curNode,
1472 List<String> imports)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301473 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301474
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301475 String className = getCapitalCase(
1476 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1477 .getJavaName())
Bharat saraswald14cbe82016-07-14 13:26:18 +05301478 + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301479
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301480 TempJavaEventFragmentFiles tempFiles =
1481 ((TempJavaCodeFragmentFilesContainer) curNode)
1482 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301483
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301484 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1485 .getBaseCodeGenPath()
1486 + ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1487 .getPackageFilePath();
1488 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode,
1489 className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301490 try {
1491 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301492 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK,
1493 tempFiles, path),
1494 COMMA) + FOUR_SPACE_INDENTATION +
1495 CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301496
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301497 insertDataIntoJavaFile(file,
1498 getDataFromTempFileHandle(EVENT_METHOD_MASK,
1499 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301500
1501 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301502 throw new IOException(
1503 "No data found in temporary java code fragment files for " +
1504 className + " while event class file generation");
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301505 }
1506
1507 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1508 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301509 }
1510
1511 /**
1512 * Generates event listener file.
1513 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301514 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301515 * @param curNode current YANG node
1516 * @param imports imports for file
1517 * @throws IOException when fails to generate class file
1518 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301519 public static void generateEventListenerFile(File file, YangNode curNode,
1520 List<String> imports)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301521 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301522
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301523 String className = getCapitalCase(
1524 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1525 .getJavaName()) + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301526
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301527 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE,
1528 imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301529 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301530 validateLineLength(file);
1531 }
1532
1533 /**
1534 * Generates event subject's file.
1535 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301536 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301537 * @param curNode current YANG node
1538 * @throws IOException when fails to do IO exceptions
1539 */
1540 public static void generateEventSubjectFile(File file, YangNode curNode)
1541 throws IOException {
1542
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301543 String className = getCapitalCase(
1544 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1545 .getJavaName()) + EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301546
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301547 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null,
1548 curNode, className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301549
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301550 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1551 .getBaseCodeGenPath()
1552 + ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1553 .getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301554
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301555 TempJavaEventFragmentFiles tempFiles =
1556 ((TempJavaCodeFragmentFilesContainer) curNode)
1557 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301558
1559 insertDataIntoJavaFile(file, NEW_LINE);
1560 try {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301561 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
1562 EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301563
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301564 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
1565 EVENT_SUBJECT_GETTER_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301566
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301567 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
1568 EVENT_SUBJECT_SETTER_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301569
1570 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301571 throw new IOException(
1572 "No data found in temporary java code fragment files for " +
1573 className + " while event class file generation");
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301574 }
1575
1576 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1577 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301578 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301579}