Hi Sergiu, On Sep 1, 2008, at 9:07 AM, Sergiu Dumitriu wrote:
> Vincent Massol wrote: >> Hi devs, >> >> Right now we have: >> >> platform/ >> |_ core/ >> |_ xwiki-core/ >> |_ (others)/ >> |_ plugins/ >> |_ ... >> >> The problem I see is twofold: >> 1) We can have platform components that are not core components (for >> example I'd like to commit the office component done by Wang Ning). >> 2) I'd like that we decide to deprecate the plugins/ system going >> forward and that all new code only write components. >> >> For 1) I'd like to propose: >> >> platform/ >> |_ components/ (contains (others)/ from above) >> |_ core/ (is the core/xwiki-core from above, to be removed once >> fully split into components) >> |_ plugins/ (to be removed once fully split into components) >> |_ ... > > +1. This means that we can't normally have components that depend on > the > core, since when building the whole trunks, the component will be > built > before the core, which is a pre-dependency. But this is a good > restriction, anyway. This is not true. First there won't be any "core" module in the future so that's only a immediate concern. However even if you have components that depen on core that'll still work since maven will know which they are and build them before core. >> For 2) I'd like to propose: >> >> * Create an interface for Velocity APIs. Something like >> VelocityBridge >> (or VelocityAccess or VelocityApi or...). It would be empty. >> * Each component that want to be accessed from velocity will need to >> implement a component implementing VelocityBridge. It'll have a role- >> hint being the name under which it'll be access from Velocity. >> * Create a VelocityService class (component) which has a single >> get(String name) method and which uses the ComponentManager to look >> up >> components which implement VelocityBridge using the name as the role >> hint. >> * Put that VelocityService in the Velocity context under the name >> "services". > > This looks good. However, what will happen with the > VelocityContextInitializer component? Is it to be used only for > special > purposes, like setting the $doc variables, the $services and other > essential elements? Yes it could be used and the VelocityService thing above could be implemented as a VelocityContextInitializer. >> In practice this means that users will be able to access all our >> components through the VelocityBridge implementations with a syntax >> like: >> >> $services.office.convert(...) >> $services.translation.translate(...) >> ... >> >> Note1: We would need to be careful that it would be forbidden for any >> java code to use a VelocityBridge. This is to ensure all code logic >> is >> put into components and not into the bridges. We should use the maven >> enforcer plugin to enforce this rule. >> Note2: This means we'll have 2 APIs to maintain: the velocity one >> (the >> bridges) + the "Java"' one (the main components). But I don't see any >> other way... >> > > I still prefer the automatic velocity API exposure from the actual > java > class, using annotations and uberspectors. I'm experimenting with this. The first step is refactoring the current introspector package to make uberspector components. I have sent you a patch for this for review + some questions since I'm not sure why we have both chainable and linking implementations. Thanks -Vincent _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

