blob: 2033d2d23a4f29a029ee0bb2f20bf0d620cdfb82 [file] [log] [blame]
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301/*
Brian O'Connor0f7908b2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava.utils;
18
Bharat saraswal9fab16b2016-09-23 23:27:24 +053019import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053020import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Bharat saraswale50edca2016-08-05 01:58:25 +053021import org.onosproject.yangutils.datamodel.YangCase;
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;
Bharat saraswale50edca2016-08-05 01:58:25 +053030import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053031import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswalaf413b82016-07-14 15:18:20 +053032import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswald14cbe82016-07-14 13:26:18 +053033import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053034import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053035import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053036import org.onosproject.yangutils.translator.tojava.JavaImportData;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053037import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053038import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswal039f59c2016-07-14 21:57:13 +053039import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053040import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +053041import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053042import org.onosproject.yangutils.utils.io.YangPluginConfig;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053043
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053044import java.io.File;
45import java.io.IOException;
46import java.util.ArrayList;
47import java.util.List;
48
49import static java.util.Collections.sort;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053050import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
51import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
53import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
55import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
56import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
57import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
58import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
59import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
60import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
61import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
62import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
63import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
64import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
65import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
68import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
69import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
73import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
74import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
75import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
76import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
77import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
78import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
79import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
80import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
81import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
82import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
83import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
84import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053085import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
86import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getQualifierInfoForCasesParent;
87import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isGetSetOfRootNodeRequired;
Bharat saraswal94844d62016-10-13 13:28:03 +053088import static org.onosproject.yangutils.translator.tojava.utils.BitsJavaInfoHandler.generateBitsFile;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053089import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053090import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
91import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053092import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053093import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getSetValueParaForUnionClass;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053094import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
95import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053096import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_INT_VALUE;
97import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_STRING_VALUE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053098import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.builderMethod;
99import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
101import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassFromString;
103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassToString;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530105import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfValueMethod;
107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
114import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530115import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumSignature;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530116import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRangeValidatorMethodForUnion;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530117import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForSelectLeaf;
118import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
Bharat saraswal94844d62016-10-13 13:28:03 +0530119import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringForEnumClass;
120import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringForType;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530121import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
122import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530123import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getUnionToStringMethod;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530124import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoImpl;
125import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoInterface;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530126import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isLeafValueSetInterface;
127import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isSelectLeafSetInterface;
128import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.processSubtreeFilteringInterface;
129import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.setSelectLeafSetInterface;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530130import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getInterfaceLeafIdEnumMethods;
Bharat saraswal94844d62016-10-13 13:28:03 +0530131import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIsSelectLeafSet;
132import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIsValueLeafSet;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530133import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530134import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530135import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getAugmentableSubTreeFiltering;
136import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessChildNodeSubtreeFiltering;
137import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafListSubtreeFiltering;
138import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafSubtreeFiltering;
139import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubTreeFilteringEnd;
140import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFilteringStart;
141import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFunctionBody;
142import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.addDefaultConstructor;
143import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
144import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getTypeFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530145import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530146import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530147import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_CLASS;
148import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_INTERFACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530149import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530150import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530151import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530152import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530153import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530154import static org.onosproject.yangutils.utils.UtilConstants.ENUM_CLASS;
155import static org.onosproject.yangutils.utils.UtilConstants.EVENT_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530156import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530157import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530158import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530159import static org.onosproject.yangutils.utils.UtilConstants.IMPL_CLASS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530160import static org.onosproject.yangutils.utils.UtilConstants.INT;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530161import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530162import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +0530163import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530164import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530165import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530166import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530167import static org.onosproject.yangutils.utils.UtilConstants.RPC_CLASS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530168import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530169import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530170import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_CLASS;
171import static org.onosproject.yangutils.utils.UtilConstants.UNION_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530172import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530173import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswal94844d62016-10-13 13:28:03 +0530174import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530175import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
176import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530177import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530178import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530179import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
180
Vinod Kumar S08710982016-03-03 19:55:30 +0530181/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530182 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530183 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530184public final class JavaFileGenerator {
185
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530186 // No instantiation
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530187 private JavaFileGenerator() {
188 }
189
190 /**
191 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530192 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530193 * @param file file
194 * @param imports imports for the file
195 * @param curNode current YANG node
196 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530197 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530198 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530199 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530200 public static File generateInterfaceFile(File file, List<String> imports,
201 YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530202 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530203 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530204
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530205 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530206 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530207
208 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530209 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530210 path = fileInfo.getPluginConfig().getCodeGenDir() +
211 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530212 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530213 path = fileInfo.getBaseCodeGenPath() +
214 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530215 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530216
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530217 String className = getCapitalCase(fileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530218
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530219 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530220 YangLeavesHolder leavesHolder;
221 if (curNode instanceof YangLeavesHolder) {
222 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530223 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530224 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530225 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530226 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530227
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530228 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode,
229 className);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530230
231 // Generate ENUM interface
Bharat saraswal94844d62016-10-13 13:28:03 +0530232 if (curNode instanceof RpcNotificationContainer) {
233 insertDataIntoJavaFile(file, getOperationTypeEnum());
234 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530235 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530236 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530237 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530238 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530239 //Leaf identifier enum.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530240 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530241 insertDataIntoJavaFile(file, getInterfaceLeafIdEnumSignature(
242 className) + trimAtLast(replaceLast(
243 getDataFromTempFileHandle(
244 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
245 getBeanFiles(curNode), path),
246 COMMA, SEMI_COLON), NEW_LINE) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530247 getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530248 }
249
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530250 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530251 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530252 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
253 GETTER_FOR_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530254 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530255 throw new IOException(getErrorMsg(className, INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530256 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530257 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530258
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530259 if (curNode instanceof YangAugmentableNode &&
260 !(curNode instanceof YangChoice)) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530261 methods.add(getYangAugmentInfoInterface());
Bharat saraswal8beac342016-08-04 02:00:03 +0530262 }
Bharat saraswal94844d62016-10-13 13:28:03 +0530263 if (curNode.isOpTypeReq()) {
264 if (curNode instanceof YangCase) {
265 YangNode caseParent = curNode.getParent();
266 JavaQualifiedTypeInfo qualifiedTypeInfo =
267 getQualifierInfoForCasesParent(caseParent,
268 fileInfo.getPluginConfig());
269 methods.add(processSubtreeFilteringInterface(
270 qualifiedTypeInfo.getClassInfo()));
271 } else {
272 methods.add(processSubtreeFilteringInterface(className));
273 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530274 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530275
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530276 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530277 methods.add(isLeafValueSetInterface());
Bharat saraswal94844d62016-10-13 13:28:03 +0530278 if (curNode.isOpTypeReq()) {
279 methods.add(isSelectLeafSetInterface());
280 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530281 }
282 for (String method : methods) {
283 insertDataIntoJavaFile(file, method);
284 }
Bharat saraswale304c252016-08-16 20:56:20 +0530285 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530286 }
287
288 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530289 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530290 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530291 * @param file file
292 * @param curNode current YANG node
293 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530294 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530295 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530296 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530297 public static File generateBuilderInterfaceFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530298 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530299 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530300
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530301 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530302 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530303
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530304 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530305 YangLeavesHolder leavesHolder;
Bharat saraswal94844d62016-10-13 13:28:03 +0530306 if (curNode instanceof YangLeavesHolder &&
307 curNode.isOpTypeReq()) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530308 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530309 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530310 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530311 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530312 }
313
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530314 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530315 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530316 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530317 path = fileInfo.getPluginConfig().getCodeGenDir() +
318 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530319 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530320 path = fileInfo.getBaseCodeGenPath() +
321 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530322 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530323
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530324 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode,
325 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530326 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530327 if (attrPresent) {
Bharat saraswald532a4c2016-03-25 18:19:46 +0530328 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530329 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530330 methods.add(getDataFromTempFileHandle(
331 GETTER_FOR_INTERFACE_MASK,
332 getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530333
334 //Setter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530335 methods.add(getDataFromTempFileHandle(
336 SETTER_FOR_INTERFACE_MASK,
337 getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530338
339 //Add to list method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530340 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
341 ADD_TO_LIST_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530342 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530343 throw new IOException(getErrorMsg(className, BUILDER_INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530344 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530345 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530346
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530347 if (curNode instanceof YangAugmentableNode &&
348 !(curNode instanceof YangChoice)) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530349 methods.add(getAddAugmentInfoMethodInterface(className + BUILDER));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530350 methods.add(getYangAugmentInfoInterface());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530351 }
352
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530353 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530354 methods.add(setSelectLeafSetInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530355 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530356 //Add build method to builder interface file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530357 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
358 .getTempJavaCodeFragmentFiles()
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530359 .addBuildMethodForInterface());
Bharat saraswal64e7e232016-07-14 23:33:55 +0530360
361 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530362 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530363 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530364 }
365
Bharat saraswal84366c52016-03-23 19:40:35 +0530366 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale304c252016-08-16 20:56:20 +0530367 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530368 }
369
370 /**
371 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530372 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530373 * @param file file
374 * @param curNode current YANG node
375 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530376 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530377 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530378 */
Bharat saraswald14cbe82016-07-14 13:26:18 +0530379 public static File generateBuilderClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530380 boolean attrPresent)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530381 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530382
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530383 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530384 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530385
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530386 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530387 YangLeavesHolder leavesHolder;
388 if (curNode instanceof YangLeavesHolder) {
389 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530390 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530391 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530392 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530393 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530394
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530395 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530396 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530397 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530398 path = fileInfo.getPluginConfig().getCodeGenDir() +
399 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530400 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530401 path = fileInfo.getBaseCodeGenPath() +
402 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530403 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530404
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530405 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode,
406 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530407 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530408 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530409
410 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530411 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530412 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
413 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530414 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530415 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530416 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530417 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530418 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530419 methods.add(getDataFromTempFileHandle(
420 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530421 // Setter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530422 methods.add(getDataFromTempFileHandle(
423 SETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswald14cbe82016-07-14 13:26:18 +0530424
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530425 //Add to list impl method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530426 methods.add(getDataFromTempFileHandle(
427 ADD_TO_LIST_IMPL_MASK, getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530428
Bharat saraswald14cbe82016-07-14 13:26:18 +0530429 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530430
Bharat saraswal8beac342016-08-04 02:00:03 +0530431 //Add operation attribute methods.
Bharat saraswal94844d62016-10-13 13:28:03 +0530432 if (leavesPresent && curNode.isOpTypeReq()) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530433 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal94844d62016-10-13 13:28:03 +0530434 methods.add(getSetterForSelectLeaf(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530435 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530436 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530437 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530438 }
439 } else {
440 insertDataIntoJavaFile(file, NEW_LINE);
441 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530442
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530443 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530444 methods.add(getAddAugmentInfoMethodImpl(className + BUILDER));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530445 methods.add(getYangAugmentInfoImpl());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530446 }
447
Bharat saraswal64e7e232016-07-14 23:33:55 +0530448 // Add default constructor and build method impl.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530449 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
450 .getTempJavaCodeFragmentFiles()
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530451 .addBuildMethodImpl());
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530452 methods.add(addDefaultConstructor(curNode, PUBLIC, BUILDER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530453
454 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530455 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530456 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530457 }
Bharat saraswald14cbe82016-07-14 13:26:18 +0530458 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswale304c252016-08-16 20:56:20 +0530459 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530460 }
461
462 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530463 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530464 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530465 * @param file file
466 * @param curNode current YANG node
467 * @param attrPresent if any attribute is present or not
468 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530469 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530470 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530471 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530472 public static File generateDefaultClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530473 boolean attrPresent,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530474 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530475 throws IOException {
476
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530477 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530478 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530479 YangPluginConfig config = fileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530480
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530481 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530482 YangLeavesHolder leavesHolder;
483 if (curNode instanceof YangLeavesHolder) {
484 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530485 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530486 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530487 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530488 }
489
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530490 boolean rootNode = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530491
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530492 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530493 String opParamClassName = className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530494 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530495 if (curNode instanceof RpcNotificationContainer) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530496 opParamClassName = className + OP_PARAM;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530497 rootNode = true;
498 path = fileInfo.getPluginConfig().getCodeGenDir() +
499 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530500 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530501 path = fileInfo.getBaseCodeGenPath() +
502 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530503 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530504
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530505 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode,
506 className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530507
Bharat saraswal022dae92016-03-04 20:08:09 +0530508 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530509 if (attrPresent) {
510 addDefaultClassAttributeInfo(file, curNode, className,
511 opParamClassName, path, methods,
Bharat saraswal94844d62016-10-13 13:28:03 +0530512 rootNode);
Bharat saraswald532a4c2016-03-25 18:19:46 +0530513 } else {
514 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530515 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530516
Bharat saraswal8beac342016-08-04 02:00:03 +0530517 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530518 methods.add(getYangAugmentInfoImpl());
Bharat saraswal8beac342016-08-04 02:00:03 +0530519 }
520 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530521 //Constructor.
Bharat saraswal94844d62016-10-13 13:28:03 +0530522 String constructor = getConstructorStart(className, rootNode) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530523 getDataFromTempFileHandle(
Bharat saraswal94844d62016-10-13 13:28:03 +0530524 CONSTRUCTOR_IMPL_MASK, getBeanFiles(curNode), path)
525 + methodClose(FOUR_SPACE);
526 methods.add(constructor);
527 if (curNode.isOpTypeReq()) {
528 String augmentableSubTreeFiltering = EMPTY_STRING;
529 if (curNode instanceof YangAugmentableNode) {
530 // add is filter content match.
531 augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530532 }
Bharat saraswal94844d62016-10-13 13:28:03 +0530533 methods.add(getProcessSubtreeFilteringStart(curNode, config) +
534 getProcessSubtreeFunctionBody(curNode) +
535 augmentableSubTreeFiltering +
536 getProcessSubTreeFilteringEnd());
537
538 if (curNode instanceof YangLeavesHolder) {
539 if (((YangLeavesHolder) curNode).getListOfLeaf() != null &&
540 !((YangLeavesHolder) curNode).getListOfLeaf().isEmpty()) {
541 methods.add(getProcessLeafSubtreeFiltering(curNode, config,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530542 path));
Bharat saraswal94844d62016-10-13 13:28:03 +0530543 }
544 if (((YangLeavesHolder) curNode).getListOfLeafList() != null &&
545 !((YangLeavesHolder) curNode).getListOfLeafList().isEmpty()) {
546 methods.add(getProcessLeafListSubtreeFiltering(curNode, config,
547 path));
548 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530549 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530550
Bharat saraswal94844d62016-10-13 13:28:03 +0530551 if (curNode.getChild() != null) {
552 methods.add(getProcessChildNodeSubtreeFiltering(curNode, config,
553 path));
554 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530555 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530556 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530557 throw new IOException(getErrorMsg(className, IMPL_CLASS));
Vinod Kumar S08710982016-03-03 19:55:30 +0530558 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530559
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530560 methods.add(addDefaultConstructor(curNode, PROTECTED, DEFAULT));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530561
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530562 methods.add(builderMethod(className));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530563 if (leavesPresent) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530564 methods.add(getIsValueLeafSet());
565 if (curNode.isOpTypeReq()) {
566 methods.add(getIsSelectLeafSet());
567 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530568 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530569 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530570 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530571 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530572 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530573
Bharat saraswale304c252016-08-16 20:56:20 +0530574 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530575 }
576
577 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530578 * Add methods related to attributes.
579 *
580 * @param file file
581 * @param curNode current YANG node
582 * @param className name of the class
583 * @param opParamClassName op param class name
584 * @param path file path
585 * @param methods list of methods string
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530586 * @param rootNode flag indicating whether node is root node
587 * @throws IOException a violation in IO rule
588 */
589 private static void addDefaultClassAttributeInfo(File file, YangNode curNode,
590 String className,
591 String opParamClassName,
592 String path, List<String> methods,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530593 boolean rootNode)
594 throws IOException {
595
596 //Add attribute strings.
597 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530598 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
599 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530600 } catch (IOException e) {
601 throw new IOException(getErrorMsg(className, IMPL_CLASS));
602 }
603
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530604 try {
605 //Getter methods.
606 methods.add(getDataFromTempFileHandle(
607 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
608
609 // Hash code method.
610 methods.add(getHashCodeMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530611 getHashCodeMethodOpen() + getDataFromTempFileHandle(
612 HASH_CODE_IMPL_MASK, getBeanFiles(curNode), path)
613 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530614
615 //Equals method.
616 if (rootNode) {
617 methods.add(getEqualsMethodClose(
618 getEqualsMethodOpen(opParamClassName) +
619 getDataFromTempFileHandle(
620 EQUALS_IMPL_MASK,
621 getBeanFiles(curNode), path)));
622 } else {
623 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530624 getEqualsMethodOpen(DEFAULT_CAPS + className) +
625 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
626 getBeanFiles(curNode),
627 path)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530628 }
629 // To string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530630 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
631 TO_STRING_IMPL_MASK, getBeanFiles(curNode), path) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530632 getToStringMethodClose());
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530633
634 for (BitsJavaInfoHandler handler : getBeanFiles(curNode)
635 .getBitsHandler()) {
636 generateBitsFile(handler.getAttr(), handler.getYangType(), curNode);
637 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530638 } catch (IOException e) {
639 throw new IOException(getErrorMsg(className, IMPL_CLASS));
640 }
641 }
642
643 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530644 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530645 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530646 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530647 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530648 * @param imports imports for file
649 * @return type def class file
650 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530651 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530652 public static File generateTypeDefClassFile(File file, YangNode curNode,
653 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530654 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530655
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530656 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530657 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530658 // import
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530659 String className = getCapitalCase(fileInfo.getJavaName());
660 String path = fileInfo.getBaseCodeGenPath() +
661 fileInfo.getPackageFilePath();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530662 YangTypeDef typeDef = (YangTypeDef) curNode;
663 List<YangType<?>> types = typeDef.getTypeList();
664 YangType type = types.get(0);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530665 YangDataTypes yangDataTypes = type.getDataType();
Bharat saraswal022dae92016-03-04 20:08:09 +0530666
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530667 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530668 imports, path);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530669
Bharat saraswal84366c52016-03-23 19:40:35 +0530670 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530671
Bharat saraswal64e7e232016-07-14 23:33:55 +0530672 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530673 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530674 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
675 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530676 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530677 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530678 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530679
Bharat saraswal64e7e232016-07-14 23:33:55 +0530680 //Default constructor.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530681 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530682
Bharat saraswal022dae92016-03-04 20:08:09 +0530683 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530684
Bharat saraswal64e7e232016-07-14 23:33:55 +0530685 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530686 methods.add(getDataFromTempFileHandle(
687 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530688
689 //Of method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530690 methods.add(getDataFromTempFileHandle(
691 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530692
Bharat saraswal64e7e232016-07-14 23:33:55 +0530693 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530694 methods.add(getDataFromTempFileHandle(
695 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530696
Bharat saraswal64e7e232016-07-14 23:33:55 +0530697 // Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530698 methods.add(getHashCodeMethodClose(
699 getHashCodeMethodOpen() + getDataFromTempFileHandle(
700 HASH_CODE_IMPL_MASK, getTypeFiles(curNode), path)
701 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530702
703 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530704 methods.add(getEqualsMethodClose(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530705 getEqualsMethodOpen(className + EMPTY_STRING) +
706 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
707 getTypeFiles(curNode), path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530708
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530709 // To string method.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530710 addTypedefToString(curNode, methods, path);
Bharat saraswal84366c52016-03-23 19:40:35 +0530711
Bharat saraswal64e7e232016-07-14 23:33:55 +0530712 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
713
Bharat saraswal8beac342016-08-04 02:00:03 +0530714 //From string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530715 if (type.getDataType() == DERIVED &&
716 ((YangDerivedInfo) type.getDataTypeExtendedInfo())
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530717 .getEffectiveBuiltInType()
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530718 == IDENTITYREF) {
719 yangDataTypes = IDENTITYREF;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530720 }
721
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530722 if (type.getDataType() == IDENTITYREF) {
723 yangDataTypes = IDENTITYREF;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530724 }
725
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530726 if (yangDataTypes != IDENTITYREF) {
727 methods.add(getFromStringMethodSignature(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530728 getDataFromTempFileHandle(
729 FROM_STRING_IMPL_MASK,
730 javaGenInfo.getTempJavaCodeFragmentFiles()
731 .getTypeTempFiles(), path) +
732 getFromStringMethodClose());
Shankara-Huaweib7564772016-08-02 18:13:13 +0530733 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530734 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530735 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswal022dae92016-03-04 20:08:09 +0530736 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530737
Bharat saraswal84366c52016-03-23 19:40:35 +0530738 for (String method : methods) {
739 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530740 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530741 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530742
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530743 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +0530744 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530745
746 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530747 * Adds typedef to string method.
748 *
749 * @param curNode current node
750 * @param methods list of methods string
751 * @param path file path
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530752 * @throws IOException a violation in IO rule
753 */
754 private static void addTypedefToString(YangNode curNode,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530755 List<String> methods, String path)
756 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530757 //To string method.
Bharat saraswal94844d62016-10-13 13:28:03 +0530758
759 List<YangType<?>> types = ((YangTypeDef) curNode).getTypeList();
760 YangType type = types.get(0);
761 String className = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
762 .getJavaName();
763 methods.add(getToStringForType(getCamelCase(type.getDataTypeName(),
764 null), type, getCapitalCase(className)));
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530765 for (BitsJavaInfoHandler handler : getTypeFiles(curNode)
766 .getBitsHandler()) {
767 generateBitsFile(handler.getAttr(), handler.getYangType(), curNode);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530768 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530769
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530770 }
771
772 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530773 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530774 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530775 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530776 * @param curNode current YANG node
777 * @param imports imports for file
778 * @return type def class file
779 * @throws IOException when fails to generate class file
780 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530781 public static File generateUnionClassFile(File file, YangNode curNode,
782 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530783 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530784
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530785 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530786 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530787
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530788 String className = getCapitalCase(fileInfo.getJavaName());
789 String path = fileInfo.getBaseCodeGenPath() +
790 fileInfo.getPackageFilePath();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530791
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530792 TempJavaTypeFragmentFiles tempFiles =
793 ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
794 .getTypeTempFiles();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530795
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530796 boolean intConflict = false;
797 boolean longConflict = false;
798 boolean shortConflict = false;
799 JavaAttributeInfo intAttr = tempFiles.getIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530800 if (intAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530801 intAttr = tempFiles.getUIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530802 }
803
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530804 JavaAttributeInfo longAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530805 tempFiles.getLongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530806 if (longAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530807 longAttr = tempFiles.getULongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530808 }
809
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530810 JavaAttributeInfo shortAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530811 tempFiles.getShortAttribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530812 if (shortAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530813 shortAttr = tempFiles.getUInt8Attribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530814 }
815
Bharat saraswal64e7e232016-07-14 23:33:55 +0530816 if (intAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530817 intConflict = intAttr.isIntConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530818 }
819 if (longAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530820 longConflict = longAttr.isLongConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530821 }
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530822 if (shortAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530823 shortConflict = shortAttr.isShortConflict();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530824 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530825 if (longConflict) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530826 String impt = tempFiles.getJavaImportData().getBigIntegerImport();
827 if (!imports.contains(impt)) {
828 imports.add(impt);
829 sort(imports);
830 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530831 }
832
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530833 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530834 imports, path);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530835
836 List<String> methods = new ArrayList<>();
837
Bharat saraswal64e7e232016-07-14 23:33:55 +0530838 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530839 try {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530840 addUnionClassAttributeInfo(file, curNode, intConflict,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530841 longConflict, shortConflict, path, tempFiles);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530842 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530843 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530844 }
845
Bharat saraswal64e7e232016-07-14 23:33:55 +0530846 //Default constructor.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530847 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530848
849 try {
850
Bharat saraswal64e7e232016-07-14 23:33:55 +0530851 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530852 methods.add(getDataFromTempFileHandle(
853 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530854
855 // Of string method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530856 methods.add(getDataFromTempFileHandle(
857 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530858
Bharat saraswal64e7e232016-07-14 23:33:55 +0530859 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530860 methods.add(getDataFromTempFileHandle(
861 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530862
863 //Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530864 methods.add(getHashCodeMethodClose(
865 getHashCodeMethodOpen() +
866 getDataFromTempFileHandle(
867 HASH_CODE_IMPL_MASK, getTypeFiles(curNode),
868 path).replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530869
Bharat saraswal64e7e232016-07-14 23:33:55 +0530870 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530871 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530872 getEqualsMethodOpen(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530873 getDataFromTempFileHandle(
874 EQUALS_IMPL_MASK, getTypeFiles(curNode),
875 path)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530876
877 //To string method.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530878 methods.add(getUnionToStringMethod(
Bharat saraswal94844d62016-10-13 13:28:03 +0530879 ((YangUnion) curNode).getTypeList(), getCapitalCase(className)));
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530880
881 for (BitsJavaInfoHandler handler : getTypeFiles(curNode)
882 .getBitsHandler()) {
883 generateBitsFile(handler.getAttr(), handler.getYangType(), curNode);
884 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530885
Bharat saraswal64e7e232016-07-14 23:33:55 +0530886 //From string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530887 methods.add(getFromStringMethodSignature(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530888 getDataFromTempFileHandle(
889 FROM_STRING_IMPL_MASK,
890 getTypeFiles(curNode), path) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530891 getFromStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530892
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530893 if (intConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530894 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530895 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530896 if (longConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530897 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530898 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530899 if (shortConflict && !intConflict) {
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530900 methods.add(getRangeValidatorMethodForUnion(INT));
901 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530902 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530903 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530904 }
905
906 for (String method : methods) {
907 insertDataIntoJavaFile(file, method);
908 }
909 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
910
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530911 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530912 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530913
914 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530915 * Adds union class attribute information.
916 *
917 * @param file generated file
918 * @param curNode current YANG node
919 * @param intConflict flag to indicate if there is a conflict in int
920 * @param longConflict flag to indicate if there is a conflict in long
921 * @param shortConflict flag to indicate if there is a conflict in short
922 * @param path file path
923 * @param tempFiles temp java type fragment files
924 * @throws IOException a violation in IO rule
925 */
926 private static void addUnionClassAttributeInfo(File file,
927 YangNode curNode,
928 boolean intConflict,
929 boolean longConflict,
930 boolean shortConflict,
931 String path,
932 TempJavaTypeFragmentFiles tempFiles)
933 throws IOException {
934 if (intConflict) {
935 insertDataIntoJavaFile(file, JavaCodeSnippetGen
936 .addStaticAttributeIntRange(PRIVATE,
937 tempFiles.getIntIndex() <
938 tempFiles.getUIntIndex()));
939 }
940
941 if (longConflict) {
942 insertDataIntoJavaFile(file, JavaCodeSnippetGen
943 .addStaticAttributeLongRange(PRIVATE,
944 tempFiles.getLongIndex() <
945 tempFiles.getULongIndex()));
946 }
947
948 if (shortConflict) {
949 insertDataIntoJavaFile(file, JavaCodeSnippetGen
950 .addStaticAttributeShortRange(PRIVATE,
951 tempFiles.getShortIndex() <
952 tempFiles.getUInt8Index()));
953 }
954
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530955 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
956 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530957 insertDataIntoJavaFile(file, getSetValueParaForUnionClass());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530958 }
959
960 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530961 * Generates class file for type enum.
962 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530963 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530964 * @param curNode current YANG node
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530965 * @param imports import list
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530966 * @return class file for type enum
967 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530968 */
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530969 public static File generateEnumClassFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530970 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530971
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530972 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530973 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530974
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530975 String className = fileInfo.getJavaName();
976 String path = fileInfo.getBaseCodeGenPath() +
977 fileInfo.getPackageFilePath();
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530978 TempJavaEnumerationFragmentFiles enumFile = ((JavaCodeGeneratorInfo)
979 curNode).getTempJavaCodeFragmentFiles().getEnumTempFiles();
980 JavaImportData data = enumFile.getJavaImportData();
981 if (!enumFile.isEnumClass()) {
982 imports.add(data.getImportForToBitSet());
983 imports.add(data.getImportForPattern());
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530984 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530985
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530986 initiateJavaFileGeneration(file, getCapitalCase(className),
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530987 GENERATE_ENUM_CLASS, imports, path);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530988
989 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530990 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530991 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530992 String[] remove = {COMMA, NEW_LINE};
993 insertDataIntoJavaFile(file, trimAtLast(getDataFromTempFileHandle(
994 ENUM_IMPL_MASK, javaGenInfo.getTempJavaCodeFragmentFiles()
995 .getEnumTempFiles(), path), remove) +
996 signatureClose());
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530997 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530998 throw new IOException(getErrorMsg(getCapitalCase(className),
999 ENUM_CLASS));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301000 }
1001
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301002 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301003 // Add an attribute to get the enum's values.
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301004 insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301005
Bharat saraswal64e7e232016-07-14 23:33:55 +05301006 // Add a constructor for enum.
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301007 //TODO: generate javadoc for method.
1008 insertDataIntoJavaFile(file, getEnumsConstructor(getCapitalCase(className)) +
1009 NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301010
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301011 insertDataIntoJavaFile(file,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301012 getEnumsOfValueMethod(className,
1013 (YangEnumeration) curNode,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301014 ENUM_METHOD_INT_VALUE));
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301015 insertDataIntoJavaFile(file,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301016 getEnumsOfValueMethod(className,
1017 (YangEnumeration) curNode,
1018 ENUM_METHOD_STRING_VALUE));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301019
Bharat saraswal64e7e232016-07-14 23:33:55 +05301020 // Add a getter method for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301021 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301022 null) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301023 getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301024
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301025 if (!enumFile.isEnumClass()) {
1026 insertDataIntoJavaFile(file, getBitSetEnumClassFromString
1027 (getCapitalCase(className)));
1028 insertDataIntoJavaFile(file, getBitSetEnumClassToString(
1029 getCapitalCase(className), (YangEnumeration) curNode));
Bharat saraswal94844d62016-10-13 13:28:03 +05301030 } else {
1031 insertDataIntoJavaFile(file, getToStringForEnumClass());
Bharat saraswal250a7472016-05-12 13:16:57 +05301032 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301033
1034 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1035
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301036 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301037 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301038
1039 /**
1040 * Generates interface file for rpc.
1041 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301042 * @param file generated file
1043 * @param curNode current YANG node
1044 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301045 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301046 * @throws IOException when fails to generate class file
1047 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301048 public static File generateServiceInterfaceFile(File file, YangNode curNode,
1049 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301050 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301051
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301052 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301053 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301054
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301055 TempJavaServiceFragmentFiles tempFiles =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301056 ((JavaCodeGeneratorInfo) curNode)
1057 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301058 String className = getCapitalCase(fileInfo.getJavaName()) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301059 SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301060 String path = fileInfo.getBaseCodeGenPath() +
1061 fileInfo.getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301062 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports,
1063 curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301064
1065 List<String> methods = new ArrayList<>();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301066 JavaAttributeInfo rootAttribute =
1067 getCurNodeAsAttributeInTarget(curNode, curNode, false,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301068 tempFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301069
1070 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301071
Bharat saraswal1edde622016-09-06 10:18:04 +05301072 if (isGetSetOfRootNodeRequired(curNode)) {
1073 //Getter methods.
1074 methods.add(getGetterString(rootAttribute,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301075 GENERATE_SERVICE_AND_MANAGER) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301076 NEW_LINE);
1077 // Setter methods.
1078 methods.add(getSetterString(rootAttribute, className,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301079 GENERATE_SERVICE_AND_MANAGER) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301080 NEW_LINE);
1081 }
1082
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301083 methods.add(getAugmentsDataMethodForService(curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +05301084
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301085 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
1086 .getServiceTempFiles() != null) {
1087 JavaCodeGeneratorInfo javaGenInfo =
1088 (JavaCodeGeneratorInfo) curNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301089
1090 // Rpc methods
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301091 methods.add(getDataFromTempFileHandle(
1092 RPC_INTERFACE_MASK,
1093 javaGenInfo.getTempJavaCodeFragmentFiles()
1094 .getServiceTempFiles(), path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301095 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301096 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301097 throw new IOException(getErrorMsg(className, RPC_CLASS));
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301098 }
1099
1100 for (String method : methods) {
1101 insertDataIntoJavaFile(file, method);
1102 }
1103 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1104
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301105 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301106 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301107
1108 /**
1109 * Generates event file.
1110 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301111 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301112 * @param curNode current YANG node
1113 * @param imports imports for file
1114 * @throws IOException when fails to generate class file
1115 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301116 public static void generateEventFile(File file, YangNode curNode,
1117 List<String> imports)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301118 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301119
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301120 String className =
1121 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1122 .getJavaName()) + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301123
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301124 TempJavaEventFragmentFiles tempFiles =
1125 ((TempJavaCodeFragmentFilesContainer) curNode)
1126 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301127
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301128 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301129 .getBaseCodeGenPath() +
1130 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1131 .getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301132 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode,
1133 className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301134 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301135 insertDataIntoJavaFile(file, getEventEnumTypeStart() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301136 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK,
1137 tempFiles, path),
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301138 COMMA) + methodClose(FOUR_SPACE));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301139
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301140 insertDataIntoJavaFile(file,
1141 getDataFromTempFileHandle(EVENT_METHOD_MASK,
1142 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301143 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301144 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301145 }
1146
1147 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1148 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301149 }
1150
1151 /**
1152 * Generates event listener file.
1153 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301154 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301155 * @param curNode current YANG node
1156 * @param imports imports for file
1157 * @throws IOException when fails to generate class file
1158 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301159 public static void generateEventListenerFile(File file, YangNode curNode,
1160 List<String> imports)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301161 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301162
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301163 String className =
1164 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1165 .getJavaName()) + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301166
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301167 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE,
1168 imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301169 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301170 validateLineLength(file);
1171 }
1172
1173 /**
1174 * Generates event subject's file.
1175 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301176 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301177 * @param curNode current YANG node
1178 * @throws IOException when fails to do IO exceptions
1179 */
1180 public static void generateEventSubjectFile(File file, YangNode curNode)
1181 throws IOException {
1182
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301183 String className =
1184 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1185 .getJavaName()) + EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301186
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301187 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null,
1188 curNode, className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301189
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301190 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301191 .getBaseCodeGenPath() +
1192 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1193 .getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301194
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301195 TempJavaEventFragmentFiles tempFiles =
1196 ((TempJavaCodeFragmentFilesContainer) curNode)
1197 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301198
1199 insertDataIntoJavaFile(file, NEW_LINE);
1200 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301201 insertDataIntoJavaFile(
1202 file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK,
1203 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301204
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301205 insertDataIntoJavaFile(
1206 file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK,
1207 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301208
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301209 insertDataIntoJavaFile(
1210 file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK,
1211 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301212 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301213 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301214 }
1215
1216 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1217 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301218 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301219
1220 /**
1221 * Returns error message string.
1222 *
1223 * @param className name of the class
1224 * @param fileType type of file
1225 * @return error message string
1226 */
1227 private static String getErrorMsg(String className, String fileType) {
1228 return "No data found in temporary java code fragment files for " +
1229 className + " while " + fileType + " file generation.";
1230 }
1231
1232 /**
1233 * Checks whether leaf is present in YANG leaves holder.
1234 *
1235 * @param holder holder of YANG leaves
1236 * @return true if leaves are present, false otherwise
1237 */
1238 private static boolean leavesPresent(YangLeavesHolder holder) {
1239 return holder.getListOfLeaf() != null &&
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301240 !holder.getListOfLeaf().isEmpty();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301241 }
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301242
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301243}