package org.opencb.opencga.storage.mongodb.variant.load.variants;
import org.bson.Document;
import org.bson.conversions.Bson;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* Package local class for grouping mongodb operations.
* Allows thread-safe operations.
*/
public class MongoDBOperations {
// private List<Document> inserts = new LinkedList<>();
// Document may exist, study does not exist
private NewStudy newStudy = new NewStudy();
// Document and study exist
private ExistingStudy existingStudy = new ExistingStudy();
// Stage documents to cleanup
// private List<Pair<Bson, Bson>> cleanFromStage = new ArrayList<>();
private List<String> documentsToCleanStudies = new ArrayList<>();
private List<String> documentsToCleanFiles = new ArrayList<>();
private int skipped = 0;
private int nonInserted = 0;
/** Extra insertions due to overlapped variants. */
private int overlappedVariants = 0;
/** Missing variants. See A3) */
private long missingVariants = 0;
/** Missing variants. See A3) . No fill gaps needed*/
private long missingVariantsNoFillGaps = 0;
protected MongoDBOperations() {
}
NewStudy getNewStudy() {
return newStudy;
}
MongoDBOperations setNewStudy(NewStudy newStudy) {
this.newStudy = newStudy;
return this;
}
ExistingStudy getExistingStudy() {
return existingStudy;
}
MongoDBOperations setExistingStudy(ExistingStudy existingStudy) {
this.existingStudy = existingStudy;
return this;
}
List<String> getDocumentsToCleanStudies() {
return documentsToCleanStudies;
}
MongoDBOperations setDocumentsToCleanStudies(List<String> documentsToCleanStudies) {
this.documentsToCleanStudies = documentsToCleanStudies;
return this;
}
List<String> getDocumentsToCleanFiles() {
return documentsToCleanFiles;
}
MongoDBOperations setDocumentsToCleanFiles(List<String> documentsToCleanFiles) {
this.documentsToCleanFiles = documentsToCleanFiles;
return this;
}
int getSkipped() {
return skipped;
}
MongoDBOperations setSkipped(int skipped) {
this.skipped = skipped;
return this;
}
int getNonInserted() {
return nonInserted;
}
MongoDBOperations setNonInserted(int nonInserted) {
this.nonInserted = nonInserted;
return this;
}
int getOverlappedVariants() {
return overlappedVariants;
}
MongoDBOperations setOverlappedVariants(int overlappedVariants) {
this.overlappedVariants = overlappedVariants;
return this;
}
long getMissingVariants() {
return missingVariants;
}
MongoDBOperations setMissingVariants(long missingVariants) {
this.missingVariants = missingVariants;
return this;
}
long getMissingVariantsNoFillGaps() {
return missingVariantsNoFillGaps;
}
MongoDBOperations setMissingVariantsNoFillGaps(long missingVariantsNoFillGaps) {
this.missingVariantsNoFillGaps = missingVariantsNoFillGaps;
return this;
}
// Document may exist, study does not exist
class NewStudy {
private List<String> ids = new LinkedList<>();
private List<Bson> queries = new LinkedList<>();
private List<Bson> updates = new LinkedList<>();
// Used if the document does not exist
// This collection may be smaller than the previous collections
private List<Document> variants = new LinkedList<>();
List<String> getIds() {
return ids;
}
NewStudy setIds(List<String> ids) {
this.ids = ids;
return this;
}
List<Bson> getQueries() {
return queries;
}
NewStudy setQueries(List<Bson> queries) {
this.queries = queries;
return this;
}
List<Bson> getUpdates() {
return updates;
}
NewStudy setUpdates(List<Bson> updates) {
this.updates = updates;
return this;
}
List<Document> getVariants() {
return variants;
}
NewStudy setVariants(List<Document> variants) {
this.variants = variants;
return this;
}
}
// Document and study exist
class ExistingStudy {
private List<String> ids = new LinkedList<>();
private List<Bson> queries = new LinkedList<>();
private List<Bson> updates = new LinkedList<>();
List<String> getIds() {
return ids;
}
ExistingStudy setIds(List<String> ids) {
this.ids = ids;
return this;
}
List<Bson> getQueries() {
return queries;
}
ExistingStudy setQueries(List<Bson> queries) {
this.queries = queries;
return this;
}
List<Bson> getUpdates() {
return updates;
}
ExistingStudy setUpdates(List<Bson> updates) {
this.updates = updates;
return this;
}
}
}