Search in sources :

Example 1 with RestException

use of uk.ac.bbsrc.tgac.miso.webapp.controller.rest.RestException in project miso-lims by miso-lims.

the class AbstractTypeDataController method bulkCreate.

protected final ModelAndView bulkCreate(Integer quantity, ModelMap model, BiConsumer<ObjectNode, ObjectMapper> configurer) throws IOException {
    if (quantity == null || quantity <= 0) {
        throw new RestException("Must specify quantity to create", Status.BAD_REQUEST);
    }
    ObjectNode config = makeBaseConfig();
    config.put(PageMode.PROPERTY, PageMode.CREATE.getLabel());
    addHotConfig(config, mapper);
    if (configurer != null) {
        configurer.accept(config, mapper);
    }
    addHotAttributes("Create " + pluralType, config, PageMode.CREATE, model);
    model.put("input", mapper.writeValueAsString(Collections.nCopies(quantity, makeDto())));
    return new ModelAndView(newInterface ? NEW_JSP : OLD_JSP, model);
}
Also used : ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) RestException(uk.ac.bbsrc.tgac.miso.webapp.controller.rest.RestException) ModelAndView(org.springframework.web.servlet.ModelAndView)

Example 2 with RestException

use of uk.ac.bbsrc.tgac.miso.webapp.controller.rest.RestException in project miso-lims by miso-lims.

the class ConstantsController method rebuildConstants.

private void rebuildConstants() {
    try {
        ObjectMapper mapper = new ObjectMapper();
        ObjectNode node = mapper.createObjectNode();
        node.put("docsVersion", getDocsVersion());
        node.put("isDetailedSample", detailedSample);
        node.put("automaticBarcodes", autoGenerateIdBarcodes);
        node.put("boxScannerEnabled", boxScannerEnabled);
        node.put("newOptionSopUrl", newOptionSopUrl);
        final Collection<SampleValidRelationship> relationships = sampleValidRelationshipService.getAll();
        addJsonArray(mapper, node, "libraryDesigns", libraryDesignService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "libraryTypes", libraryTypeService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "librarySelections", librarySelectionService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "libraryStrategies", libraryStrategyService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "libraryDesignCodes", libraryDesignCodeService.list(), Dtos::asDto);
        Set<Long> activePlatforms = sequencerService.list().stream().filter(Instrument::isActive).map(sequencer -> sequencer.getInstrumentModel().getId()).collect(Collectors.toSet());
        addJsonArray(mapper, node, "instrumentModels", instrumentModelService.list(), platform -> {
            InstrumentModelDto dto = Dtos.asDto(platform);
            dto.setActive(activePlatforms.contains(platform.getId()));
            return dto;
        });
        addJsonArray(mapper, node, "kitDescriptors", kitService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "sampleClasses", sampleClassService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "sampleValidRelationships", relationships, Dtos::asDto);
        addJsonArray(mapper, node, "detailedQcStatuses", detailedQcStatusService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "subprojects", subprojectService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "labs", labService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "tissueOrigins", tissueOriginService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "tissueTypes", tissueTypeService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "tissueMaterials", tissueMaterialService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "tissuePieceTypes", tissuePieceTypeService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "stains", stainService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "targetedSequencings", targetedSequencingService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "samplePurposes", samplePurposeService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "sequencingParameters", sequencingParametersService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "printerBackends", Arrays.asList(Backend.values()), Dtos::asDto);
        addJsonArray(mapper, node, "printerDrivers", Arrays.asList(Driver.values()), Dtos::asDto);
        addJsonArray(mapper, node, "boxSizes", boxSizeService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "boxUses", boxUseService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "studyTypes", studyTypeService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "sampleCategories", SampleClass.CATEGORIES, Function.identity());
        createMap(mapper, node, "sampleSubcategories", SampleClass.SUBCATEGORIES);
        addJsonArray(mapper, node, "submissionAction", Arrays.asList(SubmissionActionType.values()), SubmissionActionType::name);
        addJsonArray(mapper, node, "containerModels", containerModelService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "poreVersions", containerService.listPoreVersions(), Dtos::asDto);
        addJsonArray(mapper, node, "spikeIns", librarySpikeInService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "attachmentCategories", attachmentCategoryService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "runPurposes", runPurposeService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "sequencingControlTypes", sequencingControlTypeService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "scientificNames", scientificNameService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "pipelines", pipelineService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "runLibraryQcStatuses", runLibraryQcStatusService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "worksetCategories", worksetCategoryService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "worksetStages", worksetStageService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "metrics", metricService.list(), MetricDto::from);
        addJsonArray(mapper, node, "metricSubcategories", metricSubcategoryService.list(), MetricSubcategoryDto::from);
        addJsonArray(mapper, node, "assays", assayService.list(), AssayDto::from);
        addJsonArray(mapper, node, "assayTests", assayTestService.list(), AssayTestDto::from);
        addJsonArray(mapper, node, "sampleSheetFormats", Arrays.asList(SampleSheet.values()), SampleSheet::name);
        Collection<IndexFamily> indexFamilies = indexFamilyService.list();
        addJsonArray(mapper, node, "indexFamilies", indexFamilies, Dtos::asDto);
        addJsonArray(mapper, node, "qcTypes", qcService.listQcTypes(), Dtos::asDto);
        addJsonArray(mapper, node, "qcTargets", Arrays.asList(QcTarget.values()), Dtos::asDto);
        addJsonArray(mapper, node, "concentrationUnits", Arrays.asList(ConcentrationUnit.values()), Dtos::asDto);
        addJsonArray(mapper, node, "volumeUnits", Arrays.asList(VolumeUnit.values()), Dtos::asDto);
        addJsonArray(mapper, node, "partitionQcTypes", partitionQcTypeService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "referenceGenomes", referenceGenomeService.list(), Dtos::asDto);
        addJsonArray(mapper, node, "spreadsheetFormats", Arrays.asList(SpreadSheetFormat.values()), Dtos::asDto);
        addJsonArray(mapper, node, "sampleSpreadsheets", Arrays.asList(SampleSpreadSheets.values()), Dtos::asDto);
        addJsonArray(mapper, node, "librarySpreadsheets", Arrays.asList(LibrarySpreadSheets.values()), Dtos::asDto);
        addJsonArray(mapper, node, "libraryAliquotSpreadsheets", Arrays.asList(LibraryAliquotSpreadSheets.values()), Dtos::asDto);
        addJsonArray(mapper, node, "poolSpreadsheets", Arrays.asList(PoolSpreadSheets.values()), Dtos::asDto);
        addJsonArray(mapper, node, "partitionSpreadsheets", Arrays.asList(PartitionSpreadsheets.values()), Dtos::asDto);
        addJsonArray(mapper, node, "runLibrarySpreadsheets", Arrays.asList(RunLibrarySpreadsheets.values()), Dtos::asDto);
        addJsonArray(mapper, node, "workflows", Arrays.asList(WorkflowName.values()), Dtos::asDto);
        addJsonArray(mapper, node, "printableFields", Arrays.asList(PrintableField.values()), PrintableField::name);
        ArrayNode platformTypes = node.putArray("platformTypes");
        Collection<PlatformType> activePlatformTypes = instrumentModelService.listActivePlatformTypes();
        for (PlatformType platformType : PlatformType.values()) {
            ObjectNode dto = platformTypes.addObject();
            dto.put("name", platformType.name());
            dto.put("key", platformType.getKey());
            dto.put("containerName", platformType.getContainerName());
            dto.put("active", activePlatformTypes.contains(platformType));
            dto.put("partitionName", platformType.getPartitionName());
            dto.put("pluralPartitionName", platformType.getPluralPartitionName());
        }
        ArrayNode sampleTypes = node.putArray("sampleTypes");
        for (SampleType sampleType : sampleTypeService.list()) {
            if (!sampleType.isArchived()) {
                sampleTypes.add(sampleType.getName());
            }
        }
        ArrayNode donorSexes = node.putArray("donorSexes");
        for (String label : DonorSex.getLabels()) {
            donorSexes.add(label);
        }
        ArrayNode consentLevels = node.putArray("consentLevels");
        for (ConsentLevel level : ConsentLevel.values()) {
            consentLevels.add(level.getLabel());
        }
        ArrayNode strStatuses = node.putArray("strStatuses");
        for (String label : StrStatus.getLabels()) {
            strStatuses.add(label);
        }
        ArrayNode dilutionFactors = node.putArray("dilutionFactors");
        for (String label : DilutionFactor.getLabels()) {
            dilutionFactors.add(label);
        }
        ArrayNode illuminaChemistry = node.putArray("illuminaChemistry");
        for (IlluminaChemistry chemistry : IlluminaChemistry.values()) {
            illuminaChemistry.add(chemistry.name());
        }
        addIlluminaExperimentTypes(node);
        addHealthTypes(node);
        addIlluminaWorkflowTypes(node);
        addInstrumentTypes(node);
        addDataManglingPolicies(node);
        addMetricCategories(node);
        addThresholdTypes(node);
        ObjectNode warningsNode = mapper.createObjectNode();
        warningsNode.put("consentRevoked", "CONSENT REVOKED");
        warningsNode.put("duplicateIndices", indexChecker.getErrorMismatchesMessage());
        warningsNode.put("nearDuplicateIndices", indexChecker.getWarningMismatchesMessage());
        warningsNode.put("lowQualityLibraries", "Low Quality Libraries");
        warningsNode.put("missingIndex", "MISSING INDEX");
        warningsNode.put("negativeVolume", "Negative Volume");
        node.set("warningMessages", warningsNode);
        node.put("errorEditDistance", indexChecker.getErrorMismatches());
        node.put("warningEditDistance", indexChecker.getWarningMismatches());
        node.put("genomeFolder", genomeFolder);
        // Save the regenerated file in cache.
        constantsJs = "Constants = " + mapper.writeValueAsString(node) + ";";
        constantsTimestamp.set(System.currentTimeMillis() / 1000.0);
    } catch (IOException e) {
        throw new RestException(e);
    }
}
Also used : UriComponentsBuilder(org.springframework.web.util.UriComponentsBuilder) Arrays(java.util.Arrays) LibraryAliquotSpreadSheets(uk.ac.bbsrc.tgac.miso.core.data.spreadsheet.LibraryAliquotSpreadSheets) ScheduledFuture(java.util.concurrent.ScheduledFuture) PoolSpreadSheets(uk.ac.bbsrc.tgac.miso.core.data.spreadsheet.PoolSpreadSheets) SampleSpreadSheets(uk.ac.bbsrc.tgac.miso.core.data.spreadsheet.SampleSpreadSheets) IlluminaWorkflowType(uk.ac.bbsrc.tgac.miso.core.data.type.IlluminaWorkflowType) Autowired(org.springframework.beans.factory.annotation.Autowired) SampleSheet(uk.ac.bbsrc.tgac.miso.core.util.SampleSheet) CacheControl(org.springframework.http.CacheControl) InstrumentType(uk.ac.bbsrc.tgac.miso.core.data.type.InstrumentType) Backend(uk.ac.bbsrc.tgac.miso.core.service.printing.Backend) MisoWebUtils.addJsonArray(uk.ac.bbsrc.tgac.miso.webapp.util.MisoWebUtils.addJsonArray) ThresholdType(uk.ac.bbsrc.tgac.miso.core.data.type.ThresholdType) Gauge(io.prometheus.client.Gauge) Map(java.util.Map) RestException(uk.ac.bbsrc.tgac.miso.webapp.controller.rest.RestException) uk.ac.bbsrc.tgac.miso.dto(uk.ac.bbsrc.tgac.miso.dto) SubmissionActionType(uk.ac.bbsrc.tgac.miso.core.data.type.SubmissionActionType) Collection(java.util.Collection) Resource(javax.annotation.Resource) Set(java.util.Set) Collectors(java.util.stream.Collectors) IndexChecker(uk.ac.bbsrc.tgac.miso.core.util.IndexChecker) Executors(java.util.concurrent.Executors) RunLibrarySpreadsheets(uk.ac.bbsrc.tgac.miso.core.data.spreadsheet.RunLibrarySpreadsheets) ConsentLevel(uk.ac.bbsrc.tgac.miso.core.data.type.ConsentLevel) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) List(java.util.List) StrStatus(uk.ac.bbsrc.tgac.miso.core.data.type.StrStatus) DilutionFactor(uk.ac.bbsrc.tgac.miso.core.data.type.DilutionFactor) LibrarySpreadSheets(uk.ac.bbsrc.tgac.miso.core.data.spreadsheet.LibrarySpreadSheets) Driver(uk.ac.bbsrc.tgac.miso.core.service.printing.Driver) IlluminaChemistry(uk.ac.bbsrc.tgac.miso.core.data.IlluminaChemistry) SampleClass(uk.ac.bbsrc.tgac.miso.core.data.SampleClass) PartitionSpreadsheets(uk.ac.bbsrc.tgac.miso.core.data.spreadsheet.PartitionSpreadsheets) MetricCategory(uk.ac.bbsrc.tgac.miso.core.data.type.MetricCategory) SampleValidRelationship(uk.ac.bbsrc.tgac.miso.core.data.SampleValidRelationship) DonorSex(uk.ac.bbsrc.tgac.miso.core.data.SampleIdentity.DonorSex) HealthType(uk.ac.bbsrc.tgac.miso.core.data.type.HealthType) Scheduled(org.springframework.scheduling.annotation.Scheduled) Controller(org.springframework.stereotype.Controller) InstrumentDataManglingPolicy(uk.ac.bbsrc.tgac.miso.core.data.InstrumentDataManglingPolicy) Function(java.util.function.Function) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) Value(org.springframework.beans.factory.annotation.Value) Version(uk.ac.bbsrc.tgac.miso.Version) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) GetMapping(org.springframework.web.bind.annotation.GetMapping) VolumeUnit(uk.ac.bbsrc.tgac.miso.core.data.VolumeUnit) IndexFamily(uk.ac.bbsrc.tgac.miso.core.data.IndexFamily) ConcentrationUnit(uk.ac.bbsrc.tgac.miso.core.data.ConcentrationUnit) HttpServletResponse(javax.servlet.http.HttpServletResponse) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) IOException(java.io.IOException) ResponseBody(org.springframework.web.bind.annotation.ResponseBody) uk.ac.bbsrc.tgac.miso.core.service(uk.ac.bbsrc.tgac.miso.core.service) TimeUnit(java.util.concurrent.TimeUnit) SampleType(uk.ac.bbsrc.tgac.miso.core.data.SampleType) WorkflowName(uk.ac.bbsrc.tgac.miso.core.data.workflow.Workflow.WorkflowName) SpreadSheetFormat(uk.ac.bbsrc.tgac.miso.core.data.spreadsheet.SpreadSheetFormat) PrintableField(uk.ac.bbsrc.tgac.miso.core.service.printing.PrintableField) QcTarget(uk.ac.bbsrc.tgac.miso.core.data.qc.QcTarget) PlatformType(uk.ac.bbsrc.tgac.miso.core.data.type.PlatformType) ServletContext(javax.servlet.ServletContext) ResponseEntity(org.springframework.http.ResponseEntity) IlluminaExperiment(uk.ac.bbsrc.tgac.miso.core.util.IlluminaExperiment) Instrument(uk.ac.bbsrc.tgac.miso.core.data.Instrument) IlluminaChemistry(uk.ac.bbsrc.tgac.miso.core.data.IlluminaChemistry) SubmissionActionType(uk.ac.bbsrc.tgac.miso.core.data.type.SubmissionActionType) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) ConsentLevel(uk.ac.bbsrc.tgac.miso.core.data.type.ConsentLevel) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) SampleSheet(uk.ac.bbsrc.tgac.miso.core.util.SampleSheet) RestException(uk.ac.bbsrc.tgac.miso.webapp.controller.rest.RestException) PrintableField(uk.ac.bbsrc.tgac.miso.core.service.printing.PrintableField) IOException(java.io.IOException) SampleValidRelationship(uk.ac.bbsrc.tgac.miso.core.data.SampleValidRelationship) IndexFamily(uk.ac.bbsrc.tgac.miso.core.data.IndexFamily) Instrument(uk.ac.bbsrc.tgac.miso.core.data.Instrument) PlatformType(uk.ac.bbsrc.tgac.miso.core.data.type.PlatformType) SampleType(uk.ac.bbsrc.tgac.miso.core.data.SampleType)

