package jsr223.nativeshell.cmd; import jsr223.nativeshell.NativeShellRunner; import jsr223.nativeshell.NativeShellScriptEngine; import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; import java.util.HashMap; import java.util.List; import java.util.Map; import static java.util.Arrays.asList; public class CmdScriptEngineFactory implements ScriptEngineFactory { private static final String NAME = "cmd"; private static final String ENGINE = "Cmd interpreter"; private static final String ENGINE_VERSION = new NativeShellRunner(new Cmd()).getInstalledVersion(); private static final String LANGUAGE = "Cmd"; private static final String LANGUAGE_VERSION = new NativeShellRunner(new Cmd()).getMajorVersion(); private static final Map<String, Object> parameters = new HashMap<String, Object>(); static { parameters.put(ScriptEngine.NAME, NAME); parameters.put(ScriptEngine.ENGINE, ENGINE); parameters.put(ScriptEngine.ENGINE_VERSION, ENGINE_VERSION); parameters.put(ScriptEngine.LANGUAGE, LANGUAGE); parameters.put(ScriptEngine.LANGUAGE_VERSION, LANGUAGE_VERSION); } @Override public String getEngineName() { return NAME; } @Override public String getEngineVersion() { return ENGINE_VERSION; } @Override public List<String> getExtensions() { return asList("bat"); } @Override public List<String> getMimeTypes() { return asList("application/x-cmd", "application/x-bat", "application/bat", "application/x-msdos-program", "application/textedit", "application/octet-stream"); } @Override public List<String> getNames() { return asList("cmd", "bat", "Cmd", "Bat"); } @Override public String getLanguageName() { return LANGUAGE; } @Override public String getLanguageVersion() { return LANGUAGE_VERSION; } @Override public Object getParameter(String key) { return parameters.get(key); } @Override public String getMethodCallSyntax(String obj, String m, String... args) { String methodCall = m + " "; for (String arg : args) { methodCall += arg + " "; } return methodCall; } @Override public String getOutputStatement(String toDisplay) { return "echo " + toDisplay; } @Override public String getProgram(String... statements) { String program = ""; for (String statement : statements) { program += statement + "\n"; } return program; } @Override public ScriptEngine getScriptEngine() { return new NativeShellScriptEngine(new Cmd()); } }