On Feb 10, 2009, at 12:35 AM, Jerome Velociter wrote:

> Another thing, I can't see yet a clean way of having per-instance  
> macros
> on wiki farms. In virtual mode all wikis are going to share the same
> macros, which can be both annoying (macro list in WYSIWYG can appear
> polluted) and dangerous (Admin A. on wiki A overrides macro B. from
> Admin B. on wiki B without A. being noticed).

You could have one wiki macro manager per wiki. It looks for all macro  
objects in a given database.

-Vincent

> Jerome.
>
> 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.
>>
>> 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

Reply via email to