blob: 2a1b28f802e55d6e7f9f8f68eef548567cca720e [file] [log] [blame]
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
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 saraswal0663aff2016-10-18 23:16:14 +053019import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053020import org.onosproject.yangutils.datamodel.YangAugment;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053021import org.onosproject.yangutils.datamodel.YangCase;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053022import org.onosproject.yangutils.datamodel.YangChoice;
23import org.onosproject.yangutils.datamodel.YangLeafRef;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053024import org.onosproject.yangutils.datamodel.YangLeavesHolder;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053025import org.onosproject.yangutils.datamodel.YangNode;
26import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053027import org.onosproject.yangutils.translator.exception.TranslatorException;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053028import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswal0663aff2016-10-18 23:16:14 +053029import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053030import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
31import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053032
Bharat saraswal9fab16b2016-09-23 23:27:24 +053033import java.io.IOException;
Bharat saraswal0663aff2016-10-18 23:16:14 +053034import java.util.LinkedHashMap;
35import java.util.Map;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053036
37import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
38import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
39import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
40import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
41import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.EIGHT_SPACE;
Bharat saraswal0663aff2016-10-18 23:16:14 +053042import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053043import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.SIXTEEN_SPACE;
44import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWELVE_SPACE;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053045import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWENTY_EIGHT_SPACE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053046import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWENTY_FOUR_SPACE;
47import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWENTY_SPACE;
48import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswal0663aff2016-10-18 23:16:14 +053049import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
50import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getAppInstanceAttrString;
Bharat saraswal0663aff2016-10-18 23:16:14 +053051import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getElseIfConditionBegin;
52import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getEqualEqualString;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053053import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getForLoopString;
Bharat saraswal0663aff2016-10-18 23:16:14 +053054import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIfConditionBegin;
55import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getLeafFlagSetString;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053056import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getNewInstance;
Bharat saraswal0663aff2016-10-18 23:16:14 +053057import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOpenCloseParaWithValue;
58import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnString;
59import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getTwoParaEqualsString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053060import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
Bharat saraswal0663aff2016-10-18 23:16:14 +053061import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.multiAttrMethodSignature;
62import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053063import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053064import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
65import static org.onosproject.yangutils.utils.UtilConstants.AND_OPERATION;
66import static org.onosproject.yangutils.utils.UtilConstants.APP_INSTANCE;
Bharat saraswalb41904b2016-10-20 19:22:36 +053067import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053068import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
69import static org.onosproject.yangutils.utils.UtilConstants.BREAK;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053070import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Bharat saraswalb41904b2016-10-20 19:22:36 +053071import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_LOWER_CASE;
Bharat saraswal0663aff2016-10-18 23:16:14 +053072import static org.onosproject.yangutils.utils.UtilConstants.BUILD_FOR_FILTER;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053073import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
74import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053075import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053076import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal0663aff2016-10-18 23:16:14 +053077import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053078import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053079import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
Bharat saraswal0663aff2016-10-18 23:16:14 +053080import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053081import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
82import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053083import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053084import static org.onosproject.yangutils.utils.UtilConstants.FLAG;
Bharat saraswal0663aff2016-10-18 23:16:14 +053085import static org.onosproject.yangutils.utils.UtilConstants.GET;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053086import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053087import static org.onosproject.yangutils.utils.UtilConstants.IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053088import static org.onosproject.yangutils.utils.UtilConstants.IS_EMPTY;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053089import static org.onosproject.yangutils.utils.UtilConstants.IS_SELECT_ALL_SCHEMA_CHILD_FLAG;
Bharat saraswalb41904b2016-10-20 19:22:36 +053090import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053091import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
92import static org.onosproject.yangutils.utils.UtilConstants.NOT;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053093import static org.onosproject.yangutils.utils.UtilConstants.NULL;
Bharat saraswal94844d62016-10-13 13:28:03 +053094import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053095import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
96import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswal0663aff2016-10-18 23:16:14 +053097import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053098import static org.onosproject.yangutils.utils.UtilConstants.OR_OPERATION;
99import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
100import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530101import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_CHILD_NODE_STF_PARAM;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530102import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_LEAF_LIST_STF_PARAM;
103import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_LEAF_STF_PARAM;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530104import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530105import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530106import static org.onosproject.yangutils.utils.UtilConstants.RESULT;
107import static org.onosproject.yangutils.utils.UtilConstants.SELECT_ALL_CHILD;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530108import static org.onosproject.yangutils.utils.UtilConstants.SELECT_ALL_CHILD_SCHEMA_PARAM;
Bharat saraswal94844d62016-10-13 13:28:03 +0530109import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530110import static org.onosproject.yangutils.utils.UtilConstants.SELECT_OR_CONTAINMENT_NODE_PARAM;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530111import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswalb41904b2016-10-20 19:22:36 +0530112import static org.onosproject.yangutils.utils.UtilConstants.SET_METHOD_PREFIX;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530113import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530114import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530115import static org.onosproject.yangutils.utils.UtilConstants.STF_BUILDER_PARAM;
Bharat saraswalb41904b2016-10-20 19:22:36 +0530116import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERED;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530117import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERING_RESULT_BUILDER;
118import static org.onosproject.yangutils.utils.UtilConstants.THIRTY_TWO_SPACE_INDENTATION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530119import static org.onosproject.yangutils.utils.UtilConstants.TO;
120import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530121import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
122import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_EIGHT_SPACE_INDENTATION;
123import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_FOUR_SPACE_INDENTATION;
124import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_SPACE_INDENTATION;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530125import static org.onosproject.yangutils.utils.UtilConstants.TWO;
Bharat saraswal94844d62016-10-13 13:28:03 +0530126import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF;
Bharat saraswalb41904b2016-10-20 19:22:36 +0530127import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF_SET;
128import static org.onosproject.yangutils.utils.UtilConstants.ZERO;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530129import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530130import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530131
132/**
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530133 * Represents generator for subtree filtering methods of generated files
134 * based on the file type.
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530135 */
136public final class SubtreeFilteringMethodsGenerator {
137
138 /**
139 * private to make it a util.
140 */
141 private SubtreeFilteringMethodsGenerator() {
142 }
143
144 /**
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530145 * Returns process sub tree for choice interface class.
146 *
147 * @param node choice node
148 * @return process sub tree for choice interface class
149 */
150 static String getProcessSubTreeForChoiceInterface(YangNode node) {
151 if (!(node instanceof YangChoice)) {
152 throw new TranslatorException("process sub tree for interface is " +
153 "only allowed in choice " +
154 "node.");
155 }
156 JavaFileInfoTranslator info = ((JavaCodeGeneratorInfo) node)
157 .getJavaFileInfo();
158
159 String name = info.getJavaName();
160 String returnType = getCapitalCase(name);
161
162 String javadoc = "\n /**\n" +
163 " * Applications need not to implement process subtree " +
164 "of " + name + "\n * it will be overridden by " +
165 "corresponding case class.\n" +
166 " *\n" +
167 " * @param " + APP_INSTANCE + SPACE +
168 APP_INSTANCE + SPACE + "being passed to check" +
169 " for" +
170 " content match\n" +
171 " * @param isSelectAllSchemaChild is select all schema child\n" +
172 " * @return match result\n" +
173 " */\n";
174 StringBuilder builder = new StringBuilder(javadoc);
175 Map<String, String> param = new LinkedHashMap<>();
176 param.put(APP_INSTANCE, returnType);
177 param.put(SELECT_ALL_CHILD_SCHEMA_PARAM, BOOLEAN_DATA_TYPE);
178 builder.append(multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING, null,
179 DEFAULT, returnType, param,
180 CLASS_TYPE))
181 .append(getReturnString(NULL, EIGHT_SPACE_INDENTATION))
182 .append(signatureClose()).append(methodClose(FOUR_SPACE));
183 return builder.toString();
184 }
185
186 /**
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530187 * Returns is filter content match for leaf.
188 *
189 * @param javaAttributeInfo java attribute
190 * @param type data type
191 * @return is filter content match for leaf
192 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530193 public static String getSubtreeFilteringForLeaf(
194 JavaAttributeInfo javaAttributeInfo, YangType<?> type) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530195 String attrQualifiedType;
196 String attributeName = javaAttributeInfo.getAttributeName();
197 attrQualifiedType = getIfFilterContentMatchMethodImpl(attributeName,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530198 type);
Bharat saraswal0663aff2016-10-18 23:16:14 +0530199 /* if (valueLeafFlags.get(LeafIdentifier.LEAF.getLeafIndex())) {
200 * if (appInstance.leaf() != leaf()) {
201 * return false;
202 * } else {
203 * subTreeFilteringResultBuilder.leaf(appInstance.leaf());
204 * }
205 * } else if (selectLeafFlags.get(LeafIdentifier.LEAF.getLeafIndex()) ||
206 * isSelectAllSchemaChild) {
207 * isAnySelectOrContainmentNode = true;
208 * subTreeFilteringResultBuilder.leaf(appInstance.leaf());
209 * }*/
Bharat saraswalb41904b2016-10-20 19:22:36 +0530210
211/* if (isSubTreeFiltered && !appInstance.isLeafValueSet(
212 LeafIdentifier.LEAF2)) {
213 subTreeFilteringResultBuilder.leaf2(leaf2());
214 } else {
215 return false;
216 }*/
217 String condition = SUBTREE_FILTERED + SPACE + AND_OPERATION + SPACE + NOT +
218 APP_INSTANCE + PERIOD + VALUE_LEAF_SET +
219 getOpenCloseParaWithValue(
220 LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase());
Bharat saraswal0663aff2016-10-18 23:16:14 +0530221 return getIfConditionBegin(EIGHT_SPACE_INDENTATION, getLeafFlagSetString(
222 attributeName, VALUE_LEAF, EMPTY_STRING, GET)) +
223 getIfConditionBegin(TWELVE_SPACE_INDENTATION, attrQualifiedType) +
Bharat saraswalb41904b2016-10-20 19:22:36 +0530224 getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, condition) +
225 TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER +
226 PERIOD + attributeName + getOpenCloseParaWithValue(
227 attributeName + OPEN_CLOSE_BRACKET_STRING) + signatureClose() +
228 SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + ELSE +
229 OPEN_CURLY_BRACKET + NEW_LINE + getReturnString(
230 FALSE, TWENTY_SPACE_INDENTATION) + signatureClose() +
231 SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE +
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530232 TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + ELSE +
233 OPEN_CURLY_BRACKET + NEW_LINE +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530234 getSubTreeBuilderCallString(SIXTEEN_SPACE_INDENTATION, attributeName,
235 TWELVE_SPACE) +
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530236 getElseIfConditionBegin(EIGHT_SPACE_INDENTATION, getLeafFlagSetString(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530237 attributeName, SELECT_LEAF, EMPTY_STRING, GET) + SPACE +
238 OR_OPERATION + SPACE + IS_SELECT_ALL_SCHEMA_CHILD_FLAG) +
Bharat saraswalb41904b2016-10-20 19:22:36 +0530239 getSelectOrContainmentAssignString() +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530240 getSubTreeBuilderCallString(TWELVE_SPACE_INDENTATION, attributeName,
241 EIGHT_SPACE);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530242 }
243
Bharat saraswal0663aff2016-10-18 23:16:14 +0530244 private static String getSubTreeBuilderCallString(String indent, String
245 name, IndentationType type) {
246 return indent + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + name +
247 getOpenCloseParaWithValue(APP_INSTANCE + PERIOD + name +
248 OPEN_CLOSE_BRACKET_STRING) +
249 signatureClose() + methodClose(type);
250 }
251
252 private static String getAttrTypeForFcmWhenPrimitiveDataType(
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530253 String attributeName) {
254 return/* TODO: Need to check if we can expose the value leaf flag in
255 interface.
256 NOT + APP_INSTANCE + PERIOD + GET_VALUE_LEAF_FLAGS +
257 OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
258 GET_METHOD_PREFIX + OPEN_PARENTHESIS + LEAF_IDENTIFIER +
259 PERIOD + attributeName.toUpperCase() + PERIOD
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530260 + GET_LEAF_INDEX + OR_OPERATION +*/
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530261 APP_INSTANCE + PERIOD + attributeName + OPEN_PARENTHESIS +
262 CLOSE_PARENTHESIS + SPACE + NOT + EQUAL + SPACE +
263 attributeName + OPEN_PARENTHESIS +
264 CLOSE_PARENTHESIS;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530265 }
266
Bharat saraswal0663aff2016-10-18 23:16:14 +0530267 private static String attrTypeForFcmWhenNonPrimitiveDataTypes(String name) {
268 /*
269 * appInstance.name() == null || name().equals(appInstance.name())
270 */
271 return getEqualEqualString(StringGenerator.getAppInstanceAttrString(name), NULL) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530272 SPACE + OR_OPERATION + SPACE + NOT + OPEN_PARENTHESIS +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530273 getTwoParaEqualsString(name + OPEN_CLOSE_BRACKET_STRING,
274 StringGenerator.getAppInstanceAttrString(name))
275 + CLOSE_PARENTHESIS;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530276 }
277
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530278 private static String getIfFilterContentMatchMethodImpl(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530279 String name, YangType dataType) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530280 String attrQualifiedType;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530281 if (dataType.getDataType().isPrimitiveDataType()) {
282 attrQualifiedType = getAttrTypeForFcmWhenPrimitiveDataType(name);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530283 } else if (dataType.getDataType() == LEAFREF) {
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530284
285 // When leafref in grouping.
286 if (((YangLeafRef) dataType.getDataTypeExtendedInfo())
287 .isInGrouping()) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530288 attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(name);
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530289 } else {
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530290 YangType type = ((YangLeafRef) dataType.getDataTypeExtendedInfo())
291 .getEffectiveDataType();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530292 if (type.getDataType().isPrimitiveDataType()) {
293 attrQualifiedType = getAttrTypeForFcmWhenPrimitiveDataType(name);
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530294 } else {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530295 attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(
296 name);
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530297 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530298 }
299 } else {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530300 attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(name);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530301 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530302 return attrQualifiedType;
303 }
304
305 /**
306 * Returns is filter content match for leaf.
307 *
308 * @param javaAttributeInfo java attribute
309 * @return is filter content match for leaf
310 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530311 public static String getSubtreeFilteringForLeafList(
312 JavaAttributeInfo javaAttributeInfo) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530313 return getSubtreeFilteringForList(javaAttributeInfo, true, null);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530314 }
315
316 /**
317 * Returns is filter content match for child node.
318 *
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530319 * @param curNode current node
320 * @param path path of temp file
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530321 * @return is filter content match for child node
322 */
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530323 static String getProcessChildNodeSubtreeFiltering(YangNode curNode, String path)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530324 throws IOException {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530325 /* Generate code will look like this.
326 private boolean processChildNodesSubTreeFiltering(Link
327 appInstance, LinkBuilder subTreeFilteringResultBuilder,
328 Boolean isAnySelectOrContainmentNode, boolean isSelectAllSchemaChild) {
329 if (isSelectAllSchemaChild) {
330 for (Areas areas : appInstance.areas()) {
331 subTreeFilteringResultBuilder.addToAreas(areas);
332 }
333 } else if (areas() != null) {
334 isAnySelectOrContainmentNode = true;
335 if (!areas().isEmpty()) {
336 if (appInstance.areas() != null && !appInstance.areas().isEmpty()) {
337 for (Areas areas : areas()) {
338 for (Areas areas2 : appInstance.areas()) {
339 Areas result = areas.processSubtreeFiltering(areas2, false);
340 if (result != null) {
341 subTreeFilteringResultBuilder.addToAreas(result);
342 }
343 }
344 }
345 }
346 } else {
347 if (appInstance.areas() != null && !appInstance.areas().isEmpty()) {
348 for (Areas areas : appInstance.areas()) {
349 subTreeFilteringResultBuilder.addToAreas(areas);
350 }
351 }
352 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530353 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530354
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530355 return true;
356 }*/
357 return getProcessStfMethods(PROCESS_CHILD_NODE_STF_PARAM, curNode,
358 path,
359 FILTER_CONTENT_MATCH_FOR_NODES_MASK);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530360 }
361
362 /**
363 * Returns is filter content match for leaf list.
364 *
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530365 * @param curNode current node
366 * @param path path of temp file
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530367 * @return is filter content match for leaf list
368 */
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530369 static String getProcessLeafListSubtreeFiltering(YangNode curNode, String path)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530370 throws IOException {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530371 /* Generate code will look like this.
372 private boolean processLeafListSubTreeFiltering(Link appInstance, LinkBuilder subTreeFilteringResultBuilder,
373 Boolean isAnySelectOrContainmentNode, boolean isSelectAllSchemaChild) {
374 if (isSelectAllSchemaChild) {
375 for (String portId : appInstance.portId()) {
376 subTreeFilteringResultBuilder.addToPortId(portId);
377 }
378 } else if (portId() != null) {
379 if (!portId().isEmpty()) {
380 if (appInstance.portId() == null || appInstance.portId().isEmpty()) {
381 return false;
382 }
383 for (String portId : portId()) {
384 boolean flag = false;
385 for (String portId2 : appInstance.portId()) {
386 if (portId.equals(portId2)) {
387 flag = true;
388 subTreeFilteringResultBuilder.addToPortId(portId2);
389 break;
390 }
391 }
392 if (!flag) {
393 return false;
394 }
395 }
396 } else {
397 isAnySelectOrContainmentNode = true;
398 if (appInstance.portId() != null && !appInstance.portId().isEmpty()) {
399 for (String portId : appInstance.portId()) {
400 subTreeFilteringResultBuilder.addToPortId(portId);
401 }
402 }
403 }
404 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530405
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530406 return true;
407 }*/
408 return getProcessStfMethods(PROCESS_LEAF_LIST_STF_PARAM, curNode, path,
409 FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530410 }
411
412 /**
413 * Returns is filter content match for leaf.
414 *
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530415 * @param curNode current node
416 * @param path path of temp file
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530417 * @return is filter content match for leaf
418 */
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530419 static String getProcessLeafSubtreeFiltering(YangNode curNode, String path)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530420 throws IOException {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530421 /* Generate code will look like this.
422 private boolean processLeafSubtreeFiltering(Link appInstance, LinkBuilder subTreeFilteringResultBuilder,
423 Boolean isAnySelectOrContainmentNode, boolean isSelectAllSchemaChild) {
424 if (valueLeafFlags.get(LeafIdentifier.PORT.getLeafIndex())) {
425 if (appInstance.port() != port()) {
426 return false;
427 } else {
428 subTreeFilteringResultBuilder.port(appInstance.port());
429 }
430 } else if (selectLeafFlags.get(LeafIdentifier.PORT.getLeafIndex()) || isSelectAllSchemaChild) {
431 isAnySelectOrContainmentNode = true;
432 subTreeFilteringResultBuilder.port(appInstance.port());
433 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530434
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530435 return true;
436 }*/
437 return getProcessStfMethods(PROCESS_LEAF_STF_PARAM, curNode, path,
438 FILTER_CONTENT_MATCH_FOR_LEAF_MASK);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530439 }
440
441 /**
442 * Returns is filter content match for leaf.
443 *
Bharat saraswal0663aff2016-10-18 23:16:14 +0530444 * @param curNode current node
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530445 * @return is filter content match for leaf
446 */
Bharat saraswal0663aff2016-10-18 23:16:14 +0530447 static String getProcessSubtreeFilteringStart(YangNode curNode) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530448
449 /* Generate code will look like this.
450 public Link processSubtreeFiltering(Link appInstance, boolean isSelectAllSchemaChild) {
451 LinkBuilder subTreeFilteringResultBuilder = new LinkBuilder();
452 Boolean isAnySelectOrContainmentNode = false;
453 */
454 StringBuilder builder = new StringBuilder();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530455 JavaFileInfoTranslator javaFileInfo =
456 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530457 String instance = APP_INSTANCE;
458 String name = getCapitalCase(javaFileInfo.getJavaName());
459 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530460 String caseName = getNameOfClassForIfCase(curNode);
461 String returnType;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530462 if (curNode instanceof RpcNotificationContainer) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530463 returnType = name + OP_PARAM;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530464 } else {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530465 returnType = DEFAULT_CAPS + name;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530466 }
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530467 if (caseName != null) {
468 instance = INSTANCE;
469 name = caseName;
470 }
471
Bharat saraswalb41904b2016-10-20 19:22:36 +0530472 String javadoc = "\n /**\n" +
473 " * Checks if the passed " + name + " maps the content " +
474 "match query condition.\n" +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530475 " *\n" +
Bharat saraswalb41904b2016-10-20 19:22:36 +0530476 " * @param " + instance + SPACE + instance + SPACE +
477 "being passed to check for content match\n" +
478 " * @param isSelectAllSchemaChild is select all schema " +
479 "child\n" +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530480 " * @return match result\n" +
481 " */\n";
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530482 Map<String, String> param = new LinkedHashMap<>();
483 param.put(instance, name);
484 param.put(SELECT_ALL_CHILD_SCHEMA_PARAM, BOOLEAN_DATA_TYPE);
485 builder.append(javadoc)
486 .append(multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING, null,
487 PUBLIC, returnType, param,
488 CLASS_TYPE));
Bharat saraswal0663aff2016-10-18 23:16:14 +0530489
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530490 builder.append(getNewInstance(builderNamePrefix + BUILDER,
491 SUBTREE_FILTERING_RESULT_BUILDER,
492 EIGHT_SPACE_INDENTATION, EMPTY_STRING));
Bharat saraswalb41904b2016-10-20 19:22:36 +0530493 builder.append(getNewInstance(BIT_SET,
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530494 IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG,
Bharat saraswalb41904b2016-10-20 19:22:36 +0530495 EIGHT_SPACE_INDENTATION, EMPTY_STRING));
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530496 if (caseName != null) {
497 builder.append(getCaseCastString(javaFileInfo, instance, curNode));
498 }
499
500 return builder.toString();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530501 }
502
503 /**
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530504 * Returns all process sub tree method implementations.
505 *
506 * @param methodName method name
507 * @param curNode current node
508 * @param path path for temporary file
509 * @param file temp file
510 * @return method implementations
511 * @throws IOException when fails to fetch data from temp files
512 */
513 private static String getProcessStfMethods(
514 String methodName, YangNode curNode, String path, int file)
515 throws IOException {
Bharat saraswalb41904b2016-10-20 19:22:36 +0530516 StringBuilder builder = new StringBuilder(EMPTY_STRING);
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530517 JavaFileInfoTranslator javaFileInfo =
518 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
519 String instance = APP_INSTANCE;
520 String name = getCapitalCase(javaFileInfo.getJavaName());
521 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
522 String caseName = getNameOfClassForIfCase(curNode);
523 if (caseName != null) {
524 instance = INSTANCE;
525 name = caseName;
526 }
527
528 Map<String, String> param = new LinkedHashMap<>();
529 param.put(instance, name);
530 param.put(STF_BUILDER_PARAM, builderNamePrefix + BUILDER);
Bharat saraswalb41904b2016-10-20 19:22:36 +0530531 param.put(SELECT_OR_CONTAINMENT_NODE_PARAM, BIT_SET);
532 param.put(SELECT_ALL_CHILD_SCHEMA_PARAM, BOOLEAN_DATA_TYPE);
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530533
534 builder.append(multiAttrMethodSignature(methodName, null,
535 PRIVATE, BOOLEAN_DATA_TYPE, param, CLASS_TYPE));
536
537 if (caseName != null) {
538 builder.append(getCaseCastString(javaFileInfo, instance, curNode));
539 }
540 builder.append(getDataFromTempFileHandle(file,
541 getBeanFiles(curNode), path))
542 .append(getReturnString(TRUE, EIGHT_SPACE_INDENTATION)).append(
543 signatureClose()).append(methodClose(FOUR_SPACE))
544 .append(NEW_LINE);
545 return builder.toString();
546 }
547
548 /**
549 * Returns the body for process subtree filtering.
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530550 *
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530551 * @param curNode node for which the code is being generated
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530552 * @return body of subtree filtering
553 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530554 static String getProcessSubtreeFunctionBody(YangNode curNode) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530555 StringBuilder builder = new StringBuilder();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530556
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530557 /* if (!processLeafSubtreeFiltering(appInstance, subTreeFilteringResultBuilder,
558 isAnySelectOrContainmentNode, isSelectAllSchemaChild)) {
559 return null;
560 }
561 if (!processLeafListSubTreeFiltering(appInstance, subTreeFilteringResultBuilder,
562 isAnySelectOrContainmentNode, isSelectAllSchemaChild)) {
563 return null;
564 }
565 if (!processChildNodesSubTreeFiltering(appInstance, subTreeFilteringResultBuilder,
566 isAnySelectOrContainmentNode, isSelectAllSchemaChild)) {
567 return null;
568 }
569 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530570 if (curNode instanceof YangLeavesHolder) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530571 YangLeavesHolder holder = (YangLeavesHolder) curNode;
572 if (!holder.getListOfLeaf().isEmpty()) {
573 builder.append(getInnerStfMethodClass(PROCESS_LEAF_STF_PARAM));
574 }
575 if (!holder.getListOfLeafList().isEmpty()) {
576 builder.append(getInnerStfMethodClass(PROCESS_LEAF_LIST_STF_PARAM));
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530577 }
578 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530579 if (curNode.getChild() != null) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530580 builder.append(getInnerStfMethodClass(PROCESS_CHILD_NODE_STF_PARAM));
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530581 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530582
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530583 return builder.toString();
584 }
585
586 //Method calls for process subtree filtering method.
587 private static String getInnerStfMethodClass(String name) {
588 StringBuilder builder = new StringBuilder()
589 .append(getIfConditionBegin(EIGHT_SPACE_INDENTATION,
590 getMethodCallsConditionsForStfMethods(name)))
591 .append(getReturnString(NULL, TWELVE_SPACE_INDENTATION)).append(
592 signatureClose()).append(methodClose(EIGHT_SPACE));
593 return builder.toString();
594 }
595
596 // Condition for if check in process sub tree method.
597 private static String getMethodCallsConditionsForStfMethods(String name) {
598 return NOT + name + getOpenCloseParaWithValue(getConditionString());
599 }
600
601 //variable call for conditional method call
602 private static String getConditionString() {
603 return APP_INSTANCE + COMMA + SPACE + SUBTREE_FILTERING_RESULT_BUILDER +
604 COMMA + SPACE + SELECT_OR_CONTAINMENT_NODE_PARAM + COMMA + SPACE +
605 SELECT_ALL_CHILD;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530606 }
607
608 /**
609 * Returns is filter content match for node.
610 *
611 * @param attr attribute info
Bharat saraswal0663aff2016-10-18 23:16:14 +0530612 * @param node YANG node
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530613 * @return is filter content match for node
614 */
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530615 public static String getSubtreeFilteringForNode(JavaAttributeInfo attr, YangNode node) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530616 boolean isList = attr.isListAttr();
617 if (isList) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530618 return getSubtreeFilteringForList(attr, false, node);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530619 } else {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530620 return getSubtreeFilteringForChildNode(attr, node);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530621 }
622 }
623
624 /**
625 * Returns is filter content match close.
626 *
Bharat saraswalb41904b2016-10-20 19:22:36 +0530627 * @param name name of class
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530628 * @return is filter content match close
629 */
Bharat saraswalb41904b2016-10-20 19:22:36 +0530630 static String getProcessSubTreeFilteringEnd(String name) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530631 /* generate code will look like this.
632 if (!isSelectAllSchemaChild && !isAnySelectOrContainmentNode) {
633 return processSubtreeFiltering(appInstance, true);
634 }
635 return subTreeFilteringResultBuilder.build();
636 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530637
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530638 StringBuilder builder = new StringBuilder();
639 String cond1 = NOT + IS_SELECT_ALL_SCHEMA_CHILD_FLAG + SPACE + AND_OPERATION +
Bharat saraswalb41904b2016-10-20 19:22:36 +0530640 SPACE + NOT + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG +
641 PERIOD + GET + getOpenCloseParaWithValue(ZERO);
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530642 String call = PROCESS_SUBTREE_FILTERING + getOpenCloseParaWithValue(
643 APP_INSTANCE + COMMA + SPACE + TRUE);
644 builder.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, cond1))
645 .append(getReturnString(call, TWELVE_SPACE_INDENTATION))
646 .append(signatureClose()).append(methodClose(EIGHT_SPACE));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530647
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530648 call = getOpenCloseParaWithValue(name) + SPACE +
Bharat saraswalb41904b2016-10-20 19:22:36 +0530649 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + BUILD_FOR_FILTER +
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530650 OPEN_CLOSE_BRACKET_STRING;
651 builder.append(getReturnString(call, EIGHT_SPACE_INDENTATION))
652 .append(signatureClose()).append(methodClose(FOUR_SPACE))
653 .append(NEW_LINE);
654 return builder.toString();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530655 }
656
657 /**
658 * Returns filter content match for child nodes.
659 *
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530660 * @param attr attribute to be added
661 * @param node YANG node
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530662 * @return filter content match for child nodes
663 */
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530664 private static String getSubtreeFilteringForChildNode(JavaAttributeInfo attr,
665 YangNode node) {
666 StringBuilder builder = new StringBuilder();
667 String name = attr.getAttributeName();
668 String clsInfo = attr.getImportInfo()
Bharat saraswal0663aff2016-10-18 23:16:14 +0530669 .getClassInfo();
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530670 String type = DEFAULT_CAPS + attr.getImportInfo()
Bharat saraswal0663aff2016-10-18 23:16:14 +0530671 .getClassInfo();
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530672 if (attr.isQualifiedName()) {
673 type = attr.getImportInfo().getPkgInfo() + PERIOD +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530674 type;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530675 clsInfo = attr.getImportInfo().getPkgInfo() + PERIOD +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530676 clsInfo;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530677 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530678 String classCast = getOpenCloseParaWithValue(type) + SPACE;
679 String cast = getOpenCloseParaWithValue(classCast + name);
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530680 if (node != null && node instanceof YangChoice) {
681 cast = name;
682 }
683
Bharat saraswalb41904b2016-10-20 19:22:36 +0530684 String resultString = cast + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION +
685 PERIOD + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530686 + APP_INSTANCE + PERIOD + name + OPEN_CLOSE_BRACKET_STRING
Bharat saraswal0663aff2016-10-18 23:16:14 +0530687 + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLON +
688 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530689
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530690 String cond1 = name + OPEN_CLOSE_BRACKET_STRING + SPACE + NOT + EQUAL +
691 SPACE + NULL + SPACE + OR_OPERATION + SPACE + SELECT_ALL_CHILD;
692 builder.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, cond1))
693 .append(getSelectOrContainmentAssignString());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530694
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530695 builder.append(getIfConditionBegin(TWELVE_SPACE_INDENTATION,
Bharat saraswalb41904b2016-10-20 19:22:36 +0530696 getAppInstanceCondition(name, NOT)));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530697
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530698 String assignment = SIXTEEN_SPACE_INDENTATION + clsInfo + SPACE + RESULT +
Bharat saraswalb41904b2016-10-20 19:22:36 +0530699 SPACE + EQUAL + SPACE + NULL + signatureClose();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530700
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530701 builder.append(assignment)
702 .append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
703 SELECT_ALL_CHILD));
Bharat saraswalb41904b2016-10-20 19:22:36 +0530704/*
705 result = ((DefaultInterfaces)(DefaultInterfaces.builder()
706 .build())).processSubtreeFiltering(appInstance.interfaces(),
707 true);*/
Bharat saraswal0663aff2016-10-18 23:16:14 +0530708
Bharat saraswalb41904b2016-10-20 19:22:36 +0530709 assignment = getDummyObjectCreation(node, name, clsInfo, type, classCast, false);
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530710 builder.append(assignment).append(SIXTEEN_SPACE_INDENTATION).append(
711 CLOSE_CURLY_BRACKET).append(ELSE).append(OPEN_CURLY_BRACKET)
712 .append(NEW_LINE);
Bharat saraswal0663aff2016-10-18 23:16:14 +0530713
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530714 assignment = TWENTY_SPACE_INDENTATION + RESULT + SPACE + EQUAL + SPACE
715 + resultString;
716 cond1 = RESULT + SPACE + NOT + EQUAL + SPACE + NULL;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530717
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530718 builder.append(assignment).append(methodClose(SIXTEEN_SPACE))
719 .append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond1));
Bharat saraswal0663aff2016-10-18 23:16:14 +0530720
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530721 assignment = TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER +
722 PERIOD + name + getOpenCloseParaWithValue(RESULT) +
723 signatureClose();
724 builder.append(assignment).append(methodClose(SIXTEEN_SPACE)).append(
Bharat saraswalb41904b2016-10-20 19:22:36 +0530725 TWELVE_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET)
726 .append(getSubTreeFilteredCondition(name)).append(methodClose(EIGHT_SPACE));
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530727 return builder.toString();
728 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530729
Bharat saraswalb41904b2016-10-20 19:22:36 +0530730 private static String getAppInstanceCondition(String name, String condition) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530731 return APP_INSTANCE + PERIOD + name + OPEN_CLOSE_BRACKET_STRING + SPACE +
Bharat saraswalb41904b2016-10-20 19:22:36 +0530732 condition + EQUAL + SPACE + NULL;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530733 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530734
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530735 private static String getSelectOrContainmentAssignString() {
736 return TWELVE_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG +
Bharat saraswalb41904b2016-10-20 19:22:36 +0530737 PERIOD + SET_METHOD_PREFIX + getOpenCloseParaWithValue(ZERO) +
738 signatureClose();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530739 }
740
741 /**
742 * Returns filter content match for list types.
743 *
744 * @param javaAttributeInfo attribute information
745 * @param isLeafList if for leaf list
Bharat saraswal0663aff2016-10-18 23:16:14 +0530746 * @param node YANG node
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530747 * @return filter content match for list types
748 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530749 private static String getSubtreeFilteringForList(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530750 JavaAttributeInfo javaAttributeInfo, boolean isLeafList,
751 YangNode node) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530752 StringBuilder builder = new StringBuilder();
753 String caps = getCapitalCase(javaAttributeInfo.getAttributeName());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530754 String name = javaAttributeInfo.getAttributeName();
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530755 String type = javaAttributeInfo.getImportInfo().getClassInfo();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530756 String clsInfo = DEFAULT_CAPS + type;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530757 if (javaAttributeInfo.isQualifiedName()) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530758 type = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
759 type;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530760 clsInfo = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
761 clsInfo;
762 }
763
764 String classCast = getOpenCloseParaWithValue(clsInfo) + SPACE;
765 String cast = getOpenCloseParaWithValue(classCast + name);
Bharat saraswal0663aff2016-10-18 23:16:14 +0530766
767 if (node != null && node instanceof YangChoice) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530768 cast = name;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530769 }
Bharat saraswalb41904b2016-10-20 19:22:36 +0530770 String resultString = cast + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION +
771 PERIOD + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS +
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530772 name + "2" + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLON +
773 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530774 /*
775 * If select all schema child
776 */
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530777 builder.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION,
778 IS_SELECT_ALL_SCHEMA_CHILD_FLAG))
Bharat saraswalb41904b2016-10-20 19:22:36 +0530779 .append(getIfConditionBegin(TWELVE_SPACE_INDENTATION,
780 getAppInstanceCondition(name, NOT)))
781 .append(getForLoopString(SIXTEEN_SPACE_INDENTATION, type, name,
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530782 getAppInstanceAttrString(name)));
Bharat saraswalb41904b2016-10-20 19:22:36 +0530783 String assignment;
784 if (!isLeafList) {
785 builder.append(TWENTY_SPACE_INDENTATION).append(type).append(SPACE)
786 .append(RESULT).append(signatureClose());
787 assignment = getDummyObjectCreation(node, name, type, clsInfo,
788 classCast, true);
789 builder.append(assignment);
790 assignment = TWENTY_SPACE_INDENTATION +
791 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
792 getCapitalCase(TO) + caps + getOpenCloseParaWithValue(RESULT) +
793 signatureClose();
794 builder.append(assignment);
795 } else {
796 assignment = TWENTY_SPACE_INDENTATION +
797 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
798 getCapitalCase(TO) + caps + getOpenCloseParaWithValue(name) +
799 signatureClose();
800 builder.append(assignment);
801 }
802 builder.append(methodClose(SIXTEEN_SPACE))
803 .append(TWELVE_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530804
Bharat saraswalb41904b2016-10-20 19:22:36 +0530805/* } else {
806 if (isSubTreeFiltered && leafList2() != null) {
807 subTreeFilteringResultBuilder.addToLeafList2(leafList2());
808 }
809 }*/
810 builder.append(getSubTreeFilteredCondition(name));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530811
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530812 String cond = name + OPEN_CLOSE_BRACKET_STRING + SPACE + NOT + EQUAL +
813 SPACE + NULL;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530814
815 //If need to explicitly participate in query
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530816 builder.append(getElseIfConditionBegin(EIGHT_SPACE_INDENTATION, cond));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530817
818 if (!isLeafList) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530819 builder.append(getSelectOrContainmentAssignString());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530820 }
821
822 //If there is any parameter in the query condition
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530823 cond = NOT + name + OPEN_CLOSE_BRACKET_STRING + PERIOD + IS_EMPTY;
824 builder.append(getIfConditionBegin(TWELVE_SPACE_INDENTATION, cond));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530825
826 if (isLeafList) {
Bharat saraswalb41904b2016-10-20 19:22:36 +0530827 cond = getAppInstanceCondition(name, EQUAL) + SPACE + OR_OPERATION +
828 SPACE + APP_INSTANCE + PERIOD + name +
829 OPEN_CLOSE_BRACKET_STRING + PERIOD + IS_EMPTY;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530830 /*
831 * If there is no app instance to perform content match
832 */
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530833 builder.append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond))
834 .append(getReturnString(FALSE, TWENTY_SPACE_INDENTATION))
835 .append(signatureClose())
836 .append(methodClose(SIXTEEN_SPACE))
837 // for instance iterator
838 .append(getForLoopString(SIXTEEN_SPACE_INDENTATION, type, name,
839 name + OPEN_CLOSE_BRACKET_STRING));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530840
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530841 assignment = TWENTY_SPACE_INDENTATION + BOOLEAN_DATA_TYPE + SPACE +
842 FLAG + SPACE + EQUAL + SPACE + FALSE + signatureClose();
843 builder.append(assignment)
844 // for app instance iterator
845 .append(getForLoopString(TWENTY_SPACE_INDENTATION, type,
846 name + TWO,
847 getAppInstanceAttrString(name)));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530848
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530849 cond = name + PERIOD + EQUALS_STRING
850 + OPEN_PARENTHESIS + name + TWO + CLOSE_PARENTHESIS;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530851 //the content match leaf list attribute value matches
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530852 builder.append(getIfConditionBegin(TWENTY_FOUR_SPACE_INDENTATION,
853 cond));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530854
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530855 assignment = TWENTY_EIGHT_SPACE_INDENTATION + FLAG + SPACE + EQUAL +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530856 SPACE + TRUE + SEMI_COLON + NEW_LINE;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530857 builder.append(assignment);
858 assignment = TWENTY_EIGHT_SPACE_INDENTATION +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530859 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530860 getCapitalCase(TO) + caps + getOpenCloseParaWithValue(
861 name + TWO) + signatureClose();
862 builder.append(assignment).append(TWENTY_EIGHT_SPACE_INDENTATION)
863 .append(BREAK).append(signatureClose())
864 //the content match leaf list attribute value matches
865 .append(methodClose(TWENTY_FOUR_SPACE))
866 // for app instance iterator
867 .append(methodClose(TWENTY_SPACE))
868 //if the content match failed
869 .append(getIfConditionBegin(TWENTY_SPACE_INDENTATION, NOT +
870 FLAG))
871 .append(getReturnString(FALSE, TWENTY_FOUR_SPACE_INDENTATION))
872 .append(signatureClose()).append(methodClose(TWENTY_SPACE))// if flag == false
873 .append(methodClose(SIXTEEN_SPACE)); // for instance iterator
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530874
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530875 } else {
Bharat saraswalb41904b2016-10-20 19:22:36 +0530876 cond = getAppInstanceCondition(name, NOT) + SPACE + AND_OPERATION +
877 SPACE + NOT + getAppInstanceAttrString(name) +
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530878 PERIOD + IS_EMPTY;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530879 /*if there is any app instance entry*/
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530880 builder.append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
881 cond))
882 //loop all the app instance(s)
883 .append(getForLoopString(SIXTEEN_SPACE_INDENTATION, type, name,
884 name + OPEN_CLOSE_BRACKET_STRING))
885 .append(getForLoopString(TWENTY_SPACE_INDENTATION, type,
886 name + TWO,
887 getAppInstanceAttrString(name)));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530888
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530889
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530890 assignment = TWENTY_EIGHT_SPACE_INDENTATION + type + SPACE +
891 RESULT + SPACE + EQUAL + SPACE + resultString;
892 builder.append(assignment);
893 cond = RESULT + SPACE + NOT + EQUAL + SPACE + NULL;
894 builder.append(getIfConditionBegin(TWENTY_EIGHT_SPACE_INDENTATION, cond));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530895
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530896 assignment = THIRTY_TWO_SPACE_INDENTATION +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530897 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530898 getCapitalCase(TO) + caps + getOpenCloseParaWithValue(
Bharat saraswalb41904b2016-10-20 19:22:36 +0530899 RESULT) + signatureClose();
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530900 builder.append(assignment).append(methodClose(TWENTY_EIGHT_SPACE))
901 //loop all the app instance(s)
902 .append(methodClose(TWENTY_FOUR_SPACE))
903 //loop all the query condition instance(s)
904 .append(methodClose(TWENTY_SPACE))
Bharat saraswalb41904b2016-10-20 19:22:36 +0530905 .append(SIXTEEN_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET)
906 .append(getSubTreeFilteredCondition(name));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530907 //if there is any app instance entry
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530908 }
909
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530910 cond = TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET
911 + ELSE + OPEN_CURLY_BRACKET + NEW_LINE;
912 builder.append(cond);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530913
914 if (isLeafList) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530915 builder.append(getSelectOrContainmentAssignString());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530916 }
Bharat saraswalb41904b2016-10-20 19:22:36 +0530917 cond = getAppInstanceCondition(name, NOT) + SPACE + AND_OPERATION +
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530918 SPACE + NOT + getAppInstanceAttrString(name) + PERIOD + IS_EMPTY;
919 builder.append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond))
920 .append(getForLoopString(SIXTEEN_SPACE_INDENTATION, type,
921 name, getAppInstanceAttrString(name)));
922 assignment = TWENTY_FOUR_SPACE_INDENTATION +
923 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
924 getCapitalCase(TO) + caps + getOpenCloseParaWithValue(
925 name) + signatureClose();
926 builder.append(assignment).append(methodClose(TWENTY_SPACE))// Close collection Iteration loop
927 // close if condition
928 .append(methodClose(SIXTEEN_SPACE))
929 .append(methodClose(TWELVE_SPACE))// close else condition
930 .append(methodClose(EIGHT_SPACE));// close else if condition
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530931
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530932 return builder.toString();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530933 }
934
935 //Returns method string for op params augmented syntax
936 static String getAugmentableSubTreeFiltering() {
Bharat saraswalb41904b2016-10-20 19:22:36 +0530937 return " for (Object augmentInfo : yangAugmentedInfoMap()" +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530938 ".values()) {\n" +
939 " Object appInstanceInfo = appInstance.yangAugmentedInfo(" +
940 "augmentInfo.getClass());\n" +
941 " if (appInstanceInfo == null) {\n" +
942 " subTreeFilteringResultBuilder.addYangAugmentedInfo(" +
943 "augmentInfo, augmentInfo.getClass());\n" +
944 " } else {\n" +
945 " Object processSubtreeFiltering;\n" +
946 " try {\n" +
947 " Class<?> augmentedClass = augmentInfo" +
948 ".getClass();\n" +
949 " processSubtreeFiltering = augmentInfo.getClass()" +
950 ".getMethod(\"processSubtreeFiltering\", augmentedClass).invoke(" +
951 "augmentInfo, appInstanceInfo);\n" +
952 " if (processSubtreeFiltering != null) {\n" +
953 " subTreeFilteringResultBuilder" +
954 ".addYangAugmentedInfo(processSubtreeFiltering, processSubtreeFiltering.getClass());\n" +
955 " }\n" +
956 " } catch (NoSuchMethodException |" +
957 " InvocationTargetException | IllegalAccessException e) {\n" +
958 " continue;\n" +
959 " }\n" +
960 " }\n" +
961 " }\n";
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530962 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530963
Bharat saraswalb41904b2016-10-20 19:22:36 +0530964 private static String getSubTreeFilteredCondition(String name) {
965 StringBuilder builder = new StringBuilder();
966 String cond = SUBTREE_FILTERED + SPACE + AND_OPERATION + SPACE + name +
967 OPEN_CLOSE_BRACKET_STRING + SPACE + NOT + EQUAL + SPACE + NULL;
968
969 builder.append(ELSE).append(OPEN_CURLY_BRACKET).append(NEW_LINE)
970 .append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond))
971 .append(TWENTY_SPACE_INDENTATION)
972 .append(SUBTREE_FILTERING_RESULT_BUILDER).append(PERIOD)
973 .append(name).append(getOpenCloseParaWithValue(name)).append(
974 signatureClose()).append(SIXTEEN_SPACE_INDENTATION).append(
975 CLOSE_CURLY_BRACKET).append(NEW_LINE).append(TWELVE_SPACE_INDENTATION)
976 .append(CLOSE_CURLY_BRACKET).append(NEW_LINE);
977 return builder.toString();
978 }
979
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530980 private static String getNameOfClassForIfCase(YangNode curNode) {
981 String name = null;
982 JavaFileInfoTranslator parentInfo;
983 if (curNode instanceof YangCase) {
984 YangNode parent = curNode.getParent();
985 if (parent instanceof YangChoice) {
986 parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
987 name = getCapitalCase(parentInfo.getJavaName());
988 } else if (parent instanceof YangAugment) {
989 parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent)
990 .getAugmentedNode()).getJavaFileInfo();
991 if (parentInfo != null) {
992 name = getCapitalCase(parentInfo.getJavaName());
993 } else {
994 name = getCapitalCase(getCamelCase(
995 ((YangAugment) parent).getAugmentedNode().getName(),
996 null));
997 }
998 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530999 }
Bharat saraswalc2fd3222016-10-19 16:10:27 +05301000 return name;
Bharat saraswal0663aff2016-10-18 23:16:14 +05301001 }
1002
Bharat saraswalc2fd3222016-10-19 16:10:27 +05301003 private static String getCaseCastString(
1004 JavaFileInfoTranslator javaFileInfo, String instance, YangNode curNode) {
1005 if (curNode instanceof YangCase) {
1006 String caseName = DEFAULT_CAPS + getCapitalCase(
1007 javaFileInfo.getJavaName());
1008 return EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
1009 EQUAL + SPACE + OPEN_PARENTHESIS + caseName +
1010 CLOSE_PARENTHESIS + SPACE + instance + signatureClose();
Bharat saraswal0663aff2016-10-18 23:16:14 +05301011 }
Bharat saraswalc2fd3222016-10-19 16:10:27 +05301012 return null;
Bharat saraswal0663aff2016-10-18 23:16:14 +05301013 }
1014
Bharat saraswalb41904b2016-10-20 19:22:36 +05301015 private static String getDummyObjectCreation(YangNode node, String name,
1016 String clsInfo, String type,
1017 String classCast, boolean isList) {
1018 String para = getAppInstanceAttrString(name);
1019 if (isList) {
1020 para = name;
1021 }
1022 if (node != null && node instanceof YangChoice) {
1023 return getChoiceReflectionResult(name, clsInfo);
1024 }
1025 return TWENTY_SPACE_INDENTATION + RESULT + SPACE + EQUAL + SPACE +
1026 getOpenCloseParaWithValue(
1027 classCast + type + PERIOD + BUILDER_LOWER_CASE +
1028 OPEN_CLOSE_BRACKET_STRING + NEW_LINE +
1029 TWENTY_EIGHT_SPACE_INDENTATION + PERIOD +
1030 BUILD_FOR_FILTER + OPEN_CLOSE_BRACKET_STRING) +
1031 PERIOD + PROCESS_SUBTREE_FILTERING + getOpenCloseParaWithValue(
1032 para + COMMA + SPACE + TRUE) + signatureClose();
1033
1034 }
1035
1036 private static String getChoiceReflectionResult(String name, String returnType) {
1037 String call = "appInstance." + name + "()";
1038 return " Class<?>[] classArray = " + call + "" +
1039 ".getClass()" +
1040 ".getInterfaces();\n" +
1041 " Class<?> caseClass = classArray[0];\n" +
1042 " try {\n" +
1043 " Object obj1 = caseClass.newInstance();\n" +
1044 " Method method = caseClass.getMethod(\"builder\", caseClass);\n" +
1045 " Object obj = method.invoke(obj1," +
1046 " (Object) null);\n" +
1047 " method = caseClass.getMethod(\"build\", caseClass);\n" +
1048 " Object obj2 = method.invoke(obj, " +
1049 "(Object) null);\n" +
1050 " method = caseClass.getMethod(\"processSubtreeFiltering\", caseClass);\n" +
1051 " result = (" + returnType + ") method.invoke" +
1052 "(obj2, " + call + ", true);\n" +
1053 " } catch (NoSuchMethodException | InstantiationException |\n" +
1054 " IllegalAccessException | InvocationTargetException e) {\n" +
1055 " e.printStackTrace();\n" +
1056 " }\n";
1057 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301058}