package org.molgenis.data.annotation.core.query; import org.molgenis.data.Entity; import org.molgenis.data.Query; import org.molgenis.data.annotation.core.datastructures.Locus; import org.molgenis.data.annotation.core.entity.QueryCreator; import org.molgenis.data.meta.model.Attribute; import org.molgenis.data.support.QueryImpl; import org.molgenis.data.vcf.model.VcfAttributes; import java.util.Arrays; import java.util.Collection; import static java.util.Objects.requireNonNull; /** * Creates a Locus query that finds rows that match chromosome/position */ public class LocusQueryCreator implements QueryCreator { private final VcfAttributes vcfAttributes; public LocusQueryCreator(VcfAttributes vcfAttributes) { this.vcfAttributes = requireNonNull(vcfAttributes); } @Override public Query<Entity> createQuery(Entity entity) { String chromosome = entity.getString(VcfAttributes.CHROM); Integer position = entity.getInt(VcfAttributes.POS); Locus locus = new Locus(chromosome, position); return createQuery(locus); } public static Query<Entity> createQuery(Locus locus) { return QueryImpl.EQ(VcfAttributes.CHROM, locus.getChrom()).and().eq(VcfAttributes.POS, locus.getPos()); } @Override public Collection<Attribute> getRequiredAttributes() { return Arrays.asList(vcfAttributes.getChromAttribute(), vcfAttributes.getPosAttribute()); } }