Thanks, this approach worked. One minor problem I ran into was that the merged configuration always has a new line at the end even if the default configuration does not have a new line at the end of the file. Is there a way to control if the new line should be added or not?
Thanks. On Wed, Jun 17, 2009 at 2:38 PM, Oliver Heger <oliver.he...@oliver-heger.de>wrote: > Alec Swan schrieb: > >> Can the following be done with Commons Configurations? >> >> 1. Load defaults into a PropertyConfiguration object. >> 2. Load overrides into a Java Properties object. (Note that I do not need >> to >> preserve the formatting of overrides.) >> 3. Iterate over the overrides properties and set values on corresponding >> default properties by calling PropertyConfiguration.setXXX methods. >> 4. Save the resulting PropertyConfiguration object. >> >> How can I make sure that the resulting PropertyConfiguration object >> preserves comments from the original defaults? >> >> Thanks. >> >> Alec >> > > From looking at the code I assume that setting the value of a property > removes the old comment, but I did not test this. > > To avoid this, you can work with the PropertiesConfigurationLayout object > directly that is associated with the PropertiesConfiguration. This could > look something like the following: > > PropertiesConfiguration config = > new PropertiesConfiguration(defaultsFile); > PropertiesConfigurationLayout layout = config.getLayout(); > > Now iterate over the properties in the overrides config and for each key k > do the following: > > String comment = layout.getComment(k); > config.setProperty(k, <new value from override config>); > layout.setComment(k, comment); > > I think, this should work. > > > Oliver > > >> >> On Wed, Jun 17, 2009 at 1:54 PM, Oliver Heger >> <oliver.he...@oliver-heger.de>wrote: >> >> Alec Swan schrieb: >>> >>> I wrote the code following the example on >>>> >>>> >>>> http://commons.apache.org/configuration/userguide-1.2/howto_compositeconfiguration.html >>>> >>>> There is no save() method in CompositeConfiguration. How can I save it? >>>> >>>> Thanks. >>>> >>>> The merged configuration produced by CompositeConfiguration is only >>> virtual, i.e. there is no physical PropertiesConfiguration containing the >>> merged properties. It lives only in memory and cannot be saved. >>> >>> I am afraid, Commons Configuration does not provide an easy solution for >>> your problem. You can copy the content of the composite configuration >>> into a >>> properties configuration, e.g.: >>> >>> PropertiesConfiguration propConfig = new PropertiesConfiguration(); >>> propConfig.copy(compositeConfig); >>> propConfig.save(someFile); >>> >>> But this will copy only the properties and not the comments or the >>> overall >>> layout. >>> >>> Oliver >>> >>> >>> >>> On Wed, Jun 17, 2009 at 11:23 AM, Jörg Schaible <joerg.schai...@gmx.de >>>> >>>>> wrote: >>>>> >>>> Alec Swan wrote at Mittwoch, 17. Juni 2009 18:39: >>>> >>>>> Thank you for updating the subject, Jörg. >>>>> >>>>>> I changed the order in which I add defaults and overrides. The >>>>>> following >>>>>> is the new code: >>>>>> >>>>>> // merge overrides with defaults >>>>>> CompositeConfiguration compositeConfig = new >>>>>> CompositeConfiguration(overridingConfig); >>>>>> compositeConfig.addConfiguration(defaultConfig); >>>>>> >>>>>> // convert merged properties to string >>>>>> StringWriter writer = new StringWriter(); >>>>>> overridingConfig.save(writer); >>>>>> >>>>>> defaultConfig contains the following properties: >>>>>> # A property >>>>>> A = 1 >>>>>> # B property >>>>>> B = 2 >>>>>> >>>>>> overridingConfig contains the following properties: >>>>>> B = 3 >>>>>> >>>>>> I expected the merged content written to the writer to contain these >>>>>> properties: >>>>>> # A property >>>>>> A = 1 >>>>>> # B property >>>>>> B = 3 >>>>>> >>>>>> Instead, the merged content written to the writer is the same as the >>>>>> overridingConfig: >>>>>> B = 3 >>>>>> >>>>>> Could anybody tell me what's wrong with my code? >>>>>> >>>>>> You saved the overridingConfiguration and not the compositeConfig. >>>>> >>>>> - Jörg >>>>> >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>> >>>>> >>>>> >>>>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>> For additional commands, e-mail: dev-h...@commons.apache.org >>> >>> >>> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > >