Skip to content

Commit 54c39f1

Browse files
authored
Preserve variable level ordering and unit (#1187)
* Switch from set of variable levels to list of variable levels Level ordering holds information and must not be discarded. As sets are unordered the api objects changed from an unordered set to an ordered list. * Fix unit discarding Switches wrong if condition. Previously a unit of null was assigned always and provided units discarded. This was flipped. * Replace if-else with Optional methods --------- Co-authored-by: KochTobi <[email protected]>
1 parent eb74253 commit 54c39f1

File tree

5 files changed

+22
-20
lines changed

5 files changed

+22
-20
lines changed

project-management/src/main/java/life/qbic/projectmanagement/application/api/AsyncProjectService.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -669,19 +669,19 @@ Mono<ProjectCreationResponse> create(ProjectCreationRequest request)
669669
* @param unit the unit of the experimental variable. Can be null if no unit is set
670670
* @since 1.9.0
671671
*/
672-
record ExperimentalVariable(String name, Set<String> levels, @Nullable String unit) {
672+
record ExperimentalVariable(String name, List<String> levels, @Nullable String unit) {
673673

674-
public ExperimentalVariable(String name, Set<String> levels) {
674+
public ExperimentalVariable(String name, List<String> levels) {
675675
this(name, levels, null);
676676
}
677677

678678
public ExperimentalVariable {
679-
levels = Set.copyOf(levels);
679+
levels = List.copyOf(levels);
680680
}
681681

682682
@Override
683-
public Set<String> levels() {
684-
return Set.copyOf(levels);
683+
public List<String> levels() {
684+
return List.copyOf(levels);
685685
}
686686

687687
public Optional<String> optionalUnit() {
@@ -716,15 +716,15 @@ record VariableLevel(String variableName, String levelValue,
716716
*/
717717
record ExperimentalGroup(@Nullable Long id, @Nullable Integer groupId, String name,
718718
int sampleSize,
719-
Set<VariableLevel> levels) {
719+
List<VariableLevel> levels) {
720720

721721
public ExperimentalGroup {
722722
requireNonNull(levels);
723-
levels = Set.copyOf(levels);
723+
levels = List.copyOf(levels);
724724
}
725725

726-
public Set<VariableLevel> levels() {
727-
return Set.copyOf(levels);
726+
public List<VariableLevel> levels() {
727+
return List.copyOf(levels);
728728
}
729729
}
730730

project-management/src/main/java/life/qbic/projectmanagement/application/api/AsyncProjectServiceImpl.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,9 @@ public Mono<ExperimentalGroupCreationResponse> create(ExperimentalGroupCreationR
159159
new ExperimentalGroup(createdGroup.id(), createdGroup.groupNumber(), createdGroup.name(),
160160
createdGroup.replicateCount(), createdGroup.levels().stream()
161161
.map(this::convertLevelToApi)
162-
.collect(Collectors.toSet())), request.requestId());
162+
.toList()), request.requestId());
163163
});
164+
164165
return applySecurityContext(call)
165166
.subscribeOn(VirtualThreadScheduler.getScheduler())
166167
.contextWrite(reactiveSecurity(SecurityContextHolder.getContext()))
@@ -238,8 +239,9 @@ public Flux<ExperimentalGroup> getExperimentalGroups(String projectId, String ex
238239
}
239240

240241
private static ExperimentalGroup convertToApi(ExperimentInformationService.ExperimentalGroup group) {
241-
return new ExperimentalGroup(group.id(), group.groupNumber(), group.name(), group.replicateCount(),
242-
group.levels().stream().map(AsyncProjectServiceImpl::convertToApi).collect(Collectors.toSet()));
242+
return new ExperimentalGroup(group.id(), group.groupNumber(), group.name(),
243+
group.replicateCount(),
244+
group.levels().stream().map(AsyncProjectServiceImpl::convertToApi).toList());
243245
}
244246

245247
private static VariableLevel convertToApi(ExperimentInformationService.VariableLevel level) {
@@ -775,8 +777,7 @@ private ExperimentalVariable convertToApi(
775777
life.qbic.projectmanagement.domain.model.experiment.ExperimentalVariable experimentalVariable) {
776778
return new ExperimentalVariable(experimentalVariable.name().value(),
777779
experimentalVariable.levels()
778-
.stream().map(level -> level.variableName().value()).collect(
779-
Collectors.toSet()),
780+
.stream().map(level -> level.variableName().value()).toList(),
780781
experimentalVariable.levels().getFirst().experimentalValue().unit().orElse(null));
781782
}
782783

project-management/src/main/java/life/qbic/projectmanagement/application/experiment/ExperimentInformationService.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,8 +422,10 @@ public void addVariableToExperiment(String projectId, String experimentId, List<
422422
for (AsyncProjectService.ExperimentalVariable experimentalVariable : experimentalVariables) {
423423
List<ExperimentalValue> experimentalValues = new ArrayList<>();
424424
for (String level : experimentalVariable.levels()) {
425-
ExperimentalValue experimentalValue = experimentalVariable.optionalUnit().isPresent() ? ExperimentalValue.create(level)
426-
: ExperimentalValue.create(level, experimentalVariable.unit());
425+
ExperimentalValue experimentalValue =
426+
experimentalVariable.optionalUnit()
427+
.map(unit -> ExperimentalValue.create(level, unit))
428+
.orElse(ExperimentalValue.create(level));
427429
experimentalValues.add(experimentalValue);
428430
}
429431
experiment.addVariableToDesign(experimentalVariable.name(), experimentalValues);

user-interface/src/main/java/life/qbic/datamanager/views/projects/project/experiments/experiment/ExperimentDetailsComponent.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import java.util.Collection;
3131
import java.util.Comparator;
3232
import java.util.EnumMap;
33-
import java.util.HashSet;
3433
import java.util.List;
3534
import java.util.Map;
3635
import java.util.Optional;
@@ -545,7 +544,7 @@ private void onExperimentalVariablesAddConfirmed(
545544
private AsyncProjectService.ExperimentalVariable convertToApi(
546545
ExperimentalVariableContent experimentalVariable) {
547546
return new AsyncProjectService.ExperimentalVariable(experimentalVariable.name(),
548-
new HashSet<>(experimentalVariable.levels()), experimentalVariable.unit());
547+
new ArrayList<>(experimentalVariable.levels()), experimentalVariable.unit());
549548
}
550549

551550
private void openExperimentalVariablesEditDialog() {
@@ -887,7 +886,7 @@ private AsyncProjectService.ExperimentalGroup toApi(ExperimentalGroupContent exp
887886
return new AsyncProjectService.ExperimentalGroup(experimentalGroup.id(),
888887
experimentalGroup.groupNumber(),
889888
experimentalGroup.name(), experimentalGroup.size(),
890-
experimentalGroup.variableLevels().stream().map(this::toApi).collect(Collectors.toSet()));
889+
experimentalGroup.variableLevels().stream().map(this::toApi).toList());
891890
}
892891

893892
private void addExperimentalGroups(

user-interface/src/main/java/life/qbic/datamanager/views/projects/project/experiments/experiment/components/ExperimentalVariableRowLayout.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ static ExperimentalVariableRowLayout from(
3535
final ExperimentalVariableRowLayout rowLayout = new ExperimentalVariableRowLayout();
3636
rowLayout.nameField.setValue(experimentalVariable.name().value());
3737
rowLayout.unitField.setValue(
38-
experimentalVariable.levels().get(0).experimentalValue().unit().orElse(""));
38+
experimentalVariable.levels().getFirst().experimentalValue().unit().orElse(""));
3939
rowLayout.levelArea.setValue(
4040
experimentalVariable.levels().stream().map(it -> it.experimentalValue().value())
4141
.collect(Collectors.joining("\n")));

0 commit comments

Comments
 (0)