Search in sources :

Example 6 with PartitionQCType

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");
    }
}
Also used : AuthorizationManager(uk.ac.bbsrc.tgac.miso.core.security.AuthorizationManager) Date(java.util.Date) DetailedQcStatus(uk.ac.bbsrc.tgac.miso.core.data.DetailedQcStatus) Autowired(org.springframework.beans.factory.annotation.Autowired) DetailedQcItem(uk.ac.bbsrc.tgac.miso.core.data.qc.DetailedQcItem) RunLibraryQcStatusService(uk.ac.bbsrc.tgac.miso.core.service.RunLibraryQcStatusService) RunPartition(uk.ac.bbsrc.tgac.miso.core.data.RunPartition) LibraryAliquotService(uk.ac.bbsrc.tgac.miso.core.service.LibraryAliquotService) LibraryAliquot(uk.ac.bbsrc.tgac.miso.core.data.impl.LibraryAliquot) DetailedQcStatusService(uk.ac.bbsrc.tgac.miso.core.service.DetailedQcStatusService) Run(uk.ac.bbsrc.tgac.miso.core.data.Run) RunPartitionAliquot(uk.ac.bbsrc.tgac.miso.core.data.RunPartitionAliquot) Sample(uk.ac.bbsrc.tgac.miso.core.data.Sample) Service(org.springframework.stereotype.Service) Library(uk.ac.bbsrc.tgac.miso.core.data.Library) PartitionQCType(uk.ac.bbsrc.tgac.miso.core.data.PartitionQCType) PoolElement(uk.ac.bbsrc.tgac.miso.core.data.impl.view.PoolElement) RunPartitionService(uk.ac.bbsrc.tgac.miso.core.service.RunPartitionService) QcStatusService(uk.ac.bbsrc.tgac.miso.core.service.QcStatusService) RunPartitionAliquotService(uk.ac.bbsrc.tgac.miso.core.service.RunPartitionAliquotService) ValidationException(uk.ac.bbsrc.tgac.miso.core.service.exception.ValidationException) SampleService(uk.ac.bbsrc.tgac.miso.core.service.SampleService) QcStatusUpdate(uk.ac.bbsrc.tgac.miso.core.data.impl.view.qc.QcStatusUpdate) LibraryService(uk.ac.bbsrc.tgac.miso.core.service.LibraryService) ListLibraryAliquotView(uk.ac.bbsrc.tgac.miso.core.data.impl.view.ListLibraryAliquotView) Collection(java.util.Collection) IOException(java.io.IOException) Partition(uk.ac.bbsrc.tgac.miso.core.data.Partition) RunPosition(uk.ac.bbsrc.tgac.miso.core.data.impl.RunPosition) PartitionQcTypeService(uk.ac.bbsrc.tgac.miso.core.service.PartitionQcTypeService) RunLibraryQcStatus(uk.ac.bbsrc.tgac.miso.core.data.RunLibraryQcStatus) PoolService(uk.ac.bbsrc.tgac.miso.core.service.PoolService) RunService(uk.ac.bbsrc.tgac.miso.core.service.RunService) Transactional(org.springframework.transaction.annotation.Transactional) EntityType(uk.ac.bbsrc.tgac.miso.core.data.Boxable.EntityType) Pool(uk.ac.bbsrc.tgac.miso.core.data.Pool) RunPartition(uk.ac.bbsrc.tgac.miso.core.data.RunPartition) Partition(uk.ac.bbsrc.tgac.miso.core.data.Partition) ValidationException(uk.ac.bbsrc.tgac.miso.core.service.exception.ValidationException) ListLibraryAliquotView(uk.ac.bbsrc.tgac.miso.core.data.impl.view.ListLibraryAliquotView) Sample(uk.ac.bbsrc.tgac.miso.core.data.Sample) RunPartitionAliquot(uk.ac.bbsrc.tgac.miso.core.data.RunPartitionAliquot) Run(uk.ac.bbsrc.tgac.miso.core.data.Run) LibraryAliquot(uk.ac.bbsrc.tgac.miso.core.data.impl.LibraryAliquot) RunLibraryQcStatus(uk.ac.bbsrc.tgac.miso.core.data.RunLibraryQcStatus) Date(java.util.Date) PartitionQCType(uk.ac.bbsrc.tgac.miso.core.data.PartitionQCType) PoolElement(uk.ac.bbsrc.tgac.miso.core.data.impl.view.PoolElement) RunPartition(uk.ac.bbsrc.tgac.miso.core.data.RunPartition) Pool(uk.ac.bbsrc.tgac.miso.core.data.Pool) Library(uk.ac.bbsrc.tgac.miso.core.data.Library)

