Good, if nobody complains, I'll commit the change later today. Thanks, Alex On 08/23/2010 11:00 AM, Alex Busenius wrote:
Hello,
I'd like to refactor AbstractScriptMacro in order to be able to change script behavior in the future without fanout violations. Here is the plan emerged after several discussions with ThomasM:
Introduce a notion of cancelable events. Such events can be canceled by the receiver (providing an optional reason), the actual canceling is performed by the sender.
http://dev.xwiki.org/xwiki/bin/view/Design/CancelableEvents
Send a cancelable event ScriptEvaluationStartsEvent in AbstractScriptMacro just before evaluating the script and a ScriptEvaluationFinishedEvent right after evaluation has finished (in finally block).
Add the following 3 listeners to those events (into rendering.internal.macro.script) and move the corresponding code from AbstractScriptMacro there:
ScriptClassLoaderHandlerListener * does class loader manipulations currently performed by AbstractScriptMacro#getClassLoader & Co
PermissionCheckerListener * Aborts execution of scripts that need PR if the document is not saved with PR * To distinguish velocity and PR scripts, introduce a new interface PrivilegedScriptMacro extends ScriptMacro and let AbstractJSR223ScriptMacro implement it
NestedScriptMacroValidatorListener * Replaces NestedScriptMacroValidator (ScriptMacroValidator component is removed completely)
The refactoring will remove the following methods (breaks API):
AbstractJSR223ScriptMacro: * protected boolean canExecuteScript() * public List execute(JSR223ScriptMacroParameters, String, MacroTransformationContext)
AbstractScriptMacro: * protected boolean canHaveJarsParameters() * protected ClassLoader getClassLoader(String, ClassLoader)
WDYT?
Alex _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs