Example usage for jdk.nashorn.api.scripting ScriptObjectMirror isUndefined

List of usage examples for jdk.nashorn.api.scripting ScriptObjectMirror isUndefined

Introduction

In this page you can find the example usage for jdk.nashorn.api.scripting ScriptObjectMirror isUndefined.

Prototype

public static boolean isUndefined(final Object obj) 

Source Link

Document

Utility to check if given object is ECMAScript undefined value

Usage

From source file:com.baasbox.service.scripting.js.NashornMapper.java

License:Apache License

private JsonNode convertMirror(ScriptObjectMirror mirror) throws ScriptEvalException {
    if (mirror == null) {

        return NullNode.getInstance();
    } else if (ScriptObjectMirror.isUndefined(mirror)) {
        return MissingNode.getInstance();
    } else if (mirror.isFunction()) {
        return MissingNode.getInstance();
    } else if (mirror.isArray()) {
        Collection<Object> values = mirror.values();
        ArrayNode node = Json.mapper().createArrayNode();
        for (Object o : values) {
            JsonNode e = convertDeepJson(o);
            if (e.isMissingNode()) {
                continue;
            }/*w  w w  . j  a v  a 2 s  .c  o  m*/
            node.add(e);
        }
        return node;
    } else if (mirror.hasMember("toJSON")) {
        Object toJSON = mirror.callMember("toJSON");
        return convertDeepJson(toJSON);
    } else {
        ObjectNode obj = Json.mapper().createObjectNode();
        Set<Map.Entry<String, Object>> entries = mirror.entrySet();
        for (Map.Entry<String, Object> e : entries) {
            Object obv = e.getValue();
            JsonNode jsonNode = convertDeepJson(obv);
            if (jsonNode.isMissingNode()) {
                continue;
            }
            obj.put(e.getKey(), jsonNode);
        }
        return obj;
    }
}

From source file:com.bytelightning.opensource.pokerface.ScriptResponseProducer.java

License:Open Source License

/**
 * {@inheritDoc}/*from   w w  w  . j a v  a2s. c o m*/
 * This method actually does all the work of this class by invoking the endpoint, and processing it's result.
 */
@SuppressWarnings("unchecked")
@Override
public HttpResponse generateResponse() {
    Object result;
    ScriptObjectMirror som;
    // First call the endpoint to obtain a result which will be either an HttpResponse (in which case our work is done), or a ScriptObjectMirror with properties to create an HttpResponse ourselves.
    try {
        result = endpoint.callMember("generateResponse", request, context);
        if (result instanceof HttpResponse) {
            this.setResponse((HttpResponse) result);
            return response;
        }
        som = (ScriptObjectMirror) result;
    } catch (Exception ex) {
        setException(ex);
        return response;
    }
    Object obj;
    // Interpret the http statusCode
    int statusCode;
    obj = som.getMember("statusCode");
    if ((obj == null) || ScriptObjectMirror.isUndefined(obj))
        statusCode = HttpStatus.SC_OK;
    else if (obj instanceof Number)
        statusCode = ((Number) obj).intValue();
    else if (obj instanceof ScriptObjectMirror)
        statusCode = (int) (((ScriptObjectMirror) obj).toNumber() + Double.MIN_VALUE);
    else
        statusCode = Integer.parseInt(obj.toString());
    // Interpret the http reasonPhrase
    String reasonPhrase;
    obj = som.getMember("reasonPhrase");
    if ((obj == null) || ScriptObjectMirror.isUndefined(obj))
        reasonPhrase = EnglishReasonPhraseCatalog.INSTANCE.getReason(statusCode, Locale.US);
    else
        reasonPhrase = obj.toString();
    // Create a basic response
    BasicHttpResponse response = new BasicHttpResponse(request.getProtocolVersion(), statusCode, reasonPhrase);
    // Interpret the headers supplied by the endpoint.
    obj = som.getMember("headers");
    if ((obj != null) && (!ScriptObjectMirror.isUndefined(obj))) {
        List<ScriptObjectMirror> headers;
        if (obj instanceof List<?>)
            headers = (List<ScriptObjectMirror>) obj;
        else {
            headers = new ArrayList<ScriptObjectMirror>();
            if ((obj instanceof ScriptObjectMirror) && ((ScriptObjectMirror) obj).isArray()) {
                for (Object sobj : ((ScriptObjectMirror) obj).values())
                    headers.add((ScriptObjectMirror) sobj);
            } else
                Logger.error("The endpoint at " + request.getRequestLine().getUri()
                        + " returned an illegal headers list [class=" + obj.getClass().getName() + "]");
        }
        for (ScriptObjectMirror hdr : headers) {
            for (String key : hdr.keySet()) {
                Object value = hdr.getMember(key);
                response.addHeader(key, ConvertHeaderToString(value));
            }
        }
    }
    // Interpret the content type of the response data.
    ContentType ct = ContentType.DEFAULT_TEXT;
    if (response.getFirstHeader("Content-Type") != null)
        ct = ContentType.parse(response.getFirstHeader("content-type").getValue());
    obj = som.getMember("mimeType");
    if ((obj != null) && (!ScriptObjectMirror.isUndefined(obj)))
        ct = ContentType.create(obj.toString(), ct.getCharset());
    obj = som.getMember("charset");
    if ((obj != null) && (!ScriptObjectMirror.isUndefined(obj)))
        ct = ContentType.create(ct.getMimeType(), obj.toString());
    obj = som.getMember("completion");
    if ((obj != null) && (!ScriptObjectMirror.isUndefined(obj)))
        if (((ScriptObjectMirror) obj).isFunction())
            completionCallback = (ScriptObjectMirror) obj;

    // Create an HttpEntity to represent the content.
    obj = som.getMember("content");
    if ((obj != null) && (!ScriptObjectMirror.isUndefined(obj))) {
        HttpEntity entity;
        if ((obj instanceof ScriptObjectMirror) && ((ScriptObjectMirror) obj).isFunction())
            entity = new NJavascriptFunctionEntity(request.getRequestLine().getUri(), endpoint,
                    (ScriptObjectMirror) obj, ct, response, context);
        else {
            entity = Utils.WrapObjWithHttpEntity(obj, ct);
            if (entity == null)
                Logger.error("The endpoint at " + request.getRequestLine().getUri()
                        + " returned an unknown content type [class=" + obj.getClass().getName() + "]");
        }
        if (entity != null)
            response.setEntity(entity);
    } else // Normally setting the HttpEntity into the response would set the content-type, but we will have to specify it ourselves in this case.
        response.setHeader("Content-Type", ct.toString());

    // Let our superclass know what the endpoint has provided.
    this.setResponse(response);

    String id = (String) context.getAttribute("pokerface.txId");
    Logger.info("[client<-endpoint] " + id + " " + response.getStatusLine());
    return response;
}

