Skip to content
This repository was archived by the owner on May 5, 2021. It is now read-only.

Commit 8e3fc9a

Browse files
author
barnabartha
committed
SORMAS-Foundation#3221 (and SORMAS-Foundation#3214) - fix issues created by nullableoptiongroup
1 parent 69c7abe commit 8e3fc9a

8 files changed

Lines changed: 34 additions & 12 deletions

File tree

sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactCreateForm.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ protected void addFields() {
152152
contactProximity = addField(ContactDto.CONTACT_PROXIMITY, NullableOptionGroup.class);
153153
contactProximity.removeStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL);
154154
if (isConfiguredServer("de")) {
155-
contactProximity.addValueChangeListener(e -> updateContactCategory((ContactProximity) contactProximity.getValue()));
155+
contactProximity.addValueChangeListener(e -> updateContactCategory((ContactProximity) contactProximity.getNullableValue()));
156156
contactProximityDetails = addField(ContactDto.CONTACT_PROXIMITY_DETAILS, TextField.class);
157157
contactCategory = addField(ContactDto.CONTACT_CATEGORY, NullableOptionGroup.class);
158158
}
@@ -343,7 +343,7 @@ protected void updateLastContactDateValidator() {
343343

344344
private void updateContactProximity() {
345345

346-
ContactProximity value = (ContactProximity) contactProximity.getValue();
346+
ContactProximity value = (ContactProximity) contactProximity.getNullableValue();
347347
FieldHelper.updateEnumData(
348348
contactProximity,
349349
Arrays.asList(ContactProximity.getValues(disease, FacadeProvider.getConfigFacade().getCountryLocale())));

sormas-ui/src/main/java/de/symeda/sormas/ui/contact/ContactDataForm.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ protected void addFields() {
222222

223223
contactProximity.addValueChangeListener(e -> {
224224
if (getInternalValue().getContactProximity() != e.getProperty().getValue() || contactCategory.isModified()) {
225-
updateContactCategory((ContactProximity) contactProximity.getValue());
225+
updateContactCategory((ContactProximity) contactProximity.getNullableValue());
226226
}
227227
});
228228
}

sormas-ui/src/main/java/de/symeda/sormas/ui/epidata/EpiDataForm.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ private void updateAnimalExposureFields() {
351351
}
352352

353353
private void updateBurialsHint(NullableOptionGroup burialAttendedField, EpiDataBurialsField burialsField) {
354-
YesNoUnknown value = (YesNoUnknown) burialAttendedField.getValue();
354+
YesNoUnknown value = (YesNoUnknown) burialAttendedField.getNullableValue();
355355
if (UserProvider.getCurrent().hasUserRight(UserRight.CASE_EDIT)
356356
&& value == YesNoUnknown.YES
357357
&& (burialsField == null || burialsField.getValue() == null || burialsField.getValue().size() == 0)) {
@@ -362,7 +362,7 @@ private void updateBurialsHint(NullableOptionGroup burialAttendedField, EpiDataB
362362
}
363363

364364
private void updateGatheringsHint(NullableOptionGroup gatheringAttendedField, EpiDataGatheringsField gatheringsField) {
365-
YesNoUnknown value = (YesNoUnknown) gatheringAttendedField.getValue();
365+
YesNoUnknown value = (YesNoUnknown) gatheringAttendedField.getNullableValue();
366366
if (UserProvider.getCurrent().hasUserRight(UserRight.CASE_EDIT)
367367
&& value == YesNoUnknown.YES
368368
&& (gatheringsField == null || gatheringsField.getValue() == null || gatheringsField.getValue().size() == 0)) {
@@ -373,7 +373,7 @@ private void updateGatheringsHint(NullableOptionGroup gatheringAttendedField, Ep
373373
}
374374

375375
private void updateTravelsHint(NullableOptionGroup traveledField, EpiDataTravelsField travelsField) {
376-
YesNoUnknown value = (YesNoUnknown) traveledField.getValue();
376+
YesNoUnknown value = (YesNoUnknown) traveledField.getNullableValue();
377377
if (UserProvider.getCurrent().hasUserRight(UserRight.CASE_EDIT)
378378
&& value == YesNoUnknown.YES
379379
&& (travelsField == null || travelsField.getValue() == null || travelsField.getValue().size() == 0)) {

sormas-ui/src/main/java/de/symeda/sormas/ui/hospitalization/HospitalizationForm.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ private void setDateFieldVisibilties() {
236236

237237
private void updatePrevHospHint(NullableOptionGroup hospitalizedPreviouslyField, PreviousHospitalizationsField previousHospitalizationsField) {
238238

239-
YesNoUnknown value = (YesNoUnknown) hospitalizedPreviouslyField.getValue();
239+
YesNoUnknown value = (YesNoUnknown) hospitalizedPreviouslyField.getNullableValue();
240240
Collection<PreviousHospitalizationDto> previousHospitalizations = previousHospitalizationsField.getValue();
241241
if (UserProvider.getCurrent().hasUserRight(UserRight.CASE_EDIT)
242242
&& value == YesNoUnknown.YES

sormas-ui/src/main/java/de/symeda/sormas/ui/samples/AbstractSampleForm.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.vaadin.v7.ui.ComboBox;
2222
import com.vaadin.v7.ui.DateField;
2323
import com.vaadin.v7.ui.Field;
24+
import com.vaadin.v7.ui.OptionGroup;
2425
import com.vaadin.v7.ui.TextArea;
2526
import com.vaadin.v7.ui.TextField;
2627

@@ -358,14 +359,14 @@ protected void initializeRequestedTestFields() {
358359
additionalTestingRequestedField.addValueChangeListener(e -> updateRequestedTestFields());
359360

360361
// CheckBox groups to select the requested pathogen/additional tests
361-
NullableOptionGroup requestedPathogenTestsField = addField(SampleDto.REQUESTED_PATHOGEN_TESTS, NullableOptionGroup.class);
362+
OptionGroup requestedPathogenTestsField = addField(SampleDto.REQUESTED_PATHOGEN_TESTS, OptionGroup.class);
362363
CssStyles.style(requestedPathogenTestsField, CssStyles.OPTIONGROUP_CHECKBOXES_HORIZONTAL);
363364
requestedPathogenTestsField.setMultiSelect(true);
364365
requestedPathogenTestsField.addItems((Object[]) PathogenTestType.values());
365366
requestedPathogenTestsField.removeItem(PathogenTestType.OTHER);
366367
requestedPathogenTestsField.setCaption(null);
367368

368-
NullableOptionGroup requestedAdditionalTestsField = addField(SampleDto.REQUESTED_ADDITIONAL_TESTS, NullableOptionGroup.class);
369+
OptionGroup requestedAdditionalTestsField = addField(SampleDto.REQUESTED_ADDITIONAL_TESTS, OptionGroup.class);
369370
CssStyles.style(requestedAdditionalTestsField, CssStyles.OPTIONGROUP_CHECKBOXES_HORIZONTAL);
370371
requestedAdditionalTestsField.setMultiSelect(true);
371372
requestedAdditionalTestsField.addItems((Object[]) AdditionalTestType.values());

sormas-ui/src/main/java/de/symeda/sormas/ui/utils/AbstractEditForm.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,9 @@ protected void setRequired(boolean required, String... fieldOrPropertyIds) {
306306
for (String propertyId : fieldOrPropertyIds) {
307307
if (!required || isEditableAllowed(propertyId)) {
308308
Field<?> field = getField(propertyId);
309-
field.setRequired(required);
309+
if (!field.isReadOnly()) {
310+
field.setRequired(required);
311+
}
310312
}
311313
}
312314
}

sormas-ui/src/main/java/de/symeda/sormas/ui/utils/NullableOptionGroup.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import java.util.Collection;
2121
import java.util.Set;
2222

23+
import org.apache.commons.lang3.ObjectUtils;
24+
2325
import com.vaadin.v7.data.Container;
2426
import com.vaadin.v7.data.util.converter.Converter;
2527
import com.vaadin.v7.ui.OptionGroup;
@@ -50,7 +52,7 @@ private void setup() {
5052
if (isRequired()) {
5153
setConverter((Converter<Object, ?>) null);
5254
} else {
53-
setConverter(new NullableOptionGroupConverter(((Set) getValue()).stream().findFirst().orElse(null)));
55+
setConverter(new NullableOptionGroupConverter(getFirstValue((Set) getValue())));
5456
}
5557
}
5658

@@ -59,9 +61,18 @@ public void setMultiSelect(boolean multiSelect) {
5961
throw new UnsupportedOperationException();
6062
}
6163

64+
public Object getNullableValue() {
65+
final Object value = super.getValue();
66+
return ObjectUtils.isNotEmpty(value) ? getFirstValue((Set) value) : null;
67+
}
68+
6269
@Override
6370
public void setRequired(boolean required) {
6471
super.setRequired(required);
6572
setup();
6673
}
74+
75+
private Object getFirstValue(Set value) {
76+
return value.stream().findFirst().orElse(null);
77+
}
6778
}

sormas-ui/src/main/java/de/symeda/sormas/ui/utils/SormasFieldGroupFieldFactory.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,14 @@ public <T extends Field> T createField(Class<?> type, Class<T> fieldType) {
144144
return super.createField(type, fieldType);
145145
}
146146

147+
@Override
148+
protected AbstractSelect createCompatibleSelect(Class<? extends AbstractSelect> fieldType) {
149+
if (NullableOptionGroup.class.isAssignableFrom(fieldType)) {
150+
return new NullableOptionGroup();
151+
}
152+
return super.createCompatibleSelect(fieldType);
153+
}
154+
147155
@Override
148156
protected <T extends AbstractTextField> T createAbstractTextField(Class<T> fieldType) {
149157
T textField = super.createAbstractTextField(fieldType);
@@ -157,7 +165,7 @@ protected <T extends AbstractTextField> T createAbstractTextField(Class<T> field
157165
@Override
158166
protected <T extends Field> T createBooleanField(Class<T> fieldType) {
159167
if (NullableOptionGroup.class.isAssignableFrom(fieldType)) {
160-
AbstractSelect s = createCompatibleSelect(NullableOptionGroup.class);
168+
final AbstractSelect s = new NullableOptionGroup();;
161169
s.addItem(Boolean.TRUE);
162170
s.setItemCaption(Boolean.TRUE, I18nProperties.getEnumCaption(YesNoUnknown.YES));
163171
s.addItem(Boolean.FALSE);

0 commit comments

Comments
 (0)