You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by pe...@apache.org on 2006/12/03 23:50:48 UTC

svn commit: r481962 - /ant/core/trunk/src/main/org/apache/tools/ant/util/optional/JavaxScriptRunner.java

Author: peterreilly
Date: Sun Dec  3 14:50:48 2006
New Revision: 481962

URL: http://svn.apache.org/viewvc?view=rev&rev=481962
Log:
add implementaion for javax script runner

Added:
    ant/core/trunk/src/main/org/apache/tools/ant/util/optional/JavaxScriptRunner.java

Added: ant/core/trunk/src/main/org/apache/tools/ant/util/optional/JavaxScriptRunner.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/util/optional/JavaxScriptRunner.java?view=auto&rev=481962
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/util/optional/JavaxScriptRunner.java (added)
+++ ant/core/trunk/src/main/org/apache/tools/ant/util/optional/JavaxScriptRunner.java Sun Dec  3 14:50:48 2006
@@ -0,0 +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;
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org