Jerome Velociter wrote:
> Hello,
>
> First, agreed with Thomas, we should make this generic and allow to 
> define macros with all script languages we support.
>
> I started to give it a shot, I think this would really accelerate the 
> number of syntax 2.0 macro we can distribute (both written by us or 
> contributions).
> Below my findings / questions :
>
> 1. Initialization (creating the MacroClass if not present already)
> This is going to be very hard to do oustide xwiki-core. One thing is 
> that their is no store available as long as the main XWiki object is not 
> initialized, and some work is needed to make this happen without having 
> to wait for the first HTTP request (and even if we do that, we have the 
> problem with virtual wikis, for which we need to update the macro class 
> too). An alternative would be to create a component interface for code 
> that needs initialization once a wiki is initialized (wiki store, 
> notification/observation manager, etc available) and lookup and call 
> initialization method for all implementations once a wiki is ready. Even 
> with this, we need bridges for adding class/class properties. I'm not 
> sure we want that really, I think having the component implementation in 
> the core too is a better option.
>
> 2. Querying documents that have a MacroClass object
> We don't have a bridge for that. My take is that we should have an 
> interface like WikiMacroStore which default implementation would be in 
> xwiki-core, and once we have the new model & storage we reimplement it 
> in another place. The MacroManager would have this store as injected 
> dependency. Maybe this implentation in core could be responsible to 
> initialize the MacroClass too.
>
> 3. Observation
> This is possible to have as a component implementation outside core, but 
> would mean having to add a version property to the DocumentModelBridge, 
> and overload methods from the DocumentAccessBridge adding a version 
> parameter, since we need to compare things (was there a MacroClass 
> object deleted ? etc.). I'm not very conviced by this, since its more 
> bridge code that will need to be changed later. Alternatives I see are 
> either a component implementation in core (maybe that WikiStore too) 
> that would subscribe to notifications, compare things upon notify, and 
> generate custom events that the MacroManager listens to (like 
> WikiMacroDeleted, WikiMacroChanged, etc.) It would mean the macro 
> manager component defines its own set of events. Third possibility is 
> that the macro store (or whatever thing we create to listens to analyze 
> macro related notifications in core) call itself the macro manager to 
> register/unregister macors. But I don't think it's right this way.

Maybe in the end all initialization/class/versions of object 
manipulations best place would be in a old-fashioned plugin until we 
have the new model. There we have hooks for initalization, virtual 
initialization, objects APIs, etc.

Just a thought...

Jerome.

>
> So at the end, I see the MacroManager as a component thats knows how to 
> register/unregister a "WikiScriptMacro" (in 
> xwiki-rendering-macro-script, that extends the AbstractScriptMacro) 
> implementation to/from the component manager. Upon initialization, it 
> asks a WikiMacroStore to return all active macros in the wiki and 
> register them. Then it listens to events from the observation manager to 
> load/unload when a new macro is created, a macro is deleted or loses its 
> programming right, etc.
>
> As for where should it go, I think the rendering module is the best 
> option, tell me if I'm wrong. (At least not xwiki-velocity if it 
> supports several languages).
>
> I did not started to look at parameters handling yet.
>
> In advance, thanks for your feedback
>
> Jerome.
>
> PS: I created a JIRA issue for it: 
> http://jira.xwiki.org/jira/browse/XWIKI-3213
>
> Thomas Mortagne wrote:
>> +1 for the general principal of using rendering api from script in
>> place of velocity macros.
>>
>> I would prefer a MacroClass which can support any script language.
>> Thanks to jsr223, the only difference with what you described is that
>> the macro content would be executed with a different engine depending
>> on a "language" field of the MacroClass (and the name of the class
>> would be different ;)). This field would be to "velocity" by default I
>> guess.
>>
>> On Wed, Feb 4, 2009 at 8:41 AM, Vincent Massol <[email protected]> wrote:
>>> Hi,
>>>
>>> We need to allow users to write macros using Velocity and still use
>>> the same mechanism as the new rendering. Basically this means
>>> transforming velocity macros into Rendering Macros. Once this is done
>>> then the velocity macro will be able to be used as standard Rendering
>>> Macros, they'll appear in the new WYSIWYG, etc.
>>>
>>> Here's a proposal for doing so:
>>>
>>> * Split xwiki-velocity/ module into 2
>>>   - xwiki-velocity-engine/ (the one currently in xwiki-velocity)
>>>   - xwiki-velocity-macro/ (the new one)
>>> * In xwiki-velocity-macro create a VelocityMacroManager class that
>>> does the following:
>>>   - initialize itself at xwiki startup
>>>   - create a VelocityMacroClass definition in the wiki if it doesn't
>>> exist
>>>   - query the wiki for all objects of type VelocityMacroClass
>>>   - for each of them register them dynamically (we can already do
>>> this) as a Rendering Macro
>>> * The VelocityMacroClass has several fields:
>>>   - macro name, parameter names, parameters description, macro
>>> description, usage example, velocity content to execute (the macro
>>> content)
>>> * The VelocityMacroManager register itself against the Observation
>>> component to receive notifications whenever a VelocityMacroClass is
>>> modified (added, removed, etc)
>>> * Users will then be able to add velocity macros by simply creating a
>>> new page, adding the VelocityMacroClass in it, fill the values.
>>> * We should also provide a VelocityMacroClassSheet so that the macro
>>> page containing the VelocityMacroClass can display the help for the
>>> macro (self-standing)
>>>
>>> The nice thing is that this keeps velocity macro handling in the xwiki-
>>> velocity/ module and makes it completely optional (i.e. the wiki will
>>> still work and there's no ties with this feature elsewhere).
>>>
>>> WDYT?
>>>
>>> Thanks
>>> -Vincent
>>> http://xwiki.com
>>> http://xwiki.org
>>> http://massol.net
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> devs mailing list
>>> [email protected]
>>> http://lists.xwiki.org/mailman/listinfo/devs
>>>
>>
>>
>
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs

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

Reply via email to