Example 3 with RestException

use of uk.ac.bbsrc.tgac.miso.webapp.controller.rest.RestException in project miso-lims by miso-lims.

the class AsyncOperationManager method validateBulkUpdate.

private <T, R extends Identifiable> List<R> validateBulkUpdate(String type, List<T> dtos, Function<T, R> toObject, ThrowingFunction<Long, R, IOException> getItem) throws IOException {
    List<R> items = new ArrayList<>();
    for (T dto : dtos) {
        if (dto == null) {
            throw new RestException(String.format("Cannot save null %s", type), Status.BAD_REQUEST);
        }
        R item = toObject.apply(dto);
        if (!item.isSaved()) {
            throw new RestException("Cannot update unsaved item", Status.BAD_REQUEST);
        } else if (getItem.apply(item.getId()) == null) {
            throw new RestException(String.format("No %s found with ID: %d", type, item.getId()), Status.BAD_REQUEST);
        }
        items.add(item);
    }
    return items;
}
Also used : ArrayList(java.util.ArrayList) RestException(uk.ac.bbsrc.tgac.miso.webapp.controller.rest.RestException)

Example 4 with RestException

use of uk.ac.bbsrc.tgac.miso.webapp.controller.rest.RestException in project miso-lims by miso-lims.

the class EditSampleController method createBulkSamples.

