diff --git a/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/ValidationException.java b/project-management/src/main/java/life/qbic/projectmanagement/application/ValidationException.java similarity index 88% rename from project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/ValidationException.java rename to project-management/src/main/java/life/qbic/projectmanagement/application/ValidationException.java index 4f9c7fe5ae..ad4ed3fc75 100644 --- a/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/ValidationException.java +++ b/project-management/src/main/java/life/qbic/projectmanagement/application/ValidationException.java @@ -1,4 +1,4 @@ -package life.qbic.projectmanagement.application.measurement.validation; +package life.qbic.projectmanagement.application; public class ValidationException extends RuntimeException { diff --git a/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/ValidationResult.java b/project-management/src/main/java/life/qbic/projectmanagement/application/ValidationResult.java similarity index 97% rename from project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/ValidationResult.java rename to project-management/src/main/java/life/qbic/projectmanagement/application/ValidationResult.java index 6c3676d8ac..ce6a412058 100644 --- a/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/ValidationResult.java +++ b/project-management/src/main/java/life/qbic/projectmanagement/application/ValidationResult.java @@ -1,4 +1,4 @@ -package life.qbic.projectmanagement.application.measurement.validation; +package life.qbic.projectmanagement.application; import java.util.ArrayList; import java.util.Collection; diff --git a/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementNGSValidator.java b/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementNGSValidator.java index 5d6346441e..631fa11fa0 100644 --- a/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementNGSValidator.java +++ b/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementNGSValidator.java @@ -10,6 +10,8 @@ import java.util.regex.Pattern; import life.qbic.logging.api.Logger; import life.qbic.projectmanagement.application.ProjectInformationService; +import life.qbic.projectmanagement.application.ValidationException; +import life.qbic.projectmanagement.application.ValidationResult; import life.qbic.projectmanagement.application.measurement.MeasurementService; import life.qbic.projectmanagement.application.measurement.NGSMeasurementMetadata; import life.qbic.projectmanagement.application.ontology.TerminologyService; diff --git a/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementProteomicsValidator.java b/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementProteomicsValidator.java index c83caec572..8d71b2dbb0 100644 --- a/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementProteomicsValidator.java +++ b/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementProteomicsValidator.java @@ -9,6 +9,8 @@ import java.util.regex.Pattern; import life.qbic.logging.api.Logger; import life.qbic.projectmanagement.application.ProjectInformationService; +import life.qbic.projectmanagement.application.ValidationException; +import life.qbic.projectmanagement.application.ValidationResult; import life.qbic.projectmanagement.application.measurement.MeasurementService; import life.qbic.projectmanagement.application.measurement.ProteomicsMeasurementMetadata; import life.qbic.projectmanagement.application.ontology.TerminologyService; diff --git a/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementValidationService.java b/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementValidationService.java index fb26627e74..20f42e009c 100644 --- a/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementValidationService.java +++ b/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementValidationService.java @@ -3,6 +3,7 @@ import java.util.Collection; import java.util.Optional; import java.util.concurrent.CompletableFuture; +import life.qbic.projectmanagement.application.ValidationResult; import life.qbic.projectmanagement.application.measurement.NGSMeasurementMetadata; import life.qbic.projectmanagement.application.measurement.ProteomicsMeasurementMetadata; import life.qbic.projectmanagement.domain.model.project.ProjectId; diff --git a/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementValidator.java b/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementValidator.java index 284f15ab6d..349a884511 100644 --- a/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementValidator.java +++ b/project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementValidator.java @@ -1,5 +1,6 @@ package life.qbic.projectmanagement.application.measurement.validation; +import life.qbic.projectmanagement.application.ValidationResult; import life.qbic.projectmanagement.application.measurement.MeasurementMetadata; import life.qbic.projectmanagement.domain.model.project.ProjectId; diff --git a/user-interface/src/main/java/life/qbic/datamanager/parser/PropertyToString.java b/project-management/src/main/java/life/qbic/projectmanagement/application/sample/PropertyConversion.java similarity index 82% rename from user-interface/src/main/java/life/qbic/datamanager/parser/PropertyToString.java rename to project-management/src/main/java/life/qbic/projectmanagement/application/sample/PropertyConversion.java index a59e30ba0b..74d2ef5e40 100644 --- a/user-interface/src/main/java/life/qbic/datamanager/parser/PropertyToString.java +++ b/project-management/src/main/java/life/qbic/projectmanagement/application/sample/PropertyConversion.java @@ -1,4 +1,4 @@ -package life.qbic.datamanager.parser; +package life.qbic.projectmanagement.application.sample; import java.util.ArrayList; import java.util.List; @@ -15,7 +15,7 @@ * * @since 1.5.0 */ -public class PropertyToString { +public class PropertyConversion { private static final String CONDITION_VARIABLE_LEVEL_UNIT_TEMPLATE = "%s: %s %s"; // : [unit] @@ -28,7 +28,7 @@ public class PropertyToString { *

* In its current implementation, the String representation results into a * ;-separated concatenation of {@link VariableLevel}. See - * {@link PropertyToString#variableLevel(VariableLevel)} for more details. + * {@link PropertyConversion#toString(VariableLevel)} for more details. *

* Example: a condition with the two variable levels size: 20 cm and hue: * blue will result in: @@ -43,11 +43,11 @@ public class PropertyToString { * @return the String representation * @since 1.5.0 */ - public static String condition(Condition condition) { + public static String toString(Condition condition) { Objects.requireNonNull(condition); List stringValues = new ArrayList<>(); condition.getVariableLevels() - .forEach(variableLevel -> stringValues.add(variableLevel(variableLevel))); + .forEach(variableLevel -> stringValues.add(toString(variableLevel))); return String.join("; ", stringValues); } @@ -62,7 +62,7 @@ public static String condition(Condition condition) { * @return the String representation of the variable level * @since 1.5.0 */ - public static String variableLevel(VariableLevel variableLevel) { + public static String toString(VariableLevel variableLevel) { Objects.requireNonNull(variableLevel); if (variableLevel.experimentalValue().unit().isPresent()) { return CONDITION_VARIABLE_LEVEL_UNIT_TEMPLATE.formatted(variableLevel.variableName().value(), @@ -89,8 +89,19 @@ public static String variableLevel(VariableLevel variableLevel) { * @return the String representation of the ontology term * @since 1.5.0 */ - public static String ontologyTerm(OntologyTerm ontologyTerm) { + public static String toString(OntologyTerm ontologyTerm) { Objects.requireNonNull(ontologyTerm); return ONTOLOGY_TERM.formatted(ontologyTerm.getLabel(), ontologyTerm.getOboId()); } + + public static OntologyTerm fromString(String string) throws ParserException { + + } + + public static class ParserException extends RuntimeException { + public ParserException(String message) { + super(message); + } + } + } diff --git a/project-management/src/main/java/life/qbic/projectmanagement/application/sample/SampleMetadata.java b/project-management/src/main/java/life/qbic/projectmanagement/application/sample/SampleMetadata.java new file mode 100644 index 0000000000..1253058089 --- /dev/null +++ b/project-management/src/main/java/life/qbic/projectmanagement/application/sample/SampleMetadata.java @@ -0,0 +1,35 @@ +package life.qbic.projectmanagement.application.sample; + +import java.util.Optional; + +/** + * Sample Metadata + * + *

A simple sample metadata DTO to pass them within the application

+ * + * @since 1.0.0 + */ +public record SampleMetadata(String sampleId, String analysisToBePerformed, String sampleName, + String biologicalReplicate, String condition, String specimen, + String analyte, String comment) { + + public static SampleMetadata createNew(String analysisToBePerformed, String sampleName, + String biologicalReplicate, String condition, String specimen, + String analyte, String comment) { + return new SampleMetadata("", analysisToBePerformed, sampleName, biologicalReplicate, condition, + specimen, analyte, comment); + } + + public static SampleMetadata createUpdate(String sampleId, String analysisToBePerformed, + String sampleName, + String biologicalReplicate, String condition, String specimen, + String analyte, String comment) { + return new SampleMetadata(sampleId, analysisToBePerformed, sampleName, biologicalReplicate, + condition, specimen, analyte, comment); + } + + public Optional getSampleId() { + return Optional.ofNullable(sampleId.isBlank() ? null : sampleId); + } + +} diff --git a/project-management/src/main/java/life/qbic/projectmanagement/application/sample/SampleValidation.java b/project-management/src/main/java/life/qbic/projectmanagement/application/sample/SampleValidation.java new file mode 100644 index 0000000000..eedf5f0ab5 --- /dev/null +++ b/project-management/src/main/java/life/qbic/projectmanagement/application/sample/SampleValidation.java @@ -0,0 +1,100 @@ +package life.qbic.projectmanagement.application.sample; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; +import life.qbic.projectmanagement.application.ValidationResult; +import life.qbic.projectmanagement.application.experiment.ExperimentInformationService; +import life.qbic.projectmanagement.application.ontology.SpeciesLookupService; +import life.qbic.projectmanagement.application.ontology.TerminologyService; +import life.qbic.projectmanagement.domain.model.experiment.Condition; +import life.qbic.projectmanagement.domain.model.experiment.Experiment; +import life.qbic.projectmanagement.domain.model.experiment.ExperimentId; +import life.qbic.projectmanagement.domain.model.experiment.ExperimentalGroup; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * + * + *

+ * + * @since + */ +@Component +public class SampleValidation { + + private final SampleInformationService sampleInformationService; + + private final ExperimentInformationService experimentInformationService; + + private final TerminologyService terminologyService; + + private final SpeciesLookupService speciesLookupService; + + @Autowired + public SampleValidation(SampleInformationService sampleInformationService, + ExperimentInformationService experimentInformationService, + TerminologyService terminologyService, SpeciesLookupService speciesLookupService) { + this.sampleInformationService = Objects.requireNonNull(sampleInformationService); + this.experimentInformationService = Objects.requireNonNull(experimentInformationService); + this.terminologyService = Objects.requireNonNull(terminologyService); + this.speciesLookupService = Objects.requireNonNull(speciesLookupService); + } + + /** + * Creates a lookup table for conditions having their String representation as key. + *

+ * The String representation is done with the {@link PropertyConversion#toString(Condition)} + * method. + * + * @param conditions the conditions to take for the lookup table build + * @return the lookup table + * @since 1.5.0 + */ + private static Map conditionLookup(List conditions) { + return conditions.stream() + .collect(Collectors.toMap(PropertyConversion::toString, Function.identity())); + } + + /** + * Validates metadata for a not yet registered sample. The validation does not look for any sample + * id and no sample information lookups are done in this case. + *

+ * If the client wants to validate the sample id as well, please refer to + * {@link SampleValidation#validateExistingSample(SampleMetadata, String, String)} + * + * @param sampleMetadata the sample metadata to validate + * @param experimentId the experiment id of the experiment the sample belongs to + * @param projectId the project id of project the experiment belongs to + * @return the report of the validation + * @since 1.5.0 + */ + public ValidationResult validateNewSample(SampleMetadata sampleMetadata, String experimentId, + String projectId) { + var experimentQuery = experimentInformationService.find(projectId, + ExperimentId.parse(experimentId)); + if (experimentQuery.isPresent()) { + return validateWithExperiment(sampleMetadata, experimentQuery.get(), projectId); + } else { + return ValidationResult.withFailures(1, List.of("Unknown experiment.")); + } + } + + private ValidationResult validateWithExperiment(SampleMetadata sampleMetadata, + Experiment experiment, String projectId) { + var conditionsLookupTable = conditionLookup(experiment.getExperimentalGroups().stream().map( + ExperimentalGroup::condition).toList()); + + throw new RuntimeException("Not implemented yet"); + } + + public ValidationResult validateExistingSample(SampleMetadata sampleMetadata, String experimentId, + String projectId) { + throw new RuntimeException("Not yet implemented"); + } + + +} diff --git a/project-management/src/main/java/life/qbic/projectmanagement/application/sample/SampleValidationService.java b/project-management/src/main/java/life/qbic/projectmanagement/application/sample/SampleValidationService.java new file mode 100644 index 0000000000..511dd16623 --- /dev/null +++ b/project-management/src/main/java/life/qbic/projectmanagement/application/sample/SampleValidationService.java @@ -0,0 +1,31 @@ +package life.qbic.projectmanagement.application.sample; + +import java.util.Objects; +import life.qbic.projectmanagement.application.ValidationResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * + * + *

+ * + * @since + */ +@Service +public class SampleValidationService { + + private final SampleValidation sampleValidation; + + @Autowired + public SampleValidationService(SampleValidation sampleValidation) { + this.sampleValidation = Objects.requireNonNull(sampleValidation); + } + + public ValidationResult validateNewSample(SampleMetadata sampleMetadata, String experimentId, + String projectId) { + return sampleValidation.validateNewSample(sampleMetadata, experimentId, projectId); + } + + +} diff --git a/user-interface/src/main/java/life/qbic/datamanager/templates/SampleBatchTemplate.java b/user-interface/src/main/java/life/qbic/datamanager/templates/SampleBatchTemplate.java index 4495d67843..db6a877bd2 100644 --- a/user-interface/src/main/java/life/qbic/datamanager/templates/SampleBatchTemplate.java +++ b/user-interface/src/main/java/life/qbic/datamanager/templates/SampleBatchTemplate.java @@ -1,7 +1,7 @@ package life.qbic.datamanager.templates; import java.util.List; -import life.qbic.datamanager.parser.PropertyToString; +import life.qbic.projectmanagement.application.sample.PropertyConversion; import life.qbic.projectmanagement.domain.model.experiment.ExperimentalGroup; import life.qbic.projectmanagement.domain.model.sample.Sample; import org.apache.poi.ss.usermodel.DataValidation; @@ -254,13 +254,13 @@ private static void fillRowWithSampleMetadata(XSSFRow row, Sample sample, row.createCell(COLUMN_INDEX_SAMPLE_NAME).setCellValue(sample.label()); row.createCell(COLUMN_INDEX_BIOLOGICAL_REPLICATE).setCellValue(sample.biologicalReplicate()); row.createCell(COLUMN_INDEX_CONDITION) - .setCellValue(PropertyToString.condition(experimentalGroup.condition())); + .setCellValue(PropertyConversion.toString(experimentalGroup.condition())); row.createCell(COLUMN_INDEX_SPECIES) - .setCellValue(PropertyToString.ontologyTerm(sample.sampleOrigin().getSpecies())); + .setCellValue(PropertyConversion.toString(sample.sampleOrigin().getSpecies())); row.createCell(COLUMN_INDEX_SPECIMEN) - .setCellValue(PropertyToString.ontologyTerm(sample.sampleOrigin().getSpecimen())); + .setCellValue(PropertyConversion.toString(sample.sampleOrigin().getSpecimen())); row.createCell(COLUMN_INDEX_ANALYTES) - .setCellValue(PropertyToString.ontologyTerm(sample.sampleOrigin().getAnalyte())); + .setCellValue(PropertyConversion.toString(sample.sampleOrigin().getAnalyte())); row.createCell(COLUMN_INDEX_COMMENT).setCellValue(sample.comment().orElse("")); row.createCell(COLUMN_INDEX_SAMPLE_ID).setCellValue(sample.sampleCode().code()); } diff --git a/user-interface/src/main/java/life/qbic/datamanager/templates/TemplateService.java b/user-interface/src/main/java/life/qbic/datamanager/templates/TemplateService.java index 0892795d79..e8508d7832 100644 --- a/user-interface/src/main/java/life/qbic/datamanager/templates/TemplateService.java +++ b/user-interface/src/main/java/life/qbic/datamanager/templates/TemplateService.java @@ -3,7 +3,7 @@ import java.util.Arrays; import java.util.List; import java.util.Objects; -import life.qbic.datamanager.parser.PropertyToString; +import life.qbic.projectmanagement.application.sample.PropertyConversion; import life.qbic.projectmanagement.application.experiment.ExperimentInformationService; import life.qbic.projectmanagement.application.sample.SampleInformationService; import life.qbic.projectmanagement.domain.model.experiment.Experiment; @@ -92,11 +92,11 @@ private XSSFWorkbook createPrefilledWorkbookFromExperiment(Experiment experiment List samples) { var conditions = experiment.getExperimentalGroups().stream().map(ExperimentalGroup::condition) .map( - PropertyToString::condition).toList(); + PropertyConversion::toString).toList(); var experimentalGroups = experiment.getExperimentalGroups(); - var species = experiment.getSpecies().stream().map(PropertyToString::ontologyTerm).toList(); - var specimen = experiment.getSpecimens().stream().map(PropertyToString::ontologyTerm).toList(); - var analytes = experiment.getAnalytes().stream().map(PropertyToString::ontologyTerm).toList(); + var species = experiment.getSpecies().stream().map(PropertyConversion::toString).toList(); + var specimen = experiment.getSpecimens().stream().map(PropertyConversion::toString).toList(); + var analytes = experiment.getAnalytes().stream().map(PropertyConversion::toString).toList(); var analysisMethods = Arrays.stream(AnalysisMethod.values()).map(AnalysisMethod::abbreviation) .toList(); return SampleBatchTemplate.createUpdateTemplate(samples, @@ -108,10 +108,10 @@ private XSSFWorkbook createPrefilledWorkbookFromExperiment(Experiment experiment private XSSFWorkbook createWorkbookFromExperiment(Experiment experiment) { var conditions = experiment.getExperimentalGroups().stream().map(ExperimentalGroup::condition) .map( - PropertyToString::condition).toList(); - var species = experiment.getSpecies().stream().map(PropertyToString::ontologyTerm).toList(); - var specimen = experiment.getSpecimens().stream().map(PropertyToString::ontologyTerm).toList(); - var analytes = experiment.getAnalytes().stream().map(PropertyToString::ontologyTerm).toList(); + PropertyConversion::toString).toList(); + var species = experiment.getSpecies().stream().map(PropertyConversion::toString).toList(); + var specimen = experiment.getSpecimens().stream().map(PropertyConversion::toString).toList(); + var analytes = experiment.getAnalytes().stream().map(PropertyConversion::toString).toList(); var analysisMethods = Arrays.stream(AnalysisMethod.values()).map(AnalysisMethod::abbreviation) .toList(); return SampleBatchTemplate.createRegistrationTemplate( diff --git a/user-interface/src/main/java/life/qbic/datamanager/views/navigation/ProjectSideNavigationComponent.java b/user-interface/src/main/java/life/qbic/datamanager/views/navigation/ProjectSideNavigationComponent.java index 8ef787f977..e50052a19c 100644 --- a/user-interface/src/main/java/life/qbic/datamanager/views/navigation/ProjectSideNavigationComponent.java +++ b/user-interface/src/main/java/life/qbic/datamanager/views/navigation/ProjectSideNavigationComponent.java @@ -73,7 +73,7 @@ public class ProjectSideNavigationComponent extends Div implements BeforeEnterObserver { public static final String PROJECT_ID_ROUTE_PARAMETER = "projectId"; - public static final StringEXPERIMENT_ID_ROUTE_PARAMETER = "experimentId"; + public static final String EXPERIMENT_ID_ROUTE_PARAMETER = "experimentId"; private static final Logger log = LoggerFactory.logger(ProjectSideNavigationComponent.class); private final Div content; private final transient ProjectInformationService projectInformationService; diff --git a/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementMetadataUploadDialog.java b/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementMetadataUploadDialog.java index 93a2b600d8..6d5838b56a 100644 --- a/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementMetadataUploadDialog.java +++ b/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementMetadataUploadDialog.java @@ -46,7 +46,7 @@ import life.qbic.projectmanagement.application.measurement.NGSMeasurementMetadata; import life.qbic.projectmanagement.application.measurement.ProteomicsMeasurementMetadata; import life.qbic.projectmanagement.application.measurement.validation.MeasurementValidationService; -import life.qbic.projectmanagement.application.measurement.validation.ValidationResult; +import life.qbic.projectmanagement.application.ValidationResult; import life.qbic.projectmanagement.domain.model.experiment.Experiment; import life.qbic.projectmanagement.domain.model.project.ProjectId; import org.springframework.util.StringUtils; diff --git a/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementNGSValidationExecutor.java b/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementNGSValidationExecutor.java index 6c030ec118..8f4727d07b 100644 --- a/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementNGSValidationExecutor.java +++ b/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementNGSValidationExecutor.java @@ -4,7 +4,7 @@ import java.util.concurrent.CompletableFuture; import life.qbic.projectmanagement.application.measurement.NGSMeasurementMetadata; import life.qbic.projectmanagement.application.measurement.validation.MeasurementValidationService; -import life.qbic.projectmanagement.application.measurement.validation.ValidationResult; +import life.qbic.projectmanagement.application.ValidationResult; import life.qbic.projectmanagement.domain.model.project.ProjectId; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementProteomicsValidationExecutor.java b/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementProteomicsValidationExecutor.java index 2d95b27ff1..25b03a6045 100644 --- a/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementProteomicsValidationExecutor.java +++ b/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementProteomicsValidationExecutor.java @@ -4,9 +4,8 @@ import java.util.concurrent.CompletableFuture; import life.qbic.projectmanagement.application.measurement.ProteomicsMeasurementMetadata; import life.qbic.projectmanagement.application.measurement.validation.MeasurementValidationService; -import life.qbic.projectmanagement.application.measurement.validation.ValidationResult; +import life.qbic.projectmanagement.application.ValidationResult; import life.qbic.projectmanagement.domain.model.project.ProjectId; -import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Component; diff --git a/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementValidationExecutor.java b/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementValidationExecutor.java index ff17bab520..97ea93249e 100644 --- a/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementValidationExecutor.java +++ b/user-interface/src/main/java/life/qbic/datamanager/views/projects/project/measurements/MeasurementValidationExecutor.java @@ -3,7 +3,7 @@ import java.util.concurrent.CompletableFuture; import life.qbic.projectmanagement.application.measurement.MeasurementMetadata; import life.qbic.projectmanagement.application.measurement.validation.MeasurementValidationService; -import life.qbic.projectmanagement.application.measurement.validation.ValidationResult; +import life.qbic.projectmanagement.application.ValidationResult; import life.qbic.projectmanagement.domain.model.project.ProjectId; /**