package com.dgrid.handlers;
import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyShell;
import java.io.File;
import com.dgrid.api.GenericScriptTypeHandler;
import com.dgrid.api.JobletTypeHandler;
import com.dgrid.api.SimpleJoblet;
import com.dgrid.api.SimpleJobletResult;
import com.dgrid.gen.JOB_STATUS;
import com.dgrid.gen.Joblet;
import com.dgrid.service.DGridClient;
public class GroovyJobletTypeHandler extends GenericScriptTypeHandler implements
JobletTypeHandler {
public static final String SCRIPT_PARAM = "script";
private GroovyClassLoader loader;
private GroovyShell shell = new GroovyShell();
public GroovyJobletTypeHandler(File dir) {
super(dir);
loader = new GroovyClassLoader(getClass().getClassLoader());
}
@Override
protected SimpleJoblet compile(String code) throws Exception {
log.trace("compile()");
Class clz = loader.parseClass(code);
Object obj = clz.newInstance();
if (obj instanceof SimpleJoblet) {
return (SimpleJoblet) obj;
} else {
return new GroovyShellSimpleJoblet(shell, code);
}
}
private static class GroovyShellSimpleJoblet implements SimpleJoblet {
private GroovyShell shell;
private String code;
public GroovyShellSimpleJoblet(GroovyShell shell, String code) {
this.shell = shell;
this.code = code;
}
public SimpleJobletResult execute(Joblet joblet, DGridClient gridClient)
throws Exception {
Object obj = shell.evaluate(code);
String retval = (obj != null) ? obj.toString() : "";
return new SimpleJobletResult(0, JOB_STATUS.COMPLETED, retval);
}
}
}