filebot/source/net/filebot/cli/GroovyRenameAction.java

51 lines
1.2 KiB
Java

package net.filebot.cli;
import java.io.File;
import javax.script.ScriptException;
import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
import groovy.lang.Closure;
import net.filebot.RenameAction;
public class GroovyRenameAction implements RenameAction {
private final Closure<?> closure;
public GroovyRenameAction(String script) {
try {
this.closure = compile(script);
} catch (ScriptException e) {
throw new IllegalArgumentException(e);
}
}
public GroovyRenameAction(Closure<?> closure) {
this.closure = closure;
}
@Override
public File rename(File from, File to) throws Exception {
Object value = closure.call(from, to);
// must return File object, so we try the result of the closure, but if it's not a File we just return the original destination parameter
return value instanceof File ? (File) value : null;
}
@Override
public boolean canRevert() {
return false;
}
@Override
public String toString() {
return "CLOSURE";
}
public static Closure<?> compile(String script) throws ScriptException {
return (Closure) DefaultTypeTransformation.castToType(ScriptShell.createScriptEngine().eval(script), Closure.class);
}
}