package org.opencb.opencga.storage.mongodb.variant.load.stage; import com.google.common.collect.LinkedListMultimap; import com.google.common.collect.ListMultimap; import org.bson.Document; import org.bson.types.Binary; import org.opencb.biodata.models.variant.Variant; import org.opencb.biodata.models.variant.avro.VariantType; import org.opencb.commons.run.ParallelTaskRunner; import org.opencb.opencga.core.common.ProgressLogger; import java.util.Collections; import java.util.List; import java.util.concurrent.atomic.AtomicLong; import static org.opencb.opencga.storage.mongodb.variant.load.stage.MongoDBVariantStageLoader.STRING_ID_CONVERTER; import static org.opencb.opencga.storage.mongodb.variant.load.stage.MongoDBVariantStageLoader.VARIANT_CONVERTER_DEFAULT; /** * Created on 18/11/16. * * @author Jacobo Coll <jacobo167@gmail.com> */ public class MongoDBVariantStageConverterTask implements ParallelTaskRunner.Task<Variant, ListMultimap<Document, Binary>> { private final ProgressLogger progressLogger; private final AtomicLong skippedVariants; public MongoDBVariantStageConverterTask(ProgressLogger progressLogger) { this.progressLogger = progressLogger; skippedVariants = new AtomicLong(0); } @Override public void pre() { skippedVariants.set(0); } @Override public List<ListMultimap<Document, Binary>> apply(List<Variant> variants) throws RuntimeException { // final long start = System.nanoTime(); int localSkippedVariants = 0; ListMultimap<Document, Binary> ids = LinkedListMultimap.create(); for (Variant variant : variants) { if (variant.getType().equals(VariantType.NO_VARIATION) || variant.getType().equals(VariantType.SYMBOLIC)) { localSkippedVariants++; continue; } Binary binary = VARIANT_CONVERTER_DEFAULT.convertToStorageType(variant); Document id = STRING_ID_CONVERTER.convertToStorageType(variant); ids.put(id, binary); } if (progressLogger != null) { progressLogger.increment(variants.size(), () -> "up to variant " + variants.get(variants.size() - 1)); } skippedVariants.addAndGet(localSkippedVariants); return Collections.singletonList(ids); } public long getSkippedVariants() { return skippedVariants.get(); } }