package hdgl.db.query.visitor; 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.Order; import hdgl.db.query.expression.Parallel; import hdgl.db.query.expression.PlusQuantifier; import hdgl.db.query.expression.Quantifier; import hdgl.db.query.expression.Query; import hdgl.db.query.expression.QuestionQuantifier; import hdgl.db.query.expression.Expression; import hdgl.db.query.expression.Vertex; public class CloneVisitor implements Visitor<Expression, Object> { @Override public Expression visitVertex(Vertex vertex, Object... args) { Vertex nVertex = new Vertex(); Condition[] conditions = vertex.getConditions(); Condition[] nConditions; if(conditions!=null){ nConditions = new Condition[conditions.length]; for(int i=0; i<conditions.length; i++){ nConditions[i] = (Condition) conditions[i].accept(this); } }else{ nConditions = null; } nVertex.setType(vertex.getType()); nVertex.setConditions(nConditions); if(vertex.getOrder()!=null){ nVertex.setOrder((Order) vertex.getOrder().accept(this)); } return nVertex; } @Override public Expression visitEdge(Edge edge, Object... args) { Edge nEdge = new Edge(); Condition[] conditions = edge.getConditions(); Condition[] nConditions; if(conditions!=null){ nConditions = new Condition[conditions.length]; for(int i=0; i<conditions.length; i++){ nConditions[i] = (Condition) conditions[i].accept(this); } }else{ nConditions = null; } nEdge.setType(edge.getType()); nEdge.setConditions(nConditions); if(edge.getOrder()!=null){ nEdge.setOrder((Order) edge.getOrder().accept(this)); } return nEdge; } @Override public Expression visitAsteriskQuantifier(AsteriskQuantifier quantifier, Object... args) { Quantifier n = new AsteriskQuantifier(); n.setQuantified(quantifier.getQuantified().accept(this)); return n; } @Override public Expression visitQuestionQuantifier(QuestionQuantifier quantifier, Object... args) { Quantifier n = new QuestionQuantifier(); n.setQuantified(quantifier.getQuantified().accept(this)); return n; } @Override public Expression visitPlusQuantifier(PlusQuantifier quantifier, Object... args) { Quantifier n = new PlusQuantifier(); n.setQuantified(quantifier.getQuantified().accept(this)); return n; } @Override public Expression visitConcat(Concat concat, Object... args) { Concat cat=new Concat(); cat.setFirst(concat.getFirst().accept(this)); cat.setSecond(concat.getSecond().accept(this)); return cat; } @Override public Expression visitCondition(Condition cond, Object... args) { Condition condition = new Condition(); condition.setLabel(cond.getLabel()); condition.setOp(cond.getOp()); condition.setValue(cond.getValue()); return condition; } @Override public Expression visitOrder(Order order, Object... args) { Order nOrder = new Order(); nOrder.setLabel(order.getLabel()); nOrder.setAscending(order.isAscending()); return nOrder; } @Override public Expression visitParallel(Parallel parallel, Object... args) { Parallel nParallel=new Parallel(); nParallel.setFirst(parallel.getFirst().accept(this)); nParallel.setSecond(parallel.getSecond().accept(this)); return nParallel; } @Override public Expression visitQuery(Query query, Object... args) { return new Query(query.getExpression().accept(this)); } }