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

Commit c934f9a

Browse files
SORMAS-Foundation#2746 - Fixed address types not being properly filtered in app
1 parent 4f9da71 commit c934f9a

6 files changed

Lines changed: 60 additions & 19 deletions

File tree

sormas-api/src/main/java/de/symeda/sormas/api/ConfigFacade.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public interface ConfigFacade {
2828

2929
String getCountryLocale();
3030

31+
String getCountryCode();
32+
3133
boolean isConfiguredCountry(String countryCode);
3234

3335
String getEpidPrefix();

sormas-api/src/main/java/de/symeda/sormas/api/person/PersonAddressType.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package de.symeda.sormas.api.person;
22

33
import de.symeda.sormas.api.CountryHelper;
4-
import de.symeda.sormas.api.FacadeProvider;
54
import de.symeda.sormas.api.i18n.I18nProperties;
65

76
public enum PersonAddressType {
@@ -13,9 +12,8 @@ public enum PersonAddressType {
1312
EVENT_LOCATION,
1413
OTHER_ADDRESS;
1514

16-
public static PersonAddressType[] getValues() {
17-
18-
if (!FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND)) {
15+
public static PersonAddressType[] getValues(String countryCode) {
16+
if (!CountryHelper.COUNTRY_CODE_SWITZERLAND.equals(countryCode)) {
1917
return new PersonAddressType[] {
2018
HOME,
2119
PLACE_OF_WORK,

sormas-app/app/src/main/java/de/symeda/sormas/app/backend/config/ConfigProvider.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -647,6 +647,28 @@ public static String getServerLocale() {
647647
return instance.serverLocale;
648648
}
649649

650+
public static String getServerCountryCode() {
651+
String locale = getServerLocale();
652+
String normalizedLocale = normalizeLocaleString(locale);
653+
654+
if (normalizedLocale.contains("-")) {
655+
return normalizedLocale.substring(normalizedLocale.lastIndexOf("-") + 1);
656+
} else {
657+
return normalizedLocale;
658+
}
659+
}
660+
661+
public static String normalizeLocaleString(String locale) {
662+
locale = locale.trim();
663+
int pos = Math.max(locale.indexOf('-'), locale.indexOf('_'));
664+
if (pos < 0) {
665+
locale = locale.toLowerCase();
666+
} else {
667+
locale = locale.substring(0, pos).toLowerCase(Locale.ENGLISH) + '-' + locale.substring(pos + 1).toUpperCase(Locale.ENGLISH);
668+
}
669+
return locale;
670+
}
671+
650672
public static boolean isConfiguredServer(String countryCode) {
651673
if (Pattern.matches(FULL_COUNTRY_LOCALE_PATTERN, getServerLocale())) {
652674
return getServerLocale().toLowerCase().endsWith(countryCode.toLowerCase());

sormas-app/app/src/main/java/de/symeda/sormas/app/component/dialog/LocationDialog.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
package de.symeda.sormas.app.component.dialog;
1717

18+
import java.util.Arrays;
1819
import java.util.List;
1920

2021
import android.content.Context;
@@ -25,11 +26,14 @@
2526
import androidx.databinding.library.baseAdapters.BR;
2627
import androidx.fragment.app.FragmentActivity;
2728

29+
import de.symeda.sormas.api.CountryHelper;
2830
import de.symeda.sormas.api.location.AreaType;
2931
import de.symeda.sormas.api.location.LocationDto;
3032
import de.symeda.sormas.api.person.PersonAddressType;
3133
import de.symeda.sormas.api.utils.ValidationException;
3234
import de.symeda.sormas.app.R;
35+
import de.symeda.sormas.app.backend.common.DatabaseHelper;
36+
import de.symeda.sormas.app.backend.config.ConfigProvider;
3337
import de.symeda.sormas.app.backend.location.Location;
3438
import de.symeda.sormas.app.component.Item;
3539
import de.symeda.sormas.app.component.controls.ControlButtonType;
@@ -192,7 +196,12 @@ public void configureAsPersonAddressDialog(boolean showDeleteButton) {
192196
}
193197

194198
contentBinding.locationAddressType.setVisibility(View.VISIBLE);
195-
contentBinding.locationAddressType.initializeSpinner(DataUtils.getEnumItems(PersonAddressType.class));
199+
if (!ConfigProvider.isConfiguredServer(CountryHelper.COUNTRY_CODE_SWITZERLAND)) {
200+
contentBinding.locationAddressType
201+
.initializeSpinner(DataUtils.toItems(Arrays.asList(PersonAddressType.getValues(ConfigProvider.getServerCountryCode()))));
202+
} else {
203+
contentBinding.locationAddressType.initializeSpinner(DataUtils.getEnumItems(PersonAddressType.class));
204+
}
196205
contentBinding.locationAddressType.setValidationCallback(() -> contentBinding.locationAddressType.getValue() != null);
197206
}
198207

sormas-backend/src/main/java/de/symeda/sormas/backend/common/ConfigFacadeEjb.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,18 @@ public String getCountryLocale() {
166166
return normalizeLocaleString(locale);
167167
}
168168

169+
@Override
170+
public String getCountryCode() {
171+
String locale = getProperty(COUNTRY_LOCALE, Language.EN.getLocale().toString());
172+
String normalizedLocale = normalizeLocaleString(locale);
173+
174+
if (normalizedLocale.contains("-")) {
175+
return normalizedLocale.substring(normalizedLocale.lastIndexOf("-") + 1);
176+
} else {
177+
return normalizedLocale;
178+
}
179+
}
180+
169181
static String normalizeLocaleString(String locale) {
170182

171183
locale = locale.trim();

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

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,6 @@
1717
*******************************************************************************/
1818
package de.symeda.sormas.ui.location;
1919

20-
import static de.symeda.sormas.ui.utils.LayoutUtil.divs;
21-
import static de.symeda.sormas.ui.utils.LayoutUtil.fluidColumnLoc;
22-
import static de.symeda.sormas.ui.utils.LayoutUtil.fluidRow;
23-
import static de.symeda.sormas.ui.utils.LayoutUtil.fluidRowLocs;
24-
import static de.symeda.sormas.ui.utils.LayoutUtil.loc;
25-
26-
import java.util.Arrays;
27-
import java.util.Collections;
28-
import java.util.stream.Stream;
29-
30-
import org.apache.commons.lang3.ObjectUtils;
31-
3220
import com.vaadin.icons.VaadinIcons;
3321
import com.vaadin.ui.Alignment;
3422
import com.vaadin.ui.Button;
@@ -42,7 +30,6 @@
4230
import com.vaadin.v7.ui.ComboBox;
4331
import com.vaadin.v7.ui.Field;
4432
import com.vaadin.v7.ui.TextField;
45-
4633
import de.symeda.sormas.api.FacadeProvider;
4734
import de.symeda.sormas.api.i18n.I18nProperties;
4835
import de.symeda.sormas.api.location.LocationDto;
@@ -59,6 +46,17 @@
5946
import de.symeda.sormas.ui.utils.FieldHelper;
6047
import de.symeda.sormas.ui.utils.StringToAngularLocationConverter;
6148
import de.symeda.sormas.ui.utils.UiFieldAccessCheckers;
49+
import org.apache.commons.lang3.ObjectUtils;
50+
51+
import java.util.Arrays;
52+
import java.util.Collections;
53+
import java.util.stream.Stream;
54+
55+
import static de.symeda.sormas.ui.utils.LayoutUtil.divs;
56+
import static de.symeda.sormas.ui.utils.LayoutUtil.fluidColumnLoc;
57+
import static de.symeda.sormas.ui.utils.LayoutUtil.fluidRow;
58+
import static de.symeda.sormas.ui.utils.LayoutUtil.fluidRowLocs;
59+
import static de.symeda.sormas.ui.utils.LayoutUtil.loc;
6260

6361
public class LocationEditForm extends AbstractEditForm<LocationDto> {
6462

@@ -113,7 +111,7 @@ protected void addFields() {
113111
if (!isConfiguredServer("ch")) {
114112
addressType.removeAllItems();
115113
addressType.setItemCaptionMode(AbstractSelect.ItemCaptionMode.ID);
116-
addressType.addItems(PersonAddressType.getValues());
114+
addressType.addItems(PersonAddressType.getValues(FacadeProvider.getConfigFacade().getCountryCode()));
117115
}
118116
TextField addressTypeDetails = addField(LocationDto.ADDRESS_TYPE_DETAILS, TextField.class);
119117
addressTypeDetails.setVisible(false);

0 commit comments

Comments
 (0)