mirror of
https://github.com/mitb-archive/filebot
synced 2024-08-13 17:03:45 -04:00
51 lines
1.2 KiB
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);
|
|
}
|
|
|
|
}
|