From f0686129f5185a9c7e50f68490f745d63ef1b630 Mon Sep 17 00:00:00 2001 From: Steffengreiner Date: Thu, 13 Jul 2023 14:15:56 +0200 Subject: [PATCH] Set Condition field as valid upon initialization and provide javadocs, remove unnecessary binder validation call and minor variable naming refactor. --- .../experiment/ExperimentalGroupInput.java | 73 ++++++++++--------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/vaadinfrontend/src/main/java/life/qbic/datamanager/views/projects/project/experiments/experiment/ExperimentalGroupInput.java b/vaadinfrontend/src/main/java/life/qbic/datamanager/views/projects/project/experiments/experiment/ExperimentalGroupInput.java index 332d5049f..02b1cff73 100644 --- a/vaadinfrontend/src/main/java/life/qbic/datamanager/views/projects/project/experiments/experiment/ExperimentalGroupInput.java +++ b/vaadinfrontend/src/main/java/life/qbic/datamanager/views/projects/project/experiments/experiment/ExperimentalGroupInput.java @@ -8,22 +8,29 @@ import com.vaadin.flow.component.textfield.NumberField; import com.vaadin.flow.data.binder.Binder; import jakarta.validation.constraints.Min; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import life.qbic.datamanager.views.general.Container; import life.qbic.datamanager.views.projects.project.experiments.experiment.ExperimentalGroupInput.ExperimentalGroupBean; import life.qbic.projectmanagement.application.ExperimentValueFormatter; +import life.qbic.projectmanagement.domain.project.experiment.BiologicalReplicate; +import life.qbic.projectmanagement.domain.project.experiment.Condition; +import life.qbic.projectmanagement.domain.project.experiment.Experiment; +import life.qbic.projectmanagement.domain.project.experiment.ExperimentalGroup; import life.qbic.projectmanagement.domain.project.experiment.VariableLevel; import life.qbic.projectmanagement.domain.project.experiment.VariableName; -import java.util.*; -import java.util.stream.Collectors; - /** - * TODO! - * short description - * - *

detailed description

- * - * @since + * ExperimentalGroupInput Field + * ExperimentalGroupInput is a {@link CustomField} which enables the user to create an + * {@link ExperimentalGroup} by defining the {@link Condition} and number of + * {@link BiologicalReplicate} associated with the {@link ExperimentalGroup} */ public class ExperimentalGroupInput extends CustomField { @@ -35,43 +42,39 @@ public class ExperimentalGroupInput extends CustomField { ExperimentValueFormatter.format(it.experimentalValue())); private final MultiSelectComboBox variableLevelSelect; - private final NumberField sampleSizeField; - - private int variableCount = 0; - - private final List> binders = new ArrayList<>(); - - + private final NumberField replicateCountField; + int variableCount; + + /** + * ExperimentalGroupInput is a {@link CustomField} which contains a {@link MultiSelectComboBox} + * allowing the user to define the {@link Condition} and a {@link NumberField} enabling the user + * to define the number of {@link BiologicalReplicate} within an {@link ExperimentalGroup} + * + * @param availableLevels Collection of {@link VariableLevel} defined for an {@link Experiment} + */ public ExperimentalGroupInput(Collection availableLevels) { addClassName("group-input"); variableLevelSelect = generateVariableLevelSelect(); - sampleSizeField = generateSampleSizeField(); + replicateCountField = generateSampleSizeField(); - Span layout = new Span(variableLevelSelect, sampleSizeField); + Span layout = new Span(variableLevelSelect, replicateCountField); layout.addClassName("layout"); add(layout); setLevels(availableLevels); addValidationForVariableCount(); variableLevelSelect.addValueChangeListener( - event -> setInvalid(variableLevelSelect.isInvalid() || sampleSizeField.isInvalid())); - sampleSizeField.addValueChangeListener( - event -> setInvalid(variableLevelSelect.isInvalid() || sampleSizeField.isInvalid())); + event -> setInvalid(variableLevelSelect.isInvalid() || replicateCountField.isInvalid())); + replicateCountField.addValueChangeListener( + event -> setInvalid(variableLevelSelect.isInvalid() || replicateCountField.isInvalid())); } private void addValidationForVariableCount() { - Binder>> binder = new Binder<>(); - binder.forField(variableLevelSelect) + Binder>> variableLevelSelectBinder = new Binder<>(); + variableLevelSelectBinder.forField(variableLevelSelect) .withValidator(levels -> levels.size() == variableCount, "Please select one level for each variable.") .bind(Container::get, Container::set); - binders.add(binder); - } - - private void validateInput() { - for (Binder binder : binders) { - binder.validate(); - } } private void setLevels(Collection availableLevels) { @@ -86,7 +89,7 @@ protected ExperimentalGroupBean generateModelValue() { var levels = variableLevelSelect.getValue().stream().sorted(VARIABLE_LEVEL_COMPARATOR) .toList(); var sampleSize = Optional - .ofNullable(sampleSizeField.getValue()).map(Double::intValue) + .ofNullable(replicateCountField.getValue()).map(Double::intValue) .orElse(0); return new ExperimentalGroupBean(sampleSize, levels); } @@ -94,7 +97,7 @@ protected ExperimentalGroupBean generateModelValue() { @Override protected void setPresentationValue(ExperimentalGroupBean newPresentationValue) { variableLevelSelect.setValue(newPresentationValue.levels); - sampleSizeField.setValue((double) newPresentationValue.sampleSize); + replicateCountField.setValue((double) newPresentationValue.sampleSize); } @Override @@ -102,13 +105,12 @@ public void setRequiredIndicatorVisible(boolean requiredIndicatorVisible) { super.setRequiredIndicatorVisible(requiredIndicatorVisible); variableLevelSelect.setRequired(requiredIndicatorVisible); variableLevelSelect.setRequiredIndicatorVisible(requiredIndicatorVisible); - sampleSizeField.setRequiredIndicatorVisible(requiredIndicatorVisible); + replicateCountField.setRequiredIndicatorVisible(requiredIndicatorVisible); } @Override public boolean isInvalid() { - validateInput(); - super.setInvalid(variableLevelSelect.isInvalid() || sampleSizeField.isInvalid()); + super.setInvalid(variableLevelSelect.isInvalid() || replicateCountField.isInvalid()); return super.isInvalid(); } @@ -131,6 +133,7 @@ private NumberField generateSampleSizeField() { numberField.setStep(1); numberField.setMin(1); numberField.setValue(1.0); + numberField.setErrorMessage("Please specify a valid number of replicates"); return numberField; }