/* * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: Redistributions of source code * must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of * conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. Neither the name of the Sun Microsystems nor the names of * is contributors may be used to endorse or promote products derived from this software * without specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * GroovyScriptEngineFactory.java * @author Mike Grogan * @author A. Sundararajan */ package org.jbpm.pvm.internal.script; import javax.script.*; import java.util.*; public class GroovyScriptEngineFactory implements ScriptEngineFactory { private static String VERSION = "1.5.6"; public String getEngineName() { return "groovy"; } public String getEngineVersion() { return org.codehaus.groovy.runtime.InvokerHelper.getVersion(); } public String getLanguageName() { return "groovy"; } public String getLanguageVersion() { return VERSION; } public List getExtensions() { return extensions; } public List getMimeTypes() { return mimeTypes; } public List getNames() { return names; } public Object getParameter(String key) { if (ScriptEngine.NAME.equals(key)) { return "Groovy"; } else if (ScriptEngine.ENGINE.equals(key)) { return "Groovy Script Engine"; } else if (ScriptEngine.ENGINE_VERSION.equals(key)) { return org.codehaus.groovy.runtime.InvokerHelper.getVersion(); } else if (ScriptEngine.LANGUAGE.equals(key)) { return "Groovy"; } else if (ScriptEngine.LANGUAGE_VERSION.equals(key)) { return VERSION; } else if ("THREADING".equals(key)) { return "MULTITHREADED"; } else { throw new IllegalArgumentException("Invalid key"); } } public ScriptEngine getScriptEngine() { return new GroovyScriptEngine(); } public String getMethodCallSyntax(String obj, String method, String... args) { String ret = obj + "." + method + "("; int len = args.length; if (len == 0) { ret += ")"; return ret; } for (int i = 0; i < len; i++) { ret += args[i]; if (i != len - 1) { ret += ","; } else { ret += ")"; } } return ret; } public String getOutputStatement(String toDisplay) { StringBuilder buf = new StringBuilder(); buf.append("println(\""); int len = toDisplay.length(); for (int i = 0; i < len; i++) { char ch = toDisplay.charAt(i); switch (ch) { case '"': buf.append("\\\""); break; case '\\': buf.append("\\\\"); break; default: buf.append(ch); break; } } buf.append("\")"); return buf.toString(); } public String getProgram(String... statements) { StringBuilder ret = new StringBuilder(); int len = statements.length; for (int i = 0; i < len; i++) { ret.append(statements[i]); ret.append('\n'); } return ret.toString(); } private static List names; private static List extensions; private static List mimeTypes; static { names = new ArrayList(1); names.add("groovy"); names = Collections.unmodifiableList(names); extensions = names; mimeTypes = new ArrayList(0); mimeTypes = Collections.unmodifiableList(mimeTypes); } }