[ONOS-5141] [ONOS-5113] ProcessSubtreeFiltering generation defect fix

Change-Id: Ic245e52acca702fa501052f705e019ac7fe71613
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
new file mode 100644
index 0000000..f9af450
--- /dev/null
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
@@ -0,0 +1,739 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yangutils.translator.tojava.utils;
+
+import java.io.IOException;
+
+import org.onosproject.yangutils.datamodel.YangAugment;
+import org.onosproject.yangutils.datamodel.YangCase;
+import org.onosproject.yangutils.datamodel.YangChoice;
+import org.onosproject.yangutils.datamodel.YangLeafRef;
+import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.datamodel.YangType;
+import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
+import org.onosproject.yangutils.utils.io.YangPluginConfig;
+
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
+import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.AND_OPERATION;
+import static org.onosproject.yangutils.utils.UtilConstants.APP_INSTANCE;
+import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
+import static org.onosproject.yangutils.utils.UtilConstants.BREAK;
+import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
+import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
+import static org.onosproject.yangutils.utils.UtilConstants.CATCH;
+import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
+import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
+import static org.onosproject.yangutils.utils.UtilConstants.COLAN;
+import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
+import static org.onosproject.yangutils.utils.UtilConstants.CONTINUE;
+import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
+import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_PARAMETER_FUNCTION_CALL;
+import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
+import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION_VAR;
+import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
+import static org.onosproject.yangutils.utils.UtilConstants.FOR;
+import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.GET_CLASS;
+import static org.onosproject.yangutils.utils.UtilConstants.GET_LEAF_INDEX;
+import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD;
+import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD_PREFIX;
+import static org.onosproject.yangutils.utils.UtilConstants.GET_SELECT_LEAF_FLAGS;
+import static org.onosproject.yangutils.utils.UtilConstants.GET_VALUE_LEAF_FLAGS;
+import static org.onosproject.yangutils.utils.UtilConstants.IF;
+import static org.onosproject.yangutils.utils.UtilConstants.ILLEGAL_ACCESS_EXCEPTION;
+import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE;
+import static org.onosproject.yangutils.utils.UtilConstants.INVOCATION_TARGET_EXCEPTION;
+import static org.onosproject.yangutils.utils.UtilConstants.INVOKE;
+import static org.onosproject.yangutils.utils.UtilConstants.IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG;
+import static org.onosproject.yangutils.utils.UtilConstants.IS_EMPTY;
+import static org.onosproject.yangutils.utils.UtilConstants.IS_SELECT_ALL_SCHEMA_CHILD_FLAG;
+import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
+import static org.onosproject.yangutils.utils.UtilConstants.MAP;
+import static org.onosproject.yangutils.utils.UtilConstants.NEW;
+import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yangutils.utils.UtilConstants.NOT;
+import static org.onosproject.yangutils.utils.UtilConstants.NO_SUCH_METHOD_EXCEPTION;
+import static org.onosproject.yangutils.utils.UtilConstants.NULL;
+import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
+import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
+import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
+import static org.onosproject.yangutils.utils.UtilConstants.OR_OPERATION;
+import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
+import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
+import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
+import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
+import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
+import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
+import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
+import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
+import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERING_RESULT_BUILDER;
+import static org.onosproject.yangutils.utils.UtilConstants.THIRTY_TWO_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.THIS;
+import static org.onosproject.yangutils.utils.UtilConstants.TO;
+import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
+import static org.onosproject.yangutils.utils.UtilConstants.TRY;
+import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_EIGHT_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_FOUR_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
+import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
+import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_OP_PARAM_INFO;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
+
+/**
+ * Represents generator for subtree filtering methods of generated files based on the file type.
+ */
+public final class SubtreeFilteringMethodsGenerator {
+
+    /**
+     * private to make it a util.
+     */
+    private SubtreeFilteringMethodsGenerator() {
+    }
+
+    /**
+     * Returns is filter content match for leaf.
+     *
+     * @param javaAttributeInfo java attribute
+     * @param type              data type
+     * @return is filter content match for leaf
+     */
+    public static String getSubtreeFilteringForLeaf(JavaAttributeInfo javaAttributeInfo, YangType<?> type) {
+        String attrQualifiedType;
+        String attributeName = javaAttributeInfo.getAttributeName();
+        attrQualifiedType = getIfFilterContentMatchMethodImpl(attributeName,
+                type);
+        return EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS
+                + GET_VALUE_LEAF_FLAGS + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + GET_METHOD_PREFIX
+                + OPEN_PARENTHESIS + LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase() + PERIOD
+                + GET_LEAF_INDEX + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS
+                + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION + IF + SPACE
+                + OPEN_PARENTHESIS + attrQualifiedType + CLOSE_PARENTHESIS + SPACE
+                + OPEN_CURLY_BRACKET + NEW_LINE + SIXTEEN_SPACE_INDENTATION + RETURN + SPACE + FALSE
+                + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE + ELSE + SPACE
+                + OPEN_CURLY_BRACKET + NEW_LINE + SIXTEEN_SPACE_INDENTATION
+                + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + attributeName + OPEN_PARENTHESIS + APP_INSTANCE
+                + PERIOD + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS
+                + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE
+                + EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE + ELSE + SPACE + IF + SPACE + OPEN_PARENTHESIS
+                + GET_SELECT_LEAF_FLAGS + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + GET_METHOD_PREFIX + OPEN_PARENTHESIS
+                + LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase() + PERIOD + GET_LEAF_INDEX + CLOSE_PARENTHESIS
+                + SPACE + OR_OPERATION + SPACE + IS_SELECT_ALL_SCHEMA_CHILD_FLAG + CLOSE_PARENTHESIS + SPACE
+                + OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG
+                + SPACE + EQUAL + SPACE + TRUE + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION
+                + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + attributeName + OPEN_PARENTHESIS + APP_INSTANCE
+                + PERIOD + attributeName + EMPTY_PARAMETER_FUNCTION_CALL + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE
+                + EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
+    }
+
+    private static String getAttrTypeForFilterContentMatchWhenPrimitiveDataType(String attributeName) {
+        return /* TODO: Need to check if we can expose the value leaf flag in interface.
+                NOT + APP_INSTANCE + PERIOD + GET_VALUE_LEAF_FLAGS + OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
+                GET_METHOD_PREFIX + OPEN_PARENTHESIS + LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase() + PERIOD
+                + GET_LEAF_INDEX + OR_OPERATION +*/
+                APP_INSTANCE + PERIOD + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + NOT + EQUAL
+                        + SPACE + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS;
+    }
+
+    private static String getAttrTypeForFilterContentMatchWhenNonPrimitiveDataTypes(String attributeName) {
+        return APP_INSTANCE + PERIOD + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
+                + SPACE + EQUAL + EQUAL + SPACE + NULL + SPACE + OR_OPERATION + SPACE
+                + NOT + OPEN_PARENTHESIS + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
+                + PERIOD + EQUALS_STRING + OPEN_PARENTHESIS + APP_INSTANCE + PERIOD
+                + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
+                + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS;
+    }
+
+    private static String getIfFilterContentMatchMethodImpl(String attributeName,
+            YangType dataType) {
+        String attrQualifiedType;
+
+        if (MethodsGenerator.isPrimitiveDataType(dataType.getDataType())) {
+            attrQualifiedType = getAttrTypeForFilterContentMatchWhenPrimitiveDataType(attributeName);
+        } else if (dataType.getDataType() == LEAFREF) {
+            YangType type = ((YangLeafRef) dataType.getDataTypeExtendedInfo()).getEffectiveDataType();
+            if (MethodsGenerator.isPrimitiveDataType(type.getDataType())) {
+                attrQualifiedType = getAttrTypeForFilterContentMatchWhenPrimitiveDataType(attributeName);
+            } else {
+                attrQualifiedType = getAttrTypeForFilterContentMatchWhenNonPrimitiveDataTypes(attributeName);
+            }
+        } else {
+            attrQualifiedType = getAttrTypeForFilterContentMatchWhenNonPrimitiveDataTypes(attributeName);
+        }
+
+        return attrQualifiedType;
+    }
+
+    /**
+     * Returns is filter content match for leaf.
+     *
+     * @param javaAttributeInfo java attribute
+     * @return is filter content match for leaf
+     */
+    public static String getSubtreeFilteringForLeafList(JavaAttributeInfo javaAttributeInfo) {
+        return getSubtreeFilteringForList(javaAttributeInfo, true);
+    }
+
+    /**
+     * Returns is filter content match for child node.
+     *
+     * @param curNode      current node
+     * @param pluginConfig plugin configurations
+     * @param path         path of temp file
+     * @return is filter content match for child node
+     */
+    static String getProcessChildNodeSubtreeFiltering(YangNode curNode, YangPluginConfig pluginConfig, String path)
+            throws IOException {
+        JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+        JavaFileInfoTranslator parentInfo;
+
+        String instance = APP_INSTANCE;
+        String name = getCapitalCase(javaFileInfo.getJavaName());
+        String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
+        if (curNode instanceof YangCase) {
+            instance = INSTANCE;
+            YangNode parent = curNode.getParent();
+            if (parent instanceof YangChoice) {
+                parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+                name = getCapitalCase(parentInfo.getJavaName());
+            } else if (parent instanceof YangAugment) {
+                parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent).getAugmentedNode()).getJavaFileInfo();
+                if (parentInfo != null) {
+                    name = getCapitalCase(parentInfo.getJavaName());
+                } else {
+                    name = getCapitalCase(getCamelCase(((YangAugment) parent).getAugmentedNode().getName(),
+                            pluginConfig.getConflictResolver()));
+                }
+            }
+        }
+
+        String processSubtreeFilteringMethod =
+                FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE + SPACE
+                        + "processChildNodesSubTreeFiltering" + OPEN_PARENTHESIS + name + SPACE + instance + COMMA
+                        + SPACE + builderNamePrefix + BUILDER + SPACE + "subTreeFilteringResultBuilder"
+                        + COMMA + NEW_LINE + TWELVE_SPACE_INDENTATION + "Boolean isAnySelectOrContainmentNode, "
+                        + "boolean isSelectAllSchemaChild" + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+
+        if (curNode instanceof YangCase) {
+            String caseName = getCapitalCase(javaFileInfo.getJavaName());
+            processSubtreeFilteringMethod =
+                    processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
+                            EQUAL + SPACE + OPEN_PARENTHESIS + caseName + CLOSE_PARENTHESIS + SPACE + instance
+                            + SEMI_COLAN + NEW_LINE;
+        }
+
+        processSubtreeFilteringMethod += getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_NODES_MASK,
+                ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
+                        .getBeanTempFiles(), path);
+
+        processSubtreeFilteringMethod += EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLAN + NEW_LINE
+                + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
+
+        return processSubtreeFilteringMethod;
+    }
+
+    /**
+     * Returns is filter content match for leaf list.
+     *
+     * @param curNode      current node
+     * @param pluginConfig plugin configurations
+     * @param path         path of temp file
+     * @return is filter content match for leaf list
+     */
+    static String getProcessLeafListSubtreeFiltering(YangNode curNode, YangPluginConfig pluginConfig, String path)
+            throws IOException {
+        JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+        JavaFileInfoTranslator parentInfo;
+
+        String instance = APP_INSTANCE;
+        String name = getCapitalCase(javaFileInfo.getJavaName());
+        String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
+        if (curNode instanceof YangCase) {
+            instance = INSTANCE;
+            YangNode parent = curNode.getParent();
+            if (parent instanceof YangChoice) {
+                parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+                name = getCapitalCase(parentInfo.getJavaName());
+            } else if (parent instanceof YangAugment) {
+                parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent).getAugmentedNode()).getJavaFileInfo();
+                if (parentInfo != null) {
+                    name = getCapitalCase(parentInfo.getJavaName());
+                } else {
+                    name = getCapitalCase(getCamelCase(((YangAugment) parent).getAugmentedNode().getName(),
+                            pluginConfig.getConflictResolver()));
+                }
+            }
+        }
+
+        String processSubtreeFilteringMethod =
+                FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE + SPACE +
+                        "processLeafListSubTreeFiltering" + OPEN_PARENTHESIS + name + SPACE + instance + COMMA
+                        + SPACE + builderNamePrefix + BUILDER + SPACE + "subTreeFilteringResultBuilder" + COMMA
+                        + NEW_LINE + TWELVE_SPACE_INDENTATION + "Boolean isAnySelectOrContainmentNode, "
+                        + "boolean isSelectAllSchemaChild" + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+
+        if (curNode instanceof YangCase) {
+            String caseName = getCapitalCase(javaFileInfo.getJavaName());
+            processSubtreeFilteringMethod =
+                    processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
+                            EQUAL + SPACE + OPEN_PARENTHESIS + caseName + CLOSE_PARENTHESIS + SPACE + instance
+                            + SEMI_COLAN + NEW_LINE;
+        }
+
+        processSubtreeFilteringMethod += getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK,
+                ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
+                        .getBeanTempFiles(), path);
+
+        processSubtreeFilteringMethod += EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLAN + NEW_LINE
+                + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
+
+        return processSubtreeFilteringMethod;
+    }
+
+    /**
+     * Returns is filter content match for leaf.
+     *
+     * @param curNode      current node
+     * @param pluginConfig plugin configurations
+     * @param path         path of temp file
+     * @return is filter content match for leaf
+     */
+    static String getProcessLeafSubtreeFiltering(YangNode curNode, YangPluginConfig pluginConfig, String path)
+            throws IOException {
+        JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+        JavaFileInfoTranslator parentInfo;
+
+        String instance = APP_INSTANCE;
+        String name = getCapitalCase(javaFileInfo.getJavaName());
+        String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
+        if (curNode instanceof YangCase) {
+            instance = INSTANCE;
+            YangNode parent = curNode.getParent();
+            if (parent instanceof YangChoice) {
+                parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+                name = getCapitalCase(parentInfo.getJavaName());
+            } else if (parent instanceof YangAugment) {
+                parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent).getAugmentedNode()).getJavaFileInfo();
+                if (parentInfo != null) {
+                    name = getCapitalCase(parentInfo.getJavaName());
+                } else {
+                    name = getCapitalCase(getCamelCase(((YangAugment) parent).getAugmentedNode().getName(),
+                            pluginConfig.getConflictResolver()));
+                }
+            }
+        }
+
+        String processSubtreeFilteringMethod =
+                FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE + SPACE + "processLeafSubtreeFiltering" +
+                        OPEN_PARENTHESIS + name + SPACE + instance + COMMA + SPACE + builderNamePrefix
+                        + BUILDER + SPACE + "subTreeFilteringResultBuilder" + COMMA + NEW_LINE
+                        + TWELVE_SPACE_INDENTATION + "Boolean isAnySelectOrContainmentNode, "
+                        + "boolean isSelectAllSchemaChild" + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+
+        if (curNode instanceof YangCase) {
+            String caseName = getCapitalCase(javaFileInfo.getJavaName());
+            processSubtreeFilteringMethod =
+                    processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
+                            EQUAL + SPACE + OPEN_PARENTHESIS + caseName + CLOSE_PARENTHESIS + SPACE + instance
+                            + SEMI_COLAN + NEW_LINE;
+        }
+
+        processSubtreeFilteringMethod += getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_LEAF_MASK,
+                ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
+                        .getBeanTempFiles(), path);
+
+        processSubtreeFilteringMethod += EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLAN + NEW_LINE
+                + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
+
+        return processSubtreeFilteringMethod;
+    }
+
+    /**
+     * Returns is filter content match for leaf.
+     *
+     * @param curNode      current node
+     * @param pluginConfig plugin configurations
+     * @return is filter content match for leaf
+     */
+    static String getProcessSubtreeFilteringStart(YangNode curNode, YangPluginConfig pluginConfig) {
+        JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+        JavaFileInfoTranslator parentInfo;
+
+        String instance = APP_INSTANCE;
+        String name = getCapitalCase(javaFileInfo.getJavaName());
+        String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
+        if (curNode instanceof YangCase) {
+            instance = INSTANCE;
+            YangNode parent = curNode.getParent();
+            if (parent instanceof YangChoice) {
+                parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+                name = getCapitalCase(parentInfo.getJavaName());
+            } else if (parent instanceof YangAugment) {
+                parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent).getAugmentedNode()).getJavaFileInfo();
+                if (parentInfo != null) {
+                    name = getCapitalCase(parentInfo.getJavaName());
+                } else {
+                    name = getCapitalCase(getCamelCase(((YangAugment) parent).getAugmentedNode().getName(),
+                            pluginConfig.getConflictResolver()));
+                }
+            }
+        }
+        String processSubtreeFilteringMethod =
+                MethodsGenerator.getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC + SPACE +
+                        name + SPACE + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + name
+                        + SPACE + instance + COMMA + SPACE + BOOLEAN_DATA_TYPE + SPACE + "isSelectAllSchemaChild" +
+                        CLOSE_PARENTHESIS + SPACE
+                        + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION + builderNamePrefix
+                        + BUILDER + SPACE + SUBTREE_FILTERING_RESULT_BUILDER + SPACE + EQUAL + SPACE + NEW + SPACE
+                        + builderNamePrefix + BUILDER + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE
+                        + EIGHT_SPACE_INDENTATION + "Boolean" + SPACE + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG
+                        + SPACE + EQUAL + SPACE + FALSE + SEMI_COLAN + NEW_LINE;
+
+        if (curNode instanceof YangCase) {
+            String caseName = getCapitalCase(javaFileInfo.getJavaName());
+            processSubtreeFilteringMethod =
+                    processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
+                            EQUAL + SPACE + OPEN_PARENTHESIS + caseName + CLOSE_PARENTHESIS + SPACE + instance
+                            + SEMI_COLAN + NEW_LINE;
+        }
+
+        return processSubtreeFilteringMethod;
+    }
+
+    /**
+     * Get the body for process subtree filtering.
+     *
+     * @return body of subtree filtering
+     */
+    static String getProcessSubtreeFunctionBody() {
+        String method = MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT
+                + "processLeafSubtreeFiltering(appInstance, subTreeFilteringResultBuilder,"
+                + NEW_LINE + TWELVE_SPACE_INDENTATION + "isAnySelectOrContainmentNode, isSelectAllSchemaChild)");
+
+        method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL + SEMI_COLAN + NEW_LINE;
+
+        method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
+
+        method += MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT
+                + "processLeafListSubTreeFiltering(appInstance, subTreeFilteringResultBuilder,"
+                + NEW_LINE + TWELVE_SPACE_INDENTATION + "isAnySelectOrContainmentNode, isSelectAllSchemaChild)");
+
+        method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL + SEMI_COLAN + NEW_LINE;
+
+        method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
+
+        method += MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT
+                + "processChildNodesSubTreeFiltering(appInstance, subTreeFilteringResultBuilder,"
+                + NEW_LINE + TWELVE_SPACE_INDENTATION + "isAnySelectOrContainmentNode, isSelectAllSchemaChild)");
+
+        method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL + SEMI_COLAN + NEW_LINE;
+
+        method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
+
+        return method;
+    }
+
+    /**
+     * Returns is filter content match for node.
+     *
+     * @param attr attribute info
+     * @return is filter content match for node
+     */
+    public static String getSubtreeFilteringForNode(JavaAttributeInfo attr) {
+        boolean isList = attr.isListAttr();
+        if (isList) {
+            return getSubtreeFilteringForList(attr, false);
+        } else {
+            return getSubtreeFilteringForChildNode(attr);
+        }
+    }
+
+    /**
+     * Returns is filter content match close.
+     *
+     * @return is filter content match close
+     */
+    static String getProcessSubTreeFilteringEnd() {
+        String method = MethodsGenerator
+                .getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT + IS_SELECT_ALL_SCHEMA_CHILD_FLAG
+                        + SPACE + AND_OPERATION + SPACE + NOT + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG);
+
+        method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS
+                + APP_INSTANCE + COMMA + SPACE + TRUE + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
+
+        method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
+
+        method += EIGHT_SPACE_INDENTATION + RETURN + SPACE + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + BUILD
+                + EMPTY_PARAMETER_FUNCTION_CALL + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION
+                + CLOSE_CURLY_BRACKET + NEW_LINE;
+
+        return method;
+    }
+
+    /**
+     * Returns filter content match for child nodes.
+     *
+     * @param javaAttributeInfo attribute to be added
+     * @return filter content match for child nodes
+     */
+    private static String getSubtreeFilteringForChildNode(JavaAttributeInfo javaAttributeInfo) {
+        String name = javaAttributeInfo.getAttributeName();
+        name = getSmallCase(name);
+        String type = javaAttributeInfo.getImportInfo().getClassInfo();
+        if (javaAttributeInfo.isQualifiedName()) {
+            type = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD + type;
+        }
+
+        String method = MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, name + "()  != null");
+
+        method += TWELVE_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE + EQUAL + SPACE + TRUE
+                + SEMI_COLAN + NEW_LINE;
+
+        method += TWELVE_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + APP_INSTANCE
+                + PERIOD + name + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + NOT
+                + EQUAL + SPACE + NULL + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+
+
+        method += SIXTEEN_SPACE_INDENTATION + type + SPACE + "result = " + name + PERIOD +
+                PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + APP_INSTANCE + PERIOD + name
+                + EMPTY_PARAMETER_FUNCTION_CALL + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
+
+        method += SIXTEEN_SPACE_INDENTATION + "if (result != null) {" + NEW_LINE;
+
+        method += TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + name + OPEN_PARENTHESIS
+                + "result" + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + SIXTEEN_SPACE_INDENTATION +
+                CLOSE_CURLY_BRACKET + NEW_LINE;
+
+        //if app instance is not null
+        method += MethodsGenerator.getBlockEnd(TWELVE_SPACE_INDENTATION);
+
+        //if query instance is not null
+        method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
+
+        return method;
+    }
+
+    /**
+     * Returns filter content match for list types.
+     *
+     * @param javaAttributeInfo attribute information
+     * @param isLeafList        if for leaf list
+     * @return filter content match for list types
+     */
+    private static String getSubtreeFilteringForList(JavaAttributeInfo javaAttributeInfo, boolean isLeafList) {
+        String capitalCaseName = getCapitalCase(javaAttributeInfo.getAttributeName());
+        String name = javaAttributeInfo.getAttributeName();
+        String type = javaAttributeInfo.getImportInfo().getClassInfo();
+        if (javaAttributeInfo.isQualifiedName()) {
+            type = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD + type;
+        }
+
+        /*
+         * If select all schema child
+         */
+        String method = MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, IS_SELECT_ALL_SCHEMA_CHILD_FLAG);
+
+        method = method + MethodsGenerator.getCollectionIteratorForLoopBegin(TWELVE_SPACE_INDENTATION,
+                type + SPACE + name, APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL);
+
+        method = method + SIXTEEN_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING
+                + getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS + name + CLOSE_PARENTHESIS + SEMI_COLAN
+                + NEW_LINE;
+
+        method += MethodsGenerator.getBlockEnd(TWELVE_SPACE_INDENTATION); // Close collection Iteration loop
+
+        //If need to explicitly participate in query
+        method += MethodsGenerator
+                .getElseIfConditionBegin(EIGHT_SPACE_INDENTATION, name + EMPTY_PARAMETER_FUNCTION_CALL + SPACE + NOT
+                        + EQUAL + SPACE + NULL);
+
+        if (!isLeafList) {
+            method += TWELVE_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE + EQUAL + SPACE
+                    + TRUE + SEMI_COLAN + NEW_LINE;
+        }
+
+        //If there is any parameter in the query condition
+        method += MethodsGenerator
+                .getIfConditionBegin(TWELVE_SPACE_INDENTATION, NOT + name + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD
+                        + IS_EMPTY);
+
+        if (isLeafList) {
+            /*
+             * If there is no app instance to perform content match
+             */
+            method += MethodsGenerator.getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, APP_INSTANCE + PERIOD + name
+                    + EMPTY_PARAMETER_FUNCTION_CALL + SPACE + EQUAL + EQUAL + SPACE + NULL + SPACE + OR_OPERATION
+                    + SPACE + APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + IS_EMPTY);
+
+            method += TWENTY_SPACE_INDENTATION + RETURN + SPACE + FALSE + SEMI_COLAN + NEW_LINE;
+
+            method += MethodsGenerator.getBlockEnd(SIXTEEN_SPACE_INDENTATION);
+
+            // for instance iterator
+            method += MethodsGenerator.getCollectionIteratorForLoopBegin(SIXTEEN_SPACE_INDENTATION, type + SPACE + name,
+                    name + EMPTY_PARAMETER_FUNCTION_CALL);
+
+            method += TWENTY_SPACE_INDENTATION + BOOLEAN_DATA_TYPE + SPACE + "flag" + SPACE + EQUAL
+                    + SPACE + FALSE + SEMI_COLAN + NEW_LINE;
+
+            // for app instance iterator
+            method += MethodsGenerator.getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION,
+                    type + SPACE + name + "2", APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL);
+
+            //the content match leaf list attribute value matches
+            method += MethodsGenerator.getIfConditionBegin(TWENTY_FOUR_SPACE_INDENTATION, name + PERIOD + EQUALS_STRING
+                    + OPEN_PARENTHESIS + name + "2" + CLOSE_PARENTHESIS);
+
+            method += TWENTY_EIGHT_SPACE_INDENTATION + "flag" + SPACE + EQUAL + SPACE + TRUE + SEMI_COLAN + NEW_LINE;
+
+            method += TWENTY_EIGHT_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
+                    getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS + name + "2" + CLOSE_PARENTHESIS +
+                    SEMI_COLAN + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION + BREAK + SEMI_COLAN + NEW_LINE;
+
+            //the content match leaf list attribute value matches
+            method += MethodsGenerator.getBlockEnd(TWENTY_FOUR_SPACE_INDENTATION);
+
+            // for app instance iterator
+            method += MethodsGenerator.getBlockEnd(TWENTY_SPACE_INDENTATION);
+
+            //if the content match failed
+            method += MethodsGenerator.getIfConditionBegin(TWENTY_SPACE_INDENTATION, "!flag");
+
+            method += TWENTY_FOUR_SPACE_INDENTATION + RETURN + SPACE + FALSE + SEMI_COLAN + NEW_LINE;
+
+            method += MethodsGenerator.getBlockEnd(TWENTY_SPACE_INDENTATION); // if flag == false
+
+            method += MethodsGenerator.getBlockEnd(SIXTEEN_SPACE_INDENTATION); // for instance iterator
+
+
+        } else {
+
+            /*if there is any app instance entry*/
+            method += MethodsGenerator.getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, APP_INSTANCE + PERIOD + name
+                    + EMPTY_PARAMETER_FUNCTION_CALL + SPACE + NOT + EQUAL + SPACE + NULL + SPACE + AND_OPERATION + SPACE
+                    + NOT + APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + IS_EMPTY);
+
+            /*
+             * loop all the query condition instance(s)
+             */
+            method += MethodsGenerator.getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION, type + SPACE + name,
+                    name + EMPTY_PARAMETER_FUNCTION_CALL);
+
+            //loop all the app instance(s)
+            method += MethodsGenerator.getCollectionIteratorForLoopBegin(TWENTY_FOUR_SPACE_INDENTATION,
+                    type + SPACE + name + "2", APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL);
+
+            method += TWENTY_EIGHT_SPACE_INDENTATION + type + SPACE + "result = " + name + PERIOD +
+                    PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + name + "2" + COMMA
+                    + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLAN
+                    + NEW_LINE;
+
+            method += TWENTY_EIGHT_SPACE_INDENTATION + "if (result != null) {" + NEW_LINE;
+
+            method += THIRTY_TWO_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
+                    getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS + "result" + CLOSE_PARENTHESIS +
+                    SEMI_COLAN + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
+
+            //loop all the app instance(s)
+            method += MethodsGenerator.getBlockEnd(TWENTY_FOUR_SPACE_INDENTATION);
+
+            //loop all the query condition instance(s)
+            method += MethodsGenerator.getBlockEnd(TWENTY_SPACE_INDENTATION);
+
+            //if there is any app instance entry
+            method += MethodsGenerator.getBlockEnd(SIXTEEN_SPACE_INDENTATION);
+        }
+
+        method += TWELVE_SPACE_INDENTATION + "} else {" + NEW_LINE;
+
+        if (isLeafList) {
+            method += SIXTEEN_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE + EQUAL
+                    + SPACE + TRUE + SEMI_COLAN + NEW_LINE;
+        }
+
+        method += MethodsGenerator.getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, APP_INSTANCE + PERIOD + name
+                + EMPTY_PARAMETER_FUNCTION_CALL + SPACE + NOT + EQUAL + SPACE + NULL + SPACE + AND_OPERATION + SPACE
+                + NOT + APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + IS_EMPTY);
+
+        method = method + MethodsGenerator.getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION,
+                type + SPACE + name, APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL);
+
+        method = method + TWENTY_FOUR_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING
+                + getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS + name + CLOSE_PARENTHESIS + SEMI_COLAN
+                + NEW_LINE;
+
+        method += MethodsGenerator.getBlockEnd(TWENTY_SPACE_INDENTATION); // Close collection Iteration loop
+
+        method += MethodsGenerator.getBlockEnd(SIXTEEN_SPACE_INDENTATION); // close  if condition
+
+        method += MethodsGenerator.getBlockEnd(TWELVE_SPACE_INDENTATION); // close  else condition
+
+        method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION); // close  else if condition
+
+        return method;
+
+    }
+
+    //Returns method string for op params augmented syntax
+    static String getAugmentableSubTreeFiltering() {
+        return EIGHT_SPACE_INDENTATION + FOR + SPACE + OPEN_PARENTHESIS + OBJECT_STRING + SPACE +
+                getSmallCase(YANG_AUGMENTED_INFO) + SPACE + COLAN + SPACE + THIS +
+                PERIOD + getSmallCase(YANG_AUGMENTED_INFO) + MAP + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + PERIOD
+                + VALUE + "s" + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET +
+                NEW_LINE + TWELVE_SPACE_INDENTATION + OBJECT_STRING + SPACE +
+                getSmallCase(YANG_AUGMENTED_OP_PARAM_INFO) + SPACE + EQUAL + SPACE + APP_INSTANCE + PERIOD +
+                getSmallCase(YANG_AUGMENTED_INFO) + OPEN_PARENTHESIS + getSmallCase(YANG_AUGMENTED_INFO) + PERIOD +
+                GET_CLASS + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION
+                + OBJECT + SPACE + PROCESS_SUBTREE_FILTERING + SEMI_COLAN
+                + NEW_LINE + TWELVE_SPACE_INDENTATION + TRY + SPACE + OPEN_CURLY_BRACKET + NEW_LINE +
+                SIXTEEN_SPACE_INDENTATION +
+                "Class<?>[] interfaces = " + getSmallCase(YANG_AUGMENTED_INFO) + ".getClass().getInterfaces();" +
+                NEW_LINE + SIXTEEN_SPACE_INDENTATION +
+                PROCESS_SUBTREE_FILTERING + SPACE + EQUAL + SPACE + getSmallCase(YANG_AUGMENTED_INFO) + PERIOD
+                + GET_CLASS + NEW_LINE + TWENTY_SPACE_INDENTATION + PERIOD + GET_METHOD
+                + OPEN_PARENTHESIS + QUOTES + PROCESS_SUBTREE_FILTERING + QUOTES + COMMA + SPACE + "interfaces[0]"
+                + CLOSE_PARENTHESIS + PERIOD + INVOKE + OPEN_PARENTHESIS + getSmallCase(YANG_AUGMENTED_INFO) + COMMA
+                + NEW_LINE + TWENTY_FOUR_SPACE_INDENTATION + getSmallCase(YANG_AUGMENTED_OP_PARAM_INFO)
+                + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE
+                + SIXTEEN_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + PROCESS_SUBTREE_FILTERING + SPACE
+                + NOT + EQUAL + SPACE + NULL + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE
+                + TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + "add" + YANG_AUGMENTED_INFO
+                + OPEN_PARENTHESIS + PROCESS_SUBTREE_FILTERING + COMMA + SPACE + PROCESS_SUBTREE_FILTERING + PERIOD
+                + GET_CLASS + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + SIXTEEN_SPACE_INDENTATION
+                + CLOSE_CURLY_BRACKET + NEW_LINE
+                + TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE + CATCH + SPACE + OPEN_PARENTHESIS
+                + NO_SUCH_METHOD_EXCEPTION + " | " + INVOCATION_TARGET_EXCEPTION + " | " + ILLEGAL_ACCESS_EXCEPTION +
+                SPACE + EXCEPTION_VAR + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE
+                + SIXTEEN_SPACE_INDENTATION + CONTINUE + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION
+                + CLOSE_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
+    }
+}