Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
**** BEGIN LICENSE BLOCK ***** Version: EPL 1.0/GPL 2.0/LGPL 2.1 The contents of this file are subject to the Eclipse Public License Version 1.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.eclipse.org/legal/epl-v10.html Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. Copyright (C) 2009-2012 Yoko Harada <yokolet@gmail.com> Alternatively, the contents of this file may be used under the terms of either of the GNU General Public License Version 2 or later (the "GPL"), or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), in which case the provisions of the GPL or the LGPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of either the GPL or the LGPL, and not to allow others to use your version of this file under the terms of the EPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL or the LGPL. If you do not delete the provisions above, a recipient may use your version of this file under the terms of any one of the EPL, the GPL or the LGPL. **** END LICENSE BLOCK *****
 
 package org.jruby.embed.jsr223;
 
 import java.io.Reader;
Implementation of javax.script.ScriptEngine/Compilable/Invocable.

Author(s):
Yoko Harada <yokolet@gmail.com>
 
 public class JRubyEngine implements CompilableInvocableScriptEngine {
 
     private final ScriptingContainer container;
     private JRubyEngineFactory factory;
     private ScriptContext context;
 
     JRubyEngine(ScriptingContainer containerJRubyEngineFactory factory) {
         this. = container;
         this. = factory;
         this. = new JRubyContext(container);
     }
 
     public CompiledScript compile(String scriptthrows ScriptException {
         if (script == null) {
             throw new NullPointerException("script is null");
         }
         return new JRubyCompiledScript(thisscript);
     }
 
     public CompiledScript compile(Reader readerthrows ScriptException {
         if (reader == null) {
             throw new NullPointerException("reader is null");
         }
         return new JRubyCompiledScript(thisreader);
     }
 
     public Object eval(String scriptScriptContext contextthrows ScriptException {
         if (script == null || context == null) {
             throw new NullPointerException("either script or context is null");
         }
         .setScriptFilename(Utils.getFilename(context));
         try {
             if (Utils.isClearVariablesOn(context)) {
                 .clear();
             }
             Utils.preEval(context);
             EmbedEvalUnit unit = .parse(script, Utils.getLineNumber(context));
             IRubyObject ret = unit.run();
             return JavaEmbedUtils.rubyToJava(ret);
         } catch (Exception e) {
             throw wrapException(e);
         } finally {
             Utils.postEval(context);
             boolean termination = Utils.isTerminationOn(context);
             if (termination) {
                 .terminate();
             }
        }
    }
    private ScriptException wrapException(Exception e) {
        return new ScriptException(e);
    }
    public Object eval(Reader readerScriptContext contextthrows ScriptException {
        if (reader == null || context == null) {
            throw new NullPointerException("either reader or context is null");
        }
        String filename = Utils.getFilename(context);
        try {
            if (Utils.isClearVariablesOn(context)) {
                .clear();
            }
            Utils.preEval(context);
            EmbedEvalUnit unit = .parse(readerfilename, Utils.getLineNumber(context));
            IRubyObject ret = unit.run();
            return JavaEmbedUtils.rubyToJava(ret);
        } catch (Exception e) {
            throw wrapException(e);
        } finally {
            Utils.postEval(context);
            boolean termination = Utils.isTerminationOn(context);
            if (termination) {
                .terminate();
            }
        }
    }
    public Object eval(String scriptBindings bindingsthrows ScriptException {
        ScriptContext context = getScriptContext(bindings);
        return eval(scriptcontext);
    }
    public Object eval(Reader readerBindings bindingsthrows ScriptException {
        ScriptContext context = getScriptContext(bindings);
        return eval(readercontext);
    }
    public Object eval(String scriptthrows ScriptException {
        return eval(script);
    }
    public Object eval(Reader readerthrows ScriptException {
        return eval(reader);
    }
    protected ScriptContext getScriptContext(Bindings bindings) {
        if (bindings == null) {
            throw new NullPointerException("null bindings in engine scope");
        }
        ScriptContext newContext = new SimpleScriptContext();
        newContext.setBindings(bindings.);
        Bindings global = getBindings(.);
        if (global != null) {
            newContext.setBindings(global.);
        }
        newContext.setReader(.getReader());
        newContext.setWriter(.getWriter());
        newContext.setErrorWriter(.getErrorWriter());
        return newContext;
    }
    public Object get(String key) {
        return .getAttribute(key.);
    }
    public void put(String keyObject value) {
        .getBindings(.).put(keyvalue);
    }
    public Bindings getBindings(int scope) {
        return .getBindings(scope);
    }
    public void setBindings(Bindings bindingsint scope) {
        .setBindings(bindingsscope);
    }
    public Bindings createBindings() {
        return new SimpleBindings();
    }
    public ScriptContext getContext() {
        return ;
    }
    public void setContext(ScriptContext ctx) {
        if (ctx == null) {
            throw new NullPointerException("context is null");
        }
         = ctx;
    }
    public ScriptEngineFactory getFactory() {
        return ;
    }
    public Object invokeMethod(Object receiverString methodObject... args)
            throws ScriptExceptionNoSuchMethodException {
        if (method == null) {
            throw new NullPointerException("method is null");
        }
        if (receiver == null) {
            throw new NullPointerException("receiver is null");
        }
        try {
            Utils.preEval();
            if (args == null || args.length == 0) {
                return .callMethod(receivermethodObject.class);
            }
            return .callMethod(receivermethodargsObject.class);
        } catch (Exception e) {
            if (e.getCause().getMessage().contains("undefined method")) {
                throw wrapMethodException(e);
            }
            throw wrapException(e);
        } finally {
            Utils.postEval();
        }
    }
    }
    public Object invokeFunction(String methodObject... args)
            throws ScriptExceptionNoSuchMethodException {
        if (method == null) {
            throw new NullPointerException("method is null");
        }
        try {
            Utils.preEval();
            if (args == null || args.length == 0) {
                return .callMethod(.getProvider().getRuntime().getTopSelf(), methodObject.class);
            }
            return .callMethod(.getProvider().getRuntime().getTopSelf(), methodargsObject.class);
        } catch (Exception e) {
            if (e.getCause().getMessage().contains("undefined method")) {
                throw wrapMethodException(e);
            }
            throw wrapException(e);
        } finally {
            Utils.postEval();
        }
    }
    public <T> T getInterface(Class<T> returnType) {
        return getInterface(nullreturnType);
    }
    public <T> T getInterface(Object receiverClass<T> returnType) {
        return .getInstance(receiverreturnType);
    }
New to GrepCode? Check out our FAQ X