blob: 77bf0f271374adc632fdea9b6b39b903a1778ae4 [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;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053020import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053021import org.onosproject.yangutils.datamodel.YangEnum;
22import org.onosproject.yangutils.datamodel.YangEnumeration;
Bharat saraswal94844d62016-10-13 13:28:03 +053023import org.onosproject.yangutils.datamodel.YangLeafRef;
Bharat saraswalaf413b82016-07-14 15:18:20 +053024import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswal94844d62016-10-13 13:28:03 +053025import org.onosproject.yangutils.datamodel.YangNotification;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053026import org.onosproject.yangutils.datamodel.YangType;
janani b0e4e8ae2016-07-13 21:06:41 +053027import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053028import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswal039f59c2016-07-14 21:57:13 +053029import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053030import org.onosproject.yangutils.utils.io.YangPluginConfig;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053031import org.onosproject.yangutils.utils.io.impl.JavaDocGen;
Bharat saraswal84366c52016-03-23 19:40:35 +053032
Bharat saraswal9fab16b2016-09-23 23:27:24 +053033import java.util.LinkedHashMap;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053034import java.util.List;
35
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 saraswal54e4bab2016-10-05 23:32:14 +053038import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053039import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET;
40import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET_WITH_VALUE;
41import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.EIGHT_SPACE;
42import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053043import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWELVE_SPACE;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053044import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getAugmentedClassNameForDataMethods;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053045import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getCurNodeName;
Bharat saraswal039f59c2016-07-14 21:57:13 +053046import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getSetOfNodeIdentifiers;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053047import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053048import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_ADD;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053049import 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;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053057import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getBitSetAttr;
58import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCatchSubString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053059import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCompareToString;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053060import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getForLoopString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053061import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getGreaterThanCondition;
62import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIfConditionBegin;
63import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getLesserThanCondition;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053064import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getListAttribute;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053065import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getNewInstance;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053066import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getNewLineAndSpace;
67import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOmitNullValueString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053068import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053069import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getParseFromStringMethod;
70import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getPatternQuoteString;
71import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getQuotedString;
72import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnOfSubString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053073import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnString;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053074import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getSetValueParaCondition;
Bharat saraswal94844d62016-10-13 13:28:03 +053075import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getStringBuilderAttr;
76import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getToStringCall;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053077import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getTrySubString;
78import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getValueLeafSetString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053079import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifAndAndCondition;
80import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifConditionForIntInTypeDefConstructor;
81import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifEqualEqualCondition;
82import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodBody;
83import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
84import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodSignature;
85import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodSignatureClose;
86import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.multiAttrMethodSignature;
87import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
Bharat saraswal64e7e232016-07-14 23:33:55 +053088import static org.onosproject.yangutils.utils.UtilConstants.ADD;
Bharat saraswal84366c52016-03-23 19:40:35 +053089import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
90import static org.onosproject.yangutils.utils.UtilConstants.AND;
Bharat saraswal94844d62016-10-13 13:28:03 +053091import static org.onosproject.yangutils.utils.UtilConstants.APPEND;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053092import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST;
Bharat saraswalaf413b82016-07-14 15:18:20 +053093import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053094import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswald14cbe82016-07-14 13:26:18 +053095import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053096import static org.onosproject.yangutils.utils.UtilConstants.BITS;
97import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
Bharat saraswal84366c52016-03-23 19:40:35 +053098import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
99import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
100import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530101import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_LOWER_CASE;
Bharat saraswal250a7472016-05-12 13:16:57 +0530102import static org.onosproject.yangutils.utils.UtilConstants.CASE;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530103import static org.onosproject.yangutils.utils.UtilConstants.CLASS;
104import static org.onosproject.yangutils.utils.UtilConstants.CLASS_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530105import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
106import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530107import static org.onosproject.yangutils.utils.UtilConstants.COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +0530108import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530109import static org.onosproject.yangutils.utils.UtilConstants.DECODE;
Bharat saraswal250a7472016-05-12 13:16:57 +0530110import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530111import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530112import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530113import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530114import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswal94844d62016-10-13 13:28:03 +0530115import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
Bharat saraswal8beac342016-08-04 02:00:03 +0530116import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
Bharat saraswal84366c52016-03-23 19:40:35 +0530117import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
118import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
119import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530120import static org.onosproject.yangutils.utils.UtilConstants.FOR;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530121import static org.onosproject.yangutils.utils.UtilConstants.FOR_TYPE_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530122import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530123import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_METHOD_NAME;
124import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_PARAM_NAME;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530125import static org.onosproject.yangutils.utils.UtilConstants.GET;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530126import static org.onosproject.yangutils.utils.UtilConstants.GET_DECODER;
Bharat saraswal94844d62016-10-13 13:28:03 +0530127import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530128import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD_PREFIX;
129import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_METHOD_STRING;
130import static org.onosproject.yangutils.utils.UtilConstants.HASH;
131import static org.onosproject.yangutils.utils.UtilConstants.HASH_CODE_STRING;
132import static org.onosproject.yangutils.utils.UtilConstants.IF;
Bharat saraswal84366c52016-03-23 19:40:35 +0530133import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE_OF;
134import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswal8beac342016-08-04 02:00:03 +0530135import static org.onosproject.yangutils.utils.UtilConstants.IS_SELECT_LEAF;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530136import static org.onosproject.yangutils.utils.UtilConstants.LEAF;
Bharat saraswal8beac342016-08-04 02:00:03 +0530137import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530138import static org.onosproject.yangutils.utils.UtilConstants.LONG;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530139import static org.onosproject.yangutils.utils.UtilConstants.MAX_RANGE;
140import static org.onosproject.yangutils.utils.UtilConstants.MIN_RANGE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530141import static org.onosproject.yangutils.utils.UtilConstants.NEW;
142import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530143import static org.onosproject.yangutils.utils.UtilConstants.NOT;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530144import static org.onosproject.yangutils.utils.UtilConstants.NULL;
Bharat saraswal84366c52016-03-23 19:40:35 +0530145import static org.onosproject.yangutils.utils.UtilConstants.OBJ;
146import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
147import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
148import static org.onosproject.yangutils.utils.UtilConstants.OF;
Bharat saraswal94844d62016-10-13 13:28:03 +0530149import static org.onosproject.yangutils.utils.UtilConstants.OF_CAPS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530150import static org.onosproject.yangutils.utils.UtilConstants.ONE;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530151import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530152import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
153import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530154import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal84366c52016-03-23 19:40:35 +0530155import static org.onosproject.yangutils.utils.UtilConstants.OTHER;
156import static org.onosproject.yangutils.utils.UtilConstants.OVERRIDE;
157import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530158import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530159import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
160import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal84366c52016-03-23 19:40:35 +0530161import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswal94844d62016-10-13 13:28:03 +0530162import static org.onosproject.yangutils.utils.UtilConstants.QUESTION_MARK;
Bharat saraswal84366c52016-03-23 19:40:35 +0530163import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
164import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530165import static org.onosproject.yangutils.utils.UtilConstants.RPC_INPUT_VAR_NAME;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530166import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530167import static org.onosproject.yangutils.utils.UtilConstants.SELECT_ALL_CHILD;
168import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +0530169import static org.onosproject.yangutils.utils.UtilConstants.SET_METHOD_PREFIX;
Bharat saraswal8beac342016-08-04 02:00:03 +0530170import static org.onosproject.yangutils.utils.UtilConstants.SET_SELECT_LEAF;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530171import static org.onosproject.yangutils.utils.UtilConstants.SET_VALUE_PARA;
Bharat saraswal84366c52016-03-23 19:40:35 +0530172import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
173import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530174import static org.onosproject.yangutils.utils.UtilConstants.SPLIT_STRING;
175import static org.onosproject.yangutils.utils.UtilConstants.SQUARE_BRACKETS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530176import static org.onosproject.yangutils.utils.UtilConstants.STATIC;
Bharat saraswal94844d62016-10-13 13:28:03 +0530177import static org.onosproject.yangutils.utils.UtilConstants.STRING_BUILDER_VAR;
Bharat saraswal84366c52016-03-23 19:40:35 +0530178import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
179import static org.onosproject.yangutils.utils.UtilConstants.SUFFIX_S;
Bharat saraswal250a7472016-05-12 13:16:57 +0530180import static org.onosproject.yangutils.utils.UtilConstants.SWITCH;
Bharat saraswal84366c52016-03-23 19:40:35 +0530181import static org.onosproject.yangutils.utils.UtilConstants.THIS;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530182import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530183import static org.onosproject.yangutils.utils.UtilConstants.TO_CAPS;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530184import static org.onosproject.yangutils.utils.UtilConstants.TO_STRING_METHOD;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530185import static org.onosproject.yangutils.utils.UtilConstants.TRIM_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530186import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
187import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530188import static org.onosproject.yangutils.utils.UtilConstants.VALIDATE_RANGE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530189import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
Bharat saraswal8beac342016-08-04 02:00:03 +0530190import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF_SET;
Bharat saraswal84366c52016-03-23 19:40:35 +0530191import static org.onosproject.yangutils.utils.UtilConstants.VOID;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530192import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530193import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_LOWER_CASE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530194import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILD_METHOD;
195import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.CONSTRUCTOR;
196import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530197import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.FROM_METHOD;
Bharat saraswal84366c52016-03-23 19:40:35 +0530198import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530199import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530200import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.OF_METHOD;
Bharat saraswal84366c52016-03-23 19:40:35 +0530201import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530202import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530203import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForAddAugmentation;
Bharat saraswal8beac342016-08-04 02:00:03 +0530204import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForBuilderMethod;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530205import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForGetAugmentation;
Bharat saraswal8beac342016-08-04 02:00:03 +0530206import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForGetMethodWithAttribute;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530207import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForValidatorMethod;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530208import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530209import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
210import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
211import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
Bharat saraswal84366c52016-03-23 19:40:35 +0530212import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal97459962016-02-20 21:57:16 +0530213
214/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530215 * Represents generator for methods of generated files based on the file type.
Bharat saraswal97459962016-02-20 21:57:16 +0530216 */
217public final class MethodsGenerator {
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +0530218 private static final String BIT_NAMES_VAR = "bitNames";
219 private static final String BIT_NAME_VAR = "bitName";
Bharat saraswal97459962016-02-20 21:57:16 +0530220
Bharat saraswal97459962016-02-20 21:57:16 +0530221 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530222 * Creates an instance of method generator.
Bharat saraswal97459962016-02-20 21:57:16 +0530223 */
224 private MethodsGenerator() {
225 }
226
227 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530228 * Returns the methods strings for builder interface.
229 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530230 * @param name attribute name
Vinod Kumar S08710982016-03-03 19:55:30 +0530231 * @return method string for builder interface
Bharat saraswal97459962016-02-20 21:57:16 +0530232 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530233 public static String parseBuilderInterfaceBuildMethodString(String name) {
234 return getJavaDoc(BUILD_METHOD, name, false, null) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530235 getBuildForInterface(name);
Bharat saraswal97459962016-02-20 21:57:16 +0530236 }
237
238 /**
239 * Returns getter string.
240 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530241 * @param attr attribute info
242 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530243 * @return getter string
244 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530245 public static String getGetterString(JavaAttributeInfo attr, int genType) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530246
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530247 String returnType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530248 String attributeName = attr.getAttributeName();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530249 String appDataStructure = null;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530250 StringBuilder builder = new StringBuilder();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530251 if (attr.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530252 appDataStructure =
253 attr.getCompilerAnnotation().getYangAppDataStructure()
254 .getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530255 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530256 if (genType == GENERATE_SERVICE_AND_MANAGER) {
257 builder.append(generateForGetMethodWithAttribute(returnType))
258 .append(getGetterForInterface(
259 attributeName, returnType, attr.isListAttr(),
260 genType, attr.getCompilerAnnotation()));
261
262 return builder.toString();
Bharat saraswal8beac342016-08-04 02:00:03 +0530263 }
Vinod Kumar S08710982016-03-03 19:55:30 +0530264
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530265 builder.append(getJavaDoc(GETTER_METHOD, attributeName, attr
266 .isListAttr(), appDataStructure))
267 .append(getGetterForInterface(
268 attributeName, returnType, attr.isListAttr(),
269 genType, attr.getCompilerAnnotation()));
270
271 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530272 }
273
274 /**
275 * Returns setter string.
276 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530277 * @param attr attribute info
278 * @param className java class name
279 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530280 * @return setter string
281 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530282 public static String getSetterString(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530283 String className, int genType) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530284
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530285 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530286 String attributeName = attr.getAttributeName();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530287 JavaDocGen.JavaDocType type;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530288 StringBuilder builder = new StringBuilder();
289 if (genType == GENERATE_SERVICE_AND_MANAGER) {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530290 type = MANAGER_SETTER_METHOD;
291 } else {
292 type = SETTER_METHOD;
293 }
Bharat saraswal97459962016-02-20 21:57:16 +0530294
Vidyashree Ramab3670472016-08-06 15:49:56 +0530295 String appDataStructure = null;
296 if (attr.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530297 appDataStructure =
298 attr.getCompilerAnnotation().getYangAppDataStructure()
299 .getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530300 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530301 builder.append(getJavaDoc(type, attributeName, attr.isListAttr(),
302 appDataStructure))
303 .append(getSetterForInterface(attributeName, attrType, className,
304 attr.isListAttr(), genType,
305 attr.getCompilerAnnotation()));
306 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530307 }
308
309 /**
310 * Returns constructor method string.
311 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530312 * @param name class name
Bharat saraswal97459962016-02-20 21:57:16 +0530313 * @return constructor string
314 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530315 private static String getConstructorString(String name) {
316 return getJavaDoc(CONSTRUCTOR, name, false, null);
Bharat saraswal97459962016-02-20 21:57:16 +0530317 }
318
319 /**
320 * Returns default constructor method string.
321 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530322 * @param name class name
Bharat saraswal022dae92016-03-04 20:08:09 +0530323 * @param modifierType modifier type
Bharat saraswal97459962016-02-20 21:57:16 +0530324 * @return default constructor string
325 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530326 public static String getDefaultConstructorString(String name,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530327 String modifierType) {
328 return getJavaDoc(DEFAULT_CONSTRUCTOR, name, false, null)
Vidyashree Ramab3670472016-08-06 15:49:56 +0530329 + getDefaultConstructor(name, modifierType) + NEW_LINE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530330 }
331
332 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530333 * Returns build method string.
334 *
Bharat saraswal94844d62016-10-13 13:28:03 +0530335 * @param name class name
336 * @param isRoot true if root node
Bharat saraswal97459962016-02-20 21:57:16 +0530337 * @return build string
338 */
Bharat saraswal94844d62016-10-13 13:28:03 +0530339 public static String getBuildString(String name, boolean isRoot) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530340 return FOUR_SPACE_INDENTATION + OVERRIDE + NEW_LINE +
Bharat saraswal94844d62016-10-13 13:28:03 +0530341 getBuild(name, isRoot);
Bharat saraswal97459962016-02-20 21:57:16 +0530342 }
343
344 /**
345 * Returns the getter method strings for class file.
346 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530347 * @param attr attribute info
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530348 * @param generatedJavaFiles for the type of java file being generated
Vinod Kumar S08710982016-03-03 19:55:30 +0530349 * @return getter method for class
Bharat saraswal97459962016-02-20 21:57:16 +0530350 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530351 public static String getGetterForClass(JavaAttributeInfo attr,
352 int generatedJavaFiles) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530353
Bharat saraswal8beac342016-08-04 02:00:03 +0530354 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530355 String attributeName = attr.getAttributeName();
Bharat saraswal022dae92016-03-04 20:08:09 +0530356
357 if (!attr.isListAttr()) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530358 return getGetter(attrQualifiedType, attributeName,
359 generatedJavaFiles);
Bharat saraswal022dae92016-03-04 20:08:09 +0530360 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530361 String attrParam = getListAttribute(attrQualifiedType,
362 attr.getCompilerAnnotation());
Vidyashree Ramab3670472016-08-06 15:49:56 +0530363 return getGetter(attrParam, attributeName, generatedJavaFiles);
Bharat saraswal022dae92016-03-04 20:08:09 +0530364 }
365
366 /**
367 * Returns getter for attribute.
368 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530369 * @param type return type
370 * @param name attribute name
371 * @param genType generated java files
Bharat saraswal022dae92016-03-04 20:08:09 +0530372 * @return getter for attribute
373 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530374 static String getGetter(String type, String name, int genType) {
375 StringBuilder builder = new StringBuilder();
376 if (genType == GENERATE_SERVICE_AND_MANAGER) {
377 //Append method signature.
378 builder.append(methodSignature(getCapitalCase(name), GET,
379 PUBLIC, null, type, null,
380 CLASS_TYPE))
381 //Append method body.
382 .append(methodBody(MANAGER_METHODS, null, null,
383 EIGHT_SPACE_INDENTATION, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530384 type, false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530385 .append(signatureClose())
386 //Append method close.
387 .append(methodClose(FOUR_SPACE));
388 return builder.toString();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530389 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530390 builder.append(methodSignature(name, EMPTY_STRING,
391 PUBLIC, null, type, null,
392 CLASS_TYPE))
393 //Append method body.
394 .append(methodBody(GETTER, name, name,
395 EIGHT_SPACE_INDENTATION, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530396 type, false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530397 .append(signatureClose())
398 //Append method close.
399 .append(methodClose(FOUR_SPACE));
400 return builder.toString();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530401 }
402
Bharat saraswal97459962016-02-20 21:57:16 +0530403 /**
404 * Returns the setter method strings for class file.
405 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530406 * @param attr attribute info
407 * @param className name of the class
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530408 * @param generatedJavaFiles generated java files
Vinod Kumar S08710982016-03-03 19:55:30 +0530409 * @return setter method for class
Bharat saraswal97459962016-02-20 21:57:16 +0530410 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530411 public static String getSetterForClass(JavaAttributeInfo attr,
412 String className,
413 int generatedJavaFiles) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530414 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530415 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530416 boolean isTypeNull = false;
417 if (attr.getAttributeType() == null) {
418 isTypeNull = true;
Bharat saraswal022dae92016-03-04 20:08:09 +0530419 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530420 if (!attr.isListAttr()) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530421 return getSetter(className, attributeName, attrQualifiedType,
422 generatedJavaFiles, isTypeNull, false);
Bharat saraswal8beac342016-08-04 02:00:03 +0530423 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530424 String attrParam = getListAttribute(attrQualifiedType,
425 attr.getCompilerAnnotation());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530426 return getSetter(className, attributeName, attrParam,
427 generatedJavaFiles, isTypeNull, true);
Bharat saraswal022dae92016-03-04 20:08:09 +0530428 }
429
430 /**
431 * Returns setter for attribute.
432 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530433 * @param className class name
434 * @param name attribute name
435 * @param type return type
436 * @param isTypeNull if attribute type is null
437 * @param isList true if leaf-list
Bharat saraswal022dae92016-03-04 20:08:09 +0530438 * @return setter for attribute
439 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530440 private static String getSetter(String className, String name, String type,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530441 int genType,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530442 boolean isTypeNull, boolean isList) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530443 StringBuilder builder = new StringBuilder();
444 if (genType == GENERATE_SERVICE_AND_MANAGER) {
445 //Append method signature.
446 builder.append(methodSignature(getCapitalCase(name),
447 SET_METHOD_PREFIX,
448 PUBLIC, name, VOID, type,
449 CLASS_TYPE))
450 //Append method body.
451 .append(methodBody(MANAGER_METHODS, null, null,
452 EIGHT_SPACE_INDENTATION, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530453 false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530454 .append(methodClose(FOUR_SPACE));
455 return builder.toString();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530456 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530457 if (genType == GENERATE_EVENT_SUBJECT_CLASS) {
458 builder.append(methodSignature(name, EMPTY_STRING, PUBLIC, name, VOID,
459 type, CLASS_TYPE))
Bharat saraswal8beac342016-08-04 02:00:03 +0530460
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530461 //Append method body.
462 .append(methodBody(SETTER, name, name,
463 EIGHT_SPACE_INDENTATION, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530464 false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530465 .append(methodClose(FOUR_SPACE));
466 return builder.toString();
467 }
468 builder.append(methodSignature(name, EMPTY_STRING,
469 PUBLIC, name, getCapitalCase(className) +
470 BUILDER, type, CLASS_TYPE));
471 if (!isTypeNull && !isList) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530472 builder.append(getValueLeafSetString(name));
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530473 } else {
474 builder.append(EMPTY_STRING);
475 }
476 //Append method body.
477 builder.append(methodBody(SETTER, name, name,
478 EIGHT_SPACE_INDENTATION, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530479 true, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530480 //Append method close.
481 .append(methodClose(FOUR_SPACE));
482 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530483 }
484
485 /**
Bharat saraswal022dae92016-03-04 20:08:09 +0530486 * Returns the setter method strings for class file.
487 *
488 * @param attr attribute info
489 * @return setter method for class
490 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530491 static String getSetterForTypeDefClass(JavaAttributeInfo attr) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530492
Bharat saraswal8beac342016-08-04 02:00:03 +0530493 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530494 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530495 return getTypeDefSetter(attrQualifiedType, attributeName);
Bharat saraswal022dae92016-03-04 20:08:09 +0530496 }
497
498 /**
499 * Returns type def's setter for attribute.
500 *
501 * @param type data type
502 * @param name attribute name
503 * @return setter for type def's attribute
504 */
505 private static String getTypeDefSetter(String type, String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530506 return methodSignature(getCapitalCase(name), SET_METHOD_PREFIX, PUBLIC,
507 name, VOID, type, CLASS_TYPE) +
508 methodBody(SETTER, name, name, EIGHT_SPACE_INDENTATION, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530509 null, false, null) + methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530510 }
511
512 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530513 * Returns the getter method strings for interface file.
514 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530515 * @param yangName name of the attribute
516 * @param returnType return type of attribute
517 * @param isList is list attribute
518 * @param genType generated java files
519 * @param annotation compiler annotation
Vinod Kumar S08710982016-03-03 19:55:30 +0530520 * @return getter method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530521 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530522 static String getGetterForInterface(String yangName, String returnType,
523 boolean isList,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530524 int genType,
525 YangCompilerAnnotation annotation) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530526 if (!isList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530527 return getGetterInterfaceString(returnType, yangName,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530528 genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530529 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530530 String listAttr = getListAttribute(returnType, annotation);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530531 return getGetterInterfaceString(listAttr, yangName, genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530532 }
533
534 /**
535 * Returns getter for attribute in interface.
536 *
537 * @param returnType return type
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530538 * @param yangName attribute name
Bharat saraswal022dae92016-03-04 20:08:09 +0530539 * @return getter for interface
540 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530541 private static String getGetterInterfaceString(String returnType,
542 String yangName,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530543 int genType) {
544 switch (genType) {
545 case GENERATE_SERVICE_AND_MANAGER:
546 return getGetMethodWithArgument(returnType, yangName);
547 default:
548 return methodSignature(yangName, EMPTY_STRING, null,
549 null, returnType, null, INTERFACE_TYPE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530550 }
Bharat saraswal97459962016-02-20 21:57:16 +0530551 }
552
553 /**
554 * Returns the setter method strings for interface file.
555 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530556 * @param attrName name of the attribute
557 * @param attrType return type of attribute
558 * @param className name of the java class being generated
559 * @param isList is list attribute
560 * @param genType generated java files
561 * @param annotation compiler annotations
Vinod Kumar S08710982016-03-03 19:55:30 +0530562 * @return setter method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530563 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530564 static String getSetterForInterface(String attrName, String attrType,
565 String className,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530566 boolean isList, int genType,
567 YangCompilerAnnotation annotation) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530568 if (!isList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530569 return getSetterInterfaceString(className, attrName, attrType,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530570 genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530571 }
Vidyashree Ramab3670472016-08-06 15:49:56 +0530572
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530573 String listAttr = getListAttribute(attrType, annotation);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530574 return getSetterInterfaceString(className, attrName, listAttr, genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530575 }
576
577 /**
578 * Returns setter string for interface.
579 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530580 * @param name class name
581 * @param attrName attribute name
582 * @param attrType attribute type
Bharat saraswal022dae92016-03-04 20:08:09 +0530583 * @return setter string
584 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530585 private static String getSetterInterfaceString(String name,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530586 String attrName,
587 String attrType,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530588 int genType) {
589 if (genType == GENERATE_SERVICE_AND_MANAGER) {
590 return methodSignature(getCapitalCase(attrName),
591 SET_METHOD_PREFIX,
592 null, attrName, VOID, attrType +
593 OP_PARAM, INTERFACE_TYPE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530594 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530595 return methodSignature(attrName, EMPTY_STRING, null,
596 attrName, name + BUILDER, attrType, INTERFACE_TYPE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530597 }
598
599 /**
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530600 * Returns return type for attribute.
601 *
602 * @param attr attribute info
603 * @return return type
604 */
605 private static String getReturnType(JavaAttributeInfo attr) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530606 String returnType;
607 StringBuilder builder = new StringBuilder();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530608 if (attr.isQualifiedName() &&
609 attr.getImportInfo().getPkgInfo() != null) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530610 returnType = attr.getImportInfo().getPkgInfo() + PERIOD;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530611 builder.append(returnType);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530612 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530613 returnType = attr.getImportInfo().getClassInfo();
614 builder.append(returnType);
615 return builder.toString();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530616 }
617
618 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530619 * Returns the build method strings for interface file.
620 *
Vinod Kumar S08710982016-03-03 19:55:30 +0530621 * @param yangName name of the interface
622 * @return build method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530623 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530624 static String getBuildForInterface(String yangName) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530625 return methodSignature(BUILD, EMPTY_STRING, null, null,
626 yangName, null, INTERFACE_TYPE);
Bharat saraswal97459962016-02-20 21:57:16 +0530627 }
628
629 /**
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530630 * Returns constructor string for impl class.
631 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530632 * @param yangName class name
633 * @param isRootNode if root node
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530634 * @return constructor string
635 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530636 static String getConstructorStart(String yangName,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530637 boolean isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530638 StringBuilder builder = new StringBuilder(
639 getConstructorString(yangName));
Bharat saraswal8beac342016-08-04 02:00:03 +0530640
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530641 String name = getCapitalCase(yangName);
642 String returnType = DEFAULT_CAPS + name;
Bharat saraswal8beac342016-08-04 02:00:03 +0530643 if (isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530644 returnType = name + OP_PARAM;
Bharat saraswal8beac342016-08-04 02:00:03 +0530645 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530646 builder.append(methodSignature(
647 returnType, EMPTY_STRING, PROTECTED, BUILDER_LOWER_CASE + OBJECT,
648 null, name + BUILDER, CLASS_TYPE));
649 return builder.toString();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530650 }
651
652 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530653 * Returns the constructor strings for class file.
654 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530655 * @param attr attribute info
656 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530657 * @return constructor for class
658 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530659 public static String getConstructor(JavaAttributeInfo attr, int genType) {
660 String attrName = attr.getAttributeName();
661 String attrCaps = getCapitalCase(attrName);
662 switch (genType) {
663 case GENERATE_SERVICE_AND_MANAGER:
664 return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
665 attrCaps, EIGHT_SPACE_INDENTATION, GET, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530666 false, null);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530667 default:
668 return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
669 attrName, EIGHT_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530670 null, false, null);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530671 }
Bharat saraswal97459962016-02-20 21:57:16 +0530672 }
673
674 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530675 * Returns the rpc strings for service interface.
676 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530677 * @param rpcName name of the rpc
678 * @param input name of input
679 * @param output name of output
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530680 * @return rpc method string
681 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530682 public static String getRpcServiceMethod(String rpcName, String input,
683 String output) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530684 String inputVal = input == null ? null : RPC_INPUT_VAR_NAME;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530685 return methodSignature(rpcName, EMPTY_STRING, null,
686 inputVal, output, input, INTERFACE_TYPE) +
687 NEW_LINE;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530688 }
689
690 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530691 * Returns the build method strings for class file.
692 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530693 * @param yangName class name
694 * @param isRootNode if root node
Vinod Kumar S08710982016-03-03 19:55:30 +0530695 * @return build method string for class
Bharat saraswal97459962016-02-20 21:57:16 +0530696 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530697 static String getBuild(String yangName, boolean isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530698 String type = DEFAULT_CAPS + yangName;
Bharat saraswal8beac342016-08-04 02:00:03 +0530699 if (isRootNode) {
700 type = yangName + OP_PARAM;
701 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530702 return methodSignature(BUILD, EMPTY_STRING, PUBLIC, null,
703 yangName, null,
704 CLASS_TYPE) +
705 methodBody(MethodBodyTypes.BUILD, type, BUILD,
706 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530707 null, false, null) +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530708 methodClose(FOUR_SPACE);
Bharat saraswal97459962016-02-20 21:57:16 +0530709 }
710
711 /**
712 * Returns the Default constructor strings for class file.
713 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530714 * @param name name of the class
Bharat saraswal022dae92016-03-04 20:08:09 +0530715 * @param modifierType modifier type for default constructor
Bharat saraswal97459962016-02-20 21:57:16 +0530716 * @return Default constructor for class
717 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530718 private static String getDefaultConstructor(String name,
719 String modifierType) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530720 return methodSignature(name, EMPTY_STRING, modifierType, null,
721 null, null, CLASS_TYPE) +
722 methodClose(FOUR_SPACE);
Bharat saraswal97459962016-02-20 21:57:16 +0530723 }
724
Bharat saraswal022dae92016-03-04 20:08:09 +0530725 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530726 * Returns to string method's open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530727 *
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530728 * @return string method's open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530729 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530730 static String getToStringMethodOpen() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530731 StringBuilder builder = new StringBuilder(getOverRideString());
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530732 builder.append(methodSignature(TO_STRING_METHOD, EMPTY_STRING,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530733 PUBLIC, null, STRING_DATA_TYPE, null,
734 CLASS_TYPE));
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530735 builder.append(getReturnString(GOOGLE_MORE_OBJECT_METHOD_STRING,
736 EIGHT_SPACE_INDENTATION)).append(NEW_LINE)
737 .append(getOmitNullValueString());
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530738 return builder.toString();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530739 }
740
741 /**
742 * Returns to string method's close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530743 *
744 * @return to string method close string
745 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530746 static String getToStringMethodClose() {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530747 return TWELVE_SPACE_INDENTATION + PERIOD + TO_STRING_METHOD +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530748 brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
749 methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530750 }
751
752 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530753 * Returns to string method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +0530754 *
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530755 * @param attr java attribute
756 * @return to string method for class
Bharat saraswal022dae92016-03-04 20:08:09 +0530757 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530758 public static String getToStringMethod(JavaAttributeInfo attr) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530759 return methodBody(TO_STRING, attr.getAttributeName(), null,
760 TWELVE_SPACE_INDENTATION, null, null, false, null);
Bharat saraswal022dae92016-03-04 20:08:09 +0530761 }
762
763 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530764 * Returns from string method's open string.
765 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530766 * @param className name of the class
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530767 * @return from string method's open string
768 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530769 static String getFromStringMethodSignature(String className) {
770 return getJavaDoc(FROM_METHOD, className, false, null) +
771 methodSignature(FROM_STRING_METHOD_NAME, EMPTY_STRING, PUBLIC +
772 SPACE + STATIC, FROM_STRING_PARAM_NAME,
773 className, STRING_DATA_TYPE,
774 CLASS_TYPE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530775 }
776
777 /**
778 * Return from string method's close string.
779 *
780 * @return from string method's close string
781 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530782 static String getFromStringMethodClose() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530783 return getReturnString(NULL, EIGHT_SPACE_INDENTATION) +
784 signatureClose() + methodClose(FOUR_SPACE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530785 }
786
787 /**
788 * Return from string method's body string.
789 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530790 * @param attr attribute info
791 * @param fromAttr attribute info for the from string wrapper
792 * type
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530793 * @param name class name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530794 * @return from string method's body string
795 */
796 public static String getFromStringMethod(JavaAttributeInfo attr,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530797 JavaAttributeInfo fromAttr, String name) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530798
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530799 return EIGHT_SPACE_INDENTATION + getTrySubString() +
800 getNewLineAndSpace(TWELVE_SPACE_INDENTATION) +
801 getParsedSubString(attr, fromAttr, name) +
802 getReturnOfSubString() + EIGHT_SPACE_INDENTATION +
803 getCatchSubString() +
804 getNewLineAndSpace(EIGHT_SPACE_INDENTATION) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530805 CLOSE_CURLY_BRACKET;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530806 }
807
808 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530809 * Returns sub string with parsed statement for union's from string method.
810 *
811 * @param attr attribute info
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530812 * @param name class name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530813 * @return sub string with parsed statement for union's from string method
814 */
815 private static String getParsedSubString(JavaAttributeInfo attr,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530816 JavaAttributeInfo fromStringAttr, String name) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530817
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530818 String targetDataType = getReturnType(attr);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530819 YangDataTypes types = fromStringAttr.getAttributeType()
820 .getDataType();
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530821 StringBuilder method = new StringBuilder();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530822 switch (types) {
823 case BITS:
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530824 return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL +
825 SPACE + getCapitalCase(name) + getCapitalCase(attr.getAttributeName()) +
826 PERIOD + FROM_STRING_METHOD_NAME +
827 brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
828 FROM_STRING_PARAM_NAME, null) + signatureClose();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530829 case BINARY:
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530830 return method.append(targetDataType).append(SPACE).append(TMP_VAL)
831 .append(SPACE).append(EQUAL).append(SPACE).append(
832 geStringConverterForBinary(FROM_STRING_PARAM_NAME))
833 .append(signatureClose()).toString();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530834 default:
835 return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530836 SPACE + getParseFromStringMethod(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530837 targetDataType, fromStringAttr.getAttributeType()) +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530838 brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
839 FROM_STRING_PARAM_NAME, null) + signatureClose();
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530840 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530841 }
842
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530843 /**
Bharat saraswal94844d62016-10-13 13:28:03 +0530844 * Returns from string converter for binary type.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530845 *
846 * @param var variable name
847 * @return to string method body
848 */
849 private static String geStringConverterForBinary(String var) {
850 StringBuilder builder = new StringBuilder();
851 return builder.append(BASE64).append(PERIOD)
852 .append(GET_DECODER).append(OPEN_CLOSE_BRACKET_STRING).append(PERIOD)
853 .append(DECODE).append(brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
854 var, null)).toString();
855 }
856
857 /**
Bharat saraswal94844d62016-10-13 13:28:03 +0530858 * Returns to string converter for binary type.
859 *
860 * @param var variable name
861 * @return to string method body
862 */
863 private static String getToStringForBinary(String var) {
864 StringBuilder builder = new StringBuilder();
865 return builder.append(BASE64).append(PERIOD)
866 .append(GET_ENCODER).append(OPEN_CLOSE_BRACKET_STRING)
867 .append(PERIOD).append(ENCODE_TO_STRING)
868 .append(brackets(OPEN_CLOSE_BRACKET_WITH_VALUE, var, null))
869 .toString();
870 }
871
872 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530873 * Returns hash code method open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530874 *
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530875 * @return hash code method open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530876 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530877 static String getHashCodeMethodOpen() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530878 String line;
879 StringBuilder builder = new StringBuilder(getOverRideString());
880 builder.append(methodSignature(HASH_CODE_STRING, EMPTY_STRING, PUBLIC,
881 null, INT, null, CLASS_TYPE));
882 line = getReturnString(OBJECT_STRING + SUFFIX_S + PERIOD + HASH +
883 OPEN_PARENTHESIS, EIGHT_SPACE_INDENTATION);
884 builder.append(line);
885 return builder.toString();
Bharat saraswal022dae92016-03-04 20:08:09 +0530886 }
887
888 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530889 * Returns hash code methods close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530890 *
891 * @param hashcodeString hash code string
892 * @return to hash code method close string
893 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530894 static String getHashCodeMethodClose(String hashcodeString) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530895 String[] array = {SPACE, COMMA};
896 hashcodeString = trimAtLast(hashcodeString, array);
897 return hashcodeString + CLOSE_PARENTHESIS + signatureClose() +
898 methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530899 }
900
901 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530902 * Returns hash code method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +0530903 *
904 * @param attr attribute info
905 * @return hash code method
906 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530907 public static String getHashCodeMethod(JavaAttributeInfo attr) {
janani b703cfe42016-05-17 13:12:22 +0530908 return attr.getAttributeName() + COMMA + SPACE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530909 }
910
911 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530912 * Returns equals method open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530913 *
914 * @param className class name
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530915 * @return equals method open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530916 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530917 static String getEqualsMethodOpen(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530918 return getOverRideString() +
919 methodSignature(EQUALS_STRING, EMPTY_STRING, PUBLIC, OBJ,
920 BOOLEAN_DATA_TYPE, OBJECT_STRING,
921 CLASS_TYPE) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530922 getEqualsMethodsCommonIfCondition() +
923 getEqualsMethodsSpecificIfCondition(className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530924 }
925
926 /**
927 * Returns equal methods if condition string.
928 *
929 * @return if condition string
930 */
931 private static String getEqualsMethodsCommonIfCondition() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530932 return getIfConditionBegin(EIGHT_SPACE_INDENTATION, THIS + SPACE +
933 EQUAL + EQUAL + SPACE + OBJ) + getReturnString(
934 TRUE, TWELVE_SPACE_INDENTATION) + signatureClose()
935 + methodClose(EIGHT_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530936 }
937
938 /**
939 * Returns if condition for specific class object in equals method.
940 *
941 * @param className class name
942 * @return if condition string
943 */
944 private static String getEqualsMethodsSpecificIfCondition(String className) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530945 return EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + OBJ +
946 INSTANCE_OF + className + CLOSE_PARENTHESIS + SPACE +
947 OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION +
948 className + SPACE + OTHER + SPACE + EQUAL + SPACE +
949 OPEN_PARENTHESIS + className + CLOSE_PARENTHESIS + SPACE + OBJ +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530950 SEMI_COLON + NEW_LINE + TWELVE_SPACE_INDENTATION + RETURN +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530951 NEW_LINE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530952 }
953
954 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530955 * Returns equals methods close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530956 *
957 * @param equalMethodString equal method string
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530958 * @return equals method close string
Bharat saraswal022dae92016-03-04 20:08:09 +0530959 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530960 static String getEqualsMethodClose(String equalMethodString) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530961 String[] array = {NEW_LINE, AND, AND, SPACE};
962 equalMethodString = trimAtLast(equalMethodString, array) +
963 signatureClose();
964 return equalMethodString + methodClose(EIGHT_SPACE) +
965 getReturnString(FALSE, EIGHT_SPACE_INDENTATION) +
966 signatureClose() + methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530967 }
968
969 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530970 * Returns equals method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +0530971 *
972 * @param attr attribute info
973 * @return equals method
974 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530975 public static String getEqualsMethod(JavaAttributeInfo attr) {
janani b703cfe42016-05-17 13:12:22 +0530976 String attributeName = attr.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530977 return SIXTEEN_SPACE_INDENTATION + OBJECT_STRING + SUFFIX_S +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530978 PERIOD + EQUALS_STRING + OPEN_PARENTHESIS + attributeName +
979 COMMA + SPACE + OTHER + PERIOD + attributeName +
980 CLOSE_PARENTHESIS + SPACE + AND + AND;
Bharat saraswal022dae92016-03-04 20:08:09 +0530981 }
982
983 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530984 * Returns of method's string and java doc for special type.
985 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530986 * @param attr attribute info
987 * @param className class name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530988 * @return of method's string and java doc for special type
989 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530990 public static String getOfMethodStringAndJavaDoc(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530991 String className) {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530992 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530993 String attrName = attr.getAttributeName();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530994
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530995 return getJavaDoc(OF_METHOD, className + FOR_TYPE_STRING + attrName,
996 false, null) + getOfMethodString(attrType, className);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530997 }
998
999 /**
1000 * Returns of method's string.
1001 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301002 * @param type data type
1003 * @param name class name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301004 * @return of method's string
1005 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301006 private static String getOfMethodString(String type, String name) {
1007 return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE + STATIC,
1008 VALUE, name, type, CLASS_TYPE) +
1009 methodBody(MethodBodyTypes.OF_METHOD, name, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301010 EIGHT_SPACE_INDENTATION, EMPTY_STRING, null, false, null) +
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301011 methodClose(FOUR_SPACE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301012 }
1013
1014 /**
1015 * Returns string and java doc for constructor of type class.
1016 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301017 * @param attr attribute info
1018 * @param className class name
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301019 * @param genType generate file type
1020 * @param count type count
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301021 * @return string and java doc for constructor of type class
1022 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301023 public static String getTypeConstructorStringAndJavaDoc(
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301024 JavaAttributeInfo attr, String className, int genType, int count) {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301025 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +05301026 String attrName = attr.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301027 return getJavaDoc(TYPE_CONSTRUCTOR, attrName, false, null) +
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301028 getTypeConstructorString(attrType, attrName, className,
1029 genType, count);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301030 }
1031
1032 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301033 * Returns string and java doc for constructor of type class.
1034 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301035 * @param attr1 first attribute info
1036 * @param attr2 second attribute info
1037 * @param genType class name
1038 * @param type conflict validate type
1039 * @param addFirst whether int came first or uInt came first
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301040 * @param count type count
Bharat saraswal64e7e232016-07-14 23:33:55 +05301041 * @return string and java doc for constructor of type class
1042 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301043 public static String getTypeConstructorStringAndJavaDoc(
1044 JavaAttributeInfo attr1, JavaAttributeInfo attr2, String genType,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301045 ValidatorTypeForUnionTypes type, boolean addFirst, int count) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301046
Bharat saraswal64e7e232016-07-14 23:33:55 +05301047 String attrType = getReturnType(attr1);
1048 String attrName1 = "";
1049 String attrName2 = "";
1050 if (attr1 != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301051 if (addFirst) {
1052 attrName1 = attr1.getAttributeName();
1053 } else {
1054 attrName2 = attr1.getAttributeName();
1055 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301056 }
1057 if (attr2 != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301058 if (addFirst) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301059 attrName2 = attr2.getAttributeName();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301060 } else {
1061 attrName1 = attr2.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301062 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301063 }
1064
Vidyashree Ramab3670472016-08-06 15:49:56 +05301065 String appDataStructure = null;
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301066 if (attr1 != null && attr1.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301067 appDataStructure =
1068 attr1.getCompilerAnnotation().getYangAppDataStructure()
1069 .getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +05301070 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301071 String doc;
1072 if (attrName1.isEmpty()) {
1073 doc = attrName2;
1074 } else {
1075 doc = attrName1;
1076 }
1077 return getJavaDoc(TYPE_CONSTRUCTOR, doc, false, appDataStructure) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301078 getTypeConstructorString(attrType, attrName1,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301079 attrName2, genType,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301080 type, addFirst, count);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301081 }
1082
1083 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301084 * Returns type constructor string.
1085 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301086 * @param type data type
1087 * @param name attribute name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301088 * @param className class name
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301089 * @param genType generated file type
1090 * @param count type count
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301091 * @return type constructor string
1092 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301093 private static String getTypeConstructorString(String type, String name,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301094 String className, int genType, int count) {
1095 StringBuilder builder = new StringBuilder();
1096 builder.append(
1097 methodSignature(className, EMPTY_STRING, PUBLIC, name,
1098 null, type, CLASS_TYPE));
1099 if (genType == GENERATE_UNION_CLASS) {
1100 builder.append(EIGHT_SPACE_INDENTATION).append(SET_VALUE_PARA)
1101 .append(PERIOD).append(SET_METHOD_PREFIX).append(
1102 brackets(OPEN_CLOSE_BRACKET_WITH_VALUE, count + EMPTY_STRING,
1103 null)).append(signatureClose());
1104 }
1105 builder.append(methodBody(SETTER, name, null, EIGHT_SPACE_INDENTATION,
1106 EMPTY_STRING, null, false, null))
1107 .append(methodClose(FOUR_SPACE));
1108 return builder.toString();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301109 }
1110
1111 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301112 * Returns type constructor string.
1113 *
1114 * @param type data type
1115 * @param attr1 attribute attr1
1116 * @param className class attr1
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301117 * @param count type count
Bharat saraswal64e7e232016-07-14 23:33:55 +05301118 * @return type constructor string
1119 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301120 private static String getTypeConstructorString(
1121 String type, String attr1, String attr2, String className,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301122 ValidatorTypeForUnionTypes validatorType, boolean addInt, int count) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301123 StringBuilder constructor = new StringBuilder(
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301124 methodSignature(className, EMPTY_STRING, PUBLIC, attr1,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301125 null, type, CLASS_TYPE))
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301126 .append(EIGHT_SPACE_INDENTATION).append(SET_VALUE_PARA)
1127 .append(PERIOD).append(SET_METHOD_PREFIX).append(
1128 brackets(OPEN_CLOSE_BRACKET_WITH_VALUE, count + EMPTY_STRING,
1129 null)).append(signatureClose())
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301130 .append(ifConditionForIntInTypeDefConstructor(validatorType,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301131 addInt, attr1))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301132 .append(methodBody(SETTER, attr1, null,
1133 TWELVE_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301134 null, false, attr1));
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301135 String str = EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE +
1136 ELSE + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
1137 constructor.append(str)
1138 .append(methodBody(SETTER, attr2, null,
1139 TWELVE_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301140 null, false, attr1))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301141 .append(methodClose(FOUR_SPACE))
1142 .append(methodClose(EIGHT_SPACE));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301143
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301144 return constructor.toString();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301145 }
1146
1147 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301148 * Returns interface of add augmentation.
1149 *
Bharat saraswal94844d62016-10-13 13:28:03 +05301150 * @param className class name
Bharat saraswal8beac342016-08-04 02:00:03 +05301151 * @return interface of add augmentation
1152 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301153 static String getAddAugmentInfoMethodInterface(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301154 StringBuilder builder = new StringBuilder(generateForAddAugmentation());
1155 LinkedHashMap<String, String> map = new LinkedHashMap<>();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301156 map.put(VALUE, OBJECT_STRING);
1157 map.put(CLASS + OBJECT_STRING, CLASS_STRING);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301158 builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
1159 EMPTY_STRING, EMPTY_STRING,
Bharat saraswal94844d62016-10-13 13:28:03 +05301160 className, map, INTERFACE_TYPE));
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301161 return builder.toString();
Bharat saraswal8beac342016-08-04 02:00:03 +05301162 }
1163
1164 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +05301165 * Returns implementation of add augmentation.
1166 *
Bharat saraswal94844d62016-10-13 13:28:03 +05301167 * @param className class name
Bharat saraswalaf413b82016-07-14 15:18:20 +05301168 * @return implementation of add augmentation
1169 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301170 static String getAddAugmentInfoMethodImpl(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301171 StringBuilder builder = new StringBuilder(getOverRideString());
1172 LinkedHashMap<String, String> map = new LinkedHashMap<>();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301173 map.put(VALUE, OBJECT_STRING);
1174 map.put(CLASS + OBJECT_STRING, CLASS_STRING);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301175 builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
1176 EMPTY_STRING, PUBLIC,
Bharat saraswal94844d62016-10-13 13:28:03 +05301177 className, map, CLASS_TYPE))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301178 .append(methodBody(AUGMENTED_MAP_ADD, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301179 EIGHT_SPACE_INDENTATION, null, null, false, null))
Bharat saraswal94844d62016-10-13 13:28:03 +05301180 .append(getReturnString(THIS, EIGHT_SPACE_INDENTATION))
1181 .append(signatureClose())
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301182 .append(methodClose(FOUR_SPACE))
1183 .append(NEW_LINE);
1184 return builder.toString();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301185 }
1186
1187 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301188 * Returns interface of get YANG augment info.
Bharat saraswalaf413b82016-07-14 15:18:20 +05301189 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301190 * @return interface of get YANG augment info
Bharat saraswalaf413b82016-07-14 15:18:20 +05301191 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301192 static String getYangAugmentInfoInterface() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301193 return generateForGetAugmentation() +
1194 methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE, EMPTY_STRING,
1195 null, CLASS + OBJECT_STRING,
1196 OBJECT_STRING, CLASS_STRING, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301197 }
Bharat saraswalaf413b82016-07-14 15:18:20 +05301198
Bharat saraswal8beac342016-08-04 02:00:03 +05301199 /**
1200 * Returns implementation of get YANG augment info.
1201 *
1202 * @return implementation of get YANG augment info
1203 */
1204 static String getYangAugmentInfoImpl() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301205 return getOverRideString() +
1206 methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE, EMPTY_STRING,
1207 PUBLIC, CLASS + OBJECT_STRING, OBJECT_STRING,
1208 CLASS_STRING, CLASS_TYPE) +
1209 methodBody(AUGMENTED_MAP_GET_VALUE, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301210 EIGHT_SPACE_INDENTATION, null, null, false, null) +
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301211 methodClose(FOUR_SPACE);
Bharat saraswalaf413b82016-07-14 15:18:20 +05301212 }
1213
1214 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301215 * Returns enum's constructor.
1216 *
1217 * @param className enum's class name
1218 * @return enum's constructor
1219 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301220 static String getEnumsConstructor(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301221 StringBuilder builder = new StringBuilder();
1222 String clsName = getSmallCase(className);
1223 LinkedHashMap<String, String> map = new LinkedHashMap<>();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301224 map.put(clsName, INT);
1225 map.put(SCHEMA_NAME, STRING_DATA_TYPE);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301226 builder.append(multiAttrMethodSignature(className, EMPTY_STRING,
1227 EMPTY_STRING, null,
1228 map, CLASS_TYPE))
1229 .append(methodBody(SETTER, clsName, EMPTY_STRING,
1230 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301231 EMPTY_STRING, false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301232 .append(methodBody(SETTER, SCHEMA_NAME, EMPTY_STRING,
1233 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301234 EMPTY_STRING, false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301235 .append(methodClose(FOUR_SPACE));
1236
1237 return builder.toString();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301238 }
Bharat saraswal250a7472016-05-12 13:16:57 +05301239
1240 /**
1241 * Returns of method for enum class.
1242 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301243 * @param className class name
1244 * @param type method body type
Bharat saraswal250a7472016-05-12 13:16:57 +05301245 * @return of method
1246 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301247 static String getEnumsOfValueMethod(String className,
1248 YangEnumeration enumeration,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301249 MethodBodyTypes type) {
1250 String name = getCapitalCase(className);
1251 StringBuilder builder = new StringBuilder(getJavaDoc(
1252 OF_METHOD, name + SPACE + FOR,
1253 false, null));
1254 //Switch statement.
1255 String sw = EIGHT_SPACE_INDENTATION + SWITCH + SPACE + brackets(
1256 OPEN_CLOSE_BRACKET_WITH_VALUE, VALUE, null) +
1257 methodSignatureClose(CLASS_TYPE);
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301258 String str;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301259 switch (type) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301260 case ENUM_METHOD_INT_VALUE:
1261 builder.append(getEnumValueMethodSignature(name, INT))
1262 .append(sw);
1263 for (YangEnum yangEnum : enumeration.getEnumSet()) {
1264 str = getEnumJavaAttribute(yangEnum.getNamedValue())
1265 .toUpperCase();
1266 builder.append(getEnumValueMethodCases(
1267 EMPTY_STRING + yangEnum.getValue(), str, name));
1268 }
1269 break;
1270 case ENUM_METHOD_STRING_VALUE:
1271 builder.append(getEnumValueMethodSignature(name,
1272 STRING_DATA_TYPE))
1273 .append(sw);
1274 for (YangEnum yangEnum : enumeration.getEnumSet()) {
1275 str = getEnumJavaAttribute(yangEnum.getNamedValue())
1276 .toUpperCase();
1277 builder.append(getEnumValueMethodCases(
1278 QUOTES + yangEnum.getNamedValue() + QUOTES, str,
1279 name));
1280 }
1281 break;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301282 default:
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301283 return null;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301284 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301285
1286 String method = TWELVE_SPACE_INDENTATION + DEFAULT + SPACE + COLON +
1287 NEW_LINE;
1288 builder.append(method)
1289 .append(getReturnString(NULL, SIXTEEN_SPACE_INDENTATION))
1290 .append(signatureClose())
1291 .append(methodClose(EIGHT_SPACE))
1292 .append(methodClose(FOUR_SPACE));
1293
1294 return builder.toString();
1295 }
1296
1297 /**
1298 * Returns enum value method signature.
1299 *
1300 * @param name method name
1301 * @param type param type
1302 * @return enum value method signature
1303 */
1304 private static String getEnumValueMethodSignature(String name, String type) {
1305 return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE +
1306 STATIC, VALUE, name, type, CLASS_TYPE);
1307 }
1308
1309 /**
1310 * Returns enum value method's cases.
1311 *
1312 * @param caseType case type
1313 * @param value return value
1314 * @param name name of class
1315 * @return enum value method's cases
1316 */
1317 private static String getEnumValueMethodCases(String caseType, String value,
1318 String name) {
1319 return TWELVE_SPACE_INDENTATION + CASE + SPACE + caseType +
1320 COLON + NEW_LINE + getReturnString(name,
1321 SIXTEEN_SPACE_INDENTATION) +
1322 PERIOD + value + signatureClose();
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301323 }
Bharat saraswald14cbe82016-07-14 13:26:18 +05301324
1325 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +05301326 * Returns augmented data getter and setter methods for service class.
1327 *
1328 * @param parent parent node
1329 * @return augmented data getter and setter methods for service class
1330 */
Bharat saraswal039f59c2016-07-14 21:57:13 +05301331 static String getAugmentsDataMethodForService(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +05301332 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
Bharat saraswal94844d62016-10-13 13:28:03 +05301333 if (targets.isEmpty()) {
1334 return EMPTY_STRING;
1335 }
1336 YangNode first = targets.get(0).getResolvedNode();
1337 //If target path is for notification then no need to generate get/set
1338 // for that augment in service class.
1339 if (first instanceof YangNotification) {
1340 return EMPTY_STRING;
1341 }
Bharat saraswalaf413b82016-07-14 15:18:20 +05301342 YangNode augmentedNode;
1343 String curNodeName;
1344 String method;
1345 StringBuilder methods = new StringBuilder();
1346 String parentName;
1347 String returnType;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301348 YangNode methodNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301349 YangPluginConfig pluginConfig =
1350 ((JavaFileInfoContainer) parent).getJavaFileInfo()
1351 .getPluginConfig();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301352 for (YangAtomicPath nodeId : targets) {
Bharat saraswal039f59c2016-07-14 21:57:13 +05301353 augmentedNode = nodeId.getResolvedNode().getParent();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301354 methodNode = nodeId.getResolvedNode();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301355 if (((JavaFileInfoContainer) methodNode).getJavaFileInfo()
1356 .getJavaName() != null) {
1357 curNodeName =
1358 ((JavaFileInfoContainer) methodNode).getJavaFileInfo()
1359 .getJavaName();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301360 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301361 curNodeName = getCapitalCase(
1362 getCamelCase(methodNode.getName(),
1363 pluginConfig.getConflictResolver()));
Bharat saraswalaf413b82016-07-14 15:18:20 +05301364 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301365 returnType =
1366 getAugmentedClassNameForDataMethods(augmentedNode, parent);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301367 parentName = getCurNodeName(augmentedNode,
1368 pluginConfig);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301369 method = generateForGetMethodWithAttribute(returnType) +
1370 getGetMethodWithArgument(returnType, AUGMENTED +
1371 parentName + getCapitalCase(curNodeName)) + NEW_LINE;
Bharat saraswalaf413b82016-07-14 15:18:20 +05301372 methods.append(method);
1373
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301374 method = getJavaDoc(MANAGER_SETTER_METHOD,
1375 AUGMENTED + getCapitalCase(parentName) +
1376 getCapitalCase(curNodeName), false,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301377 null) +
Bharat saraswalaf413b82016-07-14 15:18:20 +05301378 getSetterForInterface(getSmallCase(AUGMENTED) + parentName +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301379 getCapitalCase(curNodeName),
1380 returnType, parentName, false,
1381 GENERATE_SERVICE_AND_MANAGER, null) +
1382 NEW_LINE;
Bharat saraswalaf413b82016-07-14 15:18:20 +05301383 methods.append(method);
1384 }
1385 return methods.toString();
1386 }
1387
1388 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301389 * Returns validator method for range in union class.
1390 *
1391 * @param type type
1392 * @return validator method for range in union class
1393 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301394 static String getRangeValidatorMethodForUnion(String type) {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301395 String newType;
1396 if (type.contentEquals(BIG_INTEGER)) {
1397 newType = LONG;
1398 } else {
1399 newType = INT;
1400 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301401 StringBuilder builder = new StringBuilder(generateForValidatorMethod());
1402 String var = getSmallCase(BIG_INTEGER);
1403 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1404 map.put(MIN_RANGE, type);
1405 map.put(MAX_RANGE, type);
1406 map.put(VALUE, newType);
1407 builder.append(multiAttrMethodSignature(VALIDATE_RANGE, EMPTY_STRING,
1408 PRIVATE, BOOLEAN_DATA_TYPE, map,
1409 CLASS_TYPE));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301410 if (type.contentEquals(BIG_INTEGER)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301411 //Create new instance of big integer.
1412 builder.append(getNewInstance(BIG_INTEGER, var, EIGHT_SPACE_INDENTATION,
1413 QUOTES + SPACE + QUOTES + SPACE +
1414 ADD + SPACE + VALUE))
1415 //Add return string.
1416 .append(getReturnString(var, EIGHT_SPACE_INDENTATION))
1417 //Add compareTo string
1418 .append(getCompareToString())
1419 //Add && condition.
1420 .append(ifAndAndCondition(
1421 //Add == condition
1422 ifEqualEqualCondition(
1423 brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
1424 MIN_RANGE, null), ONE),
1425 var))
1426 //Add compareTo string.
1427 .append(getCompareToString())
1428 //Add == condition.
1429 .append(ifEqualEqualCondition(
1430 brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
1431 MAX_RANGE, null), ONE))
1432 .append(signatureClose());
Bharat saraswal64e7e232016-07-14 23:33:55 +05301433 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301434 builder.append(getReturnString(VALUE, EIGHT_SPACE_INDENTATION))
1435 .append(getGreaterThanCondition())
1436 .append(ifAndAndCondition(MIN_RANGE, VALUE))
1437 .append(getLesserThanCondition())
1438 .append(MAX_RANGE)
1439 .append(signatureClose());
Bharat saraswal64e7e232016-07-14 23:33:55 +05301440 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301441 builder.append(methodClose(FOUR_SPACE));
1442 return builder.toString();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301443 }
1444
Bharat saraswal8beac342016-08-04 02:00:03 +05301445 //Get method with arguments.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301446 private static String getGetMethodWithArgument(String returnType,
1447 String yangName) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301448 return methodSignature(getCapitalCase(yangName), GET_METHOD_PREFIX,
1449 null, getSmallCase(returnType),
1450 returnType, returnType + OP_PARAM,
1451 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301452 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301453
Bharat saraswal8beac342016-08-04 02:00:03 +05301454 /**
1455 * Returns add to list method interface.
1456 *
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301457 * @param attr java attribute
1458 * @param className name of the class
Bharat saraswal8beac342016-08-04 02:00:03 +05301459 * @return add to list method interface
1460 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301461 public static String getAddToListMethodInterface(JavaAttributeInfo attr,
1462 String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301463
1464 return methodSignature(ADD_STRING + TO_CAPS + getCapitalCase(
1465 attr.getAttributeName()), EMPTY_STRING, EMPTY_STRING,
1466 ADD_STRING + TO_CAPS,
1467 className + BUILDER, getReturnType(attr),
1468 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301469 }
1470
1471 /**
1472 * Returns add to list method impl.
1473 *
Bharat saraswal94844d62016-10-13 13:28:03 +05301474 * @param attr java attribute
1475 * @param name class name
Bharat saraswal8beac342016-08-04 02:00:03 +05301476 * @return add to list method impl
1477 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301478 public static String getAddToListMethodImpl(JavaAttributeInfo attr,
Bharat saraswal94844d62016-10-13 13:28:03 +05301479 String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301480 String attrName = attr.getAttributeName();
Bharat saraswal94844d62016-10-13 13:28:03 +05301481 String retString = getOverRideString();
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301482 StringBuilder builder = new StringBuilder(retString);
1483 builder.append(methodSignature(ADD_STRING + TO_CAPS +
1484 getCapitalCase(attrName),
1485 EMPTY_STRING, PUBLIC, ADD_STRING + TO_CAPS,
1486 name + BUILDER, getReturnType(attr),
1487 CLASS_TYPE))
1488 .append(getIfConditionForAddToListMethod(attrName));
1489 retString = EIGHT_SPACE_INDENTATION + attrName + PERIOD + ADD_STRING +
1490 OPEN_PARENTHESIS + ADD_STRING + TO_CAPS + CLOSE_PARENTHESIS;
1491 builder.append(retString)
1492 .append(signatureClose())
1493 .append(getReturnString(THIS, EIGHT_SPACE_INDENTATION))
1494 .append(signatureClose())
1495 .append(methodClose(FOUR_SPACE));
1496 return builder.toString();
1497 }
1498
1499 // Returns if condition for add to list method.
1500 static String getIfConditionForAddToListMethod(String name) {
1501 return getIfConditionBegin(EIGHT_SPACE_INDENTATION, name + SPACE + EQUAL +
1502 EQUAL + SPACE + NULL) + TWELVE_SPACE_INDENTATION +
1503 name + SPACE + EQUAL + SPACE +
1504 NEW + SPACE + ARRAY_LIST + signatureClose() + methodClose(
1505 EIGHT_SPACE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301506 }
1507
1508 /**
1509 * Returns builder method for class.
1510 *
1511 * @param name name of class
1512 * @return builder method for class
1513 */
1514 static String builderMethod(String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301515 return generateForBuilderMethod(name) +
1516 methodSignature(BUILDER_LOWER_CASE,
1517 EMPTY_STRING, PUBLIC + SPACE +
1518 STATIC, null, name + BUILDER, null, CLASS_TYPE) +
1519 getReturnString(NEW + SPACE + name + BUILDER,
1520 EIGHT_SPACE_INDENTATION) +
1521 brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
1522 methodClose(FOUR_SPACE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301523 }
1524
1525 /**
1526 * Returns is filter content match interface.
1527 *
1528 * @param name name of node
1529 * @return is filter content match interface
1530 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301531 static String processSubtreeFilteringInterface(String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301532 String method = " /**\n" +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301533 " * Checks if the passed " + name +
1534 " maps the content match query condition.\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301535 " *\n" +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301536 " * @param " + getSmallCase(name) + SPACE +
1537 getSmallCase(name) + SPACE + "being passed to check" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301538 " for" +
1539 " content match\n" +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301540 " * @param isSelectAllSchemaChild is select all schema child\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301541 " * @return match result\n" +
1542 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301543 LinkedHashMap<String, String> map = new LinkedHashMap<>();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301544 map.put(getSmallCase(name), name);
1545 map.put(SELECT_ALL_CHILD, BOOLEAN_DATA_TYPE);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301546
1547 return method + multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING,
1548 EMPTY_STRING, EMPTY_STRING,
1549 name, map, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301550 }
1551
1552 /**
1553 * Returns is value set interface.
1554 *
1555 * @return is value set interface
1556 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301557 static String isLeafValueSetInterface() {
1558 String method = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301559 " * Checks if the leaf value is set.\n" +
1560 " *\n" +
1561 " * @param leaf leaf whose value status needs to checked\n" +
1562 " * @return result of leaf value set in object\n" +
1563 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301564 return method + methodSignature(VALUE_LEAF_SET, EMPTY_STRING, null,
1565 LEAF, BOOLEAN_DATA_TYPE,
1566 LEAF_IDENTIFIER, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301567 }
1568
1569 /**
1570 * Returns is select leaf set interface.
1571 *
1572 * @return is select leaf set interface
1573 */
1574 static String isSelectLeafSetInterface() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301575 String method = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301576 " * Checks if the leaf is set to be a selected leaf.\n" +
1577 " *\n" +
1578 " * @param leaf if leaf needs to be selected\n" +
1579 " * @return result of leaf value set in object\n" +
1580 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301581 return method + methodSignature(IS_SELECT_LEAF, EMPTY_STRING, null,
1582 LEAF, BOOLEAN_DATA_TYPE, LEAF_IDENTIFIER,
1583 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301584 }
1585
1586 /**
1587 * Returns set select leaf set interface.
1588 *
1589 * @param name node name
1590 * @return set select leaf set interface
1591 */
1592 static String setSelectLeafSetInterface(String name) {
1593 String method = " /**\n" +
1594 " * Set a leaf to be selected.\n" +
1595 " *\n" +
1596 " * @param leaf leaf needs to be selected\n" +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301597 " * @return builder object for select leaf\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301598 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301599 return method + methodSignature(SET_SELECT_LEAF, EMPTY_STRING,
1600 null, LEAF, name +
1601 BUILDER, LEAF_IDENTIFIER,
1602 INTERFACE_TYPE) + NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +05301603 }
1604
1605 /**
1606 * Returns leaf identifier interface enum signature.
1607 *
1608 * @param name name of node
1609 * @return leaf identifier interface enum signature
1610 */
1611 static String getInterfaceLeafIdEnumSignature(String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301612 String start = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301613 " * Identify the leaf of " + name + PERIOD + NEW_LINE +
1614 " */\n";
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301615 return start + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + ENUM + SPACE +
1616 LEAF_IDENTIFIER + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +05301617 }
1618
1619 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301620 * Returns setter for select leaf.
1621 *
Bharat saraswal94844d62016-10-13 13:28:03 +05301622 * @param name name of node
Bharat saraswal8beac342016-08-04 02:00:03 +05301623 * @return setter for select leaf
1624 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301625 static String getSetterForSelectLeaf(String name) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301626 return "\n" +
Bharat saraswal94844d62016-10-13 13:28:03 +05301627 " " + OVERRIDE + "\n" +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301628 " public " + name + BUILDER +
1629 " selectLeaf(LeafIdentifier leaf) {\n" +
Bharat saraswal94844d62016-10-13 13:28:03 +05301630 " selectLeafFlags.set(leaf.getLeafIndex());\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301631 " return this;\n" +
1632 " }\n";
1633 }
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301634
1635 /**
1636 * Generates fromString code for bits.
1637 *
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301638 * @return generated fromString code for bits.
1639 */
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301640 private static String getFromStringForBits(String bitClassName) {
1641 StringBuilder sBuild = new StringBuilder();
1642 sBuild.append(methodSignature(FROM_STRING_METHOD_NAME, null,
1643 PUBLIC + SPACE + STATIC,
1644 FROM_STRING_PARAM_NAME,
1645 BIT_SET, STRING_DATA_TYPE, CLASS_TYPE))
1646 .append(EIGHT_SPACE_INDENTATION)
1647 .append(getBitSetAttr(EMPTY_STRING));
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301648 // Split the input string and check each bit name falls in configured yang file
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301649 sBuild.append(EIGHT_SPACE_INDENTATION).append(STRING_DATA_TYPE)
1650 .append(SQUARE_BRACKETS).append(SPACE).append(BIT_NAMES_VAR)
1651 .append(SPACE).append(EQUAL).append(SPACE).append(FROM_STRING_PARAM_NAME)
1652 .append(PERIOD).append(TRIM_STRING).append(OPEN_CLOSE_BRACKET_STRING)
1653 .append(PERIOD).append(SPLIT_STRING).append(brackets(
1654 OPEN_CLOSE_BRACKET_WITH_VALUE, getPatternQuoteString(SPACE),
1655 null)).append(signatureClose()).append(getForLoopString(
1656 EIGHT_SPACE_INDENTATION, STRING_DATA_TYPE, BIT_NAME_VAR,
1657 BIT_NAMES_VAR));
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301658
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301659 String small = getSmallCase(bitClassName);
1660 sBuild.append(TWELVE_SPACE_INDENTATION).append(bitClassName).append
1661 (SPACE).append(small).append(SPACE).append(EQUAL).append
1662 (SPACE).append(bitClassName).append(PERIOD).append(OF).append
1663 (brackets(OPEN_CLOSE_BRACKET_WITH_VALUE, BIT_NAME_VAR, null))
1664 .append(signatureClose());
1665 String condition = small + SPACE + NOT + EQUAL + SPACE + NULL;
1666 sBuild.append(getIfConditionBegin(TWELVE_SPACE_INDENTATION, condition))
1667 .append(TWELVE_SPACE_INDENTATION)
1668 .append(TMP_VAL).append(PERIOD).append(SET_METHOD_PREFIX)
1669 .append(OPEN_PARENTHESIS)
1670 .append(small).append(PERIOD).append(small).append(
1671 OPEN_CLOSE_BRACKET_STRING).append(CLOSE_PARENTHESIS)
1672 .append(signatureClose()).append(methodClose(TWELVE_SPACE))
1673 .append(methodClose(EIGHT_SPACE));
1674 sBuild.append(getReturnString(TMP_VAL, EIGHT_SPACE_INDENTATION))
1675 .append(signatureClose()).append(methodClose(FOUR_SPACE));
1676 return sBuild.toString();
1677 }
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301678
Bharat saraswal94844d62016-10-13 13:28:03 +05301679
1680 /**
1681 * Returns to string method for typedef.
1682 *
1683 * @param attr attribute name
1684 * @param className class name
1685 * @return to string method for typedef
1686 */
1687 static String getToStringForType(String attr, YangType type,
1688 String className) {
1689 StringBuilder builder = new StringBuilder(getOverRideString())
1690 .append(methodSignature(TO_STRING_METHOD, null, PUBLIC, null,
1691 STRING_DATA_TYPE, null, CLASS_TYPE));
1692 builder.append(getReturnString(
1693 getToStringForSpecialType(className, type, attr), EIGHT_SPACE_INDENTATION))
1694 .append(signatureClose()).append(methodClose(FOUR_SPACE));
1695 return builder.toString();
1696 }
1697
1698 /**
1699 * Returns to string method body for type class.
1700 *
1701 * @param className class name
1702 * @param type type of attribute
1703 * @param name @return to string method body for typedef class
1704 */
1705 private static String getToStringForSpecialType(String className, YangType type,
1706 String name) {
1707 switch (type.getDataType()) {
1708 case INT8:
1709 case INT16:
1710 case INT32:
1711 case INT64:
1712 case UINT8:
1713 case UINT16:
1714 case UINT32:
1715 return STRING_DATA_TYPE + PERIOD + VALUE + OF_CAPS + brackets(
1716 OPEN_CLOSE_BRACKET_WITH_VALUE, name, null);
1717
1718 case BINARY:
1719 return getToStringCall(getToStringForBinary(name));
1720
1721 case BITS:
1722 return className + getCapitalCase(name) + PERIOD +
1723 TO_STRING_METHOD + brackets(
1724 OPEN_CLOSE_BRACKET_WITH_VALUE, name, null);
1725
1726 case BOOLEAN:
1727 case EMPTY:
1728 return name + SPACE + QUESTION_MARK + SPACE + getQuotedString(TRUE)
1729 + SPACE + COLON + SPACE + getQuotedString(FALSE);
1730
1731 case LEAFREF:
1732 YangLeafRef<?> lri = (YangLeafRef<?>) type.getDataTypeExtendedInfo();
1733 YangType<?> rt = lri.isInGrouping() ? null : lri
1734 .getEffectiveDataType();
1735 return rt == null ? getToStringCall(name) :
1736 getToStringForSpecialType(className, rt, name);
1737
1738 case ENUMERATION:
1739 case INSTANCE_IDENTIFIER:
1740 case UINT64:
1741 case DECIMAL64:
1742 case DERIVED:
1743 case IDENTITYREF:
1744 case UNION:
1745 return getToStringCall(name);
1746
1747 default:
1748 return name;
1749 }
1750 }
1751
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301752 /**
1753 * Returns union class's to string method.
1754 *
1755 * @param types list of types
Bharat saraswal94844d62016-10-13 13:28:03 +05301756 * @param name class name
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301757 * @return union class's to string method
1758 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301759 static String getUnionToStringMethod(List<YangType<?>> types, String name) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301760
1761 StringBuilder builder = new StringBuilder(getOverRideString());
1762 builder.append(methodSignature(TO_STRING_METHOD, null, PUBLIC, null,
Bharat saraswal94844d62016-10-13 13:28:03 +05301763 STRING_DATA_TYPE, null, CLASS_TYPE));
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301764 for (YangType type : types) {
1765 builder.append(getIfConditionBegin(
1766 EIGHT_SPACE_INDENTATION, getSetValueParaCondition(
Bharat saraswal94844d62016-10-13 13:28:03 +05301767 types.indexOf(type)))).append(getReturnString(
1768 getToStringForSpecialType(name, type,
1769 getCamelCase(type.getDataTypeName(), null)),
1770 TWELVE_SPACE_INDENTATION))
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301771 .append(signatureClose()).append(methodClose(EIGHT_SPACE));
1772 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301773 builder.append(getReturnString(NULL, EIGHT_SPACE_INDENTATION)).append(signatureClose())
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301774 .append(methodClose(FOUR_SPACE));
1775 return builder.toString();
1776 }
1777
1778 /**
1779 * Returns from string method for bits class.
1780 *
1781 * @param className bits class name
1782 * @return from string method for bits class
1783 */
1784 static String getBitSetEnumClassFromString(String className) {
1785 return getJavaDoc(FROM_METHOD, className, false, null) +
1786 getFromStringForBits(className);
1787 }
1788
Bharat saraswal94844d62016-10-13 13:28:03 +05301789 /**
1790 * Returns to string method for bits type.
1791 *
1792 * @param className class name
1793 * @param enumeration enumeration
1794 * @return to string method
1795 */
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301796 static String getBitSetEnumClassToString(String className,
1797 YangEnumeration enumeration) {
1798
1799 StringBuilder builder = new StringBuilder();
Bharat saraswal94844d62016-10-13 13:28:03 +05301800 builder.append(methodSignature(TO_STRING_METHOD, null,
1801 PUBLIC + SPACE + STATIC, BITS,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301802 STRING_DATA_TYPE, BIT_SET, CLASS_TYPE))
Bharat saraswal94844d62016-10-13 13:28:03 +05301803 .append(getStringBuilderAttr(EMPTY_STRING, EIGHT_SPACE_INDENTATION));
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301804 String condition;
1805 String name;
1806 for (YangEnum yangEnum : enumeration.getEnumSet()) {
1807 name = yangEnum.getNamedValue();
1808 condition = BITS + PERIOD + GET + OPEN_PARENTHESIS +
1809 className + PERIOD + getEnumJavaAttribute(name).toUpperCase()
1810 + PERIOD + getSmallCase(className)
1811 + OPEN_CLOSE_BRACKET_STRING + CLOSE_PARENTHESIS;
1812
1813
1814 builder.append(getIfConditionBegin(
1815 EIGHT_SPACE_INDENTATION, condition))
Bharat saraswal94844d62016-10-13 13:28:03 +05301816 .append(TWELVE_SPACE_INDENTATION).append(STRING_BUILDER_VAR).append(
1817 PERIOD).append(APPEND).append(OPEN_PARENTHESIS)
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301818 .append(getQuotedString(name)).append(CLOSE_PARENTHESIS)
Bharat saraswal94844d62016-10-13 13:28:03 +05301819 .append(signatureClose())
1820 .append(TWELVE_SPACE_INDENTATION).append(STRING_BUILDER_VAR).append(
1821 PERIOD).append(APPEND).append(OPEN_PARENTHESIS)
1822 .append(getQuotedString(SPACE)).append(CLOSE_PARENTHESIS)
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301823 .append(signatureClose()).append(methodClose(EIGHT_SPACE));
1824 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301825 builder.append(getReturnString(STRING_BUILDER_VAR, EIGHT_SPACE_INDENTATION))
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301826 .append(PERIOD).append(TO_STRING_METHOD)
1827 .append(OPEN_CLOSE_BRACKET_STRING).append(signatureClose())
1828 .append(methodClose(FOUR_SPACE));
1829 return builder.toString();
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301830 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301831
1832 /**
1833 * Returns to string method for enum class.
1834 *
1835 * @return to string method for enum class
1836 */
1837 static String getToStringForEnumClass() {
1838 StringBuilder builder = new StringBuilder(getOverRideString());
1839 builder.append(methodSignature(TO_STRING_METHOD, EMPTY_STRING,
1840 PUBLIC, null, STRING_DATA_TYPE, null,
1841 CLASS_TYPE));
1842 builder.append(getReturnString(SCHEMA_NAME, EIGHT_SPACE_INDENTATION))
1843 .append(signatureClose()).append(methodClose(FOUR_SPACE));
1844 return builder.toString();
1845 }
Bharat saraswal97459962016-02-20 21:57:16 +05301846}