On Sep 1, 2008, at 9:23 AM, Anca Paula Luca wrote:

> 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.
>
> But how is this compatible with the plugins transformation to  
> components? Don't
> plugins (at least some) use/need the core?

Plugins are in plugins/ dir and will stay there until they're  
transformed into components.

Then there's no restriction about depending on core till it's split  
into small components.

Thanks
-Vincent

>>> 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?
>>
>>> 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.
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to