Example usage for jdk.nashorn.api.scripting JSObject call

List of usage examples for jdk.nashorn.api.scripting JSObject call

Introduction

In this page you can find the example usage for jdk.nashorn.api.scripting JSObject call.

Prototype

public Object call(final Object thiz, final Object... args);

Source Link

Document

Call this object as a JavaScript function.

Usage

From source file:com.eas.client.application.ScriptedTests.java

protected void start(String aTestModuleName, long aTimeout) throws InterruptedException {
    Object success = new Object();
    Object failure = new Object();
    long started = System.currentTimeMillis();
    AtomicReference<Object> completion = new AtomicReference();
    withFacade(completion, () -> {//from   w  w w  . ja v  a  2s. c o m
        try {
            ScriptedResource.require(new String[] { aTestModuleName }, null, new AbstractJSObject() {
                @Override
                public Object call(final Object thiz, final Object... args) {
                    JSObject testModule = Scripts.getSpace().lookup(aTestModuleName);
                    JSObject testInstance = (JSObject) testModule.newObject();
                    JSObject execute = (JSObject) testInstance.getMember("execute");
                    try {
                        execute.call(testInstance, new Object[] { new SystemJSCallback() {
                            @Override
                            public Object call(final Object thiz, final Object... args) {
                                completion.set(success);
                                return null;
                            }
                        }, new SystemJSCallback() {
                            @Override
                            public Object call(final Object thiz, final Object... args) {
                                completion.set(args.length > 0 ? args[0] : failure);
                                return null;
                            }
                        } });
                    } catch (ECMAException ex) {
                        completion.set(ex);
                    }
                    return null;
                }

            }, new AbstractJSObject() {
                @Override
                public Object call(final Object thiz, final Object... args) {
                    completion.set(args[0]);
                    return null;
                }
            });
        } catch (Exception ex) {
            Logger.getLogger(ScriptedTests.class.getName()).log(Level.SEVERE, null, ex);
            completion.set(ex);
        }
    });
    while (completion.get() == null && System.currentTimeMillis() < started + aTimeout) {
        Thread.sleep(10);
    }
    Object lastChance = completion.get();
    if (lastChance != success) {
        String failedText = aTestModuleName + " failed due to ";
        if (lastChance == null) {
            fail(failedText + "a timeout");
        } else if (lastChance == failure) {
            fail(failedText + "an unknown problem");
        } else if (lastChance instanceof Throwable) {
            fail(failedText + lastChance.toString());
        } else if (lastChance instanceof JSObject) {
            fail(failedText + Scripts.getSpace().toJson(lastChance));
        } else {
            fail(failedText + lastChance.toString());
        }
    }
}

From source file:com.eas.client.application.ScriptedTests.java

private void withFacade(AtomicReference<Object> aCompletion, Runnable withFacade) {
    Scripts.getSpace().process(() -> {
        try {/*from w w  w .  ja v  a 2s .c  o  m*/
            if (Scripts.getSpace().getDefined().containsKey("facade")) {
                withFacade.run();
            } else {
                ScriptedResource.require(new String[] { "facade" }, null, new AbstractJSObject() {
                    @Override
                    public Object call(final Object thiz, final Object... args) {
                        JSObject facade = Scripts.getSpace().lookup("facade");
                        JSObject cacheBust = (JSObject) facade.getMember("cacheBust");
                        cacheBust.call(facade, new Object[] { true });
                        JSObject export = (JSObject) facade.getMember("export");
                        export.call(facade, new Object[] { Scripts.getSpace().getGlobal() });
                        withFacade.run();
                        return null;
                    }
                }, new AbstractJSObject() {
                    @Override
                    public Object call(final Object thiz, final Object... args) {
                        aCompletion.set(args[0]);
                        return null;
                    }
                });
            }
        } catch (Exception ex) {
            aCompletion.set(ex);
        }
    });
}

From source file:com.eas.client.changes.ChangeValue.java

@Override
public JSObject getPublished() {
    if (published == null) {
        JSObject publisher = Scripts.getSpace().getPublisher(this.getClass().getName());
        if (publisher == null || !publisher.isFunction()) {
            throw new NoPublisherException();
        }/*from   ww  w .  ja v  a 2  s  .c  o  m*/
        published = (JSObject) publisher.call(null, new Object[] { this });
    }
    return published;
}

From source file:com.eas.client.queries.ScriptedQuery.java

