blob: c43e41df7d63c2ae2c10260eff07de476de583e7 [file] [log] [blame]
Bharat saraswal97459962016-02-20 21:57:16 +05301/*
Brian O'Connor0f7908b2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswal97459962016-02-20 21:57:16 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava.utils;
18
Bharat saraswal039f59c2016-07-14 21:57:13 +053019import org.onosproject.yangutils.datamodel.YangAtomicPath;
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +053020import org.onosproject.yangutils.datamodel.YangBit;
21import org.onosproject.yangutils.datamodel.YangBits;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053022import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053023import org.onosproject.yangutils.datamodel.YangEnum;
24import org.onosproject.yangutils.datamodel.YangEnumeration;
Bharat saraswalaf413b82016-07-14 15:18:20 +053025import org.onosproject.yangutils.datamodel.YangNode;
janani b0e4e8ae2016-07-13 21:06:41 +053026import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053027import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswal039f59c2016-07-14 21:57:13 +053028import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053029import org.onosproject.yangutils.utils.io.YangPluginConfig;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053030import org.onosproject.yangutils.utils.io.impl.JavaDocGen;
Bharat saraswal84366c52016-03-23 19:40:35 +053031
Bharat saraswal9fab16b2016-09-23 23:27:24 +053032import java.util.LinkedHashMap;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053033import java.util.List;
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +053034import java.util.Map;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053035
Bharat saraswal715d3fc2016-05-17 19:59:16 +053036import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053037import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053038import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET;
39import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET_WITH_VALUE;
40import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.EIGHT_SPACE;
41import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
42import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentMapTypeString;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053043import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getAugmentedClassNameForDataMethods;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053044import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getCurNodeName;
Bharat saraswal039f59c2016-07-14 21:57:13 +053045import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getSetOfNodeIdentifiers;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053046import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053047import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_ADD;
48import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_GETTER;
49import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_GET_VALUE;
50import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.GETTER;
51import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.MANAGER_METHODS;
52import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.SETTER;
53import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.TO_STRING;
54import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
55import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.INTERFACE_TYPE;
56import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.brackets;
57import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCompareToString;
58import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getGreaterThanCondition;
59import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIfConditionBegin;
60import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getLesserThanCondition;
61import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getNewInstance;
62import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
63import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnString;
64import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifAndAndCondition;
65import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifConditionForIntInTypeDefConstructor;
66import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifEqualEqualCondition;
67import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodBody;
68import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
69import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodSignature;
70import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodSignatureClose;
71import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.multiAttrMethodSignature;
72import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
Bharat saraswal64e7e232016-07-14 23:33:55 +053073import static org.onosproject.yangutils.utils.UtilConstants.ADD;
Bharat saraswal84366c52016-03-23 19:40:35 +053074import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
75import static org.onosproject.yangutils.utils.UtilConstants.AND;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053076import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST;
Bharat saraswalaf413b82016-07-14 15:18:20 +053077import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053078import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswald14cbe82016-07-14 13:26:18 +053079import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +053080import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
81import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
82import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053083import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_LOWER_CASE;
Bharat saraswal250a7472016-05-12 13:16:57 +053084import static org.onosproject.yangutils.utils.UtilConstants.CASE;
Bharat saraswalaf413b82016-07-14 15:18:20 +053085import static org.onosproject.yangutils.utils.UtilConstants.CLASS;
86import static org.onosproject.yangutils.utils.UtilConstants.CLASS_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +053087import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
88import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053089import static org.onosproject.yangutils.utils.UtilConstants.COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +053090import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053091import static org.onosproject.yangutils.utils.UtilConstants.DECODE;
Bharat saraswal250a7472016-05-12 13:16:57 +053092import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053093import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswal84366c52016-03-23 19:40:35 +053094import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswal64e7e232016-07-14 23:33:55 +053095import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +053096import static org.onosproject.yangutils.utils.UtilConstants.ELSE_IF;
97import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_PARAMETER_FUNCTION_CALL;
Bharat saraswal84366c52016-03-23 19:40:35 +053098import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswal8beac342016-08-04 02:00:03 +053099import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
Bharat saraswal84366c52016-03-23 19:40:35 +0530100import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
101import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
102import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530103import static org.onosproject.yangutils.utils.UtilConstants.FOR;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530104import static org.onosproject.yangutils.utils.UtilConstants.FOR_TYPE_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530105import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530106import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_METHOD_NAME;
107import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_PARAM_NAME;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530108import static org.onosproject.yangutils.utils.UtilConstants.GET;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530109import static org.onosproject.yangutils.utils.UtilConstants.GET_DECODER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530110import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD_PREFIX;
111import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_METHOD_STRING;
112import static org.onosproject.yangutils.utils.UtilConstants.HASH;
113import static org.onosproject.yangutils.utils.UtilConstants.HASH_CODE_STRING;
114import static org.onosproject.yangutils.utils.UtilConstants.IF;
Bharat saraswal84366c52016-03-23 19:40:35 +0530115import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE_OF;
116import static org.onosproject.yangutils.utils.UtilConstants.INT;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530117import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
Bharat saraswal8beac342016-08-04 02:00:03 +0530118import static org.onosproject.yangutils.utils.UtilConstants.IS_SELECT_LEAF;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530119import static org.onosproject.yangutils.utils.UtilConstants.LEAF;
Bharat saraswal8beac342016-08-04 02:00:03 +0530120import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530121import static org.onosproject.yangutils.utils.UtilConstants.LONG;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530122import static org.onosproject.yangutils.utils.UtilConstants.MAP;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530123import static org.onosproject.yangutils.utils.UtilConstants.MAX_RANGE;
124import static org.onosproject.yangutils.utils.UtilConstants.MIN_RANGE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530125import static org.onosproject.yangutils.utils.UtilConstants.NEW;
126import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530127import static org.onosproject.yangutils.utils.UtilConstants.NULL;
Bharat saraswal84366c52016-03-23 19:40:35 +0530128import static org.onosproject.yangutils.utils.UtilConstants.OBJ;
129import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
130import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
131import static org.onosproject.yangutils.utils.UtilConstants.OF;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530132import static org.onosproject.yangutils.utils.UtilConstants.ONE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530133import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
134import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530135import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal84366c52016-03-23 19:40:35 +0530136import static org.onosproject.yangutils.utils.UtilConstants.OTHER;
137import static org.onosproject.yangutils.utils.UtilConstants.OVERRIDE;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530138import static org.onosproject.yangutils.utils.UtilConstants.PARSE_INT;
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +0530139import static org.onosproject.yangutils.utils.UtilConstants.PATTERN;
Bharat saraswal84366c52016-03-23 19:40:35 +0530140import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530141import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530142import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
143import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal84366c52016-03-23 19:40:35 +0530144import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +0530145import static org.onosproject.yangutils.utils.UtilConstants.QUOTE_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530146import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530147import static org.onosproject.yangutils.utils.UtilConstants.REPLACE_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530148import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530149import static org.onosproject.yangutils.utils.UtilConstants.RPC_INPUT_VAR_NAME;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530150import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530151import static org.onosproject.yangutils.utils.UtilConstants.SELECT_ALL_CHILD;
152import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +0530153import static org.onosproject.yangutils.utils.UtilConstants.SET_METHOD_PREFIX;
Bharat saraswal8beac342016-08-04 02:00:03 +0530154import static org.onosproject.yangutils.utils.UtilConstants.SET_SELECT_LEAF;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530155import static org.onosproject.yangutils.utils.UtilConstants.SINGLE_QUOTE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530156import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
157import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530158import static org.onosproject.yangutils.utils.UtilConstants.SPLIT_STRING;
159import static org.onosproject.yangutils.utils.UtilConstants.SQUARE_BRACKETS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530160import static org.onosproject.yangutils.utils.UtilConstants.STATIC;
161import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
162import static org.onosproject.yangutils.utils.UtilConstants.SUFFIX_S;
Bharat saraswal250a7472016-05-12 13:16:57 +0530163import static org.onosproject.yangutils.utils.UtilConstants.SWITCH;
Bharat saraswal84366c52016-03-23 19:40:35 +0530164import static org.onosproject.yangutils.utils.UtilConstants.THIS;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530165import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
Bharat saraswal84366c52016-03-23 19:40:35 +0530166import static org.onosproject.yangutils.utils.UtilConstants.TO;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530167import static org.onosproject.yangutils.utils.UtilConstants.TO_CAPS;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530168import static org.onosproject.yangutils.utils.UtilConstants.TRIM_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530169import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
170import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +0530171import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_SPACE_INDENTATION;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530172import static org.onosproject.yangutils.utils.UtilConstants.VALIDATE_RANGE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530173import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
Bharat saraswal8beac342016-08-04 02:00:03 +0530174import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF_SET;
Bharat saraswal84366c52016-03-23 19:40:35 +0530175import static org.onosproject.yangutils.utils.UtilConstants.VOID;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530176import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530177import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_LOWER_CASE;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530178import static org.onosproject.yangutils.utils.UtilConstants.ZERO;
Bharat saraswal84366c52016-03-23 19:40:35 +0530179import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILD_METHOD;
180import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.CONSTRUCTOR;
181import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530182import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.FROM_METHOD;
Bharat saraswal84366c52016-03-23 19:40:35 +0530183import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530184import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530185import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.OF_METHOD;
Bharat saraswal84366c52016-03-23 19:40:35 +0530186import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530187import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530188import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForAddAugmentation;
Bharat saraswal8beac342016-08-04 02:00:03 +0530189import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForBuilderMethod;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530190import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForGetAugmentation;
Bharat saraswal8beac342016-08-04 02:00:03 +0530191import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForGetMethodWithAttribute;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530192import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForValidatorMethod;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530193import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530194import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
195import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
196import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
Bharat saraswal84366c52016-03-23 19:40:35 +0530197import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal97459962016-02-20 21:57:16 +0530198
199/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530200 * Represents generator for methods of generated files based on the file type.
Bharat saraswal97459962016-02-20 21:57:16 +0530201 */
202public final class MethodsGenerator {
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530203 private static final String BITS_STRING_ARRAY_VAR = "bitsTemp";
204 private static final String BIT_TEMP_VAR = "bitTemp";
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +0530205 private static final String BIT_NAMES_VAR = "bitNames";
206 private static final String BIT_NAME_VAR = "bitName";
Bharat saraswal97459962016-02-20 21:57:16 +0530207
Bharat saraswal97459962016-02-20 21:57:16 +0530208 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530209 * Creates an instance of method generator.
Bharat saraswal97459962016-02-20 21:57:16 +0530210 */
211 private MethodsGenerator() {
212 }
213
214 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530215 * Returns the methods strings for builder interface.
216 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530217 * @param name attribute name
Vinod Kumar S08710982016-03-03 19:55:30 +0530218 * @return method string for builder interface
Bharat saraswal97459962016-02-20 21:57:16 +0530219 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530220 public static String parseBuilderInterfaceBuildMethodString(String name) {
221 return getJavaDoc(BUILD_METHOD, name, false, null) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530222 getBuildForInterface(name);
Bharat saraswal97459962016-02-20 21:57:16 +0530223 }
224
225 /**
226 * Returns getter string.
227 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530228 * @param attr attribute info
229 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530230 * @return getter string
231 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530232 public static String getGetterString(JavaAttributeInfo attr, int genType) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530233
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530234 String returnType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530235 String attributeName = attr.getAttributeName();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530236 String appDataStructure = null;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530237 StringBuilder builder = new StringBuilder();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530238 if (attr.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530239 appDataStructure =
240 attr.getCompilerAnnotation().getYangAppDataStructure()
241 .getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530242 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530243 if (genType == GENERATE_SERVICE_AND_MANAGER) {
244 builder.append(generateForGetMethodWithAttribute(returnType))
245 .append(getGetterForInterface(
246 attributeName, returnType, attr.isListAttr(),
247 genType, attr.getCompilerAnnotation()));
248
249 return builder.toString();
Bharat saraswal8beac342016-08-04 02:00:03 +0530250 }
Vinod Kumar S08710982016-03-03 19:55:30 +0530251
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530252 builder.append(getJavaDoc(GETTER_METHOD, attributeName, attr
253 .isListAttr(), appDataStructure))
254 .append(getGetterForInterface(
255 attributeName, returnType, attr.isListAttr(),
256 genType, attr.getCompilerAnnotation()));
257
258 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530259 }
260
261 /**
262 * Returns setter string.
263 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530264 * @param attr attribute info
265 * @param className java class name
266 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530267 * @return setter string
268 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530269 public static String getSetterString(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530270 String className, int genType) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530271
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530272 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530273 String attributeName = attr.getAttributeName();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530274 JavaDocGen.JavaDocType type;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530275 StringBuilder builder = new StringBuilder();
276 if (genType == GENERATE_SERVICE_AND_MANAGER) {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530277 type = MANAGER_SETTER_METHOD;
278 } else {
279 type = SETTER_METHOD;
280 }
Bharat saraswal97459962016-02-20 21:57:16 +0530281
Vidyashree Ramab3670472016-08-06 15:49:56 +0530282 String appDataStructure = null;
283 if (attr.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530284 appDataStructure =
285 attr.getCompilerAnnotation().getYangAppDataStructure()
286 .getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530287 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530288 builder.append(getJavaDoc(type, attributeName, attr.isListAttr(),
289 appDataStructure))
290 .append(getSetterForInterface(attributeName, attrType, className,
291 attr.isListAttr(), genType,
292 attr.getCompilerAnnotation()));
293 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530294 }
295
296 /**
297 * Returns constructor method string.
298 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530299 * @param name class name
Bharat saraswal97459962016-02-20 21:57:16 +0530300 * @return constructor string
301 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530302 private static String getConstructorString(String name) {
303 return getJavaDoc(CONSTRUCTOR, name, false, null);
Bharat saraswal97459962016-02-20 21:57:16 +0530304 }
305
306 /**
307 * Returns default constructor method string.
308 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530309 * @param name class name
Bharat saraswal022dae92016-03-04 20:08:09 +0530310 * @param modifierType modifier type
Bharat saraswal97459962016-02-20 21:57:16 +0530311 * @return default constructor string
312 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530313 public static String getDefaultConstructorString(String name,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530314 String modifierType) {
315 return getJavaDoc(DEFAULT_CONSTRUCTOR, name, false, null)
Vidyashree Ramab3670472016-08-06 15:49:56 +0530316 + getDefaultConstructor(name, modifierType) + NEW_LINE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530317 }
318
319 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530320 * Returns build method string.
321 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530322 * @param name class name
323 * @param isRootNode if root node
Bharat saraswal97459962016-02-20 21:57:16 +0530324 * @return build string
325 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530326 public static String getBuildString(String name, boolean isRootNode) {
327 if (isRootNode) {
328 return NEW_LINE + getBuild(name, true);
329 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530330 return FOUR_SPACE_INDENTATION + OVERRIDE + NEW_LINE +
331 getBuild(name, false);
Bharat saraswal97459962016-02-20 21:57:16 +0530332 }
333
334 /**
335 * Returns the getter method strings for class file.
336 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530337 * @param attr attribute info
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530338 * @param generatedJavaFiles for the type of java file being generated
Vinod Kumar S08710982016-03-03 19:55:30 +0530339 * @return getter method for class
Bharat saraswal97459962016-02-20 21:57:16 +0530340 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530341 public static String getGetterForClass(JavaAttributeInfo attr,
342 int generatedJavaFiles) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530343
Bharat saraswal8beac342016-08-04 02:00:03 +0530344 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530345 String attributeName = attr.getAttributeName();
Bharat saraswal022dae92016-03-04 20:08:09 +0530346
347 if (!attr.isListAttr()) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530348 return getGetter(attrQualifiedType, attributeName,
349 generatedJavaFiles);
Bharat saraswal022dae92016-03-04 20:08:09 +0530350 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530351 String attrParam = StringGenerator.getListAttribute(attrQualifiedType,
352 attr.getCompilerAnnotation());
Vidyashree Ramab3670472016-08-06 15:49:56 +0530353 return getGetter(attrParam, attributeName, generatedJavaFiles);
Bharat saraswal022dae92016-03-04 20:08:09 +0530354 }
355
356 /**
357 * Returns getter for attribute.
358 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530359 * @param type return type
360 * @param name attribute name
361 * @param genType generated java files
Bharat saraswal022dae92016-03-04 20:08:09 +0530362 * @return getter for attribute
363 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530364 static String getGetter(String type, String name, int genType) {
365 StringBuilder builder = new StringBuilder();
366 if (genType == GENERATE_SERVICE_AND_MANAGER) {
367 //Append method signature.
368 builder.append(methodSignature(getCapitalCase(name), GET,
369 PUBLIC, null, type, null,
370 CLASS_TYPE))
371 //Append method body.
372 .append(methodBody(MANAGER_METHODS, null, null,
373 EIGHT_SPACE_INDENTATION, null,
374 type, false))
375 .append(signatureClose())
376 //Append method close.
377 .append(methodClose(FOUR_SPACE));
378 return builder.toString();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530379 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530380 builder.append(methodSignature(name, EMPTY_STRING,
381 PUBLIC, null, type, null,
382 CLASS_TYPE))
383 //Append method body.
384 .append(methodBody(GETTER, name, name,
385 EIGHT_SPACE_INDENTATION, null,
386 type, false))
387 .append(signatureClose())
388 //Append method close.
389 .append(methodClose(FOUR_SPACE));
390 return builder.toString();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530391 }
392
Bharat saraswal97459962016-02-20 21:57:16 +0530393 /**
394 * Returns the setter method strings for class file.
395 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530396 * @param attr attribute info
397 * @param className name of the class
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530398 * @param generatedJavaFiles generated java files
Vinod Kumar S08710982016-03-03 19:55:30 +0530399 * @return setter method for class
Bharat saraswal97459962016-02-20 21:57:16 +0530400 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530401 public static String getSetterForClass(JavaAttributeInfo attr,
402 String className,
403 int generatedJavaFiles) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530404 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530405 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530406 boolean isTypeNull = false;
407 if (attr.getAttributeType() == null) {
408 isTypeNull = true;
Bharat saraswal022dae92016-03-04 20:08:09 +0530409 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530410 if (!attr.isListAttr()) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530411 return getSetter(className, attributeName, attrQualifiedType,
412 generatedJavaFiles, isTypeNull, false);
Bharat saraswal8beac342016-08-04 02:00:03 +0530413 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530414 String attrParam = StringGenerator.getListAttribute(attrQualifiedType,
415 attr.getCompilerAnnotation());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530416 return getSetter(className, attributeName, attrParam,
417 generatedJavaFiles, isTypeNull, true);
Bharat saraswal022dae92016-03-04 20:08:09 +0530418 }
419
420 /**
421 * Returns setter for attribute.
422 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530423 * @param className class name
424 * @param name attribute name
425 * @param type return type
426 * @param isTypeNull if attribute type is null
427 * @param isList true if leaf-list
Bharat saraswal022dae92016-03-04 20:08:09 +0530428 * @return setter for attribute
429 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530430 private static String getSetter(String className, String name, String type,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530431 int genType,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530432 boolean isTypeNull, boolean isList) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530433 StringBuilder builder = new StringBuilder();
434 if (genType == GENERATE_SERVICE_AND_MANAGER) {
435 //Append method signature.
436 builder.append(methodSignature(getCapitalCase(name),
437 SET_METHOD_PREFIX,
438 PUBLIC, name, VOID, type,
439 CLASS_TYPE))
440 //Append method body.
441 .append(methodBody(MANAGER_METHODS, null, null,
442 EIGHT_SPACE_INDENTATION, null, null,
443 false))
444 .append(methodClose(FOUR_SPACE));
445 return builder.toString();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530446 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530447 if (genType == GENERATE_EVENT_SUBJECT_CLASS) {
448 builder.append(methodSignature(name, EMPTY_STRING, PUBLIC, name, VOID,
449 type, CLASS_TYPE))
Bharat saraswal8beac342016-08-04 02:00:03 +0530450
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530451 //Append method body.
452 .append(methodBody(SETTER, name, name,
453 EIGHT_SPACE_INDENTATION, null, null,
454 false))
455 .append(methodClose(FOUR_SPACE));
456 return builder.toString();
457 }
458 builder.append(methodSignature(name, EMPTY_STRING,
459 PUBLIC, name, getCapitalCase(className) +
460 BUILDER, type, CLASS_TYPE));
461 if (!isTypeNull && !isList) {
462 builder.append(StringGenerator.getValueLeafSetString(name));
463 } else {
464 builder.append(EMPTY_STRING);
465 }
466 //Append method body.
467 builder.append(methodBody(SETTER, name, name,
468 EIGHT_SPACE_INDENTATION, null, null,
469 true))
470 //Append method close.
471 .append(methodClose(FOUR_SPACE));
472 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530473 }
474
475 /**
Bharat saraswal022dae92016-03-04 20:08:09 +0530476 * Returns the setter method strings for class file.
477 *
478 * @param attr attribute info
479 * @return setter method for class
480 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530481 static String getSetterForTypeDefClass(JavaAttributeInfo attr) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530482
Bharat saraswal8beac342016-08-04 02:00:03 +0530483 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530484 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530485 return getTypeDefSetter(attrQualifiedType, attributeName);
Bharat saraswal022dae92016-03-04 20:08:09 +0530486 }
487
488 /**
489 * Returns type def's setter for attribute.
490 *
491 * @param type data type
492 * @param name attribute name
493 * @return setter for type def's attribute
494 */
495 private static String getTypeDefSetter(String type, String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530496 return methodSignature(getCapitalCase(name), SET_METHOD_PREFIX, PUBLIC,
497 name, VOID, type, CLASS_TYPE) +
498 methodBody(SETTER, name, name, EIGHT_SPACE_INDENTATION, null,
499 null, false) + methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530500 }
501
502 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530503 * Returns the getter method strings for interface file.
504 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530505 * @param yangName name of the attribute
506 * @param returnType return type of attribute
507 * @param isList is list attribute
508 * @param genType generated java files
509 * @param annotation compiler annotation
Vinod Kumar S08710982016-03-03 19:55:30 +0530510 * @return getter method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530511 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530512 static String getGetterForInterface(String yangName, String returnType,
513 boolean isList,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530514 int genType,
515 YangCompilerAnnotation annotation) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530516 if (!isList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530517 return getGetterInterfaceString(returnType, yangName,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530518 genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530519 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530520 String listAttr = StringGenerator.getListAttribute(returnType, annotation);
521 return getGetterInterfaceString(listAttr, yangName, genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530522 }
523
524 /**
525 * Returns getter for attribute in interface.
526 *
527 * @param returnType return type
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530528 * @param yangName attribute name
Bharat saraswal022dae92016-03-04 20:08:09 +0530529 * @return getter for interface
530 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530531 private static String getGetterInterfaceString(String returnType,
532 String yangName,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530533 int genType) {
534 switch (genType) {
535 case GENERATE_SERVICE_AND_MANAGER:
536 return getGetMethodWithArgument(returnType, yangName);
537 default:
538 return methodSignature(yangName, EMPTY_STRING, null,
539 null, returnType, null, INTERFACE_TYPE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530540 }
Bharat saraswal97459962016-02-20 21:57:16 +0530541 }
542
543 /**
544 * Returns the setter method strings for interface file.
545 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530546 * @param attrName name of the attribute
547 * @param attrType return type of attribute
548 * @param className name of the java class being generated
549 * @param isList is list attribute
550 * @param genType generated java files
551 * @param annotation compiler annotations
Vinod Kumar S08710982016-03-03 19:55:30 +0530552 * @return setter method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530553 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530554 static String getSetterForInterface(String attrName, String attrType,
555 String className,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530556 boolean isList, int genType,
557 YangCompilerAnnotation annotation) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530558 if (!isList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530559 return getSetterInterfaceString(className, attrName, attrType,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530560 genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530561 }
Vidyashree Ramab3670472016-08-06 15:49:56 +0530562
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530563 String listAttr = StringGenerator.getListAttribute(attrType, annotation);
564 return getSetterInterfaceString(className, attrName, listAttr, genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530565 }
566
567 /**
568 * Returns setter string for interface.
569 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530570 * @param name class name
571 * @param attrName attribute name
572 * @param attrType attribute type
Bharat saraswal022dae92016-03-04 20:08:09 +0530573 * @return setter string
574 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530575 private static String getSetterInterfaceString(String name,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530576 String attrName,
577 String attrType,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530578 int genType) {
579 if (genType == GENERATE_SERVICE_AND_MANAGER) {
580 return methodSignature(getCapitalCase(attrName),
581 SET_METHOD_PREFIX,
582 null, attrName, VOID, attrType +
583 OP_PARAM, INTERFACE_TYPE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530584 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530585 return methodSignature(attrName, EMPTY_STRING, null,
586 attrName, name + BUILDER, attrType, INTERFACE_TYPE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530587 }
588
589 /**
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530590 * Returns return type for attribute.
591 *
592 * @param attr attribute info
593 * @return return type
594 */
595 private static String getReturnType(JavaAttributeInfo attr) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530596 String returnType;
597 StringBuilder builder = new StringBuilder();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530598 if (attr.isQualifiedName() &&
599 attr.getImportInfo().getPkgInfo() != null) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530600 returnType = attr.getImportInfo().getPkgInfo() + PERIOD;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530601 builder.append(returnType);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530602 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530603 returnType = attr.getImportInfo().getClassInfo();
604 builder.append(returnType);
605 return builder.toString();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530606 }
607
608 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530609 * Returns the build method strings for interface file.
610 *
Vinod Kumar S08710982016-03-03 19:55:30 +0530611 * @param yangName name of the interface
612 * @return build method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530613 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530614 static String getBuildForInterface(String yangName) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530615 return methodSignature(BUILD, EMPTY_STRING, null, null,
616 yangName, null, INTERFACE_TYPE);
Bharat saraswal97459962016-02-20 21:57:16 +0530617 }
618
619 /**
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530620 * Returns constructor string for impl class.
621 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530622 * @param yangName class name
623 * @param isRootNode if root node
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530624 * @return constructor string
625 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530626 static String getConstructorStart(String yangName,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530627 boolean isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530628 StringBuilder builder = new StringBuilder(
629 getConstructorString(yangName));
Bharat saraswal8beac342016-08-04 02:00:03 +0530630
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530631 String name = getCapitalCase(yangName);
632 String returnType = DEFAULT_CAPS + name;
Bharat saraswal8beac342016-08-04 02:00:03 +0530633 if (isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530634 returnType = name + OP_PARAM;
Bharat saraswal8beac342016-08-04 02:00:03 +0530635 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530636 builder.append(methodSignature(
637 returnType, EMPTY_STRING, PROTECTED, BUILDER_LOWER_CASE + OBJECT,
638 null, name + BUILDER, CLASS_TYPE));
639 return builder.toString();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530640 }
641
642 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530643 * Returns the constructor strings for class file.
644 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530645 * @param attr attribute info
646 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530647 * @return constructor for class
648 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530649 public static String getConstructor(JavaAttributeInfo attr, int genType) {
650 String attrName = attr.getAttributeName();
651 String attrCaps = getCapitalCase(attrName);
652 switch (genType) {
653 case GENERATE_SERVICE_AND_MANAGER:
654 return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
655 attrCaps, EIGHT_SPACE_INDENTATION, GET, null,
656 false);
657 default:
658 return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
659 attrName, EIGHT_SPACE_INDENTATION, EMPTY_STRING,
660 null, false);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530661 }
Bharat saraswal97459962016-02-20 21:57:16 +0530662 }
663
664 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530665 * Returns the rpc strings for service interface.
666 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530667 * @param rpcName name of the rpc
668 * @param input name of input
669 * @param output name of output
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530670 * @return rpc method string
671 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530672 public static String getRpcServiceMethod(String rpcName, String input,
673 String output) {
674 String inputVal = EMPTY_STRING;
675 if (!input.equals(EMPTY_STRING)) {
676 inputVal = RPC_INPUT_VAR_NAME;
Bharat saraswal250a7472016-05-12 13:16:57 +0530677 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530678 return methodSignature(rpcName, EMPTY_STRING, null,
679 inputVal, output, input, INTERFACE_TYPE) +
680 NEW_LINE;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530681 }
682
683 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530684 * Returns the build method strings for class file.
685 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530686 * @param yangName class name
687 * @param isRootNode if root node
Vinod Kumar S08710982016-03-03 19:55:30 +0530688 * @return build method string for class
Bharat saraswal97459962016-02-20 21:57:16 +0530689 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530690 static String getBuild(String yangName, boolean isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530691 String type = DEFAULT_CAPS + yangName;
Bharat saraswal8beac342016-08-04 02:00:03 +0530692 if (isRootNode) {
693 type = yangName + OP_PARAM;
694 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530695 return methodSignature(BUILD, EMPTY_STRING, PUBLIC, null,
696 yangName, null,
697 CLASS_TYPE) +
698 methodBody(MethodBodyTypes.BUILD, type, BUILD,
699 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
700 null, false) +
701 methodClose(FOUR_SPACE);
Bharat saraswal97459962016-02-20 21:57:16 +0530702 }
703
704 /**
705 * Returns the Default constructor strings for class file.
706 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530707 * @param name name of the class
Bharat saraswal022dae92016-03-04 20:08:09 +0530708 * @param modifierType modifier type for default constructor
Bharat saraswal97459962016-02-20 21:57:16 +0530709 * @return Default constructor for class
710 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530711 private static String getDefaultConstructor(String name,
712 String modifierType) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530713 return methodSignature(name, EMPTY_STRING, modifierType, null,
714 null, null, CLASS_TYPE) +
715 methodClose(FOUR_SPACE);
Bharat saraswal97459962016-02-20 21:57:16 +0530716 }
717
Bharat saraswal022dae92016-03-04 20:08:09 +0530718 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530719 * Returns to string method's open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530720 *
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530721 * @return string method's open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530722 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530723 static String getToStringMethodOpen() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530724 String line;
725 StringBuilder builder = new StringBuilder(getOverRideString());
726 builder.append(methodSignature(TO + STRING_DATA_TYPE, EMPTY_STRING,
727 PUBLIC, null, STRING_DATA_TYPE, null,
728 CLASS_TYPE));
729 line = getReturnString(GOOGLE_MORE_OBJECT_METHOD_STRING,
730 EIGHT_SPACE_INDENTATION) + NEW_LINE;
731 builder.append(line);
732 return builder.toString();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530733 }
734
735 /**
736 * Returns to string method's close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530737 *
738 * @return to string method close string
739 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530740 static String getToStringMethodClose() {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530741 return TWELVE_SPACE_INDENTATION + PERIOD + TO + STRING_DATA_TYPE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530742 brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
743 methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530744 }
745
746 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530747 * Returns to string method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +0530748 *
749 * @param attr attribute info
750 * @return to string method
751 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530752 public static String getToStringMethod(JavaAttributeInfo attr) {
janani b703cfe42016-05-17 13:12:22 +0530753 String attributeName = attr.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530754 return methodBody(TO_STRING, attributeName, null,
755 TWELVE_SPACE_INDENTATION, null, null, false);
Bharat saraswal022dae92016-03-04 20:08:09 +0530756 }
757
758 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530759 * Returns from string method's open string.
760 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530761 * @param className name of the class
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530762 * @return from string method's open string
763 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530764 static String getFromStringMethodSignature(String className) {
765 return getJavaDoc(FROM_METHOD, className, false, null) +
766 methodSignature(FROM_STRING_METHOD_NAME, EMPTY_STRING, PUBLIC +
767 SPACE + STATIC, FROM_STRING_PARAM_NAME,
768 className, STRING_DATA_TYPE,
769 CLASS_TYPE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530770 }
771
772 /**
773 * Return from string method's close string.
774 *
775 * @return from string method's close string
776 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530777 static String getFromStringMethodClose() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530778 return getReturnString(NULL, EIGHT_SPACE_INDENTATION) +
779 signatureClose() + methodClose(FOUR_SPACE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530780 }
781
782 /**
783 * Return from string method's body string.
784 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530785 * @param attr attribute info
786 * @param fromAttr attribute info for the from string wrapper
787 * type
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530788 * @return from string method's body string
789 */
790 public static String getFromStringMethod(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530791 JavaAttributeInfo fromAttr) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530792
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530793 return EIGHT_SPACE_INDENTATION + StringGenerator.getTrySubString() +
794 StringGenerator.getNewLineAndSpace(TWELVE_SPACE_INDENTATION) +
795 getParsedSubString(attr, fromAttr) +
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +0530796 StringGenerator.getNewLineAndSpace(FOUR_SPACE_INDENTATION) +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530797 StringGenerator.getReturnOfSubString() +
798 StringGenerator.getNewLineAndSpace(EIGHT_SPACE_INDENTATION) +
799 StringGenerator.getCatchSubString() +
800 StringGenerator.getNewLineAndSpace(EIGHT_SPACE_INDENTATION) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530801 CLOSE_CURLY_BRACKET;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530802 }
803
804 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530805 * Returns sub string with parsed statement for union's from string method.
806 *
807 * @param attr attribute info
808 * @return sub string with parsed statement for union's from string method
809 */
810 private static String getParsedSubString(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530811 JavaAttributeInfo fromStringAttr) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530812
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530813 String targetDataType = getReturnType(attr);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530814 StringBuilder builder = new StringBuilder();
815 YangDataTypes types = fromStringAttr.getAttributeType()
816 .getDataType();
817 switch (types) {
818 case BITS:
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +0530819 return getFromStringForBits(attr, (YangBits) fromStringAttr.getAttributeType()
820 .getDataTypeExtendedInfo());
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530821 case BINARY:
822 return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL + SPACE +
823 BASE64 + PERIOD + GET_DECODER + OPEN_PARENTHESIS +
824 CLOSE_PARENTHESIS + PERIOD + DECODE + OPEN_PARENTHESIS +
825 FROM_STRING_PARAM_NAME + CLOSE_PARENTHESIS + SEMI_COLON
826 + NEW_LINE;
827 default:
828 return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL +
829 SPACE + StringGenerator.getParseFromStringMethod(
830 targetDataType, fromStringAttr.getAttributeType()) +
831 OPEN_PARENTHESIS + FROM_STRING_PARAM_NAME +
832 CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE;
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530833 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530834 }
835
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530836 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530837 * Returns hash code method open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530838 *
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530839 * @return hash code method open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530840 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530841 static String getHashCodeMethodOpen() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530842 String line;
843 StringBuilder builder = new StringBuilder(getOverRideString());
844 builder.append(methodSignature(HASH_CODE_STRING, EMPTY_STRING, PUBLIC,
845 null, INT, null, CLASS_TYPE));
846 line = getReturnString(OBJECT_STRING + SUFFIX_S + PERIOD + HASH +
847 OPEN_PARENTHESIS, EIGHT_SPACE_INDENTATION);
848 builder.append(line);
849 return builder.toString();
Bharat saraswal022dae92016-03-04 20:08:09 +0530850 }
851
852 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530853 * Returns hash code methods close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530854 *
855 * @param hashcodeString hash code string
856 * @return to hash code method close string
857 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530858 static String getHashCodeMethodClose(String hashcodeString) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530859 String[] array = {SPACE, COMMA};
860 hashcodeString = trimAtLast(hashcodeString, array);
861 return hashcodeString + CLOSE_PARENTHESIS + signatureClose() +
862 methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530863 }
864
865 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530866 * Returns hash code method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +0530867 *
868 * @param attr attribute info
869 * @return hash code method
870 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530871 public static String getHashCodeMethod(JavaAttributeInfo attr) {
janani b703cfe42016-05-17 13:12:22 +0530872 return attr.getAttributeName() + COMMA + SPACE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530873 }
874
875 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530876 * Returns equals method open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530877 *
878 * @param className class name
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530879 * @return equals method open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530880 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530881 static String getEqualsMethodOpen(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530882 return getOverRideString() +
883 methodSignature(EQUALS_STRING, EMPTY_STRING, PUBLIC, OBJ,
884 BOOLEAN_DATA_TYPE, OBJECT_STRING,
885 CLASS_TYPE) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530886 getEqualsMethodsCommonIfCondition() +
887 getEqualsMethodsSpecificIfCondition(className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530888 }
889
890 /**
891 * Returns equal methods if condition string.
892 *
893 * @return if condition string
894 */
895 private static String getEqualsMethodsCommonIfCondition() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530896 return getIfConditionBegin(EIGHT_SPACE_INDENTATION, THIS + SPACE +
897 EQUAL + EQUAL + SPACE + OBJ) + getReturnString(
898 TRUE, TWELVE_SPACE_INDENTATION) + signatureClose()
899 + methodClose(EIGHT_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530900 }
901
902 /**
903 * Returns if condition for specific class object in equals method.
904 *
905 * @param className class name
906 * @return if condition string
907 */
908 private static String getEqualsMethodsSpecificIfCondition(String className) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530909 return EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + OBJ +
910 INSTANCE_OF + className + CLOSE_PARENTHESIS + SPACE +
911 OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION +
912 className + SPACE + OTHER + SPACE + EQUAL + SPACE +
913 OPEN_PARENTHESIS + className + CLOSE_PARENTHESIS + SPACE + OBJ +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530914 SEMI_COLON + NEW_LINE + TWELVE_SPACE_INDENTATION + RETURN +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530915 NEW_LINE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530916 }
917
918 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530919 * Returns equals methods close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530920 *
921 * @param equalMethodString equal method string
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530922 * @return equals method close string
Bharat saraswal022dae92016-03-04 20:08:09 +0530923 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530924 static String getEqualsMethodClose(String equalMethodString) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530925 String[] array = {NEW_LINE, AND, AND, SPACE};
926 equalMethodString = trimAtLast(equalMethodString, array) +
927 signatureClose();
928 return equalMethodString + methodClose(EIGHT_SPACE) +
929 getReturnString(FALSE, EIGHT_SPACE_INDENTATION) +
930 signatureClose() + methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530931 }
932
933 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530934 * Returns equals method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +0530935 *
936 * @param attr attribute info
937 * @return equals method
938 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530939 public static String getEqualsMethod(JavaAttributeInfo attr) {
janani b703cfe42016-05-17 13:12:22 +0530940 String attributeName = attr.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530941 return SIXTEEN_SPACE_INDENTATION + OBJECT_STRING + SUFFIX_S +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530942 PERIOD + EQUALS_STRING + OPEN_PARENTHESIS + attributeName +
943 COMMA + SPACE + OTHER + PERIOD + attributeName +
944 CLOSE_PARENTHESIS + SPACE + AND + AND;
Bharat saraswal022dae92016-03-04 20:08:09 +0530945 }
946
947 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530948 * Returns of method's string and java doc for special type.
949 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530950 * @param attr attribute info
951 * @param className class name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530952 * @return of method's string and java doc for special type
953 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530954 public static String getOfMethodStringAndJavaDoc(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530955 String className) {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530956 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530957 String attrName = attr.getAttributeName();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530958
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530959 return getJavaDoc(OF_METHOD, className + FOR_TYPE_STRING + attrName,
960 false, null) + getOfMethodString(attrType, className);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530961 }
962
963 /**
964 * Returns of method's string.
965 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530966 * @param type data type
967 * @param name class name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530968 * @return of method's string
969 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530970 private static String getOfMethodString(String type, String name) {
971 return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE + STATIC,
972 VALUE, name, type, CLASS_TYPE) +
973 methodBody(MethodBodyTypes.OF_METHOD, name, null,
974 EIGHT_SPACE_INDENTATION, EMPTY_STRING, null, false) +
975 methodClose(FOUR_SPACE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530976 }
977
978 /**
979 * Returns string and java doc for constructor of type class.
980 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530981 * @param attr attribute info
982 * @param className class name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530983 * @return string and java doc for constructor of type class
984 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530985 public static String getTypeConstructorStringAndJavaDoc(
986 JavaAttributeInfo attr, String className) {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530987 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530988 String attrName = attr.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530989 return getJavaDoc(TYPE_CONSTRUCTOR, attrName, false, null) +
990 getTypeConstructorString(attrType, attrName, className);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530991 }
992
993 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +0530994 * Returns string and java doc for constructor of type class.
995 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530996 * @param attr1 first attribute info
997 * @param attr2 second attribute info
998 * @param genType class name
999 * @param type conflict validate type
1000 * @param addFirst whether int came first or uInt came first
Bharat saraswal64e7e232016-07-14 23:33:55 +05301001 * @return string and java doc for constructor of type class
1002 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301003 public static String getTypeConstructorStringAndJavaDoc(
1004 JavaAttributeInfo attr1, JavaAttributeInfo attr2, String genType,
1005 ValidatorTypeForUnionTypes type, boolean addFirst) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301006
Bharat saraswal64e7e232016-07-14 23:33:55 +05301007 String attrType = getReturnType(attr1);
1008 String attrName1 = "";
1009 String attrName2 = "";
1010 if (attr1 != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301011 if (addFirst) {
1012 attrName1 = attr1.getAttributeName();
1013 } else {
1014 attrName2 = attr1.getAttributeName();
1015 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301016 }
1017 if (attr2 != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301018 if (addFirst) {
1019 attrName1 = attr2.getAttributeName();
1020 } else {
1021 attrName2 = attr2.getAttributeName();
1022 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301023 }
1024
Vidyashree Ramab3670472016-08-06 15:49:56 +05301025 String appDataStructure = null;
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301026 if (attr1 != null && attr1.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301027 appDataStructure =
1028 attr1.getCompilerAnnotation().getYangAppDataStructure()
1029 .getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +05301030 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301031 String doc;
1032 if (attrName1.isEmpty()) {
1033 doc = attrName2;
1034 } else {
1035 doc = attrName1;
1036 }
1037 return getJavaDoc(TYPE_CONSTRUCTOR, doc, false, appDataStructure) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301038 getTypeConstructorString(attrType, attrName1,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301039 attrName2, genType,
1040 type, addFirst);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301041 }
1042
1043 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301044 * Returns type constructor string.
1045 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301046 * @param type data type
1047 * @param name attribute name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301048 * @param className class name
1049 * @return type constructor string
1050 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301051 private static String getTypeConstructorString(String type, String name,
1052 String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301053 return methodSignature(className, EMPTY_STRING, PUBLIC, name,
1054 null, type, CLASS_TYPE) +
1055 methodBody(SETTER, name, null, EIGHT_SPACE_INDENTATION,
1056 EMPTY_STRING, null, false) + methodClose(FOUR_SPACE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301057 }
1058
1059 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301060 * Returns type constructor string.
1061 *
1062 * @param type data type
1063 * @param attr1 attribute attr1
1064 * @param className class attr1
1065 * @return type constructor string
1066 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301067 private static String getTypeConstructorString(
1068 String type, String attr1, String attr2, String className,
1069 ValidatorTypeForUnionTypes validatorType, boolean addInt) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301070
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301071 StringBuilder constructor = new StringBuilder(
1072 methodSignature(className, EMPTY_STRING, null, type,
1073 null, type, CLASS_TYPE))
1074 .append(ifConditionForIntInTypeDefConstructor(validatorType,
1075 addInt))
1076 .append(methodBody(SETTER, attr1, null,
1077 TWELVE_SPACE_INDENTATION, EMPTY_STRING,
1078 null, false));
1079 String str = EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE +
1080 ELSE + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
1081 constructor.append(str)
1082 .append(methodBody(SETTER, attr2, null,
1083 TWELVE_SPACE_INDENTATION, EMPTY_STRING,
1084 null, false))
1085 .append(methodClose(FOUR_SPACE))
1086 .append(methodClose(EIGHT_SPACE));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301087
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301088 return constructor.toString();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301089 }
1090
1091 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301092 * Returns interface of add augmentation.
1093 *
1094 * @return interface of add augmentation
1095 */
1096 static String getAddAugmentInfoMethodInterface() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301097 StringBuilder builder = new StringBuilder(generateForAddAugmentation());
1098 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1099 map.put(OBJECT_STRING, VALUE);
1100 map.put(CLASS_STRING, CLASS + OBJECT_STRING);
1101 builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
1102 EMPTY_STRING, EMPTY_STRING,
1103 VOID, map, INTERFACE_TYPE));
1104 return builder.toString();
Bharat saraswal8beac342016-08-04 02:00:03 +05301105 }
1106
1107 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +05301108 * Returns implementation of add augmentation.
1109 *
1110 * @return implementation of add augmentation
1111 */
Bharat saraswal039f59c2016-07-14 21:57:13 +05301112 static String getAddAugmentInfoMethodImpl() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301113 StringBuilder builder = new StringBuilder(getOverRideString());
1114 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1115 map.put(OBJECT_STRING, VALUE);
1116 map.put(CLASS_STRING, CLASS + OBJECT_STRING);
1117 builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
1118 EMPTY_STRING, PUBLIC,
1119 VOID, map, CLASS_TYPE))
1120 .append(methodBody(AUGMENTED_MAP_ADD, null, null,
1121 EIGHT_SPACE_INDENTATION, null, null, false))
1122 .append(methodClose(FOUR_SPACE))
1123 .append(NEW_LINE);
1124 return builder.toString();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301125 }
1126
1127 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301128 * Returns interface of get YANG augment info.
Bharat saraswalaf413b82016-07-14 15:18:20 +05301129 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301130 * @return interface of get YANG augment info
Bharat saraswalaf413b82016-07-14 15:18:20 +05301131 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301132 static String getYangAugmentInfoInterface() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301133 return generateForGetAugmentation() +
1134 methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE, EMPTY_STRING,
1135 null, CLASS + OBJECT_STRING,
1136 OBJECT_STRING, CLASS_STRING, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301137 }
Bharat saraswalaf413b82016-07-14 15:18:20 +05301138
Bharat saraswal8beac342016-08-04 02:00:03 +05301139 /**
1140 * Returns implementation of get YANG augment info.
1141 *
1142 * @return implementation of get YANG augment info
1143 */
1144 static String getYangAugmentInfoImpl() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301145 return getOverRideString() +
1146 methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE, EMPTY_STRING,
1147 PUBLIC, CLASS + OBJECT_STRING, OBJECT_STRING,
1148 CLASS_STRING, CLASS_TYPE) +
1149 methodBody(AUGMENTED_MAP_GET_VALUE, null, null,
1150 EIGHT_SPACE_INDENTATION, null, null, false) +
1151 methodClose(FOUR_SPACE);
Bharat saraswalaf413b82016-07-14 15:18:20 +05301152 }
1153
1154 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301155 * Returns implementation of get YANG augment info.
Bharat saraswal039f59c2016-07-14 21:57:13 +05301156 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301157 * @return implementation of get YANG augment info
Bharat saraswal039f59c2016-07-14 21:57:13 +05301158 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301159 static String getYangAugmentInfoMapInterface() {
1160 return NEW_LINE +
1161 getJavaDoc(GETTER_METHOD, YANG_AUGMENTED_INFO_LOWER_CASE + MAP,
1162 false, null) +
1163 methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE + MAP,
1164 EMPTY_STRING, null, null,
1165 getAugmentMapTypeString(), null, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301166 }
1167
1168 /**
1169 * Returns implementation of get YANG augment info.
1170 *
1171 * @return implementation of get YANG augment info
1172 */
1173 static String getYangAugmentInfoMapImpl() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301174 return getOverRideString() + methodSignature(
1175 YANG_AUGMENTED_INFO_LOWER_CASE + MAP, EMPTY_STRING, PUBLIC, null,
1176 getAugmentMapTypeString(), null, CLASS_TYPE) +
1177 methodBody(AUGMENTED_MAP_GETTER, null, null,
1178 EIGHT_SPACE_INDENTATION, null, null, false) +
1179 methodClose(FOUR_SPACE);
Bharat saraswal039f59c2016-07-14 21:57:13 +05301180 }
1181
1182 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301183 * Returns enum's constructor.
1184 *
1185 * @param className enum's class name
1186 * @return enum's constructor
1187 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301188 static String getEnumsConstructor(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301189 StringBuilder builder = new StringBuilder();
1190 String clsName = getSmallCase(className);
1191 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1192 map.put(INT, clsName);
1193 map.put(STRING_DATA_TYPE, SCHEMA_NAME);
1194 builder.append(multiAttrMethodSignature(className, EMPTY_STRING,
1195 EMPTY_STRING, null,
1196 map, CLASS_TYPE))
1197 .append(methodBody(SETTER, clsName, EMPTY_STRING,
1198 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
1199 EMPTY_STRING, false))
1200 .append(methodBody(SETTER, SCHEMA_NAME, EMPTY_STRING,
1201 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
1202 EMPTY_STRING, false))
1203 .append(methodClose(FOUR_SPACE));
1204
1205 return builder.toString();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301206 }
Bharat saraswal250a7472016-05-12 13:16:57 +05301207
1208 /**
1209 * Returns of method for enum class.
1210 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301211 * @param className class name
1212 * @param type method body type
Bharat saraswal250a7472016-05-12 13:16:57 +05301213 * @return of method
1214 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301215 static String getEnumsOfValueMethod(String className,
1216 YangEnumeration enumeration,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301217 MethodBodyTypes type) {
1218 String name = getCapitalCase(className);
1219 StringBuilder builder = new StringBuilder(getJavaDoc(
1220 OF_METHOD, name + SPACE + FOR,
1221 false, null));
1222 //Switch statement.
1223 String sw = EIGHT_SPACE_INDENTATION + SWITCH + SPACE + brackets(
1224 OPEN_CLOSE_BRACKET_WITH_VALUE, VALUE, null) +
1225 methodSignatureClose(CLASS_TYPE);
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301226 String str;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301227 switch (type) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301228 case ENUM_METHOD_INT_VALUE:
1229 builder.append(getEnumValueMethodSignature(name, INT))
1230 .append(sw);
1231 for (YangEnum yangEnum : enumeration.getEnumSet()) {
1232 str = getEnumJavaAttribute(yangEnum.getNamedValue())
1233 .toUpperCase();
1234 builder.append(getEnumValueMethodCases(
1235 EMPTY_STRING + yangEnum.getValue(), str, name));
1236 }
1237 break;
1238 case ENUM_METHOD_STRING_VALUE:
1239 builder.append(getEnumValueMethodSignature(name,
1240 STRING_DATA_TYPE))
1241 .append(sw);
1242 for (YangEnum yangEnum : enumeration.getEnumSet()) {
1243 str = getEnumJavaAttribute(yangEnum.getNamedValue())
1244 .toUpperCase();
1245 builder.append(getEnumValueMethodCases(
1246 QUOTES + yangEnum.getNamedValue() + QUOTES, str,
1247 name));
1248 }
1249 break;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301250 default:
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301251 return null;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301252 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301253
1254 String method = TWELVE_SPACE_INDENTATION + DEFAULT + SPACE + COLON +
1255 NEW_LINE;
1256 builder.append(method)
1257 .append(getReturnString(NULL, SIXTEEN_SPACE_INDENTATION))
1258 .append(signatureClose())
1259 .append(methodClose(EIGHT_SPACE))
1260 .append(methodClose(FOUR_SPACE));
1261
1262 return builder.toString();
1263 }
1264
1265 /**
1266 * Returns enum value method signature.
1267 *
1268 * @param name method name
1269 * @param type param type
1270 * @return enum value method signature
1271 */
1272 private static String getEnumValueMethodSignature(String name, String type) {
1273 return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE +
1274 STATIC, VALUE, name, type, CLASS_TYPE);
1275 }
1276
1277 /**
1278 * Returns enum value method's cases.
1279 *
1280 * @param caseType case type
1281 * @param value return value
1282 * @param name name of class
1283 * @return enum value method's cases
1284 */
1285 private static String getEnumValueMethodCases(String caseType, String value,
1286 String name) {
1287 return TWELVE_SPACE_INDENTATION + CASE + SPACE + caseType +
1288 COLON + NEW_LINE + getReturnString(name,
1289 SIXTEEN_SPACE_INDENTATION) +
1290 PERIOD + value + signatureClose();
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301291 }
Bharat saraswald14cbe82016-07-14 13:26:18 +05301292
1293 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +05301294 * Returns augmented data getter and setter methods for service class.
1295 *
1296 * @param parent parent node
1297 * @return augmented data getter and setter methods for service class
1298 */
Bharat saraswal039f59c2016-07-14 21:57:13 +05301299 static String getAugmentsDataMethodForService(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +05301300 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
1301 YangNode augmentedNode;
1302 String curNodeName;
1303 String method;
1304 StringBuilder methods = new StringBuilder();
1305 String parentName;
1306 String returnType;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301307 YangNode methodNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301308 YangPluginConfig pluginConfig =
1309 ((JavaFileInfoContainer) parent).getJavaFileInfo()
1310 .getPluginConfig();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301311 for (YangAtomicPath nodeId : targets) {
Bharat saraswal039f59c2016-07-14 21:57:13 +05301312 augmentedNode = nodeId.getResolvedNode().getParent();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301313 methodNode = nodeId.getResolvedNode();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301314 if (((JavaFileInfoContainer) methodNode).getJavaFileInfo()
1315 .getJavaName() != null) {
1316 curNodeName =
1317 ((JavaFileInfoContainer) methodNode).getJavaFileInfo()
1318 .getJavaName();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301319 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301320 curNodeName = getCapitalCase(
1321 getCamelCase(methodNode.getName(),
1322 pluginConfig.getConflictResolver()));
Bharat saraswalaf413b82016-07-14 15:18:20 +05301323 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301324 returnType =
1325 getAugmentedClassNameForDataMethods(augmentedNode, parent);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301326 parentName = getCurNodeName(augmentedNode,
1327 pluginConfig);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301328 method = generateForGetMethodWithAttribute(returnType) +
1329 getGetMethodWithArgument(returnType, AUGMENTED +
1330 parentName + getCapitalCase(curNodeName)) + NEW_LINE;
Bharat saraswalaf413b82016-07-14 15:18:20 +05301331 methods.append(method);
1332
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301333 method = getJavaDoc(MANAGER_SETTER_METHOD,
1334 AUGMENTED + getCapitalCase(parentName) +
1335 getCapitalCase(curNodeName), false,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301336 null) +
Bharat saraswalaf413b82016-07-14 15:18:20 +05301337 getSetterForInterface(getSmallCase(AUGMENTED) + parentName +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301338 getCapitalCase(curNodeName),
1339 returnType, parentName, false,
1340 GENERATE_SERVICE_AND_MANAGER, null) +
1341 NEW_LINE;
Bharat saraswalaf413b82016-07-14 15:18:20 +05301342 methods.append(method);
1343 }
1344 return methods.toString();
1345 }
1346
1347 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301348 * Returns validator method for range in union class.
1349 *
1350 * @param type type
1351 * @return validator method for range in union class
1352 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301353 static String getRangeValidatorMethodForUnion(String type) {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301354 String newType;
1355 if (type.contentEquals(BIG_INTEGER)) {
1356 newType = LONG;
1357 } else {
1358 newType = INT;
1359 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301360 StringBuilder builder = new StringBuilder(generateForValidatorMethod());
1361 String var = getSmallCase(BIG_INTEGER);
1362 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1363 map.put(MIN_RANGE, type);
1364 map.put(MAX_RANGE, type);
1365 map.put(VALUE, newType);
1366 builder.append(multiAttrMethodSignature(VALIDATE_RANGE, EMPTY_STRING,
1367 PRIVATE, BOOLEAN_DATA_TYPE, map,
1368 CLASS_TYPE));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301369 if (type.contentEquals(BIG_INTEGER)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301370 //Create new instance of big integer.
1371 builder.append(getNewInstance(BIG_INTEGER, var, EIGHT_SPACE_INDENTATION,
1372 QUOTES + SPACE + QUOTES + SPACE +
1373 ADD + SPACE + VALUE))
1374 //Add return string.
1375 .append(getReturnString(var, EIGHT_SPACE_INDENTATION))
1376 //Add compareTo string
1377 .append(getCompareToString())
1378 //Add && condition.
1379 .append(ifAndAndCondition(
1380 //Add == condition
1381 ifEqualEqualCondition(
1382 brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
1383 MIN_RANGE, null), ONE),
1384 var))
1385 //Add compareTo string.
1386 .append(getCompareToString())
1387 //Add == condition.
1388 .append(ifEqualEqualCondition(
1389 brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
1390 MAX_RANGE, null), ONE))
1391 .append(signatureClose());
Bharat saraswal64e7e232016-07-14 23:33:55 +05301392 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301393 builder.append(getReturnString(VALUE, EIGHT_SPACE_INDENTATION))
1394 .append(getGreaterThanCondition())
1395 .append(ifAndAndCondition(MIN_RANGE, VALUE))
1396 .append(getLesserThanCondition())
1397 .append(MAX_RANGE)
1398 .append(signatureClose());
Bharat saraswal64e7e232016-07-14 23:33:55 +05301399 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301400 builder.append(methodClose(FOUR_SPACE));
1401 return builder.toString();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301402 }
1403
Bharat saraswal8beac342016-08-04 02:00:03 +05301404 //Get method with arguments.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301405 private static String getGetMethodWithArgument(String returnType,
1406 String yangName) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301407 return methodSignature(getCapitalCase(yangName), GET_METHOD_PREFIX,
1408 null, getSmallCase(returnType),
1409 returnType, returnType + OP_PARAM,
1410 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301411 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301412
Bharat saraswal8beac342016-08-04 02:00:03 +05301413 /**
1414 * Returns add to list method interface.
1415 *
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301416 * @param attr java attribute
1417 * @param className name of the class
Bharat saraswal8beac342016-08-04 02:00:03 +05301418 * @return add to list method interface
1419 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301420 public static String getAddToListMethodInterface(JavaAttributeInfo attr,
1421 String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301422
1423 return methodSignature(ADD_STRING + TO_CAPS + getCapitalCase(
1424 attr.getAttributeName()), EMPTY_STRING, EMPTY_STRING,
1425 ADD_STRING + TO_CAPS,
1426 className + BUILDER, getReturnType(attr),
1427 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301428 }
1429
1430 /**
1431 * Returns add to list method impl.
1432 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301433 * @param attr java attribute
1434 * @param name class name
1435 * @param isRoot is root
Bharat saraswal8beac342016-08-04 02:00:03 +05301436 * @return add to list method impl
1437 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301438 public static String getAddToListMethodImpl(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301439 String name,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301440 boolean isRoot) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301441 String attrName = attr.getAttributeName();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301442 String retString = "";
1443 if (!isRoot) {
1444 retString = getOverRideString();
1445 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301446 StringBuilder builder = new StringBuilder(retString);
1447 builder.append(methodSignature(ADD_STRING + TO_CAPS +
1448 getCapitalCase(attrName),
1449 EMPTY_STRING, PUBLIC, ADD_STRING + TO_CAPS,
1450 name + BUILDER, getReturnType(attr),
1451 CLASS_TYPE))
1452 .append(getIfConditionForAddToListMethod(attrName));
1453 retString = EIGHT_SPACE_INDENTATION + attrName + PERIOD + ADD_STRING +
1454 OPEN_PARENTHESIS + ADD_STRING + TO_CAPS + CLOSE_PARENTHESIS;
1455 builder.append(retString)
1456 .append(signatureClose())
1457 .append(getReturnString(THIS, EIGHT_SPACE_INDENTATION))
1458 .append(signatureClose())
1459 .append(methodClose(FOUR_SPACE));
1460 return builder.toString();
1461 }
1462
1463 // Returns if condition for add to list method.
1464 static String getIfConditionForAddToListMethod(String name) {
1465 return getIfConditionBegin(EIGHT_SPACE_INDENTATION, name + SPACE + EQUAL +
1466 EQUAL + SPACE + NULL) + TWELVE_SPACE_INDENTATION +
1467 name + SPACE + EQUAL + SPACE +
1468 NEW + SPACE + ARRAY_LIST + signatureClose() + methodClose(
1469 EIGHT_SPACE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301470 }
1471
1472 /**
1473 * Returns builder method for class.
1474 *
1475 * @param name name of class
1476 * @return builder method for class
1477 */
1478 static String builderMethod(String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301479 return generateForBuilderMethod(name) +
1480 methodSignature(BUILDER_LOWER_CASE,
1481 EMPTY_STRING, PUBLIC + SPACE +
1482 STATIC, null, name + BUILDER, null, CLASS_TYPE) +
1483 getReturnString(NEW + SPACE + name + BUILDER,
1484 EIGHT_SPACE_INDENTATION) +
1485 brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
1486 methodClose(FOUR_SPACE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301487 }
1488
1489 /**
1490 * Returns is filter content match interface.
1491 *
1492 * @param name name of node
1493 * @return is filter content match interface
1494 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301495 static String processSubtreeFilteringInterface(String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301496 String method = " /**\n" +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301497 " * Checks if the passed " + name +
1498 " maps the content match query condition.\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301499 " *\n" +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301500 " * @param " + getSmallCase(name) + SPACE +
1501 getSmallCase(name) + SPACE + "being passed to check" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301502 " for" +
1503 " content match\n" +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301504 " * @param isSelectAllSchemaChild is select all schema child\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301505 " * @return match result\n" +
1506 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301507 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1508 map.put(name, getSmallCase(name));
1509 map.put(BOOLEAN_DATA_TYPE, SELECT_ALL_CHILD);
1510
1511 return method + multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING,
1512 EMPTY_STRING, EMPTY_STRING,
1513 name, map, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301514 }
1515
1516 /**
1517 * Returns is value set interface.
1518 *
1519 * @return is value set interface
1520 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301521 static String isLeafValueSetInterface() {
1522 String method = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301523 " * Checks if the leaf value is set.\n" +
1524 " *\n" +
1525 " * @param leaf leaf whose value status needs to checked\n" +
1526 " * @return result of leaf value set in object\n" +
1527 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301528 return method + methodSignature(VALUE_LEAF_SET, EMPTY_STRING, null,
1529 LEAF, BOOLEAN_DATA_TYPE,
1530 LEAF_IDENTIFIER, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301531 }
1532
1533 /**
1534 * Returns is select leaf set interface.
1535 *
1536 * @return is select leaf set interface
1537 */
1538 static String isSelectLeafSetInterface() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301539 String method = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301540 " * Checks if the leaf is set to be a selected leaf.\n" +
1541 " *\n" +
1542 " * @param leaf if leaf needs to be selected\n" +
1543 " * @return result of leaf value set in object\n" +
1544 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301545 return method + methodSignature(IS_SELECT_LEAF, EMPTY_STRING, null,
1546 LEAF, BOOLEAN_DATA_TYPE, LEAF_IDENTIFIER,
1547 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301548 }
1549
1550 /**
1551 * Returns set select leaf set interface.
1552 *
1553 * @param name node name
1554 * @return set select leaf set interface
1555 */
1556 static String setSelectLeafSetInterface(String name) {
1557 String method = " /**\n" +
1558 " * Set a leaf to be selected.\n" +
1559 " *\n" +
1560 " * @param leaf leaf needs to be selected\n" +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301561 " * @return builder object for select leaf\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301562 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301563 return method + methodSignature(SET_SELECT_LEAF, EMPTY_STRING,
1564 null, LEAF, name +
1565 BUILDER, LEAF_IDENTIFIER,
1566 INTERFACE_TYPE) + NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +05301567 }
1568
1569 /**
1570 * Returns leaf identifier interface enum signature.
1571 *
1572 * @param name name of node
1573 * @return leaf identifier interface enum signature
1574 */
1575 static String getInterfaceLeafIdEnumSignature(String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301576 String start = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301577 " * Identify the leaf of " + name + PERIOD + NEW_LINE +
1578 " */\n";
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301579 return start + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + ENUM + SPACE +
1580 LEAF_IDENTIFIER + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +05301581 }
1582
1583 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301584 * Returns setter for select leaf.
1585 *
1586 * @param name name of node
1587 * @param isRootNode if root node
1588 * @return setter for select leaf
1589 */
1590 static String getSetterForSelectLeaf(String name, boolean isRootNode) {
1591 String append = OVERRIDE;
1592 if (isRootNode) {
1593 append = EMPTY_STRING;
1594 }
1595 return "\n" +
1596 " " + append + "\n" +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301597 " public " + name + BUILDER +
1598 " selectLeaf(LeafIdentifier leaf) {\n" +
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301599 " getSelectLeafFlags().set(leaf.getLeafIndex());\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301600 " return this;\n" +
1601 " }\n";
1602 }
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301603
1604 /**
1605 * Generates fromString code for bits.
1606 *
1607 * @param attr attribute information
1608 * @param yangBits parsed yang bits
1609 * @return generated fromString code for bits.
1610 */
1611 private static String getFromStringForBits(JavaAttributeInfo attr, YangBits yangBits) {
1612 String targetDataType = getReturnType(attr);
1613 String key;
1614 YangBit bit;
1615 // Split the input string and check each bit name falls in configured yang file
1616 String lines = targetDataType + SPACE + TMP_VAL + SPACE + EQUAL + SPACE + NEW + SPACE + targetDataType +
1617 OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE +
1618 TWELVE_SPACE_INDENTATION + STRING_DATA_TYPE + SQUARE_BRACKETS + SPACE + BIT_NAMES_VAR + SPACE +
1619 EQUAL + SPACE + FROM_STRING_PARAM_NAME + PERIOD + TRIM_STRING + EMPTY_PARAMETER_FUNCTION_CALL +
1620 PERIOD + SPLIT_STRING + OPEN_PARENTHESIS + PATTERN + PERIOD + QUOTE_STRING +
1621 OPEN_PARENTHESIS + QUOTES + SPACE + QUOTES + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLON +
1622 NEW_LINE +
1623 TWELVE_SPACE_INDENTATION + FOR + SPACE + OPEN_PARENTHESIS + STRING_DATA_TYPE + SPACE + BIT_NAME_VAR +
1624 SPACE + COLON + SPACE + BIT_NAMES_VAR + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
1625 boolean firstIf = true;
1626 String ifCondition = IF;
1627 for (Map.Entry<String, YangBit> entry : yangBits.getBitNameMap().entrySet()) {
1628 key = entry.getKey();
1629 bit = entry.getValue();
1630 if (bit == null) {
1631 return null;
1632 }
1633 if (firstIf) {
1634 lines += SIXTEEN_SPACE_INDENTATION;
1635 }
1636 // Add condition checking for bit name
1637 lines += ifCondition + SPACE + OPEN_PARENTHESIS + BIT_NAME_VAR + PERIOD +
1638 EQUALS_STRING + OPEN_PARENTHESIS + QUOTES + key + QUOTES + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS +
1639 SPACE + OPEN_CURLY_BRACKET + NEW_LINE +
1640 TWENTY_SPACE_INDENTATION + TMP_VAL + PERIOD + SET_METHOD_PREFIX + OPEN_PARENTHESIS +
1641 bit.getPosition() + CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE + SIXTEEN_SPACE_INDENTATION +
1642 CLOSE_CURLY_BRACKET;
1643 if (firstIf) {
1644 ifCondition = SPACE + ELSE_IF;
1645 firstIf = false;
1646 }
1647 }
1648
1649 if (!firstIf) {
1650 // This means at least one if condition is added in code generation
1651 // Now add else condition for validation
1652 lines += SPACE + ELSE + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + TWENTY_SPACE_INDENTATION + RETURN +
1653 SPACE + NULL + SEMI_COLON + NEW_LINE + SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET;
1654 }
1655
1656 lines += NEW_LINE + TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
1657 return lines;
1658 }
Bharat saraswal97459962016-02-20 21:57:16 +05301659}