package hdgl.db.query.visitor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import hdgl.db.query.expression.AsteriskQuantifier;
import hdgl.db.query.expression.Concat;
import hdgl.db.query.expression.Condition;
import hdgl.db.query.expression.Edge;
import hdgl.db.query.expression.Entity;
import hdgl.db.query.expression.Order;
import hdgl.db.query.expression.Parallel;
import hdgl.db.query.expression.PlusQuantifier;
import hdgl.db.query.expression.Query;
import hdgl.db.query.expression.QuestionQuantifier;
import hdgl.db.query.expression.Vertex;
import hdgl.db.query.visitor.Visitor._void;
public class IdentifyEntitiesVisitor implements Visitor<_void, _void> {
ArrayList<Entity> ids = new ArrayList<Entity>();
public Map<Integer, Entity> getIdMap(){
Map<Integer, Entity> res = new HashMap<Integer, Entity>();
for (int i = 0; i < ids.size(); i++) {
res.put(i, ids.get(i));
}
return res;
}
public Map<Entity, Integer> getEntityMap(){
Map<Entity, Integer> res = new HashMap<Entity, Integer>();
for (int i = 0; i < ids.size(); i++) {
res.put(ids.get(i), i);
}
return res;
}
@Override
public _void visitQuery(Query query, _void... arguments) {
query.getExpression().accept(this);
ids.add(query.getEOF());
return null;
}
@Override
public _void visitVertex(Vertex vertex, _void... arguments) {
ids.add(vertex);
return null;
}
@Override
public _void visitEdge(Edge edge, _void... arguments) {
ids.add(edge);
return null;
}
@Override
public _void visitAsteriskQuantifier(AsteriskQuantifier quantifier,
_void... arguments) {
quantifier.getQuantified().accept(this);
return null;
}
@Override
public _void visitQuestionQuantifier(QuestionQuantifier quantifier,
_void... arguments) {
quantifier.getQuantified().accept(this);
return null;
}
@Override
public _void visitPlusQuantifier(PlusQuantifier quantifier,
_void... arguments) {
quantifier.getQuantified().accept(this);
return null;
}
@Override
public _void visitConcat(Concat concat, _void... arguments) {
concat.getFirst().accept(this);
concat.getSecond().accept(this);
return null;
}
@Override
public _void visitCondition(Condition cond, _void... arguments) {
return null;
}
@Override
public _void visitOrder(Order order, _void... arguments) {
return null;
}
@Override
public _void visitParallel(Parallel parallel, _void... arguments) {
parallel.getFirst().accept(this);
parallel.getSecond().accept(this);
return null;
}
}