package org.opencb.opencga.storage.core.variant.adaptors;
import com.google.common.base.Throwables;
import org.opencb.biodata.models.variant.Variant;
import org.opencb.commons.datastore.core.Query;
import org.opencb.commons.datastore.core.QueryOptions;
import java.util.Objects;
import java.util.function.Consumer;
/**
* Created on 13/03/17.
*
* @author Jacobo Coll <jacobo167@gmail.com>
*/
public interface VariantIterable extends Iterable<Variant> {
@Override
default VariantDBIterator iterator() {
return iterator(new Query(), new QueryOptions());
}
VariantDBIterator iterator(Query query, QueryOptions options);
@Override
default void forEach(Consumer<? super Variant> action) {
forEach(new Query(), action, new QueryOptions());
}
default void forEach(Query query, Consumer<? super Variant> action, QueryOptions options) {
Objects.requireNonNull(action);
try (VariantDBIterator variantDBIterator = iterator(query, options)) {
while (variantDBIterator.hasNext()) {
action.accept(variantDBIterator.next());
}
} catch (Exception e) {
Throwables.propagate(e);
}
}
}