use of uk.ac.bbsrc.tgac.miso.core.data.PartitionQCType 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.PartitionQCType 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.PartitionQCType in project miso-lims by miso-lims.
the class HibernateRunPartitionDaoIT method testCreate.
@Test
public void testCreate() throws Exception {
long runId = 2L;
long partitionId = 2L;
PartitionQCType type = (PartitionQCType) currentSession().get(PartitionQCType.class, 1L);
RunPurpose purpose = (RunPurpose) currentSession().get(RunPurpose.class, 1L);
RunPartition qc = new RunPartition();
User user = (User) currentSession().get(UserImpl.class, 1L);
qc.setRunId(runId);
qc.setPartitionId(partitionId);
qc.setQcType(type);
qc.setPurpose(purpose);
qc.setLastModifier(user);
dao.create(qc);
RunPartition fetchedQc = dao.get(runId, partitionId);
assertNotNull(fetchedQc);
assertEquals(qc.getQcType().getId(), fetchedQc.getQcType().getId());
assertEquals(qc.getNotes(), fetchedQc.getNotes());
}
use of uk.ac.bbsrc.tgac.miso.core.data.PartitionQCType in project miso-lims by miso-lims.
the class HibernatePartitionQcTypeDaoIT method testGetByName.
@Test
public void testGetByName() throws IOException {
String desc = "Failed: Instrument problem";
PartitionQCType st = sut.getByDescription(desc);
assertNotNull(st);
assertEquals(desc, st.getDescription());
}
use of uk.ac.bbsrc.tgac.miso.core.data.PartitionQCType in project miso-lims by miso-lims.
the class HibernatePartitionQcTypeDaoIT method testCreate.
@Test
public void testCreate() throws IOException {
String desc = "New Type";
PartitionQCType st = new PartitionQCType();
st.setDescription(desc);
long savedId = sut.create(st);
clearSession();
PartitionQCType saved = (PartitionQCType) getSessionFactory().getCurrentSession().get(PartitionQCType.class, savedId);
assertEquals(desc, saved.getDescription());
}
Aggregations