001 package org.mesopotamia; 002 003 import gnu.trove.TIntObjectHashMap; 004 005 import java.util.ArrayList; 006 import java.util.HashMap; 007 import java.util.List; 008 import java.util.Map; 009 010 import biz.hammurapi.util.Attributable; 011 import biz.hammurapi.util.CollectionVisitable; 012 import biz.hammurapi.util.VisitableBase; 013 import biz.hammurapi.util.Visitor; 014 015 /** 016 * Raw source unit 017 * @author Pavel Vlasov 018 * 019 */ 020 public class SyntaxTree extends VisitableBase implements Attributable { 021 private List<MesopotamiaNode> roots = new ArrayList<MesopotamiaNode>(); 022 private TIntObjectHashMap nodeMap = new TIntObjectHashMap(); 023 024 public List<MesopotamiaNode> getRoots() { 025 return roots; 026 } 027 028 public MesopotamiaNode findNode(int id) { 029 return (MesopotamiaNode) nodeMap.get(id); 030 } 031 032 public void mapNode(MesopotamiaNode node) { 033 nodeMap.put(node.getId(), node); 034 } 035 036 protected void acceptChildren(Visitor visitor) { 037 new CollectionVisitable(roots, false).accept(visitor); 038 } 039 040 private Map<Object, Object> attributes = new HashMap<Object, Object>(); 041 042 public Object getAttribute(Object key) { 043 return attributes.get(key); 044 } 045 046 public Object removeAttribute(Object key) { 047 return attributes.remove(key); 048 } 049 050 public void setAttribute(Object key, Object value) { 051 attributes.put(key, value); 052 } 053 }