filebot/source/net/filebot/format/ExpressionFormatFunctions.java

103 lines
2.0 KiB
Java
Raw Normal View History

2014-04-19 02:30:29 -04:00
package net.filebot.format;
import groovy.lang.Closure;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* Global functions available in the {@link ExpressionFormat}
*/
public class ExpressionFormatFunctions {
/**
* General helpers and utilities
*/
public static Object c(Closure<?> c) {
try {
return c.call();
} catch (Exception e) {
return null;
}
}
2014-04-15 10:29:13 -04:00
public static Object any(Object a0, Object a1, Object... args) {
for (Object it : new Object[] { a0, a1 }) {
try {
2014-04-15 10:29:13 -04:00
Object result = callIfCallable(it);
if (result != null) {
return result;
}
} catch (Exception e) {
// ignore
}
}
2014-04-15 10:29:13 -04:00
for (Object it : args) {
try {
Object result = callIfCallable(it);
if (result != null) {
return result;
}
} catch (Exception e) {
// ignore
}
}
return null;
}
2014-04-15 10:29:13 -04:00
public static List<Object> allOf(Object a0, Object a1, Object... args) {
List<Object> values = new ArrayList<Object>();
2014-04-15 10:29:13 -04:00
for (Object it : new Object[] { a0, a1 }) {
try {
Object result = callIfCallable(it);
if (result != null) {
values.add(result);
}
} catch (Exception e) {
// ignore
}
}
for (Object it : args) {
try {
2014-04-15 10:29:13 -04:00
Object result = callIfCallable(it);
if (result != null) {
values.add(result);
}
} catch (Exception e) {
// ignore
}
}
return values;
}
2014-04-15 10:29:13 -04:00
private static Object callIfCallable(Object obj) throws Exception {
if (obj instanceof Closure<?>) {
return ((Closure<?>) obj).call();
}
return obj;
}
public static Map<String, String> csv(String path) throws IOException {
Map<String, String> map = new LinkedHashMap<String, String>();
for (String line : Files.readAllLines(Paths.get(path), Charset.forName("UTF-8"))) {
String[] field = line.split(";", 2);
if (field.length >= 2) {
map.put(field[0], field[1]);
}
}
return map;
}
}