iPojo "requires.filters" - Array object instead of Dictionary object
--------------------------------------------------------------------

                 Key: FELIX-2688
                 URL: https://issues.apache.org/jira/browse/FELIX-2688
             Project: Felix
          Issue Type: Improvement
          Components: iPOJO
    Affects Versions: iPOJO-1.6.0
            Reporter: Olivier Bigard


I tried to dynamically update the "filter" value of a "@Requires" annotation. 
The problem is that I'm using ConfigAdmin service to create my instances (for 
persistence need) and ConfigAdmin doesn't support Dictionary class...

The improvement is to have an Array of key/value pairs where keys are the 
identity of the dependencies and the values are the filter of each dependency. 
This Array could be transformed into a Dictionary object at the begining of the 
"configure()" method of the "DependencyHandler" class.
Imagine you have a class with following dependencies:

        @Requires(id="myFirstDep")
        private A a;
        @Requires(id=" mySecondDep ")
        private B b;
 
Build the following property to inject in the instance:

        conf.put("requires.filters", new String[] {"myFirstDep", 
"(property1=value1)", "mySecondDep", "(property2=value2)"});

And the transformation from the Array to the Dictionary could be:

        private Dictionary getRequiresFilters(Object requiresFiltersValue) 
throws ConfigurationException
        {
        if (requiresFiltersValue != null && 
requiresFiltersValue.getClass().isArray())
        {
           String[] filtersArray = (String[]) requiresFiltersValue;
           if (filtersArray.length % 2 != 0)
           {
               throw new ConfigurationException("A requirement filter is 
invalid : " + requiresFiltersValue);
           }
           Dictionary requiresFilters = new Hashtable();
           for (int i = 0; i < filtersArray.length; i += 2)
           {
               requiresFilters.put(filtersArray[i], filtersArray[i+1]);
           }

           return requiresFilters;
        }

        return (Dictionary) requiresFiltersValue;
        }

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