Java tutorial
/* * MIT License * * Copyright (c) 2016 EPAM Systems * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ package com.epam.catgenome.manager; import java.io.File; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Optional; import org.apache.commons.collections4.CollectionUtils; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springframework.core.io.Resource; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.epam.catgenome.common.AbstractManagerTest; import com.epam.catgenome.controller.vo.registration.FeatureIndexedFileRegistrationRequest; import com.epam.catgenome.controller.vo.registration.IndexedFileRegistrationRequest; import com.epam.catgenome.entity.BiologicalDataItem; import com.epam.catgenome.entity.BiologicalDataItemFormat; import com.epam.catgenome.entity.bed.BedFile; import com.epam.catgenome.entity.gene.GeneFile; import com.epam.catgenome.entity.maf.MafFile; import com.epam.catgenome.entity.project.Project; import com.epam.catgenome.entity.project.ProjectItem; import com.epam.catgenome.entity.reference.Bookmark; import com.epam.catgenome.entity.reference.Chromosome; import com.epam.catgenome.entity.reference.Reference; import com.epam.catgenome.entity.seg.SegFile; import com.epam.catgenome.entity.vcf.VcfFile; import com.epam.catgenome.exception.FeatureIndexException; import com.epam.catgenome.exception.VcfReadingException; import com.epam.catgenome.helper.EntityHelper; import com.epam.catgenome.manager.bed.BedManager; import com.epam.catgenome.manager.gene.GffManager; import com.epam.catgenome.manager.maf.MafManager; import com.epam.catgenome.manager.project.ProjectManager; import com.epam.catgenome.manager.reference.BookmarkManager; import com.epam.catgenome.manager.reference.ReferenceGenomeManager; import com.epam.catgenome.manager.seg.SegManager; import com.epam.catgenome.manager.vcf.VcfManager; /** * Source: ProjectManagerTest * Created: 11.01.16, 14:21 * Project: CATGenome Browser * Make: IntelliJ IDEA 14.1.4, JDK 1.8 * * @author Mikhail Miroliubov */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "classpath:applicationContext-test.xml" }) public class ProjectManagerTest extends AbstractManagerTest { @Autowired private ProjectManager projectManager; @Autowired private ReferenceGenomeManager referenceGenomeManager; @Autowired private VcfManager vcfManager; @Autowired private GffManager gffManager; @Autowired private BedManager bedManager; @Autowired private SegManager segManager; @Autowired private BookmarkManager bookmarkManager; @Autowired private MafManager mafManager; private final Logger logger = LoggerFactory.getLogger(ProjectManagerTest.class); @Autowired private ApplicationContext context; private long referenceId; private Reference testReference; private Chromosome testChromosome; private static final String TEST_VCF_FILE_PATH = "classpath:templates/samples.vcf"; private static final String TEST_PROJECT_NAME = "testProject"; private static final String TEST_VCF_FILE_NAME1 = "file1"; private static final String TEST_VCF_FILE_NAME2 = "file2"; private static final int BOOKMARK_END_INDEX = 10000; @Value("#{catgenome['files.base.directory.path']}") private String baseDirPath; @Before public void setup() throws Exception { testChromosome = EntityHelper.createNewChromosome(); testReference = EntityHelper.createNewReference(testChromosome, referenceGenomeManager.createReferenceId()); referenceGenomeManager.register(testReference); referenceId = testReference.getId(); } @Test @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) public void testSaveLoadDeleteProject() throws IOException, InterruptedException, NoSuchAlgorithmException, VcfReadingException, FeatureIndexException { VcfFile file = addVcfFile(TEST_VCF_FILE_NAME1, TEST_VCF_FILE_PATH); BiologicalDataItem item = new BiologicalDataItem(); item.setId(file.getBioDataItemId()); Project project = new Project(); project.setName(TEST_PROJECT_NAME); project.setItems(Arrays.asList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())), new ProjectItem(item))); projectManager.saveProject(project); Project loadedProject = projectManager.loadProject(project.getId()); Assert.assertNotNull(loadedProject); Assert.assertFalse(loadedProject.getItems().isEmpty()); // load my projects List<Project> myProjects = projectManager.loadTopLevelProjectsForCurrentUser(); Assert.assertTrue(myProjects.stream().allMatch(p -> !p.getItems().isEmpty())); VcfFile file2 = addVcfFile(TEST_VCF_FILE_NAME2, TEST_VCF_FILE_PATH); BiologicalDataItem item2 = new BiologicalDataItem(); item2.setId(file2.getBioDataItemId()); loadedProject.getItems().add(new ProjectItem(item2)); projectManager.saveProject(loadedProject); loadedProject = projectManager.loadProject(project.getId()); Assert.assertEquals(loadedProject.getItems().size(), 3); loadedProject.getItems().remove(2); projectManager.saveProject(loadedProject); loadedProject = projectManager.loadProject(project.getId()); Assert.assertEquals(loadedProject.getItems().size(), 2); Assert.assertEquals(TEST_VCF_FILE_NAME1, loadedProject.getItems().get(1).getBioDataItem().getName()); loadedProject.getItems().get(0).setHidden(true); projectManager.saveProject(loadedProject); loadedProject = projectManager.loadProject(project.getId()); Assert.assertEquals(loadedProject.getItems().size(), 2); Assert.assertTrue(loadedProject.getItems().get(0).getHidden()); // add a bookmark Bookmark bookmark = new Bookmark(); bookmark.setOpenedItems(Collections.singletonList(item)); bookmark.setStartIndex(1); bookmark.setEndIndex(BOOKMARK_END_INDEX); bookmark.setChromosome(testChromosome); bookmark.setName("testBookmark"); bookmarkManager.saveBookmark(bookmark); List<Bookmark> loadedBookmarks = bookmarkManager.loadBookmarksByProject(); Assert.assertNotNull(loadedBookmarks); Assert.assertFalse(loadedBookmarks.isEmpty()); Bookmark loadedBookmark = loadedBookmarks.get(0); loadedBookmark = bookmarkManager.loadBookmark(loadedBookmark.getId()); Assert.assertFalse(loadedBookmark.getOpenedItems().isEmpty()); Assert.assertEquals(BiologicalDataItem.getBioDataItemId(loadedBookmark.getOpenedItems().get(0)), item.getId()); // Now delete project projectManager.deleteProject(project.getId(), false); try { projectManager.loadProject(project.getId()); Assert.fail("No exception happened, but should happen"); } catch (IllegalArgumentException e) { // success, nothing to do here logger.debug("Deleted successfully, nothing to do here"); } File dir = new File(baseDirPath + "/projects/" + project.getId()); Assert.assertFalse(dir.exists()); } @Test @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) public void testSaveLoadProjectWithPrettyName() throws IOException, InterruptedException, NoSuchAlgorithmException, VcfReadingException, FeatureIndexException { VcfFile file = addVcfFile(TEST_VCF_FILE_NAME1, TEST_VCF_FILE_PATH); BiologicalDataItem item = new BiologicalDataItem(); item.setId(file.getBioDataItemId()); Project project = new Project(); project.setName(TEST_PROJECT_NAME); project.setPrettyName("pretty"); project.setItems(Arrays.asList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())), new ProjectItem(item))); projectManager.saveProject(project); Project loadedProject = projectManager.loadProject(project.getId()); Assert.assertNotNull(loadedProject); Assert.assertEquals("pretty", loadedProject.getPrettyName()); Assert.assertFalse(loadedProject.getItems().isEmpty()); } @Test @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) public void testDeleteProjectWithNested() throws IOException, InterruptedException, NoSuchAlgorithmException, VcfReadingException, FeatureIndexException { Project parent = new Project(); parent.setName("testParent"); parent.setItems(Collections .singletonList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())))); parent = projectManager.saveProject(parent); Project child1 = new Project(); child1.setName("testChild1"); child1.setItems(Collections .singletonList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())))); child1 = projectManager.saveProject(child1, parent.getId()); Project child2 = new Project(); child2.setName("testChild2"); child2.setItems(Collections .singletonList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())))); child2 = projectManager.saveProject(child2, parent.getId()); Project child11 = new Project(); child11.setName("tesChild11"); child11.setItems(Collections .singletonList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())))); projectManager.saveProject(child11, child1.getId()); List<Project> topProjects = projectManager.loadProjectTree(null); Assert.assertEquals(1, topProjects.size()); Project root = topProjects.get(0); Assert.assertEquals(2, root.getNestedProjects().size()); // check that we cannot delete parent dataset without force option boolean catchException = false; try { projectManager.deleteProject(root.getId(), false); } catch (IllegalArgumentException e) { catchException = true; } if (!catchException) { Assert.fail("Parent project cannot be deleted without force option"); } // check that we can delete parent dataset with force option projectManager.deleteProject(root.getId(), true); assertNullLoadProjectWithNested(root); } private void assertNullLoadProjectWithNested(Project root) { try { // check that we handle exception as expected Assert.assertNull(projectManager.loadProject(root.getId())); } catch (IllegalArgumentException e) { // continue checking with child projects Optional.ofNullable(root.getNestedProjects()).orElse(Collections.emptyList()) .forEach(this::assertNullLoadProjectWithNested); } } @Test @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) public void testAddRemoveHideItems() throws IOException, InterruptedException, NoSuchAlgorithmException, VcfReadingException, FeatureIndexException { Project project = new Project(); project.setName(TEST_PROJECT_NAME); project.setItems(Collections .singletonList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())))); projectManager.saveProject(project); Project loadedProject = projectManager.loadProject(project.getId()); Assert.assertNotNull(loadedProject); Assert.assertEquals(1, loadedProject.getItems().size()); addVcfFileToProject(project.getId(), TEST_VCF_FILE_NAME1, TEST_VCF_FILE_PATH); addVcfFileToProject(project.getId(), TEST_VCF_FILE_NAME2, TEST_VCF_FILE_PATH); loadedProject = projectManager.loadProject(project.getId()); Assert.assertEquals(3, loadedProject.getItems().size()); projectManager.removeProjectItem(project.getId(), ((VcfFile) loadedProject.getItems().get(1).getBioDataItem()).getBioDataItemId()); loadedProject = projectManager.loadProject(project.getId()); Assert.assertEquals(2, loadedProject.getItems().size()); Assert.assertEquals(TEST_VCF_FILE_NAME2, loadedProject.getItems().get(1).getBioDataItem().getName()); projectManager.hideProjectItem(project.getId(), ((VcfFile) loadedProject.getItems().get(1).getBioDataItem()).getBioDataItemId()); loadedProject = projectManager.loadProject(project.getId()); Assert.assertFalse(loadedProject.getItems().isEmpty()); Assert.assertTrue(loadedProject.getItems().get(1).getHidden()); } @Test @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) public void testMoveProjectToParent() throws FeatureIndexException, InterruptedException, VcfReadingException, NoSuchAlgorithmException, IOException { Project parent = new Project(); parent.setName("testParent"); parent.setItems(Collections .singletonList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())))); parent = projectManager.saveProject(parent); Project child1 = new Project(); child1.setName("testChild1"); child1.setItems(Collections .singletonList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())))); child1 = projectManager.saveProject(child1, parent.getId()); parent = projectManager.loadProject(parent.getId()); Assert.assertFalse(parent.getNestedProjects().isEmpty()); Assert.assertEquals(child1.getId(), parent.getNestedProjects().get(0).getId()); Project child2 = new Project(); child2.setName("testChild2"); child2.setItems(Collections .singletonList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())))); child2 = projectManager.saveProject(child2); projectManager.moveProjectToParent(child2.getId(), parent.getId()); parent = projectManager.loadProject(parent.getId()); Assert.assertEquals(parent.getNestedProjects().size(), 2); Assert.assertEquals(child1.getId(), parent.getNestedProjects().get(0).getId()); Assert.assertEquals(child2.getId(), parent.getNestedProjects().get(1).getId()); parent = projectManager.loadProject(parent.getId()); Assert.assertEquals(parent.getNestedProjects().size(), 2); Assert.assertEquals(child1.getId(), parent.getNestedProjects().get(0).getId()); Assert.assertEquals(child2.getId(), parent.getNestedProjects().get(1).getId()); List<Project> topLevel = projectManager.loadTopLevelProjectsForCurrentUser(); Assert.assertEquals(1, topLevel.size()); // test loading tree Project child11 = new Project(); child11.setName("tesChild11"); child11.setItems(Collections .singletonList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())))); projectManager.saveProject(child11, child1.getId()); addVcfFileToProject(parent.getId(), "testVcf", TEST_VCF_FILE_PATH); Resource resource = context.getResource("classpath:templates/genes_sorted.gtf"); FeatureIndexedFileRegistrationRequest request = new FeatureIndexedFileRegistrationRequest(); request.setReferenceId(referenceId); request.setName("genes"); request.setPath(resource.getFile().getAbsolutePath()); GeneFile geneFile = gffManager.registerGeneFile(request); projectManager.addProjectItem(child1.getId(), geneFile.getBioDataItemId()); referenceGenomeManager.updateReferenceGeneFileId(referenceId, geneFile.getId()); projectManager.addProjectItem(parent.getId(), geneFile.getBioDataItemId()); topLevel = projectManager.loadProjectTree(null); Assert.assertFalse(topLevel.isEmpty()); Assert.assertFalse(topLevel.stream().anyMatch(p -> p.getNestedProjects().isEmpty())); Assert.assertTrue(topLevel.stream().anyMatch(p -> p.getItems().stream() .anyMatch(i -> i.getBioDataItem().getFormat() == BiologicalDataItemFormat.GENE))); Assert.assertFalse(topLevel.stream().anyMatch(p -> p.getItems().isEmpty())); Assert.assertFalse(topLevel.get(0).getNestedProjects().stream() .allMatch(p -> CollectionUtils.isEmpty(p.getNestedProjects()))); Assert.assertFalse( topLevel.get(0).getNestedProjects().stream().allMatch(p -> CollectionUtils.isEmpty(p.getItems()))); } @Test @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) public void testLoadTreeWithParent() throws FeatureIndexException, InterruptedException, VcfReadingException, NoSuchAlgorithmException, IOException { Project parent = new Project(); parent.setName("testParent"); parent.setItems(Collections .singletonList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())))); parent = projectManager.saveProject(parent); Project child1 = new Project(); child1.setName("testChild1"); child1.setItems(Collections .singletonList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())))); child1 = projectManager.saveProject(child1, parent.getId()); Project child2 = new Project(); child2.setName("testChild2"); child2.setItems(Collections .singletonList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())))); child2 = projectManager.saveProject(child2, parent.getId()); Project child11 = new Project(); child11.setName("tesChild11"); child11.setItems(Collections .singletonList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())))); projectManager.saveProject(child11, child1.getId()); List<Project> topProjects = projectManager.loadProjectTree(null); Assert.assertEquals(1, topProjects.size()); Assert.assertEquals(2, topProjects.get(0).getNestedProjects().size()); List<Project> childProjects = projectManager.loadProjectTree(child1.getId()); Assert.assertEquals(1, childProjects.size()); Assert.assertEquals(1, childProjects.get(0).getNestedProjects().size()); } @Test @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) public void testAllFileTypesLoading() throws IOException, InterruptedException, FeatureIndexException, NoSuchAlgorithmException, VcfReadingException { Project project = new Project(); project.setName(TEST_PROJECT_NAME); project.setItems(Collections .singletonList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())))); projectManager.saveProject(project); Project loadedProject = projectManager.loadProject(project.getId()); Assert.assertNotNull(loadedProject); Assert.assertEquals(1, loadedProject.getItems().size()); // Add Vcf addVcfFileToProject(project.getId(), TEST_VCF_FILE_NAME1, TEST_VCF_FILE_PATH); // Add genes Resource resource = context.getResource("classpath:templates/genes_sorted.gtf"); FeatureIndexedFileRegistrationRequest geneRequest = new FeatureIndexedFileRegistrationRequest(); geneRequest.setReferenceId(referenceId); geneRequest.setName("genes"); geneRequest.setPath(resource.getFile().getAbsolutePath()); GeneFile geneFile = gffManager.registerGeneFile(geneRequest); projectManager.addProjectItem(project.getId(), geneFile.getBioDataItemId()); // Add BED file resource = context.getResource("classpath:templates/genes_sorted.bed"); IndexedFileRegistrationRequest request = new IndexedFileRegistrationRequest(); request.setReferenceId(referenceId); request.setName("bed"); request.setPath(resource.getFile().getAbsolutePath()); BedFile bedFile = bedManager.registerBed(request); projectManager.addProjectItem(project.getId(), bedFile.getBioDataItemId()); // Add SEG file resource = context.getResource("classpath:templates/test_seg.seg"); request = new IndexedFileRegistrationRequest(); request.setReferenceId(referenceId); request.setName("seg"); request.setPath(resource.getFile().getAbsolutePath()); SegFile segFile = segManager.registerSegFile(request); projectManager.addProjectItem(project.getId(), segFile.getBioDataItemId()); // Add MAF file resource = context.getResource("classpath:templates/maf/" + "TCGA.ACC.mutect.abbe72a5-cb39-48e4-8df5-5fd2349f2bb2.somatic.sorted.maf.gz"); request = new IndexedFileRegistrationRequest(); request.setPath(resource.getFile().getAbsolutePath()); request.setReferenceId(referenceId); MafFile mafFile = mafManager.registerMafFile(request); Assert.assertNotNull(mafFile); projectManager.addProjectItem(project.getId(), mafFile.getBioDataItemId()); loadedProject = projectManager.loadProject(project.getId()); // Test VCF item ProjectItem vcfItem = loadedProject.getItems().stream() .filter(i -> i.getBioDataItem().getFormat() == BiologicalDataItemFormat.VCF).findFirst().get(); Assert.assertNotNull(vcfItem); Assert.assertNotNull(vcfItem.getBioDataItem()); VcfFile loadedVcf = (VcfFile) vcfItem.getBioDataItem(); Assert.assertNotNull(loadedVcf.getId()); Assert.assertNotNull(loadedVcf.getIndex()); Assert.assertFalse(loadedVcf.getIndex().getPath().isEmpty()); Assert.assertFalse(loadedVcf.getPath().isEmpty()); Assert.assertFalse(loadedVcf.getSamples().isEmpty()); // Test BED item ProjectItem bedItem = loadedProject.getItems().stream() .filter(i -> i.getBioDataItem().getFormat() == BiologicalDataItemFormat.BED).findFirst().get(); Assert.assertNotNull(bedItem); Assert.assertNotNull(bedItem.getBioDataItem()); BedFile loadedBed = (BedFile) bedItem.getBioDataItem(); Assert.assertNotNull(loadedBed.getId()); Assert.assertNotNull(loadedBed.getIndex()); Assert.assertFalse(loadedBed.getIndex().getPath().isEmpty()); Assert.assertFalse(loadedBed.getPath().isEmpty()); // Test SEG Files ProjectItem segItem = loadedProject.getItems().stream() .filter(i -> i.getBioDataItem().getFormat() == BiologicalDataItemFormat.SEG).findFirst().get(); Assert.assertNotNull(segItem); Assert.assertNotNull(segItem.getBioDataItem()); SegFile loadedSeg = (SegFile) segItem.getBioDataItem(); Assert.assertNotNull(loadedSeg.getId()); Assert.assertNotNull(loadedSeg.getIndex()); Assert.assertFalse(loadedSeg.getPath().isEmpty()); Assert.assertFalse(loadedSeg.getSamples().isEmpty()); // Test MAF Files ProjectItem mafItem = loadedProject.getItems().stream() .filter(i -> i.getBioDataItem().getFormat() == BiologicalDataItemFormat.MAF).findFirst().get(); Assert.assertNotNull(mafItem); Assert.assertNotNull(mafItem.getBioDataItem()); SegFile loadedMaf = (SegFile) segItem.getBioDataItem(); Assert.assertNotNull(loadedMaf.getId()); Assert.assertNotNull(loadedMaf.getIndex()); Assert.assertFalse(loadedMaf.getPath().isEmpty()); Assert.assertFalse(loadedMaf.getSamples().isEmpty()); // Test load my projects List<Project> myProjects = projectManager.loadTopLevelProjectsForCurrentUser(); Assert.assertFalse(myProjects.isEmpty()); } @Test @Transactional(propagation = Propagation.REQUIRED) public void testLoadReferenceGenes() throws IOException { Resource resource = context.getResource("classpath:templates/genes_sorted.gtf"); FeatureIndexedFileRegistrationRequest geneRequest = new FeatureIndexedFileRegistrationRequest(); geneRequest.setReferenceId(referenceId); geneRequest.setName("genes"); geneRequest.setPath(resource.getFile().getAbsolutePath()); GeneFile geneFile = gffManager.registerGeneFile(geneRequest); referenceGenomeManager.updateReferenceGeneFileId(referenceId, geneFile.getId()); geneRequest.setName("genes1"); GeneFile geneFile1 = gffManager.registerGeneFile(geneRequest); Project project = new Project(); project.setName(TEST_PROJECT_NAME); project.setItems(Arrays.asList(new ProjectItem(new BiologicalDataItem(testReference.getBioDataItemId())), new ProjectItem(geneFile1))); projectManager.saveProject(project); Project loadedProject = projectManager.loadProject(project.getId()); Reference projectReference = (Reference) loadedProject.getItems().stream() .filter(i -> i.getBioDataItem().getFormat() == BiologicalDataItemFormat.REFERENCE) .map(ProjectItem::getBioDataItem).findFirst().get(); GeneFile projectGeneFile = (GeneFile) loadedProject.getItems().stream() .filter(i -> i.getBioDataItem().getId().equals(geneFile1.getId())).map(ProjectItem::getBioDataItem) .findFirst().get(); Assert.assertEquals(projectGeneFile.getPath(), projectReference.getGeneFile().getPath()); Assert.assertEquals(projectGeneFile.getFormat(), projectReference.getGeneFile().getFormat()); Assert.assertEquals(projectGeneFile.getType(), projectReference.getGeneFile().getType()); Assert.assertEquals(projectGeneFile.getReferenceId(), projectReference.getGeneFile().getReferenceId()); Assert.assertEquals(projectGeneFile.getCreatedBy(), projectReference.getGeneFile().getCreatedBy()); Assert.assertNotNull(projectReference.getGeneFile().getId()); Assert.assertNotNull(projectReference.getGeneFile().getName()); Assert.assertNotNull(projectReference.getGeneFile().getCreatedDate()); } private void addVcfFileToProject(long projectId, String name, String path) throws IOException, InterruptedException, NoSuchAlgorithmException, VcfReadingException { VcfFile vcfFile = addVcfFile(name, path); projectManager.addProjectItem(projectId, vcfFile.getBioDataItemId()); } private VcfFile addVcfFile(String name, String path) throws IOException, InterruptedException, NoSuchAlgorithmException, VcfReadingException { Resource resource = context.getResource(path); FeatureIndexedFileRegistrationRequest request = new FeatureIndexedFileRegistrationRequest(); request.setReferenceId(referenceId); request.setName(name); request.setPath(resource.getFile().getAbsolutePath()); return vcfManager.registerVcfFile(request); } }