package udg.useDefGraph; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import misc.Pair; import neo4j.dbProviders.ReadWriteDBProvider; import udg.ASTProvider; public class ReadWriteDbASTProvider extends ASTProvider { ReadWriteDBProvider dbProvider = new ReadWriteDBProvider(); long nodeId; boolean childrenLookupDone = false; ArrayList<Long> children = new ArrayList<Long>(); public long getNodeId() { return nodeId; } public void setNodeId(long aNodeId) { nodeId = aNodeId; } @Override public String getTypeAsString() { return dbProvider.getNodeType(nodeId); } @Override public ASTProvider getChild(int i) { if (!childrenLookupDone) lookupChildren(); ReadWriteDbASTProvider retval = new ReadWriteDbASTProvider(); retval.setNodeId(children.get(i)); return retval; } private void lookupChildren() { List<Pair<Long, Integer>> pairs = dbProvider.getASTChildren(nodeId); Iterator<Pair<Long, Integer>> it = pairs.iterator(); while (it.hasNext()) { Pair<Long, Integer> next = it.next(); Long childId = next.getL(); children.add(childId); } childrenLookupDone = true; } @Override public int getChildCount() { if (!childrenLookupDone) lookupChildren(); return children.size(); } @Override public String getEscapedCodeStr() { return dbProvider.getNodeCode(nodeId); } @Override public int getChildNumber() { return dbProvider.getChildNumber(nodeId); } @Override public String getOperatorCode() { return dbProvider.getOperatorCode(nodeId); } }