Vincent Massol wrote:
> 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.

Yes, the main (xwiki) wiki by default. Looks the best compromise.

Jerome

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

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

Reply via email to