blob: 6853ac9d459ad2cb4802b6ec9691716be962edda [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
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053019import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Bharat saraswale50edca2016-08-05 01:58:25 +053020import org.onosproject.yangutils.datamodel.YangCase;
Bharat saraswal8beac342016-08-04 02:00:03 +053021import org.onosproject.yangutils.datamodel.YangChoice;
Shankara-Huaweib7564772016-08-02 18:13:13 +053022import org.onosproject.yangutils.datamodel.YangDerivedInfo;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053023import org.onosproject.yangutils.datamodel.YangEnumeration;
Shankara-Huaweia1039e52016-07-14 16:53:09 +053024import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Bharat saraswal039f59c2016-07-14 21:57:13 +053025import org.onosproject.yangutils.datamodel.YangModule;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053026import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +053027import org.onosproject.yangutils.datamodel.YangSubModule;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053028import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswal039f59c2016-07-14 21:57:13 +053029import org.onosproject.yangutils.datamodel.YangTypeDef;
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 saraswal748fc3c2016-09-06 16:38:20 +053036import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
37import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswal039f59c2016-07-14 21:57:13 +053038import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053039import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +053040import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053041import org.onosproject.yangutils.utils.UtilConstants;
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 saraswal748fc3c2016-09-06 16:38:20 +053050import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
51import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BITS;
52import 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;
85import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
86import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
87import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
88import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getQualifierInfoForCasesParent;
89import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isGetSetOfRootNodeRequired;
90import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.addAugmentationAttribute;
91import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
92import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
93import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributeForConstructor;
94import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributes;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053095import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053096import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getYangAugmentedMapObjectForConstruct;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053097import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
98import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
99import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.builderMethod;
100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
101import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumValueOfSchemaNameMethod;
105import 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;
113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGettersForValueAndSelectLeaf;
114import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
115import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
116import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumMethods;
117import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumSignature;
118import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
119import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOperationAttributesGetters;
120import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
121import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRangeValidatorMethodForUnion;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530122import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForSelectLeaf;
123import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
124import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
125import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
126import 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;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530134import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getAugmentableSubTreeFiltering;
135import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessChildNodeSubtreeFiltering;
136import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafListSubtreeFiltering;
137import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafSubtreeFiltering;
138import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubTreeFilteringEnd;
139import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFilteringStart;
140import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFunctionBody;
141import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.addDefaultConstructor;
142import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
143import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getTypeFiles;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530144import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
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 saraswald14cbe82016-07-14 13:26:18 +0530150import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530151import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530152import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530153import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswal84366c52016-03-23 19:40:35 +0530154import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530155import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530156import static org.onosproject.yangutils.utils.UtilConstants.ENUM_CLASS;
157import static org.onosproject.yangutils.utils.UtilConstants.EVENT_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530158import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530159import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530160import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
161import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530162import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
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 saraswal039f59c2016-07-14 21:57:13 +0530167import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530168import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530169import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530170import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
171import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530172import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530173import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530174import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530175import static org.onosproject.yangutils.utils.UtilConstants.RPC_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530176import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530177import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530178import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530179import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530180import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
181import static org.onosproject.yangutils.utils.UtilConstants.TO;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530182import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_CLASS;
183import static org.onosproject.yangutils.utils.UtilConstants.UNION_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530184import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
185import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530186import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530187import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
188import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530189import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530190import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530191import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
192
Vinod Kumar S08710982016-03-03 19:55:30 +0530193/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530194 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530195 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530196public final class JavaFileGenerator {
197
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530198 // No instantiation
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530199 private JavaFileGenerator() {
200 }
201
202 /**
203 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530204 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530205 * @param file file
206 * @param imports imports for the file
207 * @param curNode current YANG node
208 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530209 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530210 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530211 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530212 public static File generateInterfaceFile(File file, List<String> imports,
213 YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530214 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530215 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530216
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530217 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530218 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530219
220 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530221 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530222 path = fileInfo.getPluginConfig().getCodeGenDir() +
223 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530224 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530225 path = fileInfo.getBaseCodeGenPath() +
226 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530227 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530228
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530229 String className = getCapitalCase(fileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530230
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530231 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530232 YangLeavesHolder leavesHolder;
233 if (curNode instanceof YangLeavesHolder) {
234 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530235 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530236 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530237 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530238 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530239
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530240 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode,
241 className);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530242
243 // Generate ENUM interface
244 insertDataIntoJavaFile(file, getOperationTypeEnum());
245
Bharat saraswal8beac342016-08-04 02:00:03 +0530246 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530247 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530248 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530249 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530250 //Leaf identifier enum.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530251 if (leavesPresent) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530252 insertDataIntoJavaFile(file, NEW_LINE +
253 getInterfaceLeafIdEnumSignature(className) +
254 NEW_LINE +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530255 trimAtLast(replaceLast(
256 getDataFromTempFileHandle(
257 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
258 getBeanFiles(curNode), path),
259 COMMA, SEMI_COLAN), NEW_LINE) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530260 NEW_LINE + NEW_LINE +
261 getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530262 }
263
Bharat saraswal64e7e232016-07-14 23:33:55 +0530264 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530265 insertDataIntoJavaFile(
266 file, getDataFromTempFileHandle(
267 GETTER_FOR_INTERFACE_MASK,
268 getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530269 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530270 throw new IOException(getErrorMsg(className, INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530271 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530272 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530273
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530274 if (curNode instanceof YangAugmentableNode &&
275 !(curNode instanceof YangChoice)) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530276 methods.add(getYangAugmentInfoInterface());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530277 methods.add(getYangAugmentInfoMapInterface(fileInfo.getPluginConfig()));
Bharat saraswal8beac342016-08-04 02:00:03 +0530278 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530279
Bharat saraswale50edca2016-08-05 01:58:25 +0530280 if (curNode instanceof YangCase) {
281 YangNode caseParent = curNode.getParent();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530282 JavaQualifiedTypeInfo qualifiedTypeInfo =
283 getQualifierInfoForCasesParent(caseParent,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530284 fileInfo.getPluginConfig());
285 methods.add(NEW_LINE + processSubtreeFilteringInterface(
286 qualifiedTypeInfo.getClassInfo()));
Bharat saraswale50edca2016-08-05 01:58:25 +0530287 } else {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530288 methods.add(NEW_LINE + processSubtreeFilteringInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530289 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530290
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530291 if (leavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530292 methods.add(NEW_LINE + isLeafValueSetInterface());
293 methods.add(NEW_LINE + isSelectLeafSetInterface());
294 }
295 for (String method : methods) {
296 insertDataIntoJavaFile(file, method);
297 }
Bharat saraswale304c252016-08-16 20:56:20 +0530298 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530299 }
300
301 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530302 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530303 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530304 * @param file file
305 * @param curNode current YANG node
306 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530307 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530308 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530309 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530310 public static File generateBuilderInterfaceFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530311 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530312 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530313
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530314 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530315 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530316 YangPluginConfig pluginConfig = fileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530317
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530318 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530319 YangLeavesHolder leavesHolder;
320 if (curNode instanceof YangLeavesHolder) {
321 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530322 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530323 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530324 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530325 }
326
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530327 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530328 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530329 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530330 path = fileInfo.getPluginConfig().getCodeGenDir() +
331 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530332 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530333 path = fileInfo.getBaseCodeGenPath() +
334 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530335 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530336
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530337 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode,
338 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530339 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530340 if (attrPresent) {
Bharat saraswald532a4c2016-03-25 18:19:46 +0530341 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530342
343 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530344 methods.add(FOUR_SPACE_INDENTATION +
345 getDataFromTempFileHandle(
346 GETTER_FOR_INTERFACE_MASK,
347 getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530348
349 //Setter methods.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530350 methods.add(NEW_LINE);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530351 methods.add(FOUR_SPACE_INDENTATION +
352 getDataFromTempFileHandle(
353 SETTER_FOR_INTERFACE_MASK,
354 getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530355
356 //Add to list method.
357 methods.add(NEW_LINE);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530358 insertDataIntoJavaFile(file,
359 getDataFromTempFileHandle(
360 ADD_TO_LIST_INTERFACE_MASK,
361 getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530362 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530363 throw new IOException(getErrorMsg(className,
364 BUILDER_INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530365 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530366 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530367
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530368 if (curNode instanceof YangAugmentableNode &&
369 !(curNode instanceof YangChoice)) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530370 methods.add(getAddAugmentInfoMethodInterface());
371 methods.add(getYangAugmentInfoInterface());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530372 methods.add(getYangAugmentInfoMapInterface(fileInfo.getPluginConfig()));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530373 }
374
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530375 if (leavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530376 methods.add(NEW_LINE + setSelectLeafSetInterface(className));
377 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530378 //Add build method to builder interface file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530379 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
380 .getTempJavaCodeFragmentFiles()
381 .addBuildMethodForInterface(pluginConfig));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530382
383 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530384 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530385 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530386 }
387
Bharat saraswal84366c52016-03-23 19:40:35 +0530388 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale304c252016-08-16 20:56:20 +0530389 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530390 }
391
392 /**
393 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530394 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530395 * @param file file
396 * @param curNode current YANG node
397 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530398 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530399 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530400 */
Bharat saraswald14cbe82016-07-14 13:26:18 +0530401 public static File generateBuilderClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530402 boolean attrPresent)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530403 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530404
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530405 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530406 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530407 YangPluginConfig config = fileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530408
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530409 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530410 YangLeavesHolder leavesHolder;
411 if (curNode instanceof YangLeavesHolder) {
412 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530413 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530414 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530415 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530416 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530417
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530418 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530419 boolean isRootNode = false;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530420 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530421 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530422 isRootNode = true;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530423 path = fileInfo.getPluginConfig().getCodeGenDir() +
424 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530425 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530426 path = fileInfo.getBaseCodeGenPath() +
427 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530428 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530429
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530430 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode,
431 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530432 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530433
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530434 if (curNode instanceof YangAugmentableNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530435 insertDataIntoJavaFile(file, addAugmentationAttribute());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530436 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530437 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530438
439 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530440 try {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530441 insertDataIntoJavaFile(file, NEW_LINE + FOUR_SPACE_INDENTATION +
442 getDataFromTempFileHandle(
443 ATTRIBUTES_MASK,
444 getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530445 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530446 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530447 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530448
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530449 if (leavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530450 insertDataIntoJavaFile(file, getOperationAttributes());
451 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530452 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530453 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530454 methods.add(getDataFromTempFileHandle(
455 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530456 // Setter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530457 methods.add(getDataFromTempFileHandle(
458 SETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswald14cbe82016-07-14 13:26:18 +0530459
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530460 //Add to list impl method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530461 methods.add(getDataFromTempFileHandle(
462 ADD_TO_LIST_IMPL_MASK, getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530463
Bharat saraswald14cbe82016-07-14 13:26:18 +0530464 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530465
Bharat saraswal8beac342016-08-04 02:00:03 +0530466 //Add operation attribute methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530467 if (leavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530468 methods.add(getOperationAttributesGetters() + NEW_LINE);
469 methods.add(getSetterForSelectLeaf(className, isRootNode));
470 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530471 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530472 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530473 }
474 } else {
475 insertDataIntoJavaFile(file, NEW_LINE);
476 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530477
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530478 if (curNode instanceof YangAugmentableNode) {
479 methods.add(getAddAugmentInfoMethodImpl());
480 methods.add(getYangAugmentInfoImpl());
481 methods.add(getYangAugmentInfoMapImpl());
482 }
483
Bharat saraswal64e7e232016-07-14 23:33:55 +0530484 // Add default constructor and build method impl.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530485 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
486 .getTempJavaCodeFragmentFiles()
487 .addBuildMethodImpl(curNode));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530488 methods.add(addDefaultConstructor(curNode, PUBLIC, BUILDER,
489 config, curNode));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530490
491 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530492 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530493 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530494 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530495
Bharat saraswald14cbe82016-07-14 13:26:18 +0530496 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswale304c252016-08-16 20:56:20 +0530497 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530498 }
499
500 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530501 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530502 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530503 * @param file file
504 * @param curNode current YANG node
505 * @param attrPresent if any attribute is present or not
506 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530507 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530508 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530509 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530510 public static File generateDefaultClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530511 boolean attrPresent,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530512 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530513 throws IOException {
514
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530515 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530516 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530517 YangPluginConfig config = fileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530518
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530519 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530520 YangLeavesHolder leavesHolder;
521 if (curNode instanceof YangLeavesHolder) {
522 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530523 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530524 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530525 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530526 }
527
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530528 boolean rootNode = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530529
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530530 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530531 String opParamClassName = className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530532 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530533 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530534 opParamClassName = className + OP_PARAM;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530535 rootNode = true;
536 path = fileInfo.getPluginConfig().getCodeGenDir() +
537 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530538 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530539 path = fileInfo.getBaseCodeGenPath() +
540 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530541 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530542
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530543 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode,
544 className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530545
Bharat saraswal022dae92016-03-04 20:08:09 +0530546 List<String> methods = new ArrayList<>();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530547 if (curNode instanceof YangAugmentableNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530548 insertDataIntoJavaFile(file, addAugmentationAttribute());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530549 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530550 if (attrPresent) {
551 addDefaultClassAttributeInfo(file, curNode, className,
552 opParamClassName, path, methods,
553 leavesPresent, rootNode);
Bharat saraswald532a4c2016-03-25 18:19:46 +0530554 } else {
555 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530556 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530557
Bharat saraswal8beac342016-08-04 02:00:03 +0530558 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530559 methods.add(getYangAugmentInfoImpl());
560 methods.add(getYangAugmentInfoMapImpl());
561 }
562 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530563 //Constructor.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530564 String constructor =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530565 getConstructorStart(className, config, rootNode);
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530566 constructor = constructor +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530567 getDataFromTempFileHandle(
568 CONSTRUCTOR_IMPL_MASK, getBeanFiles(curNode), path);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530569
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530570 if (leavesPresent) {
571 constructor = constructor +
572 getOperationAttributeForConstructor();
Bharat saraswal8beac342016-08-04 02:00:03 +0530573 }
Bharat saraswale3175d32016-08-31 17:50:11 +0530574 if (curNode instanceof YangAugmentableNode) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530575 constructor = constructor +
576 getYangAugmentedMapObjectForConstruct();
Bharat saraswale3175d32016-08-31 17:50:11 +0530577 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530578 methods.add(constructor + FOUR_SPACE_INDENTATION +
579 CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +0530580
581 // add is filter content match.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530582 String augmentableSubTreeFiltering = EMPTY_STRING;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530583 if (curNode instanceof YangAugmentableNode) {
584 augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
585 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530586
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530587 methods.add(getProcessSubtreeFilteringStart(curNode, config) +
588 getProcessSubtreeFunctionBody(curNode) +
589 augmentableSubTreeFiltering +
590 getProcessSubTreeFilteringEnd());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530591
592 if (curNode instanceof YangLeavesHolder) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530593 if (((YangLeavesHolder) curNode).getListOfLeaf() != null &&
594 !((YangLeavesHolder) curNode).getListOfLeaf().isEmpty()) {
595 methods.add(getProcessLeafSubtreeFiltering(curNode, config,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530596 path));
597 }
598 }
599
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530600 if (curNode instanceof YangLeavesHolder) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530601 if (((YangLeavesHolder) curNode).getListOfLeafList() != null &&
602 !((YangLeavesHolder) curNode).getListOfLeafList().isEmpty()) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530603 methods.add(getProcessLeafListSubtreeFiltering(curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530604 config,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530605 path));
606 }
607 }
608
609 if (curNode.getChild() != null) {
610 methods.add(getProcessChildNodeSubtreeFiltering(curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530611 config, path));
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530612 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530613 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530614 throw new IOException(getErrorMsg(className, IMPL_CLASS));
Vinod Kumar S08710982016-03-03 19:55:30 +0530615 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530616
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530617 methods.add(addDefaultConstructor(curNode, PROTECTED, DEFAULT,
618 config, curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530619
Bharat saraswale50edca2016-08-05 01:58:25 +0530620 methods.add(builderMethod(className) + NEW_LINE);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530621 if (leavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530622 methods.add(getOperationAttributesGetters());
623 methods.add(getGettersForValueAndSelectLeaf());
624 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530625 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530626 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530627 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530628 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530629
Bharat saraswale304c252016-08-16 20:56:20 +0530630 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530631 }
632
633 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530634 * Add methods related to attributes.
635 *
636 * @param file file
637 * @param curNode current YANG node
638 * @param className name of the class
639 * @param opParamClassName op param class name
640 * @param path file path
641 * @param methods list of methods string
642 * @param leavesPresent flag indicating presence of leaves
643 * @param rootNode flag indicating whether node is root node
644 * @throws IOException a violation in IO rule
645 */
646 private static void addDefaultClassAttributeInfo(File file, YangNode curNode,
647 String className,
648 String opParamClassName,
649 String path, List<String> methods,
650 boolean leavesPresent,
651 boolean rootNode)
652 throws IOException {
653
654 //Add attribute strings.
655 try {
656 insertDataIntoJavaFile(file, NEW_LINE + FOUR_SPACE_INDENTATION +
657 getDataFromTempFileHandle(
658 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
659 } catch (IOException e) {
660 throw new IOException(getErrorMsg(className, IMPL_CLASS));
661 }
662
663 //Add operation attributes
664 if (leavesPresent) {
665 insertDataIntoJavaFile(file, getOperationAttributes());
666 }
667
668 try {
669 //Getter methods.
670 methods.add(getDataFromTempFileHandle(
671 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
672
673 // Hash code method.
674 methods.add(getHashCodeMethodClose(
675 getHashCodeMethodOpen() +
676 getDataFromTempFileHandle(
677 HASH_CODE_IMPL_MASK,
678 getBeanFiles(curNode), path)
679 .replace(NEW_LINE, EMPTY_STRING)));
680
681 //Equals method.
682 if (rootNode) {
683 methods.add(getEqualsMethodClose(
684 getEqualsMethodOpen(opParamClassName) +
685 getDataFromTempFileHandle(
686 EQUALS_IMPL_MASK,
687 getBeanFiles(curNode), path)));
688 } else {
689 methods.add(getEqualsMethodClose(
690 getEqualsMethodOpen(
691 getCapitalCase(DEFAULT) + className) +
692 getDataFromTempFileHandle(
693 EQUALS_IMPL_MASK,
694 getBeanFiles(curNode), path)));
695 }
696 // To string method.
697 methods.add(getToStringMethodOpen() +
698 getDataFromTempFileHandle(
699 TO_STRING_IMPL_MASK,
700 getBeanFiles(curNode), path) +
701 getToStringMethodClose());
702 } catch (IOException e) {
703 throw new IOException(getErrorMsg(className, IMPL_CLASS));
704 }
705 }
706
707 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530708 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530709 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530710 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530711 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530712 * @param imports imports for file
713 * @return type def class file
714 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530715 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530716 public static File generateTypeDefClassFile(File file, YangNode curNode,
717 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530718 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530719
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530720 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530721 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530722 YangPluginConfig config = fileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530723
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530724 // import
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530725 String className = getCapitalCase(fileInfo.getJavaName());
726 String path = fileInfo.getBaseCodeGenPath() +
727 fileInfo.getPackageFilePath();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530728 YangTypeDef typeDef = (YangTypeDef) curNode;
729 List<YangType<?>> types = typeDef.getTypeList();
730 YangType type = types.get(0);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530731 YangDataTypes yangDataTypes = type.getDataType();
Bharat saraswal022dae92016-03-04 20:08:09 +0530732
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530733 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530734 imports, path, config);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530735
Bharat saraswal84366c52016-03-23 19:40:35 +0530736 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530737
Bharat saraswal64e7e232016-07-14 23:33:55 +0530738 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530739 try {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530740 insertDataIntoJavaFile(file, NEW_LINE + FOUR_SPACE_INDENTATION +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530741 getDataFromTempFileHandle(
742 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530743 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530744 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530745 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530746
Bharat saraswal64e7e232016-07-14 23:33:55 +0530747 //Default constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530748 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING,
749 config, curNode));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530750
Bharat saraswal022dae92016-03-04 20:08:09 +0530751 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530752
Bharat saraswal64e7e232016-07-14 23:33:55 +0530753 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530754 methods.add(getDataFromTempFileHandle(
755 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530756
757 //Of method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530758 methods.add(getDataFromTempFileHandle(
759 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530760
Bharat saraswal64e7e232016-07-14 23:33:55 +0530761 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530762 methods.add(getDataFromTempFileHandle(
763 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530764
Bharat saraswal64e7e232016-07-14 23:33:55 +0530765 // Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530766 methods.add(getHashCodeMethodClose(
767 getHashCodeMethodOpen() + getDataFromTempFileHandle(
768 HASH_CODE_IMPL_MASK, getTypeFiles(curNode), path)
769 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530770
771 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530772 methods.add(getEqualsMethodClose(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530773 getEqualsMethodOpen(className + EMPTY_STRING) +
774 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
775 getTypeFiles(curNode), path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530776
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530777 // To string method.
778 addTypedefToString(curNode, methods, path, type);
Bharat saraswal84366c52016-03-23 19:40:35 +0530779
Bharat saraswal64e7e232016-07-14 23:33:55 +0530780 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
781
Bharat saraswal8beac342016-08-04 02:00:03 +0530782 //From string method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530783 if ((type.getDataType().equals(YangDataTypes.DERIVED)) &&
784 (((YangDerivedInfo) type.getDataTypeExtendedInfo())
785 .getEffectiveBuiltInType()
786 .equals(YangDataTypes.IDENTITYREF))) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530787 yangDataTypes = YangDataTypes.IDENTITYREF;
788 }
789
790 if (type.getDataType().equals(YangDataTypes.IDENTITYREF)) {
791 yangDataTypes = YangDataTypes.IDENTITYREF;
792 }
793
794 if (!yangDataTypes.equals(YangDataTypes.IDENTITYREF)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530795 methods.add(getFromStringMethodSignature(className, config) +
796 getDataFromTempFileHandle(
797 FROM_STRING_IMPL_MASK,
798 javaGenInfo.getTempJavaCodeFragmentFiles()
799 .getTypeTempFiles(), path) +
800 getFromStringMethodClose());
Shankara-Huaweib7564772016-08-02 18:13:13 +0530801 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530802 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530803 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswal022dae92016-03-04 20:08:09 +0530804 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530805
Bharat saraswal84366c52016-03-23 19:40:35 +0530806 for (String method : methods) {
807 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530808 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530809 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530810
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530811 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +0530812 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530813
814 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530815 * Adds typedef to string method.
816 *
817 * @param curNode current node
818 * @param methods list of methods string
819 * @param path file path
820 * @param type YANG type
821 * @throws IOException a violation in IO rule
822 */
823 private static void addTypedefToString(YangNode curNode,
824 List<String> methods, String path,
825 YangType type) throws IOException {
826 //To string method.
827 if (type.getDataType().equals(BINARY)) {
828 JavaQualifiedTypeInfoTranslator typeInfo =
829 getQualifiedTypeInfoOfCurNode(curNode, getCapitalCase
830 (UtilConstants.BINARY));
831
832 JavaAttributeInfo attr =
833 getAttributeInfoForTheData(typeInfo,
834 UtilConstants.BINARY,
835 null, false, false);
836 String attributeName = attr.getAttributeName();
837 String bitsToStringMethod =
838 getOverRideString() + FOUR_SPACE_INDENTATION +
839 PUBLIC + SPACE + STRING_DATA_TYPE + SPACE + TO +
840 STRING_DATA_TYPE + OPEN_PARENTHESIS +
841 CLOSE_PARENTHESIS + SPACE +
842 OPEN_CURLY_BRACKET + NEW_LINE +
843 EIGHT_SPACE_INDENTATION + RETURN + SPACE +
844 BASE64 + PERIOD + GET_ENCODER +
845 OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
846 PERIOD + ENCODE_TO_STRING + OPEN_PARENTHESIS +
847 attributeName + CLOSE_PARENTHESIS +
848 SEMI_COLAN + NEW_LINE +
849 FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
850 NEW_LINE;
851 methods.add(bitsToStringMethod);
852 } else if (type.getDataType().equals(BITS)) {
853 JavaQualifiedTypeInfoTranslator typeInfo =
854 getQualifiedTypeInfoOfCurNode(curNode,
855 getCapitalCase(UtilConstants.BITS));
856
857 JavaAttributeInfo attr =
858 getAttributeInfoForTheData(typeInfo,
859 UtilConstants.BITS,
860 null, false, false);
861 String attributeName = attr.getAttributeName();
862 String bitsToStringMethod =
863 getOverRideString() + FOUR_SPACE_INDENTATION +
864 PUBLIC + SPACE + STRING_DATA_TYPE + SPACE + TO +
865 STRING_DATA_TYPE + OPEN_PARENTHESIS +
866 CLOSE_PARENTHESIS + SPACE +
867 OPEN_CURLY_BRACKET + NEW_LINE +
868 EIGHT_SPACE_INDENTATION + RETURN + SPACE +
869 attributeName + PERIOD + TO +
870 STRING_DATA_TYPE + OPEN_PARENTHESIS +
871 CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE +
872 FOUR_SPACE_INDENTATION +
873 CLOSE_CURLY_BRACKET + NEW_LINE;
874 methods.add(bitsToStringMethod);
875 } else {
876 methods.add(getToStringMethodOpen() +
877 getDataFromTempFileHandle(
878 TO_STRING_IMPL_MASK,
879 ((TempJavaCodeFragmentFilesContainer)
880 curNode)
881 .getTempJavaCodeFragmentFiles()
882 .getTypeTempFiles(), path) +
883 getToStringMethodClose());
884 }
885 }
886
887 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530888 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530889 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530890 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530891 * @param curNode current YANG node
892 * @param imports imports for file
893 * @return type def class file
894 * @throws IOException when fails to generate class file
895 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530896 public static File generateUnionClassFile(File file, YangNode curNode,
897 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530898 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530899
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530900 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530901 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530902 YangPluginConfig config = fileInfo.getPluginConfig();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530903
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530904 String className = getCapitalCase(fileInfo.getJavaName());
905 String path = fileInfo.getBaseCodeGenPath() +
906 fileInfo.getPackageFilePath();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530907
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530908 TempJavaTypeFragmentFiles tempFiles =
909 ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
910 .getTypeTempFiles();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530911
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530912 boolean intConflict = false;
913 boolean longConflict = false;
914 boolean shortConflict = false;
915 JavaAttributeInfo intAttr = tempFiles.getIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530916 if (intAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530917 intAttr = tempFiles.getUIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530918 }
919
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530920 JavaAttributeInfo longAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530921 tempFiles.getLongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530922 if (longAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530923 longAttr = tempFiles.getULongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530924 }
925
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530926 JavaAttributeInfo shortAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530927 tempFiles.getShortAttribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530928 if (shortAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530929 shortAttr = tempFiles.getUInt8Attribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530930 }
931
Bharat saraswal64e7e232016-07-14 23:33:55 +0530932 if (intAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530933 intConflict = intAttr.isIntConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530934 }
935 if (longAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530936 longConflict = longAttr.isLongConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530937 }
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530938 if (shortAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530939 shortConflict = shortAttr.isShortConflict();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530940 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530941 if (longConflict) {
942 imports.add(tempFiles.getJavaImportData()
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530943 .getBigIntegerImport());
Bharat saraswal64e7e232016-07-14 23:33:55 +0530944 sort(imports);
945 }
946
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530947 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530948 imports, path, config);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530949
950 List<String> methods = new ArrayList<>();
951
Bharat saraswal64e7e232016-07-14 23:33:55 +0530952 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530953 try {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530954 addUnionClassAttributeInfo(file, curNode, intConflict,
955 longConflict, shortConflict, path,
956 tempFiles);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530957 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530958 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530959 }
960
Bharat saraswal64e7e232016-07-14 23:33:55 +0530961 //Default constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530962 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING,
963 config, curNode));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530964
965 try {
966
Bharat saraswal64e7e232016-07-14 23:33:55 +0530967 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530968 methods.add(getDataFromTempFileHandle(
969 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530970
971 // Of string method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530972 methods.add(getDataFromTempFileHandle(
973 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530974
Bharat saraswal64e7e232016-07-14 23:33:55 +0530975 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530976 methods.add(getDataFromTempFileHandle(
977 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530978
979 //Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530980 methods.add(getHashCodeMethodClose(
981 getHashCodeMethodOpen() +
982 getDataFromTempFileHandle(
983 HASH_CODE_IMPL_MASK, getTypeFiles(curNode),
984 path).replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530985
Bharat saraswal64e7e232016-07-14 23:33:55 +0530986 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530987 methods.add(getEqualsMethodClose(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530988 getEqualsMethodOpen(className + EMPTY_STRING) +
989 getDataFromTempFileHandle(
990 EQUALS_IMPL_MASK, getTypeFiles(curNode),
991 path)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530992
993 //To string method.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530994 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530995 getDataFromTempFileHandle(
996 TO_STRING_IMPL_MASK,
997 getTypeFiles(curNode), path) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530998 getToStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530999
Bharat saraswal64e7e232016-07-14 23:33:55 +05301000 //From string method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301001 methods.add(getFromStringMethodSignature(className, config) +
1002 getDataFromTempFileHandle(
1003 FROM_STRING_IMPL_MASK,
1004 getTypeFiles(curNode), path) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301005 getFromStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301006
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301007 if (intConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301008 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301009 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301010 if (longConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301011 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301012 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301013 if (shortConflict && !intConflict) {
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301014 methods.add(getRangeValidatorMethodForUnion(INT));
1015 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301016 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301017 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301018 }
1019
1020 for (String method : methods) {
1021 insertDataIntoJavaFile(file, method);
1022 }
1023 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1024
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301025 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301026 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301027
1028 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301029 * Adds union class attribute information.
1030 *
1031 * @param file generated file
1032 * @param curNode current YANG node
1033 * @param intConflict flag to indicate if there is a conflict in int
1034 * @param longConflict flag to indicate if there is a conflict in long
1035 * @param shortConflict flag to indicate if there is a conflict in short
1036 * @param path file path
1037 * @param tempFiles temp java type fragment files
1038 * @throws IOException a violation in IO rule
1039 */
1040 private static void addUnionClassAttributeInfo(File file,
1041 YangNode curNode,
1042 boolean intConflict,
1043 boolean longConflict,
1044 boolean shortConflict,
1045 String path,
1046 TempJavaTypeFragmentFiles tempFiles)
1047 throws IOException {
1048 if (intConflict) {
1049 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1050 .addStaticAttributeIntRange(PRIVATE,
1051 tempFiles.getIntIndex() <
1052 tempFiles.getUIntIndex()));
1053 }
1054
1055 if (longConflict) {
1056 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1057 .addStaticAttributeLongRange(PRIVATE,
1058 tempFiles.getLongIndex() <
1059 tempFiles.getULongIndex()));
1060 }
1061
1062 if (shortConflict) {
1063 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1064 .addStaticAttributeShortRange(PRIVATE,
1065 tempFiles.getShortIndex() <
1066 tempFiles.getUInt8Index()));
1067 }
1068
1069 insertDataIntoJavaFile(file, NEW_LINE + FOUR_SPACE_INDENTATION +
1070 getDataFromTempFileHandle(
1071 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
1072 }
1073
1074 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301075 * Generates class file for type enum.
1076 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301077 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301078 * @param curNode current YANG node
1079 * @return class file for type enum
1080 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301081 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301082 public static File generateEnumClassFile(File file, YangNode curNode)
1083 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301084
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301085 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301086 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301087 YangPluginConfig config = fileInfo.getPluginConfig();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301088
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301089 String className = fileInfo.getJavaName();
1090 String path = fileInfo.getBaseCodeGenPath() +
1091 fileInfo.getPackageFilePath();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301092
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301093 initiateJavaFileGeneration(file, getCapitalCase(className),
1094 GENERATE_ENUM_CLASS, null, path,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301095 config);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301096
1097 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301098 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301099 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301100 insertDataIntoJavaFile(file,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301101 trimAtLast(trimAtLast(
1102 getDataFromTempFileHandle(
1103 ENUM_IMPL_MASK, javaGenInfo
1104 .getTempJavaCodeFragmentFiles()
1105 .getEnumerationTempFiles(),
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301106 path), COMMA), NEW_LINE) +
1107 SEMI_COLAN + NEW_LINE);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301108 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301109 throw new IOException(getErrorMsg(getCapitalCase(className),
1110 ENUM_CLASS));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301111 }
1112
Bharat saraswal64e7e232016-07-14 23:33:55 +05301113 // Add an attribute to get the enum's values.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301114 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301115
Bharat saraswal64e7e232016-07-14 23:33:55 +05301116 // Add a constructor for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301117 insertDataIntoJavaFile(file,
1118 getJavaDoc(TYPE_CONSTRUCTOR, className, false,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301119 config, null) +
1120 getEnumsConstructor(getCapitalCase(className)) +
1121 NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301122
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301123 insertDataIntoJavaFile(file,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301124 getEnumsOfValueMethod(className,
1125 (YangEnumeration) curNode,
1126 config) + NEW_LINE);
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301127 insertDataIntoJavaFile(file,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301128 getEnumValueOfSchemaNameMethod(className,
1129 config,
1130 (YangEnumeration) curNode));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301131
Bharat saraswal64e7e232016-07-14 23:33:55 +05301132 // Add a getter method for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301133 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301134 config, null) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301135 getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301136 insertDataIntoJavaFile(file,
1137 getJavaDoc(GETTER_METHOD, SCHEMA_NAME, false,
1138 config, null) +
1139 getGetter(STRING_DATA_TYPE, SCHEMA_NAME,
1140 GENERATE_ENUM_CLASS) +
1141 NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301142
1143 try {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301144 insertDataIntoJavaFile(file,
1145 getFromStringMethodSignature(getCapitalCase(className),
1146 config) +
1147 getDataFromTempFileHandle(
1148 FROM_STRING_IMPL_MASK,
1149 ((TempJavaCodeFragmentFilesContainer) curNode)
1150 .getTempJavaCodeFragmentFiles()
1151 .getEnumerationTempFiles(),
1152 path) + getFromStringMethodClose());
Bharat saraswal250a7472016-05-12 13:16:57 +05301153 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301154 throw new IOException(getErrorMsg(getCapitalCase(className),
1155 ENUM_CLASS));
Bharat saraswal250a7472016-05-12 13:16:57 +05301156 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301157
1158 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1159
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301160 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301161 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301162
1163 /**
1164 * Generates interface file for rpc.
1165 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301166 * @param file generated file
1167 * @param curNode current YANG node
1168 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301169 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301170 * @throws IOException when fails to generate class file
1171 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301172 public static File generateServiceInterfaceFile(File file, YangNode curNode,
1173 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301174 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301175
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301176 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301177 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301178
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301179 TempJavaServiceFragmentFiles tempFiles =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301180 ((JavaCodeGeneratorInfo) curNode)
1181 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301182 String className = getCapitalCase(fileInfo.getJavaName()) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301183 SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301184 String path = fileInfo.getBaseCodeGenPath() +
1185 fileInfo.getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301186 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports,
1187 curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301188
1189 List<String> methods = new ArrayList<>();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301190 JavaAttributeInfo rootAttribute =
1191 getCurNodeAsAttributeInTarget(curNode, curNode, false,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301192 tempFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301193
1194 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301195
Bharat saraswal1edde622016-09-06 10:18:04 +05301196 if (isGetSetOfRootNodeRequired(curNode)) {
1197 //Getter methods.
1198 methods.add(getGetterString(rootAttribute,
1199 GENERATE_SERVICE_AND_MANAGER,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301200 fileInfo.getPluginConfig()) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301201 NEW_LINE);
1202 // Setter methods.
1203 methods.add(getSetterString(rootAttribute, className,
1204 GENERATE_SERVICE_AND_MANAGER,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301205 fileInfo.getPluginConfig()) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301206 NEW_LINE);
1207 }
1208
Bharat saraswalaf413b82016-07-14 15:18:20 +05301209 methods.add(getAugmentsDataMethodForService(curNode) + NEW_LINE);
1210
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301211 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
1212 .getServiceTempFiles() != null) {
1213 JavaCodeGeneratorInfo javaGenInfo =
1214 (JavaCodeGeneratorInfo) curNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301215
1216 // Rpc methods
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301217 methods.add(getDataFromTempFileHandle(
1218 RPC_INTERFACE_MASK,
1219 javaGenInfo.getTempJavaCodeFragmentFiles()
1220 .getServiceTempFiles(), path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301221 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301222 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301223 throw new IOException(getErrorMsg(className, RPC_CLASS));
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301224 }
1225
1226 for (String method : methods) {
1227 insertDataIntoJavaFile(file, method);
1228 }
1229 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1230
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301231 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301232 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301233
1234 /**
1235 * Generates event file.
1236 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301237 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301238 * @param curNode current YANG node
1239 * @param imports imports for file
1240 * @throws IOException when fails to generate class file
1241 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301242 public static void generateEventFile(File file, YangNode curNode,
1243 List<String> imports)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301244 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301245
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301246 String className =
1247 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1248 .getJavaName()) + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301249
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301250 TempJavaEventFragmentFiles tempFiles =
1251 ((TempJavaCodeFragmentFilesContainer) curNode)
1252 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301253
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301254 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301255 .getBaseCodeGenPath() +
1256 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1257 .getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301258 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode,
1259 className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301260 try {
1261 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301262 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK,
1263 tempFiles, path),
1264 COMMA) + FOUR_SPACE_INDENTATION +
1265 CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301266
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301267 insertDataIntoJavaFile(file,
1268 getDataFromTempFileHandle(EVENT_METHOD_MASK,
1269 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301270 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301271 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301272 }
1273
1274 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1275 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301276 }
1277
1278 /**
1279 * Generates event listener file.
1280 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301281 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301282 * @param curNode current YANG node
1283 * @param imports imports for file
1284 * @throws IOException when fails to generate class file
1285 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301286 public static void generateEventListenerFile(File file, YangNode curNode,
1287 List<String> imports)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301288 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301289
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301290 String className =
1291 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1292 .getJavaName()) + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301293
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301294 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE,
1295 imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301296 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301297 validateLineLength(file);
1298 }
1299
1300 /**
1301 * Generates event subject's file.
1302 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301303 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301304 * @param curNode current YANG node
1305 * @throws IOException when fails to do IO exceptions
1306 */
1307 public static void generateEventSubjectFile(File file, YangNode curNode)
1308 throws IOException {
1309
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301310 String className =
1311 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1312 .getJavaName()) + EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301313
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301314 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null,
1315 curNode, className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301316
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301317 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301318 .getBaseCodeGenPath() +
1319 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1320 .getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301321
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301322 TempJavaEventFragmentFiles tempFiles =
1323 ((TempJavaCodeFragmentFilesContainer) curNode)
1324 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301325
1326 insertDataIntoJavaFile(file, NEW_LINE);
1327 try {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301328 insertDataIntoJavaFile(file,
1329 getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK,
1330 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301331
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301332 insertDataIntoJavaFile(file,
1333 getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK,
1334 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301335
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301336 insertDataIntoJavaFile(file,
1337 getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK,
1338 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301339 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301340 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301341 }
1342
1343 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1344 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301345 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301346
1347 /**
1348 * Returns error message string.
1349 *
1350 * @param className name of the class
1351 * @param fileType type of file
1352 * @return error message string
1353 */
1354 private static String getErrorMsg(String className, String fileType) {
1355 return "No data found in temporary java code fragment files for " +
1356 className + " while " + fileType + " file generation.";
1357 }
1358
1359 /**
1360 * Checks whether leaf is present in YANG leaves holder.
1361 *
1362 * @param holder holder of YANG leaves
1363 * @return true if leaves are present, false otherwise
1364 */
1365 private static boolean leavesPresent(YangLeavesHolder holder) {
1366 return holder.getListOfLeaf() != null &&
1367 !holder.getListOfLeaf().isEmpty() ||
1368 holder.getListOfLeafList() != null &&
1369 !holder.getListOfLeafList().isEmpty();
1370 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301371}