| /* |
| * $Id: LuaBindings.java 38 2012-01-04 22:44:15Z andre@naef.com $ |
| * See LICENSE.txt for license terms. |
| */ |
| |
| package com.naef.jnlua.script; |
| |
| import javax.script.Bindings; |
| |
| import com.naef.jnlua.LuaState; |
| import com.naef.jnlua.util.AbstractTableMap; |
| |
| /** |
| * Lua bindings implementation conforming to JSR 223: Scripting for the Java |
| * Platform. |
| */ |
| class LuaBindings extends AbstractTableMap<String> implements Bindings { |
| // -- State |
| private LuaScriptEngine scriptEngine; |
| |
| // -- Construction |
| public LuaBindings(LuaScriptEngine scriptEngine) { |
| this.scriptEngine = scriptEngine; |
| } |
| |
| // -- AbstractTableMap methods |
| @Override |
| protected void checkKey(Object key) { |
| super.checkKey(key); |
| if (!(key instanceof String)) { |
| throw new IllegalArgumentException("key must be a string"); |
| } |
| if (((String) key).length() == 0) { |
| throw new IllegalArgumentException("key must not be empty"); |
| } |
| } |
| |
| @Override |
| protected boolean filterKeys() { |
| return true; |
| } |
| |
| @Override |
| protected boolean acceptKey(int index) { |
| return getLuaState().isString(index) |
| && getLuaState().toString(index).length() > 0; |
| } |
| |
| @Override |
| protected String convertKey(int index) { |
| return getLuaState().toString(index); |
| } |
| |
| // -- LuaProxy methods |
| @Override |
| public LuaState getLuaState() { |
| return scriptEngine.getLuaState(); |
| } |
| |
| @Override |
| public void pushValue() { |
| getLuaState().rawGet(LuaState.REGISTRYINDEX, LuaState.RIDX_GLOBALS); |
| } |
| |
| // -- Package-private methods |
| /** |
| * Returns the script engine. |
| */ |
| LuaScriptEngine getScriptEngine() { |
| return scriptEngine; |
| } |
| } |