static void nashornCompiledScriptReturningFunction(String code, String library)
      throws ScriptException, NoSuchMethodException {
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("nashorn");

    ScriptContext libraryContext = new SimpleScriptContext();
    ScriptContext privateContext = new SimpleScriptContext();

    ScriptObjectMirror errorFunc =
        (ScriptObjectMirror) ((Compilable) engine).compile(library).eval(libraryContext);
    ScriptObjectMirror func =
        (ScriptObjectMirror) ((Compilable) engine).compile(code).eval(privateContext);
    Object result = null;

    long total = 0;
    for (int i = 0; i < RUNS; ++i) {
      long start = System.nanoTime();
      for (int j = 0; j < BATCH; ++j) {
        result = func.call(null, "12345678", errorFunc);
      }
      long stop = System.nanoTime();
      System.out.println(
          "Run "
              + (i * BATCH + 1)
              + "-"
              + ((i + 1) * BATCH)
              + ": "
              + Math.round((stop - start) / BATCH / 1000)
              + " us");
      total += (stop - start);
    }

    System.out.println("Average run: " + Math.round(total / RUNS / BATCH / 1000) + " us");
    System.out.println("Data is " + result.toString());
  }
  @SuppressWarnings("unchecked")
  public CustomType customClassValue(Object jsNode) {

    try {
      List<UserClassData> classesList = new ArrayList<UserClassData>();
      Bindings bindings = this.getBindings();
      bindings.put("node", jsNode);
      bindings.put("env", this.wrapper);
      bindings.put("pkg", ModelRegistry.getInstance().rootPackage());
      ScriptObjectMirror svData =
          (ScriptObjectMirror) engine.eval("env.generateClasses(node.value(),pkg)", bindings);
      String jsonData = null;
      String valueName = null;
      if (svData != null) {
        jsonData = svData.get("data").toString();
        valueName = svData.get("valueName").toString();
        ScriptObjectMirror classes = (ScriptObjectMirror) svData.get("classes");
        for (Object obj : classes.values()) {
          ScriptObjectMirror cls = (ScriptObjectMirror) obj;
          String classContent = cls.get("content").toString();
          String qName = cls.get("qualifiedName").toString();
          String sName = cls.get("simpleName").toString();
          classesList.add(new UserClassData(qName, sName, classContent));
        }
      }
      String sName = classesList.get(0).getSimpleName();
      String qName = classesList.get(0).getQualifiedName();

      Class<? extends CustomType> customClass = loadCustomClassFromLibrary(sName);
      if (customClass == null) {
        setClassLoaderParams(classesList);
        Class<?> c = customClassLoader.loadClass(qName);
        if (c != null && CustomType.class.isAssignableFrom(c)) {
          customClass = (Class<? extends CustomType>) c;
        }
      }
      if (customClass != null) {
        CustomType result =
            unmarshalCustomType(jsonData, (Class<? extends CustomType>) customClass);
        result.setRAMLValueName(valueName);
        return result;
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    CustomType customType = new CustomType();
    customType.setFactory(this);
    return customType;
  }
    @Override
    public DataPoint next() {
      DataPoint dp = m_innerDataPointGroup.next();

      try {

        ScriptObjectMirror mirror =
            (ScriptObjectMirror)
                invocable.invokeFunction("fx", dp.getTimestamp(), dp.getDoubleValue());
        dp =
            m_dataPointFactory.createDataPoint(
                Long.valueOf(mirror.getMember("timestamp").toString()),
                (Double) mirror.getMember("value"));

      } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }

      return (dp);
    }
Example #4
0
  private static Object convertValueRecursive(
      final List<String> stack,
      final String currentLevel,
      final Object value,
      final boolean allowNulls) {

    stack.add(currentLevel);

    Object converted = value;

    if (value == null) {
      logger.debug("{} converting Null value", stack);
      if (!allowNulls) {
        throw new NullPointerException("Null value not allowed @ " + stack.toString());
      }
    } else if (ScriptObjectMirror.isUndefined(value)) {
      logger.debug("{} converting Undefined value", stack);
      if (!allowNulls) {
        throw new NullPointerException("Undefined value not allowed @ " + stack.toString());
      }
      converted = null;
    } else if (value instanceof Number) {
      logger.debug("{} converting Number", stack);
      final Number num = (Number) value;
      if (num.longValue() == num.doubleValue()) {
        converted = num.longValue();
      }
    } else if (value instanceof String) {
      logger.debug("{} converting String", stack);
    } else if (value instanceof Boolean) {
      logger.debug("{} converting Boolean", stack);
    } else if (value instanceof ScriptObjectMirror) {
      final ScriptObjectMirror som = (ScriptObjectMirror) value;
      if (som.isFunction()) {
        throw new UncheckedException("JavaScript functions cannot be converted");
      } else if (som.isArray()) {
        logger.debug("{} converting array", stack);
        final List<Object> list = new ArrayList<>();
        for (int i = 0; i < som.size(); ++i) {
          logger.debug("{} converting array entry {}", stack, i);
          list.add(convertValueRecursive(stack, "array entry " + i, som.getSlot(i), allowNulls));
        }
        converted = list;
      } else {
        logger.debug("{} converting map", stack);
        final Map<String, Object> map = new HashMap<>();
        for (final Entry<String, Object> entry : som.entrySet()) {
          logger.debug("{} converting map entry {}", stack, entry.getKey());
          map.put(
              entry.getKey(),
              convertValueRecursive(
                  stack, "map entry " + entry.getKey(), entry.getValue(), allowNulls));
        }
        converted = map;
      }
    } else {
      throw new UncheckedException("unrecognized type: " + value.getClass().getName());
    }

    if (converted == null) {
      logger.debug("{} converted value = null", stack);
    } else {
      logger.debug(
          "{} converted type = {}, value = {}",
          stack,
          converted.getClass().getName(),
          converted.toString());
    }

    stack.remove(stack.size() - 1);

    return converted;
  }
Example #5
0
 public static void fun4(ScriptObjectMirror person) {
   System.out.println("Full Name is: " + person.callMember("getFullName"));
 }
Example #6
0
 public static void fun3(ScriptObjectMirror mirror) {
   System.out.println(mirror.getClassName() + ": " + Arrays.toString(mirror.getOwnKeys(true)));
 }