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.List;
public class CriteriaUnion implements Criteria {
private final List<Criteria> elements;
public CriteriaUnion(Iterable<? extends Criteria> elements) {
this.elements = Lists.newArrayList(elements);
}
@Override
public void accept(CriteriaVisitor visitor) {
visitor.visitUnion(this);
}
@Override
public boolean apply(@Nonnull FormInstance instance) {
for(Criteria criterium : elements) {
if(criterium.apply(instance)) {
return true;
}
}
return false;
}
@Override
public boolean apply(@Nonnull Projection projection) {
for(Criteria criterium : elements) {
if(criterium.apply(projection)) {
return true;
}
}
return false;
}
public Collection<Criteria> getElements() {
return elements;
}
}