blob: fa0ef199435e292bbcab06c663500386a6514fa3 [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;
Bharat saraswale707f032016-07-14 23:33:55 +053031import org.onosproject.yangutils.datamodel.YangSubModule;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +053032import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswald50c6382016-07-14 21:57:13 +053033import org.onosproject.yangutils.datamodel.YangTypeDef;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +053034import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswalb551aae2016-07-14 15:18:20 +053035import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053036import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S38046502016-03-23 15:30:27 +053037import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053038import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +053039import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053040import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswalc0e04842016-05-12 13:16:57 +053041import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswald50c6382016-07-14 21:57:13 +053042import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Bharat saraswal33dfa012016-05-17 19:59:16 +053043import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswale707f032016-07-14 23:33:55 +053044import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Bharat saraswald50c6382016-07-14 21:57:13 +053045import org.onosproject.yangutils.translator.tojava.YangJavaModelUtils;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053046import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Vinod Kumar S38046502016-03-23 15:30:27 +053047
48import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
49import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
52import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Vinod Kumar S38046502016-03-23 15:30:27 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
58import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_BUILDER_CLASS_MASK;
60import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_CLASS_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053066import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
68import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
69import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053071import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053072import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
73import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
74import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053075import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053076import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053077import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053078import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
79import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
80import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +053081import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
82import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedTypeInfoOfCurNode;
Bharat saraswalb551aae2016-07-14 15:18:20 +053083import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
84import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.addAugmentationAttribute;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053085import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
Bharat saraswalb551aae2016-07-14 15:18:20 +053086import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
87import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswale2d51d62016-03-23 19:40:35 +053088import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal33dfa012016-05-17 19:59:16 +053089import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.addActivateMethod;
90import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.addDeActivateMethod;
Bharat saraswalb551aae2016-07-14 15:18:20 +053091import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
92import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoImpl;
Bharat saraswald50c6382016-07-14 21:57:13 +053093import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoMapImpl;
Bharat saraswalb551aae2016-07-14 15:18:20 +053094import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForManager;
95import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
Bharat saraswald50c6382016-07-14 21:57:13 +053096import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBaseClassMethodImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053097import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053098import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
Bharat saraswalc0e04842016-05-12 13:16:57 +053099import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfMethod;
Vinod Kumar S38046502016-03-23 15:30:27 +0530100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
101import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswald72411a2016-04-19 01:00:16 +0530104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530105import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
Vinod Kumar S38046502016-03-23 15:30:27 +0530107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Bharat saraswald50c6382016-07-14 21:57:13 +0530109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getIsFilterContentMatch;
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOpParamConstructorStart;
112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOperationTypeSetter;
113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOperationTypegetter;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530114import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
115import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530116import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForLeaf;
117import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForLeafList;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530118import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530119import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringLeafListgetter;
120import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringLeafgetter;
Vinod Kumar S38046502016-03-23 15:30:27 +0530121import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
122import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530123import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringSelectLeafListgetter;
124import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringSelectLeafgetter;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530125import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswale707f032016-07-14 23:33:55 +0530126import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswald50c6382016-07-14 21:57:13 +0530127import static org.onosproject.yangutils.utils.UtilConstants.BITSET;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530128import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
129import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530130import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Bharat saraswald72411a2016-04-19 01:00:16 +0530131import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald50c6382016-07-14 21:57:13 +0530132import static org.onosproject.yangutils.utils.UtilConstants.CREATE;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530133import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswald50c6382016-07-14 21:57:13 +0530134import static org.onosproject.yangutils.utils.UtilConstants.DELETE;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530135import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530136import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswald50c6382016-07-14 21:57:13 +0530137import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
138import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
139import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530140import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
141import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530142import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswald50c6382016-07-14 21:57:13 +0530143import static org.onosproject.yangutils.utils.UtilConstants.FILTER_LEAF;
144import static org.onosproject.yangutils.utils.UtilConstants.FILTER_LEAF_LIST;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530145import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530146import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
Bharat saraswald50c6382016-07-14 21:57:13 +0530147import static org.onosproject.yangutils.utils.UtilConstants.GET_FILTER_LEAF;
148import static org.onosproject.yangutils.utils.UtilConstants.GET_FILTER_LEAF_LIST;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530149import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
Bharat saraswald72411a2016-04-19 01:00:16 +0530150import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswald50c6382016-07-14 21:57:13 +0530151import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_IMPORT_BASE64_CLASS;
152import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_PKG;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530153import static org.onosproject.yangutils.utils.UtilConstants.LOGGER_STATEMENT;
janani bdd1314f2016-05-19 17:39:50 +0530154import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
Bharat saraswald50c6382016-07-14 21:57:13 +0530155import static org.onosproject.yangutils.utils.UtilConstants.MERGE;
156import static org.onosproject.yangutils.utils.UtilConstants.NEW;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530157import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530158import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
Bharat saraswald50c6382016-07-14 21:57:13 +0530159import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530160import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530161import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_ENUM;
162import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM_TYPE;
Bharat saraswald50c6382016-07-14 21:57:13 +0530163import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
164import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
165import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
166import static org.onosproject.yangutils.utils.UtilConstants.REMOVE;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530167import static org.onosproject.yangutils.utils.UtilConstants.REPLACE;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530168import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Bharat saraswald50c6382016-07-14 21:57:13 +0530169import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF;
170import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF_LIST;
171import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
172import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
173import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
174import static org.onosproject.yangutils.utils.UtilConstants.STATIC;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530175import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Bharat saraswald50c6382016-07-14 21:57:13 +0530176import static org.onosproject.yangutils.utils.UtilConstants.SUPER;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530177import static org.onosproject.yangutils.utils.UtilConstants.TO;
Bharat saraswald72411a2016-04-19 01:00:16 +0530178import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
179import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530180import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530181import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530182import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswald72411a2016-04-19 01:00:16 +0530183import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530184import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Bharat saraswale707f032016-07-14 23:33:55 +0530185import static java.util.Collections.sort;
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530186
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530187/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530188 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530189 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530190public final class JavaFileGenerator {
191
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530192 private JavaFileGenerator() {
193 }
194
195 /**
196 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530197 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530198 * @param file file
199 * @param imports imports for the file
200 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530201 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530202 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530203 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530204 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530205 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530206 boolean isAttrPresent)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530207 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530208
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530209 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswald50c6382016-07-14 21:57:13 +0530210
211 String path;
Bharat saraswale707f032016-07-14 23:33:55 +0530212 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530213 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
214 } else {
215 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
216 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530217
janani b4a6711a2016-05-17 13:12:22 +0530218 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530219
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530220 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode, className);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530221
Bharat saraswal2f11f652016-03-25 18:19:46 +0530222 if (isAttrPresent) {
Bharat saraswale707f032016-07-14 23:33:55 +0530223 // Add getter methods to interface file.
Bharat saraswal2f11f652016-03-25 18:19:46 +0530224 try {
Bharat saraswale707f032016-07-14 23:33:55 +0530225 //Getter methods.
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;
Bharat saraswale707f032016-07-14 23:33:55 +0530254 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530255 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 {
Bharat saraswale707f032016-07-14 23:33:55 +0530264
265 //Getter methods.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530266 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
267 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530268 .getBeanTempFiles(), path));
Bharat saraswale707f032016-07-14 23:33:55 +0530269
270 //Setter methods.
Bharat saraswal2f11f652016-03-25 18:19:46 +0530271 methods.add(NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530272 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
273 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530274 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530275 } catch (IOException e) {
276 throw new IOException("No data found in temporary java code fragment files for " + className
277 + " while builder interface file generation");
278 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530279 }
Bharat saraswale707f032016-07-14 23:33:55 +0530280
281 //Add build method to builder interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530282 methods.add(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530283 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530284 .addBuildMethodForInterface(pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530285
Bharat saraswale707f032016-07-14 23:33:55 +0530286
287 //Add getters and setters in builder interface.
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530288 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530289 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530290 }
291
Bharat saraswale2d51d62016-03-23 19:40:35 +0530292 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530293 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530294 }
295
296 /**
297 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530298 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530299 * @param file file
300 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530301 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530302 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530303 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530304 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530305 public static File generateBuilderClassFile(File file, YangNode curNode,
306 boolean isAttrPresent) throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530307
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530308 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530309 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530310
janani b4a6711a2016-05-17 13:12:22 +0530311 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswald50c6382016-07-14 21:57:13 +0530312
313 String path;
Bharat saraswale707f032016-07-14 23:33:55 +0530314 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530315 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
316 } else {
317 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
318 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530319
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530320 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode, className);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530321 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530322
Bharat saraswal2f11f652016-03-25 18:19:46 +0530323 if (isAttrPresent) {
Bharat saraswale707f032016-07-14 23:33:55 +0530324
325 //Add attribute strings.
Bharat saraswal2f11f652016-03-25 18:19:46 +0530326 try {
327 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530328 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
329 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530330 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530331 } catch (IOException e) {
332 throw new IOException("No data found in temporary java code fragment files for " + className
333 + " while builder class file generation");
334 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530335
Bharat saraswal2f11f652016-03-25 18:19:46 +0530336 try {
Bharat saraswale707f032016-07-14 23:33:55 +0530337 //Getter methods.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530338 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
339 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530340 .getBeanTempFiles(), path));
Bharat saraswale707f032016-07-14 23:33:55 +0530341 // Setter methods.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530342 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
343 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530344 .getBeanTempFiles(), path));
345
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530346 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530347 } catch (IOException e) {
348 throw new IOException("No data found in temporary java code fragment files for " + className
349 + " while builder class file generation");
350 }
351 } else {
352 insertDataIntoJavaFile(file, NEW_LINE);
353 }
Bharat saraswale707f032016-07-14 23:33:55 +0530354
355 // Add default constructor and build method impl.
Bharat saraswalc0e04842016-05-12 13:16:57 +0530356 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
357 .addBuildMethodImpl());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530358 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530359 .addDefaultConstructor(PUBLIC, BUILDER, pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530360
Bharat saraswale707f032016-07-14 23:33:55 +0530361
362 //Add methods in builder class.
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530363 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530364 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530365 }
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530366 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530367 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530368 }
369
370 /**
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530371 * Returns generated op param builder class file for current node.
Bharat saraswald50c6382016-07-14 21:57:13 +0530372 *
373 * @param file file handle
374 * @param curNode current YANG node
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530375 * @param isAttrPresent if any attribute is present or not
376 * @return builder class file
377 * @throws IOException when fails to write in file
378 */
379 public static File generateOpParamBuilderClassFile(File file, YangNode curNode,
Bharat saraswald50c6382016-07-14 21:57:13 +0530380 boolean isAttrPresent) throws IOException {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530381
382 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
383 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
384
385 String className = getCapitalCase(javaFileInfo.getJavaName());
386
387 initiateJavaFileGeneration(file, OPERATION_BUILDER_CLASS_MASK, null, curNode, className);
388 List<String> methods = new ArrayList<>();
389
390 if (isAttrPresent) {
Bharat saraswale707f032016-07-14 23:33:55 +0530391 //Add attribute strings.
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530392 try {
393 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
394 OPERATION_ENUM + SPACE + OP_PARAM_TYPE + SEMI_COLAN + NEW_LINE);
395
396 } catch (IOException e) {
397 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530398 + " while impl class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530399 }
400
401 try {
402 if (curNode instanceof YangLeavesHolder) {
403 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
404 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
405 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
406
407 if (leaves != null && !leaves.isEmpty()) {
408 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
409 BITSET + SPACE + FILTER_LEAF + SPACE + EQUAL + SPACE +
410 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLAN
411 + NEW_LINE);
412
413 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
414 BITSET + SPACE + SELECT_LEAF + SPACE + EQUAL + SPACE +
415 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
416 + SEMI_COLAN + NEW_LINE);
417 }
418
419 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
420 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
421 BITSET + SPACE + FILTER_LEAF_LIST + SPACE + EQUAL + SPACE +
422 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
423 + SEMI_COLAN + NEW_LINE);
424
425 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
426 BITSET + SPACE + SELECT_LEAF_LIST + SPACE + EQUAL + SPACE +
427 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
428 + SEMI_COLAN + NEW_LINE);
429 }
430 }
431
432 } catch (IOException e) {
433 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530434 + " while impl class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530435 }
436
437 try {
Bharat saraswale707f032016-07-14 23:33:55 +0530438 // Setter methods.
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530439 methods.add(getSetterForLeaf(className, curNode, pluginConfig));
440 methods.add(getSetterForLeafList(className, curNode, pluginConfig));
441
442 if (curNode instanceof YangLeavesHolder) {
443 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
444 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
445 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
446
447 if (leaves != null && !leaves.isEmpty()) {
448 methods.add(getToStringLeafgetter());
449 methods.add(getToStringSelectLeafgetter());
450 }
451
452 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
453 methods.add(getToStringLeafListgetter());
454 methods.add(getToStringSelectLeafListgetter());
455 }
456 }
457
458 methods.add(getOperationTypegetter());
459 methods.add(getOperationTypeSetter());
460 insertDataIntoJavaFile(file, NEW_LINE);
461 } catch (IOException e) {
462 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530463 + " while builder class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530464 }
465 } else {
466 insertDataIntoJavaFile(file, NEW_LINE);
467 }
468
Bharat saraswale707f032016-07-14 23:33:55 +0530469 // Add methods in builder class.
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530470 for (String method : methods) {
471 insertDataIntoJavaFile(file, method);
472 }
473 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
474 return validateLineLength(file);
475 }
476
477
478 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530479 * Returns generated manager class file for current node.
480 *
Bharat saraswalb551aae2016-07-14 15:18:20 +0530481 * @param file file
482 * @param imports imports for the file
483 * @param curNode current YANG node
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530484 * @return builder class file
485 * @throws IOException when fails to write in file
486 */
Bharat saraswalb551aae2016-07-14 15:18:20 +0530487 public static File generateManagerClassFile(File file, List<String> imports, YangNode curNode)
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530488 throws IOException {
489
490 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
491
janani bdd1314f2016-05-19 17:39:50 +0530492 String className = getCapitalCase(javaFileInfo.getJavaName()) + MANAGER;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530493 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530494
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530495 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530496
497 List<String> methods = new ArrayList<>();
498
Bharat saraswal33dfa012016-05-17 19:59:16 +0530499 insertDataIntoJavaFile(file, LOGGER_STATEMENT);
500 methods.add(addActivateMethod());
501 methods.add(addDeActivateMethod());
502
Bharat saraswalb551aae2016-07-14 15:18:20 +0530503 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
504 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530505
Bharat saraswalb551aae2016-07-14 15:18:20 +0530506 JavaAttributeInfo rootAttribute = getCurNodeAsAttributeInTarget(curNode, curNode, false,
507 tempJavaServiceFragmentFiles);
508 try {
Bharat saraswale707f032016-07-14 23:33:55 +0530509 //Getter methods.
Bharat saraswalb551aae2016-07-14 15:18:20 +0530510 methods.add(getOverRideString() +
511 getGetterForClass(rootAttribute, GENERATE_SERVICE_AND_MANAGER) + NEW_LINE);
Bharat saraswale707f032016-07-14 23:33:55 +0530512 // Setter methods.
Bharat saraswalb551aae2016-07-14 15:18:20 +0530513 methods.add(getOverRideString() +
514 getSetterForClass(rootAttribute, className, GENERATE_SERVICE_AND_MANAGER)
515 + NEW_LINE);
516
517 methods.add(getAugmentsDataMethodForManager(curNode) + NEW_LINE);
518
Bharat saraswalc0e04842016-05-12 13:16:57 +0530519 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
Bharat saraswale707f032016-07-14 23:33:55 +0530520 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
521
522 //Rpc methods
Bharat saraswalc0e04842016-05-12 13:16:57 +0530523 methods.add(getDataFromTempFileHandle(RPC_IMPL_MASK,
Bharat saraswale707f032016-07-14 23:33:55 +0530524 javaGenInfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530525 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530526 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530527
528 } catch (IOException e) {
529 throw new IOException("No data found in temporary java code fragment files for " + className
530 + " while manager class file generation");
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530531 }
532
Bharat saraswale707f032016-07-14 23:33:55 +0530533 // Add methods in builder class.
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530534 for (String method : methods) {
535 insertDataIntoJavaFile(file, method);
536 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530537 return validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530538 }
539
540 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530541 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530542 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530543 * @param file file
544 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530545 * @param isAttrPresent if any attribute is present or not
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530546 * @param imports list of imports
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530547 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530548 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530549 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530550 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent, List<String> imports)
Vinod Kumar S38046502016-03-23 15:30:27 +0530551 throws IOException {
552
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530553 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530554 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530555
janani b4a6711a2016-05-17 13:12:22 +0530556 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswald50c6382016-07-14 21:57:13 +0530557 String path;
Bharat saraswale707f032016-07-14 23:33:55 +0530558 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530559 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
560 } else {
561 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
562 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530563
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530564 initiateJavaFileGeneration(file, IMPL_CLASS_MASK, imports, curNode, className);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530565
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530566 List<String> methods = new ArrayList<>();
Bharat saraswalb551aae2016-07-14 15:18:20 +0530567 if (curNode instanceof YangAugmentableNode) {
568 insertDataIntoJavaFile(file, addAugmentationAttribute());
569 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530570 if (isAttrPresent) {
Bharat saraswale707f032016-07-14 23:33:55 +0530571
572 //Add attribute strings.
Bharat saraswal2f11f652016-03-25 18:19:46 +0530573 try {
574 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530575 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
576 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530577 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530578 } catch (IOException e) {
579 throw new IOException("No data found in temporary java code fragment files for " + className
580 + " while impl class file generation");
581 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530582
Bharat saraswal2f11f652016-03-25 18:19:46 +0530583 try {
Bharat saraswale707f032016-07-14 23:33:55 +0530584 //Getter methods.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530585 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
586 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530587 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530588
Bharat saraswale707f032016-07-14 23:33:55 +0530589
590 // Hash code method.
Bharat saraswal33dfa012016-05-17 19:59:16 +0530591 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530592 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
593 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530594 .getBeanTempFiles(), path).replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswale707f032016-07-14 23:33:55 +0530595
596 //Equals method.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530597 methods.add(getEqualsMethodClose(getEqualsMethodOpen(getCapitalCase(DEFAULT) + className)
598 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
599 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
600 .getBeanTempFiles(), path)));
Bharat saraswale707f032016-07-14 23:33:55 +0530601
602 // To string method.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530603 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
604 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530605 .getBeanTempFiles(), path)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530606 + getToStringMethodClose());
607
608 } catch (IOException e) {
609 throw new IOException("No data found in temporary java code fragment files for " + className
610 + " while impl class file generation");
611 }
612 } else {
613 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530614 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530615 try {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530616
Bharat saraswale707f032016-07-14 23:33:55 +0530617 //Constructor.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530618 String constructor = getConstructorStart(className, pluginConfig);
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530619 constructor = constructor + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
620 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
621 .getBeanTempFiles(), path);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530622
623 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530624 } catch (IOException e) {
625 throw new IOException("No data found in temporary java code fragment files for " + className
626 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530627 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530628
Bharat saraswalb551aae2016-07-14 15:18:20 +0530629 if (curNode instanceof YangAugmentableNode) {
630 methods.add(getAddAugmentInfoMethodImpl());
631 methods.add(getAugmentInfoImpl());
Bharat saraswald50c6382016-07-14 21:57:13 +0530632 methods.add(getAugmentInfoMapImpl(javaFileInfo.getPluginConfig()));
Bharat saraswalb551aae2016-07-14 15:18:20 +0530633 }
634
Bharat saraswale707f032016-07-14 23:33:55 +0530635 // Add methods in impl class.
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530636 for (String method : methods) {
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530637 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530638 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530639
Bharat saraswal33dfa012016-05-17 19:59:16 +0530640 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530641 }
642
643 /**
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530644 * Returns generated op param class file for current node.
645 *
Bharat saraswald50c6382016-07-14 21:57:13 +0530646 * @param file file handle
647 * @param curNode current YANG node
648 * @param isAttrPresent if any attribute is present or not
649 * @param imports import list
650 * @return returns generated op param class file for current node
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530651 * @throws IOException when fails to write in file
652 */
653 public static File generateOpParamImplClassFile(File file, YangNode curNode,
654 boolean isAttrPresent, List<String> imports)
655 throws IOException {
656
657 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
658 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
659
660 String className = getCapitalCase(javaFileInfo.getJavaName());
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530661
662 initiateJavaFileGeneration(file, OPERATION_CLASS_MASK, imports, curNode, className);
663
664 List<String> methods = new ArrayList<>();
665
666 if (isAttrPresent) {
Bharat saraswale707f032016-07-14 23:33:55 +0530667
668 // Add attribute strings.
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530669 try {
670 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PUBLIC + SPACE + STATIC +
671 SPACE + ENUM + SPACE + OPERATION_ENUM + SPACE + OPEN_CURLY_BRACKET +
672 NEW_LINE + EIGHT_SPACE_INDENTATION + MERGE +
673 NEW_LINE + EIGHT_SPACE_INDENTATION + REPLACE +
674 NEW_LINE + EIGHT_SPACE_INDENTATION + CREATE +
675 NEW_LINE + EIGHT_SPACE_INDENTATION + DELETE +
676 NEW_LINE + EIGHT_SPACE_INDENTATION + REMOVE +
677 NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
678
679 } catch (IOException e) {
680 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530681 + " while impl class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530682 }
683
Bharat saraswale707f032016-07-14 23:33:55 +0530684
685 // Add attribute strings.
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530686 try {
687 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
688 OPERATION_ENUM + SPACE + OP_PARAM_TYPE + SEMI_COLAN + NEW_LINE);
689
690 } catch (IOException e) {
691 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530692 + " while impl class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530693 }
694
695 try {
696 if (curNode instanceof YangLeavesHolder) {
697 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
698 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
699 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
700
701 if (leaves != null && !leaves.isEmpty()) {
702 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
703 BITSET + SPACE + FILTER_LEAF + SPACE + EQUAL + SPACE +
704 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
705 + SEMI_COLAN + NEW_LINE);
706
707 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
708 BITSET + SPACE + SELECT_LEAF + SPACE + EQUAL + SPACE +
709 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
710 + SEMI_COLAN + NEW_LINE);
711 }
712
713 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
714 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
715 BITSET + SPACE + FILTER_LEAF_LIST + SPACE + EQUAL + SPACE +
716 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
717 + SEMI_COLAN + NEW_LINE);
718
719 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
720 BITSET + SPACE + SELECT_LEAF_LIST + SPACE + EQUAL + SPACE +
721 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
722 + SEMI_COLAN + NEW_LINE);
723 }
724 }
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 if (curNode instanceof YangLeavesHolder) {
732 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
733 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
734 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
735
736 if (leaves != null && !leaves.isEmpty()) {
737 methods.add(getToStringLeafgetter());
738 methods.add(getToStringSelectLeafgetter());
739 }
740
741 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
742 methods.add(getToStringLeafListgetter());
743 methods.add(getToStringSelectLeafListgetter());
744 }
745 }
746
747 methods.add(getOperationTypegetter());
Bharat saraswald50c6382016-07-14 21:57:13 +0530748 methods.add(getIsFilterContentMatch(className, curNode, pluginConfig));
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530749
750 } else {
751 insertDataIntoJavaFile(file, NEW_LINE);
752 }
753 String constructor = getOpParamConstructorStart(className, pluginConfig);
754
755 constructor = constructor + EIGHT_SPACE_INDENTATION + SUPER + OPEN_PARENTHESIS
756 + BUILDER.toLowerCase() + OBJECT
757 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
758
759 if (curNode instanceof YangLeavesHolder) {
760 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
761 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
762 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
763 String filterLeaf = "";
764 String filterLeafList = "";
765
766 if (leaves != null && !leaves.isEmpty()) {
767 filterLeaf = EIGHT_SPACE_INDENTATION + FILTER_LEAF + SPACE + EQUAL + SPACE
768 + BUILDER.toLowerCase() + OBJECT + PERIOD + GET_FILTER_LEAF + OPEN_PARENTHESIS
769 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
770 }
771
772 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
773 filterLeafList = EIGHT_SPACE_INDENTATION + FILTER_LEAF_LIST + SPACE + EQUAL + SPACE
774 + BUILDER.toLowerCase() + OBJECT + PERIOD + GET_FILTER_LEAF_LIST + OPEN_PARENTHESIS
775 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
776 }
777
778 constructor = constructor + filterLeaf + filterLeafList;
779 }
780
781 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
782
Bharat saraswald50c6382016-07-14 21:57:13 +0530783 if (curNode instanceof YangAugment) {
784 String clsName = getCapitalCase(DEFAULT) +
785 getCapitalCase(YangJavaModelUtils.getAugmentClassName((YangAugment) curNode, pluginConfig));
786 methods.add(getBaseClassMethodImpl(clsName));
787 }
788
Bharat saraswale707f032016-07-14 23:33:55 +0530789 // Add methods in impl class.
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530790 for (String method : methods) {
791 insertDataIntoJavaFile(file, method);
792 }
793
794
795 return validateLineLength(file);
796 }
797
798 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530799 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530800 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530801 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530802 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530803 * @param imports imports for file
804 * @return type def class file
805 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530806 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530807 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
808 throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530809
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530810 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530811 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530812
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530813 // import
janani b4a6711a2016-05-17 13:12:22 +0530814 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530815 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530816 YangTypeDef typeDef = (YangTypeDef) curNode;
817 List<YangType<?>> types = typeDef.getTypeList();
818 YangType type = types.get(0);
819 if (type.getDataType().equals(YangDataTypes.BINARY)) {
820 imports.add(IMPORT + JAVA_UTIL_OBJECTS_IMPORT_PKG + PERIOD + JAVA_UTIL_IMPORT_BASE64_CLASS);
821 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530822
Bharat saraswal33dfa012016-05-17 19:59:16 +0530823 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path, pluginConfig);
Vinod Kumar S38046502016-03-23 15:30:27 +0530824
Bharat saraswale2d51d62016-03-23 19:40:35 +0530825 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530826
Bharat saraswale707f032016-07-14 23:33:55 +0530827
828 //Add attribute strings.
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530829 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530830 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530831 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
832 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530833 .getTypeTempFiles(), path));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530834 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530835 throw new IOException("No data found in temporary java code fragment files for " + className
836 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530837 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530838
Bharat saraswale707f032016-07-14 23:33:55 +0530839
840 //Default constructor.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530841 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530842 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Vinod Kumar S38046502016-03-23 15:30:27 +0530843
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530844 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530845
Bharat saraswale707f032016-07-14 23:33:55 +0530846
847 //Type constructor.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530848 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530849 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
850 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530851
Bharat saraswale707f032016-07-14 23:33:55 +0530852
853 //Of method.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530854 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530855 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
856 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530857
Bharat saraswale707f032016-07-14 23:33:55 +0530858 //Getter methods.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530859 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530860 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
861 path));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530862
Bharat saraswale707f032016-07-14 23:33:55 +0530863
864 // Hash code method.
Bharat saraswal33dfa012016-05-17 19:59:16 +0530865 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530866 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
867 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530868 .getTypeTempFiles(), path)
869 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530870
Bharat saraswale707f032016-07-14 23:33:55 +0530871
872 //Equals method.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530873 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530874 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530875 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
876 .getTypeTempFiles(), path)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530877
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530878
Bharat saraswale707f032016-07-14 23:33:55 +0530879 //To string method.
880 if (type.getDataType().equals(YangDataTypes.BINARY)) {
881 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
882 getCapitalCase("binary"));
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530883
Bharat saraswale707f032016-07-14 23:33:55 +0530884 JavaAttributeInfo attr = getAttributeInfoForTheData(qualifiedTypeInfo, "binary", null, false,
885 false);
886 String attributeName = attr.getAttributeName();
887 String bitsToStringMethod = MethodsGenerator.getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC
888 + SPACE + STRING_DATA_TYPE + SPACE + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
889 + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
890 + RETURN + SPACE + BASE64 + PERIOD + GET_ENCODER + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
891 + PERIOD + ENCODE_TO_STRING + OPEN_PARENTHESIS + attributeName + CLOSE_PARENTHESIS
892 + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
893 methods.add(bitsToStringMethod);
894 } else if (type.getDataType().equals(YangDataTypes.BITS)) {
895 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
896 getCapitalCase("bits"));
897
898 JavaAttributeInfo attr = getAttributeInfoForTheData(qualifiedTypeInfo, "bits", null, false, false);
899 String attributeName = attr.getAttributeName();
900 String bitsToStringMethod = MethodsGenerator.getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC
901 + SPACE + STRING_DATA_TYPE + SPACE + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
902 + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
903 + RETURN + SPACE + attributeName + PERIOD + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
904 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET
905 + NEW_LINE;
906 methods.add(bitsToStringMethod);
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530907 } else {
908 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
Bharat saraswale707f032016-07-14 23:33:55 +0530909 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
910 .getTypeTempFiles(), path) + getToStringMethodClose());
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530911 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530912
Bharat saraswale707f032016-07-14 23:33:55 +0530913 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
914
915 //From string method.
Bharat saraswal33dfa012016-05-17 19:59:16 +0530916 methods.add(getFromStringMethodSignature(className, pluginConfig)
Bharat saraswale707f032016-07-14 23:33:55 +0530917 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGenInfo.getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530918 .getTypeTempFiles(), path)
919 + getFromStringMethodClose());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530920
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530921 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530922 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530923 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530924 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530925
Bharat saraswale2d51d62016-03-23 19:40:35 +0530926 for (String method : methods) {
927 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530928 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530929 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530930
Bharat saraswal33dfa012016-05-17 19:59:16 +0530931 return validateLineLength(file);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530932 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530933
934 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530935 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530936 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530937 * @param file generated file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530938 * @param curNode current YANG node
939 * @param imports imports for file
940 * @return type def class file
941 * @throws IOException when fails to generate class file
942 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530943 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
944 throws IOException {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530945
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530946 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530947 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530948
janani b4a6711a2016-05-17 13:12:22 +0530949 String className = getCapitalCase(javaFileInfo.getJavaName());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530950 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
951
Bharat saraswale707f032016-07-14 23:33:55 +0530952 TempJavaTypeFragmentFiles tempJavaTypeFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
953 .getTempJavaCodeFragmentFiles().getTypeTempFiles();
954
955 boolean isIntConflict = false;
956 boolean isLongConflict = false;
957 JavaAttributeInfo intAttr = tempJavaTypeFragmentFiles.getIntAttribute();
958 if (intAttr == null) {
959 intAttr = tempJavaTypeFragmentFiles.getUIntAttribute();
960 }
961
962 JavaAttributeInfo longAttr = tempJavaTypeFragmentFiles.getLongAttribute();
963 if (longAttr == null) {
964 longAttr = tempJavaTypeFragmentFiles.getULongAttribute();
965 }
966
967 if (intAttr != null) {
968 isIntConflict = intAttr.isIntConflict();
969 }
970 if (longAttr != null) {
971 isLongConflict = longAttr.isLongConflict();
972 }
973
974 if (isLongConflict) {
975 imports.add(tempJavaTypeFragmentFiles.getJavaImportData().getBigIntegerImport());
976 sort(imports);
977 }
978
Bharat saraswal33dfa012016-05-17 19:59:16 +0530979 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path, pluginConfig);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530980
981 List<String> methods = new ArrayList<>();
982
Bharat saraswale707f032016-07-14 23:33:55 +0530983
984 // Add attribute strings.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530985 try {
Bharat saraswale707f032016-07-14 23:33:55 +0530986 if (isIntConflict) {
987 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addStaticAttributeIntRange(PRIVATE,
988 tempJavaTypeFragmentFiles.getIntIndex() < tempJavaTypeFragmentFiles.getUIntIndex()));
989 }
990
991 if (isLongConflict) {
992 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addStaticAttributeLongRange(PRIVATE,
993 tempJavaTypeFragmentFiles.getLongIndex() < tempJavaTypeFragmentFiles.getULongIndex()));
994 }
995
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530996 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530997 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
998 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530999 .getTypeTempFiles(), path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301000 } catch (IOException e) {
1001 throw new IOException("No data found in temporary java code fragment files for " + className
1002 + " while union class file generation");
1003 }
1004
Bharat saraswale707f032016-07-14 23:33:55 +05301005
1006 //Default constructor.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301007 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +05301008 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301009
1010 try {
1011
Bharat saraswale707f032016-07-14 23:33:55 +05301012
1013 //Type constructor.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301014 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301015 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
1016 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301017
Bharat saraswale707f032016-07-14 23:33:55 +05301018
1019 // Of string method.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301020 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301021 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
1022 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301023
Bharat saraswale707f032016-07-14 23:33:55 +05301024 //Getter methods.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301025 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301026 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
1027 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301028
Bharat saraswale707f032016-07-14 23:33:55 +05301029
1030 //Hash code method.
Bharat saraswal33dfa012016-05-17 19:59:16 +05301031 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301032 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
1033 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301034 .getTypeTempFiles(), path)
1035 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301036
Bharat saraswale707f032016-07-14 23:33:55 +05301037 //Equals method.
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301038 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301039 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301040 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1041 .getTypeTempFiles(), path)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301042
Bharat saraswale707f032016-07-14 23:33:55 +05301043
1044 //To string method.
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301045 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301046 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
1047 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301048 .getTypeTempFiles(), path)
1049 + getToStringMethodClose());
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301050
Bharat saraswale707f032016-07-14 23:33:55 +05301051
1052 //From string method.
Bharat saraswal33dfa012016-05-17 19:59:16 +05301053 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301054 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301055 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1056 .getTypeTempFiles(), path)
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301057 + getFromStringMethodClose());
1058
Bharat saraswale707f032016-07-14 23:33:55 +05301059 if (isIntConflict) {
1060 methods.add(MethodsGenerator.getRangeValidatorMethodForUnion(INT));
1061 }
1062 if (isLongConflict) {
1063 methods.add(MethodsGenerator.getRangeValidatorMethodForUnion(BIG_INTEGER));
1064 }
1065
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301066 } catch (IOException e) {
1067 throw new IOException("No data found in temporary java code fragment files for " + className
1068 + " while union class file generation");
1069 }
1070
1071 for (String method : methods) {
1072 insertDataIntoJavaFile(file, method);
1073 }
1074 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1075
Bharat saraswal33dfa012016-05-17 19:59:16 +05301076 return validateLineLength(file);
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301077 }
Bharat saraswald72411a2016-04-19 01:00:16 +05301078
1079 /**
1080 * Generates class file for type enum.
1081 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301082 * @param file generated file
Bharat saraswald72411a2016-04-19 01:00:16 +05301083 * @param curNode current YANG node
1084 * @return class file for type enum
1085 * @throws IOException when fails to generate class file
Gaurav Agrawal56527662016-04-20 15:49:17 +05301086 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301087 public static File generateEnumClassFile(File file, YangNode curNode)
1088 throws IOException {
Bharat saraswald72411a2016-04-19 01:00:16 +05301089
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301090 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +05301091 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswald72411a2016-04-19 01:00:16 +05301092
janani b4a6711a2016-05-17 13:12:22 +05301093 String className = javaFileInfo.getJavaName();
Bharat saraswald72411a2016-04-19 01:00:16 +05301094 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
1095
Bharat saraswal33dfa012016-05-17 19:59:16 +05301096 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path, pluginConfig);
Bharat saraswale707f032016-07-14 23:33:55 +05301097
1098 //Add attribute strings.
Bharat saraswald72411a2016-04-19 01:00:16 +05301099 try {
Bharat saraswale707f032016-07-14 23:33:55 +05301100 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswald72411a2016-04-19 01:00:16 +05301101 insertDataIntoJavaFile(file,
Bharat saraswale707f032016-07-14 23:33:55 +05301102 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGenInfo
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301103 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles(), path), COMMA), NEW_LINE)
Bharat saraswald72411a2016-04-19 01:00:16 +05301104 + SEMI_COLAN + NEW_LINE);
1105 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +05301106 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswald72411a2016-04-19 01:00:16 +05301107 + " while enum class file generation");
1108 }
1109
Bharat saraswale707f032016-07-14 23:33:55 +05301110
1111 // Add an attribute to get the enum's values.
janani b4a6711a2016-05-17 13:12:22 +05301112 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswald72411a2016-04-19 01:00:16 +05301113
Bharat saraswale707f032016-07-14 23:33:55 +05301114 // Add a constructor for enum.
Bharat saraswal33dfa012016-05-17 19:59:16 +05301115 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false, pluginConfig)
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301116 + getEnumsConstructor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +05301117
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301118 TempJavaEnumerationFragmentFiles enumFragFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1119 .getTempJavaCodeFragmentFiles()
1120 .getEnumerationTempFiles();
Bharat saraswalc0e04842016-05-12 13:16:57 +05301121 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
Bharat saraswal33dfa012016-05-17 19:59:16 +05301122 enumFragFiles.getJavaAttributeForEnum(pluginConfig),
Bharat saraswalc0e04842016-05-12 13:16:57 +05301123 enumFragFiles.getEnumSetJavaMap(),
Bharat saraswal33dfa012016-05-17 19:59:16 +05301124 enumFragFiles.getEnumStringList(), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +05301125 + NEW_LINE);
Bharat saraswald72411a2016-04-19 01:00:16 +05301126
Bharat saraswale707f032016-07-14 23:33:55 +05301127 // Add a getter method for enum.
Bharat saraswal33dfa012016-05-17 19:59:16 +05301128 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false, pluginConfig)
janani b4a6711a2016-05-17 13:12:22 +05301129 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +05301130
1131 try {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301132 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +05301133 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301134 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1135 .getEnumerationTempFiles(), path)
Bharat saraswalc0e04842016-05-12 13:16:57 +05301136 + getFromStringMethodClose());
1137 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +05301138 throw new IOException("No data found in temporary java code fragment files for " +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301139 getCapitalCase(className) + " while enum class file generation");
Bharat saraswalc0e04842016-05-12 13:16:57 +05301140 }
Bharat saraswald72411a2016-04-19 01:00:16 +05301141
1142 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1143
Bharat saraswal33dfa012016-05-17 19:59:16 +05301144 return validateLineLength(file);
Bharat saraswald72411a2016-04-19 01:00:16 +05301145 }
Gaurav Agrawal56527662016-04-20 15:49:17 +05301146
1147 /**
1148 * Generates interface file for rpc.
1149 *
Bharat saraswale707f032016-07-14 23:33:55 +05301150 * @param file generated file
1151 * @param curNode current YANG node
1152 * @param imports imports for file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301153 * @return rpc class file
Gaurav Agrawal56527662016-04-20 15:49:17 +05301154 * @throws IOException when fails to generate class file
1155 */
Bharat saraswalb551aae2016-07-14 15:18:20 +05301156 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301157 throws IOException {
Gaurav Agrawal56527662016-04-20 15:49:17 +05301158
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301159 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal56527662016-04-20 15:49:17 +05301160
Bharat saraswalb551aae2016-07-14 15:18:20 +05301161 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1162 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
janani b4a6711a2016-05-17 13:12:22 +05301163 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301164 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301165 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
Gaurav Agrawal56527662016-04-20 15:49:17 +05301166
1167 List<String> methods = new ArrayList<>();
Bharat saraswalb551aae2016-07-14 15:18:20 +05301168 JavaAttributeInfo rootAttribute = getCurNodeAsAttributeInTarget(curNode, curNode, false,
1169 tempJavaServiceFragmentFiles);
Gaurav Agrawal56527662016-04-20 15:49:17 +05301170
1171 try {
Bharat saraswale707f032016-07-14 23:33:55 +05301172
1173 //Getter methods.
Bharat saraswalb551aae2016-07-14 15:18:20 +05301174 methods.add(getGetterString(rootAttribute, GENERATE_SERVICE_AND_MANAGER,
1175 javaFileInfo.getPluginConfig()) + NEW_LINE);
Bharat saraswale707f032016-07-14 23:33:55 +05301176 // Setter methods.
Bharat saraswalb551aae2016-07-14 15:18:20 +05301177 methods.add(getSetterString(rootAttribute, className, GENERATE_SERVICE_AND_MANAGER,
1178 javaFileInfo.getPluginConfig()) + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301179
Bharat saraswalb551aae2016-07-14 15:18:20 +05301180 methods.add(getAugmentsDataMethodForService(curNode) + NEW_LINE);
1181
Bharat saraswalc0e04842016-05-12 13:16:57 +05301182 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
Bharat saraswale707f032016-07-14 23:33:55 +05301183 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
1184
1185 // Rpc methods
Bharat saraswalc0e04842016-05-12 13:16:57 +05301186 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
Bharat saraswale707f032016-07-14 23:33:55 +05301187 javaGenInfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
Bharat saraswalc0e04842016-05-12 13:16:57 +05301188 }
Gaurav Agrawal56527662016-04-20 15:49:17 +05301189 } catch (IOException e) {
1190 throw new IOException("No data found in temporary java code fragment files for " + className
1191 + " while rpc class file generation");
1192 }
1193
1194 for (String method : methods) {
1195 insertDataIntoJavaFile(file, method);
1196 }
1197 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1198
Bharat saraswal33dfa012016-05-17 19:59:16 +05301199 return validateLineLength(file);
Gaurav Agrawal56527662016-04-20 15:49:17 +05301200 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301201
1202 /**
1203 * Generates event file.
1204 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301205 * @param file generated file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301206 * @param curNode current YANG node
1207 * @param imports imports for file
1208 * @throws IOException when fails to generate class file
1209 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301210 public static void generateEventFile(File file, YangNode curNode, List<String> imports) throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301211
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301212 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1213 + EVENT_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301214
Bharat saraswald50c6382016-07-14 21:57:13 +05301215 TempJavaEventFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1216 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301217
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301218 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1219 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal33dfa012016-05-17 19:59:16 +05301220 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode, className);
1221 try {
1222 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301223 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK, tempFiles, path), COMMA)
Bharat saraswal33dfa012016-05-17 19:59:16 +05301224 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
1225
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301226 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_METHOD_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301227
1228 } catch (IOException e) {
1229 throw new IOException("No data found in temporary java code fragment files for " + className
1230 + " while event class file generation");
1231 }
1232
1233 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1234 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301235 }
1236
1237 /**
1238 * Generates event listener file.
1239 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301240 * @param file generated file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301241 * @param curNode current YANG node
1242 * @param imports imports for file
1243 * @throws IOException when fails to generate class file
1244 */
1245 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
1246 throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301247
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301248 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1249 + EVENT_LISTENER_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301250
Bharat saraswal33dfa012016-05-17 19:59:16 +05301251 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301252 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +05301253 validateLineLength(file);
1254 }
1255
1256 /**
1257 * Generates event subject's file.
1258 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301259 * @param file file handle
Bharat saraswal33dfa012016-05-17 19:59:16 +05301260 * @param curNode current YANG node
1261 * @throws IOException when fails to do IO exceptions
1262 */
1263 public static void generateEventSubjectFile(File file, YangNode curNode)
1264 throws IOException {
1265
1266 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1267 + EVENT_SUBJECT_NAME_SUFFIX;
1268
1269 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null, curNode, className);
1270
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301271 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1272 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswald50c6382016-07-14 21:57:13 +05301273
1274 TempJavaEventFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1275 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal33dfa012016-05-17 19:59:16 +05301276
1277 insertDataIntoJavaFile(file, NEW_LINE);
1278 try {
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301279 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301280
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301281 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301282
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301283 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301284
1285 } catch (IOException e) {
1286 throw new IOException("No data found in temporary java code fragment files for " + className
1287 + " while event class file generation");
1288 }
1289
1290 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1291 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301292 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +05301293}