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 ?

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.
> 
> 

Reply via email to