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

Commit 116d2ab

Browse files
SORMAS-Foundation#2993 add countries tab in configuration
1 parent 2b5ffc3 commit 116d2ab

13 files changed

Lines changed: 591 additions & 2 deletions

File tree

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import de.symeda.sormas.api.person.PersonFacade;
5555
import de.symeda.sormas.api.region.AreaFacade;
5656
import de.symeda.sormas.api.region.CommunityFacade;
57+
import de.symeda.sormas.api.region.CountryFacade;
5758
import de.symeda.sormas.api.region.DistrictFacade;
5859
import de.symeda.sormas.api.region.GeoShapeProvider;
5960
import de.symeda.sormas.api.region.RegionFacade;
@@ -158,6 +159,9 @@ public static FacilityFacade getFacilityFacade() {
158159
return get().lookupEjbRemote(FacilityFacade.class);
159160
}
160161

162+
public static CountryFacade getCountryFacade() {
163+
return get().lookupEjbRemote(CountryFacade.class);
164+
}
161165
public static RegionFacade getRegionFacade() {
162166
return get().lookupEjbRemote(RegionFacade.class);
163167
}

sormas-api/src/main/java/de/symeda/sormas/api/i18n/Strings.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public interface Strings {
5050
String confirmationArchiveCases = "confirmationArchiveCases";
5151
String confirmationArchiveCommunities = "confirmationArchiveCommunities";
5252
String confirmationArchiveCommunity = "confirmationArchiveCommunity";
53+
String confirmationArchiveCountries = "confirmationArchiveCountries";
5354
String confirmationArchiveDistrict = "confirmationArchiveDistrict";
5455
String confirmationArchiveDistricts = "confirmationArchiveDistricts";
5556
String confirmationArchiveEvent = "confirmationArchiveEvent";
@@ -72,6 +73,7 @@ public interface Strings {
7273
String confirmationDearchiveCases = "confirmationDearchiveCases";
7374
String confirmationDearchiveCommunities = "confirmationDearchiveCommunities";
7475
String confirmationDearchiveCommunity = "confirmationDearchiveCommunity";
76+
String confirmationDearchiveCountries = "confirmationDearchiveCountries";
7577
String confirmationDearchiveDistrict = "confirmationDearchiveDistrict";
7678
String confirmationDearchiveDistricts = "confirmationDearchiveDistricts";
7779
String confirmationDearchiveEvent = "confirmationDearchiveEvent";
@@ -567,6 +569,7 @@ public interface Strings {
567569
String headingImportCases = "headingImportCases";
568570
String headingImportCommunities = "headingImportCommunities";
569571
String headingImportContacts = "headingImportContacts";
572+
String headingImportCountries = "headingImportCountries";
570573
String headingImportCsvFile = "headingImportCsvFile";
571574
String headingImportDistricts = "headingImportDistricts";
572575
String headingImportedCaseInfo = "headingImportedCaseInfo";
@@ -750,6 +753,7 @@ public interface Strings {
750753
String infoWeeklyReportsView = "infoWeeklyReportsView";
751754
String labelNumberOfAreas = "labelNumberOfAreas";
752755
String labelNumberOfCommunities = "labelNumberOfCommunities";
756+
String labelNumberOfCountries = "labelNumberOfCountries";
753757
String labelNumberOfDistricts = "labelNumberOfDistricts";
754758
String labelNumberOfFacilities = "labelNumberOfFacilities";
755759
String labelNumberOfPointofEntry = "labelNumberOfPointofEntry";
@@ -824,6 +828,8 @@ public interface Strings {
824828
String messageConvertEventParticipantToCaseDifferentDiseases = "messageConvertEventParticipantToCaseDifferentDiseases";
825829
String messageCopyPassword = "messageCopyPassword";
826830
String messageCountEventsNotDeleted = "messageCountEventsNotDeleted";
831+
String messageCountryArchived = "messageCountryArchived";
832+
String messageCountryDearchived = "messageCountryDearchived";
827833
String messageCreateCollectionTask = "messageCreateCollectionTask";
828834
String messageCreateContactCase = "messageCreateContactCase";
829835
String messageDatabaseExportFailed = "messageDatabaseExportFailed";

sormas-api/src/main/java/de/symeda/sormas/api/infrastructure/InfrastructureType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@ public enum InfrastructureType {
88
COMMUNITY,
99
FACILITY,
1010
POINT_OF_ENTRY,
11-
POPULATION_DATA;
11+
POPULATION_DATA,
12+
COUNTRY;
1213
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package de.symeda.sormas.api.region;
2+
3+
import java.io.Serializable;
4+
5+
import de.symeda.sormas.api.BaseCriteria;
6+
import de.symeda.sormas.api.EntityRelevanceStatus;
7+
import de.symeda.sormas.api.utils.IgnoreForUrl;
8+
9+
public class CountryCriteria extends BaseCriteria implements Serializable, Cloneable {
10+
11+
private static final long serialVersionUID = -3172115054516586926L;
12+
13+
private EntityRelevanceStatus relevanceStatus;
14+
private String nameCodeLike;
15+
16+
public CountryCriteria relevanceStatus(EntityRelevanceStatus relevanceStatus) {
17+
this.relevanceStatus = relevanceStatus;
18+
return this;
19+
}
20+
21+
@IgnoreForUrl
22+
public EntityRelevanceStatus getRelevanceStatus() {
23+
return relevanceStatus;
24+
}
25+
26+
@IgnoreForUrl
27+
public String getNameCodeLike() {
28+
return nameCodeLike;
29+
}
30+
31+
public CountryCriteria nameCodeLike(String nameCodeLike) {
32+
this.nameCodeLike = nameCodeLike;
33+
return this;
34+
}
35+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package de.symeda.sormas.api.region;
2+
3+
import de.symeda.sormas.api.EntityDto;
4+
import de.symeda.sormas.api.utils.DataHelper;
5+
6+
public class CountryDto extends EntityDto {
7+
8+
private static final long serialVersionUID = 8309822957203823162L;
9+
10+
public static final String I18N_PREFIX = "Country";
11+
public static final String NAME = "name";
12+
public static final String EXTERNAL_ID = "externalID";
13+
public static final String ISO_CODE = "isoCode";
14+
public static final String UNO_CODE = "unoCode";
15+
16+
private String name;
17+
private String externalID;
18+
private String isoCode;
19+
private String unoCode;
20+
private boolean archived;
21+
22+
public String getName() {
23+
return name;
24+
}
25+
26+
public void setName(String name) {
27+
this.name = name;
28+
}
29+
30+
public String getExternalID() {
31+
return externalID;
32+
}
33+
34+
public void setExternalID(String externalID) {
35+
this.externalID = externalID;
36+
}
37+
38+
public String getIsoCode() {
39+
return isoCode;
40+
}
41+
42+
public void setIsoCode(String isoCode) {
43+
this.isoCode = isoCode;
44+
}
45+
46+
public String getUnoCode() {
47+
return unoCode;
48+
}
49+
50+
public void setUnoCode(String unoCode) {
51+
this.unoCode = unoCode;
52+
}
53+
54+
public boolean isArchived() {
55+
return archived;
56+
}
57+
58+
public void setArchived(boolean archived) {
59+
this.archived = archived;
60+
}
61+
62+
@Override
63+
public String toString() {
64+
return this.name;
65+
}
66+
67+
public static CountryDto build() {
68+
CountryDto dto = new CountryDto();
69+
dto.setUuid(DataHelper.createUuid());
70+
return dto;
71+
}
72+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package de.symeda.sormas.api.region;
2+
3+
import java.util.List;
4+
5+
import javax.ejb.Remote;
6+
7+
import de.symeda.sormas.api.utils.SortProperty;
8+
import de.symeda.sormas.api.utils.ValidationRuntimeException;
9+
10+
@Remote
11+
public interface CountryFacade {
12+
13+
CountryDto getCountryByUuid(String uuid);
14+
15+
List<CountryDto> getIndexList(CountryCriteria criteria, Integer first, Integer max, List<SortProperty> sortProperties);
16+
17+
long count(CountryCriteria criteria);
18+
19+
void saveCountry(CountryDto dto) throws ValidationRuntimeException;
20+
21+
void archive(String countryUuid);
22+
23+
void dearchive(String countryUuid);
24+
}

sormas-api/src/main/resources/strings.properties

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ confirmationArchivePointOfEntry = Are you sure you want to archive this point of
152152
confirmationDearchivePointOfEntry = Are you sure you want to de-archive this point of entry?
153153
confirmationArchiveAreas = Are you sure you want to archive all %d selected areas?
154154
confirmationDearchiveAreas = Are you sure you want to de-archive all %d selected areas?
155+
confirmationArchiveCountries = Are you sure you want to archive all %d selected countries?
156+
confirmationDearchiveCountries = Are you sure you want to de-archive all %d selected countries?
155157
confirmationArchiveRegions = Are you sure you want to archive all %d selected regions?
156158
confirmationDearchiveRegions = Are you sure you want to de-archive all %d selected regions?
157159
confirmationArchiveDistricts = Are you sure you want to archive all %d selected districts?
@@ -353,6 +355,7 @@ headingImportFacilities = Import Facilities
353355
headingImportPointsOfEntry = Import Points of Entry
354356
headingImportPopulationData = Import Population Data
355357
headingImportAreas = Import Areas
358+
headingImportCountries= Import Countries
356359
headingImportRegions= Import Regions
357360
headingInformationSource = Source of Information
358361
headingIntroduction = Introduction
@@ -685,6 +688,8 @@ messageNoEndDate = no end date
685688
messageInvalidDatesLineListing = There are invalid dates in at least one of the line listing configurations. Please make sure that all entered dates are in the present or future and try again.
686689
messageAreaArchived = Area has been archived
687690
messageAreaDearchived = Area has been de-archived
691+
messageCountryArchived = Country has been archived
692+
messageCountryDearchived = Country has been de-archived
688693
messageRegionArchived = Region has been archived
689694
messageRegionDearchived = Region has been de-archived
690695
messageDistrictArchived = District has been archived
@@ -767,6 +772,7 @@ notificationVisitCompleted = A follow-up visit for contact %s assigned to user %
767772

768773
#Labels
769774
labelNumberOfUsers = No. of users
775+
labelNumberOfCountries = No. of countries
770776
labelNumberOfRegions = No. of regions
771777
labelNumberOfDistricts = No. of districts
772778
labelNumberOfCommunities = No. of communities

sormas-ui/src/main/java/de/symeda/sormas/ui/MainScreen.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import de.symeda.sormas.ui.caze.CasesView;
5757
import de.symeda.sormas.ui.configuration.AbstractConfigurationView;
5858
import de.symeda.sormas.ui.configuration.infrastructure.CommunitiesView;
59+
import de.symeda.sormas.ui.configuration.infrastructure.CountriesView;
5960
import de.symeda.sormas.ui.configuration.infrastructure.DistrictsView;
6061
import de.symeda.sormas.ui.configuration.infrastructure.FacilitiesView;
6162
import de.symeda.sormas.ui.configuration.infrastructure.PointsOfEntryView;
@@ -105,7 +106,8 @@ private static Set<String> initKnownViews() {
105106
DistrictsView.VIEW_NAME,
106107
CommunitiesView.VIEW_NAME,
107108
FacilitiesView.VIEW_NAME,
108-
PointsOfEntryView.VIEW_NAME));
109+
PointsOfEntryView.VIEW_NAME,
110+
CountriesView.VIEW_NAME));
109111

110112
if (permitted(FeatureType.CASE_SURVEILANCE, UserRight.DASHBOARD_SURVEILLANCE_ACCESS)) {
111113
views.add(SurveillanceDashboardView.VIEW_NAME);

sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/AbstractConfigurationView.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import de.symeda.sormas.ui.configuration.docgeneration.DocumentTemplatesView;
3535
import de.symeda.sormas.ui.configuration.infrastructure.AreasView;
3636
import de.symeda.sormas.ui.configuration.infrastructure.CommunitiesView;
37+
import de.symeda.sormas.ui.configuration.infrastructure.CountriesView;
3738
import de.symeda.sormas.ui.configuration.infrastructure.DistrictsView;
3839
import de.symeda.sormas.ui.configuration.infrastructure.FacilitiesView;
3940
import de.symeda.sormas.ui.configuration.infrastructure.PointsOfEntryView;
@@ -71,6 +72,11 @@ public void refreshMenu(SubMenu menu, Label infoLabel, Label infoLabelSub, Strin
7172
null,
7273
false);
7374
}
75+
menu.addView(
76+
CountriesView.VIEW_NAME,
77+
I18nProperties.getPrefixCaption("View", CountriesView.VIEW_NAME.replaceAll("/", ".") + ".short", ""),
78+
null,
79+
false);
7480
menu.addView(
7581
RegionsView.VIEW_NAME,
7682
I18nProperties.getPrefixCaption("View", RegionsView.VIEW_NAME.replaceAll("/", ".") + ".short", ""),
@@ -143,6 +149,7 @@ public static void registerViews(Navigator navigator) {
143149
if (FacadeProvider.getFeatureConfigurationFacade().isFeatureEnabled(FeatureType.INFRASTRUCTURE_TYPE_AREA)) {
144150
navigator.addView(AreasView.VIEW_NAME, AreasView.class);
145151
}
152+
navigator.addView(CountriesView.VIEW_NAME, CountriesView.class);
146153
navigator.addView(RegionsView.VIEW_NAME, RegionsView.class);
147154
navigator.addView(DistrictsView.VIEW_NAME, DistrictsView.class);
148155
navigator.addView(CommunitiesView.VIEW_NAME, CommunitiesView.class);
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package de.symeda.sormas.ui.configuration.infrastructure;
2+
3+
import java.util.stream.Collectors;
4+
5+
import com.vaadin.data.provider.DataProvider;
6+
import com.vaadin.data.provider.ListDataProvider;
7+
import com.vaadin.shared.data.sort.SortDirection;
8+
9+
import de.symeda.sormas.api.FacadeProvider;
10+
import de.symeda.sormas.api.i18n.I18nProperties;
11+
import de.symeda.sormas.api.region.CountryCriteria;
12+
import de.symeda.sormas.api.region.CountryDto;
13+
import de.symeda.sormas.api.user.UserRight;
14+
import de.symeda.sormas.api.utils.SortProperty;
15+
import de.symeda.sormas.ui.ControllerProvider;
16+
import de.symeda.sormas.ui.UserProvider;
17+
import de.symeda.sormas.ui.ViewModelProviders;
18+
import de.symeda.sormas.ui.utils.FilteredGrid;
19+
import de.symeda.sormas.ui.utils.ViewConfiguration;
20+
21+
public class CountriesGrid extends FilteredGrid<CountryDto, CountryCriteria> {
22+
23+
private static final long serialVersionUID = -8192499609737564649L;
24+
25+
public CountriesGrid(CountryCriteria criteria) {
26+
super(CountryDto.class);
27+
28+
setSizeFull();
29+
30+
ViewConfiguration viewConfiguration = ViewModelProviders.of(CountriesView.class).get(ViewConfiguration.class);
31+
setInEagerMode(viewConfiguration.isInEagerMode());
32+
33+
if (isInEagerMode() && UserProvider.getCurrent().hasUserRight(UserRight.PERFORM_BULK_OPERATIONS)) {
34+
setCriteria(criteria);
35+
setEagerDataProvider();
36+
} else {
37+
setLazyDataProvider();
38+
setCriteria(criteria);
39+
}
40+
41+
setColumns(CountryDto.NAME, CountryDto.EXTERNAL_ID, CountryDto.ISO_CODE, CountryDto.UNO_CODE);
42+
43+
if (UserProvider.getCurrent().hasUserRight(UserRight.INFRASTRUCTURE_EDIT)) {
44+
addEditColumn(e -> ControllerProvider.getInfrastructureController().editCountry(e.getUuid()));
45+
}
46+
47+
for (Column<?, ?> column : getColumns()) {
48+
column.setCaption(I18nProperties.getPrefixCaption(CountryDto.I18N_PREFIX, column.getId(), column.getCaption()));
49+
}
50+
}
51+
52+
public void reload() {
53+
getDataProvider().refreshAll();
54+
}
55+
56+
public void setLazyDataProvider() {
57+
58+
DataProvider<CountryDto, CountryCriteria> dataProvider = DataProvider.fromFilteringCallbacks(
59+
query -> FacadeProvider.getCountryFacade()
60+
.getIndexList(
61+
query.getFilter().orElse(null),
62+
query.getOffset(),
63+
query.getLimit(),
64+
query.getSortOrders()
65+
.stream()
66+
.map(sortOrder -> new SortProperty(sortOrder.getSorted(), sortOrder.getDirection() == SortDirection.ASCENDING))
67+
.collect(Collectors.toList()))
68+
.stream(),
69+
query -> (int) FacadeProvider.getCountryFacade().count(query.getFilter().orElse(null)));
70+
setDataProvider(dataProvider);
71+
setSelectionMode(SelectionMode.NONE);
72+
}
73+
74+
public void setEagerDataProvider() {
75+
76+
ListDataProvider<CountryDto> dataProvider =
77+
DataProvider.fromStream(FacadeProvider.getCountryFacade().getIndexList(getCriteria(), null, null, null).stream());
78+
setDataProvider(dataProvider);
79+
setSelectionMode(SelectionMode.MULTI);
80+
}
81+
}

0 commit comments

Comments
 (0)