Skip to content

Commit cb6560b

Browse files
committed
Checkin Progress
1 parent 1c6fbb6 commit cb6560b

17 files changed

+211
-29
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.projectmanagement.application.measurement.validation;
1+
package life.qbic.projectmanagement.application;
22

33
public class ValidationException extends RuntimeException {
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.projectmanagement.application.measurement.validation;
1+
package life.qbic.projectmanagement.application;
22

33
import java.util.ArrayList;
44
import java.util.Collection;

project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementNGSValidator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import java.util.regex.Pattern;
1111
import life.qbic.logging.api.Logger;
1212
import life.qbic.projectmanagement.application.ProjectInformationService;
13+
import life.qbic.projectmanagement.application.ValidationException;
14+
import life.qbic.projectmanagement.application.ValidationResult;
1315
import life.qbic.projectmanagement.application.measurement.MeasurementService;
1416
import life.qbic.projectmanagement.application.measurement.NGSMeasurementMetadata;
1517
import life.qbic.projectmanagement.application.ontology.TerminologyService;

project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementProteomicsValidator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import java.util.regex.Pattern;
1010
import life.qbic.logging.api.Logger;
1111
import life.qbic.projectmanagement.application.ProjectInformationService;
12+
import life.qbic.projectmanagement.application.ValidationException;
13+
import life.qbic.projectmanagement.application.ValidationResult;
1214
import life.qbic.projectmanagement.application.measurement.MeasurementService;
1315
import life.qbic.projectmanagement.application.measurement.ProteomicsMeasurementMetadata;
1416
import life.qbic.projectmanagement.application.ontology.TerminologyService;

project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementValidationService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.Collection;
44
import java.util.Optional;
55
import java.util.concurrent.CompletableFuture;
6+
import life.qbic.projectmanagement.application.ValidationResult;
67
import life.qbic.projectmanagement.application.measurement.NGSMeasurementMetadata;
78
import life.qbic.projectmanagement.application.measurement.ProteomicsMeasurementMetadata;
89
import life.qbic.projectmanagement.domain.model.project.ProjectId;

project-management/src/main/java/life/qbic/projectmanagement/application/measurement/validation/MeasurementValidator.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package life.qbic.projectmanagement.application.measurement.validation;
22

3+
import life.qbic.projectmanagement.application.ValidationResult;
34
import life.qbic.projectmanagement.application.measurement.MeasurementMetadata;
45
import life.qbic.projectmanagement.domain.model.project.ProjectId;
56

user-interface/src/main/java/life/qbic/datamanager/parser/PropertyToString.java renamed to project-management/src/main/java/life/qbic/projectmanagement/application/sample/PropertyConversion.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.datamanager.parser;
1+
package life.qbic.projectmanagement.application.sample;
22

33
import java.util.ArrayList;
44
import java.util.List;
@@ -15,7 +15,7 @@
1515
*
1616
* @since 1.5.0
1717
*/
18-
public class PropertyToString {
18+
public class PropertyConversion {
1919

2020
private static final String CONDITION_VARIABLE_LEVEL_UNIT_TEMPLATE = "%s: %s %s"; // <variable name>: <value> [unit]
2121

@@ -28,7 +28,7 @@ public class PropertyToString {
2828
* <p>
2929
* In its current implementation, the String representation results into a
3030
* <code>;</code>-separated concatenation of {@link VariableLevel}. See
31-
* {@link PropertyToString#variableLevel(VariableLevel)} for more details.
31+
* {@link PropertyConversion#toString(VariableLevel)} for more details.
3232
* <p>
3333
* Example: a condition with the two variable levels <code>size: 20 cm</code> and <code>hue:
3434
* blue</code> will result in:
@@ -43,11 +43,11 @@ public class PropertyToString {
4343
* @return the String representation
4444
* @since 1.5.0
4545
*/
46-
public static String condition(Condition condition) {
46+
public static String toString(Condition condition) {
4747
Objects.requireNonNull(condition);
4848
List<String> stringValues = new ArrayList<>();
4949
condition.getVariableLevels()
50-
.forEach(variableLevel -> stringValues.add(variableLevel(variableLevel)));
50+
.forEach(variableLevel -> stringValues.add(toString(variableLevel)));
5151
return String.join("; ", stringValues);
5252
}
5353

@@ -62,7 +62,7 @@ public static String condition(Condition condition) {
6262
* @return the String representation of the variable level
6363
* @since 1.5.0
6464
*/
65-
public static String variableLevel(VariableLevel variableLevel) {
65+
public static String toString(VariableLevel variableLevel) {
6666
Objects.requireNonNull(variableLevel);
6767
if (variableLevel.experimentalValue().unit().isPresent()) {
6868
return CONDITION_VARIABLE_LEVEL_UNIT_TEMPLATE.formatted(variableLevel.variableName().value(),
@@ -89,8 +89,19 @@ public static String variableLevel(VariableLevel variableLevel) {
8989
* @return the String representation of the ontology term
9090
* @since 1.5.0
9191
*/
92-
public static String ontologyTerm(OntologyTerm ontologyTerm) {
92+
public static String toString(OntologyTerm ontologyTerm) {
9393
Objects.requireNonNull(ontologyTerm);
9494
return ONTOLOGY_TERM.formatted(ontologyTerm.getLabel(), ontologyTerm.getOboId());
9595
}
96+
97+
public static OntologyTerm fromString(String string) throws ParserException {
98+
99+
}
100+
101+
public static class ParserException extends RuntimeException {
102+
public ParserException(String message) {
103+
super(message);
104+
}
105+
}
106+
96107
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package life.qbic.projectmanagement.application.sample;
2+
3+
import java.util.Optional;
4+
5+
/**
6+
* <b>Sample Metadata</b>
7+
*
8+
* <p>A simple sample metadata DTO to pass them within the application</p>
9+
*
10+
* @since 1.0.0
11+
*/
12+
public record SampleMetadata(String sampleId, String analysisToBePerformed, String sampleName,
13+
String biologicalReplicate, String condition, String specimen,
14+
String analyte, String comment) {
15+
16+
public static SampleMetadata createNew(String analysisToBePerformed, String sampleName,
17+
String biologicalReplicate, String condition, String specimen,
18+
String analyte, String comment) {
19+
return new SampleMetadata("", analysisToBePerformed, sampleName, biologicalReplicate, condition,
20+
specimen, analyte, comment);
21+
}
22+
23+
public static SampleMetadata createUpdate(String sampleId, String analysisToBePerformed,
24+
String sampleName,
25+
String biologicalReplicate, String condition, String specimen,
26+
String analyte, String comment) {
27+
return new SampleMetadata(sampleId, analysisToBePerformed, sampleName, biologicalReplicate,
28+
condition, specimen, analyte, comment);
29+
}
30+
31+
public Optional<String> getSampleId() {
32+
return Optional.ofNullable(sampleId.isBlank() ? null : sampleId);
33+
}
34+
35+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package life.qbic.projectmanagement.application.sample;
2+
3+
import java.util.List;
4+
import java.util.Map;
5+
import java.util.Objects;
6+
import java.util.function.Function;
7+
import java.util.stream.Collectors;
8+
import life.qbic.projectmanagement.application.ValidationResult;
9+
import life.qbic.projectmanagement.application.experiment.ExperimentInformationService;
10+
import life.qbic.projectmanagement.application.ontology.SpeciesLookupService;
11+
import life.qbic.projectmanagement.application.ontology.TerminologyService;
12+
import life.qbic.projectmanagement.domain.model.experiment.Condition;
13+
import life.qbic.projectmanagement.domain.model.experiment.Experiment;
14+
import life.qbic.projectmanagement.domain.model.experiment.ExperimentId;
15+
import life.qbic.projectmanagement.domain.model.experiment.ExperimentalGroup;
16+
import org.springframework.beans.factory.annotation.Autowired;
17+
import org.springframework.stereotype.Component;
18+
19+
/**
20+
* <b><class short description - 1 Line!></b>
21+
*
22+
* <p><More detailed description - When to use, what it solves, etc.></p>
23+
*
24+
* @since <version tag>
25+
*/
26+
@Component
27+
public class SampleValidation {
28+
29+
private final SampleInformationService sampleInformationService;
30+
31+
private final ExperimentInformationService experimentInformationService;
32+
33+
private final TerminologyService terminologyService;
34+
35+
private final SpeciesLookupService speciesLookupService;
36+
37+
@Autowired
38+
public SampleValidation(SampleInformationService sampleInformationService,
39+
ExperimentInformationService experimentInformationService,
40+
TerminologyService terminologyService, SpeciesLookupService speciesLookupService) {
41+
this.sampleInformationService = Objects.requireNonNull(sampleInformationService);
42+
this.experimentInformationService = Objects.requireNonNull(experimentInformationService);
43+
this.terminologyService = Objects.requireNonNull(terminologyService);
44+
this.speciesLookupService = Objects.requireNonNull(speciesLookupService);
45+
}
46+
47+
/**
48+
* Creates a lookup table for conditions having their String representation as key.
49+
* <p>
50+
* The String representation is done with the {@link PropertyConversion#toString(Condition)}
51+
* method.
52+
*
53+
* @param conditions the conditions to take for the lookup table build
54+
* @return the lookup table
55+
* @since 1.5.0
56+
*/
57+
private static Map<String, Condition> conditionLookup(List<Condition> conditions) {
58+
return conditions.stream()
59+
.collect(Collectors.toMap(PropertyConversion::toString, Function.identity()));
60+
}
61+
62+
/**
63+
* Validates metadata for a not yet registered sample. The validation does not look for any sample
64+
* id and no sample information lookups are done in this case.
65+
* <p>
66+
* If the client wants to validate the sample id as well, please refer to
67+
* {@link SampleValidation#validateExistingSample(SampleMetadata, String, String)}
68+
*
69+
* @param sampleMetadata the sample metadata to validate
70+
* @param experimentId the experiment id of the experiment the sample belongs to
71+
* @param projectId the project id of project the experiment belongs to
72+
* @return the report of the validation
73+
* @since 1.5.0
74+
*/
75+
public ValidationResult validateNewSample(SampleMetadata sampleMetadata, String experimentId,
76+
String projectId) {
77+
var experimentQuery = experimentInformationService.find(projectId,
78+
ExperimentId.parse(experimentId));
79+
if (experimentQuery.isPresent()) {
80+
return validateWithExperiment(sampleMetadata, experimentQuery.get(), projectId);
81+
} else {
82+
return ValidationResult.withFailures(1, List.of("Unknown experiment."));
83+
}
84+
}
85+
86+
private ValidationResult validateWithExperiment(SampleMetadata sampleMetadata,
87+
Experiment experiment, String projectId) {
88+
var conditionsLookupTable = conditionLookup(experiment.getExperimentalGroups().stream().map(
89+
ExperimentalGroup::condition).toList());
90+
91+
throw new RuntimeException("Not implemented yet");
92+
}
93+
94+
public ValidationResult validateExistingSample(SampleMetadata sampleMetadata, String experimentId,
95+
String projectId) {
96+
throw new RuntimeException("Not yet implemented");
97+
}
98+
99+
100+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package life.qbic.projectmanagement.application.sample;
2+
3+
import java.util.Objects;
4+
import life.qbic.projectmanagement.application.ValidationResult;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.stereotype.Service;
7+
8+
/**
9+
* <b><class short description - 1 Line!></b>
10+
*
11+
* <p><More detailed description - When to use, what it solves, etc.></p>
12+
*
13+
* @since <version tag>
14+
*/
15+
@Service
16+
public class SampleValidationService {
17+
18+
private final SampleValidation sampleValidation;
19+
20+
@Autowired
21+
public SampleValidationService(SampleValidation sampleValidation) {
22+
this.sampleValidation = Objects.requireNonNull(sampleValidation);
23+
}
24+
25+
public ValidationResult validateNewSample(SampleMetadata sampleMetadata, String experimentId,
26+
String projectId) {
27+
return sampleValidation.validateNewSample(sampleMetadata, experimentId, projectId);
28+
}
29+
30+
31+
}

0 commit comments

Comments
 (0)