Hi,

We have the need to isolate groups of components. For ex a wiki macro  
created in a subwiki should only be visible in that subwiki by default.

Here's an implementation proposal that I'm planning to implement:

* There's a Root Component Manager (the current CM)
* There are 3 components which implement the ComponentManager role and  
with 3 hints: "wiki", "user" and "all". There's a  
CompositeComponentManager class that allows chaining CM and the "all"  
CM chains the "default" (root CM), "wiki" CM and "user" CM. This works  
the same as with the configuration module.
* Other components can have CMs injected as they want (if not  
specified then it's the default, etc). For ex:

@Requirement("all")
private ComponentManager cm

* Creation process. As for now the user creates the root CM and then  
the annotation loader will create the descriptors for the other CMs  
and register them against the root CM. They'll get instantiated once  
(singleton) the first time they're looked up.
* In order to register a component for, say, a given "enterprise"  
wiki, we need to add a new property to the ComponentDescriptor: get/ 
setAdditionalData(Object data). For example:  
wikiCM.registerComponent(CD mycd) where  
cd.setAdditionalData("enterprise").
* Last, Guice uses Modules to isolate component definitions so it  
should be possible and relatively easy to port the implementation to  
Guice (even though Guice uses static Modules we can make them dynamic).

WDYT?

Thanks
-Vincent

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to