use of uk.ac.bbsrc.tgac.miso.core.data.RunPartition in project miso-lims by miso-lims.
the class DefaultRunService method createRunPartitions.
private void createRunPartitions(Run run) throws IOException {
for (SequencerPartitionContainer container : run.getSequencerPartitionContainers()) {
for (Partition partition : container.getPartitions()) {
RunPartition runPartition = runPartitionService.get(run, partition);
if (runPartition == null) {
runPartition = new RunPartition();
runPartition.setRunId(run.getId());
runPartition.setPartitionId(partition.getId());
runPartition.setPurpose(run.getSequencer().getDefaultRunPurpose());
runPartitionService.save(runPartition);
}
}
}
}
use of uk.ac.bbsrc.tgac.miso.core.data.RunPartition in project miso-lims by miso-lims.
the class DefaultQcStatusService method update.
@Override
public void update(QcStatusUpdate update) throws IOException {
// to detect changes and set QC users
switch(update.getEntityType()) {
case SAMPLE:
{
Sample sample = sampleService.get(update.getId());
updateDetailedStatus(EntityType.SAMPLE.getLabel(), sample, update);
sampleService.update(sample);
break;
}
case LIBRARY:
{
Library library = libraryService.get(update.getId());
updateDetailedStatus(EntityType.LIBRARY.getLabel(), library, update);
libraryService.update(library);
break;
}
case LIBRARY_ALIQUOT:
{
LibraryAliquot aliquot = libraryAliquotService.get(update.getId());
updateDetailedStatus(EntityType.LIBRARY_ALIQUOT.getLabel(), aliquot, update);
libraryAliquotService.update(aliquot);
break;
}
case POOL:
{
Pool pool = poolService.get(update.getId());
throwIfNull(EntityType.POOL.getLabel(), pool);
pool.setQcPassed(update.getQcPassed());
poolService.update(pool);
break;
}
case RUN:
{
Run run = runService.get(update.getId());
throwIfNull("Run", run);
if (update.getQcPassed() == null) {
// QC Passed not set
run.setQcPassed(null);
run.setQcUser(null);
run.setQcDate(null);
clearDataReview(run);
} else if (!update.getQcPassed().equals(run.getQcPassed())) {
// QC Passed set and changed
run.setQcPassed(update.getQcPassed());
run.setQcUser(authorizationManager.getCurrentUser());
run.setQcDate(new Date());
clearDataReview(run);
} else if (update.getDataReview() == null) {
// QC Passed set and not changed, data review not set
clearDataReview(run);
} else {
// QC Passed set and not changed, data review set and changed
run.setDataReview(update.getDataReview());
run.setDataReviewer(authorizationManager.getCurrentUser());
run.setDataReviewDate(new Date());
}
runService.update(run);
break;
}
case RUN_PARTITION:
{
if (update.getIds() == null || update.getIds().length != 2) {
throw new ValidationException("Invalid ID for run-partition");
}
Run run = runService.get(update.getIds()[0]);
throwIfNull("Run", run);
Partition partition = findPartitionInRun(run, update.getIds()[1]);
RunPartition runPartition = runPartitionService.get(run, partition);
if (update.getQcStatusId() == null) {
runPartition.setQcType(null);
} else {
PartitionQCType status = partitionQcTypeService.get(update.getQcStatusId());
throwIfNull("Partition QC type", status);
runPartition.setQcType(status);
}
runPartition.setNotes(update.getQcNote());
runPartition.setLastModifier(authorizationManager.getCurrentUser());
runPartitionService.save(runPartition);
break;
}
case RUN_LIBRARY:
{
if (update.getIds() == null || update.getIds().length != 3) {
throw new ValidationException("Invalid ID for run-partition");
}
Run run = runService.get(update.getIds()[0]);
throwIfNull("Run", run);
Partition partition = findPartitionInRun(run, update.getIds()[1]);
ListLibraryAliquotView aliquotView = partition.getPool().getPoolContents().stream().map(PoolElement::getAliquot).filter(x -> x.getId() == update.getIds()[2]).findFirst().orElse(null);
throwIfNull("Run-library", aliquotView);
LibraryAliquot aliquot = libraryAliquotService.get(update.getIds()[2]);
RunPartitionAliquot runLib = runPartitionAliquotService.get(run, partition, aliquot);
if (update.getQcStatusId() == null) {
// QC status not set
runLib.setQcStatus(null);
runLib.setQcUser(null);
runLib.setQcDate(null);
clearDataReview(runLib);
} else if (runLib.getQcStatus() == null || runLib.getQcStatus().getId() != update.getQcStatusId().longValue()) {
// QC status set and changed
RunLibraryQcStatus status = runLibraryQcStatusService.get(update.getQcStatusId());
throwIfNull("Run-library QC status", status);
runLib.setQcStatus(status);
runLib.setQcUser(authorizationManager.getCurrentUser());
runLib.setQcDate(new Date());
clearDataReview(runLib);
} else if (update.getDataReview() == null) {
// QC status set and not changed, data review not set
clearDataReview(runLib);
} else if (update.getDataReview() != runLib.getDataReview()) {
// QC status set and not changed, data review set and changed
runLib.setDataReview(update.getDataReview());
runLib.setDataReviewer(authorizationManager.getCurrentUser());
runLib.setDataReviewDate(new Date());
}
runLib.setQcNote(update.getQcNote());
runPartitionAliquotService.save(runLib);
break;
}
default:
throw new ValidationException("Unsupported entity type");
}
}
use of uk.ac.bbsrc.tgac.miso.core.data.RunPartition in project miso-lims by miso-lims.
the class RunRestController method setQc.
@PostMapping(value = "/{runId}/qc", produces = "application/json")
@ResponseStatus(code = HttpStatus.NO_CONTENT)
public void setQc(@PathVariable Long runId, @RequestBody RunPartitionQCRequest request) throws IOException {
Run run = RestUtils.retrieve("Run", runId, runService);
PartitionQCType qcType = partitionQcTypeService.list().stream().filter(qt -> qt.getId() == request.getQcTypeId().longValue()).findAny().orElseThrow(() -> new RestException(String.format("No partition QC type found with ID: %d", request.getQcTypeId()), Status.BAD_REQUEST));
//
run.getSequencerPartitionContainers().stream().flatMap(//
container -> container.getPartitions().stream()).filter(//
partition -> request.partitionIds.contains(partition.getId())).map(WhineyFunction.rethrow(partition -> {
RunPartition runPartition = runPartitionService.get(run, partition);
if (runPartition == null) {
runPartition = new RunPartition();
runPartition.setRunId(run.getId());
runPartition.setPartitionId(partition.getId());
}
runPartition.setQcType(qcType);
runPartition.setNotes(request.notes);
return runPartition;
})).forEach(WhineyConsumer.rethrow(runPartitionService::save));
}
use of uk.ac.bbsrc.tgac.miso.core.data.RunPartition in project miso-lims by miso-lims.
the class EditRunController method setupForm.
public ModelAndView setupForm(Run run, ModelMap model) throws IOException {
if (run.getId() == Run.UNSAVED_ID) {
model.put("title", "New Run");
model.put("multiplexed", false);
model.put("metrics", "[]");
model.put("partitionNames", "[]");
} else {
model.put("title", "Run " + run.getId());
model.put("metrics", getSources().filter(Objects::nonNull).map(source -> source.fetchMetrics(run)).filter(metrics -> !isStringBlankOrNull(metrics)).collect(new JsonArrayCollector()));
if (run.getSequencerPartitionContainers().size() == 1) {
ObjectMapper mapper = new ObjectMapper();
model.put("partitionNames", mapper.writeValueAsString(run.getSequencerPartitionContainers().get(0).getPartitions().stream().sorted(Comparator.comparing(Partition::getPartitionNumber)).map(partition -> partition.getPool() == null ? "N/A" : partition.getPool().getAlias()).collect(Collectors.toList())));
} else {
model.put("partitionNames", "[]");
}
model.put("runReportLinks", externalUriBuilder.getUris(run));
}
model.put("runPositions", run.getRunPositions().stream().map(Dtos::asDto).collect(Collectors.toList()));
model.put("runPartitions", run.getSequencerPartitionContainers().stream().flatMap(container -> container.getPartitions().stream()).map(WhineyFunction.rethrow(partition -> {
PartitionDto dto = Dtos.asDto(partition, false, indexChecker);
RunPartition runPartition = runPartitionService.get(run, partition);
if (runPartition != null) {
if (runPartition.getQcType() != null) {
dto.setQcType(runPartition.getQcType().getId());
dto.setQcNotes(runPartition.getNotes());
}
if (runPartition.getPurpose() != null) {
dto.setRunPurposeId(runPartition.getPurpose().getId());
}
} else {
dto.setQcNotes("");
}
return dto;
})).collect(Collectors.toList()));
model.put("runAliquots", getRunAliquots(run));
MisoWebUtils.addIssues(issueTrackerManager, () -> issueTrackerManager.searchIssues(run.getAlias()), model);
model.put("run", run);
ObjectMapper mapper = new ObjectMapper();
ObjectNode partitionConfig = mapper.createObjectNode();
partitionConfig.put("platformType", run.getPlatformType().name());
partitionConfig.put("instrumentModelId", run.getSequencer().getInstrumentModel().getId());
partitionConfig.put("runId", run.getId());
partitionConfig.put("isFull", run.isFull());
partitionConfig.put("showContainer", true);
partitionConfig.put("sequencingParametersId", run.getSequencingParameters() == null ? 0 : run.getSequencingParameters().getId());
partitionConfig.put("showPool", true);
model.put("partitionConfig", mapper.writeValueAsString(partitionConfig));
model.put("experiments", experimentService.listAllByRunId(run.getId()).stream().map(expt -> Dtos.asDto(expt)).collect(Collectors.toList()));
ObjectNode experimentConfig = mapper.createObjectNode();
experimentConfig.put("runId", run.getId());
model.put("experimentConfiguration", mapper.writeValueAsString(experimentConfig));
model.put("runDto", mapper.writeValueAsString(Dtos.asDto(run)));
ObjectNode formConfig = mapper.createObjectNode();
User user = authorizationManager.getCurrentUser();
formConfig.put("isAdmin", user.isAdmin());
formConfig.put("isRunReviewer", user.isRunReviewer() || user.isAdmin());
MisoWebUtils.addJsonArray(mapper, formConfig, "sops", sopService.listByCategory(SopCategory.RUN), Dtos::asDto);
model.put("formConfig", mapper.writeValueAsString(formConfig));
return new ModelAndView("/WEB-INF/pages/editRun.jsp", model);
}
use of uk.ac.bbsrc.tgac.miso.core.data.RunPartition in project miso-lims by miso-lims.
the class DefaultRunServiceTest method setup.
@Before
public void setup() throws IOException {
MockitoAnnotations.initMocks(this);
User notificationUser = makeUser(2L, "notification");
Mockito.when(authorizationManager.getCurrentUser()).thenReturn(notificationUser);
Mockito.when(userService.getByLoginName("notification")).thenReturn(notificationUser);
Mockito.when(instrumentService.getByName(SEQUENCER_NAME)).thenReturn(makeSequencer());
Mockito.when(containerModelService.find(Mockito.any(), Mockito.eq(CONTAINER_MODEL_BARCODE), Mockito.eq(1))).thenReturn(makeContainerModel());
Mockito.when(runStore.getByAlias(RUN_ALIAS)).thenReturn(makeSavedRun());
Mockito.when(sequencingParametersService.listByInstrumentModelId(1L)).thenReturn(Arrays.asList(makeSequencingParameters()));
Mockito.when(runPartitionService.get(Mockito.any(Run.class), Mockito.any(Partition.class))).thenAnswer((invocation) -> {
Run run = (Run) invocation.getArguments()[0];
if (!RUN_ALIAS.equals(run.getAlias())) {
return null;
}
Partition part = (Partition) invocation.getArguments()[1];
RunPartition runPart = new RunPartition();
runPart.setRunId(run.getId());
runPart.setPartitionId(part.getId());
return runPart;
});
Mockito.when(containerService.listByBarcode(CONTAINER_SERIAL_NO)).thenReturn(Arrays.asList(makeContainer()));
}
Aggregations