private ScriptObjectMirror getFunc(ScriptEngine engine, String fName, String filename) { ScriptObjectMirror f = (ScriptObjectMirror) engine.get(fName); if ( f == null ) return null; else if ( !f.isFunction() ) { throw new RuntimeException("Expected " + fName + " to be a function!"); } else { LOGGER.info("using function " + fName + " from " + filename); } return f; }
private Object getValue(Object o) { if (o instanceof ScriptObjectMirror) { ScriptObjectMirror mirror = (ScriptObjectMirror) o; if (mirror.isFunction()) { return o.toString(); } else if (mirror.isArray()) { return mirror.values().stream() .map(e -> getValue(e)) .collect(Collectors.toList()); } else { return mirror.entrySet().stream() .collect(Collectors.toMap(e -> e.getKey().toString(), e -> getValue(e.getValue()))); } } return o; }
public static void showcase(Object... args) { Element eShowcase = new Element(); eShowcase.setName("SHOWCASE"); for (Object arg : args) { log.trace("arg: %s", arg); if (((ScriptObjectMirror) arg).isFunction()) { ((ScriptObjectMirror) arg).call(arg, eShowcase); } } } }
public void forEach(Map<String, Object> map, ScriptObjectMirror som) { if (map == null) { return; } if (!som.isFunction()) { throw new RuntimeException("not a JS function: " + som); } AtomicInteger i = new AtomicInteger(); map.forEach((k, v) -> som.call(som, k, v, i.getAndIncrement())); }
public void forEach(List list, ScriptObjectMirror som) { if (list == null) { return; } if (!som.isFunction()) { throw new RuntimeException("not a JS function: " + som); } for (int i = 0; i < list.size(); i++) { som.call(som, list.get(i), i); } }
public Object map(List list, ScriptObjectMirror som) { if (list == null) { return new ArrayList(); } if (!som.isFunction()) { throw new RuntimeException("not a JS function: " + som); } List res = new ArrayList(list.size()); for (int i = 0; i < list.size(); i++) { Object y = som.call(som, list.get(i), i); res.add(y); } return res; }
public Object listen(long timeout, ScriptObjectMirror som) { if (!som.isFunction()) { throw new RuntimeException("not a JS function: " + som); } return context.listen(timeout, () -> Script.evalFunctionCall(som, null, context)); }
public Object filter(List list, ScriptObjectMirror som) { if (list == null) { return new ArrayList(); } if (!som.isFunction()) { throw new RuntimeException("not a JS function: " + som); } List res = new ArrayList(); for (int i = 0; i < list.size(); i++) { Object x = list.get(i); Object y = som.call(som, x, i); if (y instanceof Boolean) { if ((Boolean) y) { res.add(x); } } else if (y instanceof Number) { // support truthy numbers as a convenience String exp = y + " == 0"; ScriptValue sv = Script.evalJsExpression(exp, null); if (!sv.isBooleanTrue()) { res.add(x); } } } return res; }
private static void bindJavascriptFunctions(Map<String, Resolvable> resolvableFunctions, Bindings bindings, File codeFile) { for (String s : bindings.keySet()) { CruncherJavascriptBinder jb = new CruncherJavascriptBinder(); jb.setLineAndColAndSource(0, 0, codeFile.getName(), s); jb.build("function", s); if (ResolverFactory.cruncherSpecs.containsKey(s)) continue; if (bindings.get(s) instanceof ScriptObjectMirror) { ScriptObjectMirror binding = (ScriptObjectMirror) bindings.get(s); if (binding.isFunction()) if (LevrResolverServlet.resolvableFunctions.get(s) == null || LevrResolverServlet.resolvableFunctions.get(s) instanceof CruncherJavascriptBinder) { String preamble = levrFunctionUseCodeFileAsNamespace ? codeFile.getName().substring(0, codeFile.getName().length() - 2) : ""; resolvableFunctions.put(preamble + s, jb); } } } }
/** * This will return the converted SerializableJsFunction if the given ScriptObjectMirror is a function. * @param scriptObjectMirror * @return null if the ScriptObjectMirror is not a function. */ public static SerializableJsFunction toSerializableForm(ScriptObjectMirror scriptObjectMirror) { if (!scriptObjectMirror.isFunction()) { return null; } //TODO try to get rid of ScriptFunction Object unwrapped = ScriptUtils.unwrap(scriptObjectMirror); if (unwrapped instanceof ScriptFunction) { ScriptFunction scriptFunction = (ScriptFunction) unwrapped; boolean isFunction = scriptObjectMirror.isFunction(); String source = scriptFunction.toSource(); return new SerializableJsFunction(source, isFunction); } else { return new SerializableJsFunction(unwrapped.toString(), true); } } }
/** * This will return the converted SerializableJsFunction if the given ScriptObjectMirror is a function. * @param scriptObjectMirror * @return null if the ScriptObjectMirror is not a function. */ public static SerializableJsFunction toSerializableForm(ScriptObjectMirror scriptObjectMirror) { if (!scriptObjectMirror.isFunction()) { return null; } //TODO try to get rid of ScriptFunction Object unwrapped = ScriptUtils.unwrap(scriptObjectMirror); if (unwrapped instanceof ScriptFunction) { ScriptFunction scriptFunction = (ScriptFunction) unwrapped; boolean isFunction = scriptObjectMirror.isFunction(); String source = scriptFunction.toSource(); return new SerializableJsFunction(source, isFunction); } else { return new SerializableJsFunction(unwrapped.toString(), true); } } }
public boolean isEach(ScriptObjectMirror som) { if (!som.isFunction()) { return false; } for (String s : values) { Object o = som.call(som, s); ScriptValue sv = new ScriptValue(o); if (!sv.isBooleanTrue()) { return false; } } return true; }
if (som.isArray()) { type = Type.JS_ARRAY; } else if (som.isFunction()) { type = Type.JS_FUNCTION; } else {
@Override public <E extends ScriptObjectMirror> void writeJSONString(E value, Appendable out, JSONStyle compression) throws IOException { if (value.isArray()) { Object[] array = value.values().toArray(); JsonWriter.arrayWriter.writeJSONString(array, out, compression); } else if (value.isFunction()) { JsonWriter.toStringWriter.writeJSONString("\"#function\"", out, compression); } else { // JSON JsonWriter.JSONMapWriter.writeJSONString(value, out, compression); } }
private ScriptValue newValueFromObjectMirror( final ScriptObjectMirror value ) { if ( value.isFunction() ) { return new FunctionScriptValue( this, value, this.runtime ); } if ( value.isArray() ) { return new ArrayScriptValue( this, value ); } return new ObjectScriptValue( this, value ); } }
private static Object toObject( final ScriptObjectMirror source ) { if ( source.isArray() ) { return toList( source ); } else if ( source.isFunction() ) { return toFunction( source ); } else { return toMap( source ); } }
if (scriptObjectMirror.isFunction()) { return SerializableJsFunction.toSerializableForm(scriptObjectMirror); } else if (scriptObjectMirror.isArray()) {
if (scriptObjectMirror.isFunction()) { return SerializableJsFunction.toSerializableForm(scriptObjectMirror); } else if (scriptObjectMirror.isArray()) {
else if (m.isFunction())
@Override public Object resolve(Context c, Map<String, String[]> parameters, Map<String, InputStream> dataStreams) throws JSONException { final Object get = get("obj"); if (get instanceof Resolvable) { LevrResolverServlet.resolvableWebServices.put(getAsString("endpoint", c, parameters, dataStreams), (Resolvable) get); return null; } if (get instanceof ScriptObjectMirror) { ScriptObjectMirror m = (ScriptObjectMirror) get; if (m.isFunction()) { String endpoint = getAsString("endpoint", c, parameters, dataStreams); CruncherJavascriptBinder b = new CruncherJavascriptBinder(); b.setLineAndColAndSource(0,0,"",endpoint); b.build("obj", m); LevrResolverServlet.resolvableWebServices.put(endpoint, b); return null; } } return null; }