Ejemplo n.º 1
0
  private synchronized ScriptEngineState getEngineByName(String name, boolean reset)
      throws SoarException {
    ScriptEngineState state = engines.get(name);
    if (state != null && reset) {
      state.dispose();
      engines.remove(name);
      state = null;
    }

    if (state == null) {
      final ScriptEngine engine = getEngineManager().getEngineByName(name);
      if (engine == null) {
        throw new SoarException("Unsupported script engine '" + name + "'");
      }

      final ScriptEngineFactory f = engine.getFactory();
      logger.info(
          String.format(
              "Loaded '%s' script engine for %s: %s version %s, %s version %s",
              name,
              context,
              f.getEngineName(),
              f.getEngineVersion(),
              f.getLanguageName(),
              f.getLanguageVersion()));

      engines.put(name, state = new ScriptEngineState(context, name, engine));
    }
    return state;
  }
Ejemplo n.º 2
0
 private synchronized String disposeEngine(String name) throws SoarException {
   final ScriptEngineState state = engines.remove(name);
   if (state != null) {
     state.dispose();
     return "Disposed '" + name + "'";
   } else {
     return "No engine '" + name + "'";
   }
 }
Ejemplo n.º 3
0
  /* (non-Javadoc)
   * @see org.jsoar.util.commands.SoarCommand#execute(java.lang.String[])
   */
  @Override
  public String execute(SoarCommandContext commandContext, String[] args) throws SoarException {
    if (args.length == 1) {
      return engines.toString();
    }

    // Strip off script and treat the engine type as the command name...
    // i.e. "script javascript ..." becomes "javascript ..."
    final List<String> engineArgs = globalOptions.process(Arrays.asList(args));
    final String engineName = engineArgs.get(0);
    if (globalOptions.has(GlobalOptions.dispose)) {
      return disposeEngine(engineName);
    }

    final List<String> trailing = engineOptions.process(engineArgs);
    final ScriptEngineState state =
        getEngineByName(engineName, globalOptions.has(GlobalOptions.reset));
    if (!trailing.isEmpty()) {
      final Object result = state.eval(Joiner.on(' ').join(trailing));
      return result != null ? result.toString() : "";
    } else {
      return state.toString();
    }
  }