package hudson.drools;
import groovy.lang.Binding;
import groovy.lang.GroovyCodeSource;
import groovy.lang.GroovyShell;
import hudson.model.Hudson;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import org.drools.runtime.StatefulKnowledgeSession;
import org.kohsuke.stapler.DataBoundConstructor;
public class Script {
private final String id;
private final String source;
@DataBoundConstructor
public Script(String id, String source) {
super();
this.id = id;
this.source = source;
}
public String getId() {
return id;
}
public String getSource() {
return source;
}
public Map execute(StatefulKnowledgeSession session, PrintWriter output, Map<String, Object> parameters) throws Exception {
Binding binding = new Binding();
for (Map.Entry<String, Object> entry : parameters.entrySet()) {
binding.setVariable(entry.getKey(), entry.getValue());
}
binding.setVariable("session", session);
binding.setVariable("hudson", Hudson.getInstance());
binding.setVariable("args", parameters);
binding.setVariable("out", output);
GroovyShell shell = new GroovyShell(Hudson.getInstance()
.getPluginManager().uberClassLoader, binding);
GroovyCodeSource codeSource = new GroovyCodeSource(source, id, id);
Object result = shell.evaluate(codeSource);
if (result instanceof Map) {
return (Map) result;
} else {
Map results = new HashMap();
results.put("result", result);
return results;
}
}
}