From source file:de.axelfaust.alfresco.nashorn.repo.utils.SpecialModuleHandler.java

License:Open Source License

/**
 * {@inheritDoc}//from  w  w w. ja  v  a  2  s.  c o  m
 */
@Override
public Object getMember(final String name) {
    LOGGER.debug("Handling getMember {} on {}", name,
            this.delegate.isFunction() ? this.delegate.getMember("name")
                    : new NativeLogMessageArgumentWrapper(this.delegate));

    // can't handle callerProvided for getMember
    final AtomicReference<Object> resultRef = new AtomicReference<>();
    if (this.callerTagged) {
        LOGGER.debug("Tagging callerUrl {}", this.callerUrl);
        this.withTaggedCallerFn.withTaggedCaller(() -> {
            resultRef.set(this.delegate.getMember(name));
        }, this.callerUrl);
    } else {
        resultRef.set(this.delegate.getMember(name));
    }

    Object result = resultRef.get();

    LOGGER.debug("getMember {} yielded {}", name,
            result instanceof JSObject
                    ? (((JSObject) result).isFunction() ? ((JSObject) result).getMember("name")
                            : new NativeLogMessageArgumentWrapper((JSObject) result))
                    : result);

    if (result instanceof JSObject) {
        final JSObject scriptResult = (JSObject) result;
        if (scriptResult.isFunction()
                || (!scriptResult.isArray() && !ScriptObjectMirror.isUndefined(scriptResult))) {
            LOGGER.debug("Wrapping function result {} of getMember in special module handler",
                    scriptResult.isFunction() ? scriptResult.getMember("name")
                            : new NativeLogMessageArgumentWrapper(scriptResult));
            result = new SpecialModuleHandler(scriptResult, this.callerProvided, this.callerTagged,
                    this.callerUrl, this.withTaggedCallerFn);
            if (scriptResult.isFunction()) {
                ((SpecialModuleHandler) result).setThis(this.delegate, this);
            }
        }
    }
    return result;
}

From source file:de.axelfaust.alfresco.nashorn.repo.utils.SpecialModuleHandler.java

License:Open Source License

/**
 * {@inheritDoc}/*from  www .  j ava  2s. co  m*/
 */
