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

Commit 69970ba

Browse files
SORMAS-Foundation#2673 UI components to integrate with the SurvNet gateway
1 parent 7b44355 commit 69970ba

8 files changed

Lines changed: 118 additions & 3 deletions

File tree

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,6 +1367,8 @@ public interface Captions {
13671367
String statisticsSpecifySelection = "statisticsSpecifySelection";
13681368
String statisticsStatistics = "statisticsStatistics";
13691369
String statisticsVisualizationType = "statisticsVisualizationType";
1370+
String SurvnetGateway_send = "SurvnetGateway.send";
1371+
String SurvnetGateway_title = "SurvnetGateway.title";
13701372
String Symptoms = "Symptoms";
13711373
String Symptoms_abdominalPain = "Symptoms.abdominalPain";
13721374
String Symptoms_abnormalLungXrayFindings = "Symptoms.abnormalLungXrayFindings";

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -781,6 +781,9 @@ public interface Strings {
781781
String reportedBy = "reportedBy";
782782
String reportedOn = "reportedOn";
783783
String step = "step";
784+
String SurvnetGateway_notificationEntryNotSent = "SurvnetGateway.notificationEntryNotSent";
785+
String SurvnetGateway_notificationEntrySent = "SurvnetGateway.notificationEntrySent";
786+
String SurvnetGateway_notificationErrorSending = "SurvnetGateway.notificationErrorSending";
784787
String text = "text";
785788
String toCase = "toCase";
786789
String total = "total";

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1904,3 +1904,7 @@ sormasToSormasSharedWith=Shared with
19041904
sormasToSormasSharedBy=By
19051905
sormasToSormasSharedDate=On
19061906
sormasToSormasSentFrom=Sent from
1907+
1908+
# Survnet Gateway
1909+
SurvnetGateway.title=SurvNet
1910+
SurvnetGateway.send=send to own SurvNet instance

sormas-api/src/main/resources/captions_de-DE.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1904,3 +1904,7 @@ sormasToSormasSharedWith=Geteilt mit
19041904
sormasToSormasSharedBy=Von
19051905
sormasToSormasSharedDate=Am
19061906
sormasToSormasSentFrom=Gesendet von
1907+
1908+
# Survnet Gateway
1909+
SurvnetGateway.title=SurvNet
1910+
SurvnetGateway.send=an eigenes SurvNet senden

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -839,4 +839,9 @@ headingNetworkDiagramTooManyContacts = Too many contacts
839839
warningNetworkDiagramTooManyContacts = There are %d contacts and it is possible that your browser will freeze while displaying the diagram.<br/>Please choose a smaller time window.
840840
confirmNetworkDiagramTooManyContacts = Do you really want to update the diagram?
841841

842-
headingContactTracingFirstContact = First contact with Contact Tracing
842+
headingContactTracingFirstContact = First contact with Contact Tracing
843+
844+
# Survnet Gateway
845+
SurvnetGateway.notificationEntrySent = Entry has been sent
846+
SurvnetGateway.notificationEntryNotSent = Entry could not be sent
847+
SurvnetGateway.notificationErrorSending = Error when sending entry

sormas-api/src/main/resources/strings_de-DE.properties

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -839,4 +839,9 @@ headingNetworkDiagramTooManyContacts = Zu viele Kontakte
839839
warningNetworkDiagramTooManyContacts = Es gibt %d Kontakte und es ist möglich, dass Ihr Browser während der Anzeige des Diagramms einfriert.<br/>Bitte wählen Sie ein kleineres Zeitfenster.
840840
confirmNetworkDiagramTooManyContacts = Wollen Sie das Diagramm wirklich aktualisieren?
841841

842-
headingContactTracingFirstContact = Erster Kontakt mit Kontaktverfolgung
842+
headingContactTracingFirstContact = Erster Kontakt mit Kontaktverfolgung
843+
844+
# Survnet Gateway
845+
SurvnetGateway.notificationEntrySent = Der Eintrag wurde gesendet
846+
SurvnetGateway.notificationEntryNotSent = Der Eintrag konnte nicht gesendet werden
847+
SurvnetGateway.notificationErrorSending = Fehler beim Senden des Eintrags

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
*******************************************************************************/
1818
package de.symeda.sormas.ui.caze;
1919

20+
import java.util.Arrays;
21+
2022
import com.vaadin.icons.VaadinIcons;
2123
import com.vaadin.shared.ui.ContentMode;
2224
import com.vaadin.ui.CustomLayout;
@@ -34,6 +36,7 @@
3436
import de.symeda.sormas.ui.caze.eventLink.EventListComponent;
3537
import de.symeda.sormas.ui.samples.sampleLink.SampleListComponent;
3638
import de.symeda.sormas.ui.sormastosormas.SormasToSormasListComponent;
39+
import de.symeda.sormas.ui.survnet.SurvnetGateway;
3740
import de.symeda.sormas.ui.task.TaskListComponent;
3841
import de.symeda.sormas.ui.utils.CommitDiscardWrapperComponent;
3942
import de.symeda.sormas.ui.utils.CssStyles;
@@ -75,7 +78,8 @@ protected void initView(String params) {
7578
LayoutUtil.fluidColumnLoc(4, 0, 6, 0, TASKS_LOC),
7679
LayoutUtil.fluidColumnLoc(4, 0, 6, 0, SAMPLES_LOC),
7780
LayoutUtil.fluidColumnLoc(4, 0, 6, 0, EVENTS_LOC),
78-
LayoutUtil.fluidColumnLoc(4, 0, 6, 0, SORMAS_TO_SORMAS_LOC));
81+
LayoutUtil.fluidColumnLoc(4, 0, 6, 0, SORMAS_TO_SORMAS_LOC),
82+
SurvnetGateway.layoutFragment());
7983

8084
DetailSubComponentWrapper container = new DetailSubComponentWrapper(() -> editComponent);
8185
container.setWidth(100, Unit.PERCENTAGE);
@@ -150,6 +154,8 @@ protected void initView(String params) {
150154
layout.addComponent(sormasToSormasLocLayout, SORMAS_TO_SORMAS_LOC);
151155
}
152156

157+
SurvnetGateway.addComponentToLayout(layout, () -> Arrays.asList(caze.getUuid()));
158+
153159
setCaseEditPermission(container);
154160
}
155161
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package de.symeda.sormas.ui.survnet;
2+
3+
import java.util.List;
4+
import java.util.function.Supplier;
5+
6+
import com.vaadin.icons.VaadinIcons;
7+
import com.vaadin.ui.Alignment;
8+
import com.vaadin.ui.Button;
9+
import com.vaadin.ui.CustomLayout;
10+
import com.vaadin.ui.HorizontalLayout;
11+
import com.vaadin.ui.Label;
12+
import com.vaadin.ui.Notification;
13+
import com.vaadin.ui.themes.ValoTheme;
14+
15+
import de.symeda.sormas.api.FacadeProvider;
16+
import de.symeda.sormas.api.i18n.Captions;
17+
import de.symeda.sormas.api.i18n.I18nProperties;
18+
import de.symeda.sormas.api.i18n.Strings;
19+
import de.symeda.sormas.ui.utils.ButtonHelper;
20+
import de.symeda.sormas.ui.utils.CssStyles;
21+
import de.symeda.sormas.ui.utils.LayoutUtil;
22+
import de.symeda.sormas.ui.utils.LayoutUtil.FluidColumn;
23+
24+
/**
25+
* Provides UI components to integrate with the SurvNet gateway
26+
*/
27+
public class SurvnetGateway {
28+
29+
private static final String SURVNET_GATEWAY_LOC = "survnetGateway";
30+
31+
private SurvnetGateway() {
32+
//NOOP
33+
}
34+
35+
public static FluidColumn layoutFragment() {
36+
//TODO only add it if the feature is active? Then LayoutUtil.fluidRow would have to ignore null values.
37+
return LayoutUtil.fluidColumnLoc(4, 0, 6, 0, SURVNET_GATEWAY_LOC);
38+
}
39+
40+
public static void addComponentToLayout(CustomLayout targetLayout, Supplier<List<String>> caseUuids) {
41+
if (!FacadeProvider.getSurvnetGatewayFacade().isFeatureEnabled()) {
42+
return;
43+
}
44+
45+
Label header = new Label(I18nProperties.getCaption(Captions.SurvnetGateway_title));
46+
header.addStyleName(CssStyles.H3);
47+
48+
Button button = ButtonHelper
49+
.createIconButton(Captions.SurvnetGateway_send, VaadinIcons.OUTBOX, e -> sendToSurvnet(caseUuids.get()), ValoTheme.BUTTON_PRIMARY);
50+
51+
HorizontalLayout l = new HorizontalLayout(header, button);
52+
l.setExpandRatio(button, 1);
53+
l.setComponentAlignment(header, Alignment.MIDDLE_LEFT);
54+
l.setComponentAlignment(button, Alignment.MIDDLE_RIGHT);
55+
l.setSizeFull();
56+
57+
l.addStyleNames(CssStyles.SIDE_COMPONENT);
58+
targetLayout.addComponent(l, SURVNET_GATEWAY_LOC);
59+
}
60+
61+
private static void sendToSurvnet(List<String> caseUuids) {
62+
63+
int statusCode = FacadeProvider.getSurvnetGatewayFacade().sendCases(caseUuids);
64+
65+
Notification.Type type;
66+
String message;
67+
68+
switch (statusCode) {
69+
case 200://HttpStatus.OK:
70+
case 204://HttpStatus.SC_NO_CONTENT:
71+
type = Notification.Type.HUMANIZED_MESSAGE;
72+
message = I18nProperties.getString(Strings.SurvnetGateway_notificationEntrySent);
73+
break;
74+
case 400://HttpStatus.SC_BAD_REQUEST
75+
type = Notification.Type.ERROR_MESSAGE;
76+
message = I18nProperties.getString(Strings.SurvnetGateway_notificationEntryNotSent);
77+
break;
78+
default://HttpStatus.SC_BAD_REQUEST
79+
type = Notification.Type.ERROR_MESSAGE;
80+
message = I18nProperties.getString(Strings.SurvnetGateway_notificationErrorSending);
81+
}
82+
83+
Notification.show(I18nProperties.getCaption(Captions.SurvnetGateway_title), message, type);
84+
}
85+
86+
}

0 commit comments

Comments
 (0)