adding now() and inc() functions to the gel
git-svn-id: http://google-refine.googlecode.com/svn/trunk@202 7d457c2a-affb-35e4-300a-418c747d4874
This commit is contained in:
parent
9d8b746121
commit
32c0bf08c9
@ -0,0 +1,58 @@
|
||||
package com.metaweb.gridworks.expr.functions.date;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONWriter;
|
||||
|
||||
import com.metaweb.gridworks.expr.EvalError;
|
||||
import com.metaweb.gridworks.gel.ControlFunctionRegistry;
|
||||
import com.metaweb.gridworks.gel.Function;
|
||||
|
||||
public class Inc implements Function {
|
||||
|
||||
public Object call(Properties bindings, Object[] args) {
|
||||
if (args.length == 3 &&
|
||||
args[0] != null && args[0] instanceof Calendar &&
|
||||
args[1] != null && args[1] instanceof Number &&
|
||||
args[2] != null && args[2] instanceof String) {
|
||||
Calendar date = (Calendar) args[0];
|
||||
int amount = ((Number) args[1]).intValue();
|
||||
String unit = (String) args[2];
|
||||
|
||||
date.add(getField(unit), amount);
|
||||
|
||||
return date;
|
||||
}
|
||||
return new EvalError(ControlFunctionRegistry.getFunctionName(this) + " expects a date, a number and a string");
|
||||
}
|
||||
|
||||
private int getField(String unit) {
|
||||
if ("hours".equals(unit) || "hour".equals(unit) || "h".equals(unit)) {
|
||||
return Calendar.HOUR;
|
||||
} else if ("days".equals(unit) || "day".equals(unit) || "d".equals(unit)) {
|
||||
return Calendar.DAY_OF_MONTH;
|
||||
} else if ("years".equals(unit) || "year".equals(unit)) {
|
||||
return Calendar.YEAR;
|
||||
} else if ("months".equals(unit) || "month".equals(unit)) { // avoid 'm' to avoid confusion with minute
|
||||
return Calendar.MONTH;
|
||||
} else if ("minutes".equals(unit) || "minute".equals(unit) || "min".equals(unit)) { // avoid 'm' to avoid confusion with month
|
||||
return Calendar.MINUTE;
|
||||
} else if ("weeks".equals(unit) || "week".equals(unit) || "w".equals(unit)) {
|
||||
return Calendar.WEEK_OF_MONTH;
|
||||
} else if ("seconds".equals(unit) || "sec".equals(unit) || "s".equals(unit)) {
|
||||
return Calendar.SECOND;
|
||||
} else {
|
||||
throw new RuntimeException("Unit '" + unit + "' not recognized.");
|
||||
}
|
||||
}
|
||||
|
||||
public void write(JSONWriter writer, Properties options) throws JSONException {
|
||||
writer.object();
|
||||
writer.key("description"); writer.value("Returns a date changed by the given amount in the given unit of time");
|
||||
writer.key("params"); writer.value("date d, number value, string unit (default to 'hour')");
|
||||
writer.key("returns"); writer.value("date");
|
||||
writer.endObject();
|
||||
}
|
||||
}
|
@ -17,6 +17,8 @@ import com.metaweb.gridworks.expr.functions.arrays.Sort;
|
||||
import com.metaweb.gridworks.expr.functions.booleans.And;
|
||||
import com.metaweb.gridworks.expr.functions.booleans.Not;
|
||||
import com.metaweb.gridworks.expr.functions.booleans.Or;
|
||||
import com.metaweb.gridworks.expr.functions.date.Inc;
|
||||
import com.metaweb.gridworks.expr.functions.date.Now;
|
||||
import com.metaweb.gridworks.expr.functions.math.Ceil;
|
||||
import com.metaweb.gridworks.expr.functions.math.Exp;
|
||||
import com.metaweb.gridworks.expr.functions.math.Floor;
|
||||
@ -145,6 +147,9 @@ public class ControlFunctionRegistry {
|
||||
registerFunction("reverse", new Reverse());
|
||||
registerFunction("sort", new Sort());
|
||||
|
||||
registerFunction("now", new Now());
|
||||
registerFunction("inc", new Inc());
|
||||
|
||||
registerFunction("round", new Round());
|
||||
registerFunction("floor", new Floor());
|
||||
registerFunction("ceil", new Ceil());
|
||||
|
Loading…
Reference in New Issue
Block a user