use of ca.corefacility.bioinformatics.irida.model.sample.SampleSequencingObjectJoin in project irida by phac-nml.
the class RESTSampleSequenceFilesController method listSequencingObjectsOfTypeForSample.
/**
* List all {@link SequencingObject}s of a given type for a {@link Sample}
*
* @param sampleId
* ID of the {@link Sample} to read from
* @param objectType
* {@link SequencingObject} type
* @return The {@link SequencingObject}s of the given type for the
* {@link Sample}
*/
@RequestMapping(value = "/api/samples/{sampleId}/{objectType}", method = RequestMethod.GET)
public ModelMap listSequencingObjectsOfTypeForSample(@PathVariable Long sampleId, @PathVariable String objectType) {
ModelMap modelMap = new ModelMap();
logger.debug("Reading seq file for sample " + sampleId);
Sample sample = sampleService.read(sampleId);
Class<? extends SequencingObject> type = objectLabels.inverse().get(objectType);
Collection<SampleSequencingObjectJoin> unpairedSequenceFilesForSample = sequencingObjectService.getSequencesForSampleOfType(sample, type);
ResourceCollection<SequencingObject> resources = new ResourceCollection<>(unpairedSequenceFilesForSample.size());
for (SampleSequencingObjectJoin join : unpairedSequenceFilesForSample) {
SequencingObject sequencingObject = join.getObject();
sequencingObject = addSequencingObjectLinks(sequencingObject, sampleId);
resources.add(sequencingObject);
}
// add a link to this collection
resources.add(linkTo(methodOn(RESTSampleSequenceFilesController.class).listSequencingObjectsOfTypeForSample(sampleId, objectType)).withSelfRel());
// add a link back to the sample
resources.add(linkTo(methodOn(RESTProjectSamplesController.class).getSample(sampleId)).withRel(RESTSampleSequenceFilesController.REL_SAMPLE));
modelMap.addAttribute(RESTGenericController.RESOURCE_NAME, resources);
return modelMap;
}
use of ca.corefacility.bioinformatics.irida.model.sample.SampleSequencingObjectJoin in project irida by phac-nml.
the class RESTSampleSequenceFilesController method getSampleSequenceFiles.
/**
* Get the {@link SequenceFile} entities associated with a specific
* {@link Sample}.
*
* @param sampleId
* the identifier for the {@link Sample}.
* @return the {@link SequenceFile} entities associated with the
* {@link Sample}.
*/
@RequestMapping(value = "/api/samples/{sampleId}/sequenceFiles", method = RequestMethod.GET)
public ModelMap getSampleSequenceFiles(@PathVariable Long sampleId) {
ModelMap modelMap = new ModelMap();
logger.debug("Reading seq files for sample " + sampleId);
Sample sample = sampleService.read(sampleId);
Collection<SampleSequencingObjectJoin> sequencingObjectsForSample = sequencingObjectService.getSequencingObjectsForSample(sample);
ResourceCollection<SequenceFile> resources = new ResourceCollection<>();
/*
* Note: This is a kind of antiquated seeing we should be referencing
* sequencing objects instead. At the very least the link we're pointing
* to here should be going through the sequencing object
*/
for (SampleSequencingObjectJoin r : sequencingObjectsForSample) {
for (SequenceFile sf : r.getObject().getFiles()) {
String fileLabel = objectLabels.get(r.getObject().getClass());
sf.add(linkTo(methodOn(RESTSampleSequenceFilesController.class).readSequenceFileForSequencingObject(sampleId, fileLabel, r.getObject().getId(), sf.getId())).withSelfRel());
resources.add(sf);
}
}
// add a link to this collection
resources.add(linkTo(methodOn(RESTSampleSequenceFilesController.class).getSampleSequenceFiles(sampleId)).withSelfRel());
// add a link back to the sample
resources.add(linkTo(methodOn(RESTProjectSamplesController.class).getSample(sampleId)).withRel(RESTSampleSequenceFilesController.REL_SAMPLE));
resources.add(linkTo(methodOn(RESTSampleSequenceFilesController.class).listSequencingObjectsOfTypeForSample(sample.getId(), RESTSampleSequenceFilesController.objectLabels.get(SequenceFilePair.class))).withRel(RESTSampleSequenceFilesController.REL_SAMPLE_SEQUENCE_FILE_PAIRS));
resources.add(linkTo(methodOn(RESTSampleSequenceFilesController.class).listSequencingObjectsOfTypeForSample(sample.getId(), RESTSampleSequenceFilesController.objectLabels.get(SingleEndSequenceFile.class))).withRel(RESTSampleSequenceFilesController.REL_SAMPLE_SEQUENCE_FILE_UNPAIRED));
modelMap.addAttribute(RESTGenericController.RESOURCE_NAME, resources);
return modelMap;
}
use of ca.corefacility.bioinformatics.irida.model.sample.SampleSequencingObjectJoin in project irida by phac-nml.
the class ProjectEventHandlerTest method testHandleSequenceFileAddedEventMultipleReturn.
@SuppressWarnings("unchecked")
@Test
public void testHandleSequenceFileAddedEventMultipleReturn() {
Class<? extends ProjectEvent> clazz = DataAddedToSampleProjectEvent.class;
Project project = new Project();
Sample sample = new Sample();
SequenceFile file = new SequenceFile();
SingleEndSequenceFile seqObj1 = new SingleEndSequenceFile(file);
SingleEndSequenceFile seqObj2 = new SingleEndSequenceFile(file);
SampleSequencingObjectJoin join1 = new SampleSequencingObjectJoin(sample, seqObj1);
SampleSequencingObjectJoin join2 = new SampleSequencingObjectJoin(sample, seqObj2);
when(psjRepository.getProjectForSample(sample)).thenReturn(Lists.newArrayList(new ProjectSampleJoin(project, sample, true)));
when(eventRepository.save(any(ProjectEvent.class))).thenReturn(new DataAddedToSampleProjectEvent(project, sample));
Object[] args = {};
MethodEvent methodEvent = new MethodEvent(clazz, Lists.newArrayList(join1, join2), args);
handler.delegate(methodEvent);
ArgumentCaptor<ProjectEvent> captor = ArgumentCaptor.forClass(ProjectEvent.class);
verify(eventRepository).save(captor.capture());
ProjectEvent event = captor.getValue();
assertTrue(event instanceof DataAddedToSampleProjectEvent);
verify(projectRepository).save(any(Project.class));
verify(sampleRepository).save(any(Sample.class));
}
use of ca.corefacility.bioinformatics.irida.model.sample.SampleSequencingObjectJoin in project irida by phac-nml.
the class SequencingObjectServiceImplIT method testGetSequenceFilePairForSample.
@Test
@WithMockUser(username = "admin", roles = "ADMIN")
public void testGetSequenceFilePairForSample() {
Sample s = sampleService.read(2L);
Set<Long> fileIds = Sets.newHashSet(3L, 4L);
Collection<SampleSequencingObjectJoin> sequenceFilePairsForSample = objectService.getSequencesForSampleOfType(s, SequenceFilePair.class);
assertEquals(1, sequenceFilePairsForSample.size());
SequencingObject pair = sequenceFilePairsForSample.iterator().next().getObject();
for (SequenceFile file : pair.getFiles()) {
assertTrue("file id should be in set", fileIds.contains(file.getId()));
fileIds.remove(file.getId());
}
assertTrue("all file ids should have been found", fileIds.isEmpty());
}
use of ca.corefacility.bioinformatics.irida.model.sample.SampleSequencingObjectJoin in project irida by phac-nml.
the class SequencingObjectServiceImplIT method testGetSequencefilesForSampleAsSequencer.
@Test
@WithMockUser(username = "fbristow", roles = "SEQUENCER")
public void testGetSequencefilesForSampleAsSequencer() throws IOException {
Sample s = sampleService.read(1L);
Collection<SampleSequencingObjectJoin> sequencingObjectsForSample = objectService.getSequencingObjectsForSample(s);
assertEquals(1, sequencingObjectsForSample.size());
}
Aggregations