package au.com.vaadinutils.js; import java.util.LinkedList; import java.util.List; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; import com.google.common.base.Preconditions; public class JavaScriptFunctionCall { List<String> safeArgs = new LinkedList<>(); private String functionName; /** * creates a string suitable for calling a javascript function, where the * parameters have been correctly escaped * * example usage * * JavaScriptFunctionCall func = new JavaScriptFunctionCall("fred", 1, 2, * false, "test Str'ing ");<br> * * func.getCall(); * * @param function * name of the java script function * @param args * arguments to pass to the function */ JavaScriptFunctionCall(String function, Object... args) { Preconditions.checkArgument(StringUtils.isNotEmpty(function)); functionName = function; for (Object arg : args) { if (arg instanceof Number) { safeArgs.add(arg.toString()); } else if (arg instanceof Boolean) { safeArgs.add(arg.toString()); } else { safeArgs.add("'" + StringEscapeUtils.escapeEcmaScript(arg.toString()) + "'"); } } } String getCall() { String call = functionName + "("; for (String arg : safeArgs) { call += arg + ","; } if (!safeArgs.isEmpty()) { call = call.substring(0, call.length() - 1); } return call + ");"; } }