@Override
public Object getSlot(final int slot) {
    LOGGER.debug("Handling getSlot {} on {}", slot, this.delegate.isFunction() ? this.delegate.getMember("name")
            : new NativeLogMessageArgumentWrapper(this.delegate));

    // can't handle callerProvided for getSlot
    final AtomicReference<Object> resultRef = new AtomicReference<>();
    if (this.callerTagged) {
        LOGGER.debug("Tagging callerUrl {}", this.callerUrl);
        this.withTaggedCallerFn.withTaggedCaller(() -> {
            resultRef.set(this.delegate.getSlot(slot));
        }, this.callerUrl);
    } else {
        resultRef.set(this.delegate.getSlot(slot));
    }

    Object result = resultRef.get();

    LOGGER.debug("getSlot {} yielded {}", slot,
            result instanceof JSObject
                    ? (((JSObject) result).isFunction() ? ((JSObject) result).getMember("name")
                            : new NativeLogMessageArgumentWrapper((JSObject) result))
                    : result);

    if (result instanceof JSObject) {
        final JSObject scriptResult = (JSObject) result;
        if (scriptResult.isFunction()
                || (!scriptResult.isArray() && !ScriptObjectMirror.isUndefined(scriptResult))) {
            LOGGER.debug("Wrapping function result {} of getSlot in special module handler",
                    scriptResult.isFunction() ? scriptResult.getMember("name")
                            : new NativeLogMessageArgumentWrapper(scriptResult));
            result = new SpecialModuleHandler(scriptResult, this.callerProvided, this.callerTagged,
                    this.callerUrl, this.withTaggedCallerFn);
            if (scriptResult.isFunction()) {
                ((SpecialModuleHandler) result).setThis(this.delegate, this);
            }
        }
    }
    return result;
}

From source file:de.axelfaust.alfresco.nashorn.repo.utils.SpecialModuleHandler.java

License:Open Source License

/**
 * {@inheritDoc}//w  ww.ja v a2s .  co m
 */
@Override
public Collection<Object> values() {
    LOGGER.debug("Handling values on {}", this.delegate.isFunction() ? this.delegate.getMember("name")
            : new NativeLogMessageArgumentWrapper(this.delegate));

    // can't handle callerProvided for values
    final AtomicReference<Collection<Object>> resultRef = new AtomicReference<>();
    if (this.callerTagged) {
        LOGGER.debug("Tagging callerUrl {}", this.callerUrl);
        this.withTaggedCallerFn.withTaggedCaller(() -> {
            resultRef.set(this.delegate.values());
        }, this.callerUrl);
    } else {
        resultRef.set(this.delegate.values());
    }

    final Collection<Object> result = resultRef.get();

    LOGGER.debug("values yielded {}", result);

    final List<Object> resultList = new ArrayList<>();
    for (final Object resultElement : result) {
        if (resultElement instanceof JSObject) {
            final JSObject scriptResult = (JSObject) resultElement;
            if (scriptResult.isFunction()
                    || (!scriptResult.isArray() && !ScriptObjectMirror.isUndefined(scriptResult))) {
                LOGGER.debug("Wrapping function result {} of values in special module handler",
                        scriptResult.isFunction() ? scriptResult.getMember("name")
                                : new NativeLogMessageArgumentWrapper(scriptResult));
                final Object resultElementMod = new SpecialModuleHandler(scriptResult, this.callerProvided,
                        this.callerTagged, this.callerUrl, this.withTaggedCallerFn);
                if (scriptResult.isFunction()) {
                    ((SpecialModuleHandler) resultElementMod).setThis(this.delegate, this);
                }
                resultList.add(resultElementMod);
            } else {
                resultList.add(resultElement);
            }
        } else {
            resultList.add(resultElement);
        }
    }

    return resultList;
}

From source file:org.eclipse.wst.jsdt.internal.esprima.DOMASTConverter.java

License:Open Source License

