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.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to