Hi, On 18.06.2010, at 17:02, Loic Petit wrote:
> Hi everyone, > > I want to know if there is a "clean" way to do this thing. > > I've got a class with the following form: > > @Component > @Provides > class A { > @Requires > private B[] b; > } > > This component is then created by the iPojo API via its factory. > What I would like to do: give a ldap filter on the creation of the instance > in order to have the array that matches the filter. > > It is possible to do that offline by giving a filter in the annotation, but > it is impossible to have a dynamic one. > > As an example, I use felix/ipojo to manipulate UPnPDevice. I have a generic > component that operate on all the devices that matches the ID given by the > property. Here is how I could do it. > > class A { > @Requires > private UPnPDevice[] devices; > @Property > private String udn; > > public void foo() { > for all devices that matches the udn { > bar(); > } > } > } > > But this is a bit silly as I subscribe for all kinds of devices and then I > do manually the filter while it is possible to subscribe to the context that > I want only that filter. The second way, of course, is to ignore iPojo and > subscribe on my own with a custom filter and also manage the list. > > It's not the first time I encounter this problem and iPojo has all the tools > to do such thing. Do you know a "clean" way to do it ? Each instance declaration can customize the dependency filters. Let's imagine a component: @Component @Provides class A { @Requires(id="B") // I give a name to this dependency private B[] b; } Then, in the instance declaration, you can set / override the dependency filter: <instance component="...A"> <property name="requires.filters"> <!-- special property to customize the filters --> <property name="B" value="(your_filter)"/> <!-- the filter here --> </property> </instance> (More details on http://felix.apache.org/site/service-requirement-handler.html#ServiceRequirementHandler-FilteredRequirement) Unfortunately, this mechanism is only possible if you declare the instance using the XML formalism or the iPOJO Factory service (API). Indeed, the config admin does not support maps (requires.filters is a map). Regards, Clement > > LP --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@felix.apache.org For additional commands, e-mail: users-h...@felix.apache.org