[
https://issues.apache.org/jira/browse/CONFIGURATION-293?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12522195
]
Wesley Miaw commented on CONFIGURATION-293:
-------------------------------------------
So I reimplemented clearTree() as follows, and it does what I expect it to do
this way.
Iterator<String> keys = getKeys(key);
while (keys.hasNext()) {
clearProperty(keys.next());
}
if (containsKey(key)) {
clearProperty(key);
}
the getKeys() while loop clears out all of the sub-properties, and
clearProperty(key) does the right thing because it actually sets the value of
the property to null. So even though the node isn't actually removed because it
has no parent, it has no value anymore. From what I understand, this fulfills
the contract of clear*(), since technically none of the clear*() methods say
the nodes are removed, just that they have no value.
Of course, this fires off EVENT_CLEAR_PROPERTY instead of EVENT_CLEAR_TREE, but
that's just because the above code calls the public methods.
But that doesn't really match up with how you described it (and as the
documentation mentions). Why is it that in a non-CombinedConfiguration, the
node would have a parent, but in a CombinedConfiguration, it doesn't?
> HierarchicalConfiguration.clearTree() does not remove named property
> --------------------------------------------------------------------
>
> Key: CONFIGURATION-293
> URL: https://issues.apache.org/jira/browse/CONFIGURATION-293
> Project: Commons Configuration
> Issue Type: Bug
> Affects Versions: 1.4
> Reporter: Wesley Miaw
> Attachments: bug-config.xml, bug-override.xml, bug-test.properties
>
>
> HierarchicalConfiguration.clearTree(String) calls
> HierarchicalConfiguration.removeNode(ConfigurationNode) which removes nothing
> if the passed in ConfigurationNode has no parent. Having no parent is true of
> nodes that have the root for their parent (it seems to me) as well as for
> nodes that have no properties defined "above" them. Here is an example:
> config.addProperty("a.b.c", "c");
> config.addProperty("a.b.c.d", "d");
> config.addProperty("a.b.c.d.e", "e");
> The following sequence of calls will fail:
> config.clearTree("a.b.c");
> assert config.containsKey("a.b.c") == false;
> The following sequence of calls will succeed:
> config.clearTree("a.b.c.d");
> assert config.containsKey("a.b.c.d") == false;
> assert config.containsKey("a.b.c.d.e") == false;
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.