diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/contactfield/ContactLineField.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/contactfield/ContactLineField.java index e348eba62f3..c6ef5a526d2 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/contactfield/ContactLineField.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/contactfield/ContactLineField.java @@ -1,6 +1,7 @@ package de.symeda.sormas.ui.contact.components.linelisting.contactfield; import java.time.LocalDate; +import java.util.Arrays; import com.vaadin.data.Binder; import com.vaadin.data.BinderValidationStatus; @@ -11,6 +12,8 @@ import com.vaadin.ui.DateField; import com.vaadin.ui.HorizontalLayout; +import de.symeda.sormas.api.Disease; +import de.symeda.sormas.api.FacadeProvider; import de.symeda.sormas.api.caze.CaseDataDto; import de.symeda.sormas.api.contact.ContactDto; import de.symeda.sormas.api.contact.ContactProximity; @@ -24,6 +27,8 @@ public class ContactLineField extends CustomField { + private static final long serialVersionUID = 7634199030865304458L; + private final Binder binder = new Binder<>(ContactLineFieldDto.class); private final DateField dateOfReport; @@ -56,7 +61,6 @@ protected Component initContent() { binder.forField(multiDay).bind(ContactLineFieldDto.MULTI_DAY_SELECTOR); typeOfContact.setId("typeOfContact"); - typeOfContact.setItems(ContactProximity.values()); typeOfContact.setWidth(150, Unit.PIXELS); typeOfContact.addStyleName(CssStyles.CAPTION_OVERFLOW); binder.forField(typeOfContact).bind(ContactLineFieldDto.TYPE_OF_CONTACT); @@ -80,6 +84,14 @@ protected Component initContent() { return layout; } + public void updateTypeOfContactValues(Disease disease) { + ContactProximity[] values = ContactProximity.getValues(disease, FacadeProvider.getConfigFacade().getCountryLocale()); + typeOfContact.setItems(values); + if (!Arrays.asList(values).contains(typeOfContact.getValue())) { + typeOfContact.setValue(null); + } + } + @Override protected void doSetValue(ContactLineFieldDto contactFieldDto) { binder.setBean(contactFieldDto); diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/layout/LineListingLayout.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/layout/LineListingLayout.java index 9cf238ea851..4b1a55aea3d 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/layout/LineListingLayout.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/layout/LineListingLayout.java @@ -15,6 +15,8 @@ import com.vaadin.ui.Window; import com.vaadin.ui.themes.ValoTheme; +import de.symeda.sormas.api.Disease; +import de.symeda.sormas.api.FacadeProvider; import de.symeda.sormas.api.caze.BirthDateDto; import de.symeda.sormas.api.caze.CaseDataDto; import de.symeda.sormas.api.contact.ContactDto; @@ -38,6 +40,8 @@ public class LineListingLayout extends VerticalLayout { + private static final long serialVersionUID = 5372515237174090496L; + public static final float DEFAULT_WIDTH = 1696; private final SharedInfoField sharedInfoField; @@ -57,6 +61,7 @@ private LineListingLayout(Window window, SharedInfoField sharedInfoField) { this.sharedInfoField = sharedInfoField; this.sharedInfoField.setId("lineListingSharedInfoField"); + this.sharedInfoField.addDiseaseChangeHandler(this::updateTypeOfContactValues); sharedInformationComponent.addComponent(this.sharedInfoField); addComponent(sharedInformationComponent); @@ -68,16 +73,20 @@ private LineListingLayout(Window window, SharedInfoField sharedInfoField) { addComponent(lineComponent); } - public LineListingLayout(Window window, CaseDataDto caseReferenceDto) { - this(window, new SharedInfoField(caseReferenceDto)); + public LineListingLayout(Window window, CaseDataDto caseDataDto) { + this(window, new SharedInfoField(caseDataDto)); + + Disease disease = caseDataDto == null ? FacadeProvider.getDiseaseConfigurationFacade().getDefaultDisease() : caseDataDto.getDisease(); ContactLineLayout line = buildNewLine(lineComponent); + line.updateTypeOfContactValues(disease); lines.add(line); lineComponent.addComponent(line); HorizontalLayout actionBar = new HorizontalLayout(); Button addLine = ButtonHelper.createIconButton(Captions.lineListingAddLine, VaadinIcons.PLUS, e -> { ContactLineLayout newLine = buildNewLine(lineComponent); + newLine.updateTypeOfContactValues(sharedInfoField.getValue().getDisease()); lines.add(newLine); lineComponent.addComponent(newLine); lines.get(0).enableDelete(true); @@ -114,11 +123,16 @@ public LineListingLayout(Window window, EventDto eventDto, Iterable> saveCallback) { this.saveCallback = saveCallback; } + public void updateTypeOfContactValues(Disease disease) { + for (ContactLineLayout line : lines) { + line.updateTypeOfContactValues(disease); + } + } + private ContactLineLayout buildNewLine(VerticalLayout lineComponent) { ContactLineLayout newLine = new ContactLineLayout(lines.size()); ContactLineLayoutDto newLineDto = new ContactLineLayoutDto(); @@ -227,6 +247,8 @@ private ContactLineLayout buildNewLine(VerticalLayout lineComponent) { class ContactLineLayout extends LineLayout { + private static final long serialVersionUID = -6430490310394731389L; + private final Binder binder = new Binder<>(ContactLineLayoutDto.class); private final ContactLineField contactLineField; @@ -254,6 +276,10 @@ public ContactLineLayout(int lineIndex) { contactLineField.showCaptions(); } + public void updateTypeOfContactValues(Disease disease) { + contactLineField.updateTypeOfContactValues(disease); + } + public void setBean(ContactLineLayoutDto bean) { binder.setBean(bean); } @@ -285,6 +311,8 @@ public PersonDto getPerson() { public static class ContactLineLayoutDto implements Serializable { + private static final long serialVersionUID = 1043859942972062173L; + public static final String LINE_FIELD = "lineField"; private ContactLineFieldDto lineField; @@ -300,6 +328,8 @@ public void setLineField(ContactLineFieldDto lineField) { public static class ContactLineDto implements Serializable { + private static final long serialVersionUID = -4356132050282062118L; + private ContactDto contact; private PersonDto person; diff --git a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/sharedinfo/SharedInfoField.java b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/sharedinfo/SharedInfoField.java index fd6558d8405..b099b1a02e5 100644 --- a/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/sharedinfo/SharedInfoField.java +++ b/sormas-ui/src/main/java/de/symeda/sormas/ui/contact/components/linelisting/sharedinfo/SharedInfoField.java @@ -1,5 +1,7 @@ package de.symeda.sormas.ui.contact.components.linelisting.sharedinfo; +import java.util.function.Consumer; + import com.vaadin.data.Binder; import com.vaadin.data.BinderValidationStatus; import com.vaadin.ui.ComboBox; @@ -26,6 +28,8 @@ public class SharedInfoField extends CustomField { + private static final long serialVersionUID = 1869000092813141681L; + private final Binder binder = new Binder<>(SharedInfoFieldDto.class); private final CaseSelector caseSelector; @@ -144,4 +148,8 @@ public boolean hasErrors() { private void updateDistricts(RegionReferenceDto regionDto) { FieldHelper.updateItems(district, regionDto != null ? FacadeProvider.getDistrictFacade().getAllActiveByRegion(regionDto.getUuid()) : null); } + + public void addDiseaseChangeHandler(Consumer diseaseChangeHandler) { + disease.addValueChangeListener(e -> diseaseChangeHandler.accept(disease.getValue())); + } }