This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-configuration.git
The following commit(s) were added to refs/heads/master by this push: new 24a1baf9 [CONFIGURATION-848] SubsetConfiguration does not account for delimiters as it did in 2.9.0 24a1baf9 is described below commit 24a1baf929a44d210c80fb932d8275e506b41d46 Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Mon Jul 1 19:37:13 2024 -0400 [CONFIGURATION-848] SubsetConfiguration does not account for delimiters as it did in 2.9.0 --- src/changes/changes.xml | 1 + .../commons/configuration2/AbstractConfiguration.java | 7 ++++++- .../AbstractHierarchicalConfiguration.java | 16 +++++++++++++++- .../apache/commons/configuration2/JNDIConfiguration.java | 4 ++-- .../commons/configuration2/PrefixedKeysIterator.java | 2 +- .../configuration2/TestSubsetConfiguration848.java | 1 - 6 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 6a0c31e3..84fde247 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -28,6 +28,7 @@ <action type="fix" dev="ggregory" due-to="Gary Gregory">PropertyConverter.to(Class, Object, DefaultConversionHandler) doesn't convert custom java.lang.Number subclasses.</action> <action type="fix" dev="ggregory" due-to="Gary Gregory">DefaultConversionHandler.convertValue(Object, Class, ConfigurationInterpolator) doesn't convert custom java.lang.Number subclasses.</action> <action type="fix" dev="ggregory" due-to="Gary Gregory">DefaultConversionHandler.to(Object, Class, ConfigurationInterpolator) doesn't convert custom java.lang.Number subclasses.</action> + <action type="fix" issue="CONFIGURATION-848" dev="ggregory" due-to="Laszlo Hujber, Gary Gregory">SubsetConfiguration does not account for delimiters as it did in 2.9.0.</action> <!-- ADD --> <action type="add" dev="ggregory" due-to="Gary Gregory">Add PrefixedKeysIterator.toString() to package-private PrefixedKeysIterator.</action> <!-- UPDATE --> diff --git a/src/main/java/org/apache/commons/configuration2/AbstractConfiguration.java b/src/main/java/org/apache/commons/configuration2/AbstractConfiguration.java index df58fba7..d97b843f 100644 --- a/src/main/java/org/apache/commons/configuration2/AbstractConfiguration.java +++ b/src/main/java/org/apache/commons/configuration2/AbstractConfiguration.java @@ -92,6 +92,11 @@ import org.apache.commons.lang3.StringUtils; */ public abstract class AbstractConfiguration extends BaseEventSource implements Configuration { + /** + * Default configuration delimiter for properties and keys. + */ + static final String DELIMITER = "."; + /** * Checks an object provided as default value for the {@code getArray()} method. Throws an exception if this is not an * array with the correct component type. @@ -1569,7 +1574,7 @@ public abstract class AbstractConfiguration extends BaseEventSource implements C @Override public Configuration subset(final String prefix) { - return new SubsetConfiguration(this, prefix, "."); + return new SubsetConfiguration(this, prefix, DELIMITER); } /** diff --git a/src/main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java b/src/main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java index 8857d1c3..b7b2fd04 100644 --- a/src/main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java +++ b/src/main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java @@ -510,6 +510,21 @@ public abstract class AbstractHierarchicalConfiguration<T> extends AbstractConfi */ @Override protected Iterator<String> getKeysInternal(final String prefix) { + return getKeysInternal(prefix, DELIMITER); + } + + /** + * Gets an iterator with all keys defined in this configuration that start with the given prefix. The returned keys + * will not contain any indices. This implementation tries to locate a node whose key is the same as the passed in + * prefix. Then the subtree of this node is traversed, and the keys of all nodes encountered (including attributes) are + * added to the result set. + * + * @param prefix the prefix of the keys to start with + * @param delimiter TODO + * @return an iterator with the found keys + */ + @Override + protected Iterator<String> getKeysInternal(final String prefix, final String delimiter) { final DefinedKeysVisitor visitor = new DefinedKeysVisitor(prefix); if (containsKey(prefix)) { // explicitly add the prefix @@ -528,7 +543,6 @@ public abstract class AbstractHierarchicalConfiguration<T> extends AbstractConfi return visitor.getKeyList().iterator(); } - /** * Gets the maximum defined index for the given key. This is useful if there are multiple values for this key. They * can then be addressed separately by specifying indices from 0 to the return value of this method. If the passed in diff --git a/src/main/java/org/apache/commons/configuration2/JNDIConfiguration.java b/src/main/java/org/apache/commons/configuration2/JNDIConfiguration.java index b44fc913..5de9413d 100644 --- a/src/main/java/org/apache/commons/configuration2/JNDIConfiguration.java +++ b/src/main/java/org/apache/commons/configuration2/JNDIConfiguration.java @@ -242,7 +242,7 @@ public class JNDIConfiguration extends AbstractConfiguration { @Override protected Iterator<String> getKeysInternal(final String prefix) { // build the path - final String[] splitPath = StringUtils.split(prefix, "."); + final String[] splitPath = StringUtils.split(prefix, DELIMITER); final List<String> path = Arrays.asList(splitPath); @@ -354,7 +354,7 @@ public class JNDIConfiguration extends AbstractConfiguration { final StringBuilder keyBuilder = new StringBuilder(); keyBuilder.append(prefix); if (keyBuilder.length() > 0) { - keyBuilder.append("."); + keyBuilder.append(DELIMITER); } keyBuilder.append(name); diff --git a/src/main/java/org/apache/commons/configuration2/PrefixedKeysIterator.java b/src/main/java/org/apache/commons/configuration2/PrefixedKeysIterator.java index eb65b038..9b3083b1 100644 --- a/src/main/java/org/apache/commons/configuration2/PrefixedKeysIterator.java +++ b/src/main/java/org/apache/commons/configuration2/PrefixedKeysIterator.java @@ -52,7 +52,7 @@ final class PrefixedKeysIterator implements Iterator<String> { * @param keyPrefix the prefix of the allowed keys */ public PrefixedKeysIterator(final Iterator<String> wrappedIterator, final String keyPrefix) { - this(wrappedIterator, keyPrefix, "."); + this(wrappedIterator, keyPrefix, AbstractConfiguration.DELIMITER); } /** diff --git a/src/test/java/org/apache/commons/configuration2/TestSubsetConfiguration848.java b/src/test/java/org/apache/commons/configuration2/TestSubsetConfiguration848.java index 9ebea255..e65fc67f 100644 --- a/src/test/java/org/apache/commons/configuration2/TestSubsetConfiguration848.java +++ b/src/test/java/org/apache/commons/configuration2/TestSubsetConfiguration848.java @@ -67,7 +67,6 @@ public class TestSubsetConfiguration848 { } @Test - @Disabled public void testSubsetWithJSONConfiguration() throws ConfigurationException, IOException { final JSONConfiguration jsonConfiguration = new JSONConfiguration(); try (FileReader in = new FileReader(ConfigurationAssert.getTestFile("test-configuration-848.json").getAbsolutePath())) {