Example 7 with PartitionQCType

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));
}
Also used : RunPurposeService(uk.ac.bbsrc.tgac.miso.core.service.RunPurposeService) PathVariable(org.springframework.web.bind.annotation.PathVariable) UriComponentsBuilder(org.springframework.web.util.UriComponentsBuilder) RequestParam(org.springframework.web.bind.annotation.RequestParam) SampleTissueProcessing(uk.ac.bbsrc.tgac.miso.core.data.SampleTissueProcessing) PaginationFilter(uk.ac.bbsrc.tgac.miso.core.util.PaginationFilter) DataTablesResponseDto(uk.ac.bbsrc.tgac.miso.dto.DataTablesResponseDto) Autowired(org.springframework.beans.factory.annotation.Autowired) SampleSheet(uk.ac.bbsrc.tgac.miso.core.util.SampleSheet) RunPartition(uk.ac.bbsrc.tgac.miso.core.data.RunPartition) Dtos(uk.ac.bbsrc.tgac.miso.dto.Dtos) RunPartitionDto(uk.ac.bbsrc.tgac.miso.dto.ExperimentDto.RunPartitionDto) PutMapping(org.springframework.web.bind.annotation.PutMapping) Sample(uk.ac.bbsrc.tgac.miso.core.data.Sample) Map(java.util.Map) SequencerPartitionContainer(uk.ac.bbsrc.tgac.miso.core.data.SequencerPartitionContainer) PartitionQCType(uk.ac.bbsrc.tgac.miso.core.data.PartitionQCType) RunPartitionAliquotService(uk.ac.bbsrc.tgac.miso.core.service.RunPartitionAliquotService) ValidationException(uk.ac.bbsrc.tgac.miso.core.service.exception.ValidationException) PostMapping(org.springframework.web.bind.annotation.PostMapping) SampleService(uk.ac.bbsrc.tgac.miso.core.service.SampleService) PoolDto(uk.ac.bbsrc.tgac.miso.dto.PoolDto) AdvancedSearchParser(uk.ac.bbsrc.tgac.miso.webapp.controller.component.AdvancedSearchParser) HttpHeaders(org.springframework.http.HttpHeaders) ListLibraryAliquotView(uk.ac.bbsrc.tgac.miso.core.data.impl.view.ListLibraryAliquotView) Collection(java.util.Collection) MediaType(org.springframework.http.MediaType) ExperimentDto(uk.ac.bbsrc.tgac.miso.dto.ExperimentDto) Partition(uk.ac.bbsrc.tgac.miso.core.data.Partition) Collectors(java.util.stream.Collectors) IndexChecker(uk.ac.bbsrc.tgac.miso.core.util.IndexChecker) RunLibrarySpreadsheets(uk.ac.bbsrc.tgac.miso.core.data.spreadsheet.RunLibrarySpreadsheets) Objects(java.util.Objects) LibraryDto(uk.ac.bbsrc.tgac.miso.dto.LibraryDto) List(java.util.List) HttpEntity(org.springframework.http.HttpEntity) MisoWebUtils(uk.ac.bbsrc.tgac.miso.webapp.util.MisoWebUtils) Stream(java.util.stream.Stream) SampleStock(uk.ac.bbsrc.tgac.miso.core.data.SampleStock) RunService(uk.ac.bbsrc.tgac.miso.core.service.RunService) Pair(uk.ac.bbsrc.tgac.miso.core.data.Pair) LibraryAliquotDto(uk.ac.bbsrc.tgac.miso.dto.LibraryAliquotDto) InstrumentModelDto(uk.ac.bbsrc.tgac.miso.dto.InstrumentModelDto) InstrumentModel(uk.ac.bbsrc.tgac.miso.core.data.InstrumentModel) SampleIdentity(uk.ac.bbsrc.tgac.miso.core.data.SampleIdentity) StudyDto(uk.ac.bbsrc.tgac.miso.dto.StudyDto) User(com.eaglegenomics.simlims.core.User) RunPurpose(uk.ac.bbsrc.tgac.miso.core.data.impl.RunPurpose) AuthorizationManager(uk.ac.bbsrc.tgac.miso.core.security.AuthorizationManager) RequestMapping(org.springframework.web.bind.annotation.RequestMapping) Controller(org.springframework.stereotype.Controller) LibraryAliquotService(uk.ac.bbsrc.tgac.miso.core.service.LibraryAliquotService) ArrayList(java.util.ArrayList) RunDto(uk.ac.bbsrc.tgac.miso.dto.run.RunDto) Value(org.springframework.beans.factory.annotation.Value) RequestBody(org.springframework.web.bind.annotation.RequestBody) LibraryAliquot(uk.ac.bbsrc.tgac.miso.core.data.impl.LibraryAliquot) HttpServletRequest(javax.servlet.http.HttpServletRequest) SampleDto(uk.ac.bbsrc.tgac.miso.dto.SampleDto) Run(uk.ac.bbsrc.tgac.miso.core.data.Run) RunPartitionAliquot(uk.ac.bbsrc.tgac.miso.core.data.RunPartitionAliquot) RunPartitionAliquotDto(uk.ac.bbsrc.tgac.miso.dto.RunPartitionAliquotDto) LimsUtils(uk.ac.bbsrc.tgac.miso.core.util.LimsUtils) Library(uk.ac.bbsrc.tgac.miso.core.data.Library) ContainerService(uk.ac.bbsrc.tgac.miso.core.service.ContainerService) GetMapping(org.springframework.web.bind.annotation.GetMapping) ResponseStatus(org.springframework.web.bind.annotation.ResponseStatus) PoolElement(uk.ac.bbsrc.tgac.miso.core.data.impl.view.PoolElement) RunPartitionService(uk.ac.bbsrc.tgac.miso.core.service.RunPartitionService) Status(javax.ws.rs.core.Response.Status) SampleAliquot(uk.ac.bbsrc.tgac.miso.core.data.SampleAliquot) SampleTissue(uk.ac.bbsrc.tgac.miso.core.data.SampleTissue) LibraryService(uk.ac.bbsrc.tgac.miso.core.service.LibraryService) WhineyFunction(uk.ac.bbsrc.tgac.miso.core.util.WhineyFunction) HttpServletResponse(javax.servlet.http.HttpServletResponse) SpreadsheetRequest(uk.ac.bbsrc.tgac.miso.dto.SpreadsheetRequest) IOException(java.io.IOException) ResponseBody(org.springframework.web.bind.annotation.ResponseBody) WhineyConsumer(uk.ac.bbsrc.tgac.miso.core.util.WhineyConsumer) ContainerDto(uk.ac.bbsrc.tgac.miso.dto.ContainerDto) Consumer(java.util.function.Consumer) HttpStatus(org.springframework.http.HttpStatus) RunPosition(uk.ac.bbsrc.tgac.miso.core.data.impl.RunPosition) ExperimentService(uk.ac.bbsrc.tgac.miso.core.service.ExperimentService) PartitionQcTypeService(uk.ac.bbsrc.tgac.miso.core.service.PartitionQcTypeService) PlatformType(uk.ac.bbsrc.tgac.miso.core.data.type.PlatformType) PaginatedDataSource(uk.ac.bbsrc.tgac.miso.core.util.PaginatedDataSource) PartitionDto(uk.ac.bbsrc.tgac.miso.dto.PartitionDto) Pool(uk.ac.bbsrc.tgac.miso.core.data.Pool) RunPartition(uk.ac.bbsrc.tgac.miso.core.data.RunPartition) Run(uk.ac.bbsrc.tgac.miso.core.data.Run) PartitionQCType(uk.ac.bbsrc.tgac.miso.core.data.PartitionQCType) PostMapping(org.springframework.web.bind.annotation.PostMapping) ResponseStatus(org.springframework.web.bind.annotation.ResponseStatus)