@Override
public JSObject execute(Scripts.Space aSpace, Consumer<JSObject> onSuccess, Consumer<Exception> onFailure)
        throws Exception {
    assert Scripts.getSpace() == aSpace : "Scripts.Space TLS assumption failed";
    if (onSuccess != null) {
        ScriptedResource._require(new String[] { entityName }, null, aSpace, new HashSet<>(), (Void v) -> {
            JSObject source = aSpace.createModule(entityName);
            if (source.hasMember("fetch")) {
                Object oFetch = source.getMember("fetch");
                if (oFetch instanceof JSObject) {
                    JSObject jsFetch = (JSObject) oFetch;
                    if (jsFetch.isFunction()) {
                        JSObject jsParams = aSpace.makeObj();
                        for (int i = 0; i < params.getParametersCount(); i++) {
                            Parameter p = params.get(i + 1);
                            jsParams.setMember(p.getName(), aSpace.toJs(p.getValue()));
                        }//w  w w  . j  a va2 s .c  o  m
                        final ExecutionChecker exChecker = new ExecutionChecker();
                        Object oRowset = jsFetch.call(source,
                                aSpace.toJs(new Object[] { jsParams, new AbstractJSObject() {

                                    @Override
                                    public Object call(final Object thiz, final Object... args) {
                                        if (exChecker.isExecutionNeeded()) {
                                            try {
                                                JSObject jsRowset = args.length > 0
                                                        ? (JSObject) aSpace.toJava(args[0])
                                                        : null;
                                                try {
                                                    onSuccess.accept(jsRowset);
                                                } catch (Exception ex) {
                                                    Logger.getLogger(ScriptedQuery.class.getName())
                                                            .log(Level.SEVERE, null, ex);
                                                }
                                            } catch (Exception ex) {
                                                if (onFailure != null) {
                                                    onFailure.accept(ex);
                                                }
                                            }
                                        }
                                        return null;
                                    }
                                }, new AbstractJSObject() {

                                    @Override
                                    public Object call(final Object thiz, final Object... args) {
                                        if (exChecker.isExecutionNeeded()) {
                                            if (onFailure != null) {
                                                if (args.length > 0) {
                                                    if (args[0] instanceof Exception) {
                                                        onFailure.accept((Exception) args[0]);
                                                    } else {
                                                        onFailure.accept(new Exception(
                                                                String.valueOf(aSpace.toJava(args[0]))));
                                                    }
                                                } else {
                                                    onFailure.accept(new Exception(
                                                            "No error information from fetch method"));
                                                }
                                            }
                                        }
                                        return null;
                                    }
                                } }));
                        if (!JSType.nullOrUndefined(oRowset)) {
                            onSuccess.accept((JSObject) aSpace.toJava(oRowset));
                            exChecker.setExecutionNeeded(false);
                        }
                    }
                }
            }
        }, onFailure);
        return null;
    } else {
        JSObject source = aSpace.createModule(entityName);
        if (source.hasMember("fetch")) {
            Object oFetch = source.getMember("fetch");
            if (oFetch instanceof JSObject) {
                JSObject jsFetch = (JSObject) oFetch;
                if (jsFetch.isFunction()) {
                    JSObject jsParams = aSpace.makeObj();
                    Object oRowset = jsFetch.call(source, aSpace.toJs(new Object[] { jsParams }));
                    if (!JSType.nullOrUndefined(oRowset)) {
                        return (JSObject) aSpace.toJava(oRowset);
                    }
                }
            }
        }
        return null;
    }
}

From source file:com.eas.client.RemoteServerModulesProxy.java

@Override
public Object callServerModuleMethod(String aModuleName, String aMethodName, Scripts.Space aSpace,
        JSObject onSuccess, JSObject onFailure, Object... aArguments) throws Exception {
    if (onSuccess != null) {
        executeServerModuleMethod(aModuleName, aMethodName, aSpace, (Object aResult) -> {
            onSuccess.call(null, new Object[] { aResult });
        }, (Exception ex) -> {
            if (onFailure != null) {
                onFailure.call(null,/*from   w w w.  ja  v a2s. c o m*/
                        new Object[] { ex instanceof JsObjectException ? ((JsObjectException) ex).getData()
                                : ex.getMessage() });
            }
        }, aArguments);
        return null;
    } else {
        return executeServerModuleMethod(aModuleName, aMethodName, aSpace, null, null, aArguments);
    }
}

From source file:com.eas.server.LocalServerModulesProxy.java

