blob: 7bc490fdfcbc63bdfb38345a009fdafe3f1ef2bc [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
Bharat saraswal9fab16b2016-09-23 23:27:24 +053019import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053020import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Bharat saraswal8beac342016-08-04 02:00:03 +053021import org.onosproject.yangutils.datamodel.YangChoice;
Shankara-Huaweib7564772016-08-02 18:13:13 +053022import org.onosproject.yangutils.datamodel.YangDerivedInfo;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053023import org.onosproject.yangutils.datamodel.YangEnumeration;
Shankara-Huaweia1039e52016-07-14 16:53:09 +053024import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053025import org.onosproject.yangutils.datamodel.YangNode;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053026import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswal039f59c2016-07-14 21:57:13 +053027import org.onosproject.yangutils.datamodel.YangTypeDef;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053028import org.onosproject.yangutils.datamodel.YangUnion;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053029import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswalaf413b82016-07-14 15:18:20 +053030import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswald14cbe82016-07-14 13:26:18 +053031import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053032import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053033import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053034import org.onosproject.yangutils.translator.tojava.JavaImportData;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053035import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053036import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswal039f59c2016-07-14 21:57:13 +053037import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053038import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +053039import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053040
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053041import java.io.File;
42import java.io.IOException;
43import java.util.ArrayList;
44import java.util.List;
45
46import static java.util.Collections.sort;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053047import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
48import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
50import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
51import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
52import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
53import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
54import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
55import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
56import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
57import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
58import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
59import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
60import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
61import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
62import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
63import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
64import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
65import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
68import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
69import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
73import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
74import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
75import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
76import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
77import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
78import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
79import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
80import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
81import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053082import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053083import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isGetSetOfRootNodeRequired;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053084import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053085import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
86import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053087import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053088import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getSetValueParaForUnionClass;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053089import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
90import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053091import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_INT_VALUE;
92import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_STRING_VALUE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053093import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.builderMethod;
Bharat saraswalb41904b2016-10-20 19:22:36 +053094import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.generateBuildMethodForSubTree;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053095import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
96import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
97import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053098import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassFromString;
99import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassToString;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530101import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfValueMethod;
103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
105import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumSignature;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRangeValidatorMethodForUnion;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForSelectLeaf;
114import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
Bharat saraswal94844d62016-10-13 13:28:03 +0530115import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringForEnumClass;
116import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringForType;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530117import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
118import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530119import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getUnionToStringMethod;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530120import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoImpl;
121import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoInterface;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530122import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isLeafValueSetInterface;
123import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isSelectLeafSetInterface;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530124import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.setSelectLeafSetInterface;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530125import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getInterfaceLeafIdEnumMethods;
Bharat saraswal94844d62016-10-13 13:28:03 +0530126import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIsSelectLeafSet;
127import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIsValueLeafSet;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530128import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530129import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530130import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getAugmentableSubTreeFiltering;
131import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessChildNodeSubtreeFiltering;
132import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafListSubtreeFiltering;
133import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafSubtreeFiltering;
134import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubTreeFilteringEnd;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530135import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubTreeForChoiceInterface;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530136import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFilteringStart;
137import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFunctionBody;
138import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.addDefaultConstructor;
139import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
140import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getTypeFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530141import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530142import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530143import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_CLASS;
144import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_INTERFACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530145import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530146import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530147import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530148import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530149import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530150import static org.onosproject.yangutils.utils.UtilConstants.ENUM_CLASS;
151import static org.onosproject.yangutils.utils.UtilConstants.EVENT_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530152import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530153import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530154import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530155import static org.onosproject.yangutils.utils.UtilConstants.IMPL_CLASS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530156import static org.onosproject.yangutils.utils.UtilConstants.INT;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530157import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530158import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +0530159import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530160import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530161import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530162import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530163import static org.onosproject.yangutils.utils.UtilConstants.RPC_CLASS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530164import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530165import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530166import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_CLASS;
167import static org.onosproject.yangutils.utils.UtilConstants.UNION_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530168import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530169import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswal94844d62016-10-13 13:28:03 +0530170import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530171import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
172import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530173import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530174import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530175import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
176
Vinod Kumar S08710982016-03-03 19:55:30 +0530177/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530178 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530179 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530180public final class JavaFileGenerator {
181
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530182 // No instantiation
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530183 private JavaFileGenerator() {
184 }
185
186 /**
187 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530188 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530189 * @param file file
190 * @param imports imports for the file
191 * @param curNode current YANG node
192 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530193 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530194 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530195 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530196 public static File generateInterfaceFile(File file, List<String> imports,
197 YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530198 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530199 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530200
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530201 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530202 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530203
204 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530205 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530206 path = fileInfo.getPluginConfig().getCodeGenDir() +
207 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530208 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530209 path = fileInfo.getBaseCodeGenPath() +
210 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530211 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530212
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530213 String className = getCapitalCase(fileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530214
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530215 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530216 YangLeavesHolder leavesHolder;
217 if (curNode instanceof YangLeavesHolder) {
218 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530219 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530220 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530221 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530222 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530223
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530224 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode,
225 className);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530226
227 // Generate ENUM interface
Bharat saraswal94844d62016-10-13 13:28:03 +0530228 if (curNode instanceof RpcNotificationContainer) {
229 insertDataIntoJavaFile(file, getOperationTypeEnum());
230 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530231 List<String> methods = new ArrayList<>();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530232
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530233 //Add only for choice class
234 if (curNode instanceof YangChoice) {
235 insertDataIntoJavaFile(file, getProcessSubTreeForChoiceInterface(
236 curNode));
237 }
238
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530239 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530240 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530241 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530242 //Leaf identifier enum.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530243 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530244 insertDataIntoJavaFile(file, getInterfaceLeafIdEnumSignature(
245 className) + trimAtLast(replaceLast(
246 getDataFromTempFileHandle(
247 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
248 getBeanFiles(curNode), path),
249 COMMA, SEMI_COLON), NEW_LINE) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530250 getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530251 }
252
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530253 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530254 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530255 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
256 GETTER_FOR_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530257 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530258 throw new IOException(getErrorMsg(className, INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530259 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530260 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530261
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530262 if (curNode instanceof YangAugmentableNode &&
263 !(curNode instanceof YangChoice)) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530264 methods.add(getYangAugmentInfoInterface());
Bharat saraswal8beac342016-08-04 02:00:03 +0530265 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530266
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530267 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530268 methods.add(isLeafValueSetInterface());
Bharat saraswal94844d62016-10-13 13:28:03 +0530269 if (curNode.isOpTypeReq()) {
270 methods.add(isSelectLeafSetInterface());
271 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530272 }
273 for (String method : methods) {
274 insertDataIntoJavaFile(file, method);
275 }
Bharat saraswale304c252016-08-16 20:56:20 +0530276 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530277 }
278
279 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530280 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530281 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530282 * @param file file
283 * @param curNode current YANG node
284 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530285 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530286 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530287 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530288 public static File generateBuilderInterfaceFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530289 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530290 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530291
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530292 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530293 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530294
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530295 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530296 YangLeavesHolder leavesHolder;
Bharat saraswal94844d62016-10-13 13:28:03 +0530297 if (curNode instanceof YangLeavesHolder &&
298 curNode.isOpTypeReq()) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530299 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530300 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530301 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530302 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530303 }
304
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530305 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530306 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530307 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530308 path = fileInfo.getPluginConfig().getCodeGenDir() +
309 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530310 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530311 path = fileInfo.getBaseCodeGenPath() +
312 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530313 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530314
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530315 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode,
316 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530317 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530318 if (attrPresent) {
Bharat saraswald532a4c2016-03-25 18:19:46 +0530319 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530320 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530321 methods.add(getDataFromTempFileHandle(
322 GETTER_FOR_INTERFACE_MASK,
323 getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530324
325 //Setter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530326 methods.add(getDataFromTempFileHandle(
327 SETTER_FOR_INTERFACE_MASK,
328 getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530329
330 //Add to list method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530331 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
332 ADD_TO_LIST_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530333 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530334 throw new IOException(getErrorMsg(className, BUILDER_INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530335 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530336 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530337
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530338 if (curNode instanceof YangAugmentableNode &&
339 !(curNode instanceof YangChoice)) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530340 methods.add(getAddAugmentInfoMethodInterface(className + BUILDER));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530341 methods.add(getYangAugmentInfoInterface());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530342 }
343
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530344 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530345 methods.add(setSelectLeafSetInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530346 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530347 //Add build method to builder interface file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530348 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
349 .getTempJavaCodeFragmentFiles()
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530350 .addBuildMethodForInterface());
Bharat saraswal64e7e232016-07-14 23:33:55 +0530351
352 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530353 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530354 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530355 }
356
Bharat saraswal84366c52016-03-23 19:40:35 +0530357 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale304c252016-08-16 20:56:20 +0530358 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530359 }
360
361 /**
362 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530363 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530364 * @param file file
365 * @param curNode current YANG node
366 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530367 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530368 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530369 */
Bharat saraswald14cbe82016-07-14 13:26:18 +0530370 public static File generateBuilderClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530371 boolean attrPresent)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530372 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530373
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530374 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530375 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530376
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530377 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530378 YangLeavesHolder leavesHolder;
379 if (curNode instanceof YangLeavesHolder) {
380 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530381 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530382 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530383 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530384 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530385
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530386 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530387 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530388 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530389 path = fileInfo.getPluginConfig().getCodeGenDir() +
390 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530391 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530392 path = fileInfo.getBaseCodeGenPath() +
393 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530394 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530395
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530396 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode,
397 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530398 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530399 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530400
401 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530402 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530403 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
404 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530405 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530406 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530407 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530408 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530409 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530410 methods.add(getDataFromTempFileHandle(
411 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530412 // Setter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530413 methods.add(getDataFromTempFileHandle(
414 SETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswald14cbe82016-07-14 13:26:18 +0530415
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530416 //Add to list impl method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530417 methods.add(getDataFromTempFileHandle(
418 ADD_TO_LIST_IMPL_MASK, getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530419
Bharat saraswald14cbe82016-07-14 13:26:18 +0530420 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530421
Bharat saraswal8beac342016-08-04 02:00:03 +0530422 //Add operation attribute methods.
Bharat saraswal94844d62016-10-13 13:28:03 +0530423 if (leavesPresent && curNode.isOpTypeReq()) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530424 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal94844d62016-10-13 13:28:03 +0530425 methods.add(getSetterForSelectLeaf(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530426 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530427 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530428 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530429 }
430 } else {
431 insertDataIntoJavaFile(file, NEW_LINE);
432 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530433
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530434 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530435 methods.add(getAddAugmentInfoMethodImpl(className + BUILDER));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530436 methods.add(getYangAugmentInfoImpl());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530437 }
438
Bharat saraswal64e7e232016-07-14 23:33:55 +0530439 // Add default constructor and build method impl.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530440 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
441 .getTempJavaCodeFragmentFiles()
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530442 .addBuildMethodImpl());
Bharat saraswalb41904b2016-10-20 19:22:36 +0530443 if (curNode.isOpTypeReq()) {
444 methods.add(generateBuildMethodForSubTree(curNode));
Bharat saraswal0663aff2016-10-18 23:16:14 +0530445 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530446 methods.add(addDefaultConstructor(curNode, PUBLIC, BUILDER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530447
448 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530449 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530450 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530451 }
Bharat saraswald14cbe82016-07-14 13:26:18 +0530452 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswale304c252016-08-16 20:56:20 +0530453 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530454 }
455
456 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530457 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530458 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530459 * @param file file
460 * @param curNode current YANG node
461 * @param attrPresent if any attribute is present or not
462 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530463 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530464 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530465 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530466 public static File generateDefaultClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530467 boolean attrPresent,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530468 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530469 throws IOException {
470
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530471 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530472 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530473 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530474 YangLeavesHolder leavesHolder;
475 if (curNode instanceof YangLeavesHolder) {
476 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530477 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530478 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530479 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530480 }
481
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530482 boolean rootNode = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530483
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530484 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530485 String opParamClassName = className;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530486 String name = DEFAULT_CAPS + className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530487 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530488 if (curNode instanceof RpcNotificationContainer) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530489 opParamClassName = className + OP_PARAM;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530490 name = opParamClassName;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530491 rootNode = true;
492 path = fileInfo.getPluginConfig().getCodeGenDir() +
493 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530494 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530495 path = fileInfo.getBaseCodeGenPath() +
496 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530497 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530498
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530499 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode,
500 className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530501
Bharat saraswal022dae92016-03-04 20:08:09 +0530502 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530503 if (attrPresent) {
504 addDefaultClassAttributeInfo(file, curNode, className,
505 opParamClassName, path, methods,
Bharat saraswal94844d62016-10-13 13:28:03 +0530506 rootNode);
Bharat saraswald532a4c2016-03-25 18:19:46 +0530507 } else {
508 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530509 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530510
Bharat saraswal8beac342016-08-04 02:00:03 +0530511 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530512 methods.add(getYangAugmentInfoImpl());
Bharat saraswal8beac342016-08-04 02:00:03 +0530513 }
514 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530515 //Constructor.
Bharat saraswal94844d62016-10-13 13:28:03 +0530516 String constructor = getConstructorStart(className, rootNode) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530517 getDataFromTempFileHandle(
Bharat saraswal94844d62016-10-13 13:28:03 +0530518 CONSTRUCTOR_IMPL_MASK, getBeanFiles(curNode), path)
519 + methodClose(FOUR_SPACE);
520 methods.add(constructor);
521 if (curNode.isOpTypeReq()) {
522 String augmentableSubTreeFiltering = EMPTY_STRING;
523 if (curNode instanceof YangAugmentableNode) {
524 // add is filter content match.
525 augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530526 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530527 methods.add(getProcessSubtreeFilteringStart(curNode) +
Bharat saraswal94844d62016-10-13 13:28:03 +0530528 getProcessSubtreeFunctionBody(curNode) +
529 augmentableSubTreeFiltering +
Bharat saraswalb41904b2016-10-20 19:22:36 +0530530 getProcessSubTreeFilteringEnd(name));
Bharat saraswal94844d62016-10-13 13:28:03 +0530531
532 if (curNode instanceof YangLeavesHolder) {
533 if (((YangLeavesHolder) curNode).getListOfLeaf() != null &&
534 !((YangLeavesHolder) curNode).getListOfLeaf().isEmpty()) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530535 methods.add(getProcessLeafSubtreeFiltering(curNode,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530536 path));
Bharat saraswal94844d62016-10-13 13:28:03 +0530537 }
538 if (((YangLeavesHolder) curNode).getListOfLeafList() != null &&
539 !((YangLeavesHolder) curNode).getListOfLeafList().isEmpty()) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530540 methods.add(getProcessLeafListSubtreeFiltering(curNode,
Bharat saraswal94844d62016-10-13 13:28:03 +0530541 path));
542 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530543 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530544
Bharat saraswal94844d62016-10-13 13:28:03 +0530545 if (curNode.getChild() != null) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530546 methods.add(getProcessChildNodeSubtreeFiltering(curNode,
Bharat saraswal94844d62016-10-13 13:28:03 +0530547 path));
548 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530549 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530550 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530551 throw new IOException(getErrorMsg(className, IMPL_CLASS));
Vinod Kumar S08710982016-03-03 19:55:30 +0530552 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530553
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530554 methods.add(addDefaultConstructor(curNode, PROTECTED, DEFAULT));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530555
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530556 methods.add(builderMethod(className));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530557 if (leavesPresent) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530558 methods.add(getIsValueLeafSet());
559 if (curNode.isOpTypeReq()) {
560 methods.add(getIsSelectLeafSet());
561 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530562 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530563 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530564 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530565 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530566 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530567
Bharat saraswale304c252016-08-16 20:56:20 +0530568 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530569 }
570
571 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530572 * Add methods related to attributes.
573 *
574 * @param file file
575 * @param curNode current YANG node
576 * @param className name of the class
577 * @param opParamClassName op param class name
578 * @param path file path
579 * @param methods list of methods string
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530580 * @param rootNode flag indicating whether node is root node
581 * @throws IOException a violation in IO rule
582 */
583 private static void addDefaultClassAttributeInfo(File file, YangNode curNode,
584 String className,
585 String opParamClassName,
586 String path, List<String> methods,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530587 boolean rootNode)
588 throws IOException {
589
590 //Add attribute strings.
591 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530592 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
593 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530594 } catch (IOException e) {
595 throw new IOException(getErrorMsg(className, IMPL_CLASS));
596 }
597
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530598 try {
599 //Getter methods.
600 methods.add(getDataFromTempFileHandle(
601 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
602
603 // Hash code method.
604 methods.add(getHashCodeMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530605 getHashCodeMethodOpen() + getDataFromTempFileHandle(
606 HASH_CODE_IMPL_MASK, getBeanFiles(curNode), path)
607 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530608
609 //Equals method.
610 if (rootNode) {
611 methods.add(getEqualsMethodClose(
612 getEqualsMethodOpen(opParamClassName) +
613 getDataFromTempFileHandle(
614 EQUALS_IMPL_MASK,
615 getBeanFiles(curNode), path)));
616 } else {
617 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530618 getEqualsMethodOpen(DEFAULT_CAPS + className) +
619 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
620 getBeanFiles(curNode),
621 path)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530622 }
623 // To string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530624 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
625 TO_STRING_IMPL_MASK, getBeanFiles(curNode), path) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530626 getToStringMethodClose());
627 } catch (IOException e) {
628 throw new IOException(getErrorMsg(className, IMPL_CLASS));
629 }
630 }
631
632 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530633 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530634 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530635 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530636 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530637 * @param imports imports for file
638 * @return type def class file
639 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530640 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530641 public static File generateTypeDefClassFile(File file, YangNode curNode,
642 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530643 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530644
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530645 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530646 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530647 // import
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530648 String className = getCapitalCase(fileInfo.getJavaName());
649 String path = fileInfo.getBaseCodeGenPath() +
650 fileInfo.getPackageFilePath();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530651 YangTypeDef typeDef = (YangTypeDef) curNode;
652 List<YangType<?>> types = typeDef.getTypeList();
653 YangType type = types.get(0);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530654 YangDataTypes yangDataTypes = type.getDataType();
Bharat saraswal022dae92016-03-04 20:08:09 +0530655
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530656 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530657 imports, path);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530658
Bharat saraswal84366c52016-03-23 19:40:35 +0530659 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530660
Bharat saraswal64e7e232016-07-14 23:33:55 +0530661 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530662 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530663 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
664 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530665 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530666 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530667 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530668
Bharat saraswal64e7e232016-07-14 23:33:55 +0530669 //Default constructor.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530670 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530671
Bharat saraswal022dae92016-03-04 20:08:09 +0530672 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530673
Bharat saraswal64e7e232016-07-14 23:33:55 +0530674 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530675 methods.add(getDataFromTempFileHandle(
676 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530677
678 //Of method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530679 methods.add(getDataFromTempFileHandle(
680 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530681
Bharat saraswal64e7e232016-07-14 23:33:55 +0530682 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530683 methods.add(getDataFromTempFileHandle(
684 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530685
Bharat saraswal64e7e232016-07-14 23:33:55 +0530686 // Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530687 methods.add(getHashCodeMethodClose(
688 getHashCodeMethodOpen() + getDataFromTempFileHandle(
689 HASH_CODE_IMPL_MASK, getTypeFiles(curNode), path)
690 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530691
692 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530693 methods.add(getEqualsMethodClose(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530694 getEqualsMethodOpen(className + EMPTY_STRING) +
695 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
696 getTypeFiles(curNode), path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530697
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530698 // To string method.
Bharat saraswal0663aff2016-10-18 23:16:14 +0530699 addTypedefToString(curNode, methods);
Bharat saraswal84366c52016-03-23 19:40:35 +0530700
Bharat saraswal64e7e232016-07-14 23:33:55 +0530701 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
702
Bharat saraswal8beac342016-08-04 02:00:03 +0530703 //From string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530704 if (type.getDataType() == DERIVED &&
705 ((YangDerivedInfo) type.getDataTypeExtendedInfo())
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530706 .getEffectiveBuiltInType()
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530707 == IDENTITYREF) {
708 yangDataTypes = IDENTITYREF;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530709 }
710
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530711 if (type.getDataType() == IDENTITYREF) {
712 yangDataTypes = IDENTITYREF;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530713 }
714
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530715 if (yangDataTypes != IDENTITYREF) {
716 methods.add(getFromStringMethodSignature(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530717 getDataFromTempFileHandle(
718 FROM_STRING_IMPL_MASK,
719 javaGenInfo.getTempJavaCodeFragmentFiles()
720 .getTypeTempFiles(), path) +
721 getFromStringMethodClose());
Shankara-Huaweib7564772016-08-02 18:13:13 +0530722 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530723 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530724 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswal022dae92016-03-04 20:08:09 +0530725 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530726
Bharat saraswal84366c52016-03-23 19:40:35 +0530727 for (String method : methods) {
728 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530729 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530730 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530731
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530732 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +0530733 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530734
735 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530736 * Adds typedef to string method.
737 *
738 * @param curNode current node
739 * @param methods list of methods string
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530740 */
741 private static void addTypedefToString(YangNode curNode,
Bharat saraswalb41904b2016-10-20 19:22:36 +0530742 List<String> methods) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530743 //To string method.
Bharat saraswal94844d62016-10-13 13:28:03 +0530744
745 List<YangType<?>> types = ((YangTypeDef) curNode).getTypeList();
746 YangType type = types.get(0);
Bharat saraswal94844d62016-10-13 13:28:03 +0530747 methods.add(getToStringForType(getCamelCase(type.getDataTypeName(),
Bharat saraswal0663aff2016-10-18 23:16:14 +0530748 null), type));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530749 }
750
751 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530752 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530753 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530754 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530755 * @param curNode current YANG node
756 * @param imports imports for file
757 * @return type def class file
758 * @throws IOException when fails to generate class file
759 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530760 public static File generateUnionClassFile(File file, YangNode curNode,
761 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530762 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530763
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530764 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530765 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530766
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530767 String className = getCapitalCase(fileInfo.getJavaName());
768 String path = fileInfo.getBaseCodeGenPath() +
769 fileInfo.getPackageFilePath();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530770
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530771 TempJavaTypeFragmentFiles tempFiles =
772 ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
773 .getTypeTempFiles();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530774
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530775 boolean intConflict = false;
776 boolean longConflict = false;
777 boolean shortConflict = false;
778 JavaAttributeInfo intAttr = tempFiles.getIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530779 if (intAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530780 intAttr = tempFiles.getUIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530781 }
782
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530783 JavaAttributeInfo longAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530784 tempFiles.getLongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530785 if (longAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530786 longAttr = tempFiles.getULongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530787 }
788
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530789 JavaAttributeInfo shortAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530790 tempFiles.getShortAttribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530791 if (shortAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530792 shortAttr = tempFiles.getUInt8Attribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530793 }
794
Bharat saraswal64e7e232016-07-14 23:33:55 +0530795 if (intAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530796 intConflict = intAttr.isIntConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530797 }
798 if (longAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530799 longConflict = longAttr.isLongConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530800 }
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530801 if (shortAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530802 shortConflict = shortAttr.isShortConflict();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530803 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530804 if (longConflict) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530805 String impt = tempFiles.getJavaImportData().getBigIntegerImport();
806 if (!imports.contains(impt)) {
807 imports.add(impt);
808 sort(imports);
809 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530810 }
811
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530812 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530813 imports, path);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530814
815 List<String> methods = new ArrayList<>();
816
Bharat saraswal64e7e232016-07-14 23:33:55 +0530817 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530818 try {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530819 addUnionClassAttributeInfo(file, curNode, intConflict,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530820 longConflict, shortConflict, path, tempFiles);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530821 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530822 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530823 }
824
Bharat saraswal64e7e232016-07-14 23:33:55 +0530825 //Default constructor.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530826 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530827
828 try {
829
Bharat saraswal64e7e232016-07-14 23:33:55 +0530830 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530831 methods.add(getDataFromTempFileHandle(
832 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530833
834 // Of string method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530835 methods.add(getDataFromTempFileHandle(
836 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530837
Bharat saraswal64e7e232016-07-14 23:33:55 +0530838 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530839 methods.add(getDataFromTempFileHandle(
840 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530841
842 //Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530843 methods.add(getHashCodeMethodClose(
844 getHashCodeMethodOpen() +
845 getDataFromTempFileHandle(
846 HASH_CODE_IMPL_MASK, getTypeFiles(curNode),
847 path).replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530848
Bharat saraswal64e7e232016-07-14 23:33:55 +0530849 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530850 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530851 getEqualsMethodOpen(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530852 getDataFromTempFileHandle(
853 EQUALS_IMPL_MASK, getTypeFiles(curNode),
854 path)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530855
856 //To string method.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530857 methods.add(getUnionToStringMethod(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530858 ((YangUnion) curNode).getTypeList()));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530859
Bharat saraswal64e7e232016-07-14 23:33:55 +0530860 //From string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530861 methods.add(getFromStringMethodSignature(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530862 getDataFromTempFileHandle(
863 FROM_STRING_IMPL_MASK,
864 getTypeFiles(curNode), path) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530865 getFromStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530866
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530867 if (intConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530868 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530869 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530870 if (longConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530871 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530872 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530873 if (shortConflict && !intConflict) {
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530874 methods.add(getRangeValidatorMethodForUnion(INT));
875 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530876 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530877 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530878 }
879
880 for (String method : methods) {
881 insertDataIntoJavaFile(file, method);
882 }
883 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
884
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530885 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530886 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530887
888 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530889 * Adds union class attribute information.
890 *
891 * @param file generated file
892 * @param curNode current YANG node
893 * @param intConflict flag to indicate if there is a conflict in int
894 * @param longConflict flag to indicate if there is a conflict in long
895 * @param shortConflict flag to indicate if there is a conflict in short
896 * @param path file path
897 * @param tempFiles temp java type fragment files
898 * @throws IOException a violation in IO rule
899 */
900 private static void addUnionClassAttributeInfo(File file,
901 YangNode curNode,
902 boolean intConflict,
903 boolean longConflict,
904 boolean shortConflict,
905 String path,
906 TempJavaTypeFragmentFiles tempFiles)
907 throws IOException {
908 if (intConflict) {
909 insertDataIntoJavaFile(file, JavaCodeSnippetGen
910 .addStaticAttributeIntRange(PRIVATE,
911 tempFiles.getIntIndex() <
912 tempFiles.getUIntIndex()));
913 }
914
915 if (longConflict) {
916 insertDataIntoJavaFile(file, JavaCodeSnippetGen
917 .addStaticAttributeLongRange(PRIVATE,
918 tempFiles.getLongIndex() <
919 tempFiles.getULongIndex()));
920 }
921
922 if (shortConflict) {
923 insertDataIntoJavaFile(file, JavaCodeSnippetGen
924 .addStaticAttributeShortRange(PRIVATE,
925 tempFiles.getShortIndex() <
926 tempFiles.getUInt8Index()));
927 }
928
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530929 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
930 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530931 insertDataIntoJavaFile(file, getSetValueParaForUnionClass());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530932 }
933
934 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530935 * Generates class file for type enum.
936 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530937 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530938 * @param curNode current YANG node
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530939 * @param imports import list
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530940 * @return class file for type enum
941 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530942 */
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530943 public static File generateEnumClassFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530944 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530945
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530946 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530947 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530948
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530949 String className = fileInfo.getJavaName();
950 String path = fileInfo.getBaseCodeGenPath() +
951 fileInfo.getPackageFilePath();
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530952 TempJavaEnumerationFragmentFiles enumFile = ((JavaCodeGeneratorInfo)
953 curNode).getTempJavaCodeFragmentFiles().getEnumTempFiles();
954 JavaImportData data = enumFile.getJavaImportData();
955 if (!enumFile.isEnumClass()) {
956 imports.add(data.getImportForToBitSet());
957 imports.add(data.getImportForPattern());
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530958 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530959
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530960 initiateJavaFileGeneration(file, getCapitalCase(className),
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530961 GENERATE_ENUM_CLASS, imports, path);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530962
963 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530964 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530965 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530966 String[] remove = {COMMA, NEW_LINE};
967 insertDataIntoJavaFile(file, trimAtLast(getDataFromTempFileHandle(
968 ENUM_IMPL_MASK, javaGenInfo.getTempJavaCodeFragmentFiles()
969 .getEnumTempFiles(), path), remove) +
970 signatureClose());
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530971 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530972 throw new IOException(getErrorMsg(getCapitalCase(className),
973 ENUM_CLASS));
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530974 }
975
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530976 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530977 // Add an attribute to get the enum's values.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530978 insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530979
Bharat saraswal64e7e232016-07-14 23:33:55 +0530980 // Add a constructor for enum.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530981 //TODO: generate javadoc for method.
982 insertDataIntoJavaFile(file, getEnumsConstructor(getCapitalCase(className)) +
983 NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +0530984
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530985 insertDataIntoJavaFile(file,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530986 getEnumsOfValueMethod(className,
987 (YangEnumeration) curNode,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530988 ENUM_METHOD_INT_VALUE));
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530989 insertDataIntoJavaFile(file,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530990 getEnumsOfValueMethod(className,
991 (YangEnumeration) curNode,
992 ENUM_METHOD_STRING_VALUE));
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530993
Bharat saraswal64e7e232016-07-14 23:33:55 +0530994 // Add a getter method for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530995 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530996 null) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530997 getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530998
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530999 if (!enumFile.isEnumClass()) {
1000 insertDataIntoJavaFile(file, getBitSetEnumClassFromString
1001 (getCapitalCase(className)));
1002 insertDataIntoJavaFile(file, getBitSetEnumClassToString(
1003 getCapitalCase(className), (YangEnumeration) curNode));
Bharat saraswal94844d62016-10-13 13:28:03 +05301004 } else {
1005 insertDataIntoJavaFile(file, getToStringForEnumClass());
Bharat saraswal250a7472016-05-12 13:16:57 +05301006 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301007
1008 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1009
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301010 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301011 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301012
1013 /**
1014 * Generates interface file for rpc.
1015 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301016 * @param file generated file
1017 * @param curNode current YANG node
1018 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301019 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301020 * @throws IOException when fails to generate class file
1021 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301022 public static File generateServiceInterfaceFile(File file, YangNode curNode,
1023 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301024 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301025
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301026 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301027 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301028
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301029 TempJavaServiceFragmentFiles tempFiles =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301030 ((JavaCodeGeneratorInfo) curNode)
1031 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301032 String className = getCapitalCase(fileInfo.getJavaName()) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301033 SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301034 String path = fileInfo.getBaseCodeGenPath() +
1035 fileInfo.getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301036 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports,
1037 curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301038
1039 List<String> methods = new ArrayList<>();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301040 JavaAttributeInfo rootAttribute =
1041 getCurNodeAsAttributeInTarget(curNode, curNode, false,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301042 tempFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301043
1044 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301045
Bharat saraswal1edde622016-09-06 10:18:04 +05301046 if (isGetSetOfRootNodeRequired(curNode)) {
1047 //Getter methods.
1048 methods.add(getGetterString(rootAttribute,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301049 GENERATE_SERVICE_AND_MANAGER) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301050 NEW_LINE);
1051 // Setter methods.
1052 methods.add(getSetterString(rootAttribute, className,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301053 GENERATE_SERVICE_AND_MANAGER) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301054 NEW_LINE);
1055 }
1056
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301057 methods.add(getAugmentsDataMethodForService(curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +05301058
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301059 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
1060 .getServiceTempFiles() != null) {
1061 JavaCodeGeneratorInfo javaGenInfo =
1062 (JavaCodeGeneratorInfo) curNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301063
1064 // Rpc methods
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301065 methods.add(getDataFromTempFileHandle(
1066 RPC_INTERFACE_MASK,
1067 javaGenInfo.getTempJavaCodeFragmentFiles()
1068 .getServiceTempFiles(), path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301069 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301070 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301071 throw new IOException(getErrorMsg(className, RPC_CLASS));
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301072 }
1073
1074 for (String method : methods) {
1075 insertDataIntoJavaFile(file, method);
1076 }
1077 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1078
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301079 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301080 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301081
1082 /**
1083 * Generates event file.
1084 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301085 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301086 * @param curNode current YANG node
1087 * @param imports imports for file
1088 * @throws IOException when fails to generate class file
1089 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301090 public static void generateEventFile(File file, YangNode curNode,
1091 List<String> imports)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301092 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301093
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301094 String className =
1095 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1096 .getJavaName()) + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301097
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301098 TempJavaEventFragmentFiles tempFiles =
1099 ((TempJavaCodeFragmentFilesContainer) curNode)
1100 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301101
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301102 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301103 .getBaseCodeGenPath() +
1104 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1105 .getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301106 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode,
1107 className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301108 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301109 insertDataIntoJavaFile(file, getEventEnumTypeStart() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301110 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK,
1111 tempFiles, path),
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301112 COMMA) + methodClose(FOUR_SPACE));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301113
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301114 insertDataIntoJavaFile(file,
1115 getDataFromTempFileHandle(EVENT_METHOD_MASK,
1116 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301117 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301118 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301119 }
1120
1121 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1122 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301123 }
1124
1125 /**
1126 * Generates event listener file.
1127 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301128 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301129 * @param curNode current YANG node
1130 * @param imports imports for file
1131 * @throws IOException when fails to generate class file
1132 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301133 public static void generateEventListenerFile(File file, YangNode curNode,
1134 List<String> imports)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301135 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301136
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301137 String className =
1138 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1139 .getJavaName()) + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301140
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301141 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE,
1142 imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301143 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301144 validateLineLength(file);
1145 }
1146
1147 /**
1148 * Generates event subject's file.
1149 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301150 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301151 * @param curNode current YANG node
1152 * @throws IOException when fails to do IO exceptions
1153 */
1154 public static void generateEventSubjectFile(File file, YangNode curNode)
1155 throws IOException {
1156
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301157 String className =
1158 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1159 .getJavaName()) + EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301160
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301161 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null,
1162 curNode, className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301163
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301164 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301165 .getBaseCodeGenPath() +
1166 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1167 .getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301168
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301169 TempJavaEventFragmentFiles tempFiles =
1170 ((TempJavaCodeFragmentFilesContainer) curNode)
1171 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301172
1173 insertDataIntoJavaFile(file, NEW_LINE);
1174 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301175 insertDataIntoJavaFile(
1176 file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK,
1177 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301178
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301179 insertDataIntoJavaFile(
1180 file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK,
1181 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301182
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301183 insertDataIntoJavaFile(
1184 file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK,
1185 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301186 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301187 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301188 }
1189
1190 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1191 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301192 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301193
1194 /**
1195 * Returns error message string.
1196 *
1197 * @param className name of the class
1198 * @param fileType type of file
1199 * @return error message string
1200 */
1201 private static String getErrorMsg(String className, String fileType) {
1202 return "No data found in temporary java code fragment files for " +
1203 className + " while " + fileType + " file generation.";
1204 }
1205
1206 /**
1207 * Checks whether leaf is present in YANG leaves holder.
1208 *
1209 * @param holder holder of YANG leaves
1210 * @return true if leaves are present, false otherwise
1211 */
1212 private static boolean leavesPresent(YangLeavesHolder holder) {
1213 return holder.getListOfLeaf() != null &&
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301214 !holder.getListOfLeaf().isEmpty();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301215 }
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301216
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301217}