package com.appmetr.hercules.batch.iterator; import com.appmetr.hercules.batch.BatchIterator; import com.appmetr.hercules.failover.FailoverConf; import com.appmetr.hercules.failover.FailoverQuery; import com.appmetr.hercules.failover.FailoverQueryProcessor; import com.appmetr.hercules.profile.DataOperationsProfile; import org.slf4j.Logger; import java.util.List; public class FailoverBatchIterator<E, K> implements BatchIterator<E, K> { private BatchIterator<E, K> iterator; private FailoverConf conf; private Logger logger; public FailoverBatchIterator(BatchIterator<E, K> iterator, FailoverConf conf, Logger logger) { this.iterator = iterator; this.conf = conf; this.logger = logger; } @Override public List<E> next(final DataOperationsProfile dataOperationsProfile) { return FailoverQueryProcessor.process(conf, logger, new FailoverQuery<List<E>>() { @Override public List<E> query() { return iterator.next(dataOperationsProfile); } }); } @Override public boolean hasNext() { return FailoverQueryProcessor.process(conf, logger, new FailoverQuery<Boolean>() { @Override public Boolean query() { return iterator.hasNext(); } }); } }