class MashupController { def feedService def index = { } def action = { println "params : $params" def scriptName = params.__scriptName def variableName = params.__variableName params.keySet().removeAll(['__scriptName', '__variableName'] as Set) def mashup = new Mashup(this, scriptName) def binding = new Binding([params: params, mashup: mashup, feed: feedService]) def shell = new GroovyShell(binding) def script = new File("${servletContext.getRealPath('/scripts')}/${scriptName}.groovy") if (variableName == 'source') { render(text: script.text, contentType: 'text/plain', encoding: 'UTF-8') return } shell.evaluate(script) def variable = binding.getVariable(variableName) if (variable instanceof Closure) { def result = variable() if (result) render result else if (!mashup.rendered) render 'Action réussie !' } else render variable } } class Mashup { def rendered = false private def controller private def script Mashup(controller, script) { this.controller = controller this.script = script } def render(args) { if (args instanceof Map && args.view) args.view = "mashup/$script/$args.view" controller.render(args) rendered = true return } def render(args, Closure cl) { controller.render(args, cl) rendered = true return } }