@Override
public Object callServerModuleMethod(String aModuleName, String aMethodName, Scripts.Space aSpace,
        JSObject onSuccess, JSObject onFailure, Object... aArguments) throws Exception {
    if (Scripts.getContext() != null) {
        Scripts.getContext().incAsyncsCount();
    }/*from   w  ww. j a v a2  s  . c  o m*/
    assert Scripts.getSpace() == aSpace;
    serverCore.executeMethod(aModuleName, aMethodName, aArguments, false,
            onSuccess != null ? (Object aResult) -> {
                onSuccess.call(null, new Object[] { aSpace.toJs(aResult) });
            } : null, (Exception ex) -> {
                if (onFailure != null) {
                    onFailure.call(null,
                            new Object[] { ex instanceof JsObjectException ? ((JsObjectException) ex).getData()
                                    : ex.toString() });
                } else {
                    Logger.getLogger(LocalServerModulesProxy.class.getName()).log(Level.SEVERE, ex.toString());
                }
            });
    return null;// Only asynchronous form is allowed.
}

From source file:com.hcspider.platypusjs.asynchttp.AsyncHTTPCallbacks.java

public static BiConsumer<Object, Throwable> asConsumer(JSObject aOnSuccess, JSObject aOnFailure) {
    return (Object aResult, Throwable aReason) -> {
        if (aReason != null) {
            aOnFailure.call(null, aReason);
        } else {/*  w  ww.j a v  a2s  .  c  om*/
            aOnSuccess.call(null, aResult);
        }
    };
}

From source file:net.desertconsulting.mocharest.js.Deferred.java

License:Apache License

/**
 * Runs right handlers when this {@link Deferred} object is either resolved
 * or rejected./*from  w  ww  . ja  v a  2  s  .  co  m*/
 *
 * @param res result
 */
private void runHandlers(Object res) {

    Object result = null;
    JSObject handler = null;

    if (resolved) {
        result = res != null ? res : resolvedResult;
        handler = doneHandler;
    } else if (rejected) {
        result = res != null ? res : rejectedResult;
        handler = failHandler;
    }

    Function<Object, Consumer<Deferred>> consumerGenerator = (r) -> {
        Consumer<Deferred> consumer = null;

        if (resolved) {
            consumer = (p) -> {
                p.resolve(r);
            };
        } else if (rejected) {
            consumer = (p) -> {
                p.reject(r);
            };
        }
        return consumer;
    };

    if (handler != null) {
        Object rv;
        try {
            rv = handler.call(this, result);
            if (res == null) {
                Object parm;

                if (rv != null && !(rv instanceof Undefined)) {
                    parm = rv;
                } else {
                    parm = result;
                }

                if (parm instanceof Deferred) {
                    Deferred childPromise = (Deferred) parm;
                    if (childPromise.children.isEmpty() && !children.isEmpty()) {
                        childPromise.children.addAll(children);
                    } else if (!childPromise.children.isEmpty()) {
                        childPromise.children.get(childPromise.children.size() - 1).children.addAll(children);
                    }
                    childPromise.runHandlers(null);
                } else {
                    Consumer<Deferred> childrenConsumer = consumerGenerator.apply(parm);
                    if (childrenConsumer != null) {
                        children.stream().forEach(childrenConsumer);
                    }
                }
            }
        } catch (Exception ex) {
            resolved = false;
            rejected = true;

            runHandlers(ex);
        }
    } else if (resolved || rejected) {
        Consumer<Deferred> childrenConsumer = consumerGenerator.apply(result);
        if (childrenConsumer != null) {
            children.stream().forEach(childrenConsumer);
        }
    }
}

From source file:org.zanata.util.CommonMarkRenderer.java

License:Open Source License

public String renderToHtmlUnsafe(String commonMark) {
    try {//from  w  w w . ja v a 2s  .  com
        Bindings bindings = threadBindings.get();
        JSObject mdRender = (JSObject) bindings.get("mdRender");
        return (String) mdRender.call(bindings, commonMark);
    } catch (Exception e) {
        throw propagate(e);
    }
}

From source file:wilton.support.nashorn.WiltonNashornGateway.java

License:Apache License

@Override
public String runScript(String callbackScriptJson) throws Exception {
    ScriptContext context = WiltonNashornEnvironment.threadScriptContext();
    JSObject jsObject = (JSObject) context.getAttribute("WILTON_run", ScriptContext.ENGINE_SCOPE);
    if (null != jsObject) {
        Object result = jsObject.call(null, callbackScriptJson);
        return result.toString();
    } else {/*from  w  w w .  j  av a 2  s  . co  m*/
        throw new WiltonException(
                "Cannot access 'WILTON_run' function in thread-local Nashorn scope," + " call data: ["
                        + callbackScriptJson + "], current thread: [" + Thread.currentThread().getName() + "]");
    }
}