blob: ec671aa6a231a39174fdf88f129c068eed898962 [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;
129import static org.onosproject.yangutils.translator.tojava.utils
130 .JavaCodeSnippetGen.addAugmentationAttribute;
131import static org.onosproject.yangutils.translator.tojava.utils
132 .JavaCodeSnippetGen.getEnumsValueAttribute;
133import static org.onosproject.yangutils.translator.tojava.utils
134 .JavaCodeSnippetGen.getEventEnumTypeStart;
135import static org.onosproject.yangutils.translator.tojava.utils
136 .JavaCodeSnippetGen.getOperationAttributeForConstructor;
137import static org.onosproject.yangutils.translator.tojava.utils
138 .JavaCodeSnippetGen.getOperationAttributes;
139import static org.onosproject.yangutils.translator.tojava.utils
140 .JavaCodeSnippetGen.getOperationTypeAttr;
141import static org.onosproject.yangutils.translator.tojava.utils
142 .JavaCodeSnippetGen.getOperationTypeEnum;
143import static org.onosproject.yangutils.translator.tojava.utils
144 .JavaCodeSnippetGen.getOperationTypeForConstructor;
145import static org.onosproject.yangutils.translator.tojava.utils
146 .JavaFileGeneratorUtils.getDataFromTempFileHandle;
147import static org.onosproject.yangutils.translator.tojava.utils
148 .JavaFileGeneratorUtils.initiateJavaFileGeneration;
149import static org.onosproject.yangutils.translator.tojava.utils
150 .MethodsGenerator.builderMethod;
151import static org.onosproject.yangutils.translator.tojava.utils
152 .MethodsGenerator.getAddAugmentInfoMethodImpl;
153import static org.onosproject.yangutils.translator.tojava.utils
154 .MethodsGenerator.getAddAugmentInfoMethodInterface;
155import static org.onosproject.yangutils.translator.tojava.utils
156 .MethodsGenerator.getAugmentsDataMethodForService;
157import static org.onosproject.yangutils.translator.tojava.utils
158 .MethodsGenerator.getConstructorStart;
159import static org.onosproject.yangutils.translator.tojava.utils
160 .MethodsGenerator.getEnumsConstructor;
161import static org.onosproject.yangutils.translator.tojava.utils
162 .MethodsGenerator.getEnumsOfMethod;
163import static org.onosproject.yangutils.translator.tojava.utils
164 .MethodsGenerator.getEqualsMethodClose;
165import static org.onosproject.yangutils.translator.tojava.utils
166 .MethodsGenerator.getEqualsMethodOpen;
167import static org.onosproject.yangutils.translator.tojava.utils
168 .MethodsGenerator.getFromStringMethodClose;
169import static org.onosproject.yangutils.translator.tojava.utils
170 .MethodsGenerator.getFromStringMethodSignature;
171import static org.onosproject.yangutils.translator.tojava.utils
172 .MethodsGenerator.getGetter;
173import static org.onosproject.yangutils.translator.tojava.utils
174 .MethodsGenerator.getGetterForOperationType;
175import static org.onosproject.yangutils.translator.tojava.utils
176 .MethodsGenerator.getGettersForValueAndSelectLeaf;
177import static org.onosproject.yangutils.translator.tojava.utils
178 .MethodsGenerator.getHashCodeMethodClose;
179import static org.onosproject.yangutils.translator.tojava.utils
180 .MethodsGenerator.getHashCodeMethodOpen;
181import static org.onosproject.yangutils.translator.tojava.utils
182 .MethodsGenerator.getInterfaceLeafIdEnumMethods;
183import static org.onosproject.yangutils.translator.tojava.utils
184 .MethodsGenerator.getInterfaceLeafIdEnumSignature;
185import static org.onosproject.yangutils.translator.tojava.utils
186 .MethodsGenerator.getOmitNullValueString;
187import static org.onosproject.yangutils.translator.tojava.utils
188 .MethodsGenerator.getOperationAttributesGetters;
189import static org.onosproject.yangutils.translator.tojava.utils
190 .MethodsGenerator.getOverRideString;
191import static org.onosproject.yangutils.translator.tojava.utils
192 .MethodsGenerator.getRangeValidatorMethodForUnion;
193import static org.onosproject.yangutils.translator.tojava.utils
194 .MethodsGenerator.getSetterForOperationType;
195import static org.onosproject.yangutils.translator.tojava.utils
196 .MethodsGenerator.getSetterForSelectLeaf;
197import static org.onosproject.yangutils.translator.tojava.utils
198 .MethodsGenerator.getToStringMethodClose;
199import static org.onosproject.yangutils.translator.tojava.utils
200 .MethodsGenerator.getToStringMethodOpen;
201import static org.onosproject.yangutils.translator.tojava.utils
202 .MethodsGenerator.getYangAugmentInfoImpl;
203import static org.onosproject.yangutils.translator.tojava.utils
204 .MethodsGenerator.getYangAugmentInfoInterface;
205import static org.onosproject.yangutils.translator.tojava.utils
206 .MethodsGenerator.getYangAugmentInfoMapImpl;
207import static org.onosproject.yangutils.translator.tojava.utils
208 .MethodsGenerator.getYangAugmentInfoMapInterface;
209import static org.onosproject.yangutils.translator.tojava.utils
210 .MethodsGenerator.isLeafValueSetInterface;
211import static org.onosproject.yangutils.translator.tojava.utils
212 .MethodsGenerator.isSelectLeafSetInterface;
213import static org.onosproject.yangutils.translator.tojava.utils
214 .MethodsGenerator.processSubtreeFilteringInterface;
215import static org.onosproject.yangutils.translator.tojava.utils
216 .MethodsGenerator.setSelectLeafSetInterface;
217import static org.onosproject.yangutils.translator.tojava.utils
218 .SubtreeFilteringMethodsGenerator.getAugmentableSubTreeFiltering;
219import static org.onosproject.yangutils.translator.tojava.utils
220 .SubtreeFilteringMethodsGenerator.getProcessChildNodeSubtreeFiltering;
221import static org.onosproject.yangutils.translator.tojava.utils
222 .SubtreeFilteringMethodsGenerator.getProcessLeafListSubtreeFiltering;
223import static org.onosproject.yangutils.translator.tojava.utils
224 .SubtreeFilteringMethodsGenerator.getProcessLeafSubtreeFiltering;
225import static org.onosproject.yangutils.translator.tojava.utils
226 .SubtreeFilteringMethodsGenerator.getProcessSubTreeFilteringEnd;
227import static org.onosproject.yangutils.translator.tojava.utils
228 .SubtreeFilteringMethodsGenerator.getProcessSubtreeFilteringStart;
229import static org.onosproject.yangutils.translator.tojava.utils
230 .SubtreeFilteringMethodsGenerator.getProcessSubtreeFunctionBody;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530231import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530232import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530233import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
234import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530235import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530236import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530237import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530238import static org.onosproject.yangutils.utils.UtilConstants
239 .EIGHT_SPACE_INDENTATION;
Bharat saraswal84366c52016-03-23 19:40:35 +0530240import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530241import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530242import static org.onosproject.yangutils.utils.UtilConstants
243 .EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530244import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530245import static org.onosproject.yangutils.utils.UtilConstants
246 .EVENT_SUBJECT_NAME_SUFFIX;
247import static org.onosproject.yangutils.utils.UtilConstants
248 .FOUR_SPACE_INDENTATION;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530249import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530250import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530251import static org.onosproject.yangutils.utils.UtilConstants.INT;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530252import static org.onosproject.yangutils.utils.UtilConstants
253 .JAVA_UTIL_IMPORT_BASE64_CLASS;
254import static org.onosproject.yangutils.utils.UtilConstants
255 .JAVA_UTIL_OBJECTS_IMPORT_PKG;
Bharat saraswal84366c52016-03-23 19:40:35 +0530256import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530257import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530258import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530259import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530260import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
261import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530262import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530263import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530264import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530265import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530266import static org.onosproject.yangutils.utils.UtilConstants
267 .SERVICE_METHOD_STRING;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530268import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530269import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
270import static org.onosproject.yangutils.utils.UtilConstants.TO;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530271import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType
272 .GETTER_METHOD;
273import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType
274 .TYPE_CONSTRUCTOR;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530275import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530276import static org.onosproject.yangutils.utils.io.impl.YangIoUtils
277 .getCapitalCase;
278import static org.onosproject.yangutils.utils.io.impl.YangIoUtils
279 .insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530280import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530281import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530282import static org.onosproject.yangutils.utils.io.impl.YangIoUtils
283 .validateLineLength;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530284
Bharat saraswal64e7e232016-07-14 23:33:55 +0530285import static java.util.Collections.sort;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530286
Vinod Kumar S08710982016-03-03 19:55:30 +0530287/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530288 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530289 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530290public final class JavaFileGenerator {
291
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530292 private JavaFileGenerator() {
293 }
294
295 /**
296 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530297 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530298 * @param file file
299 * @param imports imports for the file
300 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530301 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530302 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530303 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530304 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530305 public static File generateInterfaceFile(File file, List<String> imports,
306 YangNode curNode,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530307 boolean isAttrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530308 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530309
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530310 JavaFileInfoTranslator javaFileInfo =
311 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530312
313 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530314 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530315 path = javaFileInfo.getPluginConfig().getCodeGenDir() +
316 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530317 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530318 path = javaFileInfo.getBaseCodeGenPath() +
319 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530320 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530321
janani b703cfe42016-05-17 13:12:22 +0530322 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530323
Bharat saraswal8beac342016-08-04 02:00:03 +0530324 boolean isLeavesPresent;
325 YangLeavesHolder leavesHolder;
326 if (curNode instanceof YangLeavesHolder) {
327 leavesHolder = (YangLeavesHolder) curNode;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530328 isLeavesPresent = leavesHolder.getListOfLeaf() != null &&
329 !leavesHolder.getListOfLeaf().isEmpty()
330 || leavesHolder.getListOfLeafList() != null &&
331 !leavesHolder.getListOfLeafList().isEmpty();
Bharat saraswal8beac342016-08-04 02:00:03 +0530332 } else {
333 isLeavesPresent = false;
334 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530335
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530336 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode,
337 className);
Bharat saraswal8beac342016-08-04 02:00:03 +0530338 List<String> methods = new ArrayList<>();
Bharat saraswald532a4c2016-03-25 18:19:46 +0530339 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530340 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530341 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530342 //Leaf identifier enum.
343 if (isLeavesPresent) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530344 insertDataIntoJavaFile(file, NEW_LINE +
345 getInterfaceLeafIdEnumSignature(className) +
346 NEW_LINE +
347 trimAtLast(replaceLast(getDataFromTempFileHandle(
348 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
349 ((TempJavaCodeFragmentFilesContainer)
350 curNode)
351 .getTempJavaCodeFragmentFiles()
352 .getBeanTempFiles(), path),
353 COMMA, SEMI_COLAN),
354 NEW_LINE) +
355 NEW_LINE + NEW_LINE +
356 getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530357 }
358
Bharat saraswal64e7e232016-07-14 23:33:55 +0530359 //Getter methods.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530360 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
361 GETTER_FOR_INTERFACE_MASK,
362 ((TempJavaCodeFragmentFilesContainer) curNode)
363 .getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530364 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530365 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530366 throw new IOException(
367 "No data found in temporary java code fragment files " +
368 "for " +
369 className
370 + " while interface file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530371 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530372 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530373
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530374 if (curNode instanceof YangAugmentableNode &&
375 !(curNode instanceof YangChoice)) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530376 methods.add(getYangAugmentInfoInterface());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530377 methods.add(getYangAugmentInfoMapInterface(
378 javaFileInfo.getPluginConfig()));
Bharat saraswal8beac342016-08-04 02:00:03 +0530379 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530380
Bharat saraswale50edca2016-08-05 01:58:25 +0530381 if (curNode instanceof YangCase) {
382 YangNode caseParent = curNode.getParent();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530383 JavaQualifiedTypeInfo qualifiedTypeInfo =
384 getQualifierInfoForCasesParent(caseParent,
385 javaFileInfo
386 .getPluginConfig());
387 methods.add(NEW_LINE + processSubtreeFilteringInterface
388 (qualifiedTypeInfo.getClassInfo()));
Bharat saraswale50edca2016-08-05 01:58:25 +0530389 } else {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530390 methods.add(NEW_LINE + processSubtreeFilteringInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530391 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530392
393 if (isLeavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530394 methods.add(NEW_LINE + isLeafValueSetInterface());
395 methods.add(NEW_LINE + isSelectLeafSetInterface());
396 }
397 for (String method : methods) {
398 insertDataIntoJavaFile(file, method);
399 }
Bharat saraswale304c252016-08-16 20:56:20 +0530400 return file;
Bharat saraswal8beac342016-08-04 02:00:03 +0530401
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530402 }
403
404 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530405 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530406 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530407 * @param file file
408 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530409 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530410 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530411 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530412 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530413 public static File generateBuilderInterfaceFile(File file, YangNode curNode,
414 boolean isAttrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530415 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530416
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530417 JavaFileInfoTranslator javaFileInfo =
418 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530419 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530420
Bharat saraswal8beac342016-08-04 02:00:03 +0530421 boolean isLeavesPresent;
422 YangLeavesHolder leavesHolder;
423 if (curNode instanceof YangLeavesHolder) {
424 leavesHolder = (YangLeavesHolder) curNode;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530425 isLeavesPresent = leavesHolder.getListOfLeaf() != null &&
426 !leavesHolder.getListOfLeaf().isEmpty()
427 || leavesHolder.getListOfLeafList() != null &&
428 !leavesHolder.getListOfLeafList().isEmpty();
Bharat saraswal8beac342016-08-04 02:00:03 +0530429 } else {
430 isLeavesPresent = false;
431 }
432
janani b703cfe42016-05-17 13:12:22 +0530433 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530434 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530435 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530436 path = javaFileInfo.getPluginConfig().getCodeGenDir() +
437 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530438 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530439 path = javaFileInfo.getBaseCodeGenPath() +
440 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530441 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530442
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530443 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode,
444 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530445 List<String> methods = new ArrayList<>();
Bharat saraswald532a4c2016-03-25 18:19:46 +0530446 if (isAttrPresent) {
447 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530448
449 //Getter methods.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530450 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(
451 GETTER_FOR_INTERFACE_MASK,
452 ((TempJavaCodeFragmentFilesContainer)
453 curNode)
454 .getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530455 .getBeanTempFiles(), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530456
457 //Setter methods.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530458 methods.add(NEW_LINE);
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530459 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(
460 SETTER_FOR_INTERFACE_MASK,
461 ((TempJavaCodeFragmentFilesContainer)
462 curNode)
463 .getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530464 .getBeanTempFiles(), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530465
466 //Add to list method.
467 methods.add(NEW_LINE);
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530468 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
469 ADD_TO_LIST_INTERFACE_MASK,
470 ((TempJavaCodeFragmentFilesContainer) curNode)
471 .getTempJavaCodeFragmentFiles()
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530472 .getBeanTempFiles(), path));
473
Bharat saraswald532a4c2016-03-25 18:19:46 +0530474 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530475 throw new IOException(
476 "No data found in temporary java code fragment files " +
477 "for " +
478 className
479 + " while builder interface file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530480 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530481 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530482
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530483 if (curNode instanceof YangAugmentableNode &&
484 !(curNode instanceof YangChoice)) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530485 methods.add(getAddAugmentInfoMethodInterface());
486 methods.add(getYangAugmentInfoInterface());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530487 methods.add(getYangAugmentInfoMapInterface(
488 javaFileInfo.getPluginConfig()));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530489 }
490
Bharat saraswal8beac342016-08-04 02:00:03 +0530491 if (isLeavesPresent) {
492 methods.add(NEW_LINE + setSelectLeafSetInterface(className));
493 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530494 //Add build method to builder interface file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530495 methods.add(
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530496 ((TempJavaCodeFragmentFilesContainer) curNode)
497 .getTempJavaCodeFragmentFiles()
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530498 .addBuildMethodForInterface(pluginConfig));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530499
Bharat saraswal64e7e232016-07-14 23:33:55 +0530500
501 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530502 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530503 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530504 }
505
Bharat saraswal84366c52016-03-23 19:40:35 +0530506 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale304c252016-08-16 20:56:20 +0530507 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530508 }
509
510 /**
511 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530512 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530513 * @param file file
514 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530515 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530516 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530517 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530518 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530519
Bharat saraswald14cbe82016-07-14 13:26:18 +0530520 public static File generateBuilderClassFile(File file, YangNode curNode,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530521 boolean isAttrPresent)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530522 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530523
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530524 JavaFileInfoTranslator javaFileInfo =
525 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530526 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530527
Bharat saraswal8beac342016-08-04 02:00:03 +0530528 boolean isLeavesPresent;
529 YangLeavesHolder leavesHolder;
530 if (curNode instanceof YangLeavesHolder) {
531 leavesHolder = (YangLeavesHolder) curNode;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530532 isLeavesPresent = leavesHolder.getListOfLeaf() != null &&
533 !leavesHolder.getListOfLeaf().isEmpty()
534 || leavesHolder.getListOfLeafList() != null &&
535 !leavesHolder.getListOfLeafList().isEmpty();
Bharat saraswal8beac342016-08-04 02:00:03 +0530536 } else {
537 isLeavesPresent = false;
538 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530539
Bharat saraswal8beac342016-08-04 02:00:03 +0530540 String className = getCapitalCase(javaFileInfo.getJavaName());
541 boolean isRootNode = false;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530542 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530543 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530544 isRootNode = true;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530545 path = javaFileInfo.getPluginConfig().getCodeGenDir() +
546 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530547 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530548 path = javaFileInfo.getBaseCodeGenPath() +
549 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530550 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530551
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530552 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode,
553 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530554 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530555
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530556 if (curNode instanceof YangAugmentableNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530557 insertDataIntoJavaFile(file, addAugmentationAttribute());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530558 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530559 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530560
561 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530562 try {
563 insertDataIntoJavaFile(file,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530564 NEW_LINE + FOUR_SPACE_INDENTATION +
565 getDataFromTempFileHandle(
566 ATTRIBUTES_MASK,
567 ((TempJavaCodeFragmentFilesContainer) curNode)
568 .getTempJavaCodeFragmentFiles()
569 .getBeanTempFiles(),
570 path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530571 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530572 throw new IOException(
573 "No data found in temporary java code fragment files " +
574 "for " + className +
575 " while builder class file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530576 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530577
Bharat saraswal8beac342016-08-04 02:00:03 +0530578 insertDataIntoJavaFile(file, getOperationTypeAttr());
579 if (isLeavesPresent) {
580 insertDataIntoJavaFile(file, getOperationAttributes());
581 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530582 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530583 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530584 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530585 ((TempJavaCodeFragmentFilesContainer) curNode)
586 .getTempJavaCodeFragmentFiles()
587 .getBeanTempFiles(),
588 path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530589 // Setter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530590 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530591 ((TempJavaCodeFragmentFilesContainer) curNode)
592 .getTempJavaCodeFragmentFiles()
593 .getBeanTempFiles(),
594 path));
Bharat saraswald14cbe82016-07-14 13:26:18 +0530595
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530596 //Add to list impl method.
597 methods.add(getDataFromTempFileHandle(ADD_TO_LIST_IMPL_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530598 ((TempJavaCodeFragmentFilesContainer) curNode)
599 .getTempJavaCodeFragmentFiles()
600 .getBeanTempFiles(),
601 path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530602
Bharat saraswald14cbe82016-07-14 13:26:18 +0530603 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530604
605 methods.add(getGetterForOperationType());
606 methods.add(getSetterForOperationType(className));
607 //Add operation attribute methods.
608 if (isLeavesPresent) {
609 methods.add(getOperationAttributesGetters() + NEW_LINE);
610 methods.add(getSetterForSelectLeaf(className, isRootNode));
611 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530612 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530613 throw new IOException(
614 "No data found in temporary java code fragment files " +
615 "for " + className +
616 " while builder class file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530617 }
618 } else {
619 insertDataIntoJavaFile(file, NEW_LINE);
620 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530621
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530622 if (curNode instanceof YangAugmentableNode) {
623 methods.add(getAddAugmentInfoMethodImpl());
624 methods.add(getYangAugmentInfoImpl());
625 methods.add(getYangAugmentInfoMapImpl());
626 }
627
Bharat saraswal64e7e232016-07-14 23:33:55 +0530628 // Add default constructor and build method impl.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530629 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
630 .getTempJavaCodeFragmentFiles()
631 .addBuildMethodImpl(curNode));
632 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
633 .getTempJavaCodeFragmentFiles()
634 .addDefaultConstructor(PUBLIC, BUILDER,
635 pluginConfig, curNode));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530636
Bharat saraswal64e7e232016-07-14 23:33:55 +0530637
638 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530639 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530640 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530641 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530642
Bharat saraswald14cbe82016-07-14 13:26:18 +0530643 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswale304c252016-08-16 20:56:20 +0530644 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530645 }
646
647 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530648 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530649 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530650 * @param file file
651 * @param curNode current YANG node
Bharat saraswald532a4c2016-03-25 18:19:46 +0530652 * @param isAttrPresent if any attribute is present or not
Bharat saraswald14cbe82016-07-14 13:26:18 +0530653 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530654 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530655 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530656 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530657 public static File generateDefaultClassFile(File file, YangNode curNode,
658 boolean isAttrPresent,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530659 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530660 throws IOException {
661
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530662 JavaFileInfoTranslator javaFileInfo =
663 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530664 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530665
Bharat saraswal8beac342016-08-04 02:00:03 +0530666 boolean isLeavesPresent;
667 YangLeavesHolder leavesHolder;
668 if (curNode instanceof YangLeavesHolder) {
669 leavesHolder = (YangLeavesHolder) curNode;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530670 isLeavesPresent = leavesHolder.getListOfLeaf() != null &&
671 !leavesHolder.getListOfLeaf().isEmpty() ||
672 leavesHolder.getListOfLeafList() != null &&
673 !leavesHolder.getListOfLeafList().isEmpty();
Bharat saraswal8beac342016-08-04 02:00:03 +0530674 } else {
675 isLeavesPresent = false;
676 }
677
678 boolean isRootNode = false;
679
janani b703cfe42016-05-17 13:12:22 +0530680 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530681 String opParamClassName = className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530682 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530683 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530684 opParamClassName = className + OP_PARAM;
685 isRootNode = true;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530686 path = javaFileInfo.getPluginConfig().getCodeGenDir() +
687 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530688 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530689 path = javaFileInfo.getBaseCodeGenPath() +
690 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530691 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530692
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530693 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode,
694 className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530695
Bharat saraswal022dae92016-03-04 20:08:09 +0530696 List<String> methods = new ArrayList<>();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530697 if (curNode instanceof YangAugmentableNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530698 insertDataIntoJavaFile(file, addAugmentationAttribute());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530699 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530700 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530701
702 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530703 try {
704 insertDataIntoJavaFile(file,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530705 NEW_LINE + FOUR_SPACE_INDENTATION +
706 getDataFromTempFileHandle(
707 ATTRIBUTES_MASK,
708 ((TempJavaCodeFragmentFilesContainer) curNode)
709 .getTempJavaCodeFragmentFiles()
710 .getBeanTempFiles(),
711 path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530712 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530713 throw new IOException(
714 "No data found in temporary java code fragment files " +
715 "for " + className +
716 " while impl class file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530717 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530718
Bharat saraswal8beac342016-08-04 02:00:03 +0530719 //Add operation attributes
720 insertDataIntoJavaFile(file, getOperationTypeEnum());
721 insertDataIntoJavaFile(file, getOperationTypeAttr());
722 if (isLeavesPresent) {
723 insertDataIntoJavaFile(file, getOperationAttributes());
724 }
725
Bharat saraswald532a4c2016-03-25 18:19:46 +0530726 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530727 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530728 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530729 ((TempJavaCodeFragmentFilesContainer) curNode)
730 .getTempJavaCodeFragmentFiles()
731 .getBeanTempFiles(),
732 path));
733
734 methods.add(getGetterForOperationType());
Bharat saraswald532a4c2016-03-25 18:19:46 +0530735
Bharat saraswal64e7e232016-07-14 23:33:55 +0530736 // Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530737 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530738 getDataFromTempFileHandle(
739 HASH_CODE_IMPL_MASK,
740 ((TempJavaCodeFragmentFilesContainer) curNode)
741 .getTempJavaCodeFragmentFiles()
742 .getBeanTempFiles(),
743 path)
744 .replace(
745 NEW_LINE,
746 EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530747
748 //Equals method.
Bharat saraswal8beac342016-08-04 02:00:03 +0530749 if (isRootNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530750 methods.add(getEqualsMethodClose(
751 getEqualsMethodOpen(opParamClassName) +
752 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
753 ((TempJavaCodeFragmentFilesContainer) curNode)
754 .getTempJavaCodeFragmentFiles()
755 .getBeanTempFiles(),
756 path)));
Bharat saraswal8beac342016-08-04 02:00:03 +0530757 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530758 methods.add(getEqualsMethodClose(getEqualsMethodOpen(
759 getCapitalCase(DEFAULT) + className) +
760 getDataFromTempFileHandle(
761 EQUALS_IMPL_MASK,
762 ((TempJavaCodeFragmentFilesContainer) curNode)
763 .getTempJavaCodeFragmentFiles()
764 .getBeanTempFiles(),
765 path)));
Bharat saraswal8beac342016-08-04 02:00:03 +0530766 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530767 // To string method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530768 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
769 TO_STRING_IMPL_MASK,
770 ((TempJavaCodeFragmentFilesContainer)
771 curNode)
772 .getTempJavaCodeFragmentFiles()
773 .getBeanTempFiles(), path) +
774 getToStringMethodClose());
Bharat saraswald532a4c2016-03-25 18:19:46 +0530775
Bharat saraswale50edca2016-08-05 01:58:25 +0530776
Bharat saraswald532a4c2016-03-25 18:19:46 +0530777 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530778 throw new IOException(
779 "No data found in temporary java code fragment files " +
780 "for " + className +
781 " while impl class file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530782 }
783 } else {
784 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530785 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530786
Bharat saraswal8beac342016-08-04 02:00:03 +0530787 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530788 methods.add(getYangAugmentInfoImpl());
789 methods.add(getYangAugmentInfoMapImpl());
790 }
791 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530792 //Constructor.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530793 String constructor =
794 getConstructorStart(className, pluginConfig, isRootNode);
795 constructor = constructor +
796 getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
797 ((TempJavaCodeFragmentFilesContainer) curNode)
798 .getTempJavaCodeFragmentFiles()
799 .getBeanTempFiles(),
800 path);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530801
Bharat saraswal8beac342016-08-04 02:00:03 +0530802 if (isAttrPresent) {
803 constructor = constructor + getOperationTypeForConstructor();
804 }
805 if (isLeavesPresent) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530806 constructor =
807 constructor + getOperationAttributeForConstructor();
Bharat saraswal8beac342016-08-04 02:00:03 +0530808 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530809 methods.add(
810 constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
811 NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +0530812
813 // add is filter content match.
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530814 String augmentableSubTreeFiltering = "";
815 if (curNode instanceof YangAugmentableNode) {
816 augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
817 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530818
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530819 methods.add(getProcessSubtreeFilteringStart(curNode, pluginConfig)
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530820 + getProcessSubtreeFunctionBody(curNode)
821 + augmentableSubTreeFiltering
822 + getProcessSubTreeFilteringEnd());
823
824 if (curNode instanceof YangLeavesHolder) {
825 if (((YangLeavesHolder) curNode).getListOfLeaf() != null
826 && !((YangLeavesHolder) curNode).getListOfLeaf()
827 .isEmpty()) {
828 methods.add(getProcessLeafSubtreeFiltering(curNode,
829 pluginConfig,
830 path));
831 }
832 }
833
834
835 if (curNode instanceof YangLeavesHolder) {
836 if (((YangLeavesHolder) curNode).getListOfLeafList() != null
837 && !((YangLeavesHolder) curNode).getListOfLeafList()
838 .isEmpty()) {
839 methods.add(getProcessLeafListSubtreeFiltering(curNode,
840 pluginConfig,
841 path));
842 }
843 }
844
845 if (curNode.getChild() != null) {
846 methods.add(getProcessChildNodeSubtreeFiltering(curNode,
847 pluginConfig,
848 path));
849 }
850
851
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530852 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530853 throw new IOException(
854 "No data found in temporary java code fragment files for " +
855 className + " while impl class file generation");
Vinod Kumar S08710982016-03-03 19:55:30 +0530856 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530857
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530858 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
859 .getTempJavaCodeFragmentFiles()
860 .addDefaultConstructor(PROTECTED, DEFAULT,
861 pluginConfig, curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530862
Bharat saraswale50edca2016-08-05 01:58:25 +0530863 methods.add(builderMethod(className) + NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530864 if (isLeavesPresent) {
865 methods.add(getOperationAttributesGetters());
866 methods.add(getGettersForValueAndSelectLeaf());
867 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530868 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530869 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530870 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530871 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530872
Bharat saraswale304c252016-08-16 20:56:20 +0530873 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530874 }
875
876 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530877 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530878 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530879 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530880 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530881 * @param imports imports for file
882 * @return type def class file
883 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530884 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530885 public static File generateTypeDefClassFile(File file, YangNode curNode,
886 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530887 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530888
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530889 JavaFileInfoTranslator javaFileInfo =
890 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530891 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530892
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530893 // import
janani b703cfe42016-05-17 13:12:22 +0530894 String className = getCapitalCase(javaFileInfo.getJavaName());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530895 String path = javaFileInfo.getBaseCodeGenPath() +
896 javaFileInfo.getPackageFilePath();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530897 YangTypeDef typeDef = (YangTypeDef) curNode;
898 List<YangType<?>> types = typeDef.getTypeList();
899 YangType type = types.get(0);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530900 YangDataTypes yangDataTypes = type.getDataType();
Bharat saraswal8beac342016-08-04 02:00:03 +0530901 if (type.getDataType().equals(BINARY)) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530902 imports.add(IMPORT + JAVA_UTIL_OBJECTS_IMPORT_PKG + PERIOD +
903 JAVA_UTIL_IMPORT_BASE64_CLASS);
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530904 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530905
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530906 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
907 imports, path, pluginConfig);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530908
Bharat saraswal84366c52016-03-23 19:40:35 +0530909 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530910
Bharat saraswal64e7e232016-07-14 23:33:55 +0530911
912 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530913 try {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530914 insertDataIntoJavaFile(file, NEW_LINE + FOUR_SPACE_INDENTATION +
915 getDataFromTempFileHandle(ATTRIBUTES_MASK,
916 ((TempJavaCodeFragmentFilesContainer) curNode)
917 .getTempJavaCodeFragmentFiles()
918 .getTypeTempFiles(),
919 path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530920 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530921 throw new IOException(
922 "No data found in temporary java code fragment files for " +
923 className + " while type def class file " +
924 "generation");
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530925 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530926
Bharat saraswal64e7e232016-07-14 23:33:55 +0530927
928 //Default constructor.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530929 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
930 .getTempJavaCodeFragmentFiles()
931 .addDefaultConstructor(PRIVATE, EMPTY_STRING,
932 pluginConfig, curNode));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530933
Bharat saraswal022dae92016-03-04 20:08:09 +0530934 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530935
Bharat saraswal64e7e232016-07-14 23:33:55 +0530936 //Type constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530937 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530938 ((TempJavaCodeFragmentFilesContainer) curNode)
939 .getTempJavaCodeFragmentFiles()
940 .getTypeTempFiles(),
941 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530942
Bharat saraswal64e7e232016-07-14 23:33:55 +0530943
944 //Of method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530945 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530946 ((TempJavaCodeFragmentFilesContainer) curNode)
947 .getTempJavaCodeFragmentFiles()
948 .getTypeTempFiles(),
949 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530950
Bharat saraswal64e7e232016-07-14 23:33:55 +0530951 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530952 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530953 ((TempJavaCodeFragmentFilesContainer) curNode)
954 .getTempJavaCodeFragmentFiles()
955 .getTypeTempFiles(),
956 path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530957
Bharat saraswal64e7e232016-07-14 23:33:55 +0530958 // Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530959 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530960 getDataFromTempFileHandle(
961 HASH_CODE_IMPL_MASK,
962 ((TempJavaCodeFragmentFilesContainer) curNode)
963 .getTempJavaCodeFragmentFiles()
964 .getTypeTempFiles(),
965 path)
966 .replace(
967 NEW_LINE,
968 EMPTY_STRING)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530969
Bharat saraswal64e7e232016-07-14 23:33:55 +0530970
971 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530972 methods.add(getEqualsMethodClose(
973 getEqualsMethodOpen(className + EMPTY_STRING)
974 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
975 ((TempJavaCodeFragmentFilesContainer) curNode)
976 .getTempJavaCodeFragmentFiles()
977 .getTypeTempFiles(),
978 path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530979
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530980
Bharat saraswal64e7e232016-07-14 23:33:55 +0530981 //To string method.
Bharat saraswal8beac342016-08-04 02:00:03 +0530982 if (type.getDataType().equals(BINARY)) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530983 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo =
984 getQualifiedTypeInfoOfCurNode(curNode, getCapitalCase(
985 "binary"));
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530986
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530987 JavaAttributeInfo attr =
988 getAttributeInfoForTheData(qualifiedTypeInfo, "binary",
989 null, false, false);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530990 String attributeName = attr.getAttributeName();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530991 String bitsToStringMethod =
992 getOverRideString() + FOUR_SPACE_INDENTATION +
993 PUBLIC + SPACE + STRING_DATA_TYPE + SPACE + TO +
994 STRING_DATA_TYPE + OPEN_PARENTHESIS +
995 CLOSE_PARENTHESIS + SPACE +
996 OPEN_CURLY_BRACKET + NEW_LINE +
997 EIGHT_SPACE_INDENTATION + RETURN + SPACE +
998 BASE64 + PERIOD + GET_ENCODER +
999 OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
1000 PERIOD + ENCODE_TO_STRING + OPEN_PARENTHESIS +
1001 attributeName + CLOSE_PARENTHESIS +
1002 SEMI_COLAN + NEW_LINE +
1003 FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
1004 NEW_LINE;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301005 methods.add(bitsToStringMethod);
Bharat saraswal8beac342016-08-04 02:00:03 +05301006 } else if (type.getDataType().equals(BITS)) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301007 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo =
1008 getQualifiedTypeInfoOfCurNode(curNode,
1009 getCapitalCase(
1010 "bits"));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301011
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301012 JavaAttributeInfo attr =
1013 getAttributeInfoForTheData(qualifiedTypeInfo, "bits",
1014 null, false, false);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301015 String attributeName = attr.getAttributeName();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301016 String bitsToStringMethod =
1017 getOverRideString() + FOUR_SPACE_INDENTATION +
1018 PUBLIC + SPACE + STRING_DATA_TYPE + SPACE + TO +
1019 STRING_DATA_TYPE + OPEN_PARENTHESIS +
1020 CLOSE_PARENTHESIS + SPACE +
1021 OPEN_CURLY_BRACKET + NEW_LINE +
1022 EIGHT_SPACE_INDENTATION + RETURN + SPACE +
1023 attributeName + PERIOD + TO +
1024 STRING_DATA_TYPE + OPEN_PARENTHESIS +
1025 CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE +
1026 FOUR_SPACE_INDENTATION +
1027 CLOSE_CURLY_BRACKET + NEW_LINE;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301028 methods.add(bitsToStringMethod);
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +05301029 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301030 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
1031 TO_STRING_IMPL_MASK,
1032 ((TempJavaCodeFragmentFilesContainer)
1033 curNode)
1034 .getTempJavaCodeFragmentFiles()
1035 .getTypeTempFiles(), path) +
1036 getToStringMethodClose());
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +05301037 }
Bharat saraswal84366c52016-03-23 19:40:35 +05301038
Bharat saraswal64e7e232016-07-14 23:33:55 +05301039 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
1040
Bharat saraswal8beac342016-08-04 02:00:03 +05301041 //From string method.
Shankara-Huaweib7564772016-08-02 18:13:13 +05301042 if ((type.getDataType().equals(YangDataTypes.DERIVED))
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301043 && (((YangDerivedInfo) type.getDataTypeExtendedInfo())
1044 .getEffectiveBuiltInType()
Shankara-Huaweib7564772016-08-02 18:13:13 +05301045 .equals(YangDataTypes.IDENTITYREF))) {
1046 yangDataTypes = YangDataTypes.IDENTITYREF;
1047 }
1048
1049 if (type.getDataType().equals(YangDataTypes.IDENTITYREF)) {
1050 yangDataTypes = YangDataTypes.IDENTITYREF;
1051 }
1052
1053 if (!yangDataTypes.equals(YangDataTypes.IDENTITYREF)) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301054 methods.add(
1055 getFromStringMethodSignature(className, pluginConfig) +
1056 getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
1057 javaGenInfo
1058 .getTempJavaCodeFragmentFiles()
1059 .getTypeTempFiles(),
1060 path) +
1061 getFromStringMethodClose());
Shankara-Huaweib7564772016-08-02 18:13:13 +05301062 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301063
Bharat saraswal022dae92016-03-04 20:08:09 +05301064 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301065 throw new IOException(
1066 "No data found in temporary java code fragment files for " +
1067 className + " while type def class file " +
1068 "generation");
Bharat saraswal022dae92016-03-04 20:08:09 +05301069 }
Bharat saraswal022dae92016-03-04 20:08:09 +05301070
Bharat saraswal84366c52016-03-23 19:40:35 +05301071 for (String method : methods) {
1072 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301073 }
Bharat saraswal84366c52016-03-23 19:40:35 +05301074 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +05301075
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301076 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +05301077 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301078
1079 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301080 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301081 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301082 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301083 * @param curNode current YANG node
1084 * @param imports imports for file
1085 * @return type def class file
1086 * @throws IOException when fails to generate class file
1087 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301088 public static File generateUnionClassFile(File file, YangNode curNode,
1089 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301090 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301091
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301092 JavaFileInfoTranslator javaFileInfo =
1093 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301094 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301095
janani b703cfe42016-05-17 13:12:22 +05301096 String className = getCapitalCase(javaFileInfo.getJavaName());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301097 String path = javaFileInfo.getBaseCodeGenPath() +
1098 javaFileInfo.getPackageFilePath();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301099
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301100 TempJavaTypeFragmentFiles tempJavaTypeFragmentFiles =
1101 ((JavaCodeGeneratorInfo) curNode)
1102 .getTempJavaCodeFragmentFiles().getTypeTempFiles();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301103
1104 boolean isIntConflict = false;
1105 boolean isLongConflict = false;
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301106 boolean isShortConflict = false;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301107 JavaAttributeInfo intAttr = tempJavaTypeFragmentFiles.getIntAttribute();
1108 if (intAttr == null) {
1109 intAttr = tempJavaTypeFragmentFiles.getUIntAttribute();
1110 }
1111
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301112 JavaAttributeInfo longAttr =
1113 tempJavaTypeFragmentFiles.getLongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301114 if (longAttr == null) {
1115 longAttr = tempJavaTypeFragmentFiles.getULongAttribute();
1116 }
1117
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301118 JavaAttributeInfo shortAttr =
1119 tempJavaTypeFragmentFiles.getShortAttribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301120 if (shortAttr == null) {
1121 shortAttr = tempJavaTypeFragmentFiles.getUInt8Attribute();
1122 }
1123
Bharat saraswal64e7e232016-07-14 23:33:55 +05301124 if (intAttr != null) {
1125 isIntConflict = intAttr.isIntConflict();
1126 }
1127 if (longAttr != null) {
1128 isLongConflict = longAttr.isLongConflict();
1129 }
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301130 if (shortAttr != null) {
1131 isShortConflict = shortAttr.isShortConflict();
1132 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301133 if (isLongConflict) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301134 imports.add(tempJavaTypeFragmentFiles.getJavaImportData()
1135 .getBigIntegerImport());
Bharat saraswal64e7e232016-07-14 23:33:55 +05301136 sort(imports);
1137 }
1138
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301139 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
1140 imports, path, pluginConfig);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301141
1142 List<String> methods = new ArrayList<>();
1143
Bharat saraswal64e7e232016-07-14 23:33:55 +05301144
1145 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301146 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301147 if (isIntConflict) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301148 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1149 .addStaticAttributeIntRange(PRIVATE,
1150 tempJavaTypeFragmentFiles
1151 .getIntIndex() <
1152 tempJavaTypeFragmentFiles
1153 .getUIntIndex()));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301154 }
1155
1156 if (isLongConflict) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301157 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1158 .addStaticAttributeLongRange(PRIVATE,
1159 tempJavaTypeFragmentFiles
1160 .getLongIndex() <
1161 tempJavaTypeFragmentFiles
1162 .getULongIndex()));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301163 }
1164
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301165 if (isShortConflict) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301166 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1167 .addStaticAttributeShortRange(PRIVATE,
1168 tempJavaTypeFragmentFiles
1169 .getShortIndex() <
1170 tempJavaTypeFragmentFiles
1171 .getUInt8Index()));
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301172 }
1173
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301174 insertDataIntoJavaFile(file,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301175 NEW_LINE + FOUR_SPACE_INDENTATION +
1176 getDataFromTempFileHandle(
1177 ATTRIBUTES_MASK,
1178 ((TempJavaCodeFragmentFilesContainer) curNode)
1179 .getTempJavaCodeFragmentFiles()
1180 .getTypeTempFiles(),
1181 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301182 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301183 throw new IOException(
1184 "No data found in temporary java code fragment files for " +
1185 className + " while union class file generation");
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301186 }
1187
Bharat saraswal64e7e232016-07-14 23:33:55 +05301188
1189 //Default constructor.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301190 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
1191 .getTempJavaCodeFragmentFiles()
1192 .addDefaultConstructor(PRIVATE, EMPTY_STRING,
1193 pluginConfig, curNode));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301194
1195 try {
1196
Bharat saraswal64e7e232016-07-14 23:33:55 +05301197
1198 //Type constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301199 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301200 ((TempJavaCodeFragmentFilesContainer) curNode)
1201 .getTempJavaCodeFragmentFiles()
1202 .getTypeTempFiles(),
1203 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301204
Bharat saraswal64e7e232016-07-14 23:33:55 +05301205
1206 // Of string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301207 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301208 ((TempJavaCodeFragmentFilesContainer) curNode)
1209 .getTempJavaCodeFragmentFiles()
1210 .getTypeTempFiles(),
1211 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301212
Bharat saraswal64e7e232016-07-14 23:33:55 +05301213 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301214 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301215 ((TempJavaCodeFragmentFilesContainer) curNode)
1216 .getTempJavaCodeFragmentFiles()
1217 .getTypeTempFiles(),
1218 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301219
Bharat saraswal64e7e232016-07-14 23:33:55 +05301220
1221 //Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301222 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301223 getDataFromTempFileHandle(
1224 HASH_CODE_IMPL_MASK,
1225 ((TempJavaCodeFragmentFilesContainer) curNode)
1226 .getTempJavaCodeFragmentFiles()
1227 .getTypeTempFiles(),
1228 path).replace(
1229 NEW_LINE,
1230 EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301231
Bharat saraswal64e7e232016-07-14 23:33:55 +05301232 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301233 methods.add(getEqualsMethodClose(
1234 getEqualsMethodOpen(className + EMPTY_STRING)
1235 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
1236 ((TempJavaCodeFragmentFilesContainer) curNode)
1237 .getTempJavaCodeFragmentFiles()
1238 .getTypeTempFiles(),
1239 path)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301240
Bharat saraswal64e7e232016-07-14 23:33:55 +05301241
1242 //To string method.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301243 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301244 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
1245 ((TempJavaCodeFragmentFilesContainer) curNode)
1246 .getTempJavaCodeFragmentFiles()
1247 .getTypeTempFiles(),
1248 path) +
1249 getToStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301250
Bharat saraswal64e7e232016-07-14 23:33:55 +05301251
1252 //From string method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301253 methods.add(getFromStringMethodSignature(className, pluginConfig) +
1254 getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
1255 ((TempJavaCodeFragmentFilesContainer) curNode)
1256 .getTempJavaCodeFragmentFiles()
1257 .getTypeTempFiles(),
1258 path) +
1259 getFromStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301260
Bharat saraswal64e7e232016-07-14 23:33:55 +05301261 if (isIntConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301262 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301263 }
1264 if (isLongConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301265 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301266 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301267 if (isShortConflict && !isIntConflict) {
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301268 methods.add(getRangeValidatorMethodForUnion(INT));
1269 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301270
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301271 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301272 throw new IOException(
1273 "No data found in temporary java code fragment files for " +
1274 className + " while union class file generation");
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301275 }
1276
1277 for (String method : methods) {
1278 insertDataIntoJavaFile(file, method);
1279 }
1280 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1281
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301282 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301283 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301284
1285 /**
1286 * Generates class file for type enum.
1287 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301288 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301289 * @param curNode current YANG node
1290 * @return class file for type enum
1291 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301292 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301293 public static File generateEnumClassFile(File file, YangNode curNode)
1294 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301295
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301296 JavaFileInfoTranslator javaFileInfo =
1297 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301298 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301299
janani b703cfe42016-05-17 13:12:22 +05301300 String className = javaFileInfo.getJavaName();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301301 String path = javaFileInfo.getBaseCodeGenPath() +
1302 javaFileInfo.getPackageFilePath();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301303
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301304 initiateJavaFileGeneration(file, getCapitalCase(className),
1305 GENERATE_ENUM_CLASS, null, path,
1306 pluginConfig);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301307
1308 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301309 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301310 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301311 insertDataIntoJavaFile(file,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301312 trimAtLast(trimAtLast(
1313 getDataFromTempFileHandle(
1314 ENUM_IMPL_MASK, javaGenInfo
1315 .getTempJavaCodeFragmentFiles()
1316 .getEnumerationTempFiles(),
1317 path), COMMA),
1318 NEW_LINE) + SEMI_COLAN +
1319 NEW_LINE);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301320 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301321 throw new IOException(
1322 "No data found in temporary java code fragment files for " +
1323 getCapitalCase(className) + " while enum class " +
1324 "file generation");
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301325 }
1326
Bharat saraswal64e7e232016-07-14 23:33:55 +05301327
1328 // Add an attribute to get the enum's values.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301329 insertDataIntoJavaFile(file, getEnumsValueAttribute(
1330 getCapitalCase(className)));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301331
Bharat saraswal64e7e232016-07-14 23:33:55 +05301332 // Add a constructor for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301333 insertDataIntoJavaFile(file,
1334 getJavaDoc(TYPE_CONSTRUCTOR, className, false,
1335 pluginConfig, null)
1336 + getEnumsConstructor(
1337 getCapitalCase(className)) + NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301338
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301339 TempJavaEnumerationFragmentFiles enumFragFiles =
1340 ((TempJavaCodeFragmentFilesContainer) curNode)
1341 .getTempJavaCodeFragmentFiles()
1342 .getEnumerationTempFiles();
1343 insertDataIntoJavaFile(file,
1344 getEnumsOfMethod(className, enumFragFiles
1345 .getJavaAttributeForEnum(
1346 pluginConfig),
1347 enumFragFiles
1348 .getEnumSetJavaMap(),
1349 enumFragFiles
1350 .getEnumStringList(),
1351 pluginConfig) + NEW_LINE);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301352
Bharat saraswal64e7e232016-07-14 23:33:55 +05301353 // Add a getter method for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301354 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
1355 pluginConfig, null) +
1356 getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301357
1358 try {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301359 insertDataIntoJavaFile(file, getFromStringMethodSignature(
1360 getCapitalCase(className), pluginConfig) +
1361 getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
1362 ((TempJavaCodeFragmentFilesContainer) curNode)
1363 .getTempJavaCodeFragmentFiles()
1364 .getEnumerationTempFiles(),
1365 path) +
1366 getFromStringMethodClose());
Bharat saraswal250a7472016-05-12 13:16:57 +05301367 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301368 throw new IOException(
1369 "No data found in temporary java code fragment files for " +
1370 getCapitalCase(className) +
1371 " while enum class file generation");
Bharat saraswal250a7472016-05-12 13:16:57 +05301372 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301373
1374 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1375
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301376 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301377 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301378
1379 /**
1380 * Generates interface file for rpc.
1381 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301382 * @param file generated file
1383 * @param curNode current YANG node
1384 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301385 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301386 * @throws IOException when fails to generate class file
1387 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301388 public static File generateServiceInterfaceFile(File file, YangNode curNode,
1389 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301390 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301391
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301392 JavaFileInfoTranslator javaFileInfo =
1393 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301394
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301395 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles =
1396 ((JavaCodeGeneratorInfo) curNode)
1397 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
1398 String className = getCapitalCase(javaFileInfo.getJavaName()) +
1399 SERVICE_METHOD_STRING;
1400 String path = javaFileInfo.getBaseCodeGenPath() +
1401 javaFileInfo.getPackageFilePath();
1402 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports,
1403 curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301404
1405 List<String> methods = new ArrayList<>();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301406 JavaAttributeInfo rootAttribute =
1407 getCurNodeAsAttributeInTarget(curNode, curNode, false,
1408 tempJavaServiceFragmentFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301409
1410 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301411
Bharat saraswalaf413b82016-07-14 15:18:20 +05301412 methods.add(getAugmentsDataMethodForService(curNode) + NEW_LINE);
1413
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301414 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
1415 .getServiceTempFiles() != null) {
1416 JavaCodeGeneratorInfo javaGenInfo =
1417 (JavaCodeGeneratorInfo) curNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301418
1419 // Rpc methods
Bharat saraswal250a7472016-05-12 13:16:57 +05301420 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301421 javaGenInfo
1422 .getTempJavaCodeFragmentFiles()
1423 .getServiceTempFiles(),
1424 path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301425 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301426 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301427 throw new IOException(
1428 "No data found in temporary java code fragment files for " +
1429 className + " while rpc class file generation");
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301430 }
1431
1432 for (String method : methods) {
1433 insertDataIntoJavaFile(file, method);
1434 }
1435 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1436
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301437 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301438 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301439
1440 /**
1441 * Generates event file.
1442 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301443 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301444 * @param curNode current YANG node
1445 * @param imports imports for file
1446 * @throws IOException when fails to generate class file
1447 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301448 public static void generateEventFile(File file, YangNode curNode,
1449 List<String> imports)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301450 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301451
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301452 String className = getCapitalCase(
1453 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1454 .getJavaName())
Bharat saraswald14cbe82016-07-14 13:26:18 +05301455 + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301456
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301457 TempJavaEventFragmentFiles tempFiles =
1458 ((TempJavaCodeFragmentFilesContainer) curNode)
1459 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301460
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301461 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1462 .getBaseCodeGenPath()
1463 + ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1464 .getPackageFilePath();
1465 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode,
1466 className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301467 try {
1468 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301469 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK,
1470 tempFiles, path),
1471 COMMA) + FOUR_SPACE_INDENTATION +
1472 CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301473
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301474 insertDataIntoJavaFile(file,
1475 getDataFromTempFileHandle(EVENT_METHOD_MASK,
1476 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301477
1478 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301479 throw new IOException(
1480 "No data found in temporary java code fragment files for " +
1481 className + " while event class file generation");
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301482 }
1483
1484 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1485 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301486 }
1487
1488 /**
1489 * Generates event listener file.
1490 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301491 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301492 * @param curNode current YANG node
1493 * @param imports imports for file
1494 * @throws IOException when fails to generate class file
1495 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301496 public static void generateEventListenerFile(File file, YangNode curNode,
1497 List<String> imports)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301498 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301499
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301500 String className = getCapitalCase(
1501 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1502 .getJavaName()) + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301503
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301504 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE,
1505 imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301506 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301507 validateLineLength(file);
1508 }
1509
1510 /**
1511 * Generates event subject's file.
1512 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301513 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301514 * @param curNode current YANG node
1515 * @throws IOException when fails to do IO exceptions
1516 */
1517 public static void generateEventSubjectFile(File file, YangNode curNode)
1518 throws IOException {
1519
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301520 String className = getCapitalCase(
1521 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1522 .getJavaName()) + EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301523
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301524 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null,
1525 curNode, className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301526
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301527 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1528 .getBaseCodeGenPath()
1529 + ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1530 .getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301531
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301532 TempJavaEventFragmentFiles tempFiles =
1533 ((TempJavaCodeFragmentFilesContainer) curNode)
1534 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301535
1536 insertDataIntoJavaFile(file, NEW_LINE);
1537 try {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301538 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
1539 EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301540
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301541 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
1542 EVENT_SUBJECT_GETTER_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301543
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301544 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
1545 EVENT_SUBJECT_SETTER_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301546
1547 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301548 throw new IOException(
1549 "No data found in temporary java code fragment files for " +
1550 className + " while event class file generation");
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301551 }
1552
1553 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1554 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301555 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301556}