package uk.ac.imperial.lsds.streamsql.predicates; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import uk.ac.imperial.lsds.seep.comm.serialization.DataTuple; import uk.ac.imperial.lsds.streamsql.visitors.PredicateVisitor; public class ANDPredicate implements IPredicate { List<IPredicate> predicates = new ArrayList<IPredicate>(); public ANDPredicate(IPredicate pred1, IPredicate pred2, IPredicate... predicates) { this.predicates.add(pred1); this.predicates.add(pred2); this.predicates.addAll(Arrays.asList(predicates)); } @Override public boolean satisfied(DataTuple tuple) { for (IPredicate pred : predicates) if (!pred.satisfied(tuple)) return false; return true; } @Override public boolean satisfied(DataTuple firstTuple, DataTuple secondTuple) { for (IPredicate pred : predicates) if (!pred.satisfied(firstTuple,secondTuple)) return false; return true; } @Override public String toString() { final StringBuilder sb = new StringBuilder(); for (int i = 0; i < this.predicates.size(); i++) { sb.append("(").append(predicates.get(i)).append(")"); if (i != predicates.size() - 1) sb.append(" AND "); } return sb.toString(); } @Override public void accept(PredicateVisitor pv) { pv.visit(this); } @Override public List<IPredicate> getInnerPredicates() { return predicates; } }