On Wed, Sep 16, 2009 at 1:31 PM, Felix Meschberger <[email protected]> wrote: > Hi, > > What's the community opinion on this wish ? > > It breaks specification compliance but in some cases it is useful. > > It may cause users for Felix configadmin to not work as expected with > other implementations of the Configuration Admin spec. > > It will not work together with MetaType because MetaType does not > support nested structures and Map. > > WDYT ?
I don't really like extensions if they are not compatible with the spec. That kind of stuff only leads to trouble later when other people adopt it without being aware that it ties them to a specific implementation. Is there no other way to make this work without breaking spec compliance? regards, Karl > Regards > Felix > > Bulat Nigmatullin (JIRA) schrieb: >> Make CM allow hierarchical values >> --------------------------------- >> >> Key: FELIX-1603 >> URL: https://issues.apache.org/jira/browse/FELIX-1603 >> Project: Felix >> Issue Type: Wish >> Components: Configuration Admin >> Reporter: Bulat Nigmatullin >> Priority: Minor >> >> >> We need some extended features in ConfigurationAdmin: submaps in >> configuration dictionaries, which will be read by my PersistenceManager. I >> have idea, how to do it: >> >> Create an interface: >> >> interface ConfigurationDictionary extends Dictionary { >> public ConfigurationDictionary copy(boolean deepCopy); >> } >> >> Lets CaseInsenstiveDictionary implements it: >> >> public ConfigurationDictionary copy(boolean deepCopy) { >> return new CaseInsensitveDictionary(this, deepCopy); >> } >> >> And rewrite some members ConfigurationImpl: >> >> private volatile ConfigurationDictionary properties; >> >> ... >> >> public Dictionary getProperties( boolean deepCopy ) >> { >> // no properties yet >> if ( properties == null ) >> { >> return null; >> } >> >> ConfigurationDictionary props = properties.copy( deepCopy ); >> >> // fix special properties (pid, factory PID, bundle location) >> setAutoProperties( props, false ); >> >> return props; >> } >> >> ... >> >> private void configure( final Dictionary properties ) >> { >> final ConfigurationDictionary newProperties; >> if ( properties == null ) >> { >> newProperties = null; >> } >> else >> { >> // remove predefined properties >> clearAutoProperties( properties ); >> >> // ensure ConfigurationDictionary >> if ( properties instanceof ConfigurationDictionary ) >> { >> newProperties = ( ConfigurationDictionary ) properties; >> } >> else >> { >> newProperties = new CaseInsensitiveDictionary( properties ); >> } >> } >> >> synchronized ( this ) >> { >> this.properties = newProperties; >> this.lastModificationTime = System.currentTimeMillis(); >> } >> } >> >> After this changes we will have possibility to create complex structures of >> properties. For example, nested maps or somesing else - depends on >> developer's wishes. >> >> Or, if it is not possible, just add nested maps in CaseInsensitiveDictionary >> implementation. But it will involve much more code changes. >> >> > -- Karl Pauls [email protected]
