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:
Stefano Mazzocchi 2010-03-04 20:53:07 +00:00
parent 9d8b746121
commit 32c0bf08c9
2 changed files with 63 additions and 0 deletions

View File

@ -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();
}
}

View File

@ -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.And;
import com.metaweb.gridworks.expr.functions.booleans.Not; import com.metaweb.gridworks.expr.functions.booleans.Not;
import com.metaweb.gridworks.expr.functions.booleans.Or; 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.Ceil;
import com.metaweb.gridworks.expr.functions.math.Exp; import com.metaweb.gridworks.expr.functions.math.Exp;
import com.metaweb.gridworks.expr.functions.math.Floor; import com.metaweb.gridworks.expr.functions.math.Floor;
@ -145,6 +147,9 @@ public class ControlFunctionRegistry {
registerFunction("reverse", new Reverse()); registerFunction("reverse", new Reverse());
registerFunction("sort", new Sort()); registerFunction("sort", new Sort());
registerFunction("now", new Now());
registerFunction("inc", new Inc());
registerFunction("round", new Round()); registerFunction("round", new Round());
registerFunction("floor", new Floor()); registerFunction("floor", new Floor());
registerFunction("ceil", new Ceil()); registerFunction("ceil", new Ceil());