blob: 682cbdc13d8970363aadbf563e286691e5a76391 [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 saraswalaf413b82016-07-14 15:18:20 +053023import org.onosproject.yangutils.datamodel.YangNode;
janani b0e4e8ae2016-07-13 21:06:41 +053024import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053025import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswal039f59c2016-07-14 21:57:13 +053026import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053027import org.onosproject.yangutils.utils.io.YangPluginConfig;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053028import org.onosproject.yangutils.utils.io.impl.JavaDocGen;
Bharat saraswal84366c52016-03-23 19:40:35 +053029
Bharat saraswal9fab16b2016-09-23 23:27:24 +053030import java.util.LinkedHashMap;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053031import java.util.List;
32
Bharat saraswal715d3fc2016-05-17 19:59:16 +053033import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053034import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053035import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET;
36import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET_WITH_VALUE;
37import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.EIGHT_SPACE;
38import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
39import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentMapTypeString;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053040import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getAugmentedClassNameForDataMethods;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053041import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getCurNodeName;
Bharat saraswal039f59c2016-07-14 21:57:13 +053042import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getSetOfNodeIdentifiers;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053043import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053044import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_ADD;
45import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_GETTER;
46import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_GET_VALUE;
47import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.GETTER;
48import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.MANAGER_METHODS;
49import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.SETTER;
50import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.TO_STRING;
51import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
52import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.INTERFACE_TYPE;
53import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.brackets;
54import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCompareToString;
55import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getGreaterThanCondition;
56import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIfConditionBegin;
57import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getLesserThanCondition;
58import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getNewInstance;
59import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
60import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnString;
61import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifAndAndCondition;
62import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifConditionForIntInTypeDefConstructor;
63import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifEqualEqualCondition;
64import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodBody;
65import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
66import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodSignature;
67import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodSignatureClose;
68import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.multiAttrMethodSignature;
69import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
Bharat saraswal64e7e232016-07-14 23:33:55 +053070import static org.onosproject.yangutils.utils.UtilConstants.ADD;
Bharat saraswal84366c52016-03-23 19:40:35 +053071import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
72import static org.onosproject.yangutils.utils.UtilConstants.AND;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053073import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST;
Bharat saraswalaf413b82016-07-14 15:18:20 +053074import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053075import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswald14cbe82016-07-14 13:26:18 +053076import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +053077import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
78import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
79import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053080import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_LOWER_CASE;
Bharat saraswal250a7472016-05-12 13:16:57 +053081import static org.onosproject.yangutils.utils.UtilConstants.CASE;
Bharat saraswalaf413b82016-07-14 15:18:20 +053082import static org.onosproject.yangutils.utils.UtilConstants.CLASS;
83import static org.onosproject.yangutils.utils.UtilConstants.CLASS_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +053084import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
85import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053086import static org.onosproject.yangutils.utils.UtilConstants.COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +053087import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053088import static org.onosproject.yangutils.utils.UtilConstants.DECODE;
Bharat saraswal250a7472016-05-12 13:16:57 +053089import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053090import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswal84366c52016-03-23 19:40:35 +053091import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswal64e7e232016-07-14 23:33:55 +053092import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
Bharat saraswal84366c52016-03-23 19:40:35 +053093import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswal8beac342016-08-04 02:00:03 +053094import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
Bharat saraswal84366c52016-03-23 19:40:35 +053095import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
96import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
97import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053098import static org.onosproject.yangutils.utils.UtilConstants.FOR;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053099import static org.onosproject.yangutils.utils.UtilConstants.FOR_TYPE_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530100import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530101import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_METHOD_NAME;
102import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_PARAM_NAME;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530103import static org.onosproject.yangutils.utils.UtilConstants.GET;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530104import static org.onosproject.yangutils.utils.UtilConstants.GET_DECODER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530105import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD_PREFIX;
106import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_METHOD_STRING;
107import static org.onosproject.yangutils.utils.UtilConstants.HASH;
108import static org.onosproject.yangutils.utils.UtilConstants.HASH_CODE_STRING;
109import static org.onosproject.yangutils.utils.UtilConstants.IF;
Bharat saraswal84366c52016-03-23 19:40:35 +0530110import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE_OF;
111import static org.onosproject.yangutils.utils.UtilConstants.INT;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530112import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
Bharat saraswal8beac342016-08-04 02:00:03 +0530113import static org.onosproject.yangutils.utils.UtilConstants.IS_SELECT_LEAF;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530114import static org.onosproject.yangutils.utils.UtilConstants.LEAF;
Bharat saraswal8beac342016-08-04 02:00:03 +0530115import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530116import static org.onosproject.yangutils.utils.UtilConstants.LONG;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530117import static org.onosproject.yangutils.utils.UtilConstants.MAP;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530118import static org.onosproject.yangutils.utils.UtilConstants.MAX_RANGE;
119import static org.onosproject.yangutils.utils.UtilConstants.MIN_RANGE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530120import static org.onosproject.yangutils.utils.UtilConstants.NEW;
121import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530122import static org.onosproject.yangutils.utils.UtilConstants.NULL;
Bharat saraswal84366c52016-03-23 19:40:35 +0530123import static org.onosproject.yangutils.utils.UtilConstants.OBJ;
124import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
125import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
126import static org.onosproject.yangutils.utils.UtilConstants.OF;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530127import static org.onosproject.yangutils.utils.UtilConstants.ONE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530128import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
129import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530130import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal84366c52016-03-23 19:40:35 +0530131import static org.onosproject.yangutils.utils.UtilConstants.OTHER;
132import static org.onosproject.yangutils.utils.UtilConstants.OVERRIDE;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530133import static org.onosproject.yangutils.utils.UtilConstants.PARSE_INT;
Bharat saraswal84366c52016-03-23 19:40:35 +0530134import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530135import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530136import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
137import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal84366c52016-03-23 19:40:35 +0530138import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
139import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530140import static org.onosproject.yangutils.utils.UtilConstants.REPLACE_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530141import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530142import static org.onosproject.yangutils.utils.UtilConstants.RPC_INPUT_VAR_NAME;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530143import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530144import static org.onosproject.yangutils.utils.UtilConstants.SELECT_ALL_CHILD;
145import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +0530146import static org.onosproject.yangutils.utils.UtilConstants.SET_METHOD_PREFIX;
Bharat saraswal8beac342016-08-04 02:00:03 +0530147import static org.onosproject.yangutils.utils.UtilConstants.SET_SELECT_LEAF;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530148import static org.onosproject.yangutils.utils.UtilConstants.SINGLE_QUOTE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530149import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
150import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530151import static org.onosproject.yangutils.utils.UtilConstants.SPLIT_STRING;
152import static org.onosproject.yangutils.utils.UtilConstants.SQUARE_BRACKETS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530153import static org.onosproject.yangutils.utils.UtilConstants.STATIC;
154import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
155import static org.onosproject.yangutils.utils.UtilConstants.SUFFIX_S;
Bharat saraswal250a7472016-05-12 13:16:57 +0530156import static org.onosproject.yangutils.utils.UtilConstants.SWITCH;
Bharat saraswal84366c52016-03-23 19:40:35 +0530157import static org.onosproject.yangutils.utils.UtilConstants.THIS;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530158import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
Bharat saraswal84366c52016-03-23 19:40:35 +0530159import static org.onosproject.yangutils.utils.UtilConstants.TO;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530160import static org.onosproject.yangutils.utils.UtilConstants.TO_CAPS;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530161import static org.onosproject.yangutils.utils.UtilConstants.TRIM_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530162import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
163import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530164import static org.onosproject.yangutils.utils.UtilConstants.VALIDATE_RANGE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530165import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
Bharat saraswal8beac342016-08-04 02:00:03 +0530166import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF_SET;
Bharat saraswal84366c52016-03-23 19:40:35 +0530167import static org.onosproject.yangutils.utils.UtilConstants.VOID;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530168import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530169import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_LOWER_CASE;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530170import static org.onosproject.yangutils.utils.UtilConstants.ZERO;
Bharat saraswal84366c52016-03-23 19:40:35 +0530171import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILD_METHOD;
172import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.CONSTRUCTOR;
173import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530174import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.FROM_METHOD;
Bharat saraswal84366c52016-03-23 19:40:35 +0530175import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530176import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530177import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.OF_METHOD;
Bharat saraswal84366c52016-03-23 19:40:35 +0530178import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530179import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530180import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForAddAugmentation;
Bharat saraswal8beac342016-08-04 02:00:03 +0530181import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForBuilderMethod;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530182import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForGetAugmentation;
Bharat saraswal8beac342016-08-04 02:00:03 +0530183import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForGetMethodWithAttribute;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530184import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForValidatorMethod;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530185import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530186import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
187import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
188import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
Bharat saraswal84366c52016-03-23 19:40:35 +0530189import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal97459962016-02-20 21:57:16 +0530190
191/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530192 * Represents generator for methods of generated files based on the file type.
Bharat saraswal97459962016-02-20 21:57:16 +0530193 */
194public final class MethodsGenerator {
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530195 private static final String BITS_STRING_ARRAY_VAR = "bitsTemp";
196 private static final String BIT_TEMP_VAR = "bitTemp";
Bharat saraswal97459962016-02-20 21:57:16 +0530197
Bharat saraswal97459962016-02-20 21:57:16 +0530198 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530199 * Creates an instance of method generator.
Bharat saraswal97459962016-02-20 21:57:16 +0530200 */
201 private MethodsGenerator() {
202 }
203
204 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530205 * Returns the methods strings for builder interface.
206 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530207 * @param name attribute name
Vinod Kumar S08710982016-03-03 19:55:30 +0530208 * @return method string for builder interface
Bharat saraswal97459962016-02-20 21:57:16 +0530209 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530210 public static String parseBuilderInterfaceBuildMethodString(String name) {
211 return getJavaDoc(BUILD_METHOD, name, false, null) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530212 getBuildForInterface(name);
Bharat saraswal97459962016-02-20 21:57:16 +0530213 }
214
215 /**
216 * Returns getter string.
217 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530218 * @param attr attribute info
219 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530220 * @return getter string
221 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530222 public static String getGetterString(JavaAttributeInfo attr, int genType) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530223
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530224 String returnType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530225 String attributeName = attr.getAttributeName();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530226 String appDataStructure = null;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530227 StringBuilder builder = new StringBuilder();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530228 if (attr.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530229 appDataStructure =
230 attr.getCompilerAnnotation().getYangAppDataStructure()
231 .getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530232 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530233 if (genType == GENERATE_SERVICE_AND_MANAGER) {
234 builder.append(generateForGetMethodWithAttribute(returnType))
235 .append(getGetterForInterface(
236 attributeName, returnType, attr.isListAttr(),
237 genType, attr.getCompilerAnnotation()));
238
239 return builder.toString();
Bharat saraswal8beac342016-08-04 02:00:03 +0530240 }
Vinod Kumar S08710982016-03-03 19:55:30 +0530241
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530242 builder.append(getJavaDoc(GETTER_METHOD, attributeName, attr
243 .isListAttr(), appDataStructure))
244 .append(getGetterForInterface(
245 attributeName, returnType, attr.isListAttr(),
246 genType, attr.getCompilerAnnotation()));
247
248 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530249 }
250
251 /**
252 * Returns setter string.
253 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530254 * @param attr attribute info
255 * @param className java class name
256 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530257 * @return setter string
258 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530259 public static String getSetterString(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530260 String className, int genType) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530261
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530262 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530263 String attributeName = attr.getAttributeName();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530264 JavaDocGen.JavaDocType type;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530265 StringBuilder builder = new StringBuilder();
266 if (genType == GENERATE_SERVICE_AND_MANAGER) {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530267 type = MANAGER_SETTER_METHOD;
268 } else {
269 type = SETTER_METHOD;
270 }
Bharat saraswal97459962016-02-20 21:57:16 +0530271
Vidyashree Ramab3670472016-08-06 15:49:56 +0530272 String appDataStructure = null;
273 if (attr.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530274 appDataStructure =
275 attr.getCompilerAnnotation().getYangAppDataStructure()
276 .getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530277 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530278 builder.append(getJavaDoc(type, attributeName, attr.isListAttr(),
279 appDataStructure))
280 .append(getSetterForInterface(attributeName, attrType, className,
281 attr.isListAttr(), genType,
282 attr.getCompilerAnnotation()));
283 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530284 }
285
286 /**
287 * Returns constructor method string.
288 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530289 * @param name class name
Bharat saraswal97459962016-02-20 21:57:16 +0530290 * @return constructor string
291 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530292 private static String getConstructorString(String name) {
293 return getJavaDoc(CONSTRUCTOR, name, false, null);
Bharat saraswal97459962016-02-20 21:57:16 +0530294 }
295
296 /**
297 * Returns default constructor method string.
298 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530299 * @param name class name
Bharat saraswal022dae92016-03-04 20:08:09 +0530300 * @param modifierType modifier type
Bharat saraswal97459962016-02-20 21:57:16 +0530301 * @return default constructor string
302 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530303 public static String getDefaultConstructorString(String name,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530304 String modifierType) {
305 return getJavaDoc(DEFAULT_CONSTRUCTOR, name, false, null)
Vidyashree Ramab3670472016-08-06 15:49:56 +0530306 + getDefaultConstructor(name, modifierType) + NEW_LINE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530307 }
308
309 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530310 * Returns build method string.
311 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530312 * @param name class name
313 * @param isRootNode if root node
Bharat saraswal97459962016-02-20 21:57:16 +0530314 * @return build string
315 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530316 public static String getBuildString(String name, boolean isRootNode) {
317 if (isRootNode) {
318 return NEW_LINE + getBuild(name, true);
319 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530320 return FOUR_SPACE_INDENTATION + OVERRIDE + NEW_LINE +
321 getBuild(name, false);
Bharat saraswal97459962016-02-20 21:57:16 +0530322 }
323
324 /**
325 * Returns the getter method strings for class file.
326 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530327 * @param attr attribute info
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530328 * @param generatedJavaFiles for the type of java file being generated
Vinod Kumar S08710982016-03-03 19:55:30 +0530329 * @return getter method for class
Bharat saraswal97459962016-02-20 21:57:16 +0530330 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530331 public static String getGetterForClass(JavaAttributeInfo attr,
332 int generatedJavaFiles) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530333
Bharat saraswal8beac342016-08-04 02:00:03 +0530334 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530335 String attributeName = attr.getAttributeName();
Bharat saraswal022dae92016-03-04 20:08:09 +0530336
337 if (!attr.isListAttr()) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530338 return getGetter(attrQualifiedType, attributeName,
339 generatedJavaFiles);
Bharat saraswal022dae92016-03-04 20:08:09 +0530340 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530341 String attrParam = StringGenerator.getListAttribute(attrQualifiedType,
342 attr.getCompilerAnnotation());
Vidyashree Ramab3670472016-08-06 15:49:56 +0530343 return getGetter(attrParam, attributeName, generatedJavaFiles);
Bharat saraswal022dae92016-03-04 20:08:09 +0530344 }
345
346 /**
347 * Returns getter for attribute.
348 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530349 * @param type return type
350 * @param name attribute name
351 * @param genType generated java files
Bharat saraswal022dae92016-03-04 20:08:09 +0530352 * @return getter for attribute
353 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530354 static String getGetter(String type, String name, int genType) {
355 StringBuilder builder = new StringBuilder();
356 if (genType == GENERATE_SERVICE_AND_MANAGER) {
357 //Append method signature.
358 builder.append(methodSignature(getCapitalCase(name), GET,
359 PUBLIC, null, type, null,
360 CLASS_TYPE))
361 //Append method body.
362 .append(methodBody(MANAGER_METHODS, null, null,
363 EIGHT_SPACE_INDENTATION, null,
364 type, false))
365 .append(signatureClose())
366 //Append method close.
367 .append(methodClose(FOUR_SPACE));
368 return builder.toString();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530369 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530370 builder.append(methodSignature(name, EMPTY_STRING,
371 PUBLIC, null, type, null,
372 CLASS_TYPE))
373 //Append method body.
374 .append(methodBody(GETTER, name, name,
375 EIGHT_SPACE_INDENTATION, null,
376 type, false))
377 .append(signatureClose())
378 //Append method close.
379 .append(methodClose(FOUR_SPACE));
380 return builder.toString();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530381 }
382
Bharat saraswal97459962016-02-20 21:57:16 +0530383 /**
384 * Returns the setter method strings for class file.
385 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530386 * @param attr attribute info
387 * @param className name of the class
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530388 * @param generatedJavaFiles generated java files
Vinod Kumar S08710982016-03-03 19:55:30 +0530389 * @return setter method for class
Bharat saraswal97459962016-02-20 21:57:16 +0530390 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530391 public static String getSetterForClass(JavaAttributeInfo attr,
392 String className,
393 int generatedJavaFiles) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530394 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530395 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530396 boolean isTypeNull = false;
397 if (attr.getAttributeType() == null) {
398 isTypeNull = true;
Bharat saraswal022dae92016-03-04 20:08:09 +0530399 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530400 if (!attr.isListAttr()) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530401 return getSetter(className, attributeName, attrQualifiedType,
402 generatedJavaFiles, isTypeNull, false);
Bharat saraswal8beac342016-08-04 02:00:03 +0530403 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530404 String attrParam = StringGenerator.getListAttribute(attrQualifiedType,
405 attr.getCompilerAnnotation());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530406 return getSetter(className, attributeName, attrParam,
407 generatedJavaFiles, isTypeNull, true);
Bharat saraswal022dae92016-03-04 20:08:09 +0530408 }
409
410 /**
411 * Returns setter for attribute.
412 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530413 * @param className class name
414 * @param name attribute name
415 * @param type return type
416 * @param isTypeNull if attribute type is null
417 * @param isList true if leaf-list
Bharat saraswal022dae92016-03-04 20:08:09 +0530418 * @return setter for attribute
419 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530420 private static String getSetter(String className, String name, String type,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530421 int genType,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530422 boolean isTypeNull, boolean isList) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530423 StringBuilder builder = new StringBuilder();
424 if (genType == GENERATE_SERVICE_AND_MANAGER) {
425 //Append method signature.
426 builder.append(methodSignature(getCapitalCase(name),
427 SET_METHOD_PREFIX,
428 PUBLIC, name, VOID, type,
429 CLASS_TYPE))
430 //Append method body.
431 .append(methodBody(MANAGER_METHODS, null, null,
432 EIGHT_SPACE_INDENTATION, null, null,
433 false))
434 .append(methodClose(FOUR_SPACE));
435 return builder.toString();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530436 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530437 if (genType == GENERATE_EVENT_SUBJECT_CLASS) {
438 builder.append(methodSignature(name, EMPTY_STRING, PUBLIC, name, VOID,
439 type, CLASS_TYPE))
Bharat saraswal8beac342016-08-04 02:00:03 +0530440
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530441 //Append method body.
442 .append(methodBody(SETTER, name, name,
443 EIGHT_SPACE_INDENTATION, null, null,
444 false))
445 .append(methodClose(FOUR_SPACE));
446 return builder.toString();
447 }
448 builder.append(methodSignature(name, EMPTY_STRING,
449 PUBLIC, name, getCapitalCase(className) +
450 BUILDER, type, CLASS_TYPE));
451 if (!isTypeNull && !isList) {
452 builder.append(StringGenerator.getValueLeafSetString(name));
453 } else {
454 builder.append(EMPTY_STRING);
455 }
456 //Append method body.
457 builder.append(methodBody(SETTER, name, name,
458 EIGHT_SPACE_INDENTATION, null, null,
459 true))
460 //Append method close.
461 .append(methodClose(FOUR_SPACE));
462 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530463 }
464
465 /**
Bharat saraswal022dae92016-03-04 20:08:09 +0530466 * Returns the setter method strings for class file.
467 *
468 * @param attr attribute info
469 * @return setter method for class
470 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530471 static String getSetterForTypeDefClass(JavaAttributeInfo attr) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530472
Bharat saraswal8beac342016-08-04 02:00:03 +0530473 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530474 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530475 return getTypeDefSetter(attrQualifiedType, attributeName);
Bharat saraswal022dae92016-03-04 20:08:09 +0530476 }
477
478 /**
479 * Returns type def's setter for attribute.
480 *
481 * @param type data type
482 * @param name attribute name
483 * @return setter for type def's attribute
484 */
485 private static String getTypeDefSetter(String type, String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530486 return methodSignature(getCapitalCase(name), SET_METHOD_PREFIX, PUBLIC,
487 name, VOID, type, CLASS_TYPE) +
488 methodBody(SETTER, name, name, EIGHT_SPACE_INDENTATION, null,
489 null, false) + methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530490 }
491
492 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530493 * Returns the getter method strings for interface file.
494 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530495 * @param yangName name of the attribute
496 * @param returnType return type of attribute
497 * @param isList is list attribute
498 * @param genType generated java files
499 * @param annotation compiler annotation
Vinod Kumar S08710982016-03-03 19:55:30 +0530500 * @return getter method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530501 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530502 static String getGetterForInterface(String yangName, String returnType,
503 boolean isList,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530504 int genType,
505 YangCompilerAnnotation annotation) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530506 if (!isList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530507 return getGetterInterfaceString(returnType, yangName,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530508 genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530509 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530510 String listAttr = StringGenerator.getListAttribute(returnType, annotation);
511 return getGetterInterfaceString(listAttr, yangName, genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530512 }
513
514 /**
515 * Returns getter for attribute in interface.
516 *
517 * @param returnType return type
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530518 * @param yangName attribute name
Bharat saraswal022dae92016-03-04 20:08:09 +0530519 * @return getter for interface
520 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530521 private static String getGetterInterfaceString(String returnType,
522 String yangName,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530523 int genType) {
524 switch (genType) {
525 case GENERATE_SERVICE_AND_MANAGER:
526 return getGetMethodWithArgument(returnType, yangName);
527 default:
528 return methodSignature(yangName, EMPTY_STRING, null,
529 null, returnType, null, INTERFACE_TYPE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530530 }
Bharat saraswal97459962016-02-20 21:57:16 +0530531 }
532
533 /**
534 * Returns the setter method strings for interface file.
535 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530536 * @param attrName name of the attribute
537 * @param attrType return type of attribute
538 * @param className name of the java class being generated
539 * @param isList is list attribute
540 * @param genType generated java files
541 * @param annotation compiler annotations
Vinod Kumar S08710982016-03-03 19:55:30 +0530542 * @return setter method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530543 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530544 static String getSetterForInterface(String attrName, String attrType,
545 String className,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530546 boolean isList, int genType,
547 YangCompilerAnnotation annotation) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530548 if (!isList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530549 return getSetterInterfaceString(className, attrName, attrType,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530550 genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530551 }
Vidyashree Ramab3670472016-08-06 15:49:56 +0530552
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530553 String listAttr = StringGenerator.getListAttribute(attrType, annotation);
554 return getSetterInterfaceString(className, attrName, listAttr, genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530555 }
556
557 /**
558 * Returns setter string for interface.
559 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530560 * @param name class name
561 * @param attrName attribute name
562 * @param attrType attribute type
Bharat saraswal022dae92016-03-04 20:08:09 +0530563 * @return setter string
564 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530565 private static String getSetterInterfaceString(String name,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530566 String attrName,
567 String attrType,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530568 int genType) {
569 if (genType == GENERATE_SERVICE_AND_MANAGER) {
570 return methodSignature(getCapitalCase(attrName),
571 SET_METHOD_PREFIX,
572 null, attrName, VOID, attrType +
573 OP_PARAM, INTERFACE_TYPE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530574 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530575 return methodSignature(attrName, EMPTY_STRING, null,
576 attrName, name + BUILDER, attrType, INTERFACE_TYPE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530577 }
578
579 /**
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530580 * Returns return type for attribute.
581 *
582 * @param attr attribute info
583 * @return return type
584 */
585 private static String getReturnType(JavaAttributeInfo attr) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530586 String returnType;
587 StringBuilder builder = new StringBuilder();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530588 if (attr.isQualifiedName() &&
589 attr.getImportInfo().getPkgInfo() != null) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530590 returnType = attr.getImportInfo().getPkgInfo() + PERIOD;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530591 builder.append(returnType);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530592 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530593 returnType = attr.getImportInfo().getClassInfo();
594 builder.append(returnType);
595 return builder.toString();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530596 }
597
598 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530599 * Returns the build method strings for interface file.
600 *
Vinod Kumar S08710982016-03-03 19:55:30 +0530601 * @param yangName name of the interface
602 * @return build method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530603 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530604 static String getBuildForInterface(String yangName) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530605 return methodSignature(BUILD, EMPTY_STRING, null, null,
606 yangName, null, INTERFACE_TYPE);
Bharat saraswal97459962016-02-20 21:57:16 +0530607 }
608
609 /**
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530610 * Returns constructor string for impl class.
611 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530612 * @param yangName class name
613 * @param isRootNode if root node
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530614 * @return constructor string
615 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530616 static String getConstructorStart(String yangName,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530617 boolean isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530618 StringBuilder builder = new StringBuilder(
619 getConstructorString(yangName));
Bharat saraswal8beac342016-08-04 02:00:03 +0530620
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530621 String name = getCapitalCase(yangName);
622 String returnType = DEFAULT_CAPS + name;
Bharat saraswal8beac342016-08-04 02:00:03 +0530623 if (isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530624 returnType = name + OP_PARAM;
Bharat saraswal8beac342016-08-04 02:00:03 +0530625 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530626 builder.append(methodSignature(
627 returnType, EMPTY_STRING, PROTECTED, BUILDER_LOWER_CASE + OBJECT,
628 null, name + BUILDER, CLASS_TYPE));
629 return builder.toString();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530630 }
631
632 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530633 * Returns the constructor strings for class file.
634 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530635 * @param attr attribute info
636 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530637 * @return constructor for class
638 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530639 public static String getConstructor(JavaAttributeInfo attr, int genType) {
640 String attrName = attr.getAttributeName();
641 String attrCaps = getCapitalCase(attrName);
642 switch (genType) {
643 case GENERATE_SERVICE_AND_MANAGER:
644 return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
645 attrCaps, EIGHT_SPACE_INDENTATION, GET, null,
646 false);
647 default:
648 return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
649 attrName, EIGHT_SPACE_INDENTATION, EMPTY_STRING,
650 null, false);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530651 }
Bharat saraswal97459962016-02-20 21:57:16 +0530652 }
653
654 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530655 * Returns the rpc strings for service interface.
656 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530657 * @param rpcName name of the rpc
658 * @param input name of input
659 * @param output name of output
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530660 * @return rpc method string
661 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530662 public static String getRpcServiceMethod(String rpcName, String input,
663 String output) {
664 String inputVal = EMPTY_STRING;
665 if (!input.equals(EMPTY_STRING)) {
666 inputVal = RPC_INPUT_VAR_NAME;
Bharat saraswal250a7472016-05-12 13:16:57 +0530667 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530668 return methodSignature(rpcName, EMPTY_STRING, null,
669 inputVal, output, input, INTERFACE_TYPE) +
670 NEW_LINE;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530671 }
672
673 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530674 * Returns the build method strings for class file.
675 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530676 * @param yangName class name
677 * @param isRootNode if root node
Vinod Kumar S08710982016-03-03 19:55:30 +0530678 * @return build method string for class
Bharat saraswal97459962016-02-20 21:57:16 +0530679 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530680 static String getBuild(String yangName, boolean isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530681 String type = DEFAULT_CAPS + yangName;
Bharat saraswal8beac342016-08-04 02:00:03 +0530682 if (isRootNode) {
683 type = yangName + OP_PARAM;
684 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530685 return methodSignature(BUILD, EMPTY_STRING, PUBLIC, null,
686 yangName, null,
687 CLASS_TYPE) +
688 methodBody(MethodBodyTypes.BUILD, type, BUILD,
689 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
690 null, false) +
691 methodClose(FOUR_SPACE);
Bharat saraswal97459962016-02-20 21:57:16 +0530692 }
693
694 /**
695 * Returns the Default constructor strings for class file.
696 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530697 * @param name name of the class
Bharat saraswal022dae92016-03-04 20:08:09 +0530698 * @param modifierType modifier type for default constructor
Bharat saraswal97459962016-02-20 21:57:16 +0530699 * @return Default constructor for class
700 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530701 private static String getDefaultConstructor(String name,
702 String modifierType) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530703 return methodSignature(name, EMPTY_STRING, modifierType, null,
704 null, null, CLASS_TYPE) +
705 methodClose(FOUR_SPACE);
Bharat saraswal97459962016-02-20 21:57:16 +0530706 }
707
Bharat saraswal022dae92016-03-04 20:08:09 +0530708 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530709 * Returns to string method's open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530710 *
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530711 * @return string method's open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530712 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530713 static String getToStringMethodOpen() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530714 String line;
715 StringBuilder builder = new StringBuilder(getOverRideString());
716 builder.append(methodSignature(TO + STRING_DATA_TYPE, EMPTY_STRING,
717 PUBLIC, null, STRING_DATA_TYPE, null,
718 CLASS_TYPE));
719 line = getReturnString(GOOGLE_MORE_OBJECT_METHOD_STRING,
720 EIGHT_SPACE_INDENTATION) + NEW_LINE;
721 builder.append(line);
722 return builder.toString();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530723 }
724
725 /**
726 * Returns to string method's close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530727 *
728 * @return to string method close string
729 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530730 static String getToStringMethodClose() {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530731 return TWELVE_SPACE_INDENTATION + PERIOD + TO + STRING_DATA_TYPE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530732 brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
733 methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530734 }
735
736 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530737 * Returns to string method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +0530738 *
739 * @param attr attribute info
740 * @return to string method
741 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530742 public static String getToStringMethod(JavaAttributeInfo attr) {
janani b703cfe42016-05-17 13:12:22 +0530743 String attributeName = attr.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530744 return methodBody(TO_STRING, attributeName, null,
745 TWELVE_SPACE_INDENTATION, null, null, false);
Bharat saraswal022dae92016-03-04 20:08:09 +0530746 }
747
748 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530749 * Returns from string method's open string.
750 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530751 * @param className name of the class
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530752 * @return from string method's open string
753 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530754 static String getFromStringMethodSignature(String className) {
755 return getJavaDoc(FROM_METHOD, className, false, null) +
756 methodSignature(FROM_STRING_METHOD_NAME, EMPTY_STRING, PUBLIC +
757 SPACE + STATIC, FROM_STRING_PARAM_NAME,
758 className, STRING_DATA_TYPE,
759 CLASS_TYPE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530760 }
761
762 /**
763 * Return from string method's close string.
764 *
765 * @return from string method's close string
766 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530767 static String getFromStringMethodClose() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530768 return getReturnString(NULL, EIGHT_SPACE_INDENTATION) +
769 signatureClose() + methodClose(FOUR_SPACE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530770 }
771
772 /**
773 * Return from string method's body string.
774 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530775 * @param attr attribute info
776 * @param fromAttr attribute info for the from string wrapper
777 * type
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530778 * @return from string method's body string
779 */
780 public static String getFromStringMethod(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530781 JavaAttributeInfo fromAttr) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530782
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530783 return EIGHT_SPACE_INDENTATION + StringGenerator.getTrySubString() +
784 StringGenerator.getNewLineAndSpace(TWELVE_SPACE_INDENTATION) +
785 getParsedSubString(attr, fromAttr) +
786 StringGenerator.getNewLineAndSpace(TWELVE_SPACE_INDENTATION) +
787 StringGenerator.getReturnOfSubString() +
788 StringGenerator.getNewLineAndSpace(EIGHT_SPACE_INDENTATION) +
789 StringGenerator.getCatchSubString() +
790 StringGenerator.getNewLineAndSpace(EIGHT_SPACE_INDENTATION) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530791 CLOSE_CURLY_BRACKET;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530792 }
793
794 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530795 * Returns sub string with parsed statement for union's from string method.
796 *
797 * @param attr attribute info
798 * @return sub string with parsed statement for union's from string method
799 */
800 private static String getParsedSubString(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530801 JavaAttributeInfo fromStringAttr) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530802
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530803 String targetDataType = getReturnType(attr);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530804 StringBuilder builder = new StringBuilder();
805 YangDataTypes types = fromStringAttr.getAttributeType()
806 .getDataType();
807 switch (types) {
808 case BITS:
809 String lines =
810 targetDataType + SPACE + TMP_VAL + SPACE + EQUAL + SPACE +
811 NEW + SPACE + targetDataType + OPEN_PARENTHESIS +
812 CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE;
813 builder.append(lines);
814 /*
815 *" valInString = valInString.replace("{", " ");\n";
816 */
817 lines = TWELVE_SPACE_INDENTATION + FROM_STRING_PARAM_NAME + SPACE +
818 EQUAL + SPACE + FROM_STRING_PARAM_NAME + PERIOD +
819 REPLACE_STRING + OPEN_PARENTHESIS + SINGLE_QUOTE +
820 OPEN_CURLY_BRACKET + SINGLE_QUOTE + COMMA + SPACE +
821 SINGLE_QUOTE + SPACE + SINGLE_QUOTE + CLOSE_PARENTHESIS +
822 SEMI_COLON + NEW_LINE;
823 builder.append(lines);
824 /*
825 *" valInString = valInString.replace({, " ");\n";
826 */
827 lines = TWELVE_SPACE_INDENTATION + FROM_STRING_PARAM_NAME + SPACE +
828 EQUAL + SPACE + FROM_STRING_PARAM_NAME + PERIOD +
829 REPLACE_STRING + OPEN_PARENTHESIS + SINGLE_QUOTE +
830 CLOSE_CURLY_BRACKET + SINGLE_QUOTE + COMMA + SPACE +
831 SINGLE_QUOTE + SPACE + SINGLE_QUOTE + CLOSE_PARENTHESIS +
832 SEMI_COLON + NEW_LINE;
833 builder.append(lines);
834 /*
835 *" valInString = valInString.trim();\n"
836 */
837 lines = TWELVE_SPACE_INDENTATION + FROM_STRING_PARAM_NAME + SPACE +
838 EQUAL + SPACE + FROM_STRING_PARAM_NAME + PERIOD +
839 TRIM_STRING + OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
840 SEMI_COLON + NEW_LINE;
841 builder.append(lines);
842 /*
843 *" String[] bitsTemp = valInString.split(",", 0);\n"
844 */
845 lines = TWELVE_SPACE_INDENTATION + STRING_DATA_TYPE +
846 SQUARE_BRACKETS + SPACE + BITS_STRING_ARRAY_VAR + SPACE +
847 EQUAL + SPACE + FROM_STRING_PARAM_NAME + PERIOD +
848 SPLIT_STRING + OPEN_PARENTHESIS + QUOTES + COMMA + QUOTES +
849 COMMA + SPACE + ZERO + CLOSE_PARENTHESIS + SEMI_COLON +
850 NEW_LINE;
851 builder.append(lines);
852 /*
853 *" for (String bitTemp : bitsTemp) {\n"
854 */
855 lines = TWELVE_SPACE_INDENTATION + FOR + SPACE + OPEN_PARENTHESIS +
856 STRING_DATA_TYPE + SPACE + BIT_TEMP_VAR + SPACE + COLON +
857 SPACE + BITS_STRING_ARRAY_VAR + CLOSE_PARENTHESIS + SPACE +
858 OPEN_CURLY_BRACKET + NEW_LINE;
859 builder.append(lines);
860 /*
861 *" bitTemp = bitTemp.trim();\n"
862 */
863 lines = SIXTEEN_SPACE_INDENTATION + BIT_TEMP_VAR + SPACE + EQUAL +
864 SPACE + BIT_TEMP_VAR + PERIOD + TRIM_STRING +
865 OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
866 SEMI_COLON + NEW_LINE;
867 builder.append(lines);
868 /*
869 *" tmpVal.set(Integer.parseInt(bitTemp));\n"
870 */
871 lines = SIXTEEN_SPACE_INDENTATION + TMP_VAL + PERIOD +
872 SET_METHOD_PREFIX + OPEN_PARENTHESIS + INTEGER_WRAPPER +
873 PERIOD + PARSE_INT + OPEN_PARENTHESIS + BIT_TEMP_VAR +
874 CLOSE_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLON +
875 NEW_LINE;
876 builder.append(lines);
877 /*
878 *" }\n"
879 */
880 lines = TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
881 NEW_LINE;
882 builder.append(lines);
883 return builder.toString();
884 case BINARY:
885 return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL + SPACE +
886 BASE64 + PERIOD + GET_DECODER + OPEN_PARENTHESIS +
887 CLOSE_PARENTHESIS + PERIOD + DECODE + OPEN_PARENTHESIS +
888 FROM_STRING_PARAM_NAME + CLOSE_PARENTHESIS + SEMI_COLON
889 + NEW_LINE;
890 default:
891 return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL +
892 SPACE + StringGenerator.getParseFromStringMethod(
893 targetDataType, fromStringAttr.getAttributeType()) +
894 OPEN_PARENTHESIS + FROM_STRING_PARAM_NAME +
895 CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE;
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530896 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530897 }
898
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530899 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530900 * Returns hash code method open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530901 *
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530902 * @return hash code method open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530903 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530904 static String getHashCodeMethodOpen() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530905 String line;
906 StringBuilder builder = new StringBuilder(getOverRideString());
907 builder.append(methodSignature(HASH_CODE_STRING, EMPTY_STRING, PUBLIC,
908 null, INT, null, CLASS_TYPE));
909 line = getReturnString(OBJECT_STRING + SUFFIX_S + PERIOD + HASH +
910 OPEN_PARENTHESIS, EIGHT_SPACE_INDENTATION);
911 builder.append(line);
912 return builder.toString();
Bharat saraswal022dae92016-03-04 20:08:09 +0530913 }
914
915 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530916 * Returns hash code methods close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530917 *
918 * @param hashcodeString hash code string
919 * @return to hash code method close string
920 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530921 static String getHashCodeMethodClose(String hashcodeString) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530922 String[] array = {SPACE, COMMA};
923 hashcodeString = trimAtLast(hashcodeString, array);
924 return hashcodeString + CLOSE_PARENTHESIS + signatureClose() +
925 methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530926 }
927
928 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530929 * Returns hash code method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +0530930 *
931 * @param attr attribute info
932 * @return hash code method
933 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530934 public static String getHashCodeMethod(JavaAttributeInfo attr) {
janani b703cfe42016-05-17 13:12:22 +0530935 return attr.getAttributeName() + COMMA + SPACE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530936 }
937
938 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530939 * Returns equals method open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530940 *
941 * @param className class name
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530942 * @return equals method open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530943 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530944 static String getEqualsMethodOpen(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530945 return getOverRideString() +
946 methodSignature(EQUALS_STRING, EMPTY_STRING, PUBLIC, OBJ,
947 BOOLEAN_DATA_TYPE, OBJECT_STRING,
948 CLASS_TYPE) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530949 getEqualsMethodsCommonIfCondition() +
950 getEqualsMethodsSpecificIfCondition(className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530951 }
952
953 /**
954 * Returns equal methods if condition string.
955 *
956 * @return if condition string
957 */
958 private static String getEqualsMethodsCommonIfCondition() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530959 return getIfConditionBegin(EIGHT_SPACE_INDENTATION, THIS + SPACE +
960 EQUAL + EQUAL + SPACE + OBJ) + getReturnString(
961 TRUE, TWELVE_SPACE_INDENTATION) + signatureClose()
962 + methodClose(EIGHT_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530963 }
964
965 /**
966 * Returns if condition for specific class object in equals method.
967 *
968 * @param className class name
969 * @return if condition string
970 */
971 private static String getEqualsMethodsSpecificIfCondition(String className) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530972 return EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + OBJ +
973 INSTANCE_OF + className + CLOSE_PARENTHESIS + SPACE +
974 OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION +
975 className + SPACE + OTHER + SPACE + EQUAL + SPACE +
976 OPEN_PARENTHESIS + className + CLOSE_PARENTHESIS + SPACE + OBJ +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530977 SEMI_COLON + NEW_LINE + TWELVE_SPACE_INDENTATION + RETURN +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530978 NEW_LINE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530979 }
980
981 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530982 * Returns equals methods close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530983 *
984 * @param equalMethodString equal method string
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530985 * @return equals method close string
Bharat saraswal022dae92016-03-04 20:08:09 +0530986 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530987 static String getEqualsMethodClose(String equalMethodString) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530988 String[] array = {NEW_LINE, AND, AND, SPACE};
989 equalMethodString = trimAtLast(equalMethodString, array) +
990 signatureClose();
991 return equalMethodString + methodClose(EIGHT_SPACE) +
992 getReturnString(FALSE, EIGHT_SPACE_INDENTATION) +
993 signatureClose() + methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530994 }
995
996 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530997 * Returns equals method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +0530998 *
999 * @param attr attribute info
1000 * @return equals method
1001 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +05301002 public static String getEqualsMethod(JavaAttributeInfo attr) {
janani b703cfe42016-05-17 13:12:22 +05301003 String attributeName = attr.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301004 return SIXTEEN_SPACE_INDENTATION + OBJECT_STRING + SUFFIX_S +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301005 PERIOD + EQUALS_STRING + OPEN_PARENTHESIS + attributeName +
1006 COMMA + SPACE + OTHER + PERIOD + attributeName +
1007 CLOSE_PARENTHESIS + SPACE + AND + AND;
Bharat saraswal022dae92016-03-04 20:08:09 +05301008 }
1009
1010 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301011 * Returns of method's string and java doc for special type.
1012 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301013 * @param attr attribute info
1014 * @param className class name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301015 * @return of method's string and java doc for special type
1016 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301017 public static String getOfMethodStringAndJavaDoc(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301018 String className) {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301019 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +05301020 String attrName = attr.getAttributeName();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301021
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301022 return getJavaDoc(OF_METHOD, className + FOR_TYPE_STRING + attrName,
1023 false, null) + getOfMethodString(attrType, className);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301024 }
1025
1026 /**
1027 * Returns of method's string.
1028 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301029 * @param type data type
1030 * @param name class name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301031 * @return of method's string
1032 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301033 private static String getOfMethodString(String type, String name) {
1034 return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE + STATIC,
1035 VALUE, name, type, CLASS_TYPE) +
1036 methodBody(MethodBodyTypes.OF_METHOD, name, null,
1037 EIGHT_SPACE_INDENTATION, EMPTY_STRING, null, false) +
1038 methodClose(FOUR_SPACE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301039 }
1040
1041 /**
1042 * Returns string and java doc for constructor of type class.
1043 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301044 * @param attr attribute info
1045 * @param className class name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301046 * @return string and java doc for constructor of type class
1047 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301048 public static String getTypeConstructorStringAndJavaDoc(
1049 JavaAttributeInfo attr, String className) {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301050 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +05301051 String attrName = attr.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301052 return getJavaDoc(TYPE_CONSTRUCTOR, attrName, false, null) +
1053 getTypeConstructorString(attrType, attrName, className);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301054 }
1055
1056 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301057 * Returns string and java doc for constructor of type class.
1058 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301059 * @param attr1 first attribute info
1060 * @param attr2 second attribute info
1061 * @param genType class name
1062 * @param type conflict validate type
1063 * @param addFirst whether int came first or uInt came first
Bharat saraswal64e7e232016-07-14 23:33:55 +05301064 * @return string and java doc for constructor of type class
1065 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301066 public static String getTypeConstructorStringAndJavaDoc(
1067 JavaAttributeInfo attr1, JavaAttributeInfo attr2, String genType,
1068 ValidatorTypeForUnionTypes type, boolean addFirst) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301069
Bharat saraswal64e7e232016-07-14 23:33:55 +05301070 String attrType = getReturnType(attr1);
1071 String attrName1 = "";
1072 String attrName2 = "";
1073 if (attr1 != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301074 if (addFirst) {
1075 attrName1 = attr1.getAttributeName();
1076 } else {
1077 attrName2 = attr1.getAttributeName();
1078 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301079 }
1080 if (attr2 != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301081 if (addFirst) {
1082 attrName1 = attr2.getAttributeName();
1083 } else {
1084 attrName2 = attr2.getAttributeName();
1085 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301086 }
1087
Vidyashree Ramab3670472016-08-06 15:49:56 +05301088 String appDataStructure = null;
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301089 if (attr1 != null && attr1.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301090 appDataStructure =
1091 attr1.getCompilerAnnotation().getYangAppDataStructure()
1092 .getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +05301093 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301094 String doc;
1095 if (attrName1.isEmpty()) {
1096 doc = attrName2;
1097 } else {
1098 doc = attrName1;
1099 }
1100 return getJavaDoc(TYPE_CONSTRUCTOR, doc, false, appDataStructure) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301101 getTypeConstructorString(attrType, attrName1,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301102 attrName2, genType,
1103 type, addFirst);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301104 }
1105
1106 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301107 * Returns type constructor string.
1108 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301109 * @param type data type
1110 * @param name attribute name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301111 * @param className class name
1112 * @return type constructor string
1113 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301114 private static String getTypeConstructorString(String type, String name,
1115 String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301116 return methodSignature(className, EMPTY_STRING, PUBLIC, name,
1117 null, type, CLASS_TYPE) +
1118 methodBody(SETTER, name, null, EIGHT_SPACE_INDENTATION,
1119 EMPTY_STRING, null, false) + methodClose(FOUR_SPACE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301120 }
1121
1122 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301123 * Returns type constructor string.
1124 *
1125 * @param type data type
1126 * @param attr1 attribute attr1
1127 * @param className class attr1
1128 * @return type constructor string
1129 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301130 private static String getTypeConstructorString(
1131 String type, String attr1, String attr2, String className,
1132 ValidatorTypeForUnionTypes validatorType, boolean addInt) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301133
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301134 StringBuilder constructor = new StringBuilder(
1135 methodSignature(className, EMPTY_STRING, null, type,
1136 null, type, CLASS_TYPE))
1137 .append(ifConditionForIntInTypeDefConstructor(validatorType,
1138 addInt))
1139 .append(methodBody(SETTER, attr1, null,
1140 TWELVE_SPACE_INDENTATION, EMPTY_STRING,
1141 null, false));
1142 String str = EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE +
1143 ELSE + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
1144 constructor.append(str)
1145 .append(methodBody(SETTER, attr2, null,
1146 TWELVE_SPACE_INDENTATION, EMPTY_STRING,
1147 null, false))
1148 .append(methodClose(FOUR_SPACE))
1149 .append(methodClose(EIGHT_SPACE));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301150
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301151 return constructor.toString();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301152 }
1153
1154 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301155 * Returns interface of add augmentation.
1156 *
1157 * @return interface of add augmentation
1158 */
1159 static String getAddAugmentInfoMethodInterface() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301160 StringBuilder builder = new StringBuilder(generateForAddAugmentation());
1161 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1162 map.put(OBJECT_STRING, VALUE);
1163 map.put(CLASS_STRING, CLASS + OBJECT_STRING);
1164 builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
1165 EMPTY_STRING, EMPTY_STRING,
1166 VOID, map, INTERFACE_TYPE));
1167 return builder.toString();
Bharat saraswal8beac342016-08-04 02:00:03 +05301168 }
1169
1170 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +05301171 * Returns implementation of add augmentation.
1172 *
1173 * @return implementation of add augmentation
1174 */
Bharat saraswal039f59c2016-07-14 21:57:13 +05301175 static String getAddAugmentInfoMethodImpl() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301176 StringBuilder builder = new StringBuilder(getOverRideString());
1177 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1178 map.put(OBJECT_STRING, VALUE);
1179 map.put(CLASS_STRING, CLASS + OBJECT_STRING);
1180 builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
1181 EMPTY_STRING, PUBLIC,
1182 VOID, map, CLASS_TYPE))
1183 .append(methodBody(AUGMENTED_MAP_ADD, null, null,
1184 EIGHT_SPACE_INDENTATION, null, null, false))
1185 .append(methodClose(FOUR_SPACE))
1186 .append(NEW_LINE);
1187 return builder.toString();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301188 }
1189
1190 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301191 * Returns interface of get YANG augment info.
Bharat saraswalaf413b82016-07-14 15:18:20 +05301192 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301193 * @return interface of get YANG augment info
Bharat saraswalaf413b82016-07-14 15:18:20 +05301194 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301195 static String getYangAugmentInfoInterface() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301196 return generateForGetAugmentation() +
1197 methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE, EMPTY_STRING,
1198 null, CLASS + OBJECT_STRING,
1199 OBJECT_STRING, CLASS_STRING, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301200 }
Bharat saraswalaf413b82016-07-14 15:18:20 +05301201
Bharat saraswal8beac342016-08-04 02:00:03 +05301202 /**
1203 * Returns implementation of get YANG augment info.
1204 *
1205 * @return implementation of get YANG augment info
1206 */
1207 static String getYangAugmentInfoImpl() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301208 return getOverRideString() +
1209 methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE, EMPTY_STRING,
1210 PUBLIC, CLASS + OBJECT_STRING, OBJECT_STRING,
1211 CLASS_STRING, CLASS_TYPE) +
1212 methodBody(AUGMENTED_MAP_GET_VALUE, null, null,
1213 EIGHT_SPACE_INDENTATION, null, null, false) +
1214 methodClose(FOUR_SPACE);
Bharat saraswalaf413b82016-07-14 15:18:20 +05301215 }
1216
1217 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301218 * Returns implementation of get YANG augment info.
Bharat saraswal039f59c2016-07-14 21:57:13 +05301219 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301220 * @return implementation of get YANG augment info
Bharat saraswal039f59c2016-07-14 21:57:13 +05301221 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301222 static String getYangAugmentInfoMapInterface() {
1223 return NEW_LINE +
1224 getJavaDoc(GETTER_METHOD, YANG_AUGMENTED_INFO_LOWER_CASE + MAP,
1225 false, null) +
1226 methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE + MAP,
1227 EMPTY_STRING, null, null,
1228 getAugmentMapTypeString(), null, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301229 }
1230
1231 /**
1232 * Returns implementation of get YANG augment info.
1233 *
1234 * @return implementation of get YANG augment info
1235 */
1236 static String getYangAugmentInfoMapImpl() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301237 return getOverRideString() + methodSignature(
1238 YANG_AUGMENTED_INFO_LOWER_CASE + MAP, EMPTY_STRING, PUBLIC, null,
1239 getAugmentMapTypeString(), null, CLASS_TYPE) +
1240 methodBody(AUGMENTED_MAP_GETTER, null, null,
1241 EIGHT_SPACE_INDENTATION, null, null, false) +
1242 methodClose(FOUR_SPACE);
Bharat saraswal039f59c2016-07-14 21:57:13 +05301243 }
1244
1245 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301246 * Returns enum's constructor.
1247 *
1248 * @param className enum's class name
1249 * @return enum's constructor
1250 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301251 static String getEnumsConstructor(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301252 StringBuilder builder = new StringBuilder();
1253 String clsName = getSmallCase(className);
1254 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1255 map.put(INT, clsName);
1256 map.put(STRING_DATA_TYPE, SCHEMA_NAME);
1257 builder.append(multiAttrMethodSignature(className, EMPTY_STRING,
1258 EMPTY_STRING, null,
1259 map, CLASS_TYPE))
1260 .append(methodBody(SETTER, clsName, EMPTY_STRING,
1261 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
1262 EMPTY_STRING, false))
1263 .append(methodBody(SETTER, SCHEMA_NAME, EMPTY_STRING,
1264 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
1265 EMPTY_STRING, false))
1266 .append(methodClose(FOUR_SPACE));
1267
1268 return builder.toString();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301269 }
Bharat saraswal250a7472016-05-12 13:16:57 +05301270
1271 /**
1272 * Returns of method for enum class.
1273 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301274 * @param className class name
1275 * @param type method body type
Bharat saraswal250a7472016-05-12 13:16:57 +05301276 * @return of method
1277 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301278 static String getEnumsOfValueMethod(String className,
1279 YangEnumeration enumeration,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301280 MethodBodyTypes type) {
1281 String name = getCapitalCase(className);
1282 StringBuilder builder = new StringBuilder(getJavaDoc(
1283 OF_METHOD, name + SPACE + FOR,
1284 false, null));
1285 //Switch statement.
1286 String sw = EIGHT_SPACE_INDENTATION + SWITCH + SPACE + brackets(
1287 OPEN_CLOSE_BRACKET_WITH_VALUE, VALUE, null) +
1288 methodSignatureClose(CLASS_TYPE);
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301289 String str;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301290 switch (type) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301291 case ENUM_METHOD_INT_VALUE:
1292 builder.append(getEnumValueMethodSignature(name, INT))
1293 .append(sw);
1294 for (YangEnum yangEnum : enumeration.getEnumSet()) {
1295 str = getEnumJavaAttribute(yangEnum.getNamedValue())
1296 .toUpperCase();
1297 builder.append(getEnumValueMethodCases(
1298 EMPTY_STRING + yangEnum.getValue(), str, name));
1299 }
1300 break;
1301 case ENUM_METHOD_STRING_VALUE:
1302 builder.append(getEnumValueMethodSignature(name,
1303 STRING_DATA_TYPE))
1304 .append(sw);
1305 for (YangEnum yangEnum : enumeration.getEnumSet()) {
1306 str = getEnumJavaAttribute(yangEnum.getNamedValue())
1307 .toUpperCase();
1308 builder.append(getEnumValueMethodCases(
1309 QUOTES + yangEnum.getNamedValue() + QUOTES, str,
1310 name));
1311 }
1312 break;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301313 default:
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301314 return null;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301315 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301316
1317 String method = TWELVE_SPACE_INDENTATION + DEFAULT + SPACE + COLON +
1318 NEW_LINE;
1319 builder.append(method)
1320 .append(getReturnString(NULL, SIXTEEN_SPACE_INDENTATION))
1321 .append(signatureClose())
1322 .append(methodClose(EIGHT_SPACE))
1323 .append(methodClose(FOUR_SPACE));
1324
1325 return builder.toString();
1326 }
1327
1328 /**
1329 * Returns enum value method signature.
1330 *
1331 * @param name method name
1332 * @param type param type
1333 * @return enum value method signature
1334 */
1335 private static String getEnumValueMethodSignature(String name, String type) {
1336 return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE +
1337 STATIC, VALUE, name, type, CLASS_TYPE);
1338 }
1339
1340 /**
1341 * Returns enum value method's cases.
1342 *
1343 * @param caseType case type
1344 * @param value return value
1345 * @param name name of class
1346 * @return enum value method's cases
1347 */
1348 private static String getEnumValueMethodCases(String caseType, String value,
1349 String name) {
1350 return TWELVE_SPACE_INDENTATION + CASE + SPACE + caseType +
1351 COLON + NEW_LINE + getReturnString(name,
1352 SIXTEEN_SPACE_INDENTATION) +
1353 PERIOD + value + signatureClose();
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301354 }
Bharat saraswald14cbe82016-07-14 13:26:18 +05301355
1356 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +05301357 * Returns augmented data getter and setter methods for service class.
1358 *
1359 * @param parent parent node
1360 * @return augmented data getter and setter methods for service class
1361 */
Bharat saraswal039f59c2016-07-14 21:57:13 +05301362 static String getAugmentsDataMethodForService(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +05301363 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
1364 YangNode augmentedNode;
1365 String curNodeName;
1366 String method;
1367 StringBuilder methods = new StringBuilder();
1368 String parentName;
1369 String returnType;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301370 YangNode methodNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301371 YangPluginConfig pluginConfig =
1372 ((JavaFileInfoContainer) parent).getJavaFileInfo()
1373 .getPluginConfig();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301374 for (YangAtomicPath nodeId : targets) {
Bharat saraswal039f59c2016-07-14 21:57:13 +05301375 augmentedNode = nodeId.getResolvedNode().getParent();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301376 methodNode = nodeId.getResolvedNode();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301377 if (((JavaFileInfoContainer) methodNode).getJavaFileInfo()
1378 .getJavaName() != null) {
1379 curNodeName =
1380 ((JavaFileInfoContainer) methodNode).getJavaFileInfo()
1381 .getJavaName();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301382 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301383 curNodeName = getCapitalCase(
1384 getCamelCase(methodNode.getName(),
1385 pluginConfig.getConflictResolver()));
Bharat saraswalaf413b82016-07-14 15:18:20 +05301386 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301387 returnType =
1388 getAugmentedClassNameForDataMethods(augmentedNode, parent);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301389 parentName = getCurNodeName(augmentedNode,
1390 pluginConfig);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301391 method = generateForGetMethodWithAttribute(returnType) +
1392 getGetMethodWithArgument(returnType, AUGMENTED +
1393 parentName + getCapitalCase(curNodeName)) + NEW_LINE;
Bharat saraswalaf413b82016-07-14 15:18:20 +05301394 methods.append(method);
1395
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301396 method = getJavaDoc(MANAGER_SETTER_METHOD,
1397 AUGMENTED + getCapitalCase(parentName) +
1398 getCapitalCase(curNodeName), false,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301399 null) +
Bharat saraswalaf413b82016-07-14 15:18:20 +05301400 getSetterForInterface(getSmallCase(AUGMENTED) + parentName +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301401 getCapitalCase(curNodeName),
1402 returnType, parentName, false,
1403 GENERATE_SERVICE_AND_MANAGER, null) +
1404 NEW_LINE;
Bharat saraswalaf413b82016-07-14 15:18:20 +05301405 methods.append(method);
1406 }
1407 return methods.toString();
1408 }
1409
1410 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301411 * Returns validator method for range in union class.
1412 *
1413 * @param type type
1414 * @return validator method for range in union class
1415 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301416 static String getRangeValidatorMethodForUnion(String type) {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301417 String newType;
1418 if (type.contentEquals(BIG_INTEGER)) {
1419 newType = LONG;
1420 } else {
1421 newType = INT;
1422 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301423 StringBuilder builder = new StringBuilder(generateForValidatorMethod());
1424 String var = getSmallCase(BIG_INTEGER);
1425 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1426 map.put(MIN_RANGE, type);
1427 map.put(MAX_RANGE, type);
1428 map.put(VALUE, newType);
1429 builder.append(multiAttrMethodSignature(VALIDATE_RANGE, EMPTY_STRING,
1430 PRIVATE, BOOLEAN_DATA_TYPE, map,
1431 CLASS_TYPE));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301432 if (type.contentEquals(BIG_INTEGER)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301433 //Create new instance of big integer.
1434 builder.append(getNewInstance(BIG_INTEGER, var, EIGHT_SPACE_INDENTATION,
1435 QUOTES + SPACE + QUOTES + SPACE +
1436 ADD + SPACE + VALUE))
1437 //Add return string.
1438 .append(getReturnString(var, EIGHT_SPACE_INDENTATION))
1439 //Add compareTo string
1440 .append(getCompareToString())
1441 //Add && condition.
1442 .append(ifAndAndCondition(
1443 //Add == condition
1444 ifEqualEqualCondition(
1445 brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
1446 MIN_RANGE, null), ONE),
1447 var))
1448 //Add compareTo string.
1449 .append(getCompareToString())
1450 //Add == condition.
1451 .append(ifEqualEqualCondition(
1452 brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
1453 MAX_RANGE, null), ONE))
1454 .append(signatureClose());
Bharat saraswal64e7e232016-07-14 23:33:55 +05301455 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301456 builder.append(getReturnString(VALUE, EIGHT_SPACE_INDENTATION))
1457 .append(getGreaterThanCondition())
1458 .append(ifAndAndCondition(MIN_RANGE, VALUE))
1459 .append(getLesserThanCondition())
1460 .append(MAX_RANGE)
1461 .append(signatureClose());
Bharat saraswal64e7e232016-07-14 23:33:55 +05301462 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301463 builder.append(methodClose(FOUR_SPACE));
1464 return builder.toString();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301465 }
1466
Bharat saraswal8beac342016-08-04 02:00:03 +05301467 //Get method with arguments.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301468 private static String getGetMethodWithArgument(String returnType,
1469 String yangName) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301470 return methodSignature(getCapitalCase(yangName), GET_METHOD_PREFIX,
1471 null, getSmallCase(returnType),
1472 returnType, returnType + OP_PARAM,
1473 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301474 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301475
Bharat saraswal8beac342016-08-04 02:00:03 +05301476 /**
1477 * Returns add to list method interface.
1478 *
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301479 * @param attr java attribute
1480 * @param className name of the class
Bharat saraswal8beac342016-08-04 02:00:03 +05301481 * @return add to list method interface
1482 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301483 public static String getAddToListMethodInterface(JavaAttributeInfo attr,
1484 String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301485
1486 return methodSignature(ADD_STRING + TO_CAPS + getCapitalCase(
1487 attr.getAttributeName()), EMPTY_STRING, EMPTY_STRING,
1488 ADD_STRING + TO_CAPS,
1489 className + BUILDER, getReturnType(attr),
1490 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301491 }
1492
1493 /**
1494 * Returns add to list method impl.
1495 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301496 * @param attr java attribute
1497 * @param name class name
1498 * @param isRoot is root
Bharat saraswal8beac342016-08-04 02:00:03 +05301499 * @return add to list method impl
1500 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301501 public static String getAddToListMethodImpl(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301502 String name,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301503 boolean isRoot) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301504 String attrName = attr.getAttributeName();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301505 String retString = "";
1506 if (!isRoot) {
1507 retString = getOverRideString();
1508 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301509 StringBuilder builder = new StringBuilder(retString);
1510 builder.append(methodSignature(ADD_STRING + TO_CAPS +
1511 getCapitalCase(attrName),
1512 EMPTY_STRING, PUBLIC, ADD_STRING + TO_CAPS,
1513 name + BUILDER, getReturnType(attr),
1514 CLASS_TYPE))
1515 .append(getIfConditionForAddToListMethod(attrName));
1516 retString = EIGHT_SPACE_INDENTATION + attrName + PERIOD + ADD_STRING +
1517 OPEN_PARENTHESIS + ADD_STRING + TO_CAPS + CLOSE_PARENTHESIS;
1518 builder.append(retString)
1519 .append(signatureClose())
1520 .append(getReturnString(THIS, EIGHT_SPACE_INDENTATION))
1521 .append(signatureClose())
1522 .append(methodClose(FOUR_SPACE));
1523 return builder.toString();
1524 }
1525
1526 // Returns if condition for add to list method.
1527 static String getIfConditionForAddToListMethod(String name) {
1528 return getIfConditionBegin(EIGHT_SPACE_INDENTATION, name + SPACE + EQUAL +
1529 EQUAL + SPACE + NULL) + TWELVE_SPACE_INDENTATION +
1530 name + SPACE + EQUAL + SPACE +
1531 NEW + SPACE + ARRAY_LIST + signatureClose() + methodClose(
1532 EIGHT_SPACE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301533 }
1534
1535 /**
1536 * Returns builder method for class.
1537 *
1538 * @param name name of class
1539 * @return builder method for class
1540 */
1541 static String builderMethod(String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301542 return generateForBuilderMethod(name) +
1543 methodSignature(BUILDER_LOWER_CASE,
1544 EMPTY_STRING, PUBLIC + SPACE +
1545 STATIC, null, name + BUILDER, null, CLASS_TYPE) +
1546 getReturnString(NEW + SPACE + name + BUILDER,
1547 EIGHT_SPACE_INDENTATION) +
1548 brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
1549 methodClose(FOUR_SPACE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301550 }
1551
1552 /**
1553 * Returns is filter content match interface.
1554 *
1555 * @param name name of node
1556 * @return is filter content match interface
1557 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301558 static String processSubtreeFilteringInterface(String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301559 String method = " /**\n" +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301560 " * Checks if the passed " + name +
1561 " maps the content match query condition.\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301562 " *\n" +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301563 " * @param " + getSmallCase(name) + SPACE +
1564 getSmallCase(name) + SPACE + "being passed to check" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301565 " for" +
1566 " content match\n" +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301567 " * @param isSelectAllSchemaChild is select all schema child\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301568 " * @return match result\n" +
1569 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301570 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1571 map.put(name, getSmallCase(name));
1572 map.put(BOOLEAN_DATA_TYPE, SELECT_ALL_CHILD);
1573
1574 return method + multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING,
1575 EMPTY_STRING, EMPTY_STRING,
1576 name, map, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301577 }
1578
1579 /**
1580 * Returns is value set interface.
1581 *
1582 * @return is value set interface
1583 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301584 static String isLeafValueSetInterface() {
1585 String method = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301586 " * Checks if the leaf value is set.\n" +
1587 " *\n" +
1588 " * @param leaf leaf whose value status needs to checked\n" +
1589 " * @return result of leaf value set in object\n" +
1590 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301591 return method + methodSignature(VALUE_LEAF_SET, EMPTY_STRING, null,
1592 LEAF, BOOLEAN_DATA_TYPE,
1593 LEAF_IDENTIFIER, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301594 }
1595
1596 /**
1597 * Returns is select leaf set interface.
1598 *
1599 * @return is select leaf set interface
1600 */
1601 static String isSelectLeafSetInterface() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301602 String method = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301603 " * Checks if the leaf is set to be a selected leaf.\n" +
1604 " *\n" +
1605 " * @param leaf if leaf needs to be selected\n" +
1606 " * @return result of leaf value set in object\n" +
1607 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301608 return method + methodSignature(IS_SELECT_LEAF, EMPTY_STRING, null,
1609 LEAF, BOOLEAN_DATA_TYPE, LEAF_IDENTIFIER,
1610 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301611 }
1612
1613 /**
1614 * Returns set select leaf set interface.
1615 *
1616 * @param name node name
1617 * @return set select leaf set interface
1618 */
1619 static String setSelectLeafSetInterface(String name) {
1620 String method = " /**\n" +
1621 " * Set a leaf to be selected.\n" +
1622 " *\n" +
1623 " * @param leaf leaf needs to be selected\n" +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301624 " * @return builder object for select leaf\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301625 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301626 return method + methodSignature(SET_SELECT_LEAF, EMPTY_STRING,
1627 null, LEAF, name +
1628 BUILDER, LEAF_IDENTIFIER,
1629 INTERFACE_TYPE) + NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +05301630 }
1631
1632 /**
1633 * Returns leaf identifier interface enum signature.
1634 *
1635 * @param name name of node
1636 * @return leaf identifier interface enum signature
1637 */
1638 static String getInterfaceLeafIdEnumSignature(String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301639 String start = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301640 " * Identify the leaf of " + name + PERIOD + NEW_LINE +
1641 " */\n";
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301642 return start + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + ENUM + SPACE +
1643 LEAF_IDENTIFIER + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +05301644 }
1645
1646 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301647 * Returns setter for select leaf.
1648 *
1649 * @param name name of node
1650 * @param isRootNode if root node
1651 * @return setter for select leaf
1652 */
1653 static String getSetterForSelectLeaf(String name, boolean isRootNode) {
1654 String append = OVERRIDE;
1655 if (isRootNode) {
1656 append = EMPTY_STRING;
1657 }
1658 return "\n" +
1659 " " + append + "\n" +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301660 " public " + name + BUILDER +
1661 " selectLeaf(LeafIdentifier leaf) {\n" +
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301662 " getSelectLeafFlags().set(leaf.getLeafIndex());\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301663 " return this;\n" +
1664 " }\n";
1665 }
Bharat saraswal97459962016-02-20 21:57:16 +05301666}