Hi,

This is following the proposal done here some time ago:
http://mar​kmail.org/​message/nn​ybto3mluvp​2rov

Since we now have a generic Script notion we need to revisit it in  
that light. Also we really need to implement it now since more and  
more components are put in the velocity context (office importer,  
syntax factory, etc) and we need to bring some order.

Here's a new generic proposal:

Short term
========

* The variable "services" is bound in the script context. For ex in  
Velocity: $services
* The Services object (ScriptServiceManager) has a ScriptService  
get(String serviceName) method which returns the service
* We use the namespace: services.<module name>.<method>. Each module  
provides only one service entry point.
* ScriptService interface (empty interface) represents a  service to  
be bound in the context
* ScriptServiceManager.get() looks for all components of role  
ScriptService and returns the component matching the the name as the  
component hint.

Ex:

@Component("mymodule")
public class MyModuleScriptService implements ScriptService,  
MyModuleBusinessInterface
{
     public void myMethod() {}
}

In script:

{{velocity}}
$services.mymodule.myMethod
{{/velocity}}

Medium term
==========

* We handle @authorization(Authorization.PROGRAMMING) annotations to  
check for access rights. To do this in ScriptServiceManager.get() we  
use a  Dynamic Proxy to implement MyModuleBusinessInterface (we  
probably need a ScriptService.getInterface() method to make it  
unambiguous). The Dynamic Proxy checks the annotation before proxying  
to the real object.

WDYT?

Thanks
-Vincent

PS: This is to answer Sergiu's question about where is  
getAvailableParserSyntaxes() from my other mail... ;) Answer: It would  
be in RenderingScriptService.
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to