blob: c8d55d79085c8faed99fb5881348e38822d24898 [file] [log] [blame]
Bharat saraswal4bf8b152016-02-25 02:26:43 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswal4bf8b152016-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
19import java.io.File;
20import java.io.IOException;
Bharat saraswal2f00b4b2016-03-04 20:08:09 +053021import java.util.ArrayList;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053022import java.util.List;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053023
Bharat saraswalb1170bd2016-07-14 13:26:18 +053024import org.onosproject.yangutils.datamodel.YangAugment;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +053025import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +053026import org.onosproject.yangutils.datamodel.YangLeaf;
27import org.onosproject.yangutils.datamodel.YangLeafList;
28import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Bharat saraswald50c6382016-07-14 21:57:13 +053029import org.onosproject.yangutils.datamodel.YangModule;
Vinod Kumar S38046502016-03-23 15:30:27 +053030import org.onosproject.yangutils.datamodel.YangNode;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +053031import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswald50c6382016-07-14 21:57:13 +053032import org.onosproject.yangutils.datamodel.YangTypeDef;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +053033import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswalb551aae2016-07-14 15:18:20 +053034import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053035import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S38046502016-03-23 15:30:27 +053036import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053037import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +053038import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053039import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswalc0e04842016-05-12 13:16:57 +053040import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswald50c6382016-07-14 21:57:13 +053041import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Bharat saraswal33dfa012016-05-17 19:59:16 +053042import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswald50c6382016-07-14 21:57:13 +053043import org.onosproject.yangutils.translator.tojava.YangJavaModelUtils;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053044import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Vinod Kumar S38046502016-03-23 15:30:27 +053045
46import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
47import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
50import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Vinod Kumar S38046502016-03-23 15:30:27 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
56import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_BUILDER_CLASS_MASK;
58import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_CLASS_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
65import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
68import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053069import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053070import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053073import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053074import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053075import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053076import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
77import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
78import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +053079import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
80import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedTypeInfoOfCurNode;
Bharat saraswalb551aae2016-07-14 15:18:20 +053081import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
82import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.addAugmentationAttribute;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053083import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
Bharat saraswalb551aae2016-07-14 15:18:20 +053084import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
85import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswale2d51d62016-03-23 19:40:35 +053086import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal33dfa012016-05-17 19:59:16 +053087import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.addActivateMethod;
88import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.addDeActivateMethod;
Bharat saraswalb551aae2016-07-14 15:18:20 +053089import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
90import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoImpl;
Bharat saraswald50c6382016-07-14 21:57:13 +053091import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoMapImpl;
Bharat saraswalb551aae2016-07-14 15:18:20 +053092import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForManager;
93import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
Bharat saraswald50c6382016-07-14 21:57:13 +053094import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBaseClassMethodImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053095import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053096import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
Bharat saraswalc0e04842016-05-12 13:16:57 +053097import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfMethod;
Vinod Kumar S38046502016-03-23 15:30:27 +053098import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
99import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
101import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswald72411a2016-04-19 01:00:16 +0530102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
Vinod Kumar S38046502016-03-23 15:30:27 +0530105import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Bharat saraswald50c6382016-07-14 21:57:13 +0530107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getIsFilterContentMatch;
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOpParamConstructorStart;
110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOperationTypeSetter;
111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOperationTypegetter;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530114import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForLeaf;
115import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForLeafList;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530116import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530117import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringLeafListgetter;
118import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringLeafgetter;
Vinod Kumar S38046502016-03-23 15:30:27 +0530119import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
120import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530121import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringSelectLeafListgetter;
122import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringSelectLeafgetter;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530123import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswald50c6382016-07-14 21:57:13 +0530124import static org.onosproject.yangutils.utils.UtilConstants.BITSET;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530125import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
126import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530127import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Bharat saraswald72411a2016-04-19 01:00:16 +0530128import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald50c6382016-07-14 21:57:13 +0530129import static org.onosproject.yangutils.utils.UtilConstants.CREATE;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530130import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswald50c6382016-07-14 21:57:13 +0530131import static org.onosproject.yangutils.utils.UtilConstants.DELETE;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530132import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530133import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswald50c6382016-07-14 21:57:13 +0530134import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
135import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
136import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530137import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
138import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530139import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswald50c6382016-07-14 21:57:13 +0530140import static org.onosproject.yangutils.utils.UtilConstants.FILTER_LEAF;
141import static org.onosproject.yangutils.utils.UtilConstants.FILTER_LEAF_LIST;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530142import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530143import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
Bharat saraswald50c6382016-07-14 21:57:13 +0530144import static org.onosproject.yangutils.utils.UtilConstants.GET_FILTER_LEAF;
145import static org.onosproject.yangutils.utils.UtilConstants.GET_FILTER_LEAF_LIST;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530146import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
Bharat saraswald72411a2016-04-19 01:00:16 +0530147import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswald50c6382016-07-14 21:57:13 +0530148import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_IMPORT_BASE64_CLASS;
149import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_PKG;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530150import static org.onosproject.yangutils.utils.UtilConstants.LOGGER_STATEMENT;
janani bdd1314f2016-05-19 17:39:50 +0530151import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
Bharat saraswald50c6382016-07-14 21:57:13 +0530152import static org.onosproject.yangutils.utils.UtilConstants.MERGE;
153import static org.onosproject.yangutils.utils.UtilConstants.NEW;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530154import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530155import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
Bharat saraswald50c6382016-07-14 21:57:13 +0530156import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530157import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530158import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_ENUM;
159import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM_TYPE;
Bharat saraswald50c6382016-07-14 21:57:13 +0530160import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
161import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
162import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
163import static org.onosproject.yangutils.utils.UtilConstants.REMOVE;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530164import static org.onosproject.yangutils.utils.UtilConstants.REPLACE;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530165import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Bharat saraswald50c6382016-07-14 21:57:13 +0530166import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF;
167import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF_LIST;
168import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
169import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
170import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
171import static org.onosproject.yangutils.utils.UtilConstants.STATIC;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530172import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Bharat saraswald50c6382016-07-14 21:57:13 +0530173import static org.onosproject.yangutils.utils.UtilConstants.SUPER;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530174import static org.onosproject.yangutils.utils.UtilConstants.TO;
Bharat saraswald72411a2016-04-19 01:00:16 +0530175import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
176import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530177import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530178import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530179import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswald72411a2016-04-19 01:00:16 +0530180import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530181import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530182
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530183/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530184 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530185 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530186public final class JavaFileGenerator {
187
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530188 private JavaFileGenerator() {
189 }
190
191 /**
192 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530193 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530194 * @param file file
195 * @param imports imports for the file
196 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530197 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530198 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530199 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530200 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530201 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530202 boolean isAttrPresent)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530203 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530204
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530205 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswald50c6382016-07-14 21:57:13 +0530206
207 String path;
208 if (curNode instanceof YangModule) {
209 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
210 } else {
211 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
212 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530213
janani b4a6711a2016-05-17 13:12:22 +0530214 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530215
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530216 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode, className);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530217
Bharat saraswal2f11f652016-03-25 18:19:46 +0530218 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530219 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530220 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530221 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530222 try {
223 /**
224 * Getter methods.
225 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530226 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
227 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530228 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530229 } catch (IOException e) {
230 throw new IOException("No data found in temporary java code fragment files for " + className
231 + " while interface file generation");
232 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530233 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530234 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530235 }
236
237 /**
Gaurav Agrawal56527662016-04-20 15:49:17 +0530238 * Returns generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530239 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530240 * @param file file
241 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530242 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530243 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530244 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530245 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530246 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
247 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530248
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530249 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530250 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530251
janani b4a6711a2016-05-17 13:12:22 +0530252 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswald50c6382016-07-14 21:57:13 +0530253 String path;
254 if (curNode instanceof YangModule) {
255 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
256 } else {
257 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
258 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530259
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530260 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode, className);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530261 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530262 if (isAttrPresent) {
263 try {
264 /**
265 * Getter methods.
266 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530267 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
268 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530269 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530270 /**
271 * Setter methods.
272 */
273 methods.add(NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530274 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
275 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530276 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530277 } catch (IOException e) {
278 throw new IOException("No data found in temporary java code fragment files for " + className
279 + " while builder interface file generation");
280 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530281 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530282 /**
283 * Add build method to builder interface file.
284 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530285 methods.add(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530286 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530287 .addBuildMethodForInterface(pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530288
289 /**
290 * Add getters and setters in builder interface.
291 */
292 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530293 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530294 }
295
Bharat saraswale2d51d62016-03-23 19:40:35 +0530296 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530297 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530298 }
299
300 /**
301 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530302 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530303 * @param file file
304 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530305 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530306 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530307 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530308 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530309 public static File generateBuilderClassFile(File file, YangNode curNode,
310 boolean isAttrPresent) throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530311
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530312 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530313 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530314
janani b4a6711a2016-05-17 13:12:22 +0530315 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswald50c6382016-07-14 21:57:13 +0530316
317 String path;
318 if (curNode instanceof YangModule) {
319 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
320 } else {
321 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
322 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530323
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530324 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode, className);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530325 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530326
Bharat saraswal2f11f652016-03-25 18:19:46 +0530327 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530328 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530329 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530330 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530331 try {
332 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530333 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
334 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530335 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530336 } catch (IOException e) {
337 throw new IOException("No data found in temporary java code fragment files for " + className
338 + " while builder class file generation");
339 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530340
Bharat saraswal2f11f652016-03-25 18:19:46 +0530341 try {
342 /**
343 * Getter methods.
344 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530345 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
346 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530347 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530348 /**
349 * Setter methods.
350 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530351 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
352 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530353 .getBeanTempFiles(), path));
354
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530355 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530356 } catch (IOException e) {
357 throw new IOException("No data found in temporary java code fragment files for " + className
358 + " while builder class file generation");
359 }
360 } else {
361 insertDataIntoJavaFile(file, NEW_LINE);
362 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530363 /**
364 * Add default constructor and build method impl.
365 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530366 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
367 .addBuildMethodImpl());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530368 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530369 .addDefaultConstructor(PUBLIC, BUILDER, pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530370
371 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530372 * Add methods in builder class.
373 */
374 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530375 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530376 }
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530377 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530378 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530379 }
380
381 /**
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530382 * Returns generated op param builder class file for current node.
Bharat saraswald50c6382016-07-14 21:57:13 +0530383 *
384 * @param file file handle
385 * @param curNode current YANG node
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530386 * @param isAttrPresent if any attribute is present or not
387 * @return builder class file
388 * @throws IOException when fails to write in file
389 */
390 public static File generateOpParamBuilderClassFile(File file, YangNode curNode,
Bharat saraswald50c6382016-07-14 21:57:13 +0530391 boolean isAttrPresent) throws IOException {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530392
393 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
394 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
395
396 String className = getCapitalCase(javaFileInfo.getJavaName());
397
398 initiateJavaFileGeneration(file, OPERATION_BUILDER_CLASS_MASK, null, curNode, className);
399 List<String> methods = new ArrayList<>();
400
401 if (isAttrPresent) {
402 /**
403 * Add attribute strings.
404 */
405 try {
406 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
407 OPERATION_ENUM + SPACE + OP_PARAM_TYPE + SEMI_COLAN + NEW_LINE);
408
409 } catch (IOException e) {
410 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530411 + " while impl class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530412 }
413
414 try {
415 if (curNode instanceof YangLeavesHolder) {
416 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
417 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
418 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
419
420 if (leaves != null && !leaves.isEmpty()) {
421 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
422 BITSET + SPACE + FILTER_LEAF + SPACE + EQUAL + SPACE +
423 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLAN
424 + NEW_LINE);
425
426 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
427 BITSET + SPACE + SELECT_LEAF + SPACE + EQUAL + SPACE +
428 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
429 + SEMI_COLAN + NEW_LINE);
430 }
431
432 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
433 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
434 BITSET + SPACE + FILTER_LEAF_LIST + SPACE + EQUAL + SPACE +
435 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
436 + SEMI_COLAN + NEW_LINE);
437
438 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
439 BITSET + SPACE + SELECT_LEAF_LIST + SPACE + EQUAL + SPACE +
440 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
441 + SEMI_COLAN + NEW_LINE);
442 }
443 }
444
445 } catch (IOException e) {
446 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530447 + " while impl class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530448 }
449
450 try {
451 /**
452 * Setter methods.
453 */
454 methods.add(getSetterForLeaf(className, curNode, pluginConfig));
455 methods.add(getSetterForLeafList(className, curNode, pluginConfig));
456
457 if (curNode instanceof YangLeavesHolder) {
458 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
459 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
460 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
461
462 if (leaves != null && !leaves.isEmpty()) {
463 methods.add(getToStringLeafgetter());
464 methods.add(getToStringSelectLeafgetter());
465 }
466
467 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
468 methods.add(getToStringLeafListgetter());
469 methods.add(getToStringSelectLeafListgetter());
470 }
471 }
472
473 methods.add(getOperationTypegetter());
474 methods.add(getOperationTypeSetter());
475 insertDataIntoJavaFile(file, NEW_LINE);
476 } catch (IOException e) {
477 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530478 + " while builder class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530479 }
480 } else {
481 insertDataIntoJavaFile(file, NEW_LINE);
482 }
483
484 /**
485 * Add methods in builder class.
486 */
487 for (String method : methods) {
488 insertDataIntoJavaFile(file, method);
489 }
490 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
491 return validateLineLength(file);
492 }
493
494
495 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530496 * Returns generated manager class file for current node.
497 *
Bharat saraswalb551aae2016-07-14 15:18:20 +0530498 * @param file file
499 * @param imports imports for the file
500 * @param curNode current YANG node
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530501 * @return builder class file
502 * @throws IOException when fails to write in file
503 */
Bharat saraswalb551aae2016-07-14 15:18:20 +0530504 public static File generateManagerClassFile(File file, List<String> imports, YangNode curNode)
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530505 throws IOException {
506
507 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
508
janani bdd1314f2016-05-19 17:39:50 +0530509 String className = getCapitalCase(javaFileInfo.getJavaName()) + MANAGER;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530510 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530511
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530512 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530513
514 List<String> methods = new ArrayList<>();
515
Bharat saraswal33dfa012016-05-17 19:59:16 +0530516 insertDataIntoJavaFile(file, LOGGER_STATEMENT);
517 methods.add(addActivateMethod());
518 methods.add(addDeActivateMethod());
519
Bharat saraswalb551aae2016-07-14 15:18:20 +0530520 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
521 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530522
Bharat saraswalb551aae2016-07-14 15:18:20 +0530523 JavaAttributeInfo rootAttribute = getCurNodeAsAttributeInTarget(curNode, curNode, false,
524 tempJavaServiceFragmentFiles);
525 try {
526 /**
527 * Getter methods.
528 */
529 methods.add(getOverRideString() +
530 getGetterForClass(rootAttribute, GENERATE_SERVICE_AND_MANAGER) + NEW_LINE);
531 /**
532 * Setter methods.
533 */
534 methods.add(getOverRideString() +
535 getSetterForClass(rootAttribute, className, GENERATE_SERVICE_AND_MANAGER)
536 + NEW_LINE);
537
538 methods.add(getAugmentsDataMethodForManager(curNode) + NEW_LINE);
539
Bharat saraswalc0e04842016-05-12 13:16:57 +0530540 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530541 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
542 /**
543 * Rpc methods
544 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530545 methods.add(getDataFromTempFileHandle(RPC_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530546 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530547 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530548 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530549
550 } catch (IOException e) {
551 throw new IOException("No data found in temporary java code fragment files for " + className
552 + " while manager class file generation");
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530553 }
554
555 /**
556 * Add methods in builder class.
557 */
558 for (String method : methods) {
559 insertDataIntoJavaFile(file, method);
560 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530561 return validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530562 }
563
564 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530565 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530566 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530567 * @param file file
568 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530569 * @param isAttrPresent if any attribute is present or not
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530570 * @param imports list of imports
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530571 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530572 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530573 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530574 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent, List<String> imports)
Vinod Kumar S38046502016-03-23 15:30:27 +0530575 throws IOException {
576
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530577 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530578 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530579
janani b4a6711a2016-05-17 13:12:22 +0530580 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswald50c6382016-07-14 21:57:13 +0530581 String path;
582 if (curNode instanceof YangModule) {
583 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
584 } else {
585 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
586 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530587
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530588 initiateJavaFileGeneration(file, IMPL_CLASS_MASK, imports, curNode, className);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530589
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530590 List<String> methods = new ArrayList<>();
Bharat saraswalb551aae2016-07-14 15:18:20 +0530591 if (curNode instanceof YangAugmentableNode) {
592 insertDataIntoJavaFile(file, addAugmentationAttribute());
593 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530594 if (isAttrPresent) {
595 /**
596 * Add attribute strings.
597 */
598 try {
599 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530600 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
601 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530602 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530603 } catch (IOException e) {
604 throw new IOException("No data found in temporary java code fragment files for " + className
605 + " while impl class file generation");
606 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530607
Bharat saraswal2f11f652016-03-25 18:19:46 +0530608 try {
609 /**
610 * Getter methods.
611 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530612 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
613 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530614 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530615
616 /**
617 * Hash code method.
618 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530619 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530620 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
621 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530622 .getBeanTempFiles(), path).replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530623 /**
624 * Equals method.
625 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530626 methods.add(getEqualsMethodClose(getEqualsMethodOpen(getCapitalCase(DEFAULT) + className)
627 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
628 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
629 .getBeanTempFiles(), path)));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530630 /**
631 * To string method.
632 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530633 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
634 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530635 .getBeanTempFiles(), path)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530636 + getToStringMethodClose());
637
638 } catch (IOException e) {
639 throw new IOException("No data found in temporary java code fragment files for " + className
640 + " while impl class file generation");
641 }
642 } else {
643 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530644 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530645 try {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530646
Bharat saraswale2d51d62016-03-23 19:40:35 +0530647 /**
648 * Constructor.
649 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530650 String constructor = getConstructorStart(className, pluginConfig);
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530651 constructor = constructor + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
652 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
653 .getBeanTempFiles(), path);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530654
655 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530656 } catch (IOException e) {
657 throw new IOException("No data found in temporary java code fragment files for " + className
658 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530659 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530660
Bharat saraswalb551aae2016-07-14 15:18:20 +0530661 if (curNode instanceof YangAugmentableNode) {
662 methods.add(getAddAugmentInfoMethodImpl());
663 methods.add(getAugmentInfoImpl());
Bharat saraswald50c6382016-07-14 21:57:13 +0530664 methods.add(getAugmentInfoMapImpl(javaFileInfo.getPluginConfig()));
Bharat saraswalb551aae2016-07-14 15:18:20 +0530665 }
666
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530667 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530668 * Add methods in impl class.
669 */
670 for (String method : methods) {
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530671 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530672 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530673
Bharat saraswal33dfa012016-05-17 19:59:16 +0530674 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530675 }
676
677 /**
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530678 * Returns generated op param class file for current node.
679 *
Bharat saraswald50c6382016-07-14 21:57:13 +0530680 * @param file file handle
681 * @param curNode current YANG node
682 * @param isAttrPresent if any attribute is present or not
683 * @param imports import list
684 * @return returns generated op param class file for current node
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530685 * @throws IOException when fails to write in file
686 */
687 public static File generateOpParamImplClassFile(File file, YangNode curNode,
688 boolean isAttrPresent, List<String> imports)
689 throws IOException {
690
691 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
692 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
693
694 String className = getCapitalCase(javaFileInfo.getJavaName());
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530695
696 initiateJavaFileGeneration(file, OPERATION_CLASS_MASK, imports, curNode, className);
697
698 List<String> methods = new ArrayList<>();
699
700 if (isAttrPresent) {
701 /**
702 * Add attribute strings.
703 */
704 try {
705 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PUBLIC + SPACE + STATIC +
706 SPACE + ENUM + SPACE + OPERATION_ENUM + SPACE + OPEN_CURLY_BRACKET +
707 NEW_LINE + EIGHT_SPACE_INDENTATION + MERGE +
708 NEW_LINE + EIGHT_SPACE_INDENTATION + REPLACE +
709 NEW_LINE + EIGHT_SPACE_INDENTATION + CREATE +
710 NEW_LINE + EIGHT_SPACE_INDENTATION + DELETE +
711 NEW_LINE + EIGHT_SPACE_INDENTATION + REMOVE +
712 NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
713
714 } catch (IOException e) {
715 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530716 + " while impl class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530717 }
718
719 /**
720 * Add attribute strings.
721 */
722 try {
723 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
724 OPERATION_ENUM + SPACE + OP_PARAM_TYPE + SEMI_COLAN + NEW_LINE);
725
726 } catch (IOException e) {
727 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530728 + " while impl class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530729 }
730
731 try {
732 if (curNode instanceof YangLeavesHolder) {
733 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
734 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
735 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
736
737 if (leaves != null && !leaves.isEmpty()) {
738 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
739 BITSET + SPACE + FILTER_LEAF + SPACE + EQUAL + SPACE +
740 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
741 + SEMI_COLAN + NEW_LINE);
742
743 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
744 BITSET + SPACE + SELECT_LEAF + SPACE + EQUAL + SPACE +
745 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
746 + SEMI_COLAN + NEW_LINE);
747 }
748
749 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
750 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
751 BITSET + SPACE + FILTER_LEAF_LIST + SPACE + EQUAL + SPACE +
752 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
753 + SEMI_COLAN + NEW_LINE);
754
755 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
756 BITSET + SPACE + SELECT_LEAF_LIST + SPACE + EQUAL + SPACE +
757 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
758 + SEMI_COLAN + NEW_LINE);
759 }
760 }
761
762 } catch (IOException e) {
763 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530764 + " while impl class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530765 }
766
767 if (curNode instanceof YangLeavesHolder) {
768 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
769 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
770 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
771
772 if (leaves != null && !leaves.isEmpty()) {
773 methods.add(getToStringLeafgetter());
774 methods.add(getToStringSelectLeafgetter());
775 }
776
777 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
778 methods.add(getToStringLeafListgetter());
779 methods.add(getToStringSelectLeafListgetter());
780 }
781 }
782
783 methods.add(getOperationTypegetter());
Bharat saraswald50c6382016-07-14 21:57:13 +0530784 methods.add(getIsFilterContentMatch(className, curNode, pluginConfig));
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530785
786 } else {
787 insertDataIntoJavaFile(file, NEW_LINE);
788 }
789 String constructor = getOpParamConstructorStart(className, pluginConfig);
790
791 constructor = constructor + EIGHT_SPACE_INDENTATION + SUPER + OPEN_PARENTHESIS
792 + BUILDER.toLowerCase() + OBJECT
793 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
794
795 if (curNode instanceof YangLeavesHolder) {
796 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
797 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
798 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
799 String filterLeaf = "";
800 String filterLeafList = "";
801
802 if (leaves != null && !leaves.isEmpty()) {
803 filterLeaf = EIGHT_SPACE_INDENTATION + FILTER_LEAF + SPACE + EQUAL + SPACE
804 + BUILDER.toLowerCase() + OBJECT + PERIOD + GET_FILTER_LEAF + OPEN_PARENTHESIS
805 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
806 }
807
808 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
809 filterLeafList = EIGHT_SPACE_INDENTATION + FILTER_LEAF_LIST + SPACE + EQUAL + SPACE
810 + BUILDER.toLowerCase() + OBJECT + PERIOD + GET_FILTER_LEAF_LIST + OPEN_PARENTHESIS
811 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
812 }
813
814 constructor = constructor + filterLeaf + filterLeafList;
815 }
816
817 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
818
Bharat saraswald50c6382016-07-14 21:57:13 +0530819 if (curNode instanceof YangAugment) {
820 String clsName = getCapitalCase(DEFAULT) +
821 getCapitalCase(YangJavaModelUtils.getAugmentClassName((YangAugment) curNode, pluginConfig));
822 methods.add(getBaseClassMethodImpl(clsName));
823 }
824
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530825 /**
826 * Add methods in impl class.
827 */
828 for (String method : methods) {
829 insertDataIntoJavaFile(file, method);
830 }
831
832
833 return validateLineLength(file);
834 }
835
836 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530837 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530838 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530839 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530840 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530841 * @param imports imports for file
842 * @return type def class file
843 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530844 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530845 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
846 throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530847
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530848 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530849 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530850
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530851 // import
janani b4a6711a2016-05-17 13:12:22 +0530852 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530853 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530854 YangTypeDef typeDef = (YangTypeDef) curNode;
855 List<YangType<?>> types = typeDef.getTypeList();
856 YangType type = types.get(0);
857 if (type.getDataType().equals(YangDataTypes.BINARY)) {
858 imports.add(IMPORT + JAVA_UTIL_OBJECTS_IMPORT_PKG + PERIOD + JAVA_UTIL_IMPORT_BASE64_CLASS);
859 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530860
Bharat saraswal33dfa012016-05-17 19:59:16 +0530861 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path, pluginConfig);
Vinod Kumar S38046502016-03-23 15:30:27 +0530862
Bharat saraswale2d51d62016-03-23 19:40:35 +0530863 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530864
Bharat saraswale2d51d62016-03-23 19:40:35 +0530865 /**
866 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530867 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530868 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530869 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530870 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
871 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530872 .getTypeTempFiles(), path));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530873 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530874 throw new IOException("No data found in temporary java code fragment files for " + className
875 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530876 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530877
Bharat saraswale2d51d62016-03-23 19:40:35 +0530878 /**
879 * Default constructor.
880 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530881 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530882 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Vinod Kumar S38046502016-03-23 15:30:27 +0530883
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530884 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530885
886 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530887 * Type constructor.
888 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530889 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530890 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
891 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530892
893 /**
894 * Of method.
895 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530896 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530897 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
898 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530899
900 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530901 * Getter method.
902 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530903 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530904 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
905 path));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530906
907 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530908 * Hash code method.
909 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530910 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530911 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
912 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530913 .getTypeTempFiles(), path)
914 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530915
916 /**
917 * Equals method.
918 */
919 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530920 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530921 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
922 .getTypeTempFiles(), path)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530923
924 /**
925 * To string method.
926 */
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530927 if (type.getDataType().equals(YangDataTypes.BINARY)) {
928 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
Bharat saraswald50c6382016-07-14 21:57:13 +0530929 getCapitalCase("binary"));
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530930
Bharat saraswald50c6382016-07-14 21:57:13 +0530931 JavaAttributeInfo attr = getAttributeInfoForTheData(qualifiedTypeInfo, "binary", null, false,
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530932 false);
933 String attributeName = attr.getAttributeName();
934 String bitsToStringMethod = MethodsGenerator.getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC
935 + SPACE + STRING_DATA_TYPE + SPACE + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
936 + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
937 + RETURN + SPACE + BASE64 + PERIOD + GET_ENCODER + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
938 + PERIOD + ENCODE_TO_STRING + OPEN_PARENTHESIS + attributeName + CLOSE_PARENTHESIS
939 + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
940 methods.add(bitsToStringMethod);
941 } else if (type.getDataType().equals(YangDataTypes.BITS)) {
942 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
Bharat saraswald50c6382016-07-14 21:57:13 +0530943 getCapitalCase("bits"));
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530944
Bharat saraswald50c6382016-07-14 21:57:13 +0530945 JavaAttributeInfo attr = getAttributeInfoForTheData(qualifiedTypeInfo, "bits", null, false, false);
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530946 String attributeName = attr.getAttributeName();
947 String bitsToStringMethod = MethodsGenerator.getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC
948 + SPACE + STRING_DATA_TYPE + SPACE + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
949 + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
950 + RETURN + SPACE + attributeName + PERIOD + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
951 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET
952 + NEW_LINE;
953 methods.add(bitsToStringMethod);
954 } else {
955 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530956 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
957 path) + getToStringMethodClose());
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530958 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530959
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530960 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530961 /**
962 * From string method.
963 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530964 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530965 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530966 .getTypeTempFiles(), path)
967 + getFromStringMethodClose());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530968
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530969 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530970 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530971 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530972 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530973
Bharat saraswale2d51d62016-03-23 19:40:35 +0530974 for (String method : methods) {
975 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530976 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530977 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530978
Bharat saraswal33dfa012016-05-17 19:59:16 +0530979 return validateLineLength(file);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530980 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530981
982 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530983 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530984 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530985 * @param file generated file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530986 * @param curNode current YANG node
987 * @param imports imports for file
988 * @return type def class file
989 * @throws IOException when fails to generate class file
990 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530991 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
992 throws IOException {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530993
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530994 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530995 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530996
janani b4a6711a2016-05-17 13:12:22 +0530997 String className = getCapitalCase(javaFileInfo.getJavaName());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530998 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
999
Bharat saraswal33dfa012016-05-17 19:59:16 +05301000 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path, pluginConfig);
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301001
1002 List<String> methods = new ArrayList<>();
1003
1004 /**
1005 * Add attribute strings.
1006 */
1007 try {
1008 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301009 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
1010 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301011 .getTypeTempFiles(), path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301012 } catch (IOException e) {
1013 throw new IOException("No data found in temporary java code fragment files for " + className
1014 + " while union class file generation");
1015 }
1016
1017 /**
1018 * Default constructor.
1019 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301020 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +05301021 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301022
1023 try {
1024
1025 /**
1026 * Type constructor.
1027 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301028 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301029 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
1030 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301031
1032 /**
1033 * Of string method.
1034 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301035 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301036 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
1037 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301038
1039 /**
1040 * Getter method.
1041 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301042 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301043 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
1044 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301045
1046 /**
1047 * Hash code method.
1048 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301049 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301050 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
1051 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301052 .getTypeTempFiles(), path)
1053 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301054
1055 /**
1056 * Equals method.
1057 */
1058 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301059 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301060 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1061 .getTypeTempFiles(), path)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301062
1063 /**
1064 * To string method.
1065 */
1066 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301067 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
1068 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301069 .getTypeTempFiles(), path)
1070 + getToStringMethodClose());
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301071
1072 /**
1073 * From string method.
1074 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301075 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301076 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301077 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1078 .getTypeTempFiles(), path)
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301079 + getFromStringMethodClose());
1080
1081 } catch (IOException e) {
1082 throw new IOException("No data found in temporary java code fragment files for " + className
1083 + " while union class file generation");
1084 }
1085
1086 for (String method : methods) {
1087 insertDataIntoJavaFile(file, method);
1088 }
1089 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1090
Bharat saraswal33dfa012016-05-17 19:59:16 +05301091 return validateLineLength(file);
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301092 }
Bharat saraswald72411a2016-04-19 01:00:16 +05301093
1094 /**
1095 * Generates class file for type enum.
1096 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301097 * @param file generated file
Bharat saraswald72411a2016-04-19 01:00:16 +05301098 * @param curNode current YANG node
1099 * @return class file for type enum
1100 * @throws IOException when fails to generate class file
Gaurav Agrawal56527662016-04-20 15:49:17 +05301101 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301102 public static File generateEnumClassFile(File file, YangNode curNode)
1103 throws IOException {
Bharat saraswald72411a2016-04-19 01:00:16 +05301104
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301105 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +05301106 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswald72411a2016-04-19 01:00:16 +05301107
janani b4a6711a2016-05-17 13:12:22 +05301108 String className = javaFileInfo.getJavaName();
Bharat saraswald72411a2016-04-19 01:00:16 +05301109 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
1110
Bharat saraswal33dfa012016-05-17 19:59:16 +05301111 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path, pluginConfig);
Bharat saraswald72411a2016-04-19 01:00:16 +05301112 /**
1113 * Add attribute strings.
1114 */
1115 try {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301116 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswald72411a2016-04-19 01:00:16 +05301117 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301118 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGeninfo
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301119 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles(), path), COMMA), NEW_LINE)
Bharat saraswald72411a2016-04-19 01:00:16 +05301120 + SEMI_COLAN + NEW_LINE);
1121 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +05301122 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswald72411a2016-04-19 01:00:16 +05301123 + " while enum class file generation");
1124 }
1125
1126 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301127 * Add an
1128 * attribute to get the enum's values.
Bharat saraswald72411a2016-04-19 01:00:16 +05301129 */
janani b4a6711a2016-05-17 13:12:22 +05301130 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswald72411a2016-04-19 01:00:16 +05301131
1132 /**
1133 * Add a constructor for enum.
1134 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301135 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false, pluginConfig)
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301136 + getEnumsConstructor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +05301137
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301138 TempJavaEnumerationFragmentFiles enumFragFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1139 .getTempJavaCodeFragmentFiles()
1140 .getEnumerationTempFiles();
Bharat saraswalc0e04842016-05-12 13:16:57 +05301141 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
Bharat saraswal33dfa012016-05-17 19:59:16 +05301142 enumFragFiles.getJavaAttributeForEnum(pluginConfig),
Bharat saraswalc0e04842016-05-12 13:16:57 +05301143 enumFragFiles.getEnumSetJavaMap(),
Bharat saraswal33dfa012016-05-17 19:59:16 +05301144 enumFragFiles.getEnumStringList(), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +05301145 + NEW_LINE);
Bharat saraswald72411a2016-04-19 01:00:16 +05301146
1147 /**
1148 * Add a getter method for enum.
1149 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301150 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false, pluginConfig)
janani b4a6711a2016-05-17 13:12:22 +05301151 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +05301152
1153 try {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301154 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +05301155 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301156 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1157 .getEnumerationTempFiles(), path)
Bharat saraswalc0e04842016-05-12 13:16:57 +05301158 + getFromStringMethodClose());
1159 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +05301160 throw new IOException("No data found in temporary java code fragment files for " +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301161 getCapitalCase(className) + " while enum class file generation");
Bharat saraswalc0e04842016-05-12 13:16:57 +05301162 }
Bharat saraswald72411a2016-04-19 01:00:16 +05301163
1164 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1165
Bharat saraswal33dfa012016-05-17 19:59:16 +05301166 return validateLineLength(file);
Bharat saraswald72411a2016-04-19 01:00:16 +05301167 }
Gaurav Agrawal56527662016-04-20 15:49:17 +05301168
1169 /**
1170 * Generates interface file for rpc.
1171 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301172 * @param file generated file
1173 * @param curNode current YANG node
1174 * @param imports imports for file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301175 * @return rpc class file
Gaurav Agrawal56527662016-04-20 15:49:17 +05301176 * @throws IOException when fails to generate class file
1177 */
Bharat saraswalb551aae2016-07-14 15:18:20 +05301178 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301179 throws IOException {
Gaurav Agrawal56527662016-04-20 15:49:17 +05301180
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301181 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal56527662016-04-20 15:49:17 +05301182
Bharat saraswalb551aae2016-07-14 15:18:20 +05301183 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1184 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
janani b4a6711a2016-05-17 13:12:22 +05301185 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301186 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301187 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
Gaurav Agrawal56527662016-04-20 15:49:17 +05301188
1189 List<String> methods = new ArrayList<>();
Bharat saraswalb551aae2016-07-14 15:18:20 +05301190 JavaAttributeInfo rootAttribute = getCurNodeAsAttributeInTarget(curNode, curNode, false,
1191 tempJavaServiceFragmentFiles);
Gaurav Agrawal56527662016-04-20 15:49:17 +05301192
1193 try {
Bharat saraswalb551aae2016-07-14 15:18:20 +05301194 /**
1195 * Getter methods.
1196 */
1197 methods.add(getGetterString(rootAttribute, GENERATE_SERVICE_AND_MANAGER,
1198 javaFileInfo.getPluginConfig()) + NEW_LINE);
1199 /**
1200 * Setter methods.
1201 */
1202 methods.add(getSetterString(rootAttribute, className, GENERATE_SERVICE_AND_MANAGER,
1203 javaFileInfo.getPluginConfig()) + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301204
Bharat saraswalb551aae2016-07-14 15:18:20 +05301205 methods.add(getAugmentsDataMethodForService(curNode) + NEW_LINE);
1206
Bharat saraswalc0e04842016-05-12 13:16:57 +05301207 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
1208 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
1209 /**
1210 * Rpc methods
1211 */
1212 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301213 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
Bharat saraswalc0e04842016-05-12 13:16:57 +05301214 }
Gaurav Agrawal56527662016-04-20 15:49:17 +05301215 } catch (IOException e) {
1216 throw new IOException("No data found in temporary java code fragment files for " + className
1217 + " while rpc class file generation");
1218 }
1219
1220 for (String method : methods) {
1221 insertDataIntoJavaFile(file, method);
1222 }
1223 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1224
Bharat saraswal33dfa012016-05-17 19:59:16 +05301225 return validateLineLength(file);
Gaurav Agrawal56527662016-04-20 15:49:17 +05301226 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301227
1228 /**
1229 * Generates event file.
1230 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301231 * @param file generated file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301232 * @param curNode current YANG node
1233 * @param imports imports for file
1234 * @throws IOException when fails to generate class file
1235 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301236 public static void generateEventFile(File file, YangNode curNode, List<String> imports) throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301237
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301238 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1239 + EVENT_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301240
Bharat saraswald50c6382016-07-14 21:57:13 +05301241 TempJavaEventFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1242 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301243
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301244 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1245 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal33dfa012016-05-17 19:59:16 +05301246 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode, className);
1247 try {
1248 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301249 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK, tempFiles, path), COMMA)
Bharat saraswal33dfa012016-05-17 19:59:16 +05301250 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
1251
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301252 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_METHOD_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301253
1254 } catch (IOException e) {
1255 throw new IOException("No data found in temporary java code fragment files for " + className
1256 + " while event class file generation");
1257 }
1258
1259 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1260 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301261 }
1262
1263 /**
1264 * Generates event listener file.
1265 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301266 * @param file generated file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301267 * @param curNode current YANG node
1268 * @param imports imports for file
1269 * @throws IOException when fails to generate class file
1270 */
1271 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
1272 throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301273
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301274 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1275 + EVENT_LISTENER_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301276
Bharat saraswal33dfa012016-05-17 19:59:16 +05301277 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301278 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +05301279 validateLineLength(file);
1280 }
1281
1282 /**
1283 * Generates event subject's file.
1284 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301285 * @param file file handle
Bharat saraswal33dfa012016-05-17 19:59:16 +05301286 * @param curNode current YANG node
1287 * @throws IOException when fails to do IO exceptions
1288 */
1289 public static void generateEventSubjectFile(File file, YangNode curNode)
1290 throws IOException {
1291
1292 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1293 + EVENT_SUBJECT_NAME_SUFFIX;
1294
1295 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null, curNode, className);
1296
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301297 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1298 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswald50c6382016-07-14 21:57:13 +05301299
1300 TempJavaEventFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1301 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal33dfa012016-05-17 19:59:16 +05301302
1303 insertDataIntoJavaFile(file, NEW_LINE);
1304 try {
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301305 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301306
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301307 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301308
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301309 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301310
1311 } catch (IOException e) {
1312 throw new IOException("No data found in temporary java code fragment files for " + className
1313 + " while event class file generation");
1314 }
1315
1316 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1317 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301318 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +05301319}