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

Commit a4dc061

Browse files
lgallgal
authored andcommitted
SORMAS-Foundation#3610 rest endpoint for BAG export contacts
1 parent 33e06eb commit a4dc061

9 files changed

Lines changed: 91 additions & 48 deletions

File tree

sormas-api/src/main/java/de/symeda/sormas/api/user/UserRight.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import static de.symeda.sormas.api.user.UserRole.ADMIN;
2121
import static de.symeda.sormas.api.user.UserRole.ADMIN_SUPERVISOR;
22+
import static de.symeda.sormas.api.user.UserRole.BAG_USER;
2223
import static de.symeda.sormas.api.user.UserRole.CASE_OFFICER;
2324
import static de.symeda.sormas.api.user.UserRole.CASE_SUPERVISOR;
2425
import static de.symeda.sormas.api.user.UserRole.COMMUNITY_INFORMANT;
@@ -1182,16 +1183,7 @@ public enum UserRight {
11821183
POE_SUPERVISOR
11831184
),
11841185
BAG_EXPORT(
1185-
ADMIN,
1186-
NATIONAL_USER,
1187-
NATIONAL_CLINICIAN,
1188-
POE_NATIONAL_USER,
1189-
SURVEILLANCE_SUPERVISOR,
1190-
ADMIN_SUPERVISOR,
1191-
CASE_SUPERVISOR,
1192-
CONTACT_SUPERVISOR,
1193-
POE_SUPERVISOR,
1194-
LAB_USER
1186+
BAG_USER
11951187
),
11961188
SORMAS_TO_SORMAS_SHARE(
11971189
ADMIN,

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,6 +1104,7 @@ UserRole.REST_EXTERNAL_VISITS_USER = External Visits User
11041104
UserRole.REST_USER = ReST User
11051105
UserRole.SORMAS_TO_SORMAS_CLIENT = Sormas to Sormas Client
11061106
UserRole.ADMIN_SUPERVISOR = Admin Surveillance Supervisor
1107+
UserRole.BAG_USER = BAG User
11071108
UserRole.Short.ADMIN = Admin
11081109
UserRole.Short.CASE_OFFICER = CaseOff
11091110
UserRole.Short.CASE_SUPERVISOR = Clinician
@@ -1129,6 +1130,7 @@ UserRole.Short.SURVEILLANCE_OFFICER = SurvOff
11291130
UserRole.Short.REST_EXTERNAL_VISITS_USER = ExtVis
11301131
UserRole.Short.REST_USER = ReST
11311132
UserRole.Short.SORMAS_TO_SORMAS_CLIENT = SormasToSormas
1133+
UserRole.Short.BAG_USER = BAG
11321134

11331135
# Vaccination
11341136
Vaccination.UNKNOWN = Unknown

sormas-backend/src/main/java/de/symeda/sormas/backend/bagexport/BAGExportFacadeEjb.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.Optional;
2626
import java.util.stream.Collectors;
2727

28+
import javax.ejb.EJB;
2829
import javax.ejb.LocalBean;
2930
import javax.ejb.Stateless;
3031
import javax.persistence.EntityManager;
@@ -44,6 +45,7 @@
4445
import de.symeda.sormas.api.sample.PathogenTestResultType;
4546
import de.symeda.sormas.api.utils.YesNoUnknown;
4647
import de.symeda.sormas.backend.caze.Case;
48+
import de.symeda.sormas.backend.common.ConfigFacadeEjb.ConfigFacadeEjbLocal;
4749
import de.symeda.sormas.backend.contact.Contact;
4850
import de.symeda.sormas.backend.contact.ContactJoins;
4951
import de.symeda.sormas.backend.location.Location;
@@ -62,6 +64,9 @@ public class BAGExportFacadeEjb implements BAGExportFacade {
6264
@PersistenceContext(unitName = ModelConstants.PERSISTENCE_UNIT_NAME)
6365
private EntityManager em;
6466

67+
@EJB
68+
private ConfigFacadeEjbLocal configFacade;
69+
6570
@Override
6671
public List<BAGExportCaseDto> getCaseExportList(int first, int max) {
6772
CriteriaBuilder cb = em.getCriteriaBuilder();

sormas-rest/src/main/java/de/symeda/sormas/rest/BAGExportResource.java

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@
1515

1616
package de.symeda.sormas.rest;
1717

18-
import java.io.ByteArrayOutputStream;
18+
import java.io.OutputStream;
1919
import java.util.Date;
20+
import java.util.function.Consumer;
2021

2122
import javax.annotation.security.RolesAllowed;
2223
import javax.ws.rs.Consumes;
@@ -25,12 +26,13 @@
2526
import javax.ws.rs.Produces;
2627
import javax.ws.rs.core.MediaType;
2728
import javax.ws.rs.core.Response;
29+
import javax.ws.rs.core.StreamingOutput;
2830

2931
import de.symeda.sormas.api.FacadeProvider;
3032
import de.symeda.sormas.api.bagexport.BAGExportCaseDto;
31-
import de.symeda.sormas.api.i18n.I18nProperties;
33+
import de.symeda.sormas.api.bagexport.BAGExportContactDto;
3234
import de.symeda.sormas.api.utils.CsvStreamUtils;
33-
import de.symeda.sormas.api.utils.DateFormatHelper;
35+
import de.symeda.sormas.api.utils.DateHelper;
3436

3537
@Path("/bagexport")
3638
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@@ -42,26 +44,45 @@ public class BAGExportResource {
4244
@GET
4345
@Path("/cases")
4446
public Response exportCases(String file) {
45-
ByteArrayOutputStream baos = new ByteArrayOutputStream();
47+
return createFileDownloadResponse(
48+
output -> CsvStreamUtils.writeCsvContentToStream(
49+
BAGExportCaseDto.class,
50+
(from, to) -> FacadeProvider.getBAGExportFacade().getCaseExportList(from, to),
51+
(propertyId, type) -> propertyId,
52+
null,
53+
null,
54+
FacadeProvider.getConfigFacade(),
55+
output),
56+
"sormas_BAG_cases_",
57+
"csv");
58+
}
59+
60+
@GET
61+
@Path("/contacts")
62+
public Response exportContacts(String file) {
63+
return createFileDownloadResponse(
64+
output -> CsvStreamUtils.writeCsvContentToStream(
65+
BAGExportContactDto.class,
66+
(from, to) -> FacadeProvider.getBAGExportFacade().getContactExportList(from, to),
67+
(propertyId, type) -> propertyId,
68+
null,
69+
null,
70+
FacadeProvider.getConfigFacade(),
71+
output),
72+
"sormas_BAG_contacts_",
73+
"csv");
74+
}
4675

47-
CsvStreamUtils.writeCsvContentToStream(
48-
BAGExportCaseDto.class,
49-
(from, to) -> FacadeProvider.getBAGExportFacade().getCaseExportList(from, to),
50-
(propertyId, type) -> {
51-
String caption = I18nProperties.findPrefixCaption(propertyId);
52-
if (Date.class.isAssignableFrom(type)) {
53-
caption += " (" + DateFormatHelper.getDateFormatPattern() + ")";
54-
}
55-
return caption;
56-
},
57-
null,
58-
null,
59-
FacadeProvider.getConfigFacade(),
60-
baos);
76+
private Response createFileDownloadResponse(Consumer<OutputStream> writeContent, String fileNamePrefix, String extension) {
77+
StreamingOutput fileStream = writeContent::accept;
6178

62-
Response.ResponseBuilder response = Response.ok(baos);
63-
response.header("Content-Disposition", "attachment;filename=test.csv");
79+
Response.ResponseBuilder response = Response.ok(fileStream);
80+
response.header("Content-Disposition", "attachment;filename=" + createFileNameWithCurrentDate(fileNamePrefix, extension));
6481

6582
return response.build();
6683
}
84+
85+
private String createFileNameWithCurrentDate(String fileNamePrefix, String extension) {
86+
return fileNamePrefix + DateHelper.formatDateForExport(new Date()) + "." + extension;
87+
}
6788
}

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

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import java.util.function.Supplier;
2626
import java.util.stream.Collectors;
2727

28-
import de.symeda.sormas.api.utils.DataHelper;
2928
import org.vaadin.hene.popupbutton.PopupButton;
3029

3130
import com.vaadin.icons.VaadinIcons;
@@ -68,6 +67,7 @@
6867
import de.symeda.sormas.api.sample.SampleDto;
6968
import de.symeda.sormas.api.sample.SampleExportDto;
7069
import de.symeda.sormas.api.user.UserRight;
70+
import de.symeda.sormas.api.utils.DataHelper;
7171
import de.symeda.sormas.api.utils.DateHelper;
7272
import de.symeda.sormas.ui.ControllerProvider;
7373
import de.symeda.sormas.ui.SearchSpecificLayout;
@@ -332,13 +332,7 @@ private void addCommonCasesOverviewToolbar() {
332332
BAGExportCaseDto.class,
333333
null,
334334
(Integer start, Integer max) -> FacadeProvider.getBAGExportFacade().getCaseExportList(start, max),
335-
(propertyId, type) -> {
336-
String caption = I18nProperties.findPrefixCaption(propertyId);
337-
if (Date.class.isAssignableFrom(type)) {
338-
caption += " (" + DateFormatHelper.getDateFormatPattern() + ")";
339-
}
340-
return caption;
341-
},
335+
(propertyId, type) -> propertyId,
342336
createFileNameWithCurrentDate("sormas_BAG_cases_", ".csv"),
343337
null);
344338

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -280,13 +280,7 @@ public ContactsView() {
280280
BAGExportContactDto.class,
281281
null,
282282
(Integer start, Integer max) -> FacadeProvider.getBAGExportFacade().getContactExportList(start, max),
283-
(propertyId, type) -> {
284-
String caption = I18nProperties.findPrefixCaption(propertyId);
285-
if (Date.class.isAssignableFrom(type)) {
286-
caption += " (" + DateFormatHelper.getDateFormatPattern() + ")";
287-
}
288-
return caption;
289-
},
283+
(propertyId, type) -> propertyId,
290284
createFileNameWithCurrentDate("sormas_BAG_contacts_", ".csv"),
291285
null);
292286

sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserEditForm.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
import de.symeda.sormas.api.utils.fieldaccess.UiFieldAccessCheckers;
4747
import de.symeda.sormas.api.utils.fieldvisibility.FieldVisibilityCheckers;
4848
import de.symeda.sormas.ui.ControllerProvider;
49-
import de.symeda.sormas.ui.UserProvider;
5049
import de.symeda.sormas.ui.location.LocationEditForm;
5150
import de.symeda.sormas.ui.utils.AbstractEditForm;
5251
import de.symeda.sormas.ui.utils.CssStyles;
@@ -132,7 +131,7 @@ protected void addFields() {
132131
addField(UserDto.USER_ROLES, OptionGroup.class).addValidator(new UserRolesValidator());
133132
OptionGroup userRoles = (OptionGroup) getFieldGroup().getField(UserDto.USER_ROLES);
134133
userRoles.setMultiSelect(true);
135-
userRoles.addItems(UserRole.getAssignableRoles(UserProvider.getCurrent().getUserRoles()));
134+
userRoles.addItems(UserUiHelper.getAssignableRoles());
136135

137136
ComboBox region = addInfrastructureField(UserDto.REGION);
138137
ComboBox community = addInfrastructureField(UserDto.COMMUNITY);
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* SORMAS® - Surveillance Outbreak Response Management & Analysis System
3+
* Copyright © 2016-2020 Helmholtz-Zentrum für Infektionsforschung GmbH (HZI)
4+
* This program is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* GNU General Public License for more details.
12+
* You should have received a copy of the GNU General Public License
13+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
14+
*/
15+
16+
package de.symeda.sormas.ui.user;
17+
18+
import java.util.Set;
19+
20+
import de.symeda.sormas.api.CountryHelper;
21+
import de.symeda.sormas.api.FacadeProvider;
22+
import de.symeda.sormas.api.user.UserRole;
23+
import de.symeda.sormas.ui.UserProvider;
24+
25+
public class UserUiHelper {
26+
27+
public static Set<UserRole> getAssignableRoles() {
28+
Set<UserRole> allRoles = UserRole.getAssignableRoles(UserProvider.getCurrent().getUserRoles());
29+
30+
if (!FacadeProvider.getConfigFacade().isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND)) {
31+
allRoles.remove(UserRole.BAG_USER);
32+
}
33+
34+
return allRoles;
35+
}
36+
}

sormas-ui/src/main/java/de/symeda/sormas/ui/user/UsersView.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public HorizontalLayout createFilterBar() {
136136
userRolesFilter.setId(UserDto.USER_ROLES);
137137
userRolesFilter.setWidth(200, Unit.PIXELS);
138138
userRolesFilter.setInputPrompt(I18nProperties.getPrefixCaption(UserDto.I18N_PREFIX, UserDto.USER_ROLES));
139-
userRolesFilter.addItems(UserRole.getAssignableRoles(UserProvider.getCurrent().getUserRoles()));
139+
userRolesFilter.addItems(UserUiHelper.getAssignableRoles());
140140
userRolesFilter.addValueChangeListener(e -> {
141141
criteria.userRole((UserRole) e.getProperty().getValue());
142142
navigateTo(criteria);

0 commit comments

Comments
 (0)