package org.activityinfo.core.shared.criteria; import com.google.common.collect.Lists; import org.activityinfo.core.shared.Projection; import org.activityinfo.model.form.FormInstance; import javax.annotation.Nonnull; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Set; /** * A {@code Criteria} that is satisfied only if all of its * children are satisfied */ public class CriteriaIntersection implements Criteria, Iterable<Criteria> { private final List<Criteria> members; public CriteriaIntersection(List<Criteria> members) { this.members = members; } public CriteriaIntersection(Criteria... members) { this.members = Lists.newArrayList(members); } @Override public boolean apply(@Nonnull FormInstance input) { for(Criteria criteria : members) { if(!criteria.apply(input)) { return false; } } return true; } @Override public boolean apply(@Nonnull Projection input) { for(Criteria criteria : members) { if(!criteria.apply(input)) { return false; } } return true; } @Override public void accept(CriteriaVisitor visitor) { visitor.visitIntersection(this); } @Override public Iterator<Criteria> iterator() { return members.iterator(); } public Collection<Criteria> getElements() { return members; } }