blob: ed146477e93b0dd728eee725de120f1d63fe6a3c [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;
Bharat saraswal0663aff2016-10-18 23:16:14 +053020import org.onosproject.yangutils.datamodel.YangAugment;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053021import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Bharat saraswal8beac342016-08-04 02:00:03 +053022import org.onosproject.yangutils.datamodel.YangChoice;
Shankara-Huaweib7564772016-08-02 18:13:13 +053023import org.onosproject.yangutils.datamodel.YangDerivedInfo;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053024import org.onosproject.yangutils.datamodel.YangEnumeration;
Shankara-Huaweia1039e52016-07-14 16:53:09 +053025import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053026import org.onosproject.yangutils.datamodel.YangNode;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053027import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswal039f59c2016-07-14 21:57:13 +053028import org.onosproject.yangutils.datamodel.YangTypeDef;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053029import org.onosproject.yangutils.datamodel.YangUnion;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053030import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswalaf413b82016-07-14 15:18:20 +053031import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswald14cbe82016-07-14 13:26:18 +053032import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053033import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053034import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053035import org.onosproject.yangutils.translator.tojava.JavaImportData;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053036import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053037import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswal039f59c2016-07-14 21:57:13 +053038import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053039import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +053040import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053041import org.onosproject.yangutils.utils.io.YangPluginConfig;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053042
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053043import java.io.File;
44import java.io.IOException;
45import java.util.ArrayList;
46import java.util.List;
47
48import static java.util.Collections.sort;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053049import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
50import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
52import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
53import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
55import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
56import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
57import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
58import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
59import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
60import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
61import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
62import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
63import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
64import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
65import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
68import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
69import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
73import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
74import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
75import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
76import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
77import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
78import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
79import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
80import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
81import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
82import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
83import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053084import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053085import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isGetSetOfRootNodeRequired;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053086import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053087import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
88import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053089import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053090import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getSetValueParaForUnionClass;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053091import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
92import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053093import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_INT_VALUE;
94import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_STRING_VALUE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053095import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.builderMethod;
Bharat saraswal0663aff2016-10-18 23:16:14 +053096import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.generateBuildMethodInAugmentClass;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053097import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
98import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
99import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassFromString;
101import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassToString;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfValueMethod;
105import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumSignature;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530114import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRangeValidatorMethodForUnion;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530115import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForSelectLeaf;
116import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
Bharat saraswal94844d62016-10-13 13:28:03 +0530117import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringForEnumClass;
118import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringForType;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530119import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
120import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530121import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getUnionToStringMethod;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530122import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoImpl;
123import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoInterface;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530124import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isLeafValueSetInterface;
125import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isSelectLeafSetInterface;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530126import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.setSelectLeafSetInterface;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530127import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getInterfaceLeafIdEnumMethods;
Bharat saraswal94844d62016-10-13 13:28:03 +0530128import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIsSelectLeafSet;
129import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIsValueLeafSet;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530130import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530131import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530132import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getAugmentableSubTreeFiltering;
133import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessChildNodeSubtreeFiltering;
134import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafListSubtreeFiltering;
135import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafSubtreeFiltering;
136import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubTreeFilteringEnd;
137import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFilteringStart;
138import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFunctionBody;
139import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.addDefaultConstructor;
140import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
141import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getTypeFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530142import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530143import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530144import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_CLASS;
145import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_INTERFACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530146import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530147import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530148import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530149import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530150import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530151import static org.onosproject.yangutils.utils.UtilConstants.ENUM_CLASS;
152import static org.onosproject.yangutils.utils.UtilConstants.EVENT_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530153import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530154import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530155import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530156import static org.onosproject.yangutils.utils.UtilConstants.IMPL_CLASS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530157import static org.onosproject.yangutils.utils.UtilConstants.INT;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530158import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530159import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +0530160import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530161import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530162import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530163import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530164import static org.onosproject.yangutils.utils.UtilConstants.RPC_CLASS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530165import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530166import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530167import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_CLASS;
168import static org.onosproject.yangutils.utils.UtilConstants.UNION_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530169import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530170import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswal94844d62016-10-13 13:28:03 +0530171import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530172import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
173import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530174import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530175import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530176import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
177
Vinod Kumar S08710982016-03-03 19:55:30 +0530178/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530179 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530180 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530181public final class JavaFileGenerator {
182
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530183 // No instantiation
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530184 private JavaFileGenerator() {
185 }
186
187 /**
188 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530189 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530190 * @param file file
191 * @param imports imports for the file
192 * @param curNode current YANG node
193 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530194 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530195 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530196 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530197 public static File generateInterfaceFile(File file, List<String> imports,
198 YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530199 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530200 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530201
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530202 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530203 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530204
205 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530206 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530207 path = fileInfo.getPluginConfig().getCodeGenDir() +
208 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530209 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530210 path = fileInfo.getBaseCodeGenPath() +
211 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530212 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530213
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530214 String className = getCapitalCase(fileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530215
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530216 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530217 YangLeavesHolder leavesHolder;
218 if (curNode instanceof YangLeavesHolder) {
219 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530220 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530221 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530222 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530223 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530224
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530225 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode,
226 className);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530227
228 // Generate ENUM interface
Bharat saraswal94844d62016-10-13 13:28:03 +0530229 if (curNode instanceof RpcNotificationContainer) {
230 insertDataIntoJavaFile(file, getOperationTypeEnum());
231 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530232 List<String> methods = new ArrayList<>();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530233
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530234 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530235 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530236 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530237 //Leaf identifier enum.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530238 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530239 insertDataIntoJavaFile(file, getInterfaceLeafIdEnumSignature(
240 className) + trimAtLast(replaceLast(
241 getDataFromTempFileHandle(
242 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
243 getBeanFiles(curNode), path),
244 COMMA, SEMI_COLON), NEW_LINE) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530245 getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530246 }
247
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530248 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530249 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530250 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
251 GETTER_FOR_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530252 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530253 throw new IOException(getErrorMsg(className, INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530254 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530255 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530256
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530257 if (curNode instanceof YangAugmentableNode &&
258 !(curNode instanceof YangChoice)) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530259 methods.add(getYangAugmentInfoInterface());
Bharat saraswal8beac342016-08-04 02:00:03 +0530260 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530261
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530262 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530263 methods.add(isLeafValueSetInterface());
Bharat saraswal94844d62016-10-13 13:28:03 +0530264 if (curNode.isOpTypeReq()) {
265 methods.add(isSelectLeafSetInterface());
266 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530267 }
268 for (String method : methods) {
269 insertDataIntoJavaFile(file, method);
270 }
Bharat saraswale304c252016-08-16 20:56:20 +0530271 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530272 }
273
274 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530275 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530276 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530277 * @param file file
278 * @param curNode current YANG node
279 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530280 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530281 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530282 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530283 public static File generateBuilderInterfaceFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530284 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530285 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530286
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530287 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530288 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530289
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530290 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530291 YangLeavesHolder leavesHolder;
Bharat saraswal94844d62016-10-13 13:28:03 +0530292 if (curNode instanceof YangLeavesHolder &&
293 curNode.isOpTypeReq()) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530294 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530295 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530296 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530297 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530298 }
299
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530300 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530301 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530302 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530303 path = fileInfo.getPluginConfig().getCodeGenDir() +
304 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530305 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530306 path = fileInfo.getBaseCodeGenPath() +
307 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530308 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530309
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530310 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode,
311 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530312 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530313 if (attrPresent) {
Bharat saraswald532a4c2016-03-25 18:19:46 +0530314 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530315 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530316 methods.add(getDataFromTempFileHandle(
317 GETTER_FOR_INTERFACE_MASK,
318 getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530319
320 //Setter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530321 methods.add(getDataFromTempFileHandle(
322 SETTER_FOR_INTERFACE_MASK,
323 getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530324
325 //Add to list method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530326 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
327 ADD_TO_LIST_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530328 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530329 throw new IOException(getErrorMsg(className, BUILDER_INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530330 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530331 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530332
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530333 if (curNode instanceof YangAugmentableNode &&
334 !(curNode instanceof YangChoice)) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530335 methods.add(getAddAugmentInfoMethodInterface(className + BUILDER));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530336 methods.add(getYangAugmentInfoInterface());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530337 }
338
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530339 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530340 methods.add(setSelectLeafSetInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530341 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530342 //Add build method to builder interface file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530343 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
344 .getTempJavaCodeFragmentFiles()
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530345 .addBuildMethodForInterface());
Bharat saraswal64e7e232016-07-14 23:33:55 +0530346
347 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530348 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530349 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530350 }
351
Bharat saraswal84366c52016-03-23 19:40:35 +0530352 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale304c252016-08-16 20:56:20 +0530353 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530354 }
355
356 /**
357 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530358 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530359 * @param file file
360 * @param curNode current YANG node
361 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530362 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530363 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530364 */
Bharat saraswald14cbe82016-07-14 13:26:18 +0530365 public static File generateBuilderClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530366 boolean attrPresent)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530367 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530368
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530369 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530370 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530371
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530372 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530373 YangLeavesHolder leavesHolder;
374 if (curNode instanceof YangLeavesHolder) {
375 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530376 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530377 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530378 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530379 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530380
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530381 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530382 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530383 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530384 path = fileInfo.getPluginConfig().getCodeGenDir() +
385 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530386 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530387 path = fileInfo.getBaseCodeGenPath() +
388 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530389 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530390
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530391 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode,
392 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530393 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530394 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530395
396 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530397 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530398 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
399 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530400 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530401 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530402 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530403 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530404 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530405 methods.add(getDataFromTempFileHandle(
406 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530407 // Setter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530408 methods.add(getDataFromTempFileHandle(
409 SETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswald14cbe82016-07-14 13:26:18 +0530410
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530411 //Add to list impl method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530412 methods.add(getDataFromTempFileHandle(
413 ADD_TO_LIST_IMPL_MASK, getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530414
Bharat saraswald14cbe82016-07-14 13:26:18 +0530415 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530416
Bharat saraswal8beac342016-08-04 02:00:03 +0530417 //Add operation attribute methods.
Bharat saraswal94844d62016-10-13 13:28:03 +0530418 if (leavesPresent && curNode.isOpTypeReq()) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530419 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal94844d62016-10-13 13:28:03 +0530420 methods.add(getSetterForSelectLeaf(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530421 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530422 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530423 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530424 }
425 } else {
426 insertDataIntoJavaFile(file, NEW_LINE);
427 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530428
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530429 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530430 methods.add(getAddAugmentInfoMethodImpl(className + BUILDER));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530431 methods.add(getYangAugmentInfoImpl());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530432 }
433
Bharat saraswal64e7e232016-07-14 23:33:55 +0530434 // Add default constructor and build method impl.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530435 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
436 .getTempJavaCodeFragmentFiles()
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530437 .addBuildMethodImpl());
Bharat saraswal0663aff2016-10-18 23:16:14 +0530438 if (curNode instanceof YangAugment) {
439 methods.add(generateBuildMethodInAugmentClass(className));
440 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530441 methods.add(addDefaultConstructor(curNode, PUBLIC, BUILDER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530442
443 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530444 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530445 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530446 }
Bharat saraswald14cbe82016-07-14 13:26:18 +0530447 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswale304c252016-08-16 20:56:20 +0530448 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530449 }
450
451 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530452 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530453 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530454 * @param file file
455 * @param curNode current YANG node
456 * @param attrPresent if any attribute is present or not
457 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530458 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530459 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530460 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530461 public static File generateDefaultClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530462 boolean attrPresent,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530463 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530464 throws IOException {
465
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530466 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530467 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530468 YangPluginConfig config = fileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530469
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530470 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530471 YangLeavesHolder leavesHolder;
472 if (curNode instanceof YangLeavesHolder) {
473 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530474 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530475 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530476 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530477 }
478
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530479 boolean rootNode = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530480
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530481 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530482 String opParamClassName = className;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530483 String name = DEFAULT_CAPS + className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530484 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530485 if (curNode instanceof RpcNotificationContainer) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530486 opParamClassName = className + OP_PARAM;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530487 name = opParamClassName;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530488 rootNode = true;
489 path = fileInfo.getPluginConfig().getCodeGenDir() +
490 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530491 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530492 path = fileInfo.getBaseCodeGenPath() +
493 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530494 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530495
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530496 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode,
497 className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530498
Bharat saraswal022dae92016-03-04 20:08:09 +0530499 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530500 if (attrPresent) {
501 addDefaultClassAttributeInfo(file, curNode, className,
502 opParamClassName, path, methods,
Bharat saraswal94844d62016-10-13 13:28:03 +0530503 rootNode);
Bharat saraswald532a4c2016-03-25 18:19:46 +0530504 } else {
505 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530506 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530507
Bharat saraswal8beac342016-08-04 02:00:03 +0530508 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530509 methods.add(getYangAugmentInfoImpl());
Bharat saraswal8beac342016-08-04 02:00:03 +0530510 }
511 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530512 //Constructor.
Bharat saraswal94844d62016-10-13 13:28:03 +0530513 String constructor = getConstructorStart(className, rootNode) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530514 getDataFromTempFileHandle(
Bharat saraswal94844d62016-10-13 13:28:03 +0530515 CONSTRUCTOR_IMPL_MASK, getBeanFiles(curNode), path)
516 + methodClose(FOUR_SPACE);
517 methods.add(constructor);
518 if (curNode.isOpTypeReq()) {
519 String augmentableSubTreeFiltering = EMPTY_STRING;
520 if (curNode instanceof YangAugmentableNode) {
521 // add is filter content match.
522 augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530523 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530524 methods.add(getProcessSubtreeFilteringStart(curNode) +
Bharat saraswal94844d62016-10-13 13:28:03 +0530525 getProcessSubtreeFunctionBody(curNode) +
526 augmentableSubTreeFiltering +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530527 getProcessSubTreeFilteringEnd(name, curNode));
Bharat saraswal94844d62016-10-13 13:28:03 +0530528
529 if (curNode instanceof YangLeavesHolder) {
530 if (((YangLeavesHolder) curNode).getListOfLeaf() != null &&
531 !((YangLeavesHolder) curNode).getListOfLeaf().isEmpty()) {
532 methods.add(getProcessLeafSubtreeFiltering(curNode, config,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530533 path));
Bharat saraswal94844d62016-10-13 13:28:03 +0530534 }
535 if (((YangLeavesHolder) curNode).getListOfLeafList() != null &&
536 !((YangLeavesHolder) curNode).getListOfLeafList().isEmpty()) {
537 methods.add(getProcessLeafListSubtreeFiltering(curNode, config,
538 path));
539 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530540 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530541
Bharat saraswal94844d62016-10-13 13:28:03 +0530542 if (curNode.getChild() != null) {
543 methods.add(getProcessChildNodeSubtreeFiltering(curNode, config,
544 path));
545 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530546 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530547 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530548 throw new IOException(getErrorMsg(className, IMPL_CLASS));
Vinod Kumar S08710982016-03-03 19:55:30 +0530549 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530550
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530551 methods.add(addDefaultConstructor(curNode, PROTECTED, DEFAULT));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530552
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530553 methods.add(builderMethod(className));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530554 if (leavesPresent) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530555 methods.add(getIsValueLeafSet());
556 if (curNode.isOpTypeReq()) {
557 methods.add(getIsSelectLeafSet());
558 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530559 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530560 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530561 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530562 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530563 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530564
Bharat saraswale304c252016-08-16 20:56:20 +0530565 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530566 }
567
568 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530569 * Add methods related to attributes.
570 *
571 * @param file file
572 * @param curNode current YANG node
573 * @param className name of the class
574 * @param opParamClassName op param class name
575 * @param path file path
576 * @param methods list of methods string
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530577 * @param rootNode flag indicating whether node is root node
578 * @throws IOException a violation in IO rule
579 */
580 private static void addDefaultClassAttributeInfo(File file, YangNode curNode,
581 String className,
582 String opParamClassName,
583 String path, List<String> methods,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530584 boolean rootNode)
585 throws IOException {
586
587 //Add attribute strings.
588 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530589 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
590 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530591 } catch (IOException e) {
592 throw new IOException(getErrorMsg(className, IMPL_CLASS));
593 }
594
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530595 try {
596 //Getter methods.
597 methods.add(getDataFromTempFileHandle(
598 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
599
600 // Hash code method.
601 methods.add(getHashCodeMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530602 getHashCodeMethodOpen() + getDataFromTempFileHandle(
603 HASH_CODE_IMPL_MASK, getBeanFiles(curNode), path)
604 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530605
606 //Equals method.
607 if (rootNode) {
608 methods.add(getEqualsMethodClose(
609 getEqualsMethodOpen(opParamClassName) +
610 getDataFromTempFileHandle(
611 EQUALS_IMPL_MASK,
612 getBeanFiles(curNode), path)));
613 } else {
614 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530615 getEqualsMethodOpen(DEFAULT_CAPS + className) +
616 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
617 getBeanFiles(curNode),
618 path)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530619 }
620 // To string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530621 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
622 TO_STRING_IMPL_MASK, getBeanFiles(curNode), path) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530623 getToStringMethodClose());
624 } catch (IOException e) {
625 throw new IOException(getErrorMsg(className, IMPL_CLASS));
626 }
627 }
628
629 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530630 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530631 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530632 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530633 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530634 * @param imports imports for file
635 * @return type def class file
636 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530637 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530638 public static File generateTypeDefClassFile(File file, YangNode curNode,
639 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530640 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530641
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530642 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530643 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530644 // import
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530645 String className = getCapitalCase(fileInfo.getJavaName());
646 String path = fileInfo.getBaseCodeGenPath() +
647 fileInfo.getPackageFilePath();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530648 YangTypeDef typeDef = (YangTypeDef) curNode;
649 List<YangType<?>> types = typeDef.getTypeList();
650 YangType type = types.get(0);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530651 YangDataTypes yangDataTypes = type.getDataType();
Bharat saraswal022dae92016-03-04 20:08:09 +0530652
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530653 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530654 imports, path);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530655
Bharat saraswal84366c52016-03-23 19:40:35 +0530656 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530657
Bharat saraswal64e7e232016-07-14 23:33:55 +0530658 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530659 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530660 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
661 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530662 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530663 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530664 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530665
Bharat saraswal64e7e232016-07-14 23:33:55 +0530666 //Default constructor.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530667 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530668
Bharat saraswal022dae92016-03-04 20:08:09 +0530669 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530670
Bharat saraswal64e7e232016-07-14 23:33:55 +0530671 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530672 methods.add(getDataFromTempFileHandle(
673 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530674
675 //Of method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530676 methods.add(getDataFromTempFileHandle(
677 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530678
Bharat saraswal64e7e232016-07-14 23:33:55 +0530679 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530680 methods.add(getDataFromTempFileHandle(
681 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530682
Bharat saraswal64e7e232016-07-14 23:33:55 +0530683 // Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530684 methods.add(getHashCodeMethodClose(
685 getHashCodeMethodOpen() + getDataFromTempFileHandle(
686 HASH_CODE_IMPL_MASK, getTypeFiles(curNode), path)
687 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530688
689 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530690 methods.add(getEqualsMethodClose(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530691 getEqualsMethodOpen(className + EMPTY_STRING) +
692 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
693 getTypeFiles(curNode), path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530694
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530695 // To string method.
Bharat saraswal0663aff2016-10-18 23:16:14 +0530696 addTypedefToString(curNode, methods);
Bharat saraswal84366c52016-03-23 19:40:35 +0530697
Bharat saraswal64e7e232016-07-14 23:33:55 +0530698 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
699
Bharat saraswal8beac342016-08-04 02:00:03 +0530700 //From string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530701 if (type.getDataType() == DERIVED &&
702 ((YangDerivedInfo) type.getDataTypeExtendedInfo())
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530703 .getEffectiveBuiltInType()
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530704 == IDENTITYREF) {
705 yangDataTypes = IDENTITYREF;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530706 }
707
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530708 if (type.getDataType() == IDENTITYREF) {
709 yangDataTypes = IDENTITYREF;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530710 }
711
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530712 if (yangDataTypes != IDENTITYREF) {
713 methods.add(getFromStringMethodSignature(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530714 getDataFromTempFileHandle(
715 FROM_STRING_IMPL_MASK,
716 javaGenInfo.getTempJavaCodeFragmentFiles()
717 .getTypeTempFiles(), path) +
718 getFromStringMethodClose());
Shankara-Huaweib7564772016-08-02 18:13:13 +0530719 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530720 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530721 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswal022dae92016-03-04 20:08:09 +0530722 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530723
Bharat saraswal84366c52016-03-23 19:40:35 +0530724 for (String method : methods) {
725 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530726 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530727 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530728
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530729 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +0530730 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530731
732 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530733 * Adds typedef to string method.
734 *
735 * @param curNode current node
736 * @param methods list of methods string
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530737 * @throws IOException a violation in IO rule
738 */
739 private static void addTypedefToString(YangNode curNode,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530740 List<String> methods)
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530741 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530742 //To string method.
Bharat saraswal94844d62016-10-13 13:28:03 +0530743
744 List<YangType<?>> types = ((YangTypeDef) curNode).getTypeList();
745 YangType type = types.get(0);
Bharat saraswal94844d62016-10-13 13:28:03 +0530746 methods.add(getToStringForType(getCamelCase(type.getDataTypeName(),
Bharat saraswal0663aff2016-10-18 23:16:14 +0530747 null), type));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530748 }
749
750 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530751 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530752 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530753 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530754 * @param curNode current YANG node
755 * @param imports imports for file
756 * @return type def class file
757 * @throws IOException when fails to generate class file
758 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530759 public static File generateUnionClassFile(File file, YangNode curNode,
760 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530761 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530762
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530763 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530764 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530765
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530766 String className = getCapitalCase(fileInfo.getJavaName());
767 String path = fileInfo.getBaseCodeGenPath() +
768 fileInfo.getPackageFilePath();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530769
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530770 TempJavaTypeFragmentFiles tempFiles =
771 ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
772 .getTypeTempFiles();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530773
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530774 boolean intConflict = false;
775 boolean longConflict = false;
776 boolean shortConflict = false;
777 JavaAttributeInfo intAttr = tempFiles.getIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530778 if (intAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530779 intAttr = tempFiles.getUIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530780 }
781
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530782 JavaAttributeInfo longAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530783 tempFiles.getLongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530784 if (longAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530785 longAttr = tempFiles.getULongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530786 }
787
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530788 JavaAttributeInfo shortAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530789 tempFiles.getShortAttribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530790 if (shortAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530791 shortAttr = tempFiles.getUInt8Attribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530792 }
793
Bharat saraswal64e7e232016-07-14 23:33:55 +0530794 if (intAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530795 intConflict = intAttr.isIntConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530796 }
797 if (longAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530798 longConflict = longAttr.isLongConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530799 }
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530800 if (shortAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530801 shortConflict = shortAttr.isShortConflict();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530802 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530803 if (longConflict) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530804 String impt = tempFiles.getJavaImportData().getBigIntegerImport();
805 if (!imports.contains(impt)) {
806 imports.add(impt);
807 sort(imports);
808 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530809 }
810
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530811 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530812 imports, path);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530813
814 List<String> methods = new ArrayList<>();
815
Bharat saraswal64e7e232016-07-14 23:33:55 +0530816 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530817 try {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530818 addUnionClassAttributeInfo(file, curNode, intConflict,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530819 longConflict, shortConflict, path, tempFiles);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530820 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530821 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530822 }
823
Bharat saraswal64e7e232016-07-14 23:33:55 +0530824 //Default constructor.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530825 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530826
827 try {
828
Bharat saraswal64e7e232016-07-14 23:33:55 +0530829 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530830 methods.add(getDataFromTempFileHandle(
831 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530832
833 // Of string method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530834 methods.add(getDataFromTempFileHandle(
835 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530836
Bharat saraswal64e7e232016-07-14 23:33:55 +0530837 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530838 methods.add(getDataFromTempFileHandle(
839 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530840
841 //Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530842 methods.add(getHashCodeMethodClose(
843 getHashCodeMethodOpen() +
844 getDataFromTempFileHandle(
845 HASH_CODE_IMPL_MASK, getTypeFiles(curNode),
846 path).replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530847
Bharat saraswal64e7e232016-07-14 23:33:55 +0530848 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530849 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530850 getEqualsMethodOpen(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530851 getDataFromTempFileHandle(
852 EQUALS_IMPL_MASK, getTypeFiles(curNode),
853 path)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530854
855 //To string method.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530856 methods.add(getUnionToStringMethod(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530857 ((YangUnion) curNode).getTypeList()));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530858
Bharat saraswal64e7e232016-07-14 23:33:55 +0530859 //From string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530860 methods.add(getFromStringMethodSignature(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530861 getDataFromTempFileHandle(
862 FROM_STRING_IMPL_MASK,
863 getTypeFiles(curNode), path) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530864 getFromStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530865
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530866 if (intConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530867 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530868 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530869 if (longConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530870 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530871 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530872 if (shortConflict && !intConflict) {
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530873 methods.add(getRangeValidatorMethodForUnion(INT));
874 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530875 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530876 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530877 }
878
879 for (String method : methods) {
880 insertDataIntoJavaFile(file, method);
881 }
882 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
883
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530884 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530885 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530886
887 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530888 * Adds union class attribute information.
889 *
890 * @param file generated file
891 * @param curNode current YANG node
892 * @param intConflict flag to indicate if there is a conflict in int
893 * @param longConflict flag to indicate if there is a conflict in long
894 * @param shortConflict flag to indicate if there is a conflict in short
895 * @param path file path
896 * @param tempFiles temp java type fragment files
897 * @throws IOException a violation in IO rule
898 */
899 private static void addUnionClassAttributeInfo(File file,
900 YangNode curNode,
901 boolean intConflict,
902 boolean longConflict,
903 boolean shortConflict,
904 String path,
905 TempJavaTypeFragmentFiles tempFiles)
906 throws IOException {
907 if (intConflict) {
908 insertDataIntoJavaFile(file, JavaCodeSnippetGen
909 .addStaticAttributeIntRange(PRIVATE,
910 tempFiles.getIntIndex() <
911 tempFiles.getUIntIndex()));
912 }
913
914 if (longConflict) {
915 insertDataIntoJavaFile(file, JavaCodeSnippetGen
916 .addStaticAttributeLongRange(PRIVATE,
917 tempFiles.getLongIndex() <
918 tempFiles.getULongIndex()));
919 }
920
921 if (shortConflict) {
922 insertDataIntoJavaFile(file, JavaCodeSnippetGen
923 .addStaticAttributeShortRange(PRIVATE,
924 tempFiles.getShortIndex() <
925 tempFiles.getUInt8Index()));
926 }
927
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530928 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
929 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530930 insertDataIntoJavaFile(file, getSetValueParaForUnionClass());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530931 }
932
933 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530934 * Generates class file for type enum.
935 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530936 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530937 * @param curNode current YANG node
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530938 * @param imports import list
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530939 * @return class file for type enum
940 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530941 */
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530942 public static File generateEnumClassFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530943 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530944
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530945 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530946 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530947
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530948 String className = fileInfo.getJavaName();
949 String path = fileInfo.getBaseCodeGenPath() +
950 fileInfo.getPackageFilePath();
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530951 TempJavaEnumerationFragmentFiles enumFile = ((JavaCodeGeneratorInfo)
952 curNode).getTempJavaCodeFragmentFiles().getEnumTempFiles();
953 JavaImportData data = enumFile.getJavaImportData();
954 if (!enumFile.isEnumClass()) {
955 imports.add(data.getImportForToBitSet());
956 imports.add(data.getImportForPattern());
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530957 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530958
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530959 initiateJavaFileGeneration(file, getCapitalCase(className),
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530960 GENERATE_ENUM_CLASS, imports, path);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530961
962 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530963 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530964 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530965 String[] remove = {COMMA, NEW_LINE};
966 insertDataIntoJavaFile(file, trimAtLast(getDataFromTempFileHandle(
967 ENUM_IMPL_MASK, javaGenInfo.getTempJavaCodeFragmentFiles()
968 .getEnumTempFiles(), path), remove) +
969 signatureClose());
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530970 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530971 throw new IOException(getErrorMsg(getCapitalCase(className),
972 ENUM_CLASS));
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530973 }
974
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530975 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530976 // Add an attribute to get the enum's values.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530977 insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530978
Bharat saraswal64e7e232016-07-14 23:33:55 +0530979 // Add a constructor for enum.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530980 //TODO: generate javadoc for method.
981 insertDataIntoJavaFile(file, getEnumsConstructor(getCapitalCase(className)) +
982 NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +0530983
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530984 insertDataIntoJavaFile(file,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530985 getEnumsOfValueMethod(className,
986 (YangEnumeration) curNode,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530987 ENUM_METHOD_INT_VALUE));
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530988 insertDataIntoJavaFile(file,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530989 getEnumsOfValueMethod(className,
990 (YangEnumeration) curNode,
991 ENUM_METHOD_STRING_VALUE));
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530992
Bharat saraswal64e7e232016-07-14 23:33:55 +0530993 // Add a getter method for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530994 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530995 null) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530996 getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530997
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530998 if (!enumFile.isEnumClass()) {
999 insertDataIntoJavaFile(file, getBitSetEnumClassFromString
1000 (getCapitalCase(className)));
1001 insertDataIntoJavaFile(file, getBitSetEnumClassToString(
1002 getCapitalCase(className), (YangEnumeration) curNode));
Bharat saraswal94844d62016-10-13 13:28:03 +05301003 } else {
1004 insertDataIntoJavaFile(file, getToStringForEnumClass());
Bharat saraswal250a7472016-05-12 13:16:57 +05301005 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301006
1007 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1008
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301009 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301010 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301011
1012 /**
1013 * Generates interface file for rpc.
1014 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301015 * @param file generated file
1016 * @param curNode current YANG node
1017 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301018 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301019 * @throws IOException when fails to generate class file
1020 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301021 public static File generateServiceInterfaceFile(File file, YangNode curNode,
1022 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301023 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301024
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301025 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301026 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301027
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301028 TempJavaServiceFragmentFiles tempFiles =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301029 ((JavaCodeGeneratorInfo) curNode)
1030 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301031 String className = getCapitalCase(fileInfo.getJavaName()) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301032 SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301033 String path = fileInfo.getBaseCodeGenPath() +
1034 fileInfo.getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301035 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports,
1036 curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301037
1038 List<String> methods = new ArrayList<>();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301039 JavaAttributeInfo rootAttribute =
1040 getCurNodeAsAttributeInTarget(curNode, curNode, false,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301041 tempFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301042
1043 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301044
Bharat saraswal1edde622016-09-06 10:18:04 +05301045 if (isGetSetOfRootNodeRequired(curNode)) {
1046 //Getter methods.
1047 methods.add(getGetterString(rootAttribute,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301048 GENERATE_SERVICE_AND_MANAGER) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301049 NEW_LINE);
1050 // Setter methods.
1051 methods.add(getSetterString(rootAttribute, className,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301052 GENERATE_SERVICE_AND_MANAGER) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301053 NEW_LINE);
1054 }
1055
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301056 methods.add(getAugmentsDataMethodForService(curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +05301057
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301058 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
1059 .getServiceTempFiles() != null) {
1060 JavaCodeGeneratorInfo javaGenInfo =
1061 (JavaCodeGeneratorInfo) curNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301062
1063 // Rpc methods
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301064 methods.add(getDataFromTempFileHandle(
1065 RPC_INTERFACE_MASK,
1066 javaGenInfo.getTempJavaCodeFragmentFiles()
1067 .getServiceTempFiles(), path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301068 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301069 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301070 throw new IOException(getErrorMsg(className, RPC_CLASS));
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301071 }
1072
1073 for (String method : methods) {
1074 insertDataIntoJavaFile(file, method);
1075 }
1076 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1077
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301078 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301079 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301080
1081 /**
1082 * Generates event file.
1083 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301084 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301085 * @param curNode current YANG node
1086 * @param imports imports for file
1087 * @throws IOException when fails to generate class file
1088 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301089 public static void generateEventFile(File file, YangNode curNode,
1090 List<String> imports)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301091 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301092
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301093 String className =
1094 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1095 .getJavaName()) + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301096
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301097 TempJavaEventFragmentFiles tempFiles =
1098 ((TempJavaCodeFragmentFilesContainer) curNode)
1099 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301100
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301101 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301102 .getBaseCodeGenPath() +
1103 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1104 .getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301105 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode,
1106 className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301107 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301108 insertDataIntoJavaFile(file, getEventEnumTypeStart() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301109 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK,
1110 tempFiles, path),
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301111 COMMA) + methodClose(FOUR_SPACE));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301112
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301113 insertDataIntoJavaFile(file,
1114 getDataFromTempFileHandle(EVENT_METHOD_MASK,
1115 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301116 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301117 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301118 }
1119
1120 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1121 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301122 }
1123
1124 /**
1125 * Generates event listener file.
1126 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301127 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301128 * @param curNode current YANG node
1129 * @param imports imports for file
1130 * @throws IOException when fails to generate class file
1131 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301132 public static void generateEventListenerFile(File file, YangNode curNode,
1133 List<String> imports)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301134 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301135
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301136 String className =
1137 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1138 .getJavaName()) + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301139
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301140 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE,
1141 imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301142 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301143 validateLineLength(file);
1144 }
1145
1146 /**
1147 * Generates event subject's file.
1148 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301149 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301150 * @param curNode current YANG node
1151 * @throws IOException when fails to do IO exceptions
1152 */
1153 public static void generateEventSubjectFile(File file, YangNode curNode)
1154 throws IOException {
1155
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301156 String className =
1157 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1158 .getJavaName()) + EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301159
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301160 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null,
1161 curNode, className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301162
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301163 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301164 .getBaseCodeGenPath() +
1165 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1166 .getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301167
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301168 TempJavaEventFragmentFiles tempFiles =
1169 ((TempJavaCodeFragmentFilesContainer) curNode)
1170 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301171
1172 insertDataIntoJavaFile(file, NEW_LINE);
1173 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301174 insertDataIntoJavaFile(
1175 file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK,
1176 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301177
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301178 insertDataIntoJavaFile(
1179 file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK,
1180 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301181
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301182 insertDataIntoJavaFile(
1183 file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK,
1184 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301185 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301186 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301187 }
1188
1189 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1190 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301191 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301192
1193 /**
1194 * Returns error message string.
1195 *
1196 * @param className name of the class
1197 * @param fileType type of file
1198 * @return error message string
1199 */
1200 private static String getErrorMsg(String className, String fileType) {
1201 return "No data found in temporary java code fragment files for " +
1202 className + " while " + fileType + " file generation.";
1203 }
1204
1205 /**
1206 * Checks whether leaf is present in YANG leaves holder.
1207 *
1208 * @param holder holder of YANG leaves
1209 * @return true if leaves are present, false otherwise
1210 */
1211 private static boolean leavesPresent(YangLeavesHolder holder) {
1212 return holder.getListOfLeaf() != null &&
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301213 !holder.getListOfLeaf().isEmpty();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301214 }
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301215
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301216}