Example 8 with PartitionQCType

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());
}
Also used : RunPurpose(uk.ac.bbsrc.tgac.miso.core.data.impl.RunPurpose) User(com.eaglegenomics.simlims.core.User) UserImpl(uk.ac.bbsrc.tgac.miso.core.data.impl.UserImpl) RunPartition(uk.ac.bbsrc.tgac.miso.core.data.RunPartition) PartitionQCType(uk.ac.bbsrc.tgac.miso.core.data.PartitionQCType) Test(org.junit.Test) AbstractDAOTest(uk.ac.bbsrc.tgac.miso.AbstractDAOTest)

Example 9 with PartitionQCType

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());
}
Also used : PartitionQCType(uk.ac.bbsrc.tgac.miso.core.data.PartitionQCType) AbstractDAOTest(uk.ac.bbsrc.tgac.miso.AbstractDAOTest) Test(org.junit.Test)

Example 10 with PartitionQCType

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());
}
Also used : PartitionQCType(uk.ac.bbsrc.tgac.miso.core.data.PartitionQCType) AbstractDAOTest(uk.ac.bbsrc.tgac.miso.AbstractDAOTest) Test(org.junit.Test)

Aggregations

PartitionQCType (uk.ac.bbsrc.tgac.miso.core.data.PartitionQCType)10 Test (org.junit.Test)6 AbstractDAOTest (uk.ac.bbsrc.tgac.miso.AbstractDAOTest)6 RunPartition (uk.ac.bbsrc.tgac.miso.core.data.RunPartition)3 User (com.eaglegenomics.simlims.core.User)2 IOException (java.io.IOException)2 Collection (java.util.Collection)2 Autowired (org.springframework.beans.factory.annotation.Autowired)2 Library (uk.ac.bbsrc.tgac.miso.core.data.Library)2 Partition (uk.ac.bbsrc.tgac.miso.core.data.Partition)2 Pool (uk.ac.bbsrc.tgac.miso.core.data.Pool)2 Run (uk.ac.bbsrc.tgac.miso.core.data.Run)2 RunPartitionAliquot (uk.ac.bbsrc.tgac.miso.core.data.RunPartitionAliquot)2 Sample (uk.ac.bbsrc.tgac.miso.core.data.Sample)2 LibraryAliquot (uk.ac.bbsrc.tgac.miso.core.data.impl.LibraryAliquot)2 RunPosition (uk.ac.bbsrc.tgac.miso.core.data.impl.RunPosition)2 RunPurpose (uk.ac.bbsrc.tgac.miso.core.data.impl.RunPurpose)2 ListLibraryAliquotView (uk.ac.bbsrc.tgac.miso.core.data.impl.view.ListLibraryAliquotView)2 PoolElement (uk.ac.bbsrc.tgac.miso.core.data.impl.view.PoolElement)2 AuthorizationManager (uk.ac.bbsrc.tgac.miso.core.security.AuthorizationManager)2