Mercurial Hosting > luan
view lucene/src/luan/modules/lucene/FieldTable.java @ 416:91af5337b9ae
add LuanMeta.__tostring()
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 30 Apr 2015 06:28:25 -0600 |
parents | ce8e19567911 |
children | df95199ca4c0 |
line wrap: on
line source
package luan.modules.lucene; import java.util.Map; import java.util.HashMap; import java.util.concurrent.ConcurrentHashMap; import java.util.Iterator; import luan.LuanState; import luan.LuanTable; import luan.LuanMeta; class FieldTable extends LuanMeta { final Map<String,String> map = new ConcurrentHashMap<String,String>(); final Map<String,String> reverseMap = new ConcurrentHashMap<String,String>(); FieldTable() { put("type","type index"); put("id","id index"); } @Override public boolean canNewindex() { return true; } @Override public void __newindex(LuanState luan,LuanTable tbl,Object key,Object value) { put(key,value); } private void put(Object key,Object value) { if( !(key instanceof String) ) throw new UnsupportedOperationException("key must be string"); String name = (String)key; if( value==null ) { // delete reverseMap.remove(map.remove(name)); return; } if( !(value instanceof String) ) throw new UnsupportedOperationException("value must be string"); String field = (String)value; String oldField = map.put(name,field); if( oldField != null ) reverseMap.remove(oldField); String oldName = reverseMap.put(field,name); if( oldName != null ) { reverseMap.put(field,oldName); map.remove(name); throw new IllegalArgumentException("field '"+oldName+"' is already assigned to '"+field+"'"); } } @Override public Object __index(LuanState luan,LuanTable tbl,Object key) { // @Override public final Object get(Object key) { return map.get(key); } @Override public final Iterator keys(LuanTable tbl) { return map.keySet().iterator(); } @Override protected String type(LuanTable tbl) { return "lucene-field"; } }