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

Commit 6076e35

Browse files
Merge pull request SORMAS-Foundation#3979 from hzi-braunschweig/feature-3927-Add-system-events-entity-2
Feature 3927 add system events entity 2
2 parents 39e883d + 497903f commit 6076e35

19 files changed

Lines changed: 516 additions & 1 deletion

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
@@ -85,6 +85,8 @@ public interface ConfigFacade {
8585

8686
int getDaysAfterEventGetsArchived();
8787

88+
int getDaysAfterSystemEventGetsDeleted();
89+
8890
GeoLatLon getCountryCenter();
8991

9092
int getMapZoom();

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
import de.symeda.sormas.api.sormastosormas.SormasToSormasFacade;
6565
import de.symeda.sormas.api.survnet.SurvnetGatewayFacade;
6666
import de.symeda.sormas.api.symptoms.SymptomsFacade;
67+
import de.symeda.sormas.api.systemevents.SystemEventFacade;
6768
import de.symeda.sormas.api.task.TaskFacade;
6869
import de.symeda.sormas.api.therapy.PrescriptionFacade;
6970
import de.symeda.sormas.api.therapy.TherapyFacade;
@@ -160,6 +161,7 @@ public static FacilityFacade getFacilityFacade() {
160161
public static CountryFacade getCountryFacade() {
161162
return get().lookupEjbRemote(CountryFacade.class);
162163
}
164+
163165
public static RegionFacade getRegionFacade() {
164166
return get().lookupEjbRemote(RegionFacade.class);
165167
}
@@ -320,6 +322,11 @@ public static DocumentFacade getDocumentFacade() {
320322
return get().lookupEjbRemote(DocumentFacade.class);
321323
}
322324

325+
public static SystemEventFacade getSystemEventFacade() {
326+
327+
return get().lookupEjbRemote(SystemEventFacade.class);
328+
}
329+
323330
@SuppressWarnings("unchecked")
324331
public <P> P lookupEjbRemote(Class<P> clazz) {
325332
try {
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package de.symeda.sormas.api.systemevents;
2+
3+
import de.symeda.sormas.api.EntityDto;
4+
import de.symeda.sormas.api.labmessage.LabMessageDto;
5+
import de.symeda.sormas.api.utils.DataHelper;
6+
7+
import java.util.Date;
8+
9+
public class SystemEventDto extends EntityDto {
10+
11+
private SystemEventType type;
12+
private Date startDate;
13+
private Date endDate;
14+
private SystemEventStatus status;
15+
private String additionalInfo;
16+
17+
public SystemEventType getType() {
18+
return type;
19+
}
20+
21+
public void setType(SystemEventType type) {
22+
this.type = type;
23+
}
24+
25+
public Date getStartDate() {
26+
return startDate;
27+
}
28+
29+
public void setStartDate(Date startDate) {
30+
this.startDate = startDate;
31+
}
32+
33+
public Date getEndDate() {
34+
return endDate;
35+
}
36+
37+
public void setEndDate(Date endDate) {
38+
this.endDate = endDate;
39+
}
40+
41+
public SystemEventStatus getStatus() {
42+
return status;
43+
}
44+
45+
public void setStatus(SystemEventStatus status) {
46+
this.status = status;
47+
}
48+
49+
public String getAdditionalInfo() {
50+
return additionalInfo;
51+
}
52+
53+
public void setAdditionalInfo(String additionalInfo) {
54+
this.additionalInfo = additionalInfo;
55+
}
56+
57+
public static SystemEventDto build() {
58+
59+
SystemEventDto systemEvent = new SystemEventDto();
60+
systemEvent.setUuid(DataHelper.createUuid());
61+
return systemEvent;
62+
}
63+
64+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package de.symeda.sormas.api.systemevents;
2+
3+
import javax.ejb.Remote;
4+
import java.util.Date;
5+
6+
/**
7+
* As subsequent manipulation of SystemEvents is undesired, this Facade shall not provide methods to fetch specific SystemEvents.
8+
*/
9+
@Remote
10+
public interface SystemEventFacade {
11+
12+
Date getLatestSuccessByType(SystemEventType type);
13+
14+
void saveSystemEvent(SystemEventDto dto);
15+
16+
void deleteAllDeletableSystemEvents(int daysAfterSystemEventGetsDeleted);
17+
18+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package de.symeda.sormas.api.systemevents;
2+
3+
import de.symeda.sormas.api.i18n.I18nProperties;
4+
5+
public enum SystemEventStatus {
6+
7+
STARTED,
8+
SUCCESS,
9+
CANCELLED,
10+
ERROR;
11+
12+
public String toString() {
13+
return I18nProperties.getEnumCaption(this);
14+
}
15+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package de.symeda.sormas.api.systemevents;
2+
3+
public enum SystemEventType {
4+
FETCH_LAB_MESSAGES
5+
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ public class ConfigFacadeEjb implements ConfigFacade {
108108
public static final String DAYS_AFTER_CASE_GETS_ARCHIVED = "daysAfterCaseGetsArchived";
109109
private static final String DAYS_AFTER_EVENT_GETS_ARCHIVED = "daysAfterEventGetsArchived";
110110

111+
private static final String DAYS_AFTER_SYSTEM_EVENT_GETS_DELETED = "daysAfterSystemEventGetsDeleted";
112+
111113
private static final String GEOCODING_SERVICE_URL_TEMPLATE = "geocodingServiceUrlTemplate";
112114
private static final String GEOCODING_LONGITUDE_JSON_PATH = "geocodingLongitudeJsonPath";
113115
private static final String GEOCODING_LATITUDE_JSON_PATH = "geocodingLatitudeJsonPath";
@@ -373,6 +375,11 @@ public int getDaysAfterEventGetsArchived() {
373375
return getInt(DAYS_AFTER_EVENT_GETS_ARCHIVED, 90);
374376
}
375377

378+
@Override
379+
public int getDaysAfterSystemEventGetsDeleted() {
380+
return getInt(DAYS_AFTER_SYSTEM_EVENT_GETS_DELETED, 90);
381+
}
382+
376383
@Override
377384
public String getGeocodingServiceUrlTemplate() {
378385
return getProperty(GEOCODING_SERVICE_URL_TEMPLATE, null);

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import javax.ejb.Schedule;
2626
import javax.ejb.Singleton;
2727

28+
import de.symeda.sormas.backend.systemevent.SystemEventFacadeEjb.SystemEventFacadeEjbLocal;
2829
import org.slf4j.Logger;
2930
import org.slf4j.LoggerFactory;
3031

@@ -65,6 +66,8 @@ public class CronService {
6566
private EventFacadeEjbLocal eventFacade;
6667
@EJB
6768
private DocumentFacadeEjbLocal documentFacade;
69+
@EJB
70+
private SystemEventFacadeEjbLocal systemEventFacade;
6871

6972
@Schedule(hour = "*", minute = "*/" + TASK_UPDATE_INTERVAL, second = "0", persistent = false)
7073
public void sendNewAndDueTaskMessages() {
@@ -138,4 +141,13 @@ public void archiveEvents() {
138141
public void cleanupDeletedDocuments() {
139142
documentFacade.cleanupDeletedDocuments();
140143
}
144+
145+
@Schedule(hour = "1", minute = "30", second = "0", persistent = false)
146+
public void deleteSystemEvents() {
147+
int daysAfterSystemEventGetsDeleted = configFacade.getDaysAfterSystemEventGetsDeleted();
148+
if (daysAfterSystemEventGetsDeleted >= 1) {
149+
systemEventFacade.deleteAllDeletableSystemEvents(daysAfterSystemEventGetsDeleted);
150+
}
151+
}
152+
141153
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package de.symeda.sormas.backend.systemevent;
2+
3+
import de.symeda.auditlog.api.Audited;
4+
import de.symeda.sormas.api.systemevents.SystemEventStatus;
5+
import de.symeda.sormas.api.systemevents.SystemEventType;
6+
import de.symeda.sormas.backend.common.AbstractDomainObject;
7+
8+
import javax.persistence.Column;
9+
import javax.persistence.Entity;
10+
import javax.persistence.EnumType;
11+
import javax.persistence.Enumerated;
12+
import javax.persistence.Temporal;
13+
import javax.persistence.TemporalType;
14+
import javax.validation.constraints.NotNull;
15+
import java.util.Date;
16+
import java.util.Objects;
17+
18+
import static de.symeda.sormas.api.EntityDto.COLUMN_LENGTH_DEFAULT;
19+
20+
@Entity
21+
@Audited
22+
public class SystemEvent extends AbstractDomainObject {
23+
24+
public static final String TABLE_NAME = "systemevent";
25+
26+
public static final String TYPE = "type";
27+
public static final String START_DATE = "startDate";
28+
public static final String END_DATE = "endDate";
29+
public static final String STATUS = "status";
30+
public static final String ADDITIONAL_INFO = "additionalInfo";
31+
32+
private SystemEventType type;
33+
private Date startDate;
34+
private Date endDate;
35+
private SystemEventStatus status;
36+
private String additionalInfo;
37+
38+
@Enumerated(EnumType.STRING)
39+
@Column(nullable = false)
40+
public SystemEventType getType() {
41+
return type;
42+
}
43+
44+
public void setType(SystemEventType type) {
45+
this.type = type;
46+
}
47+
48+
@Temporal(TemporalType.TIMESTAMP)
49+
@Column(nullable = false)
50+
public Date getStartDate() {
51+
return startDate;
52+
}
53+
54+
public void setStartDate(Date startDate) {
55+
this.startDate = startDate;
56+
}
57+
58+
@Temporal(TemporalType.TIMESTAMP)
59+
public Date getEndDate() {
60+
return endDate;
61+
}
62+
63+
public void setEndDate(Date endDate) {
64+
this.endDate = endDate;
65+
}
66+
67+
@Enumerated(EnumType.STRING)
68+
@Column(nullable = false)
69+
public SystemEventStatus getStatus() {
70+
return status;
71+
}
72+
73+
public void setStatus(SystemEventStatus status) {
74+
this.status = status;
75+
}
76+
77+
@Column(columnDefinition = "text")
78+
public String getAdditionalInfo() {
79+
return additionalInfo;
80+
}
81+
82+
public void setAdditionalInfo(String additionalInfo) {
83+
this.additionalInfo = additionalInfo;
84+
}
85+
86+
@Override
87+
public boolean equals(Object o) {
88+
if (this == o)
89+
return true;
90+
if (o == null || getClass() != o.getClass())
91+
return false;
92+
if (!super.equals(o))
93+
return false;
94+
SystemEvent that = (SystemEvent) o;
95+
return type == that.type
96+
&& Objects.equals(startDate, that.startDate)
97+
&& Objects.equals(endDate, that.endDate)
98+
&& status == that.status
99+
&& Objects.equals(additionalInfo, that.additionalInfo);
100+
}
101+
102+
@Override
103+
public int hashCode() {
104+
return Objects.hash(super.hashCode(), type, startDate, endDate, status, additionalInfo);
105+
}
106+
}

0 commit comments

Comments
 (0)