Documented functions and controls in expression language.

Better error checking in operator calls.

git-svn-id: http://google-refine.googlecode.com/svn/trunk@127 7d457c2a-affb-35e4-300a-418c747d4874
This commit is contained in:
David Huynh 2010-02-23 01:40:06 +00:00
parent 607fca04cb
commit 8992531d02
39 changed files with 500 additions and 74 deletions

View File

@ -1,6 +1,7 @@
package com.metaweb.gridworks.commands.util; package com.metaweb.gridworks.commands.util;
import java.io.IOException; import java.io.IOException;
import java.util.Properties;
import java.util.Map.Entry; import java.util.Map.Entry;
import javax.servlet.ServletException; import javax.servlet.ServletException;
@ -22,6 +23,8 @@ public class GetExpressionLanguageInfoCommand extends Command {
try { try {
JSONWriter writer = new JSONWriter(response.getWriter()); JSONWriter writer = new JSONWriter(response.getWriter());
Properties options = new Properties();
writer.object(); writer.object();
writer.key("functions"); writer.key("functions");
@ -29,8 +32,7 @@ public class GetExpressionLanguageInfoCommand extends Command {
{ {
for (Entry<String, Function> entry : Parser.functionTable.entrySet()) { for (Entry<String, Function> entry : Parser.functionTable.entrySet()) {
writer.key(entry.getKey()); writer.key(entry.getKey());
writer.object(); entry.getValue().write(writer, options);
writer.endObject();
} }
} }
writer.endObject(); writer.endObject();
@ -40,8 +42,7 @@ public class GetExpressionLanguageInfoCommand extends Command {
{ {
for (Entry<String, Control> entry : Parser.controlTable.entrySet()) { for (Entry<String, Control> entry : Parser.controlTable.entrySet()) {
writer.key(entry.getKey()); writer.key(entry.getKey());
writer.object(); entry.getValue().write(writer, options);
writer.endObject();
} }
} }
writer.endObject(); writer.endObject();

View File

@ -2,6 +2,8 @@ package com.metaweb.gridworks.expr;
import java.util.Properties; import java.util.Properties;
public interface Control { import com.metaweb.gridworks.Jsonizable;
public interface Control extends Jsonizable {
public Object call(Properties bindings, Evaluable[] args); public Object call(Properties bindings, Evaluable[] args);
} }

View File

@ -2,6 +2,8 @@ package com.metaweb.gridworks.expr;
import java.util.Properties; import java.util.Properties;
public interface Function { import com.metaweb.gridworks.Jsonizable;
public interface Function extends Jsonizable {
public Object call(Properties bindings, Object[] args); public Object call(Properties bindings, Object[] args);
} }

View File

@ -17,72 +17,46 @@ public class OperatorCallExpr implements Evaluable {
args[i] = _args[i].evaluate(bindings); args[i] = _args[i].evaluate(bindings);
} }
if ("+".equals(_op)) { if (args.length == 2) {
if (args.length == 2) { if (args[0] != null && args[1] != null) {
if (args[0] instanceof Number && args[1] instanceof Number) {
return ((Number) args[0]).doubleValue() + ((Number) args[1]).doubleValue();
} else {
return args[0].toString() + args[1].toString();
}
}
} else if ("-".equals(_op)) {
if (args.length == 2) {
if (args[0] instanceof Number && args[1] instanceof Number) {
return ((Number) args[0]).doubleValue() - ((Number) args[1]).doubleValue();
}
}
} else if ("*".equals(_op)) {
if (args.length == 2) {
if (args[0] instanceof Number && args[1] instanceof Number) {
return ((Number) args[0]).doubleValue() * ((Number) args[1]).doubleValue();
}
}
} else if ("/".equals(_op)) {
if (args.length == 2) {
if (args[0] instanceof Number && args[1] instanceof Number) {
return ((Number) args[0]).doubleValue() / ((Number) args[1]).doubleValue();
}
}
} else if (">".equals(_op)) {
if (args.length == 2) {
if (args[0] instanceof Number && args[1] instanceof Number) { if (args[0] instanceof Number && args[1] instanceof Number) {
return ((Number) args[0]).doubleValue() > ((Number) args[1]).doubleValue(); if ("+".equals(_op)) {
return ((Number) args[0]).doubleValue() + ((Number) args[1]).doubleValue();
} else if ("-".equals(_op)) {
return ((Number) args[0]).doubleValue() - ((Number) args[1]).doubleValue();
} else if ("*".equals(_op)) {
return ((Number) args[0]).doubleValue() * ((Number) args[1]).doubleValue();
} else if ("/".equals(_op)) {
return ((Number) args[0]).doubleValue() / ((Number) args[1]).doubleValue();
} else if (">".equals(_op)) {
return ((Number) args[0]).doubleValue() > ((Number) args[1]).doubleValue();
} else if (">=".equals(_op)) {
return ((Number) args[0]).doubleValue() >= ((Number) args[1]).doubleValue();
} else if ("<".equals(_op)) {
return ((Number) args[0]).doubleValue() < ((Number) args[1]).doubleValue();
} else if ("<=".equals(_op)) {
return ((Number) args[0]).doubleValue() <= ((Number) args[1]).doubleValue();
}
} }
}
} else if (">=".equals(_op)) { if ("+".equals(_op)) {
if (args.length == 2) { return args[0].toString() + args[1].toString();
if (args[0] instanceof Number && args[1] instanceof Number) { }
return ((Number) args[0]).doubleValue() >= ((Number) args[1]).doubleValue(); }
}
} if ("==".equals(_op)) {
} else if ("<".equals(_op)) {
if (args.length == 2) {
if (args[0] instanceof Number && args[1] instanceof Number) {
return ((Number) args[0]).doubleValue() < ((Number) args[1]).doubleValue();
}
}
} else if ("<=".equals(_op)) {
if (args.length == 2) {
if (args[0] instanceof Number && args[1] instanceof Number) {
return ((Number) args[0]).doubleValue() <= ((Number) args[1]).doubleValue();
}
}
} else if ("==".equals(_op)) {
if (args.length == 2) {
if (args[0] != null) { if (args[0] != null) {
return args[0].equals(args[1]); return args[0].equals(args[1]);
} else { } else {
return args[1] == null; return args[1] == null;
} }
} } else if ("!=".equals(_op)) {
} else if ("!=".equals(_op)) {
if (args.length == 2) {
if (args[0] != null) { if (args[0] != null) {
return !args[0].equals(args[1]); return !args[0].equals(args[1]);
} else { } else {
return args[1] != null; return args[1] != null;
} }
} }
} }
return null; return null;
} }

View File

@ -4,6 +4,9 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Control; import com.metaweb.gridworks.expr.Control;
import com.metaweb.gridworks.expr.Evaluable; import com.metaweb.gridworks.expr.Evaluable;
import com.metaweb.gridworks.expr.VariableExpr; import com.metaweb.gridworks.expr.VariableExpr;
@ -50,4 +53,15 @@ public class ForEach implements Control {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value(
"Evaluates expression a to an array. Then for each array element, binds its value to variable name v, evaluates expression e, and pushes the result onto the result array."
);
writer.key("params"); writer.value("expression a, variable v, expression e");
writer.key("returns"); writer.value("array");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.controls;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Control; import com.metaweb.gridworks.expr.Control;
import com.metaweb.gridworks.expr.Evaluable; import com.metaweb.gridworks.expr.Evaluable;
import com.metaweb.gridworks.expr.ExpressionUtils; import com.metaweb.gridworks.expr.ExpressionUtils;
@ -36,4 +39,16 @@ public class ForNonBlank implements Control {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value(
"Evaluates expression o. If it is non-blank, binds its value to variable name v, evaluates expression eNonBlank and returns the result. " +
"Otherwise (if o evaluates to blank), evaluates expression eBlank and returns that result instead."
);
writer.key("params"); writer.value("expression o, variable v, expression eNonBlank, expression eBlank");
writer.key("returns"); writer.value("Depends on actual arguments");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.controls;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Control; import com.metaweb.gridworks.expr.Control;
import com.metaweb.gridworks.expr.Evaluable; import com.metaweb.gridworks.expr.Evaluable;
import com.metaweb.gridworks.expr.ExpressionUtils; import com.metaweb.gridworks.expr.ExpressionUtils;
@ -21,4 +24,16 @@ public class If implements Control {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value(
"Evaluates expression o. If it is true, evaluates expression eTrue and returns the result. " +
"Otherwise, evaluates expression eFalse and returns that result instead."
);
writer.key("params"); writer.value("expression o, expression eTrue, expression eFalse");
writer.key("returns"); writer.value("Depends on actual arguments");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.controls;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Control; import com.metaweb.gridworks.expr.Control;
import com.metaweb.gridworks.expr.Evaluable; import com.metaweb.gridworks.expr.Evaluable;
import com.metaweb.gridworks.expr.VariableExpr; import com.metaweb.gridworks.expr.VariableExpr;
@ -33,4 +36,15 @@ public class With implements Control {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value(
"Evaluates expression o and binds its value to variable name v. Then evaluates expression e and returns that result"
);
writer.key("params"); writer.value("expression o, variable v, expression eNonBlank, expression eBlank");
writer.key("returns"); writer.value("Depends on actual arguments");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class And implements Function { public class And implements Function {
@ -14,4 +17,14 @@ public class And implements Function {
} }
return true; return true;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("ANDs two boolean values");
writer.key("params"); writer.value("boolean a, boolean b");
writer.key("returns"); writer.value("boolean");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Ceil implements Function { public class Ceil implements Function {
@ -13,4 +16,13 @@ public class Ceil implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns the ceiling of a number");
writer.key("params"); writer.value("number d");
writer.key("returns"); writer.value("number");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class EndsWith implements Function { public class EndsWith implements Function {
@ -17,4 +20,13 @@ public class EndsWith implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns whether s ends with sub");
writer.key("params"); writer.value("string s, string sub");
writer.key("returns"); writer.value("boolean");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Floor implements Function { public class Floor implements Function {
@ -13,4 +16,14 @@ public class Floor implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns the floor of a number");
writer.key("params"); writer.value("number d");
writer.key("returns"); writer.value("number");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
import com.metaweb.gridworks.expr.HasFields; import com.metaweb.gridworks.expr.HasFields;
@ -75,4 +78,17 @@ public class Get implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value(
"If o has fields, returns the field named 'from' of o. " +
"If o is an array, returns o[from, to]. " +
"if o is a string, returns o.substring(from, to)"
);
writer.key("params"); writer.value("o, number or string from, optional number to");
writer.key("returns"); writer.value("Depends on actual arguments");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class IndexOf implements Function { public class IndexOf implements Function {
@ -17,4 +20,13 @@ public class IndexOf implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns the index of sub first ocurring in s");
writer.key("params"); writer.value("string s, string sub");
writer.key("returns"); writer.value("number");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.ExpressionUtils; import com.metaweb.gridworks.expr.ExpressionUtils;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
@ -11,4 +14,13 @@ public class IsBlank implements Function {
return args.length == 0 || ExpressionUtils.isBlank(args[0]); return args.length == 0 || ExpressionUtils.isBlank(args[0]);
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns whether o is null or an empty string");
writer.key("params"); writer.value("o");
writer.key("returns"); writer.value("boolean");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.ExpressionUtils; import com.metaweb.gridworks.expr.ExpressionUtils;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
@ -11,4 +14,13 @@ public class IsNotBlank implements Function {
return args.length > 0 && !ExpressionUtils.isBlank(args[0]); return args.length > 0 && !ExpressionUtils.isBlank(args[0]);
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns whether o is not null and not an empty string");
writer.key("params"); writer.value("o");
writer.key("returns"); writer.value("boolean");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class IsNotNull implements Function { public class IsNotNull implements Function {
@ -10,4 +13,13 @@ public class IsNotNull implements Function {
return args.length > 0 && args[0] != null; return args.length > 0 && args[0] != null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns whether o is not null");
writer.key("params"); writer.value("o");
writer.key("returns"); writer.value("boolean");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class IsNull implements Function { public class IsNull implements Function {
@ -10,4 +13,13 @@ public class IsNull implements Function {
return args.length == 0 || args[0] == null; return args.length == 0 || args[0] == null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns whether o is null");
writer.key("params"); writer.value("o");
writer.key("returns"); writer.value("boolean");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Join implements Function { public class Join implements Function {
@ -33,4 +36,13 @@ public class Join implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns the string obtained by joining the array a with the separator sep");
writer.key("params"); writer.value("array a, string sep");
writer.key("returns"); writer.value("string");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class LastIndexOf implements Function { public class LastIndexOf implements Function {
@ -17,4 +20,14 @@ public class LastIndexOf implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns the index of sub last ocurring in s");
writer.key("params"); writer.value("string s, string sub");
writer.key("returns"); writer.value("number");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Length implements Function { public class Length implements Function {
@ -23,4 +26,13 @@ public class Length implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns the length of o");
writer.key("params"); writer.value("array or string o");
writer.key("returns"); writer.value("number");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Ln implements Function { public class Ln implements Function {
@ -13,4 +16,13 @@ public class Ln implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns the natural log of n");
writer.key("params"); writer.value("number n");
writer.key("returns"); writer.value("number");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Log implements Function { public class Log implements Function {
@ -13,4 +16,13 @@ public class Log implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns the base 10 log of n");
writer.key("params"); writer.value("number n");
writer.key("returns"); writer.value("number");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Max implements Function { public class Max implements Function {
@ -15,4 +18,13 @@ public class Max implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns the greater of two numbers");
writer.key("params"); writer.value("number a, number b");
writer.key("returns"); writer.value("number");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Min implements Function { public class Min implements Function {
@ -15,4 +18,13 @@ public class Min implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns the smaller of two numbers");
writer.key("params"); writer.value("number a, number b");
writer.key("returns"); writer.value("number");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Mod implements Function { public class Mod implements Function {
@ -16,4 +19,13 @@ public class Mod implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns a modulus b");
writer.key("params"); writer.value("number a, number b");
writer.key("returns"); writer.value("number");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Not implements Function { public class Not implements Function {
@ -17,4 +20,14 @@ public class Not implements Function {
return o == null ? false : ( return o == null ? false : (
(o instanceof Boolean) ? ((Boolean) o).booleanValue() : Boolean.parseBoolean(o.toString())); (o instanceof Boolean) ? ((Boolean) o).booleanValue() : Boolean.parseBoolean(o.toString()));
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns the opposite of b");
writer.key("params"); writer.value("boolean b");
writer.key("returns"); writer.value("boolean");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Or implements Function { public class Or implements Function {
@ -14,4 +17,14 @@ public class Or implements Function {
} }
return false; return false;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns a OR b");
writer.key("params"); writer.value("boolean a, boolean b");
writer.key("returns"); writer.value("boolean");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Replace implements Function { public class Replace implements Function {
@ -19,4 +22,14 @@ public class Replace implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns the string obtained by replacing f with r in s");
writer.key("params"); writer.value("string s, string f, string r");
writer.key("returns"); writer.value("string");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Round implements Function { public class Round implements Function {
@ -13,4 +16,13 @@ public class Round implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns n rounded");
writer.key("params"); writer.value("number n");
writer.key("returns"); writer.value("number");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Slice implements Function { public class Slice implements Function {
@ -59,4 +62,16 @@ public class Slice implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value(
"If o is an array, returns o[from, to]. " +
"if o is a string, returns o.substring(from, to)"
);
writer.key("params"); writer.value("o, number from, optional number to");
writer.key("returns"); writer.value("Depends on actual arguments");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class Split implements Function { public class Split implements Function {
@ -17,4 +20,13 @@ public class Split implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns the array of strings obtained by splitting s with separator sep");
writer.key("params"); writer.value("string s, string sep");
writer.key("returns"); writer.value("array");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class StartsWith implements Function { public class StartsWith implements Function {
@ -16,5 +19,13 @@ public class StartsWith implements Function {
} }
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns whether s starts with sub");
writer.key("params"); writer.value("string s, string sub");
writer.key("returns"); writer.value("boolean");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class ToLowercase implements Function { public class ToLowercase implements Function {
@ -14,4 +17,13 @@ public class ToLowercase implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns s converted to lowercase");
writer.key("params"); writer.value("string s");
writer.key("returns"); writer.value("string");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class ToNumber implements Function { public class ToNumber implements Function {
@ -13,4 +16,14 @@ public class ToNumber implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns o converted to a number");
writer.key("params"); writer.value("o");
writer.key("returns"); writer.value("number");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class ToString implements Function { public class ToString implements Function {
@ -13,4 +16,14 @@ public class ToString implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns o converted to a string");
writer.key("params"); writer.value("o");
writer.key("returns"); writer.value("string");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class ToTitlecase implements Function { public class ToTitlecase implements Function {
@ -28,4 +31,14 @@ public class ToTitlecase implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns s converted to titlecase");
writer.key("params"); writer.value("string s");
writer.key("returns"); writer.value("string");
writer.endObject();
}
} }

View File

@ -2,6 +2,9 @@ package com.metaweb.gridworks.expr.functions;
import java.util.Properties; import java.util.Properties;
import org.json.JSONException;
import org.json.JSONWriter;
import com.metaweb.gridworks.expr.Function; import com.metaweb.gridworks.expr.Function;
public class ToUppercase implements Function { public class ToUppercase implements Function {
@ -14,4 +17,13 @@ public class ToUppercase implements Function {
return null; return null;
} }
public void write(JSONWriter writer, Properties options)
throws JSONException {
writer.object();
writer.key("description"); writer.value("Returns s converted to uppercase");
writer.key("params"); writer.value("string s");
writer.key("returns"); writer.value("string");
writer.endObject();
}
} }

View File

@ -81,18 +81,32 @@ ExpressionPreviewDialog.prototype._renderHelpTab = function() {
ExpressionPreviewDialog.prototype._renderHelp = function(data) { ExpressionPreviewDialog.prototype._renderHelp = function(data) {
var elmt = this._elmts.helpTabBody.empty(); var elmt = this._elmts.helpTabBody.empty();
$('<h3></h3>').text("Functions").appendTo(elmt); var renderEntry = function(table, name, entry) {
var tr0 = table.insertRow(table.rows.length);
var tr1 = table.insertRow(table.rows.length);
var tr2 = table.insertRow(table.rows.length);
var ul = $('<ul></ul>').appendTo(elmt); $(tr0.insertCell(0)).text(name);
for (var n in data.functions) { $(tr0.insertCell(1)).text("(" + entry.params + ")");
$('<li></li>').text(n).appendTo(ul);
} $(tr1.insertCell(0));
$(tr1.insertCell(1)).text("returns: " + entry.returns);
$(tr2.insertCell(0));
$(tr2.insertCell(1)).text(entry.description);
};
$('<h3></h3>').text("Functions").appendTo(elmt);
var functionTable = $('<table width="100%"></table>').appendTo(elmt)[0];
$('<h3></h3>').text("Controls").appendTo(elmt); $('<h3></h3>').text("Controls").appendTo(elmt);
var controlTable = $('<table width="100%"></table>').appendTo(elmt)[0];
ul = $('<ul></ul>').appendTo(elmt); for (var n in data.functions) {
renderEntry(functionTable, n, data.functions[n]);
}
for (var n in data.controls) { for (var n in data.controls) {
$('<li></li>').text(n).appendTo(ul); renderEntry(controlTable, n, data.controls[n]);
} }
}; };