package org.opencb.opencga.storage.core.variant.io.db; import org.opencb.commons.datastore.core.QueryOptions; import org.opencb.commons.datastore.core.QueryResult; import org.opencb.commons.io.DataWriter; import org.opencb.opencga.core.common.ProgressLogger; import org.opencb.opencga.storage.core.metadata.StudyConfiguration; import org.opencb.opencga.storage.core.variant.adaptors.VariantDBAdaptor; import org.opencb.opencga.storage.core.variant.stats.VariantStatsWrapper; import java.util.List; import java.util.concurrent.atomic.AtomicLong; /** * Created on 02/12/16. * * @author Jacobo Coll <jacobo167@gmail.com> */ public class VariantStatsDBWriter implements DataWriter<VariantStatsWrapper> { private final VariantDBAdaptor dbAdaptor; private final QueryOptions options; private final StudyConfiguration studyConfiguration; private ProgressLogger progressLogger; private final AtomicLong numWrites = new AtomicLong(); private final AtomicLong numStats = new AtomicLong(); public VariantStatsDBWriter(VariantDBAdaptor dbAdaptor, StudyConfiguration studyConfiguration, QueryOptions options) { this.dbAdaptor = dbAdaptor; this.options = options; this.studyConfiguration = studyConfiguration; } @Override public boolean pre() { numWrites.set(0); numStats.set(0); return true; } @Override public boolean write(List<VariantStatsWrapper> batch) { QueryResult writeResult = dbAdaptor.updateStats(batch, studyConfiguration, options); numStats.addAndGet(batch.size()); numWrites.addAndGet(writeResult.getNumResults()); if (progressLogger != null) { progressLogger.increment(batch.size(), () -> ", up to position " + batch.get(batch.size() - 1).getChromosome() + ":" + batch.get(batch.size() - 1).getPosition()); } return true; } public VariantStatsDBWriter setProgressLogger(ProgressLogger progressLogger) { this.progressLogger = progressLogger; return this; } public long getNumWrites() { return numWrites.longValue(); } public long getVariantStats() { return numStats.longValue(); } }