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

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

Introduction

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

Prototype

public static Object wrapAsJSONCompatible(final Object obj, final Object homeGlobal) 

Source Link

Document

Make a script object mirror on given object if needed.

Usage

From source file:org.eclairjs.nashorn.Utils.java

License:Apache License

public static Object jsToJava(Object o) {
    if (o != null && !(o instanceof Undefined)) {
        logger.debug("jsToJava" + o.getClass().getName());
    } else {/*from w  w w.  j  a v a 2 s . c om*/
        return o;
    }
    if (o instanceof jdk.nashorn.internal.objects.NativeArray) {
        Object array[] = ((NativeArray) o).asObjectArray();
        ArrayList al = new ArrayList();
        for (int i = 0; i < array.length; i++) {
            al.add(jsToJava(array[i]));
        }
        return al.toArray();
    }
    if (o.getClass().isPrimitive())
        return o;

    String packageName = o.getClass().getCanonicalName();

    switch (packageName) {
    case "java.lang.String":
    case "java.lang.Integer":
    case "java.lang.Float":
    case "java.lang.Double":
    case "java.lang.Boolean":
    case "java.lang.Long":
    case "org.json.simple.JSONObject":
    case "java.lang.Object[]":
    case "java.lang.String[]":
    case "scala.Tuple2":
    case "scala.Tuple3":
    case "scala.Tuple4":
        return o;
    }
    if (packageName.startsWith("org.apache.spark"))
        return o;

    if (o instanceof WrappedClass)
        return ((WrappedClass) o).getJavaObject();

    if (o instanceof ScriptObjectMirror) {
        ScriptObjectMirror m = (ScriptObjectMirror) o;
        if (m.hasMember("getJavaObject")) {
            return m.callMember("getJavaObject");
        }
        if (m.isArray()) {
            try {
                if (m.containsKey("0")) {
                    Object v = m.get("0");
                    if (v instanceof Double) {
                        double[] doubleArray = (double[]) ScriptUtils.convert(m, double[].class);
                        return doubleArray;
                    } else if (v instanceof Integer) {
                        int[] intArray = (int[]) ScriptUtils.convert(m, int[].class);
                        return intArray;
                    } else {
                        Object[] objectArray = (Object[]) ScriptUtils.convert(m, Object[].class);
                        return objectArray;
                    }
                }
            } catch (ClassCastException e) {
                /*
                If the array contains ScriptObjectMirror the above conversions throws exception
                so we have to convert the contents of the array as well.
                 */
                ArrayList list = new ArrayList();
                for (Object item : m.values()) {
                    list.add(jsToJava(item));
                }
                Object x = list.toArray();
                return x;
            }

        } else {
            //               throw new RuntimeException("js2java IMPLEMENT"+o);
            Object obj = ScriptObjectMirror.wrapAsJSONCompatible(o, null);
            String j = JSONValue.toJSONString(obj);
            return JSONValue.parse(j);
        }
    } else if (o instanceof jdk.nashorn.internal.runtime.ScriptObject) {
        ScriptObjectMirror jsObj = ScriptUtils.wrap((jdk.nashorn.internal.runtime.ScriptObject) o);
        if (jsObj.hasMember("getJavaObject")) {
            return jsObj.callMember("getJavaObject");
        }
    } else if (o instanceof java.util.ArrayList) {

        ArrayList list = (ArrayList) o;
        int size = list.size();
        for (int i = 0; i < size; i++)
            list.set(i, jsToJava(list.get(i)));
        return list;
    } else if (o instanceof StaticClass) {
        return o;
    }
    logger.warn("js2java NOT HANDLED " + packageName);
    return o; // Just return the Java object, it might user created like java.net.Socket
    //new RuntimeException().printStackTrace();
    //throw new RuntimeException("js2java NOT HANDLED "+packageName);

}

From source file:org.eclairjs.nashorn.Utils.java

License:Apache License

private static Object wrapObject(Object o) {
    Logger logger = Logger.getLogger(Utils.class);
    if (o instanceof String || o instanceof Number) {
        return o;
    }//from   w ww .j  a  v a  2 s . c  o m
    logger.debug("wrapAsJSONCompatible " + o);
    return ScriptObjectMirror.wrapAsJSONCompatible(o, null);
}

From source file:org.eclairjs.nashorn.Utils.java

License:Apache License

public static String toJSON(ScriptObjectMirror som) {
    som = (ScriptObjectMirror) ScriptObjectMirror.wrapAsJSONCompatible(som, null);
    Map hashmap = new HashMap<>();
    for (Map.Entry<String, Object> entry : som.entrySet()) {
        String key = entry.getKey().toString();
        Object value = entry.getValue();
        boolean ignore = false;
        if (value != null) {
            String clsName = value.getClass().getName().toString();
            switch (clsName) {
            case "java.lang.String":
            case "java.lang.Boolean":
            case "java.lang.Long":
            case "java.lang.Float":
            case "java.lang.Double":
                ignore = false;//  w  w  w .j a  v a 2  s.  com
                break;
            default:
                ignore = true;

            }
        }
        if (!ignore)
            hashmap.put(key, value);
    }
    String j = JSONValue.toJSONString(hashmap);
    return j;
}