src/macosx/classes/apple/applescript/AppleScriptEngineFactory.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2011, 2012, 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 --- 1,7 ---- /* ! * 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
*** 28,45 **** import java.security.*; import java.util.*; import javax.script.*; public class AppleScriptEngineFactory implements ScriptEngineFactory { ! private static native void initNative(); ! static { ! java.awt.Toolkit.getDefaultToolkit(); ! System.loadLibrary("AppleScriptEngine"); ! initNative(); ! TRACE("<static-init>"); ! } static void TRACE(final String str) { // System.out.println(AppleScriptEngineFactory.class.getName() + "." + str); } --- 28,40 ---- 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); }
*** 78,122 **** /** * Returns the full name of the ScriptEngine. * * @return full name of the ScriptEngine */ public String getEngineName() { TRACE("getEngineName()"); return ENGINE_NAME; } /** * Returns the version of the ScriptEngine. * * @return version of the ScriptEngine */ 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) */ 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) */ public String getLanguageVersion() { TRACE("getLanguageVersion()"); return AccessController.doPrivileged(new PrivilegedAction<String>() { public String run() { ! final AppleScriptEngine engine = new AppleScriptEngine(AppleScriptEngineFactory.this); return engine.getLanguageVersion(); } }); } --- 73,121 ---- /** * 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<String>() { public String run() { ! final AppleScriptEngine engine = getScriptEngine(); return engine.getLanguageVersion(); } }); }
*** 124,133 **** --- 123,133 ---- * 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<String> getExtensions() { TRACE("getExtensions()"); return Arrays.asList("scpt", "applescript", "app"); }
*** 135,144 **** --- 135,145 ---- * 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<String> getMimeTypes() { TRACE("getMimeTypes()"); return Arrays.asList("application/x-applescript", "text/plain", "text/applescript"); }
*** 146,155 **** --- 147,157 ---- * 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<String> getNames() { TRACE("getNames()"); return Arrays.asList("AppleScriptEngine", "AppleScript", "OSA"); }
*** 163,172 **** --- 165,175 ---- * 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");
*** 179,188 **** --- 182,192 ---- * 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); }
*** 191,212 **** * * @param key * the key to look up * @return the static preseeded value for the key in the ScriptEngine, if it exists, otherwise <code>null</code> */ public Object getParameter(final String key) { ! final AppleScriptEngine engine = new AppleScriptEngine(this); 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 */ public String getProgram(final String ... statements) { final StringBuilder program = new StringBuilder(); for (final String statement : statements) { program.append(statement + "\n"); } --- 195,218 ---- * * @param key * the key to look up * @return the static preseeded value for the key in the ScriptEngine, if it exists, otherwise <code>null</code> */ + @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"); }
*** 216,225 **** /** * Returns an instance of the ScriptEngine associated with this ScriptEngineFactory. * * @return new AppleScriptEngine with this factory as it's parent */ ! public ScriptEngine getScriptEngine() { AppleScriptEngine.checkSecurity(); return new AppleScriptEngine(this); } } --- 222,244 ---- /** * 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(); + } + } }