* 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.
- * 
+ *
  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
     @Override
     public <R> R resolve(CompositeNode<R> rootNode, List<String> rankedNames, RankedAttributesContext context) {
 
-        if (logger.isDebugEnabled()) {
-            StringBuilder buff = new StringBuilder(128);
-            for (String name : rankedNames) {
-                buff.append("/{").append(name).append(" = ").append(Utils.value(context.getAttributeValue(name))).append('}');
-            }
-            logger.debug(String.format("Trying to resolve path: %s", buff));
-        }
+        logEntryPath(rankedNames, context);
 
         Set<String> visited = new HashSet<>();
 
                 value = Utils.value(context.getAttributeValue(attribute));
             }
 
-            Node<R> childNode = parentNode.children().get(value);
-
-            if (childNode != null) {
-                if (logger.isDebugEnabled()) {
-                    logger.debug(String.format("Found matching node '%s' - checking it out", childNode));
-                }
-
-                if (!visited.add(childNode.id())) {
-                    if (logger.isDebugEnabled()) {
-                        logger.debug(String.format("The matching node '%s' was checked before - ignoring it", childNode));
-                    }
-                    childNode = null;
-                }
-            } else {
-                if (logger.isDebugEnabled()) {
-                    logger.debug(String.format("Node '%s/{%s = %s}' not found  - falling back", parentNode, attribute, value != null ? value : "NULL"));
-                }
-            }
+            Node<R> childNode = getChildNode(parentNode, visited, attribute, value);
 
             if (childNode != null) {
                 switch (childNode.type()) {
                         parentNode = (CompositeNode<R>) childNode;
                         break;
                     case LEAF:
-                        if (logger.isDebugEnabled()) {
-                            logger.debug( String.format("Result node has been resolved succesfully - '%s'", childNode));
-                        }
+                        log("Result node has been resolved succesfully - '%s'", childNode);
                         result = ((LeafNode<R>) childNode).result();
                         stop = true;
                         break;
                         throw new IllegalStateException(childNode.type().name());
                 }
             } else {
-                if (!value.equals(Constants.DEFAULT_MATCH)) {
+                if (!(Constants.DEFAULT_MATCH).equals(value)) {
                     logger.debug("Exact match didn't work, trying the default option, if any");
                     value = Constants.DEFAULT_MATCH;
                 } else if (depth > 0) {
-                    if (logger.isDebugEnabled()) {
-                        logger.debug(String.format("Exact match didn't work and no default option available beneath '%s' - moving out", parentNode));
-                    }
+                    log("Exact match didn't work and no default option available beneath '%s' - moving out",
+                            parentNode);
                     depth--;
                     value = null;
                     parentNode = parentNode.parent();
 
         return result;
     }
+
+    private <R> Node<R> getChildNode(CompositeNode<R> parentNode, Set<String> visited, String attribute, Object value) {
+
+        Node<R> childNode = parentNode.children().get(value);
+        if (childNode != null) {
+            log("Found matching node '%s' - checking it out", childNode);
+
+            if (!visited.add(childNode.id())) {
+                log("The matching node '%s' was checked before - ignoring it", childNode);
+                childNode = null;
+            }
+        } else {
+            log("Node '%s/{%s = %s}' not found  - falling back",
+                    parentNode, attribute, value != null ? value : "NULL");
+        }
+        return childNode;
+    }
+
+    private void logEntryPath(List<String> rankedNames, RankedAttributesContext context){
+        if (logger.isDebugEnabled()) {
+            StringBuilder buff = new StringBuilder(128);
+            for (String name : rankedNames) {
+                buff.append("/{")
+                        .append(name)
+                        .append(" = ")
+                        .append(Utils.value(context.getAttributeValue(name)))
+                        .append('}');
+            }
+            logger.debug(String.format("Trying to resolve path: %s", buff));
+        }
+    }
+
+    private void log(String log, Object... args) {
+        if (logger.isDebugEnabled()) {
+            logger.debug(String.format(log, args));
+        }
+    }
 }