package org.molgenis.data.annotation.core.resources.impl.tabix; import org.molgenis.data.Entity; import org.molgenis.data.Query; import org.molgenis.data.meta.model.Attribute; import org.molgenis.data.meta.model.AttributeFactory; import org.molgenis.data.meta.model.EntityType; import org.molgenis.data.meta.model.EntityTypeFactory; import org.molgenis.data.support.DynamicEntity; import org.molgenis.data.vcf.model.VcfAttributes; import org.molgenis.test.data.AbstractMolgenisSpringTest; import org.molgenis.util.EntityUtils; import org.molgenis.util.ResourceUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.io.File; import java.io.IOException; import java.util.Iterator; import static org.molgenis.data.meta.AttributeType.COMPOUND; import static org.molgenis.data.meta.AttributeType.STRING; import static org.molgenis.data.meta.model.EntityType.AttributeRole.ROLE_ID; import static org.molgenis.data.vcf.model.VcfAttributes.*; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; @ContextConfiguration(classes = { TabixVcfRepositoryTest.Config.class }) public class TabixVcfRepositoryTest extends AbstractMolgenisSpringTest { @Autowired AttributeFactory attributeFactory; @Autowired EntityTypeFactory entityTypeFactory; @Autowired VcfAttributes vcfAttributes; private TabixVcfRepository tabixVcfRepository; private EntityType repoMetaData; @BeforeClass public void before() throws IOException { repoMetaData = entityTypeFactory.create().setSimpleName("TabixTest"); repoMetaData.addAttribute(vcfAttributes.getChromAttribute()); repoMetaData.addAttribute(vcfAttributes.getAltAttribute()); repoMetaData.addAttribute(vcfAttributes.getPosAttribute()); repoMetaData.addAttribute(vcfAttributes.getRefAttribute()); repoMetaData.addAttribute(vcfAttributes.getFilterAttribute()); repoMetaData.addAttribute(vcfAttributes.getQualAttribute()); repoMetaData.addAttribute(vcfAttributes.getIdAttribute()); repoMetaData .addAttribute(attributeFactory.create().setName("INTERNAL_ID").setDataType(STRING).setVisible(false), ROLE_ID); repoMetaData.addAttribute(attributeFactory.create().setName("INFO").setDataType(COMPOUND)); File file = ResourceUtils.getFile(getClass(), "/tabixtest.vcf.gz"); tabixVcfRepository = new TabixVcfRepository(file, "TabixTest", vcfAttributes, entityTypeFactory, attributeFactory); } @Test public void testGetEntityType() { EntityType vcfMetaData = tabixVcfRepository.getEntityType(); vcfMetaData.getAllAttributes().forEach(attr -> attr.setIdentifier(null)); repoMetaData.getAllAttributes().forEach(attr -> attr.setIdentifier(null)); assertTrue(EntityUtils.equals(vcfMetaData, repoMetaData)); } @Test public void testQuery() { Query<Entity> query = tabixVcfRepository.query().eq(VcfAttributes.CHROM, "1").and() .eq(VcfAttributes.POS, "249240543"); Iterator<Entity> iterator = tabixVcfRepository.findAll(query).iterator(); iterator.hasNext(); Entity other = iterator.next(); Entity entity = newEntity("1", 249240543, "A", "AGG", "PASS", "100", "", "zG7SPcGIh_8_IicI1uLeoQ"); boolean equal = true; for (Attribute attr : entity.getEntityType().getAtomicAttributes()) { equal = other.get(attr.getName()).equals(entity.get(attr.getName())); if (!equal) break; } assertTrue(equal); assertFalse(iterator.hasNext()); } @Test public void testIterator() { Entity entity = newEntity("1", 249240543, "A", "AGG", "PASS", "100", "", "zG7SPcGIh_8_IicI1uLeoQ"); Iterator<Entity> iterator = tabixVcfRepository.iterator(); iterator.hasNext(); Entity other = iterator.next(); boolean equal = true; for (Attribute attr : entity.getEntityType().getAtomicAttributes()) { equal = other.get(attr.getName()).equals(entity.get(attr.getName())); if (!equal) { System.out.println(attr.getName()); break; } ; } assertTrue(equal); } private DynamicEntity newEntity(String chrom, int pos, String alt, String ref, String filter, String qual, String id, String internalId) { DynamicEntity result = new DynamicEntity(repoMetaData); result.set(CHROM, chrom); result.set(ALT, alt); result.set(POS, pos); result.set(REF, ref); result.set("FILTER", filter); result.set("QUAL", qual); result.set("INTERNAL_ID", internalId); result.set("ID", id); return result; } @Configuration @ComponentScan({ "org.molgenis.data.vcf.model" }) public static class Config { } }