Mercurial Hosting > luan
view core/src/luan/LuanPropertyTable.java @ 368:2af805677fc4
fix LuanPropertyTable.asList()
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 17 Apr 2015 05:16:07 -0600 |
parents | 1a464e090538 |
children | 9321a33b9b1c |
line wrap: on
line source
package luan; import java.util.Set; import java.util.Map; import java.util.AbstractMap; import java.util.Iterator; import java.util.List; import java.util.ArrayList; class LuanPropertyTable extends LuanTableImpl { @Override public LuanTableImpl shallowClone() { return new LuanPropertyTable(); } private Object fixValue(Object obj) { return obj instanceof LuanProperty ? ((LuanProperty)obj).get() : obj; } @Override String repr(Set<AbstractLuanTable> set,Object obj) { return super.repr(set,fixValue(obj)); } @Override public Object get(Object key) { return fixValue(super.get(key)); } @Override public void put(Object key,Object val) { Object v = super.get(key); if( v instanceof LuanProperty ) { LuanProperty lp = (LuanProperty)v; if( lp.set(val) ) return; } super.put(key,val); } @Override public Iterator<Map.Entry<Object,Object>> iterator() { final Iterator<Map.Entry<Object,Object>> i = super.iterator(); return new Iterator<Map.Entry<Object,Object>>() { public boolean hasNext() { return i.hasNext(); } public Map.Entry<Object,Object> next() { Map.Entry<Object,Object> entry = i.next(); Object v = entry.getValue(); if( v instanceof LuanProperty ) { LuanProperty lp = (LuanProperty)v; return new AbstractMap.SimpleEntry<Object,Object>(entry.getKey(),lp.get()); } return entry; } public void remove() { i.remove(); } }; } @Override public List<Object> asList() { List<Object> list = super.asList(); if( list.isEmpty() ) return list; List<Object> rtn = new ArrayList<Object>(); for( Object obj : list ) { rtn.add( fixValue(obj) ); } return rtn; } }