use of uk.ac.bbsrc.tgac.miso.core.data.type.PlatformType in project miso-lims by miso-lims.
the class Dtos method to.
public static RunPartitionAliquot to(@Nonnull RunPartitionAliquotDto from) {
RunPartitionAliquot to = new RunPartitionAliquot();
PlatformType platform = PlatformType.valueOf(from.getPlatformType());
setObject(to::setRun, platform::createRun, from.getRunId());
setObject(to::setPartition, PartitionImpl::new, from.getPartitionId());
setObject(to::setAliquot, LibraryAliquot::new, from.getAliquotId());
setObject(to::setPurpose, RunPurpose::new, from.getRunPurposeId());
setObject(to::setQcStatus, RunLibraryQcStatus::new, from.getQcStatusId());
setString(to::setQcNote, from.getQcNote());
setBoolean(to::setDataReview, from.getDataReview(), true);
return to;
}
use of uk.ac.bbsrc.tgac.miso.core.data.type.PlatformType in project miso-lims by miso-lims.
the class PoolRestController method getPoolsByPlatform.
@GetMapping(value = "platform/{platform}", produces = "application/json")
@ResponseBody
public List<PoolDto> getPoolsByPlatform(@PathVariable("platform") String platform, HttpServletRequest request, HttpServletResponse response, UriComponentsBuilder uriBuilder) throws IOException {
if (PlatformType.getKeys().contains(platform)) {
Collection<Pool> pools = new ArrayList<>();
PlatformType platformType = PlatformType.get(platform);
pools = poolService.list(0, 0, false, null, PaginationFilter.platformType(platformType));
return serializePools(pools, uriBuilder);
} else {
throw new RestException("Request must specify a platform");
}
}
use of uk.ac.bbsrc.tgac.miso.core.data.type.PlatformType in project miso-lims by miso-lims.
the class HibernateSequencingContainerModelDaoIT method testGetByPlatformAndBarcode.
@Test
public void testGetByPlatformAndBarcode() throws Exception {
PlatformType platform = PlatformType.ILLUMINA;
String barcode = "12345678";
SequencingContainerModel model = dao.getByPlatformAndBarcode(platform, barcode);
assertNotNull(model);
assertEquals(platform, model.getPlatformType());
assertEquals(barcode, model.getIdentificationBarcode());
}
use of uk.ac.bbsrc.tgac.miso.core.data.type.PlatformType 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);
}
}
use of uk.ac.bbsrc.tgac.miso.core.data.type.PlatformType in project miso-lims by miso-lims.
the class DefaultPoolOrderService method collectValidationErrors.
@Override
protected void collectValidationErrors(PoolOrder object, PoolOrder beforeChange, List<ValidationError> errors) throws IOException {
if (object.getPool() != null || object.getSequencingOrder() != null) {
// order should be fulfilled
if (object.isDraft()) {
errors.add(new ValidationError("draft", "Fulfilled order cannot be a draft"));
}
if (object.getPool() == null) {
errors.add(new ValidationError("poolId", "Pool must be provided if a sequencing order is linked"));
} else {
for (OrderLibraryAliquot orderAli : object.getOrderLibraryAliquots()) {
if (object.getPool().getPoolContents().stream().map(PoolElement::getAliquot).noneMatch(poolElement -> {
if (poolElement.getId() == orderAli.getAliquot().getId()) {
return true;
}
for (ParentAliquot parent = poolElement.getParentAliquot(); parent != null; parent = parent.getParentAliquot()) {
if (parent.getId() == orderAli.getAliquot().getId()) {
return true;
}
}
return false;
})) {
errors.add(new ValidationError("Pool does not contain all of the required aliquots"));
break;
}
}
if (object.getSequencingOrder() != null) {
SequencingOrder seqOrder = object.getSequencingOrder();
if (seqOrder.getPurpose().getId() != object.getPurpose().getId() || seqOrder.getSequencingParameter().getId() != object.getParameters().getId() || !seqOrder.getPartitions().equals(object.getPartitions()) || seqOrder.getPool().getId() != object.getPool().getId() || (object.getContainerModel() != null && (seqOrder.getContainerModel() == null || seqOrder.getContainerModel().getId() != object.getContainerModel().getId()))) {
errors.add(new ValidationError("Sequencing order does not match the pool order"));
}
}
}
preventFulfilledChange("partitions", PoolOrder::getPartitions, object, beforeChange, errors);
preventFulfilledChange("parametersId", PoolOrder::getParameters, object, beforeChange, errors);
preventFulfilledChange("containerModelId", PoolOrder::getContainerModel, object, beforeChange, errors);
preventFulfilledChange("description", PoolOrder::getDescription, object, beforeChange, errors);
preventFulfilledChange("alias", PoolOrder::getAlias, object, beforeChange, errors);
preventFulfilledChange("purposeId", PoolOrder::getPurpose, object, beforeChange, errors);
if (!allMatch(object.getOrderLibraryAliquots(), beforeChange.getOrderLibraryAliquots())) {
errors.add(new ValidationError("Aliquots cannot be changed after the order is fulfilled"));
}
}
// if any sequencing requirements are specified, all are required
if (object.getContainerModel() != null || object.getParameters() != null || object.getPartitions() != null) {
// exception: container model not required for legacy orders (from before container model was added to orders)
if ((beforeChange == null || beforeChange.getContainerModel() != null) && object.getContainerModel() == null) {
errors.add(ValidationUtils.makeNoNullError("containerModelId"));
}
if (object.getParameters() == null) {
errors.add(ValidationUtils.makeNoNullError("parametersId"));
}
if (object.getPartitions() == null) {
errors.add(ValidationUtils.makeNoNullError("partitions"));
}
}
// Container model and seq params must be linked to same instrument model
if (object.getContainerModel() != null && object.getParameters().getInstrumentModel().getContainerModels().stream().noneMatch(model -> model.getId() == object.getContainerModel().getId())) {
errors.add(new ValidationError("containerModelId", "Not compatible with the selected sequencing parameters"));
}
PlatformType orderPlatform = object.getParameters() == null ? null : object.getParameters().getInstrumentModel().getPlatformType();
for (OrderLibraryAliquot orderAli : object.getOrderLibraryAliquots()) {
PlatformType libPlatform = orderAli.getAliquot().getLibrary().getPlatformType();
if (orderPlatform == null) {
orderPlatform = libPlatform;
} else if (!libPlatform.equals(orderPlatform)) {
errors.add(new ValidationError("Platform for all aliquots and sequencing parameters (if specified) must match"));
break;
}
}
if (!object.isDraft() && object.getOrderLibraryAliquots().isEmpty()) {
errors.add(new ValidationError("Non-draft order must include at least one library aliquot"));
}
if (strictPools) {
validateNoNewDuplicateIndices(object, beforeChange, errors);
}
}
Aggregations