blob: fb7b732aec83a26cf412b43480e7e2bdc0424d0a [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;
63import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.valueAssign;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053064import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053065import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
66import static org.onosproject.yangutils.utils.UtilConstants.AND_OPERATION;
67import static org.onosproject.yangutils.utils.UtilConstants.APP_INSTANCE;
68import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
Bharat saraswal0663aff2016-10-18 23:16:14 +053069import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053070import static org.onosproject.yangutils.utils.UtilConstants.BREAK;
71import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
72import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Bharat saraswal0663aff2016-10-18 23:16:14 +053073import static org.onosproject.yangutils.utils.UtilConstants.BUILD_FOR_FILTER;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053074import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
75import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053076import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053077import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal0663aff2016-10-18 23:16:14 +053078import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053079import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053080import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
Bharat saraswal0663aff2016-10-18 23:16:14 +053081import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053082import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
83import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053084import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053085import static org.onosproject.yangutils.utils.UtilConstants.FLAG;
Bharat saraswal0663aff2016-10-18 23:16:14 +053086import static org.onosproject.yangutils.utils.UtilConstants.GET;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053087import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053088import static org.onosproject.yangutils.utils.UtilConstants.IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053089import static org.onosproject.yangutils.utils.UtilConstants.IS_EMPTY;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053090import static org.onosproject.yangutils.utils.UtilConstants.IS_SELECT_ALL_SCHEMA_CHILD_FLAG;
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;
112import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530113import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530114import static org.onosproject.yangutils.utils.UtilConstants.STF_BUILDER_PARAM;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530115import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERING_RESULT_BUILDER;
116import static org.onosproject.yangutils.utils.UtilConstants.THIRTY_TWO_SPACE_INDENTATION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530117import static org.onosproject.yangutils.utils.UtilConstants.TO;
118import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530119import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
120import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_EIGHT_SPACE_INDENTATION;
121import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_FOUR_SPACE_INDENTATION;
122import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_SPACE_INDENTATION;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530123import static org.onosproject.yangutils.utils.UtilConstants.TWO;
Bharat saraswal94844d62016-10-13 13:28:03 +0530124import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530125import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530126import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530127
128/**
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530129 * Represents generator for subtree filtering methods of generated files
130 * based on the file type.
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530131 */
132public final class SubtreeFilteringMethodsGenerator {
133
134 /**
135 * private to make it a util.
136 */
137 private SubtreeFilteringMethodsGenerator() {
138 }
139
140 /**
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530141 * Returns process sub tree for choice interface class.
142 *
143 * @param node choice node
144 * @return process sub tree for choice interface class
145 */
146 static String getProcessSubTreeForChoiceInterface(YangNode node) {
147 if (!(node instanceof YangChoice)) {
148 throw new TranslatorException("process sub tree for interface is " +
149 "only allowed in choice " +
150 "node.");
151 }
152 JavaFileInfoTranslator info = ((JavaCodeGeneratorInfo) node)
153 .getJavaFileInfo();
154
155 String name = info.getJavaName();
156 String returnType = getCapitalCase(name);
157
158 String javadoc = "\n /**\n" +
159 " * Applications need not to implement process subtree " +
160 "of " + name + "\n * it will be overridden by " +
161 "corresponding case class.\n" +
162 " *\n" +
163 " * @param " + APP_INSTANCE + SPACE +
164 APP_INSTANCE + SPACE + "being passed to check" +
165 " for" +
166 " content match\n" +
167 " * @param isSelectAllSchemaChild is select all schema child\n" +
168 " * @return match result\n" +
169 " */\n";
170 StringBuilder builder = new StringBuilder(javadoc);
171 Map<String, String> param = new LinkedHashMap<>();
172 param.put(APP_INSTANCE, returnType);
173 param.put(SELECT_ALL_CHILD_SCHEMA_PARAM, BOOLEAN_DATA_TYPE);
174 builder.append(multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING, null,
175 DEFAULT, returnType, param,
176 CLASS_TYPE))
177 .append(getReturnString(NULL, EIGHT_SPACE_INDENTATION))
178 .append(signatureClose()).append(methodClose(FOUR_SPACE));
179 return builder.toString();
180 }
181
182 /**
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530183 * Returns is filter content match for leaf.
184 *
185 * @param javaAttributeInfo java attribute
186 * @param type data type
187 * @return is filter content match for leaf
188 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530189 public static String getSubtreeFilteringForLeaf(
190 JavaAttributeInfo javaAttributeInfo, YangType<?> type) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530191 String attrQualifiedType;
192 String attributeName = javaAttributeInfo.getAttributeName();
193 attrQualifiedType = getIfFilterContentMatchMethodImpl(attributeName,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530194 type);
Bharat saraswal0663aff2016-10-18 23:16:14 +0530195 /* if (valueLeafFlags.get(LeafIdentifier.LEAF.getLeafIndex())) {
196 * if (appInstance.leaf() != leaf()) {
197 * return false;
198 * } else {
199 * subTreeFilteringResultBuilder.leaf(appInstance.leaf());
200 * }
201 * } else if (selectLeafFlags.get(LeafIdentifier.LEAF.getLeafIndex()) ||
202 * isSelectAllSchemaChild) {
203 * isAnySelectOrContainmentNode = true;
204 * subTreeFilteringResultBuilder.leaf(appInstance.leaf());
205 * }*/
206 return getIfConditionBegin(EIGHT_SPACE_INDENTATION, getLeafFlagSetString(
207 attributeName, VALUE_LEAF, EMPTY_STRING, GET)) +
208 getIfConditionBegin(TWELVE_SPACE_INDENTATION, attrQualifiedType) +
209 getReturnString(FALSE, SIXTEEN_SPACE_INDENTATION) +
210 signatureClose() +
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530211 TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + ELSE +
212 OPEN_CURLY_BRACKET + NEW_LINE +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530213 getSubTreeBuilderCallString(SIXTEEN_SPACE_INDENTATION, attributeName,
214 TWELVE_SPACE) +
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530215 getElseIfConditionBegin(EIGHT_SPACE_INDENTATION, getLeafFlagSetString(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530216 attributeName, SELECT_LEAF, EMPTY_STRING, GET) + SPACE +
217 OR_OPERATION + SPACE + IS_SELECT_ALL_SCHEMA_CHILD_FLAG) +
218 valueAssign(IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG, TRUE,
219 TWELVE_SPACE_INDENTATION) +
220 getSubTreeBuilderCallString(TWELVE_SPACE_INDENTATION, attributeName,
221 EIGHT_SPACE);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530222 }
223
Bharat saraswal0663aff2016-10-18 23:16:14 +0530224 private static String getSubTreeBuilderCallString(String indent, String
225 name, IndentationType type) {
226 return indent + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + name +
227 getOpenCloseParaWithValue(APP_INSTANCE + PERIOD + name +
228 OPEN_CLOSE_BRACKET_STRING) +
229 signatureClose() + methodClose(type);
230 }
231
232 private static String getAttrTypeForFcmWhenPrimitiveDataType(
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530233 String attributeName) {
234 return/* TODO: Need to check if we can expose the value leaf flag in
235 interface.
236 NOT + APP_INSTANCE + PERIOD + GET_VALUE_LEAF_FLAGS +
237 OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
238 GET_METHOD_PREFIX + OPEN_PARENTHESIS + LEAF_IDENTIFIER +
239 PERIOD + attributeName.toUpperCase() + PERIOD
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530240 + GET_LEAF_INDEX + OR_OPERATION +*/
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530241 APP_INSTANCE + PERIOD + attributeName + OPEN_PARENTHESIS +
242 CLOSE_PARENTHESIS + SPACE + NOT + EQUAL + SPACE +
243 attributeName + OPEN_PARENTHESIS +
244 CLOSE_PARENTHESIS;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530245 }
246
Bharat saraswal0663aff2016-10-18 23:16:14 +0530247 private static String attrTypeForFcmWhenNonPrimitiveDataTypes(String name) {
248 /*
249 * appInstance.name() == null || name().equals(appInstance.name())
250 */
251 return getEqualEqualString(StringGenerator.getAppInstanceAttrString(name), NULL) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530252 SPACE + OR_OPERATION + SPACE + NOT + OPEN_PARENTHESIS +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530253 getTwoParaEqualsString(name + OPEN_CLOSE_BRACKET_STRING,
254 StringGenerator.getAppInstanceAttrString(name))
255 + CLOSE_PARENTHESIS;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530256 }
257
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530258 private static String getIfFilterContentMatchMethodImpl(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530259 String name, YangType dataType) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530260 String attrQualifiedType;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530261 if (dataType.getDataType().isPrimitiveDataType()) {
262 attrQualifiedType = getAttrTypeForFcmWhenPrimitiveDataType(name);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530263 } else if (dataType.getDataType() == LEAFREF) {
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530264
265 // When leafref in grouping.
266 if (((YangLeafRef) dataType.getDataTypeExtendedInfo())
267 .isInGrouping()) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530268 attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(name);
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530269 } else {
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530270 YangType type = ((YangLeafRef) dataType.getDataTypeExtendedInfo())
271 .getEffectiveDataType();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530272 if (type.getDataType().isPrimitiveDataType()) {
273 attrQualifiedType = getAttrTypeForFcmWhenPrimitiveDataType(name);
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530274 } else {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530275 attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(
276 name);
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530277 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530278 }
279 } else {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530280 attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(name);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530281 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530282 return attrQualifiedType;
283 }
284
285 /**
286 * Returns is filter content match for leaf.
287 *
288 * @param javaAttributeInfo java attribute
289 * @return is filter content match for leaf
290 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530291 public static String getSubtreeFilteringForLeafList(
292 JavaAttributeInfo javaAttributeInfo) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530293 return getSubtreeFilteringForList(javaAttributeInfo, true, null);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530294 }
295
296 /**
297 * Returns is filter content match for child node.
298 *
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530299 * @param curNode current node
300 * @param path path of temp file
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530301 * @return is filter content match for child node
302 */
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530303 static String getProcessChildNodeSubtreeFiltering(YangNode curNode, String path)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530304 throws IOException {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530305 /* Generate code will look like this.
306 private boolean processChildNodesSubTreeFiltering(Link
307 appInstance, LinkBuilder subTreeFilteringResultBuilder,
308 Boolean isAnySelectOrContainmentNode, boolean isSelectAllSchemaChild) {
309 if (isSelectAllSchemaChild) {
310 for (Areas areas : appInstance.areas()) {
311 subTreeFilteringResultBuilder.addToAreas(areas);
312 }
313 } else if (areas() != null) {
314 isAnySelectOrContainmentNode = true;
315 if (!areas().isEmpty()) {
316 if (appInstance.areas() != null && !appInstance.areas().isEmpty()) {
317 for (Areas areas : areas()) {
318 for (Areas areas2 : appInstance.areas()) {
319 Areas result = areas.processSubtreeFiltering(areas2, false);
320 if (result != null) {
321 subTreeFilteringResultBuilder.addToAreas(result);
322 }
323 }
324 }
325 }
326 } else {
327 if (appInstance.areas() != null && !appInstance.areas().isEmpty()) {
328 for (Areas areas : appInstance.areas()) {
329 subTreeFilteringResultBuilder.addToAreas(areas);
330 }
331 }
332 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530333 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530334
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530335 return true;
336 }*/
337 return getProcessStfMethods(PROCESS_CHILD_NODE_STF_PARAM, curNode,
338 path,
339 FILTER_CONTENT_MATCH_FOR_NODES_MASK);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530340 }
341
342 /**
343 * Returns is filter content match for leaf list.
344 *
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530345 * @param curNode current node
346 * @param path path of temp file
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530347 * @return is filter content match for leaf list
348 */
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530349 static String getProcessLeafListSubtreeFiltering(YangNode curNode, String path)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530350 throws IOException {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530351 /* Generate code will look like this.
352 private boolean processLeafListSubTreeFiltering(Link appInstance, LinkBuilder subTreeFilteringResultBuilder,
353 Boolean isAnySelectOrContainmentNode, boolean isSelectAllSchemaChild) {
354 if (isSelectAllSchemaChild) {
355 for (String portId : appInstance.portId()) {
356 subTreeFilteringResultBuilder.addToPortId(portId);
357 }
358 } else if (portId() != null) {
359 if (!portId().isEmpty()) {
360 if (appInstance.portId() == null || appInstance.portId().isEmpty()) {
361 return false;
362 }
363 for (String portId : portId()) {
364 boolean flag = false;
365 for (String portId2 : appInstance.portId()) {
366 if (portId.equals(portId2)) {
367 flag = true;
368 subTreeFilteringResultBuilder.addToPortId(portId2);
369 break;
370 }
371 }
372 if (!flag) {
373 return false;
374 }
375 }
376 } else {
377 isAnySelectOrContainmentNode = true;
378 if (appInstance.portId() != null && !appInstance.portId().isEmpty()) {
379 for (String portId : appInstance.portId()) {
380 subTreeFilteringResultBuilder.addToPortId(portId);
381 }
382 }
383 }
384 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530385
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530386 return true;
387 }*/
388 return getProcessStfMethods(PROCESS_LEAF_LIST_STF_PARAM, curNode, path,
389 FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530390 }
391
392 /**
393 * Returns is filter content match for leaf.
394 *
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530395 * @param curNode current node
396 * @param path path of temp file
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530397 * @return is filter content match for leaf
398 */
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530399 static String getProcessLeafSubtreeFiltering(YangNode curNode, String path)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530400 throws IOException {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530401 /* Generate code will look like this.
402 private boolean processLeafSubtreeFiltering(Link appInstance, LinkBuilder subTreeFilteringResultBuilder,
403 Boolean isAnySelectOrContainmentNode, boolean isSelectAllSchemaChild) {
404 if (valueLeafFlags.get(LeafIdentifier.PORT.getLeafIndex())) {
405 if (appInstance.port() != port()) {
406 return false;
407 } else {
408 subTreeFilteringResultBuilder.port(appInstance.port());
409 }
410 } else if (selectLeafFlags.get(LeafIdentifier.PORT.getLeafIndex()) || isSelectAllSchemaChild) {
411 isAnySelectOrContainmentNode = true;
412 subTreeFilteringResultBuilder.port(appInstance.port());
413 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530414
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530415 return true;
416 }*/
417 return getProcessStfMethods(PROCESS_LEAF_STF_PARAM, curNode, path,
418 FILTER_CONTENT_MATCH_FOR_LEAF_MASK);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530419 }
420
421 /**
422 * Returns is filter content match for leaf.
423 *
Bharat saraswal0663aff2016-10-18 23:16:14 +0530424 * @param curNode current node
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530425 * @return is filter content match for leaf
426 */
Bharat saraswal0663aff2016-10-18 23:16:14 +0530427 static String getProcessSubtreeFilteringStart(YangNode curNode) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530428
429 /* Generate code will look like this.
430 public Link processSubtreeFiltering(Link appInstance, boolean isSelectAllSchemaChild) {
431 LinkBuilder subTreeFilteringResultBuilder = new LinkBuilder();
432 Boolean isAnySelectOrContainmentNode = false;
433 */
434 StringBuilder builder = new StringBuilder();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530435 JavaFileInfoTranslator javaFileInfo =
436 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530437 String instance = APP_INSTANCE;
438 String name = getCapitalCase(javaFileInfo.getJavaName());
439 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530440 String caseName = getNameOfClassForIfCase(curNode);
441 String returnType;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530442 if (curNode instanceof RpcNotificationContainer) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530443 returnType = name + OP_PARAM;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530444 } else {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530445 returnType = DEFAULT_CAPS + name;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530446 }
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530447 if (caseName != null) {
448 instance = INSTANCE;
449 name = caseName;
450 }
451
452 String javadoc = "\n /**\n" +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530453 " * Checks if the passed " + name +
454 " maps the content match query condition.\n" +
455 " *\n" +
456 " * @param " + instance + SPACE +
457 instance + SPACE + "being passed to check" +
458 " for" +
459 " content match\n" +
460 " * @param isSelectAllSchemaChild is select all schema child\n" +
461 " * @return match result\n" +
462 " */\n";
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530463 Map<String, String> param = new LinkedHashMap<>();
464 param.put(instance, name);
465 param.put(SELECT_ALL_CHILD_SCHEMA_PARAM, BOOLEAN_DATA_TYPE);
466 builder.append(javadoc)
467 .append(multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING, null,
468 PUBLIC, returnType, param,
469 CLASS_TYPE));
Bharat saraswal0663aff2016-10-18 23:16:14 +0530470
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530471 builder.append(getNewInstance(builderNamePrefix + BUILDER,
472 SUBTREE_FILTERING_RESULT_BUILDER,
473 EIGHT_SPACE_INDENTATION, EMPTY_STRING));
474 builder.append(getNewInstance(BOOLEAN_WRAPPER,
475 IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG,
476 EIGHT_SPACE_INDENTATION, FALSE));
477 if (caseName != null) {
478 builder.append(getCaseCastString(javaFileInfo, instance, curNode));
479 }
480
481 return builder.toString();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530482 }
483
484 /**
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530485 * Returns all process sub tree method implementations.
486 *
487 * @param methodName method name
488 * @param curNode current node
489 * @param path path for temporary file
490 * @param file temp file
491 * @return method implementations
492 * @throws IOException when fails to fetch data from temp files
493 */
494 private static String getProcessStfMethods(
495 String methodName, YangNode curNode, String path, int file)
496 throws IOException {
497 StringBuilder builder = new StringBuilder();
498 JavaFileInfoTranslator javaFileInfo =
499 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
500 String instance = APP_INSTANCE;
501 String name = getCapitalCase(javaFileInfo.getJavaName());
502 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
503 String caseName = getNameOfClassForIfCase(curNode);
504 if (caseName != null) {
505 instance = INSTANCE;
506 name = caseName;
507 }
508
509 Map<String, String> param = new LinkedHashMap<>();
510 param.put(instance, name);
511 param.put(STF_BUILDER_PARAM, builderNamePrefix + BUILDER);
512 param.put(SELECT_OR_CONTAINMENT_NODE_PARAM, BOOLEAN_WRAPPER);
513 param.put(SELECT_ALL_CHILD_SCHEMA_PARAM, BOOLEAN_WRAPPER);
514
515 builder.append(multiAttrMethodSignature(methodName, null,
516 PRIVATE, BOOLEAN_DATA_TYPE, param, CLASS_TYPE));
517
518 if (caseName != null) {
519 builder.append(getCaseCastString(javaFileInfo, instance, curNode));
520 }
521 builder.append(getDataFromTempFileHandle(file,
522 getBeanFiles(curNode), path))
523 .append(getReturnString(TRUE, EIGHT_SPACE_INDENTATION)).append(
524 signatureClose()).append(methodClose(FOUR_SPACE))
525 .append(NEW_LINE);
526 return builder.toString();
527 }
528
529 /**
530 * Returns the body for process subtree filtering.
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530531 *
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530532 * @param curNode node for which the code is being generated
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530533 * @return body of subtree filtering
534 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530535 static String getProcessSubtreeFunctionBody(YangNode curNode) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530536 StringBuilder builder = new StringBuilder();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530537
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530538 /* if (!processLeafSubtreeFiltering(appInstance, subTreeFilteringResultBuilder,
539 isAnySelectOrContainmentNode, isSelectAllSchemaChild)) {
540 return null;
541 }
542 if (!processLeafListSubTreeFiltering(appInstance, subTreeFilteringResultBuilder,
543 isAnySelectOrContainmentNode, isSelectAllSchemaChild)) {
544 return null;
545 }
546 if (!processChildNodesSubTreeFiltering(appInstance, subTreeFilteringResultBuilder,
547 isAnySelectOrContainmentNode, isSelectAllSchemaChild)) {
548 return null;
549 }
550 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530551 if (curNode instanceof YangLeavesHolder) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530552 YangLeavesHolder holder = (YangLeavesHolder) curNode;
553 if (!holder.getListOfLeaf().isEmpty()) {
554 builder.append(getInnerStfMethodClass(PROCESS_LEAF_STF_PARAM));
555 }
556 if (!holder.getListOfLeafList().isEmpty()) {
557 builder.append(getInnerStfMethodClass(PROCESS_LEAF_LIST_STF_PARAM));
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530558 }
559 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530560 if (curNode.getChild() != null) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530561 builder.append(getInnerStfMethodClass(PROCESS_CHILD_NODE_STF_PARAM));
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530562 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530563
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530564 return builder.toString();
565 }
566
567 //Method calls for process subtree filtering method.
568 private static String getInnerStfMethodClass(String name) {
569 StringBuilder builder = new StringBuilder()
570 .append(getIfConditionBegin(EIGHT_SPACE_INDENTATION,
571 getMethodCallsConditionsForStfMethods(name)))
572 .append(getReturnString(NULL, TWELVE_SPACE_INDENTATION)).append(
573 signatureClose()).append(methodClose(EIGHT_SPACE));
574 return builder.toString();
575 }
576
577 // Condition for if check in process sub tree method.
578 private static String getMethodCallsConditionsForStfMethods(String name) {
579 return NOT + name + getOpenCloseParaWithValue(getConditionString());
580 }
581
582 //variable call for conditional method call
583 private static String getConditionString() {
584 return APP_INSTANCE + COMMA + SPACE + SUBTREE_FILTERING_RESULT_BUILDER +
585 COMMA + SPACE + SELECT_OR_CONTAINMENT_NODE_PARAM + COMMA + SPACE +
586 SELECT_ALL_CHILD;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530587 }
588
589 /**
590 * Returns is filter content match for node.
591 *
592 * @param attr attribute info
Bharat saraswal0663aff2016-10-18 23:16:14 +0530593 * @param node YANG node
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530594 * @return is filter content match for node
595 */
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530596 public static String getSubtreeFilteringForNode(JavaAttributeInfo attr, YangNode node) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530597 boolean isList = attr.isListAttr();
598 if (isList) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530599 return getSubtreeFilteringForList(attr, false, node);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530600 } else {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530601 return getSubtreeFilteringForChildNode(attr, node);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530602 }
603 }
604
605 /**
606 * Returns is filter content match close.
607 *
Bharat saraswal0663aff2016-10-18 23:16:14 +0530608 * @param name name of class
609 * @param curNode current node
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530610 * @return is filter content match close
611 */
Bharat saraswal0663aff2016-10-18 23:16:14 +0530612 static String getProcessSubTreeFilteringEnd(String name, YangNode curNode) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530613 /* generate code will look like this.
614 if (!isSelectAllSchemaChild && !isAnySelectOrContainmentNode) {
615 return processSubtreeFiltering(appInstance, true);
616 }
617 return subTreeFilteringResultBuilder.build();
618 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530619
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530620 StringBuilder builder = new StringBuilder();
621 String cond1 = NOT + IS_SELECT_ALL_SCHEMA_CHILD_FLAG + SPACE + AND_OPERATION +
622 SPACE + NOT + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG;
623 String call = PROCESS_SUBTREE_FILTERING + getOpenCloseParaWithValue(
624 APP_INSTANCE + COMMA + SPACE + TRUE);
625 builder.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, cond1))
626 .append(getReturnString(call, TWELVE_SPACE_INDENTATION))
627 .append(signatureClose()).append(methodClose(EIGHT_SPACE));
Bharat saraswal0663aff2016-10-18 23:16:14 +0530628 String build = BUILD;
629 if (curNode instanceof YangAugment) {
630 build = BUILD_FOR_FILTER;
631 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530632
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530633 call = getOpenCloseParaWithValue(name) + SPACE +
634 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + build +
635 OPEN_CLOSE_BRACKET_STRING;
636 builder.append(getReturnString(call, EIGHT_SPACE_INDENTATION))
637 .append(signatureClose()).append(methodClose(FOUR_SPACE))
638 .append(NEW_LINE);
639 return builder.toString();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530640 }
641
642 /**
643 * Returns filter content match for child nodes.
644 *
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530645 * @param attr attribute to be added
646 * @param node YANG node
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530647 * @return filter content match for child nodes
648 */
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530649 private static String getSubtreeFilteringForChildNode(JavaAttributeInfo attr,
650 YangNode node) {
651 StringBuilder builder = new StringBuilder();
652 String name = attr.getAttributeName();
653 String clsInfo = attr.getImportInfo()
Bharat saraswal0663aff2016-10-18 23:16:14 +0530654 .getClassInfo();
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530655 String type = DEFAULT_CAPS + attr.getImportInfo()
Bharat saraswal0663aff2016-10-18 23:16:14 +0530656 .getClassInfo();
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530657 if (attr.isQualifiedName()) {
658 type = attr.getImportInfo().getPkgInfo() + PERIOD +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530659 type;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530660 clsInfo = attr.getImportInfo().getPkgInfo() + PERIOD +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530661 clsInfo;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530662 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530663 String classCast = getOpenCloseParaWithValue(type) + SPACE;
664 String cast = getOpenCloseParaWithValue(classCast + name);
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530665 if (node != null && node instanceof YangChoice) {
666 cast = name;
667 }
668
669 String resultString = cast + PERIOD + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS
670 + APP_INSTANCE + PERIOD + name + OPEN_CLOSE_BRACKET_STRING
Bharat saraswal0663aff2016-10-18 23:16:14 +0530671 + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLON +
672 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530673
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530674 String cond1 = name + OPEN_CLOSE_BRACKET_STRING + SPACE + NOT + EQUAL +
675 SPACE + NULL + SPACE + OR_OPERATION + SPACE + SELECT_ALL_CHILD;
676 builder.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, cond1))
677 .append(getSelectOrContainmentAssignString());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530678
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530679 builder.append(getIfConditionBegin(TWELVE_SPACE_INDENTATION,
680 getAppInstanceCondition(name)));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530681
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530682 String assignment = SIXTEEN_SPACE_INDENTATION + clsInfo + SPACE + RESULT +
683 signatureClose();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530684
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530685 builder.append(assignment)
686 .append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
687 SELECT_ALL_CHILD));
Bharat saraswal0663aff2016-10-18 23:16:14 +0530688
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530689 assignment = TWENTY_SPACE_INDENTATION + RESULT + SPACE + EQUAL + SPACE +
690 getAppInstanceAttrString(name) + signatureClose();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530691
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530692 builder.append(assignment).append(SIXTEEN_SPACE_INDENTATION).append(
693 CLOSE_CURLY_BRACKET).append(ELSE).append(OPEN_CURLY_BRACKET)
694 .append(NEW_LINE);
Bharat saraswal0663aff2016-10-18 23:16:14 +0530695
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530696 assignment = TWENTY_SPACE_INDENTATION + RESULT + SPACE + EQUAL + SPACE
697 + resultString;
698 cond1 = RESULT + SPACE + NOT + EQUAL + SPACE + NULL;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530699
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530700 builder.append(assignment).append(methodClose(SIXTEEN_SPACE))
701 .append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond1));
Bharat saraswal0663aff2016-10-18 23:16:14 +0530702
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530703 assignment = TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER +
704 PERIOD + name + getOpenCloseParaWithValue(RESULT) +
705 signatureClose();
706 builder.append(assignment).append(methodClose(SIXTEEN_SPACE)).append(
707 methodClose(TWELVE_SPACE)).append(methodClose(EIGHT_SPACE));
708 return builder.toString();
709 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530710
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530711 private static String getAppInstanceCondition(String name) {
712 return APP_INSTANCE + PERIOD + name + OPEN_CLOSE_BRACKET_STRING + SPACE +
713 NOT + EQUAL + SPACE + NULL;
714 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530715
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530716 private static String getSelectOrContainmentAssignString() {
717 return TWELVE_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG +
718 SPACE + EQUAL + SPACE + TRUE + signatureClose();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530719 }
720
721 /**
722 * Returns filter content match for list types.
723 *
724 * @param javaAttributeInfo attribute information
725 * @param isLeafList if for leaf list
Bharat saraswal0663aff2016-10-18 23:16:14 +0530726 * @param node YANG node
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530727 * @return filter content match for list types
728 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530729 private static String getSubtreeFilteringForList(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530730 JavaAttributeInfo javaAttributeInfo, boolean isLeafList,
731 YangNode node) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530732 StringBuilder builder = new StringBuilder();
733 String caps = getCapitalCase(javaAttributeInfo.getAttributeName());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530734 String name = javaAttributeInfo.getAttributeName();
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530735 String type = javaAttributeInfo.getImportInfo().getClassInfo();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530736 String clsInfo = DEFAULT_CAPS + type;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530737 if (javaAttributeInfo.isQualifiedName()) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530738 type = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
739 type;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530740 clsInfo = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
741 clsInfo;
742 }
743
744 String classCast = getOpenCloseParaWithValue(clsInfo) + SPACE;
745 String cast = getOpenCloseParaWithValue(classCast + name);
Bharat saraswal0663aff2016-10-18 23:16:14 +0530746
747 if (node != null && node instanceof YangChoice) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530748 cast = name;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530749 }
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530750 String resultString = cast + PERIOD +
751 PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS +
752 name + "2" + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLON +
753 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530754 /*
755 * If select all schema child
756 */
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530757 builder.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION,
758 IS_SELECT_ALL_SCHEMA_CHILD_FLAG))
759 .append(getForLoopString(TWELVE_SPACE_INDENTATION, type, name,
760 getAppInstanceAttrString(name)));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530761
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530762 String assignment = SIXTEEN_SPACE_INDENTATION +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530763 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530764 getCapitalCase(TO) + caps + getOpenCloseParaWithValue(name) +
765 signatureClose();
766 builder.append(assignment).append(methodClose(TWELVE_SPACE));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530767
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530768 String cond = name + OPEN_CLOSE_BRACKET_STRING + SPACE + NOT + EQUAL +
769 SPACE + NULL;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530770
771 //If need to explicitly participate in query
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530772 builder.append(getElseIfConditionBegin(EIGHT_SPACE_INDENTATION, cond));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530773
774 if (!isLeafList) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530775 builder.append(getSelectOrContainmentAssignString());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530776 }
777
778 //If there is any parameter in the query condition
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530779 cond = NOT + name + OPEN_CLOSE_BRACKET_STRING + PERIOD + IS_EMPTY;
780 builder.append(getIfConditionBegin(TWELVE_SPACE_INDENTATION, cond));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530781
782 if (isLeafList) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530783 cond = getAppInstanceCondition(name) + SPACE + OR_OPERATION + SPACE +
784 APP_INSTANCE + PERIOD + name + OPEN_CLOSE_BRACKET_STRING +
785 PERIOD + IS_EMPTY;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530786 /*
787 * If there is no app instance to perform content match
788 */
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530789 builder.append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond))
790 .append(getReturnString(FALSE, TWENTY_SPACE_INDENTATION))
791 .append(signatureClose())
792 .append(methodClose(SIXTEEN_SPACE))
793 // for instance iterator
794 .append(getForLoopString(SIXTEEN_SPACE_INDENTATION, type, name,
795 name + OPEN_CLOSE_BRACKET_STRING));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530796
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530797 assignment = TWENTY_SPACE_INDENTATION + BOOLEAN_DATA_TYPE + SPACE +
798 FLAG + SPACE + EQUAL + SPACE + FALSE + signatureClose();
799 builder.append(assignment)
800 // for app instance iterator
801 .append(getForLoopString(TWENTY_SPACE_INDENTATION, type,
802 name + TWO,
803 getAppInstanceAttrString(name)));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530804
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530805 cond = name + PERIOD + EQUALS_STRING
806 + OPEN_PARENTHESIS + name + TWO + CLOSE_PARENTHESIS;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530807 //the content match leaf list attribute value matches
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530808 builder.append(getIfConditionBegin(TWENTY_FOUR_SPACE_INDENTATION,
809 cond));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530810
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530811 assignment = TWENTY_EIGHT_SPACE_INDENTATION + FLAG + SPACE + EQUAL +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530812 SPACE + TRUE + SEMI_COLON + NEW_LINE;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530813 builder.append(assignment);
814 assignment = TWENTY_EIGHT_SPACE_INDENTATION +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530815 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530816 getCapitalCase(TO) + caps + getOpenCloseParaWithValue(
817 name + TWO) + signatureClose();
818 builder.append(assignment).append(TWENTY_EIGHT_SPACE_INDENTATION)
819 .append(BREAK).append(signatureClose())
820 //the content match leaf list attribute value matches
821 .append(methodClose(TWENTY_FOUR_SPACE))
822 // for app instance iterator
823 .append(methodClose(TWENTY_SPACE))
824 //if the content match failed
825 .append(getIfConditionBegin(TWENTY_SPACE_INDENTATION, NOT +
826 FLAG))
827 .append(getReturnString(FALSE, TWENTY_FOUR_SPACE_INDENTATION))
828 .append(signatureClose()).append(methodClose(TWENTY_SPACE))// if flag == false
829 .append(methodClose(SIXTEEN_SPACE)); // for instance iterator
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530830
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530831 } else {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530832 cond = getAppInstanceCondition(name) + SPACE + AND_OPERATION +
833 SPACE + getAppInstanceAttrString(name) +
834 PERIOD + IS_EMPTY;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530835 /*if there is any app instance entry*/
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530836 builder.append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
837 cond))
838 //loop all the app instance(s)
839 .append(getForLoopString(SIXTEEN_SPACE_INDENTATION, type, name,
840 name + OPEN_CLOSE_BRACKET_STRING))
841 .append(getForLoopString(TWENTY_SPACE_INDENTATION, type,
842 name + TWO,
843 getAppInstanceAttrString(name)));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530844
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530845
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530846 assignment = TWENTY_EIGHT_SPACE_INDENTATION + type + SPACE +
847 RESULT + SPACE + EQUAL + SPACE + resultString;
848 builder.append(assignment);
849 cond = RESULT + SPACE + NOT + EQUAL + SPACE + NULL;
850 builder.append(getIfConditionBegin(TWENTY_EIGHT_SPACE_INDENTATION, cond));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530851
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530852 assignment = THIRTY_TWO_SPACE_INDENTATION +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530853 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530854 getCapitalCase(TO) + caps + getOpenCloseParaWithValue(
855 name) + signatureClose();
856 builder.append(assignment).append(methodClose(TWENTY_EIGHT_SPACE))
857 //loop all the app instance(s)
858 .append(methodClose(TWENTY_FOUR_SPACE))
859 //loop all the query condition instance(s)
860 .append(methodClose(TWENTY_SPACE))
861 .append(methodClose(SIXTEEN_SPACE));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530862 //if there is any app instance entry
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530863 }
864
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530865 cond = TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET
866 + ELSE + OPEN_CURLY_BRACKET + NEW_LINE;
867 builder.append(cond);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530868
869 if (isLeafList) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530870 builder.append(getSelectOrContainmentAssignString());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530871 }
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530872 cond = getAppInstanceCondition(name) + SPACE + AND_OPERATION +
873 SPACE + NOT + getAppInstanceAttrString(name) + PERIOD + IS_EMPTY;
874 builder.append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond))
875 .append(getForLoopString(SIXTEEN_SPACE_INDENTATION, type,
876 name, getAppInstanceAttrString(name)));
877 assignment = TWENTY_FOUR_SPACE_INDENTATION +
878 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
879 getCapitalCase(TO) + caps + getOpenCloseParaWithValue(
880 name) + signatureClose();
881 builder.append(assignment).append(methodClose(TWENTY_SPACE))// Close collection Iteration loop
882 // close if condition
883 .append(methodClose(SIXTEEN_SPACE))
884 .append(methodClose(TWELVE_SPACE))// close else condition
885 .append(methodClose(EIGHT_SPACE));// close else if condition
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530886
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530887 return builder.toString();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530888 }
889
890 //Returns method string for op params augmented syntax
891 static String getAugmentableSubTreeFiltering() {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530892 return " for (Object augmentInfo : this.yangAugmentedInfoMap()" +
893 ".values()) {\n" +
894 " Object appInstanceInfo = appInstance.yangAugmentedInfo(" +
895 "augmentInfo.getClass());\n" +
896 " if (appInstanceInfo == null) {\n" +
897 " subTreeFilteringResultBuilder.addYangAugmentedInfo(" +
898 "augmentInfo, augmentInfo.getClass());\n" +
899 " } else {\n" +
900 " Object processSubtreeFiltering;\n" +
901 " try {\n" +
902 " Class<?> augmentedClass = augmentInfo" +
903 ".getClass();\n" +
904 " processSubtreeFiltering = augmentInfo.getClass()" +
905 ".getMethod(\"processSubtreeFiltering\", augmentedClass).invoke(" +
906 "augmentInfo, appInstanceInfo);\n" +
907 " if (processSubtreeFiltering != null) {\n" +
908 " subTreeFilteringResultBuilder" +
909 ".addYangAugmentedInfo(processSubtreeFiltering, processSubtreeFiltering.getClass());\n" +
910 " }\n" +
911 " } catch (NoSuchMethodException |" +
912 " InvocationTargetException | IllegalAccessException e) {\n" +
913 " continue;\n" +
914 " }\n" +
915 " }\n" +
916 " }\n";
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530917 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530918
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530919 private static String getNameOfClassForIfCase(YangNode curNode) {
920 String name = null;
921 JavaFileInfoTranslator parentInfo;
922 if (curNode instanceof YangCase) {
923 YangNode parent = curNode.getParent();
924 if (parent instanceof YangChoice) {
925 parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
926 name = getCapitalCase(parentInfo.getJavaName());
927 } else if (parent instanceof YangAugment) {
928 parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent)
929 .getAugmentedNode()).getJavaFileInfo();
930 if (parentInfo != null) {
931 name = getCapitalCase(parentInfo.getJavaName());
932 } else {
933 name = getCapitalCase(getCamelCase(
934 ((YangAugment) parent).getAugmentedNode().getName(),
935 null));
936 }
937 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530938 }
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530939 return name;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530940 }
941
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530942 private static String getCaseCastString(
943 JavaFileInfoTranslator javaFileInfo, String instance, YangNode curNode) {
944 if (curNode instanceof YangCase) {
945 String caseName = DEFAULT_CAPS + getCapitalCase(
946 javaFileInfo.getJavaName());
947 return EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
948 EQUAL + SPACE + OPEN_PARENTHESIS + caseName +
949 CLOSE_PARENTHESIS + SPACE + instance + signatureClose();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530950 }
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530951 return null;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530952 }
953
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530954}