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();
+ }
+ }
}