You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2014/03/21 21:34:12 UTC

svn commit: r1580038 - in /commons/proper/configuration/branches/immutableNodes/src: main/java/org/apache/commons/configuration/ test/java/org/apache/commons/configuration/

Author: oheger
Date: Fri Mar 21 20:34:12 2014
New Revision: 1580038

URL: http://svn.apache.org/r1580038
Log:
Implemented resolveNodeKey() in AbstractHierarchicalConfiguration.

Some refactoring to remove duplicated code.

Modified:
    commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/AbstractHierarchicalConfiguration.java
    commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java
    commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/TestAbstractHierarchicalConfiguration.java

Modified: commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/AbstractHierarchicalConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/AbstractHierarchicalConfiguration.java?rev=1580038&r1=1580037&r2=1580038&view=diff
==============================================================================
--- commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/AbstractHierarchicalConfiguration.java (original)
+++ commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/AbstractHierarchicalConfiguration.java Fri Mar 21 20:34:12 2014
@@ -469,9 +469,22 @@ public abstract class AbstractHierarchic
         return getExpressionEngine().query(root, key, handler);
     }
 
-    public List<T> resolveNodeKey(T root, String key, NodeHandler<T> handler) {
-        //TODO implementation
-        return null;
+    /**
+     * {@inheritDoc} This implementation delegates to {@code resolveKey()} and
+     * then filters out attribute results.
+     */
+    public List<T> resolveNodeKey(T root, String key, NodeHandler<T> handler)
+    {
+        List<QueryResult<T>> results = resolveKey(root, key, handler);
+        List<T> targetNodes = new LinkedList<T>();
+        for (QueryResult<T> result : results)
+        {
+            if (!result.isAttributeResult())
+            {
+                targetNodes.add(result.getNode());
+            }
+        }
+        return targetNodes;
     }
 
     /**
@@ -742,8 +755,7 @@ public abstract class AbstractHierarchic
      */
     protected List<QueryResult<T>> fetchNodeList(String key)
     {
-        return getExpressionEngine().query(getRootNode(), key,
-                getModel().getNodeHandler());
+        return resolveKey(getRootNode(), key, getModel().getNodeHandler());
     }
 
     /**

Modified: commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java?rev=1580038&r1=1580037&r2=1580038&view=diff
==============================================================================
--- commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java (original)
+++ commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java Fri Mar 21 20:34:12 2014
@@ -33,6 +33,7 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.tree.ConfigurationNodeVisitorAdapter;
 import org.apache.commons.configuration.tree.ImmutableNode;
 import org.apache.commons.configuration.tree.InMemoryNodeModel;
+import org.apache.commons.configuration.tree.NodeHandler;
 import org.apache.commons.configuration.tree.NodeModel;
 import org.apache.commons.configuration.tree.NodeSelector;
 import org.apache.commons.configuration.tree.QueryResult;
@@ -330,16 +331,8 @@ public class BaseHierarchicalConfigurati
      */
     private List<ImmutableNode> fetchFilteredNodeResults(String key)
     {
-        List<QueryResult<ImmutableNode>> results = fetchNodeList(key);
-        List<ImmutableNode> targetNodes = new LinkedList<ImmutableNode>();
-        for (QueryResult<ImmutableNode> result : results)
-        {
-            if (!result.isAttributeResult())
-            {
-                targetNodes.add(result.getNode());
-            }
-        }
-        return targetNodes;
+        NodeHandler<ImmutableNode> handler = getModel().getNodeHandler();
+        return resolveNodeKey(handler.getRootNode(), key, handler);
     }
 
     /**

Modified: commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/TestAbstractHierarchicalConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/TestAbstractHierarchicalConfiguration.java?rev=1580038&r1=1580037&r2=1580038&view=diff
==============================================================================
--- commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/TestAbstractHierarchicalConfiguration.java (original)
+++ commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/TestAbstractHierarchicalConfiguration.java Fri Mar 21 20:34:12 2014
@@ -800,6 +800,38 @@ public class TestAbstractHierarchicalCon
     }
 
     /**
+     * Tests whether node keys can be resolved.
+     */
+    @Test
+    public void testResolveNodeKey()
+    {
+        List<ImmutableNode> nodes =
+                config.resolveNodeKey(config.getRootNode(),
+                        "tables.table.name", config.getModel().getNodeHandler());
+        assertEquals("Wrong number of nodes",
+                NodeStructureHelper.tablesLength(), nodes.size());
+        for (int i = 0; i < NodeStructureHelper.tablesLength(); i++)
+        {
+            assertEquals("Wrong node value at " + i,
+                    NodeStructureHelper.table(i), nodes.get(i).getValue());
+        }
+    }
+
+    /**
+     * Tests whether attribute keys are filtered out when resolving node keys.
+     */
+    @Test
+    public void testResolveNodeKeyAttribute()
+    {
+        String attrKey = "tables.table(0)[@type]";
+        config.addProperty(attrKey, "system");
+        assertTrue(
+                "Got attribute results",
+                config.resolveNodeKey(config.getRootNode(), attrKey,
+                        config.getModel().getNodeHandler()).isEmpty());
+    }
+
+    /**
      * Helper method for testing the getKeys(String) method.
      *
      * @param prefix the key to pass into getKeys()