epugh 2004/03/13 09:04:04
Modified: configuration/src/java/org/apache/commons/configuration
HierarchicalConfiguration.java
CompositeConfiguration.java
configuration/src/test/org/apache/commons/configuration
TestHierarchicalConfiguration.java
Log:
Fix the HierarchicalConfiguration with regards to subset..
Revision Changes Path
1.5 +44 -1
jakarta-commons/configuration/src/java/org/apache/commons/configuration/HierarchicalConfiguration.java
Index: HierarchicalConfiguration.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/configuration/src/java/org/apache/commons/configuration/HierarchicalConfiguration.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- HierarchicalConfiguration.java 9 Mar 2004 10:31:31 -0000 1.4
+++ HierarchicalConfiguration.java 13 Mar 2004 17:04:04 -0000 1.5
@@ -290,7 +290,50 @@
{
return !nodeDefined(getRoot());
}
+
+ /**
+ * Creates a new <code>Configuration</code> object containing all keys
+ * that start with the specified prefix. This implementation will return
+ * a <code>HierarchicalConfiguration</code> object so that the structure
+ * of the keys will be saved.
+ * @param prefix the prefix of the keys for the subset
+ * @return a new configuration object representing the selected subset
+ */
+ public Configuration subset(String prefix)
+ {
+ Collection nodes = fetchNodeList(prefix);
+ if (nodes.isEmpty())
+ {
+ return new HierarchicalConfiguration();
+ } /* if */
+ HierarchicalConfiguration result = new HierarchicalConfiguration();
+ CloneVisitor visitor = new CloneVisitor();
+
+ for (Iterator it = nodes.iterator(); it.hasNext();)
+ {
+ Node nd = (Node) it.next();
+ nd.visit(visitor, null);
+
+ Container children = visitor.getClone().getChildren();
+ if (children.size() > 0)
+ {
+ for (int i = 0; i < children.size(); i++)
+ {
+ result.getRoot().addChild((Node) children.get(i));
+ } /* for */
+ } /* if */
+ else
+ {
+ // In this case we cannot shorten the key because only
+ // values are found without further child nodes.
+ // result.getRoot().addChild(visitor.getClone());
+ } /* else */
+ } /* for */
+
+ return (result.isEmpty()) ? new HierarchicalConfiguration() : result;
+ }
+
/**
* Checks if the specified key is contained in this configuration.
* Note that for this configuration the term "contained" means
1.10 +27 -1
jakarta-commons/configuration/src/java/org/apache/commons/configuration/CompositeConfiguration.java
Index: CompositeConfiguration.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/configuration/src/java/org/apache/commons/configuration/CompositeConfiguration.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- CompositeConfiguration.java 9 Mar 2004 10:31:31 -0000 1.9
+++ CompositeConfiguration.java 13 Mar 2004 17:04:04 -0000 1.10
@@ -249,6 +249,32 @@
}
/**
+ * Create a CompositeConfiguration object that is a subset
+ * of this one. Cycles over all the config objects, and calls
+ * their subset method and then just adds that.
+ *
+ * @param prefix
+ */
+ public Configuration subset(String prefix)
+ {
+ CompositeConfiguration subsetCompositeConfiguration =
+ new CompositeConfiguration();
+ Configuration subConf = null;
+ int count = 0;
+ for (ListIterator i = configList.listIterator(); i.hasNext();)
+ {
+ Configuration config = (Configuration) i.next();
+ Configuration subset = config.subset(prefix);
+ if (subset != null && !subset.isEmpty())
+ {
+ subsetCompositeConfiguration.addConfiguration(subset);
+ subConf = subset;
+ count++;
+ }
+ }
+ return (count == 1) ? subConf : subsetCompositeConfiguration;
+ }
+ /**
* Get a List of strings associated with the given configuration key.
*
* @param key The configuration key.
1.5 +4 -1
jakarta-commons/configuration/src/test/org/apache/commons/configuration/TestHierarchicalConfiguration.java
Index: TestHierarchicalConfiguration.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/configuration/src/test/org/apache/commons/configuration/TestHierarchicalConfiguration.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TestHierarchicalConfiguration.java 9 Mar 2004 10:31:31 -0000 1.4
+++ TestHierarchicalConfiguration.java 13 Mar 2004 17:04:04 -0000 1.5
@@ -242,5 +242,8 @@
prop = conf.getProperty("name");
assertTrue("prop is not a collection", prop instanceof Collection);
assertEquals(10, ((Collection) prop).size());
+
+ conf = config.subset("tables.table.fields.field.name");
+ assertTrue("subset is not empty", conf.isEmpty());
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]