You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Emmanuel Bourg (JIRA)" <ji...@apache.org> on 2008/02/27 10:04:51 UTC
[jira] Issue Comment Edited: (CONFIGURATION-271) BaseConfiguration
duplicates multi value keys values
[ https://issues.apache.org/jira/browse/CONFIGURATION-271?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12498025#action_12498025 ]
ebourg edited comment on CONFIGURATION-271 at 2/27/08 1:04 AM:
-----------------------------------------------------------------------
I guess you merge the files by loading twice the same configuration instance ? Something like this :
\\
{code:java}
INIConfiguration config = new INIConfiguration();
config.load("file1.ini");
config.load("file2.ini");
config.save("file1.ini");
{code}
Multi value properties have a list semantic and not a set semantic (i.e no duplicates), this is not something that can be changed. The best is to use another method to merge your properties. Here is an example of a function merging 2 configurations and eliminating redundant values :
\\
{code:java}
public void merge(Configuration source, Configuration target)
{
Iterator keys = source.getKeys();
while (keys.hasNext())
{
String key = (String) keys.next();
Object value1 = source.getProperty(key);
Object value2 = target.getProperty(key);
if (value2 == null) {
target.setProperty(key, value1);
} else {
Set values = new HashSet();
if (value1 instanceof Collection) {
values.addAll((Collection) value1);
} else {
values.add(value1);
}
if (value2 instanceof Collection) {
values.addAll((Collection) value2);
} else {
values.add(value2);
}
target.setProperty(key, values);
}
}
}
{code}
was (Author: ebourg):
I guess you merge the files by loading twice the same configuration instance ? Something like this :
INIConfiguration config = new INIConfiguration();
config.load("file1.ini");
config.load("file2.ini");
config.save("file1.ini");
Multi value properties have a list semantic and not a set semantic (i.e no duplicates), this is not something that can be changed. The best is to use another method to merge your properties. Here is an example of a function merging 2 configurations and eliminating redundant values :
public void merge(Configuration source, Configuration target)
{
Iterator keys = source.getKeys();
while (keys.hasNext())
{
String key = (String) keys.next();
Object value1 = source.getProperty(key);
Object value2 = target.getProperty(key);
if (value2 == null) {
target.setProperty(key, value1);
} else {
Set values = new HashSet();
if (value1 instanceof Collection) {
values.addAll((Collection) value1);
} else {
values.add(value1);
}
if (value2 instanceof Collection) {
values.addAll((Collection) value2);
} else {
values.add(value2);
}
target.setProperty(key, values);
}
}
}
> BaseConfiguration duplicates multi value keys values
> ----------------------------------------------------
>
> Key: CONFIGURATION-271
> URL: https://issues.apache.org/jira/browse/CONFIGURATION-271
> Project: Commons Configuration
> Issue Type: New Feature
> Affects Versions: 1.4
> Reporter: Daniel Adrian
> Priority: Minor
> Fix For: 1.6
>
>
> In addPropertyDirect(String key, Object value) the method adds the new value to the property.
> If the property has the same value in the list, it will get duplicated.
> The method should check if the list contains the value and only if the result is false add the value.
> There is no logic in saving a multi value key with more than one instance of a value.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.