private void setRange(final ScriptObjectMirror object, final ASTNode node) {
    Object o = object.getMember("range"); //$NON-NLS-1$
    if (ScriptObjectMirror.isUndefined(o))
        return;//from   w w  w.jav a 2s .c o m
    ScriptObjectMirror range = (ScriptObjectMirror) o;
    Number x = (Number) range.getSlot(0);
    Number y = (Number) range.getSlot(1);
    final int startPosition = x.intValue();
    final int length = y.intValue() - x.intValue();
    node.setSourceRange(startPosition, length);

    switch (node.getNodeType()) {
    case ASTNode.FUNCTION_DECLARATION_STATEMENT:
        FunctionDeclarationStatement fd = (FunctionDeclarationStatement) node;
        if (fd.getDeclaration().getJavadoc() == null)
            fd.getDeclaration().setSourceRange(startPosition, length);
        else {
            final int jsdocStart = fd.getDeclaration().getJavadoc().getStartPosition();
            fd.getDeclaration().setSourceRange(jsdocStart, length + startPosition - jsdocStart);
        }
        break;
    case ASTNode.FUNCTION_EXPRESSION:
        FunctionExpression fe = (FunctionExpression) node;
        if (fe.getMethod().getJavadoc() == null)
            fe.getMethod().setSourceRange(startPosition, length);
        else {
            final int jsdocStart = fe.getMethod().getJavadoc().getStartPosition();
            fe.getMethod().setSourceRange(jsdocStart, length + startPosition - jsdocStart);
        }
        break;
    case ASTNode.FUNCTION_DECLARATION:
        FunctionDeclaration fdec = (FunctionDeclaration) node;
        if (fdec.getJavadoc() != null) {
            final int jsdocStart = fdec.getJavadoc().getStartPosition();
            fdec.setSourceRange(jsdocStart, length + startPosition - jsdocStart);
        }
        break;
    case ASTNode.VARIABLE_DECLARATION_STATEMENT:
        VariableDeclarationStatement vds = (VariableDeclarationStatement) node;
        if (vds.getJavadoc() != null) {
            final int jsdocStart = vds.getJavadoc().getStartPosition();
            vds.setSourceRange(jsdocStart, length + startPosition - jsdocStart);
        }
        break;
    }
}

From source file:org.eclipse.wst.jsdt.internal.esprima.DOMASTConverter.java

License:Open Source License

private JSdoc buildJSDoc(ScriptObjectMirror object) {
    if (!object.hasMember("leadingComments")) //$NON-NLS-1$
        return null;
    Object commentObj = object.getMember("leadingComments"); //$NON-NLS-1$
    if (ScriptObjectMirror.isUndefined(commentObj))
        return null;
    ScriptObjectMirror comments = (ScriptObjectMirror) commentObj;
    Object[] arrayElements = comments.entrySet().toArray();
    for (int i = 0; i < arrayElements.length; ++i) {
        Map.Entry<String, Object> entry = (java.util.Map.Entry<String, Object>) arrayElements[i];
        Comment comment = EsprimaParser.createComment((ScriptObjectMirror) entry.getValue(), this.ast);
        if (comment.isDocComment())
            return (JSdoc) comment;
    }/*from   ww  w. j  a  v a2 s .  c o m*/
    return null;
}

From source file:org.siphon.common.js.JsTypeUtil.java

License:Open Source License

public static boolean isNull(Object object) {
    if (object == null)
        return true;
    if (object instanceof ScriptObjectMirror) {
        ScriptObjectMirror m = (ScriptObjectMirror) object;
        if (m.isInstanceOf(NativeString.class) && m.isEmpty())
            return true; //  isEmpty()  true)
        if (ScriptObjectMirror.isUndefined(m)) { //  null?
            // undefined
            return true;
        }//w  ww. j av a 2 s. c  o m
    }

    if (object instanceof String && ((String) object).length() == 0) // ?
        // sobj
        // 
        // NativeString
        // 
        // SOM
        return true;

    if (object instanceof Undefined) {
        return true;
    }
    return false;
}

From source file:org.wso2.carbon.uuf.renderablecreator.hbs.internal.serialize.ScriptObjectMirrorSerializer.java

License:Open Source License

/**
 * {@inheritDoc}/*  w  w w .j a v a  2  s .  c  o  m*/
 */
@Override
public JsonElement serialize(ScriptObjectMirror jsObj, Type type, JsonSerializationContext context) {
    if ((jsObj == null) || ScriptObjectMirror.isUndefined(jsObj) || jsObj.isFunction()) {
        return JsonNull.INSTANCE;
    }

    if (jsObj.isArray()) {
        JsonArray jsonArray = new JsonArray();
        for (Object item : jsObj.values()) {
            jsonArray.add(serializeFurther(context.serialize(item), context));
        }
        return jsonArray;
    }
    if (jsObj.isEmpty()) {
        return new JsonObject();
    }

    JsonObject jsonObject = new JsonObject();
    for (String key : jsObj.getOwnKeys(false)) {
        jsonObject.add(key, serializeFurther(jsObj.getMember(key), context));
    }
    return jsonObject;
}

From source file:org.wso2.carbon.uuf.renderablecreator.hbs.internal.serialize.ScriptObjectMirrorSerializer.java

License:Open Source License

private JsonElement serializeFurther(Object src, JsonSerializationContext context) {
    return ScriptObjectMirror.isUndefined(src) ? JsonNull.INSTANCE : context.serialize(src);
}