Skip to content

Commit

Permalink
Merge branch 'development' into fix/dm-823-replace-page-component-wit…
Browse files Browse the repository at this point in the history
…h-content-section
  • Loading branch information
Steffengreiner authored Jul 14, 2023
2 parents 9260f56 + 6b64801 commit 4cec6db
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -235,12 +235,6 @@
cursor: pointer;
}

.experiment-item .progress-tag{
text-align: center;
width: fit-content;

}

.experiment-item .experiment-title {
font-weight: bold;
padding-left: 1rem;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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!
* <b>short description</b>
*
* <p>detailed description</p>
*
* @since <version tag>
* <b>ExperimentalGroupInput Field</b>
* 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<ExperimentalGroupBean> {

Expand All @@ -35,43 +42,39 @@ public class ExperimentalGroupInput extends CustomField<ExperimentalGroupBean> {
ExperimentValueFormatter.format(it.experimentalValue()));

private final MultiSelectComboBox<VariableLevel> variableLevelSelect;
private final NumberField sampleSizeField;

private int variableCount = 0;

private final List<Binder<?>> 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<VariableLevel> 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<Container<Set<VariableLevel>>> binder = new Binder<>();
binder.forField(variableLevelSelect)
Binder<Container<Set<VariableLevel>>> 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<VariableLevel> availableLevels) {
Expand All @@ -86,29 +89,28 @@ 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);
}

@Override
protected void setPresentationValue(ExperimentalGroupBean newPresentationValue) {
variableLevelSelect.setValue(newPresentationValue.levels);
sampleSizeField.setValue((double) newPresentationValue.sampleSize);
replicateCountField.setValue((double) newPresentationValue.sampleSize);
}

@Override
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();
}

Expand All @@ -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;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@ public class ExperimentItem extends Card {

private final Icon flaskIcon = VaadinIcon.FLASK.create();

private final Span progressTag = new Span("no progress set");

private final List<ComponentEventListener<ExperimentItemClickedEvent>> selectionListeners = new ArrayList<>();

private ExperimentItem(Experiment experiment) {
Expand All @@ -53,7 +51,6 @@ private ExperimentItem(Experiment experiment) {

private void layoutComponent() {
addClassName("experiment-item");
layoutProgressStatus();
layoutExperimentLabel();
layoutActiveSection();
}
Expand All @@ -66,13 +63,6 @@ private void configureComponent() {
listener -> informListeners(new ExperimentItemClickedEvent(this, true)));
}

private void layoutProgressStatus() {
progressSection.addClassName("progress-section");
progressTag.addClassName("progress-tag");
progressSection.add(progressTag);
add(progressSection);
}

private void layoutExperimentLabel() {
experimentTitle.addClassName("experiment-title");
contentSection.addClassName("content-section");
Expand Down

0 comments on commit 4cec6db

Please sign in to comment.