/**
 * Used to create new samples.
 * <ul>
 * <li>Detailed Sample: create new samples of a given sample class. Root identities will be found or created.</li>
 * <li>Plain Sample: create new samples.</li>
 * </ul>
 * Sends Dtos objects which will then be used for editing in grid.
 */
@PostMapping(value = "/bulk/new")
public ModelAndView createBulkSamples(@RequestParam Map<String, String> form, ModelMap model) throws IOException {
    Integer quantity = getIntegerInput("quantity", form, true);
    String targetCategory = getStringInput("targetCategory", form, isDetailedSampleEnabled());
    Long projectId = getLongInput("projectId", form, false);
    Long boxId = getLongInput("boxId", form, false);
    if (quantity == null || quantity <= 0)
        throw new RestException("Must specify quantity of samples to create", Status.BAD_REQUEST);
    final SampleDto template;
    if (isDetailedSampleEnabled()) {
        // create new detailed samples
        confirmClassesExist(targetCategory);
        template = getCorrectDetailedSampleDto(targetCategory);
    } else {
        template = new SampleDto();
    }
    final Project project;
    if (projectId == null) {
        project = null;
    } else {
        project = projectService.get(projectId);
        template.setProjectId(projectId);
    }
    if (boxId != null) {
        template.setBox(Dtos.asDto(boxService.get(boxId), true));
    }
    Set<Group> recipientGroups = authorizationManager.getCurrentUser().getGroups();
    return new BulkCreateSampleBackend(template.getClass(), template, quantity, project, targetCategory, recipientGroups).create(model);
}
Also used : Project(uk.ac.bbsrc.tgac.miso.core.data.Project) Group(com.eaglegenomics.simlims.core.Group) RestException(uk.ac.bbsrc.tgac.miso.webapp.controller.rest.RestException) DetailedSampleDto(uk.ac.bbsrc.tgac.miso.dto.DetailedSampleDto) SampleDto(uk.ac.bbsrc.tgac.miso.dto.SampleDto) PostMapping(org.springframework.web.bind.annotation.PostMapping)

Aggregations

RestException (uk.ac.bbsrc.tgac.miso.webapp.controller.rest.RestException)4 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)2 Group (com.eaglegenomics.simlims.core.Group)1 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 ArrayNode (com.fasterxml.jackson.databind.node.ArrayNode)1 Gauge (io.prometheus.client.Gauge)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Collection (java.util.Collection)1 List (java.util.List)1 Map (java.util.Map)1 Set (java.util.Set)1 Executors (java.util.concurrent.Executors)1 ScheduledExecutorService (java.util.concurrent.ScheduledExecutorService)1 ScheduledFuture (java.util.concurrent.ScheduledFuture)1 TimeUnit (java.util.concurrent.TimeUnit)1 Function (java.util.function.Function)1 Collectors (java.util.stream.Collectors)1 Resource (javax.annotation.Resource)1