blob: 4f8c94d7e2437663d3d1de0377fc9b68cd02b5b2 [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;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530137import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubTreeForChoiceInterface;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530138import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFilteringStart;
139import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFunctionBody;
140import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.addDefaultConstructor;
141import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
142import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getTypeFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530143import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530144import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530145import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_CLASS;
146import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_INTERFACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530147import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530148import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530149import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530150import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530151import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530152import static org.onosproject.yangutils.utils.UtilConstants.ENUM_CLASS;
153import static org.onosproject.yangutils.utils.UtilConstants.EVENT_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530154import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530155import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530156import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530157import static org.onosproject.yangutils.utils.UtilConstants.IMPL_CLASS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530158import static org.onosproject.yangutils.utils.UtilConstants.INT;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530159import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530160import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +0530161import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530162import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530163import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530164import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530165import static org.onosproject.yangutils.utils.UtilConstants.RPC_CLASS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530166import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530167import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530168import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_CLASS;
169import static org.onosproject.yangutils.utils.UtilConstants.UNION_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530170import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530171import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswal94844d62016-10-13 13:28:03 +0530172import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530173import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
174import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530175import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530176import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530177import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
178
Vinod Kumar S08710982016-03-03 19:55:30 +0530179/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530180 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530181 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530182public final class JavaFileGenerator {
183
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530184 // No instantiation
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530185 private JavaFileGenerator() {
186 }
187
188 /**
189 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530190 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530191 * @param file file
192 * @param imports imports for the file
193 * @param curNode current YANG node
194 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530195 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530196 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530197 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530198 public static File generateInterfaceFile(File file, List<String> imports,
199 YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530200 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530201 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530202
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530203 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530204 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530205
206 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530207 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530208 path = fileInfo.getPluginConfig().getCodeGenDir() +
209 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530210 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530211 path = fileInfo.getBaseCodeGenPath() +
212 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530213 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530214
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530215 String className = getCapitalCase(fileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530216
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530217 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530218 YangLeavesHolder leavesHolder;
219 if (curNode instanceof YangLeavesHolder) {
220 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530221 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530222 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530223 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530224 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530225
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530226 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode,
227 className);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530228
229 // Generate ENUM interface
Bharat saraswal94844d62016-10-13 13:28:03 +0530230 if (curNode instanceof RpcNotificationContainer) {
231 insertDataIntoJavaFile(file, getOperationTypeEnum());
232 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530233 List<String> methods = new ArrayList<>();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530234
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530235 //Add only for choice class
236 if (curNode instanceof YangChoice) {
237 insertDataIntoJavaFile(file, getProcessSubTreeForChoiceInterface(
238 curNode));
239 }
240
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530241 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530242 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530243 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530244 //Leaf identifier enum.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530245 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530246 insertDataIntoJavaFile(file, getInterfaceLeafIdEnumSignature(
247 className) + trimAtLast(replaceLast(
248 getDataFromTempFileHandle(
249 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
250 getBeanFiles(curNode), path),
251 COMMA, SEMI_COLON), NEW_LINE) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530252 getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530253 }
254
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530255 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530256 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530257 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
258 GETTER_FOR_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530259 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530260 throw new IOException(getErrorMsg(className, INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530261 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530262 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530263
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530264 if (curNode instanceof YangAugmentableNode &&
265 !(curNode instanceof YangChoice)) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530266 methods.add(getYangAugmentInfoInterface());
Bharat saraswal8beac342016-08-04 02:00:03 +0530267 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530268
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530269 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530270 methods.add(isLeafValueSetInterface());
Bharat saraswal94844d62016-10-13 13:28:03 +0530271 if (curNode.isOpTypeReq()) {
272 methods.add(isSelectLeafSetInterface());
273 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530274 }
275 for (String method : methods) {
276 insertDataIntoJavaFile(file, method);
277 }
Bharat saraswale304c252016-08-16 20:56:20 +0530278 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530279 }
280
281 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530282 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530283 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530284 * @param file file
285 * @param curNode current YANG node
286 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530287 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530288 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530289 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530290 public static File generateBuilderInterfaceFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530291 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530292 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530293
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530294 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530295 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530296
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530297 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530298 YangLeavesHolder leavesHolder;
Bharat saraswal94844d62016-10-13 13:28:03 +0530299 if (curNode instanceof YangLeavesHolder &&
300 curNode.isOpTypeReq()) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530301 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530302 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530303 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530304 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530305 }
306
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530307 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530308 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530309 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530310 path = fileInfo.getPluginConfig().getCodeGenDir() +
311 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530312 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530313 path = fileInfo.getBaseCodeGenPath() +
314 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530315 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530316
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530317 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode,
318 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530319 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530320 if (attrPresent) {
Bharat saraswald532a4c2016-03-25 18:19:46 +0530321 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530322 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530323 methods.add(getDataFromTempFileHandle(
324 GETTER_FOR_INTERFACE_MASK,
325 getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530326
327 //Setter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530328 methods.add(getDataFromTempFileHandle(
329 SETTER_FOR_INTERFACE_MASK,
330 getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530331
332 //Add to list method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530333 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
334 ADD_TO_LIST_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530335 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530336 throw new IOException(getErrorMsg(className, BUILDER_INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530337 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530338 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530339
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530340 if (curNode instanceof YangAugmentableNode &&
341 !(curNode instanceof YangChoice)) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530342 methods.add(getAddAugmentInfoMethodInterface(className + BUILDER));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530343 methods.add(getYangAugmentInfoInterface());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530344 }
345
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530346 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530347 methods.add(setSelectLeafSetInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530348 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530349 //Add build method to builder interface file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530350 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
351 .getTempJavaCodeFragmentFiles()
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530352 .addBuildMethodForInterface());
Bharat saraswal64e7e232016-07-14 23:33:55 +0530353
354 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530355 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530356 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530357 }
358
Bharat saraswal84366c52016-03-23 19:40:35 +0530359 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale304c252016-08-16 20:56:20 +0530360 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530361 }
362
363 /**
364 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530365 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530366 * @param file file
367 * @param curNode current YANG node
368 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530369 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530370 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530371 */
Bharat saraswald14cbe82016-07-14 13:26:18 +0530372 public static File generateBuilderClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530373 boolean attrPresent)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530374 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530375
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530376 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530377 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530378
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530379 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530380 YangLeavesHolder leavesHolder;
381 if (curNode instanceof YangLeavesHolder) {
382 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530383 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530384 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530385 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530386 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530387
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530388 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530389 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530390 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530391 path = fileInfo.getPluginConfig().getCodeGenDir() +
392 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530393 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530394 path = fileInfo.getBaseCodeGenPath() +
395 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530396 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530397
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530398 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode,
399 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530400 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530401 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530402
403 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530404 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530405 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
406 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530407 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530408 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530409 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530410 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530411 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530412 methods.add(getDataFromTempFileHandle(
413 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530414 // Setter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530415 methods.add(getDataFromTempFileHandle(
416 SETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswald14cbe82016-07-14 13:26:18 +0530417
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530418 //Add to list impl method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530419 methods.add(getDataFromTempFileHandle(
420 ADD_TO_LIST_IMPL_MASK, getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530421
Bharat saraswald14cbe82016-07-14 13:26:18 +0530422 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530423
Bharat saraswal8beac342016-08-04 02:00:03 +0530424 //Add operation attribute methods.
Bharat saraswal94844d62016-10-13 13:28:03 +0530425 if (leavesPresent && curNode.isOpTypeReq()) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530426 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal94844d62016-10-13 13:28:03 +0530427 methods.add(getSetterForSelectLeaf(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530428 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530429 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530430 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530431 }
432 } else {
433 insertDataIntoJavaFile(file, NEW_LINE);
434 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530435
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530436 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530437 methods.add(getAddAugmentInfoMethodImpl(className + BUILDER));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530438 methods.add(getYangAugmentInfoImpl());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530439 }
440
Bharat saraswal64e7e232016-07-14 23:33:55 +0530441 // Add default constructor and build method impl.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530442 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
443 .getTempJavaCodeFragmentFiles()
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530444 .addBuildMethodImpl());
Bharat saraswal0663aff2016-10-18 23:16:14 +0530445 if (curNode instanceof YangAugment) {
446 methods.add(generateBuildMethodInAugmentClass(className));
447 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530448 methods.add(addDefaultConstructor(curNode, PUBLIC, BUILDER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530449
450 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530451 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530452 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530453 }
Bharat saraswald14cbe82016-07-14 13:26:18 +0530454 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswale304c252016-08-16 20:56:20 +0530455 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530456 }
457
458 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530459 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530460 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530461 * @param file file
462 * @param curNode current YANG node
463 * @param attrPresent if any attribute is present or not
464 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530465 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530466 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530467 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530468 public static File generateDefaultClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530469 boolean attrPresent,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530470 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530471 throws IOException {
472
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530473 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530474 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530475 YangPluginConfig config = fileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530476
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530477 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530478 YangLeavesHolder leavesHolder;
479 if (curNode instanceof YangLeavesHolder) {
480 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530481 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530482 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530483 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530484 }
485
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530486 boolean rootNode = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530487
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530488 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530489 String opParamClassName = className;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530490 String name = DEFAULT_CAPS + className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530491 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530492 if (curNode instanceof RpcNotificationContainer) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530493 opParamClassName = className + OP_PARAM;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530494 name = opParamClassName;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530495 rootNode = true;
496 path = fileInfo.getPluginConfig().getCodeGenDir() +
497 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530498 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530499 path = fileInfo.getBaseCodeGenPath() +
500 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530501 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530502
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530503 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode,
504 className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530505
Bharat saraswal022dae92016-03-04 20:08:09 +0530506 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530507 if (attrPresent) {
508 addDefaultClassAttributeInfo(file, curNode, className,
509 opParamClassName, path, methods,
Bharat saraswal94844d62016-10-13 13:28:03 +0530510 rootNode);
Bharat saraswald532a4c2016-03-25 18:19:46 +0530511 } else {
512 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530513 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530514
Bharat saraswal8beac342016-08-04 02:00:03 +0530515 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530516 methods.add(getYangAugmentInfoImpl());
Bharat saraswal8beac342016-08-04 02:00:03 +0530517 }
518 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530519 //Constructor.
Bharat saraswal94844d62016-10-13 13:28:03 +0530520 String constructor = getConstructorStart(className, rootNode) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530521 getDataFromTempFileHandle(
Bharat saraswal94844d62016-10-13 13:28:03 +0530522 CONSTRUCTOR_IMPL_MASK, getBeanFiles(curNode), path)
523 + methodClose(FOUR_SPACE);
524 methods.add(constructor);
525 if (curNode.isOpTypeReq()) {
526 String augmentableSubTreeFiltering = EMPTY_STRING;
527 if (curNode instanceof YangAugmentableNode) {
528 // add is filter content match.
529 augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530530 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530531 methods.add(getProcessSubtreeFilteringStart(curNode) +
Bharat saraswal94844d62016-10-13 13:28:03 +0530532 getProcessSubtreeFunctionBody(curNode) +
533 augmentableSubTreeFiltering +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530534 getProcessSubTreeFilteringEnd(name, curNode));
Bharat saraswal94844d62016-10-13 13:28:03 +0530535
536 if (curNode instanceof YangLeavesHolder) {
537 if (((YangLeavesHolder) curNode).getListOfLeaf() != null &&
538 !((YangLeavesHolder) curNode).getListOfLeaf().isEmpty()) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530539 methods.add(getProcessLeafSubtreeFiltering(curNode,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530540 path));
Bharat saraswal94844d62016-10-13 13:28:03 +0530541 }
542 if (((YangLeavesHolder) curNode).getListOfLeafList() != null &&
543 !((YangLeavesHolder) curNode).getListOfLeafList().isEmpty()) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530544 methods.add(getProcessLeafListSubtreeFiltering(curNode,
Bharat saraswal94844d62016-10-13 13:28:03 +0530545 path));
546 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530547 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530548
Bharat saraswal94844d62016-10-13 13:28:03 +0530549 if (curNode.getChild() != null) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530550 methods.add(getProcessChildNodeSubtreeFiltering(curNode,
Bharat saraswal94844d62016-10-13 13:28:03 +0530551 path));
552 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530553 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530554 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530555 throw new IOException(getErrorMsg(className, IMPL_CLASS));
Vinod Kumar S08710982016-03-03 19:55:30 +0530556 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530557
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530558 methods.add(addDefaultConstructor(curNode, PROTECTED, DEFAULT));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530559
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530560 methods.add(builderMethod(className));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530561 if (leavesPresent) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530562 methods.add(getIsValueLeafSet());
563 if (curNode.isOpTypeReq()) {
564 methods.add(getIsSelectLeafSet());
565 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530566 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530567 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530568 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530569 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530570 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530571
Bharat saraswale304c252016-08-16 20:56:20 +0530572 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530573 }
574
575 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530576 * Add methods related to attributes.
577 *
578 * @param file file
579 * @param curNode current YANG node
580 * @param className name of the class
581 * @param opParamClassName op param class name
582 * @param path file path
583 * @param methods list of methods string
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530584 * @param rootNode flag indicating whether node is root node
585 * @throws IOException a violation in IO rule
586 */
587 private static void addDefaultClassAttributeInfo(File file, YangNode curNode,
588 String className,
589 String opParamClassName,
590 String path, List<String> methods,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530591 boolean rootNode)
592 throws IOException {
593
594 //Add attribute strings.
595 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530596 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
597 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530598 } catch (IOException e) {
599 throw new IOException(getErrorMsg(className, IMPL_CLASS));
600 }
601
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530602 try {
603 //Getter methods.
604 methods.add(getDataFromTempFileHandle(
605 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
606
607 // Hash code method.
608 methods.add(getHashCodeMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530609 getHashCodeMethodOpen() + getDataFromTempFileHandle(
610 HASH_CODE_IMPL_MASK, getBeanFiles(curNode), path)
611 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530612
613 //Equals method.
614 if (rootNode) {
615 methods.add(getEqualsMethodClose(
616 getEqualsMethodOpen(opParamClassName) +
617 getDataFromTempFileHandle(
618 EQUALS_IMPL_MASK,
619 getBeanFiles(curNode), path)));
620 } else {
621 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530622 getEqualsMethodOpen(DEFAULT_CAPS + className) +
623 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
624 getBeanFiles(curNode),
625 path)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530626 }
627 // To string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530628 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
629 TO_STRING_IMPL_MASK, getBeanFiles(curNode), path) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530630 getToStringMethodClose());
631 } catch (IOException e) {
632 throw new IOException(getErrorMsg(className, IMPL_CLASS));
633 }
634 }
635
636 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530637 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530638 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530639 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530640 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530641 * @param imports imports for file
642 * @return type def class file
643 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530644 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530645 public static File generateTypeDefClassFile(File file, YangNode curNode,
646 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530647 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530648
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530649 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530650 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530651 // import
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530652 String className = getCapitalCase(fileInfo.getJavaName());
653 String path = fileInfo.getBaseCodeGenPath() +
654 fileInfo.getPackageFilePath();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530655 YangTypeDef typeDef = (YangTypeDef) curNode;
656 List<YangType<?>> types = typeDef.getTypeList();
657 YangType type = types.get(0);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530658 YangDataTypes yangDataTypes = type.getDataType();
Bharat saraswal022dae92016-03-04 20:08:09 +0530659
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530660 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530661 imports, path);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530662
Bharat saraswal84366c52016-03-23 19:40:35 +0530663 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530664
Bharat saraswal64e7e232016-07-14 23:33:55 +0530665 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530666 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530667 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
668 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530669 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530670 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530671 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530672
Bharat saraswal64e7e232016-07-14 23:33:55 +0530673 //Default constructor.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530674 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530675
Bharat saraswal022dae92016-03-04 20:08:09 +0530676 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530677
Bharat saraswal64e7e232016-07-14 23:33:55 +0530678 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530679 methods.add(getDataFromTempFileHandle(
680 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530681
682 //Of method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530683 methods.add(getDataFromTempFileHandle(
684 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530685
Bharat saraswal64e7e232016-07-14 23:33:55 +0530686 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530687 methods.add(getDataFromTempFileHandle(
688 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530689
Bharat saraswal64e7e232016-07-14 23:33:55 +0530690 // Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530691 methods.add(getHashCodeMethodClose(
692 getHashCodeMethodOpen() + getDataFromTempFileHandle(
693 HASH_CODE_IMPL_MASK, getTypeFiles(curNode), path)
694 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530695
696 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530697 methods.add(getEqualsMethodClose(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530698 getEqualsMethodOpen(className + EMPTY_STRING) +
699 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
700 getTypeFiles(curNode), path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530701
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530702 // To string method.
Bharat saraswal0663aff2016-10-18 23:16:14 +0530703 addTypedefToString(curNode, methods);
Bharat saraswal84366c52016-03-23 19:40:35 +0530704
Bharat saraswal64e7e232016-07-14 23:33:55 +0530705 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
706
Bharat saraswal8beac342016-08-04 02:00:03 +0530707 //From string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530708 if (type.getDataType() == DERIVED &&
709 ((YangDerivedInfo) type.getDataTypeExtendedInfo())
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530710 .getEffectiveBuiltInType()
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530711 == IDENTITYREF) {
712 yangDataTypes = IDENTITYREF;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530713 }
714
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530715 if (type.getDataType() == IDENTITYREF) {
716 yangDataTypes = IDENTITYREF;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530717 }
718
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530719 if (yangDataTypes != IDENTITYREF) {
720 methods.add(getFromStringMethodSignature(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530721 getDataFromTempFileHandle(
722 FROM_STRING_IMPL_MASK,
723 javaGenInfo.getTempJavaCodeFragmentFiles()
724 .getTypeTempFiles(), path) +
725 getFromStringMethodClose());
Shankara-Huaweib7564772016-08-02 18:13:13 +0530726 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530727 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530728 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswal022dae92016-03-04 20:08:09 +0530729 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530730
Bharat saraswal84366c52016-03-23 19:40:35 +0530731 for (String method : methods) {
732 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530733 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530734 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530735
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530736 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +0530737 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530738
739 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530740 * Adds typedef to string method.
741 *
742 * @param curNode current node
743 * @param methods list of methods string
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530744 * @throws IOException a violation in IO rule
745 */
746 private static void addTypedefToString(YangNode curNode,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530747 List<String> methods)
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530748 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530749 //To string method.
Bharat saraswal94844d62016-10-13 13:28:03 +0530750
751 List<YangType<?>> types = ((YangTypeDef) curNode).getTypeList();
752 YangType type = types.get(0);
Bharat saraswal94844d62016-10-13 13:28:03 +0530753 methods.add(getToStringForType(getCamelCase(type.getDataTypeName(),
Bharat saraswal0663aff2016-10-18 23:16:14 +0530754 null), type));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530755 }
756
757 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530758 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530759 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530760 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530761 * @param curNode current YANG node
762 * @param imports imports for file
763 * @return type def class file
764 * @throws IOException when fails to generate class file
765 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530766 public static File generateUnionClassFile(File file, YangNode curNode,
767 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530768 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530769
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530770 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530771 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530772
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530773 String className = getCapitalCase(fileInfo.getJavaName());
774 String path = fileInfo.getBaseCodeGenPath() +
775 fileInfo.getPackageFilePath();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530776
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530777 TempJavaTypeFragmentFiles tempFiles =
778 ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
779 .getTypeTempFiles();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530780
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530781 boolean intConflict = false;
782 boolean longConflict = false;
783 boolean shortConflict = false;
784 JavaAttributeInfo intAttr = tempFiles.getIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530785 if (intAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530786 intAttr = tempFiles.getUIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530787 }
788
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530789 JavaAttributeInfo longAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530790 tempFiles.getLongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530791 if (longAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530792 longAttr = tempFiles.getULongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530793 }
794
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530795 JavaAttributeInfo shortAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530796 tempFiles.getShortAttribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530797 if (shortAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530798 shortAttr = tempFiles.getUInt8Attribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530799 }
800
Bharat saraswal64e7e232016-07-14 23:33:55 +0530801 if (intAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530802 intConflict = intAttr.isIntConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530803 }
804 if (longAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530805 longConflict = longAttr.isLongConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530806 }
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530807 if (shortAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530808 shortConflict = shortAttr.isShortConflict();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530809 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530810 if (longConflict) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530811 String impt = tempFiles.getJavaImportData().getBigIntegerImport();
812 if (!imports.contains(impt)) {
813 imports.add(impt);
814 sort(imports);
815 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530816 }
817
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530818 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530819 imports, path);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530820
821 List<String> methods = new ArrayList<>();
822
Bharat saraswal64e7e232016-07-14 23:33:55 +0530823 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530824 try {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530825 addUnionClassAttributeInfo(file, curNode, intConflict,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530826 longConflict, shortConflict, path, tempFiles);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530827 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530828 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530829 }
830
Bharat saraswal64e7e232016-07-14 23:33:55 +0530831 //Default constructor.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530832 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530833
834 try {
835
Bharat saraswal64e7e232016-07-14 23:33:55 +0530836 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530837 methods.add(getDataFromTempFileHandle(
838 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530839
840 // Of string method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530841 methods.add(getDataFromTempFileHandle(
842 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530843
Bharat saraswal64e7e232016-07-14 23:33:55 +0530844 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530845 methods.add(getDataFromTempFileHandle(
846 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530847
848 //Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530849 methods.add(getHashCodeMethodClose(
850 getHashCodeMethodOpen() +
851 getDataFromTempFileHandle(
852 HASH_CODE_IMPL_MASK, getTypeFiles(curNode),
853 path).replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530854
Bharat saraswal64e7e232016-07-14 23:33:55 +0530855 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530856 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530857 getEqualsMethodOpen(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530858 getDataFromTempFileHandle(
859 EQUALS_IMPL_MASK, getTypeFiles(curNode),
860 path)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530861
862 //To string method.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530863 methods.add(getUnionToStringMethod(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530864 ((YangUnion) curNode).getTypeList()));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530865
Bharat saraswal64e7e232016-07-14 23:33:55 +0530866 //From string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530867 methods.add(getFromStringMethodSignature(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530868 getDataFromTempFileHandle(
869 FROM_STRING_IMPL_MASK,
870 getTypeFiles(curNode), path) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530871 getFromStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530872
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530873 if (intConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530874 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530875 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530876 if (longConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530877 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530878 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530879 if (shortConflict && !intConflict) {
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530880 methods.add(getRangeValidatorMethodForUnion(INT));
881 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530882 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530883 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530884 }
885
886 for (String method : methods) {
887 insertDataIntoJavaFile(file, method);
888 }
889 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
890
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530891 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530892 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530893
894 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530895 * Adds union class attribute information.
896 *
897 * @param file generated file
898 * @param curNode current YANG node
899 * @param intConflict flag to indicate if there is a conflict in int
900 * @param longConflict flag to indicate if there is a conflict in long
901 * @param shortConflict flag to indicate if there is a conflict in short
902 * @param path file path
903 * @param tempFiles temp java type fragment files
904 * @throws IOException a violation in IO rule
905 */
906 private static void addUnionClassAttributeInfo(File file,
907 YangNode curNode,
908 boolean intConflict,
909 boolean longConflict,
910 boolean shortConflict,
911 String path,
912 TempJavaTypeFragmentFiles tempFiles)
913 throws IOException {
914 if (intConflict) {
915 insertDataIntoJavaFile(file, JavaCodeSnippetGen
916 .addStaticAttributeIntRange(PRIVATE,
917 tempFiles.getIntIndex() <
918 tempFiles.getUIntIndex()));
919 }
920
921 if (longConflict) {
922 insertDataIntoJavaFile(file, JavaCodeSnippetGen
923 .addStaticAttributeLongRange(PRIVATE,
924 tempFiles.getLongIndex() <
925 tempFiles.getULongIndex()));
926 }
927
928 if (shortConflict) {
929 insertDataIntoJavaFile(file, JavaCodeSnippetGen
930 .addStaticAttributeShortRange(PRIVATE,
931 tempFiles.getShortIndex() <
932 tempFiles.getUInt8Index()));
933 }
934
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530935 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
936 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530937 insertDataIntoJavaFile(file, getSetValueParaForUnionClass());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530938 }
939
940 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530941 * Generates class file for type enum.
942 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530943 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530944 * @param curNode current YANG node
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530945 * @param imports import list
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530946 * @return class file for type enum
947 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530948 */
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530949 public static File generateEnumClassFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530950 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530951
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530952 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530953 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530954
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530955 String className = fileInfo.getJavaName();
956 String path = fileInfo.getBaseCodeGenPath() +
957 fileInfo.getPackageFilePath();
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530958 TempJavaEnumerationFragmentFiles enumFile = ((JavaCodeGeneratorInfo)
959 curNode).getTempJavaCodeFragmentFiles().getEnumTempFiles();
960 JavaImportData data = enumFile.getJavaImportData();
961 if (!enumFile.isEnumClass()) {
962 imports.add(data.getImportForToBitSet());
963 imports.add(data.getImportForPattern());
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530964 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530965
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530966 initiateJavaFileGeneration(file, getCapitalCase(className),
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530967 GENERATE_ENUM_CLASS, imports, path);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530968
969 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530970 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530971 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530972 String[] remove = {COMMA, NEW_LINE};
973 insertDataIntoJavaFile(file, trimAtLast(getDataFromTempFileHandle(
974 ENUM_IMPL_MASK, javaGenInfo.getTempJavaCodeFragmentFiles()
975 .getEnumTempFiles(), path), remove) +
976 signatureClose());
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530977 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530978 throw new IOException(getErrorMsg(getCapitalCase(className),
979 ENUM_CLASS));
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530980 }
981
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530982 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530983 // Add an attribute to get the enum's values.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530984 insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530985
Bharat saraswal64e7e232016-07-14 23:33:55 +0530986 // Add a constructor for enum.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530987 //TODO: generate javadoc for method.
988 insertDataIntoJavaFile(file, getEnumsConstructor(getCapitalCase(className)) +
989 NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +0530990
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530991 insertDataIntoJavaFile(file,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530992 getEnumsOfValueMethod(className,
993 (YangEnumeration) curNode,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530994 ENUM_METHOD_INT_VALUE));
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530995 insertDataIntoJavaFile(file,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530996 getEnumsOfValueMethod(className,
997 (YangEnumeration) curNode,
998 ENUM_METHOD_STRING_VALUE));
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530999
Bharat saraswal64e7e232016-07-14 23:33:55 +05301000 // Add a getter method for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301001 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301002 null) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301003 getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301004
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301005 if (!enumFile.isEnumClass()) {
1006 insertDataIntoJavaFile(file, getBitSetEnumClassFromString
1007 (getCapitalCase(className)));
1008 insertDataIntoJavaFile(file, getBitSetEnumClassToString(
1009 getCapitalCase(className), (YangEnumeration) curNode));
Bharat saraswal94844d62016-10-13 13:28:03 +05301010 } else {
1011 insertDataIntoJavaFile(file, getToStringForEnumClass());
Bharat saraswal250a7472016-05-12 13:16:57 +05301012 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301013
1014 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1015
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301016 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301017 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301018
1019 /**
1020 * Generates interface file for rpc.
1021 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301022 * @param file generated file
1023 * @param curNode current YANG node
1024 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301025 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301026 * @throws IOException when fails to generate class file
1027 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301028 public static File generateServiceInterfaceFile(File file, YangNode curNode,
1029 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301030 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301031
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301032 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301033 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301034
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301035 TempJavaServiceFragmentFiles tempFiles =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301036 ((JavaCodeGeneratorInfo) curNode)
1037 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301038 String className = getCapitalCase(fileInfo.getJavaName()) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301039 SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301040 String path = fileInfo.getBaseCodeGenPath() +
1041 fileInfo.getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301042 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports,
1043 curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301044
1045 List<String> methods = new ArrayList<>();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301046 JavaAttributeInfo rootAttribute =
1047 getCurNodeAsAttributeInTarget(curNode, curNode, false,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301048 tempFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301049
1050 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301051
Bharat saraswal1edde622016-09-06 10:18:04 +05301052 if (isGetSetOfRootNodeRequired(curNode)) {
1053 //Getter methods.
1054 methods.add(getGetterString(rootAttribute,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301055 GENERATE_SERVICE_AND_MANAGER) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301056 NEW_LINE);
1057 // Setter methods.
1058 methods.add(getSetterString(rootAttribute, className,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301059 GENERATE_SERVICE_AND_MANAGER) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301060 NEW_LINE);
1061 }
1062
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301063 methods.add(getAugmentsDataMethodForService(curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +05301064
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301065 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
1066 .getServiceTempFiles() != null) {
1067 JavaCodeGeneratorInfo javaGenInfo =
1068 (JavaCodeGeneratorInfo) curNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301069
1070 // Rpc methods
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301071 methods.add(getDataFromTempFileHandle(
1072 RPC_INTERFACE_MASK,
1073 javaGenInfo.getTempJavaCodeFragmentFiles()
1074 .getServiceTempFiles(), path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301075 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301076 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301077 throw new IOException(getErrorMsg(className, RPC_CLASS));
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301078 }
1079
1080 for (String method : methods) {
1081 insertDataIntoJavaFile(file, method);
1082 }
1083 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1084
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301085 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301086 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301087
1088 /**
1089 * Generates event file.
1090 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301091 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301092 * @param curNode current YANG node
1093 * @param imports imports for file
1094 * @throws IOException when fails to generate class file
1095 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301096 public static void generateEventFile(File file, YangNode curNode,
1097 List<String> imports)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301098 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301099
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301100 String className =
1101 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1102 .getJavaName()) + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301103
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301104 TempJavaEventFragmentFiles tempFiles =
1105 ((TempJavaCodeFragmentFilesContainer) curNode)
1106 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301107
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301108 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301109 .getBaseCodeGenPath() +
1110 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1111 .getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301112 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode,
1113 className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301114 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301115 insertDataIntoJavaFile(file, getEventEnumTypeStart() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301116 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK,
1117 tempFiles, path),
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301118 COMMA) + methodClose(FOUR_SPACE));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301119
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301120 insertDataIntoJavaFile(file,
1121 getDataFromTempFileHandle(EVENT_METHOD_MASK,
1122 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301123 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301124 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301125 }
1126
1127 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1128 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301129 }
1130
1131 /**
1132 * Generates event listener file.
1133 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301134 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301135 * @param curNode current YANG node
1136 * @param imports imports for file
1137 * @throws IOException when fails to generate class file
1138 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301139 public static void generateEventListenerFile(File file, YangNode curNode,
1140 List<String> imports)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301141 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301142
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301143 String className =
1144 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1145 .getJavaName()) + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301146
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301147 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE,
1148 imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301149 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301150 validateLineLength(file);
1151 }
1152
1153 /**
1154 * Generates event subject's file.
1155 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301156 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301157 * @param curNode current YANG node
1158 * @throws IOException when fails to do IO exceptions
1159 */
1160 public static void generateEventSubjectFile(File file, YangNode curNode)
1161 throws IOException {
1162
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301163 String className =
1164 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1165 .getJavaName()) + EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301166
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301167 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null,
1168 curNode, className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301169
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301170 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301171 .getBaseCodeGenPath() +
1172 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1173 .getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301174
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301175 TempJavaEventFragmentFiles tempFiles =
1176 ((TempJavaCodeFragmentFilesContainer) curNode)
1177 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301178
1179 insertDataIntoJavaFile(file, NEW_LINE);
1180 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301181 insertDataIntoJavaFile(
1182 file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK,
1183 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301184
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301185 insertDataIntoJavaFile(
1186 file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK,
1187 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301188
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301189 insertDataIntoJavaFile(
1190 file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK,
1191 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301192 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301193 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301194 }
1195
1196 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1197 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301198 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301199
1200 /**
1201 * Returns error message string.
1202 *
1203 * @param className name of the class
1204 * @param fileType type of file
1205 * @return error message string
1206 */
1207 private static String getErrorMsg(String className, String fileType) {
1208 return "No data found in temporary java code fragment files for " +
1209 className + " while " + fileType + " file generation.";
1210 }
1211
1212 /**
1213 * Checks whether leaf is present in YANG leaves holder.
1214 *
1215 * @param holder holder of YANG leaves
1216 * @return true if leaves are present, false otherwise
1217 */
1218 private static boolean leavesPresent(YangLeavesHolder holder) {
1219 return holder.getListOfLeaf() != null &&
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301220 !holder.getListOfLeaf().isEmpty();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301221 }
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301222
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301223}