You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Clement Escoffier (JIRA)" <ji...@apache.org> on 2013/02/04 13:36:25 UTC
[jira] [Closed] (FELIX-2688) iPojo "requires.filters" - Array
object instead of Dictionary object
[ https://issues.apache.org/jira/browse/FELIX-2688?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Clement Escoffier closed FELIX-2688.
------------------------------------
> 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
> Assignee: Clement Escoffier
> Fix For: iPOJO-1.8.0
>
>
> 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.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira