--- old/src/jdk.deploy.osx/macosx/classes/apple/applescript/AppleScriptEngine.java 2015-12-03 20:02:14.394077400 +0530 +++ /dev/null 2015-12-03 20:02:14.000000000 +0530 @@ -1,389 +0,0 @@ -/* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package apple.applescript; - -import java.io.*; -import java.nio.file.Files; -import java.util.*; -import java.util.Map.Entry; - -import javax.script.*; - -/** - * AppleScriptEngine implements JSR 223 for AppleScript on Mac OS X - */ -public class AppleScriptEngine implements ScriptEngine { - private static native void initNative(); - - private static native long createContextFrom(final Object object); - private static native Object createObjectFrom(final long context); - private static native void disposeContext(final long context); - - private static native long evalScript(final String script, long contextptr); - private static native long evalScriptFromURL(final String filename, long contextptr); - - static { - System.loadLibrary("AppleScriptEngine"); - initNative(); - TRACE(""); - } - - static void checkSecurity() { - final SecurityManager securityManager = System.getSecurityManager(); - if (securityManager != null) securityManager.checkExec("/usr/bin/osascript"); - } - - static void TRACE(final String str) { -// System.out.println(AppleScriptEngine.class.getName() + "." + str); - } - - /** - * Accessor for the ScriptEngine's long name variable - * @return the long name of the ScriptEngine - */ - protected static String getEngine() { - TRACE("getEngine()"); - return AppleScriptEngineFactory.ENGINE_NAME; - } - - /** - * Accessor for the ScriptEngine's version - * @return the version of the ScriptEngine - */ - protected static String getEngineVersion() { - TRACE("getEngineVersion()"); - return AppleScriptEngineFactory.ENGINE_VERSION; - } - - /** - * Accessor for the ScriptEngine's short name - * @return the short name of the ScriptEngine - */ - protected static String getName() { - TRACE("getName()"); - return AppleScriptEngineFactory.ENGINE_SHORT_NAME; - } - - /** - * Accessor for the ScriptEngine's supported language name - * @return the language the ScriptEngine supports - */ - protected static String getLanguage() { - TRACE("getLanguage()"); - return AppleScriptEngineFactory.LANGUAGE; - } - - /** - * The no argument constructor sets up the object with default members, - * a factory for the engine and a fresh context. - * @see com.apple.applescript.AppleScriptEngine#init() - */ - public AppleScriptEngine() { - TRACE("()"); - // set our parent factory to be a new factory - factory = AppleScriptEngineFactory.getFactory(); - - // set up our noarg bindings - setContext(new SimpleScriptContext()); - put(ARGV, ""); - - init(); - } - - /** - * All AppleScriptEngines share the same ScriptEngineFactory - */ - private final ScriptEngineFactory factory; - - /** - * The local context for the AppleScriptEngine - */ - private ScriptContext context; - - /** - * The constructor taking a factory as an argument sets the parent factory for - * this engine to be the passed factory, and sets up the engine with a fresh context - * @param factory - * @see com.apple.applescript.AppleScriptEngine#init() - */ - public AppleScriptEngine(final ScriptEngineFactory factory) { - // inherit the factory passed to us - this.factory = factory; - - // set up our noarg bindings - setContext(new SimpleScriptContext()); - put(ARGV, ""); - - init(); - } - - /** - * The initializer populates the local context with some useful predefined variables: - * - */ - private void init() { - TRACE("init()"); - // set up our context -/* TODO -- name of current executable? bad java documentation at: - * http://docs.oracle.com/javase/6/docs/api/javax/script/ScriptEngine.html#FILENAME */ - put(ScriptEngine.FILENAME, ""); - put(ScriptEngine.ENGINE, getEngine()); - put(ScriptEngine.ENGINE_VERSION, getEngineVersion()); - put(ScriptEngine.NAME, getName()); - put(ScriptEngine.LANGUAGE, getLanguage()); - put(ScriptEngine.LANGUAGE_VERSION, getLanguageVersion()); - - // TODO -- for now, err on the side of caution and say that we are NOT thread-safe - put("THREADING", null); - } - - /** - * Uses the AppleScriptEngine to get the local AppleScript version - * @return the version of AppleScript running on the system - */ - protected String getLanguageVersion() { - TRACE("AppleScriptEngine.getLanguageVersion()"); - try { - final Object result = eval("get the version of AppleScript"); - if (result instanceof String) return (String)result; - } catch (final ScriptException e) { e.printStackTrace(); } - return "unknown"; - } - - /** - * Implementation required by ScriptEngine parent
- * Returns the factory parent of this AppleScriptEngine - */ - public ScriptEngineFactory getFactory() { - return factory; - } - - /** - * Implementation required by ScriptEngine parent
- * Return the engine's context - * @return this ScriptEngine's context - */ - public ScriptContext getContext() { - return context; - } - - /** - * Implementation required by ScriptEngine parent
- * Set a new context for the engine - * @param context the new context to install in the engine - */ - public void setContext(final ScriptContext context) { - this.context = context; - } - - /** - * Implementation required by ScriptEngine parent
- * Create and return a new set of simple bindings. - * @return a new and empty set of bindings - */ - public Bindings createBindings() { - return new SimpleBindings(); - } - - /** - * Implementation required by ScriptEngine parent
- * Return the engines bindings for the context indicated by the argument. - * @param scope contextual scope to return. - * @return the bindings in the engine for the scope indicated by the parameter - */ - public Bindings getBindings(final int scope) { - return context.getBindings(scope); - } - - /** - * Implementation required by ScriptEngine parent
- * Sets the bindings for the indicated scope - * @param bindings a set of bindings to assign to the engine - * @param scope the scope that the passed bindings should be assigned to - */ - public void setBindings(final Bindings bindings, final int scope) { - context.setBindings(bindings, scope); - } - - /** - * Implementation required by ScriptEngine parent
- * Insert a key and value into the engine's bindings (scope: engine) - * @param key the key of the pair - * @param value the value of the pair - */ - public void put(final String key, final Object value) { - getBindings(ScriptContext.ENGINE_SCOPE).put(key, value); - } - - /** - * Implementation required by ScriptEngine parent
- * Get a value from the engine's bindings using a key (scope: engine) - * @param key the key of the pair - * @return the value of the pair - */ - public Object get(final String key) { - return getBindings(ScriptContext.ENGINE_SCOPE).get(key); - } - - /** - * Implementation required by ScriptEngine parent
- * Passes the Reader argument, as well as the engine's context to a lower evaluation function.
- * Prefers FileReader or BufferedReader wrapping FileReader as argument. - * @param reader a Reader to AppleScript source or compiled AppleScript - * @return an Object corresponding to the return value of the script - * @see com.apple.applescript.AppleScriptEngine#eval(Reader, ScriptContext) - */ - public Object eval(final Reader reader) throws ScriptException { - return eval(reader, getContext()); - } - - /** - * Implementation required by ScriptEngine parent
- * Uses the passed bindings as the context for executing the passed script. - * @param reader a stream to AppleScript source or compiled AppleScript - * @param bindings a Bindings object representing the contexts to execute inside - * @return the return value of the script - * @see com.apple.applescript.AppleScriptEngine#eval(Reader, ScriptContext) - */ - public Object eval(final Reader reader, final Bindings bindings) throws ScriptException { - final Bindings tmp = getContext().getBindings(ScriptContext.ENGINE_SCOPE); - getContext().setBindings(bindings, ScriptContext.ENGINE_SCOPE); - final Object retval = eval(reader); - getContext().setBindings(tmp, ScriptContext.ENGINE_SCOPE); - return retval; - } - - /** - * Implementation required by ScriptEngine parent
- * This function can execute either AppleScript source or compiled AppleScript and functions by writing the - * contents of the Reader to a temporary file and then executing it with the engine's context. - * @param reader - * @param scriptContext - * @return an Object corresponding to the return value of the script - */ - public Object eval(final Reader reader, final ScriptContext context) throws ScriptException { - checkSecurity(); - - // write our passed reader to a temporary file - File tmpfile; - FileWriter tmpwrite; - try { - tmpfile = Files.createTempFile("AppleScriptEngine.", ".scpt").toFile(); - tmpwrite = new FileWriter(tmpfile); - - // read in our input and write directly to tmpfile - /* TODO -- this may or may not be avoidable for certain Readers, - * if a filename can be grabbed, it would be faster to get that and - * use the underlying file than writing a temp file. - */ - int data; - while ((data = reader.read()) != -1) { - tmpwrite.write(data); - } - tmpwrite.close(); - - // set up our context business - final long contextptr = scriptContextToNSDictionary(context); - try { - final long retCtx = evalScriptFromURL("file://" + tmpfile.getCanonicalPath(), contextptr); - Object retVal = (retCtx == 0) ? null : createObjectFrom(retCtx); - disposeContext(retCtx); - return retVal; - } finally { - disposeContext(contextptr); - tmpfile.delete(); - } - } catch (final IOException e) { - throw new ScriptException(e); - } - } - - /** - * Implementation required by ScriptEngine parent
- * Evaluate an AppleScript script passed as a source string. Using the engine's built in context. - * @param script the string to execute. - * @return an Object representing the return value of the script - * @see com.apple.applescript.AppleScriptEngine#eval(String, ScriptContext) - */ - public Object eval(final String script) throws ScriptException { - return eval(script, getContext()); - } - - /** - * Implementation required by ScriptEngine parent
- * Evaluate an AppleScript script passed as a source string with a custom ScriptContext. - * @param script the AppleScript source to compile and execute. - * @param scriptContext the context to execute the script under - * @see com.apple.applescript.AppleScriptEngine#eval(String, ScriptContext) - */ - public Object eval(final String script, final Bindings bindings) throws ScriptException { - final Bindings tmp = getContext().getBindings(ScriptContext.ENGINE_SCOPE); - getContext().setBindings(bindings, ScriptContext.ENGINE_SCOPE); - - final Object retval = eval(script); - getContext().setBindings(tmp, ScriptContext.ENGINE_SCOPE); - - return retval; - } - - /** - * Implementation required by ScriptEngine parent - * @param script - * @param scriptContext - */ - public Object eval(final String script, final ScriptContext context) throws ScriptException { - checkSecurity(); - final long ctxPtr = scriptContextToNSDictionary(context); - try { - final long retCtx = evalScript(script, ctxPtr); - Object retVal = (retCtx == 0) ? null : createObjectFrom(retCtx); - disposeContext(retCtx); - return retVal; - } finally { - disposeContext(ctxPtr); - } - } - - /** - * Converts a ScriptContext into an NSDictionary - * @param context ScriptContext for the engine - * @return a pointer to an NSDictionary - */ - private long scriptContextToNSDictionary(final ScriptContext context) throws ScriptException { - final Map contextAsMap = new HashMap(); - for (final Entry e : context.getBindings(ScriptContext.ENGINE_SCOPE).entrySet()) { - contextAsMap.put(e.getKey().replaceAll("\\.", "_"), e.getValue()); - } - return createContextFrom(contextAsMap); - } -} --- old/src/jdk.deploy.osx/macosx/classes/apple/applescript/AppleScriptEngineFactory.java 2015-12-03 20:02:15.724079200 +0530 +++ /dev/null 2015-12-03 20:02:15.000000000 +0530 @@ -1,244 +0,0 @@ -/* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package apple.applescript; - -import java.security.*; -import java.util.*; -import javax.script.*; - -public class AppleScriptEngineFactory implements ScriptEngineFactory { - private static volatile boolean initialized = false; - - private static native void initNative(); - - static void TRACE(final String str) { -// System.out.println(AppleScriptEngineFactory.class.getName() + "." + str); - } - - /** - * The name of this ScriptEngine - */ - static final String ENGINE_NAME = "AppleScriptEngine"; - - /** - * The version of this ScriptEngine - */ - static final String ENGINE_VERSION = "1.1"; - - /** - * The name of this ScriptEngine (yes, again) - */ - static final String ENGINE_SHORT_NAME = ENGINE_NAME; - - /** - * The name of the language supported by this ScriptEngine - */ - static final String LANGUAGE = "AppleScript"; - - static ScriptEngineFactory getFactory() { - TRACE("getFactory()"); - return new AppleScriptEngineFactory(); - } - - /** - * Initialize a new AppleScriptEngineFactory, replete with a member AppleScriptEngine - */ - public AppleScriptEngineFactory() { - TRACE("()"); - } - - /** - * Returns the full name of the ScriptEngine. - * - * @return full name of the ScriptEngine - */ - @Override - public String getEngineName() { - TRACE("getEngineName()"); - return ENGINE_NAME; - } - - /** - * Returns the version of the ScriptEngine. - * - * @return version of the ScriptEngine - */ - @Override - public String getEngineVersion() { - TRACE("getEngineVersion()"); - return ENGINE_VERSION; - } - - /** - * Returns the name of the scripting language supported by this ScriptEngine. - * - * @return name of the language supported by the ScriptEngine(Factory) - */ - @Override - public String getLanguageName() { - TRACE("getLanguageName()"); - return LANGUAGE; - } - - /** - * Returns the version of the scripting language supported by this ScriptEngine(Factory). - * - * @return language version supported by the ScriptEngine(Factory) - */ - @Override - public String getLanguageVersion() { - TRACE("getLanguageVersion()"); - return AccessController.doPrivileged(new PrivilegedAction() { - public String run() { - final AppleScriptEngine engine = getScriptEngine(); - return engine.getLanguageVersion(); - } - }); - } - - /** - * Returns an immutable list of filename extensions, which generally identify - * scripts written in the language supported by this ScriptEngine. - * - * @return ArrayList of file extensions AppleScript associates with - */ - @Override - public List getExtensions() { - TRACE("getExtensions()"); - return Arrays.asList("scpt", "applescript", "app"); - } - - /** - * Returns an immutable list of mimetypes, associated with scripts - * that can be executed by the engine. - * - * @return ArrayList of mimetypes that AppleScript associates with - */ - @Override - public List getMimeTypes() { - TRACE("getMimeTypes()"); - return Arrays.asList("application/x-applescript", "text/plain", "text/applescript"); - } - - /** - * Returns an immutable list of short names for the ScriptEngine, - * which may be used to identify the ScriptEngine by the ScriptEngineManager. - * - * @return - */ - @Override - public List getNames() { - TRACE("getNames()"); - return Arrays.asList("AppleScriptEngine", "AppleScript", "OSA"); - } - - /** - * Returns a String which can be used to invoke a method of a Java - * object using the syntax of the supported scripting language. - * - * @param obj - * unused -- AppleScript does not support objects - * @param m - * function name - * @param args - * arguments to the function - * @return the AppleScript string calling the method - */ - @Override - public String getMethodCallSyntax(final String obj, final String fname, final String ... args) { -// StringBuilder builder = new StringBuilder(); -// builder.append("my " + fname + "("); -// // TODO -- do -// builder.append(")\n"); -// return builder.toString(); - - return null; - } - - /** - * Returns a String that can be used as a statement to display the specified String using the syntax of the supported scripting language. - * - * @param toDisplay - * @return - */ - @Override - public String getOutputStatement(final String toDisplay) { - // TODO -- this might even be good enough? XD - return getMethodCallSyntax(null, "print", toDisplay); - } - - /** - * Returns the value of an attribute whose meaning may be implementation-specific. - * - * @param key - * the key to look up - * @return the static preseeded value for the key in the ScriptEngine, if it exists, otherwise null - */ - @Override - public Object getParameter(final String key) { - final AppleScriptEngine engine = getScriptEngine(); - if (!engine.getBindings(ScriptContext.ENGINE_SCOPE).containsKey(key)) return null; - return engine.getBindings(ScriptContext.ENGINE_SCOPE).get(key); - } - - /** - * Returns A valid scripting language executable program with given statements. - * - * @param statements - * @return - */ - @Override - public String getProgram(final String ... statements) { - final StringBuilder program = new StringBuilder(); - for (final String statement : statements) { - program.append(statement + "\n"); - } - return program.toString(); - } - - /** - * Returns an instance of the ScriptEngine associated with this ScriptEngineFactory. - * - * @return new AppleScriptEngine with this factory as it's parent - */ - @Override - public AppleScriptEngine getScriptEngine() { - AppleScriptEngine.checkSecurity(); - ensureInitialized(); - - return new AppleScriptEngine(this); - } - - private static synchronized void ensureInitialized() { - if (!initialized) { - initialized = true; - - java.awt.Toolkit.getDefaultToolkit(); - System.loadLibrary("AppleScriptEngine"); - initNative(); - } - } -}