blob: 979df3a524f7ab44d85d495bb33025ce2716dce6 [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 saraswal9fab16b2016-09-23 23:27:24 +053088import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053089import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.addAugmentationAttribute;
90import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
91import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
92import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributeForConstructor;
93import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributes;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053094import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053095import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getSetValueParaForUnionClass;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053096import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getYangAugmentedMapObjectForConstruct;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053097import static org.onosproject.yangutils.translator.tojava.utils.BitsJavaInfoHandler.generateBitsFile;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053098import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
99import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530100import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_INT_VALUE;
101import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_STRING_VALUE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.builderMethod;
103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
105import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassFromString;
107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassToString;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfValueMethod;
111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
114import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
115import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530116import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530117import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
118import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530119import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumSignature;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530120import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRangeValidatorMethodForUnion;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530121import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForSelectLeaf;
122import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
123import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
124import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530125import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getUnionToStringMethod;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530126import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoImpl;
127import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoInterface;
128import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoMapImpl;
129import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoMapInterface;
130import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isLeafValueSetInterface;
131import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isSelectLeafSetInterface;
132import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.processSubtreeFilteringInterface;
133import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.setSelectLeafSetInterface;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530134import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getGettersForValueAndSelectLeaf;
135import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getInterfaceLeafIdEnumMethods;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530136import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOperationAttributesGetters;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530137import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530138import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530139import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getAugmentableSubTreeFiltering;
140import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessChildNodeSubtreeFiltering;
141import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafListSubtreeFiltering;
142import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafSubtreeFiltering;
143import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubTreeFilteringEnd;
144import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFilteringStart;
145import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFunctionBody;
146import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.addDefaultConstructor;
147import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
148import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getTypeFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530149import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530150import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530151import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_CLASS;
152import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_INTERFACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530153import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530154import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530155import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530156import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530157import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530158import static org.onosproject.yangutils.utils.UtilConstants.ENUM_CLASS;
159import static org.onosproject.yangutils.utils.UtilConstants.EVENT_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530160import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530161import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530162import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530163import static org.onosproject.yangutils.utils.UtilConstants.IMPL_CLASS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530164import static org.onosproject.yangutils.utils.UtilConstants.INT;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530165import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530166import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +0530167import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530168import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530169import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530170import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530171import static org.onosproject.yangutils.utils.UtilConstants.RPC_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530172import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530173import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530174import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530175import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530176import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_CLASS;
177import static org.onosproject.yangutils.utils.UtilConstants.UNION_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530178import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530179import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530180import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
181import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530182import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530183import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530184import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
185
Vinod Kumar S08710982016-03-03 19:55:30 +0530186/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530187 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530188 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530189public final class JavaFileGenerator {
190
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530191 // No instantiation
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530192 private JavaFileGenerator() {
193 }
194
195 /**
196 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530197 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530198 * @param file file
199 * @param imports imports for the file
200 * @param curNode current YANG node
201 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530202 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530203 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530204 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530205 public static File generateInterfaceFile(File file, List<String> imports,
206 YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530207 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530208 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530209
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530210 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530211 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530212
213 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530214 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530215 path = fileInfo.getPluginConfig().getCodeGenDir() +
216 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530217 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530218 path = fileInfo.getBaseCodeGenPath() +
219 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530220 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530221
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530222 String className = getCapitalCase(fileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530223
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530224 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530225 YangLeavesHolder leavesHolder;
226 if (curNode instanceof YangLeavesHolder) {
227 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530228 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530229 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530230 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530231 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530232
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530233 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode,
234 className);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530235
236 // Generate ENUM interface
237 insertDataIntoJavaFile(file, getOperationTypeEnum());
238
Bharat saraswal8beac342016-08-04 02:00:03 +0530239 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530240 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530241 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530242 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530243 //Leaf identifier enum.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530244 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530245 insertDataIntoJavaFile(file, getInterfaceLeafIdEnumSignature(
246 className) + trimAtLast(replaceLast(
247 getDataFromTempFileHandle(
248 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
249 getBeanFiles(curNode), path),
250 COMMA, SEMI_COLON), NEW_LINE) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530251 getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530252 }
253
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530254 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530255 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530256 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
257 GETTER_FOR_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530258 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530259 throw new IOException(getErrorMsg(className, INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530260 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530261 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530262
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530263 if (curNode instanceof YangAugmentableNode &&
264 !(curNode instanceof YangChoice)) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530265 methods.add(getYangAugmentInfoInterface());
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530266 methods.add(getYangAugmentInfoMapInterface());
Bharat saraswal8beac342016-08-04 02:00:03 +0530267 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530268
Bharat saraswale50edca2016-08-05 01:58:25 +0530269 if (curNode instanceof YangCase) {
270 YangNode caseParent = curNode.getParent();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530271 JavaQualifiedTypeInfo qualifiedTypeInfo =
272 getQualifierInfoForCasesParent(caseParent,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530273 fileInfo.getPluginConfig());
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530274 methods.add(processSubtreeFilteringInterface(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530275 qualifiedTypeInfo.getClassInfo()));
Bharat saraswale50edca2016-08-05 01:58:25 +0530276 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530277 methods.add(processSubtreeFilteringInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530278 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530279
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530280 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530281 methods.add(isLeafValueSetInterface());
282 methods.add(isSelectLeafSetInterface());
Bharat saraswal8beac342016-08-04 02:00:03 +0530283 }
284 for (String method : methods) {
285 insertDataIntoJavaFile(file, method);
286 }
Bharat saraswale304c252016-08-16 20:56:20 +0530287 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530288 }
289
290 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530291 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530292 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530293 * @param file file
294 * @param curNode current YANG node
295 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530296 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530297 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530298 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530299 public static File generateBuilderInterfaceFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530300 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530301 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530302
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530303 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530304 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530305
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530306 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530307 YangLeavesHolder leavesHolder;
308 if (curNode instanceof YangLeavesHolder) {
309 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530310 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530311 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530312 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530313 }
314
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530315 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530316 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530317 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530318 path = fileInfo.getPluginConfig().getCodeGenDir() +
319 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530320 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530321 path = fileInfo.getBaseCodeGenPath() +
322 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530323 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530324
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530325 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode,
326 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530327 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530328 if (attrPresent) {
Bharat saraswald532a4c2016-03-25 18:19:46 +0530329 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530330 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530331 methods.add(getDataFromTempFileHandle(
332 GETTER_FOR_INTERFACE_MASK,
333 getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530334
335 //Setter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530336 methods.add(getDataFromTempFileHandle(
337 SETTER_FOR_INTERFACE_MASK,
338 getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530339
340 //Add to list method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530341 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
342 ADD_TO_LIST_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530343 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530344 throw new IOException(getErrorMsg(className, BUILDER_INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530345 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530346 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530347
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530348 if (curNode instanceof YangAugmentableNode &&
349 !(curNode instanceof YangChoice)) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530350 methods.add(getAddAugmentInfoMethodInterface());
351 methods.add(getYangAugmentInfoInterface());
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530352 methods.add(getYangAugmentInfoMapInterface());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530353 }
354
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530355 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530356 methods.add(setSelectLeafSetInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530357 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530358 //Add build method to builder interface file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530359 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
360 .getTempJavaCodeFragmentFiles()
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530361 .addBuildMethodForInterface());
Bharat saraswal64e7e232016-07-14 23:33:55 +0530362
363 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530364 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530365 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530366 }
367
Bharat saraswal84366c52016-03-23 19:40:35 +0530368 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale304c252016-08-16 20:56:20 +0530369 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530370 }
371
372 /**
373 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530374 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530375 * @param file file
376 * @param curNode current YANG node
377 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530378 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530379 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530380 */
Bharat saraswald14cbe82016-07-14 13:26:18 +0530381 public static File generateBuilderClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530382 boolean attrPresent)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530383 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530384
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530385 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530386 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530387
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530388 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530389 YangLeavesHolder leavesHolder;
390 if (curNode instanceof YangLeavesHolder) {
391 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530392 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530393 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530394 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530395 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530396
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530397 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530398 boolean isRootNode = false;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530399 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530400 if (curNode instanceof RpcNotificationContainer) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530401 isRootNode = true;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530402 path = fileInfo.getPluginConfig().getCodeGenDir() +
403 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530404 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530405 path = fileInfo.getBaseCodeGenPath() +
406 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530407 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530408
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530409 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode,
410 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530411 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530412
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530413 if (curNode instanceof YangAugmentableNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530414 insertDataIntoJavaFile(file, addAugmentationAttribute());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530415 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530416 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530417
418 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530419 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530420 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
421 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530422 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530423 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530424 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530425
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530426 if (leavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530427 insertDataIntoJavaFile(file, getOperationAttributes());
428 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530429 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530430 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530431 methods.add(getDataFromTempFileHandle(
432 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530433 // Setter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530434 methods.add(getDataFromTempFileHandle(
435 SETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswald14cbe82016-07-14 13:26:18 +0530436
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530437 //Add to list impl method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530438 methods.add(getDataFromTempFileHandle(
439 ADD_TO_LIST_IMPL_MASK, getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530440
Bharat saraswald14cbe82016-07-14 13:26:18 +0530441 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530442
Bharat saraswal8beac342016-08-04 02:00:03 +0530443 //Add operation attribute methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530444 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530445 methods.add(getOperationAttributesGetters());
446 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530447 methods.add(getSetterForSelectLeaf(className, isRootNode));
448 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530449 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530450 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530451 }
452 } else {
453 insertDataIntoJavaFile(file, NEW_LINE);
454 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530455
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530456 if (curNode instanceof YangAugmentableNode) {
457 methods.add(getAddAugmentInfoMethodImpl());
458 methods.add(getYangAugmentInfoImpl());
459 methods.add(getYangAugmentInfoMapImpl());
460 }
461
Bharat saraswal64e7e232016-07-14 23:33:55 +0530462 // Add default constructor and build method impl.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530463 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
464 .getTempJavaCodeFragmentFiles()
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530465 .addBuildMethodImpl());
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530466 methods.add(addDefaultConstructor(curNode, PUBLIC, BUILDER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530467
468 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530469 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530470 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530471 }
Bharat saraswald14cbe82016-07-14 13:26:18 +0530472 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswale304c252016-08-16 20:56:20 +0530473 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530474 }
475
476 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530477 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530478 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530479 * @param file file
480 * @param curNode current YANG node
481 * @param attrPresent if any attribute is present or not
482 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530483 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530484 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530485 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530486 public static File generateDefaultClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530487 boolean attrPresent,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530488 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530489 throws IOException {
490
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530491 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530492 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530493 YangPluginConfig config = fileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530494
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530495 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530496 YangLeavesHolder leavesHolder;
497 if (curNode instanceof YangLeavesHolder) {
498 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530499 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530500 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530501 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530502 }
503
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530504 boolean rootNode = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530505
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530506 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530507 String opParamClassName = className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530508 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530509 if (curNode instanceof RpcNotificationContainer) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530510 opParamClassName = className + OP_PARAM;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530511 rootNode = true;
512 path = fileInfo.getPluginConfig().getCodeGenDir() +
513 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530514 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530515 path = fileInfo.getBaseCodeGenPath() +
516 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530517 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530518
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530519 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode,
520 className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530521
Bharat saraswal022dae92016-03-04 20:08:09 +0530522 List<String> methods = new ArrayList<>();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530523 if (curNode instanceof YangAugmentableNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530524 insertDataIntoJavaFile(file, addAugmentationAttribute());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530525 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530526 if (attrPresent) {
527 addDefaultClassAttributeInfo(file, curNode, className,
528 opParamClassName, path, methods,
529 leavesPresent, rootNode);
Bharat saraswald532a4c2016-03-25 18:19:46 +0530530 } else {
531 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530532 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530533
Bharat saraswal8beac342016-08-04 02:00:03 +0530534 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530535 methods.add(getYangAugmentInfoImpl());
536 methods.add(getYangAugmentInfoMapImpl());
537 }
538 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530539 //Constructor.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530540 String constructor =
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530541 getConstructorStart(className, rootNode);
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530542 constructor = constructor +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530543 getDataFromTempFileHandle(
544 CONSTRUCTOR_IMPL_MASK, getBeanFiles(curNode), path);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530545
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530546 if (leavesPresent) {
547 constructor = constructor +
548 getOperationAttributeForConstructor();
Bharat saraswal8beac342016-08-04 02:00:03 +0530549 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530550 String augmentableSubTreeFiltering = EMPTY_STRING;
Bharat saraswale3175d32016-08-31 17:50:11 +0530551 if (curNode instanceof YangAugmentableNode) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530552 constructor = constructor +
553 getYangAugmentedMapObjectForConstruct();
Bharat saraswale50edca2016-08-05 01:58:25 +0530554
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530555 // add is filter content match.
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530556 augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
557 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530558 methods.add(constructor + methodClose(FOUR_SPACE));
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530559
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530560 methods.add(getProcessSubtreeFilteringStart(curNode, config) +
561 getProcessSubtreeFunctionBody(curNode) +
562 augmentableSubTreeFiltering +
563 getProcessSubTreeFilteringEnd());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530564
565 if (curNode instanceof YangLeavesHolder) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530566 if (((YangLeavesHolder) curNode).getListOfLeaf() != null &&
567 !((YangLeavesHolder) curNode).getListOfLeaf().isEmpty()) {
568 methods.add(getProcessLeafSubtreeFiltering(curNode, config,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530569 path));
570 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530571 if (((YangLeavesHolder) curNode).getListOfLeafList() != null &&
572 !((YangLeavesHolder) curNode).getListOfLeafList().isEmpty()) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530573 methods.add(getProcessLeafListSubtreeFiltering(curNode, config,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530574 path));
575 }
576 }
577
578 if (curNode.getChild() != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530579 methods.add(getProcessChildNodeSubtreeFiltering(curNode, config,
580 path));
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530581 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530582 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530583 throw new IOException(getErrorMsg(className, IMPL_CLASS));
Vinod Kumar S08710982016-03-03 19:55:30 +0530584 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530585
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530586 methods.add(addDefaultConstructor(curNode, PROTECTED, DEFAULT));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530587
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530588 methods.add(builderMethod(className));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530589 if (leavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530590 methods.add(getOperationAttributesGetters());
591 methods.add(getGettersForValueAndSelectLeaf());
592 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530593 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530594 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530595 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530596 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530597
Bharat saraswale304c252016-08-16 20:56:20 +0530598 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530599 }
600
601 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530602 * Add methods related to attributes.
603 *
604 * @param file file
605 * @param curNode current YANG node
606 * @param className name of the class
607 * @param opParamClassName op param class name
608 * @param path file path
609 * @param methods list of methods string
610 * @param leavesPresent flag indicating presence of leaves
611 * @param rootNode flag indicating whether node is root node
612 * @throws IOException a violation in IO rule
613 */
614 private static void addDefaultClassAttributeInfo(File file, YangNode curNode,
615 String className,
616 String opParamClassName,
617 String path, List<String> methods,
618 boolean leavesPresent,
619 boolean rootNode)
620 throws IOException {
621
622 //Add attribute strings.
623 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530624 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
625 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530626 } catch (IOException e) {
627 throw new IOException(getErrorMsg(className, IMPL_CLASS));
628 }
629
630 //Add operation attributes
631 if (leavesPresent) {
632 insertDataIntoJavaFile(file, getOperationAttributes());
633 }
634
635 try {
636 //Getter methods.
637 methods.add(getDataFromTempFileHandle(
638 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
639
640 // Hash code method.
641 methods.add(getHashCodeMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530642 getHashCodeMethodOpen() + getDataFromTempFileHandle(
643 HASH_CODE_IMPL_MASK, getBeanFiles(curNode), path)
644 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530645
646 //Equals method.
647 if (rootNode) {
648 methods.add(getEqualsMethodClose(
649 getEqualsMethodOpen(opParamClassName) +
650 getDataFromTempFileHandle(
651 EQUALS_IMPL_MASK,
652 getBeanFiles(curNode), path)));
653 } else {
654 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530655 getEqualsMethodOpen(DEFAULT_CAPS + className) +
656 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
657 getBeanFiles(curNode),
658 path)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530659 }
660 // To string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530661 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
662 TO_STRING_IMPL_MASK, getBeanFiles(curNode), path) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530663 getToStringMethodClose());
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530664
665 for (BitsJavaInfoHandler handler : getBeanFiles(curNode)
666 .getBitsHandler()) {
667 generateBitsFile(handler.getAttr(), handler.getYangType(), curNode);
668 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530669 } catch (IOException e) {
670 throw new IOException(getErrorMsg(className, IMPL_CLASS));
671 }
672 }
673
674 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530675 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530676 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530677 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530678 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530679 * @param imports imports for file
680 * @return type def class file
681 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530682 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530683 public static File generateTypeDefClassFile(File file, YangNode curNode,
684 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530685 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530686
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530687 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530688 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530689 // import
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530690 String className = getCapitalCase(fileInfo.getJavaName());
691 String path = fileInfo.getBaseCodeGenPath() +
692 fileInfo.getPackageFilePath();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530693 YangTypeDef typeDef = (YangTypeDef) curNode;
694 List<YangType<?>> types = typeDef.getTypeList();
695 YangType type = types.get(0);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530696 YangDataTypes yangDataTypes = type.getDataType();
Bharat saraswal022dae92016-03-04 20:08:09 +0530697
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530698 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530699 imports, path);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530700
Bharat saraswal84366c52016-03-23 19:40:35 +0530701 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530702
Bharat saraswal64e7e232016-07-14 23:33:55 +0530703 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530704 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530705 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
706 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530707 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530708 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530709 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530710
Bharat saraswal64e7e232016-07-14 23:33:55 +0530711 //Default constructor.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530712 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530713
Bharat saraswal022dae92016-03-04 20:08:09 +0530714 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530715
Bharat saraswal64e7e232016-07-14 23:33:55 +0530716 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530717 methods.add(getDataFromTempFileHandle(
718 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530719
720 //Of method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530721 methods.add(getDataFromTempFileHandle(
722 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530723
Bharat saraswal64e7e232016-07-14 23:33:55 +0530724 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530725 methods.add(getDataFromTempFileHandle(
726 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530727
Bharat saraswal64e7e232016-07-14 23:33:55 +0530728 // Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530729 methods.add(getHashCodeMethodClose(
730 getHashCodeMethodOpen() + getDataFromTempFileHandle(
731 HASH_CODE_IMPL_MASK, getTypeFiles(curNode), path)
732 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530733
734 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530735 methods.add(getEqualsMethodClose(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530736 getEqualsMethodOpen(className + EMPTY_STRING) +
737 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
738 getTypeFiles(curNode), path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530739
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530740 // To string method.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530741 addTypedefToString(curNode, methods, path);
Bharat saraswal84366c52016-03-23 19:40:35 +0530742
Bharat saraswal64e7e232016-07-14 23:33:55 +0530743 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
744
Bharat saraswal8beac342016-08-04 02:00:03 +0530745 //From string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530746 if (type.getDataType() == DERIVED &&
747 ((YangDerivedInfo) type.getDataTypeExtendedInfo())
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530748 .getEffectiveBuiltInType()
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530749 == IDENTITYREF) {
750 yangDataTypes = IDENTITYREF;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530751 }
752
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530753 if (type.getDataType() == IDENTITYREF) {
754 yangDataTypes = IDENTITYREF;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530755 }
756
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530757 if (yangDataTypes != IDENTITYREF) {
758 methods.add(getFromStringMethodSignature(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530759 getDataFromTempFileHandle(
760 FROM_STRING_IMPL_MASK,
761 javaGenInfo.getTempJavaCodeFragmentFiles()
762 .getTypeTempFiles(), path) +
763 getFromStringMethodClose());
Shankara-Huaweib7564772016-08-02 18:13:13 +0530764 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530765 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530766 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswal022dae92016-03-04 20:08:09 +0530767 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530768
Bharat saraswal84366c52016-03-23 19:40:35 +0530769 for (String method : methods) {
770 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530771 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530772 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530773
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530774 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +0530775 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530776
777 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530778 * Adds typedef to string method.
779 *
780 * @param curNode current node
781 * @param methods list of methods string
782 * @param path file path
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530783 * @throws IOException a violation in IO rule
784 */
785 private static void addTypedefToString(YangNode curNode,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530786 List<String> methods, String path)
787 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530788 //To string method.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530789 methods.add(getToStringMethodOpen() +
790 getDataFromTempFileHandle(
791 TO_STRING_IMPL_MASK, getTypeFiles(curNode), path) +
792 getToStringMethodClose());
793 for (BitsJavaInfoHandler handler : getTypeFiles(curNode)
794 .getBitsHandler()) {
795 generateBitsFile(handler.getAttr(), handler.getYangType(), curNode);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530796 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530797
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530798 }
799
800 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530801 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530802 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530803 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530804 * @param curNode current YANG node
805 * @param imports imports for file
806 * @return type def class file
807 * @throws IOException when fails to generate class file
808 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530809 public static File generateUnionClassFile(File file, YangNode curNode,
810 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530811 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530812
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530813 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530814 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530815
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530816 String className = getCapitalCase(fileInfo.getJavaName());
817 String path = fileInfo.getBaseCodeGenPath() +
818 fileInfo.getPackageFilePath();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530819
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530820 TempJavaTypeFragmentFiles tempFiles =
821 ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
822 .getTypeTempFiles();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530823
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530824 boolean intConflict = false;
825 boolean longConflict = false;
826 boolean shortConflict = false;
827 JavaAttributeInfo intAttr = tempFiles.getIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530828 if (intAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530829 intAttr = tempFiles.getUIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530830 }
831
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530832 JavaAttributeInfo longAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530833 tempFiles.getLongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530834 if (longAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530835 longAttr = tempFiles.getULongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530836 }
837
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530838 JavaAttributeInfo shortAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530839 tempFiles.getShortAttribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530840 if (shortAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530841 shortAttr = tempFiles.getUInt8Attribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530842 }
843
Bharat saraswal64e7e232016-07-14 23:33:55 +0530844 if (intAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530845 intConflict = intAttr.isIntConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530846 }
847 if (longAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530848 longConflict = longAttr.isLongConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530849 }
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530850 if (shortAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530851 shortConflict = shortAttr.isShortConflict();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530852 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530853 if (longConflict) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530854 String impt = tempFiles.getJavaImportData().getBigIntegerImport();
855 if (!imports.contains(impt)) {
856 imports.add(impt);
857 sort(imports);
858 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530859 }
860
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530861 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530862 imports, path);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530863
864 List<String> methods = new ArrayList<>();
865
Bharat saraswal64e7e232016-07-14 23:33:55 +0530866 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530867 try {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530868 addUnionClassAttributeInfo(file, curNode, intConflict,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530869 longConflict, shortConflict, path, tempFiles);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530870 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530871 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530872 }
873
Bharat saraswal64e7e232016-07-14 23:33:55 +0530874 //Default constructor.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530875 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530876
877 try {
878
Bharat saraswal64e7e232016-07-14 23:33:55 +0530879 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530880 methods.add(getDataFromTempFileHandle(
881 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530882
883 // Of string method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530884 methods.add(getDataFromTempFileHandle(
885 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530886
Bharat saraswal64e7e232016-07-14 23:33:55 +0530887 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530888 methods.add(getDataFromTempFileHandle(
889 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530890
891 //Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530892 methods.add(getHashCodeMethodClose(
893 getHashCodeMethodOpen() +
894 getDataFromTempFileHandle(
895 HASH_CODE_IMPL_MASK, getTypeFiles(curNode),
896 path).replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530897
Bharat saraswal64e7e232016-07-14 23:33:55 +0530898 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530899 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530900 getEqualsMethodOpen(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530901 getDataFromTempFileHandle(
902 EQUALS_IMPL_MASK, getTypeFiles(curNode),
903 path)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530904
905 //To string method.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530906 methods.add(getUnionToStringMethod(
907 ((YangUnion) curNode).getTypeList()));
908
909 for (BitsJavaInfoHandler handler : getTypeFiles(curNode)
910 .getBitsHandler()) {
911 generateBitsFile(handler.getAttr(), handler.getYangType(), curNode);
912 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530913
Bharat saraswal64e7e232016-07-14 23:33:55 +0530914 //From string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530915 methods.add(getFromStringMethodSignature(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530916 getDataFromTempFileHandle(
917 FROM_STRING_IMPL_MASK,
918 getTypeFiles(curNode), path) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530919 getFromStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530920
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530921 if (intConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530922 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530923 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530924 if (longConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530925 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530926 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530927 if (shortConflict && !intConflict) {
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530928 methods.add(getRangeValidatorMethodForUnion(INT));
929 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530930 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530931 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530932 }
933
934 for (String method : methods) {
935 insertDataIntoJavaFile(file, method);
936 }
937 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
938
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530939 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530940 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530941
942 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530943 * Adds union class attribute information.
944 *
945 * @param file generated file
946 * @param curNode current YANG node
947 * @param intConflict flag to indicate if there is a conflict in int
948 * @param longConflict flag to indicate if there is a conflict in long
949 * @param shortConflict flag to indicate if there is a conflict in short
950 * @param path file path
951 * @param tempFiles temp java type fragment files
952 * @throws IOException a violation in IO rule
953 */
954 private static void addUnionClassAttributeInfo(File file,
955 YangNode curNode,
956 boolean intConflict,
957 boolean longConflict,
958 boolean shortConflict,
959 String path,
960 TempJavaTypeFragmentFiles tempFiles)
961 throws IOException {
962 if (intConflict) {
963 insertDataIntoJavaFile(file, JavaCodeSnippetGen
964 .addStaticAttributeIntRange(PRIVATE,
965 tempFiles.getIntIndex() <
966 tempFiles.getUIntIndex()));
967 }
968
969 if (longConflict) {
970 insertDataIntoJavaFile(file, JavaCodeSnippetGen
971 .addStaticAttributeLongRange(PRIVATE,
972 tempFiles.getLongIndex() <
973 tempFiles.getULongIndex()));
974 }
975
976 if (shortConflict) {
977 insertDataIntoJavaFile(file, JavaCodeSnippetGen
978 .addStaticAttributeShortRange(PRIVATE,
979 tempFiles.getShortIndex() <
980 tempFiles.getUInt8Index()));
981 }
982
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530983 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
984 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530985 insertDataIntoJavaFile(file, getSetValueParaForUnionClass());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530986 }
987
988 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530989 * Generates class file for type enum.
990 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530991 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530992 * @param curNode current YANG node
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530993 * @param imports import list
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530994 * @return class file for type enum
995 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530996 */
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530997 public static File generateEnumClassFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530998 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530999
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301000 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301001 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301002
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301003 String className = fileInfo.getJavaName();
1004 String path = fileInfo.getBaseCodeGenPath() +
1005 fileInfo.getPackageFilePath();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301006 TempJavaEnumerationFragmentFiles enumFile = ((JavaCodeGeneratorInfo)
1007 curNode).getTempJavaCodeFragmentFiles().getEnumTempFiles();
1008 JavaImportData data = enumFile.getJavaImportData();
1009 if (!enumFile.isEnumClass()) {
1010 imports.add(data.getImportForToBitSet());
1011 imports.add(data.getImportForPattern());
1012 imports.add(data.getImportForToString());
1013
1014 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301015
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301016 initiateJavaFileGeneration(file, getCapitalCase(className),
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301017 GENERATE_ENUM_CLASS, imports, path);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301018
1019 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301020 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301021 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301022 String[] remove = {COMMA, NEW_LINE};
1023 insertDataIntoJavaFile(file, trimAtLast(getDataFromTempFileHandle(
1024 ENUM_IMPL_MASK, javaGenInfo.getTempJavaCodeFragmentFiles()
1025 .getEnumTempFiles(), path), remove) +
1026 signatureClose());
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301027 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301028 throw new IOException(getErrorMsg(getCapitalCase(className),
1029 ENUM_CLASS));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301030 }
1031
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301032 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301033 // Add an attribute to get the enum's values.
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301034 insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301035
Bharat saraswal64e7e232016-07-14 23:33:55 +05301036 // Add a constructor for enum.
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301037 //TODO: generate javadoc for method.
1038 insertDataIntoJavaFile(file, getEnumsConstructor(getCapitalCase(className)) +
1039 NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301040
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301041 insertDataIntoJavaFile(file,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301042 getEnumsOfValueMethod(className,
1043 (YangEnumeration) curNode,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301044 ENUM_METHOD_INT_VALUE));
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301045 insertDataIntoJavaFile(file,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301046 getEnumsOfValueMethod(className,
1047 (YangEnumeration) curNode,
1048 ENUM_METHOD_STRING_VALUE));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301049
Bharat saraswal64e7e232016-07-14 23:33:55 +05301050 // Add a getter method for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301051 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301052 null) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301053 getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301054
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301055 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, SCHEMA_NAME, false,
1056 null) +
1057 getGetter(STRING_DATA_TYPE, SCHEMA_NAME, GENERATE_ENUM_CLASS) +
1058 NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301059
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301060 if (!enumFile.isEnumClass()) {
1061 insertDataIntoJavaFile(file, getBitSetEnumClassFromString
1062 (getCapitalCase(className)));
1063 insertDataIntoJavaFile(file, getBitSetEnumClassToString(
1064 getCapitalCase(className), (YangEnumeration) curNode));
Bharat saraswal250a7472016-05-12 13:16:57 +05301065 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301066
1067 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1068
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301069 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301070 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301071
1072 /**
1073 * Generates interface file for rpc.
1074 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301075 * @param file generated file
1076 * @param curNode current YANG node
1077 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301078 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301079 * @throws IOException when fails to generate class file
1080 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301081 public static File generateServiceInterfaceFile(File file, YangNode curNode,
1082 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301083 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301084
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301085 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301086 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301087
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301088 TempJavaServiceFragmentFiles tempFiles =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301089 ((JavaCodeGeneratorInfo) curNode)
1090 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301091 String className = getCapitalCase(fileInfo.getJavaName()) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301092 SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301093 String path = fileInfo.getBaseCodeGenPath() +
1094 fileInfo.getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301095 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports,
1096 curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301097
1098 List<String> methods = new ArrayList<>();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301099 JavaAttributeInfo rootAttribute =
1100 getCurNodeAsAttributeInTarget(curNode, curNode, false,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301101 tempFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301102
1103 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301104
Bharat saraswal1edde622016-09-06 10:18:04 +05301105 if (isGetSetOfRootNodeRequired(curNode)) {
1106 //Getter methods.
1107 methods.add(getGetterString(rootAttribute,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301108 GENERATE_SERVICE_AND_MANAGER) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301109 NEW_LINE);
1110 // Setter methods.
1111 methods.add(getSetterString(rootAttribute, className,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301112 GENERATE_SERVICE_AND_MANAGER) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301113 NEW_LINE);
1114 }
1115
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301116 methods.add(getAugmentsDataMethodForService(curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +05301117
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301118 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
1119 .getServiceTempFiles() != null) {
1120 JavaCodeGeneratorInfo javaGenInfo =
1121 (JavaCodeGeneratorInfo) curNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301122
1123 // Rpc methods
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301124 methods.add(getDataFromTempFileHandle(
1125 RPC_INTERFACE_MASK,
1126 javaGenInfo.getTempJavaCodeFragmentFiles()
1127 .getServiceTempFiles(), path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301128 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301129 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301130 throw new IOException(getErrorMsg(className, RPC_CLASS));
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301131 }
1132
1133 for (String method : methods) {
1134 insertDataIntoJavaFile(file, method);
1135 }
1136 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1137
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301138 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301139 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301140
1141 /**
1142 * Generates event file.
1143 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301144 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301145 * @param curNode current YANG node
1146 * @param imports imports for file
1147 * @throws IOException when fails to generate class file
1148 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301149 public static void generateEventFile(File file, YangNode curNode,
1150 List<String> imports)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301151 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301152
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301153 String className =
1154 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1155 .getJavaName()) + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301156
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301157 TempJavaEventFragmentFiles tempFiles =
1158 ((TempJavaCodeFragmentFilesContainer) curNode)
1159 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301160
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301161 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301162 .getBaseCodeGenPath() +
1163 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1164 .getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301165 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode,
1166 className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301167 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301168 insertDataIntoJavaFile(file, getEventEnumTypeStart() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301169 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK,
1170 tempFiles, path),
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301171 COMMA) + methodClose(FOUR_SPACE));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301172
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301173 insertDataIntoJavaFile(file,
1174 getDataFromTempFileHandle(EVENT_METHOD_MASK,
1175 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301176 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301177 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301178 }
1179
1180 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1181 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301182 }
1183
1184 /**
1185 * Generates event listener file.
1186 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301187 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301188 * @param curNode current YANG node
1189 * @param imports imports for file
1190 * @throws IOException when fails to generate class file
1191 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301192 public static void generateEventListenerFile(File file, YangNode curNode,
1193 List<String> imports)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301194 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301195
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301196 String className =
1197 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1198 .getJavaName()) + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301199
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301200 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE,
1201 imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301202 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301203 validateLineLength(file);
1204 }
1205
1206 /**
1207 * Generates event subject's file.
1208 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301209 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301210 * @param curNode current YANG node
1211 * @throws IOException when fails to do IO exceptions
1212 */
1213 public static void generateEventSubjectFile(File file, YangNode curNode)
1214 throws IOException {
1215
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301216 String className =
1217 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1218 .getJavaName()) + EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301219
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301220 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null,
1221 curNode, className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301222
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301223 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301224 .getBaseCodeGenPath() +
1225 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1226 .getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301227
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301228 TempJavaEventFragmentFiles tempFiles =
1229 ((TempJavaCodeFragmentFilesContainer) curNode)
1230 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301231
1232 insertDataIntoJavaFile(file, NEW_LINE);
1233 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301234 insertDataIntoJavaFile(
1235 file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK,
1236 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301237
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301238 insertDataIntoJavaFile(
1239 file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK,
1240 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301241
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301242 insertDataIntoJavaFile(
1243 file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK,
1244 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301245 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301246 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301247 }
1248
1249 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1250 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301251 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301252
1253 /**
1254 * Returns error message string.
1255 *
1256 * @param className name of the class
1257 * @param fileType type of file
1258 * @return error message string
1259 */
1260 private static String getErrorMsg(String className, String fileType) {
1261 return "No data found in temporary java code fragment files for " +
1262 className + " while " + fileType + " file generation.";
1263 }
1264
1265 /**
1266 * Checks whether leaf is present in YANG leaves holder.
1267 *
1268 * @param holder holder of YANG leaves
1269 * @return true if leaves are present, false otherwise
1270 */
1271 private static boolean leavesPresent(YangLeavesHolder holder) {
1272 return holder.getListOfLeaf() != null &&
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301273 !holder.getListOfLeaf().isEmpty();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301274 }
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301275
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301276}