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

Commit 1b5f7e6

Browse files
BarnaBarthabarnabartha
andauthored
SORMAS-Foundation#3014 - do not mark as dirty location fields changed by the converter (SORMAS-Foundation#4097)
* SORMAS-Foundation#3014 - do not mark as dirty location fields changed by the converter * SORMAS-Foundation#3014 - do not mark as dirty location fields changed by the converter - for case / point of entry / facility forms * SORMAS-Foundation#3014 - do not mark as dirty location fields changed by the converter - for case / point of entry / facility forms Co-authored-by: barnabartha <[email protected]>
1 parent 1cfe166 commit 1b5f7e6

7 files changed

Lines changed: 65 additions & 15 deletions

File tree

sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataForm.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105
import de.symeda.sormas.api.utils.fieldvisibility.checkers.CountryFieldVisibilityChecker;
106106
import de.symeda.sormas.ui.ControllerProvider;
107107
import de.symeda.sormas.ui.UserProvider;
108+
import de.symeda.sormas.ui.location.AccessibleTextField;
108109
import de.symeda.sormas.ui.utils.AbstractEditForm;
109110
import de.symeda.sormas.ui.utils.ButtonHelper;
110111
import de.symeda.sormas.ui.utils.ConfirmationComponent;
@@ -557,9 +558,9 @@ protected void addFields() {
557558
false,
558559
I18nProperties.getValidationError(Validations.afterDate, prohibitionToWorkUntil.getCaption(), prohibitionToWorkFrom.getCaption())));
559560

560-
TextField tfReportLat = addField(CaseDataDto.REPORT_LAT, TextField.class);
561+
AccessibleTextField tfReportLat = addField(CaseDataDto.REPORT_LAT, AccessibleTextField.class);
561562
tfReportLat.setConverter(new StringToAngularLocationConverter());
562-
TextField tfReportLon = addField(CaseDataDto.REPORT_LON, TextField.class);
563+
AccessibleTextField tfReportLon = addField(CaseDataDto.REPORT_LON, AccessibleTextField.class);
563564
tfReportLon.setConverter(new StringToAngularLocationConverter());
564565
addField(CaseDataDto.REPORT_LAT_LON_ACCURACY, TextField.class);
565566

sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/infrastructure/FacilityEditForm.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import de.symeda.sormas.api.region.DistrictReferenceDto;
3535
import de.symeda.sormas.api.region.RegionDto;
3636
import de.symeda.sormas.api.region.RegionReferenceDto;
37+
import de.symeda.sormas.ui.location.AccessibleTextField;
3738
import de.symeda.sormas.ui.utils.AbstractEditForm;
3839
import de.symeda.sormas.ui.utils.FieldHelper;
3940
import de.symeda.sormas.ui.utils.StringToAngularLocationConverter;
@@ -83,10 +84,10 @@ protected void addFields() {
8384
ComboBox district = addInfrastructureField(FacilityDto.DISTRICT);
8485
ComboBox community = addInfrastructureField(FacilityDto.COMMUNITY);
8586
addField(FacilityDto.CITY, TextField.class);
86-
TextField latitude = addField(FacilityDto.LATITUDE, TextField.class);
87+
AccessibleTextField latitude = addField(FacilityDto.LATITUDE, AccessibleTextField.class);
8788
latitude.setConverter(new StringToAngularLocationConverter());
8889
latitude.setConversionError(I18nProperties.getValidationError(Validations.onlyGeoCoordinatesAllowed, latitude.getCaption()));
89-
TextField longitude = addField(FacilityDto.LONGITUDE, TextField.class);
90+
AccessibleTextField longitude = addField(FacilityDto.LONGITUDE, AccessibleTextField.class);
9091
longitude.setConverter(new StringToAngularLocationConverter());
9192
longitude.setConversionError(I18nProperties.getValidationError(Validations.onlyGeoCoordinatesAllowed, longitude.getCaption()));
9293
addField(RegionDto.EXTERNAL_ID, TextField.class);

sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/infrastructure/PointOfEntryForm.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import de.symeda.sormas.api.infrastructure.PointOfEntryDto;
1313
import de.symeda.sormas.api.region.RegionDto;
1414
import de.symeda.sormas.api.region.RegionReferenceDto;
15+
import de.symeda.sormas.ui.location.AccessibleTextField;
1516
import de.symeda.sormas.ui.utils.AbstractEditForm;
1617
import de.symeda.sormas.ui.utils.FieldHelper;
1718
import de.symeda.sormas.ui.utils.StringToAngularLocationConverter;
@@ -47,8 +48,8 @@ protected void addFields() {
4748
addField(PointOfEntryDto.NAME, TextField.class);
4849
addField(PointOfEntryDto.POINT_OF_ENTRY_TYPE, ComboBox.class);
4950
addField(PointOfEntryDto.ACTIVE, CheckBox.class);
50-
TextField tfLatitude = addField(PointOfEntryDto.LATITUDE, TextField.class);
51-
TextField tfLongitude = addField(PointOfEntryDto.LONGITUDE, TextField.class);
51+
AccessibleTextField tfLatitude = addField(PointOfEntryDto.LATITUDE, AccessibleTextField.class);
52+
AccessibleTextField tfLongitude = addField(PointOfEntryDto.LONGITUDE, AccessibleTextField.class);
5253
ComboBox cbRegion = addInfrastructureField(PointOfEntryDto.REGION);
5354
ComboBox cbDistrict = addInfrastructureField(PointOfEntryDto.DISTRICT);
5455
addField(RegionDto.EXTERNAL_ID, TextField.class);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package de.symeda.sormas.ui.location;
2+
3+
import com.vaadin.v7.shared.ui.textfield.AbstractTextFieldState;
4+
5+
public class AccessibleTextField extends com.vaadin.v7.ui.TextField {
6+
@Override
7+
public AbstractTextFieldState getState() {
8+
return super.getState();
9+
}
10+
}

sormas-ui/src/main/java/de/symeda/sormas/ui/location/LocationEditForm.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -182,12 +182,13 @@ protected void addFields() {
182182
ComboBox areaType = addField(LocationDto.AREA_TYPE, ComboBox.class);
183183
areaType.setDescription(I18nProperties.getDescription(getPropertyI18nPrefix() + "." + LocationDto.AREA_TYPE));
184184

185-
TextField tfLatitude = addField(LocationDto.LATITUDE, TextField.class);
186-
tfLatitude.setConverter(new StringToAngularLocationConverter());
187-
TextField tfLongitude = addField(LocationDto.LONGITUDE, TextField.class);
188-
tfLongitude.setConverter(new StringToAngularLocationConverter());
189-
TextField tfAccuracy = addField(LocationDto.LAT_LON_ACCURACY, TextField.class);
190-
tfAccuracy.setConverter(new StringToAngularLocationConverter());
185+
final AccessibleTextField tfLatitude = addField(LocationDto.LATITUDE, AccessibleTextField.class);
186+
final AccessibleTextField tfLongitude = addField(LocationDto.LONGITUDE, AccessibleTextField.class);
187+
final AccessibleTextField tfAccuracy = addField(LocationDto.LAT_LON_ACCURACY, AccessibleTextField.class);
188+
final StringToAngularLocationConverter stringToAngularLocationConverter = new StringToAngularLocationConverter();
189+
tfLatitude.setConverter(stringToAngularLocationConverter);
190+
tfLongitude.setConverter(stringToAngularLocationConverter);
191+
tfAccuracy.setConverter(stringToAngularLocationConverter);
191192

192193
ComboBox region = addInfrastructureField(LocationDto.REGION);
193194
ComboBox district = addInfrastructureField(LocationDto.DISTRICT);

sormas-ui/src/main/java/de/symeda/sormas/ui/person/LocationsField.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import com.vaadin.ui.Window;
66
import com.vaadin.v7.ui.Table;
77

8-
import de.symeda.sormas.api.hospitalization.PreviousHospitalizationDto;
98
import de.symeda.sormas.api.i18n.Captions;
109
import de.symeda.sormas.api.i18n.I18nProperties;
1110
import de.symeda.sormas.api.i18n.Strings;
@@ -46,7 +45,7 @@ protected void editEntry(LocationDto entry, boolean create, Consumer<LocationDto
4645
editForm.setValue(entry);
4746

4847
final CommitDiscardWrapperComponent<LocationEditForm> editView =
49-
new CommitDiscardWrapperComponent<LocationEditForm>(editForm, true, editForm.getFieldGroup());
48+
new CommitDiscardWrapperComponent<>(editForm, true, editForm.getFieldGroup());
5049
editView.getCommitButton().setCaption(I18nProperties.getString(Strings.done));
5150

5251
Window popupWindow = VaadinUiUtil.showModalPopupWindow(editView, I18nProperties.getCaption(LocationDto.I18N_PREFIX));

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

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@
5050
import de.symeda.sormas.api.i18n.Descriptions;
5151
import de.symeda.sormas.api.i18n.I18nProperties;
5252
import de.symeda.sormas.api.i18n.Strings;
53+
import de.symeda.sormas.api.location.LocationDto;
54+
import de.symeda.sormas.ui.location.AccessibleTextField;
55+
import de.symeda.sormas.ui.location.LocationEditForm;
5356

5457
public class CommitDiscardWrapperComponent<C extends Component> extends VerticalLayout implements DirtyStateComponent, Buffered {
5558

@@ -173,13 +176,43 @@ protected void setWrappedComponent(C component, FieldGroup... fieldGroups) {
173176
}
174177

175178
dirty = false;
179+
addDirtyHandler(fieldGroups);
180+
}
181+
182+
@SuppressWarnings("deprecation")
183+
protected void addDirtyHandler(FieldGroup[] fieldGroups) {
176184
if (fieldGroups != null) {
177185
Stream.of(fieldGroups).forEach(fg -> fg.getFields().forEach(f -> f.addValueChangeListener(ev -> {
178-
dirty = true;
186+
final Object source = ((Field.ValueChangeEvent) ev).getSource();
187+
if (source instanceof LocationEditForm) {
188+
final LocationEditForm locationEditForm = (LocationEditForm) source;
189+
if (atLeastOneFieldModified(
190+
locationEditForm.getField(LocationDto.LATITUDE),
191+
locationEditForm.getField(LocationDto.LONGITUDE),
192+
locationEditForm.getField(LocationDto.LAT_LON_ACCURACY))) {
193+
dirty = true;
194+
}
195+
} else if (source instanceof AccessibleTextField) {
196+
final AccessibleTextField accessibleTextField = (AccessibleTextField) source;
197+
if (accessibleTextField.isModified()) {
198+
dirty = true;
199+
}
200+
} else {
201+
dirty = true;
202+
}
179203
})));
180204
}
181205
}
182206

207+
private boolean atLeastOneFieldModified(AccessibleTextField... fields) {
208+
for (AccessibleTextField field : fields) {
209+
if (field.getState().modified) {
210+
return true;
211+
}
212+
}
213+
return false;
214+
}
215+
183216
protected Stream<Field<?>> getFieldsStream() {
184217

185218
if (fieldGroups != null) {
@@ -644,4 +677,8 @@ private void updateInternalHeight() {
644677
public boolean isDirty() {
645678
return dirty;
646679
}
680+
681+
public void setDirty(boolean dirty) {
682+
this.dirty = dirty;
683+
}
647684
}

0 commit comments

Comments
 (0)