|
|
@@ -1,131 +1,131 @@ |
|
|
|
/*
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
|
|
* this work for additional information regarding copyright ownership.
|
|
|
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
|
|
* (the "License"); you may not use this file except in compliance with
|
|
|
|
* the License. You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
package org.apache.tools.ant.util.optional;
|
|
|
|
|
|
|
|
import org.apache.tools.ant.BuildException;
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.Iterator;
|
|
|
|
import org.apache.tools.ant.util.ScriptRunnerBase;
|
|
|
|
import org.apache.tools.ant.util.ReflectUtil;
|
|
|
|
import org.apache.tools.ant.util.ReflectWrapper;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This class is used to run javax.script scripts
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public class JavaxScriptRunner extends ScriptRunnerBase {
|
|
|
|
private ReflectWrapper engine;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the name of the manager prefix.
|
|
|
|
* @return "javax"
|
|
|
|
*/
|
|
|
|
public String getManagerName() {
|
|
|
|
return "javax";
|
|
|
|
}
|
|
|
|
|
|
|
|
/** {@inheritDoc}. */
|
|
|
|
public boolean supportsLanguage() {
|
|
|
|
if (engine != null) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
checkLanguage();
|
|
|
|
ClassLoader origLoader = replaceContextLoader();
|
|
|
|
try {
|
|
|
|
return createEngine() != null;
|
|
|
|
} catch (Exception ex) {
|
|
|
|
return false;
|
|
|
|
} finally {
|
|
|
|
restoreContextLoader(origLoader);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Do the work to run the script.
|
|
|
|
*
|
|
|
|
* @param execName the name that will be passed to the
|
|
|
|
* scripting engine for this script execution.
|
|
|
|
*
|
|
|
|
* @exception BuildException if someting goes wrong exectuing the script.
|
|
|
|
*/
|
|
|
|
public void executeScript(String execName) throws BuildException {
|
|
|
|
evalulateScript(execName);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Do the work to eval the script.
|
|
|
|
*
|
|
|
|
* @param execName the name that will be passed to the
|
|
|
|
* scripting engine for this script execution.
|
|
|
|
* @return the result of the evalulation
|
|
|
|
* @exception BuildException if someting goes wrong exectuing the script.
|
|
|
|
*/
|
|
|
|
public Object evalulateScript(String execName) throws BuildException {
|
|
|
|
checkLanguage();
|
|
|
|
ClassLoader origLoader = replaceContextLoader();
|
|
|
|
try {
|
|
|
|
ReflectWrapper engine = createEngine();
|
|
|
|
if (engine == null) {
|
|
|
|
throw new BuildException(
|
|
|
|
"Unable to create javax script engine for "
|
|
|
|
+ getLanguage());
|
|
|
|
}
|
|
|
|
for (Iterator i = getBeans().keySet().iterator(); i.hasNext();) {
|
|
|
|
String key = (String) i.next();
|
|
|
|
Object value = getBeans().get(key);
|
|
|
|
engine.invoke(
|
|
|
|
"put", String.class, key, Object.class, value);
|
|
|
|
}
|
|
|
|
// execute the script
|
|
|
|
return engine.invoke("eval", String.class, getScript());
|
|
|
|
} catch (Exception be) {
|
|
|
|
Throwable t = be;
|
|
|
|
Throwable te = (Throwable) ReflectUtil.invoke(be, "getCause");
|
|
|
|
if (te != null) {
|
|
|
|
if (te instanceof BuildException) {
|
|
|
|
throw (BuildException) te;
|
|
|
|
} else {
|
|
|
|
t = te;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
throw new BuildException(t);
|
|
|
|
} finally {
|
|
|
|
restoreContextLoader(origLoader);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private ReflectWrapper createEngine() throws Exception {
|
|
|
|
if (engine != null) {
|
|
|
|
return engine;
|
|
|
|
}
|
|
|
|
ReflectWrapper manager = new ReflectWrapper(
|
|
|
|
getClass().getClassLoader(), "javax.script.ScriptEngineManager");
|
|
|
|
Object e = manager.invoke(
|
|
|
|
"getEngineByName", String.class, getLanguage());
|
|
|
|
if (e == null) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
ReflectWrapper ret = new ReflectWrapper(e);
|
|
|
|
if (getKeepEngine()) {
|
|
|
|
this.engine = ret;
|
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* |
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
|
|
|
* contributor license agreements. See the NOTICE file distributed with |
|
|
|
* this work for additional information regarding copyright ownership. |
|
|
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
|
|
|
* (the "License"); you may not use this file except in compliance with |
|
|
|
* the License. You may obtain a copy of the License at |
|
|
|
* |
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
|
|
* |
|
|
|
* Unless required by applicable law or agreed to in writing, software |
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
|
|
* See the License for the specific language governing permissions and |
|
|
|
* limitations under the License. |
|
|
|
* |
|
|
|
*/ |
|
|
|
package org.apache.tools.ant.util.optional; |
|
|
|
|
|
|
|
import org.apache.tools.ant.BuildException; |
|
|
|
|
|
|
|
|
|
|
|
import java.util.Iterator; |
|
|
|
import org.apache.tools.ant.util.ScriptRunnerBase; |
|
|
|
import org.apache.tools.ant.util.ReflectUtil; |
|
|
|
import org.apache.tools.ant.util.ReflectWrapper; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* This class is used to run javax.script scripts |
|
|
|
* |
|
|
|
*/ |
|
|
|
public class JavaxScriptRunner extends ScriptRunnerBase { |
|
|
|
private ReflectWrapper engine; |
|
|
|
|
|
|
|
/** |
|
|
|
* Get the name of the manager prefix. |
|
|
|
* @return "javax" |
|
|
|
*/ |
|
|
|
public String getManagerName() { |
|
|
|
return "javax"; |
|
|
|
} |
|
|
|
|
|
|
|
/** {@inheritDoc}. */ |
|
|
|
public boolean supportsLanguage() { |
|
|
|
if (engine != null) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
checkLanguage(); |
|
|
|
ClassLoader origLoader = replaceContextLoader(); |
|
|
|
try { |
|
|
|
return createEngine() != null; |
|
|
|
} catch (Exception ex) { |
|
|
|
return false; |
|
|
|
} finally { |
|
|
|
restoreContextLoader(origLoader); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Do the work to run the script. |
|
|
|
* |
|
|
|
* @param execName the name that will be passed to the |
|
|
|
* scripting engine for this script execution. |
|
|
|
* |
|
|
|
* @exception BuildException if someting goes wrong exectuing the script. |
|
|
|
*/ |
|
|
|
public void executeScript(String execName) throws BuildException { |
|
|
|
evalulateScript(execName); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Do the work to eval the script. |
|
|
|
* |
|
|
|
* @param execName the name that will be passed to the |
|
|
|
* scripting engine for this script execution. |
|
|
|
* @return the result of the evalulation |
|
|
|
* @exception BuildException if someting goes wrong exectuing the script. |
|
|
|
*/ |
|
|
|
public Object evalulateScript(String execName) throws BuildException { |
|
|
|
checkLanguage(); |
|
|
|
ClassLoader origLoader = replaceContextLoader(); |
|
|
|
try { |
|
|
|
ReflectWrapper engine = createEngine(); |
|
|
|
if (engine == null) { |
|
|
|
throw new BuildException( |
|
|
|
"Unable to create javax script engine for " |
|
|
|
+ getLanguage()); |
|
|
|
} |
|
|
|
for (Iterator i = getBeans().keySet().iterator(); i.hasNext();) { |
|
|
|
String key = (String) i.next(); |
|
|
|
Object value = getBeans().get(key); |
|
|
|
engine.invoke( |
|
|
|
"put", String.class, key, Object.class, value); |
|
|
|
} |
|
|
|
// execute the script |
|
|
|
return engine.invoke("eval", String.class, getScript()); |
|
|
|
} catch (Exception be) { |
|
|
|
Throwable t = be; |
|
|
|
Throwable te = (Throwable) ReflectUtil.invoke(be, "getCause"); |
|
|
|
if (te != null) { |
|
|
|
if (te instanceof BuildException) { |
|
|
|
throw (BuildException) te; |
|
|
|
} else { |
|
|
|
t = te; |
|
|
|
} |
|
|
|
} |
|
|
|
throw new BuildException(t); |
|
|
|
} finally { |
|
|
|
restoreContextLoader(origLoader); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private ReflectWrapper createEngine() throws Exception { |
|
|
|
if (engine != null) { |
|
|
|
return engine; |
|
|
|
} |
|
|
|
ReflectWrapper manager = new ReflectWrapper( |
|
|
|
getClass().getClassLoader(), "javax.script.ScriptEngineManager"); |
|
|
|
Object e = manager.invoke( |
|
|
|
"getEngineByName", String.class, getLanguage()); |
|
|
|
if (e == null) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
ReflectWrapper ret = new ReflectWrapper(e); |
|
|
|
if (getKeepEngine()) { |
|
|
|
this.engine = ret; |
|
|
|
} |
|
|
|
return ret; |
|
|
|
} |
|
|
|
} |