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

Commit d8b6cfe

Browse files
author
FredrikSchäferVitagroup
committed
\SORMAS-Foundation#3927 add SystemEvent entity, Dto, Facade and Service
1 parent 2c8a129 commit d8b6cfe

10 files changed

Lines changed: 293 additions & 0 deletions

File tree

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ public static FacilityFacade getFacilityFacade() {
160160
public static CountryFacade getCountryFacade() {
161161
return get().lookupEjbRemote(CountryFacade.class);
162162
}
163+
163164
public static RegionFacade getRegionFacade() {
164165
return get().lookupEjbRemote(RegionFacade.class);
165166
}
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: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package de.symeda.sormas.api.systemevents;
2+
3+
import javax.ejb.Remote;
4+
import java.util.Date;
5+
6+
@Remote
7+
public interface SystemEventFacade {
8+
9+
Date getLatestSuccessByType(SystemEventType type);
10+
11+
void saveSystemEvent(SystemEventDto dto);
12+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package de.symeda.sormas.api.systemevents;
2+
3+
import de.symeda.sormas.api.i18n.I18nProperties;
4+
5+
public enum SystemEventStatus {
6+
7+
SUCCESS,
8+
ERROR;
9+
10+
public String toString() {
11+
return I18nProperties.getEnumCaption(this);
12+
}
13+
}
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+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
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 java.util.Date;
15+
16+
import static de.symeda.sormas.api.EntityDto.COLUMN_LENGTH_DEFAULT;
17+
18+
@Entity
19+
@Audited
20+
public class SystemEvent extends AbstractDomainObject {
21+
22+
public static final String TABLE_NAME = "systemevent";
23+
24+
public static final String TYPE = "type";
25+
public static final String START_DATE = "startDate";
26+
public static final String END_DATE = "endDate";
27+
public static final String STATUS = "status";
28+
public static final String ADDITIONAL_INFO = "additionalInfo";
29+
30+
private SystemEventType type;
31+
private Date startDate;
32+
private Date endDate;
33+
private SystemEventStatus status;
34+
private String additionalInfo;
35+
36+
@Enumerated(EnumType.STRING)
37+
public SystemEventType getType() {
38+
return type;
39+
}
40+
41+
public void setType(SystemEventType type) {
42+
this.type = type;
43+
}
44+
45+
@Temporal(TemporalType.TIMESTAMP)
46+
public Date getStartDate() {
47+
return startDate;
48+
}
49+
50+
public void setStartDate(Date startDate) {
51+
this.startDate = startDate;
52+
}
53+
54+
@Temporal(TemporalType.TIMESTAMP)
55+
public Date getEndDate() {
56+
return endDate;
57+
}
58+
59+
public void setEndDate(Date endDate) {
60+
this.endDate = endDate;
61+
}
62+
63+
@Enumerated(EnumType.STRING)
64+
public SystemEventStatus getStatus() {
65+
return status;
66+
}
67+
68+
public void setStatus(SystemEventStatus status) {
69+
this.status = status;
70+
}
71+
72+
@Column(length = COLUMN_LENGTH_DEFAULT)
73+
public String getAdditionalInfo() {
74+
return additionalInfo;
75+
}
76+
77+
public void setAdditionalInfo(String additionalInfo) {
78+
this.additionalInfo = additionalInfo;
79+
}
80+
81+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package de.symeda.sormas.backend.systemevent;
2+
3+
import de.symeda.sormas.api.systemevents.SystemEventDto;
4+
import de.symeda.sormas.api.systemevents.SystemEventFacade;
5+
import de.symeda.sormas.api.systemevents.SystemEventStatus;
6+
import de.symeda.sormas.api.systemevents.SystemEventType;
7+
import de.symeda.sormas.backend.event.EventParticipant;
8+
import de.symeda.sormas.backend.labmessage.LabMessage;
9+
import de.symeda.sormas.backend.labmessage.LabMessageFacadeEjb;
10+
import de.symeda.sormas.backend.util.DtoHelper;
11+
import de.symeda.sormas.backend.util.ModelConstants;
12+
13+
import javax.ejb.EJB;
14+
import javax.ejb.LocalBean;
15+
import javax.ejb.Stateless;
16+
import javax.persistence.EntityManager;
17+
import javax.persistence.PersistenceContext;
18+
import javax.persistence.criteria.CriteriaBuilder;
19+
import javax.persistence.criteria.CriteriaQuery;
20+
import javax.persistence.criteria.Predicate;
21+
import javax.persistence.criteria.Root;
22+
import javax.validation.constraints.NotNull;
23+
import java.util.Date;
24+
import java.util.List;
25+
26+
@Stateless(name = "SystemEventFacade")
27+
public class SystemEventFacadeEjb implements SystemEventFacade {
28+
29+
@PersistenceContext(unitName = ModelConstants.PERSISTENCE_UNIT_NAME)
30+
private EntityManager em;
31+
32+
@EJB
33+
private SystemEventService systemEventService;
34+
35+
@Override
36+
public Date getLatestSuccessByType(SystemEventType type) {
37+
CriteriaBuilder cb = em.getCriteriaBuilder();
38+
CriteriaQuery<SystemEvent> cq = cb.createQuery(SystemEvent.class);
39+
Root<SystemEvent> systemEvent = cq.from(SystemEvent.class);
40+
41+
Predicate filter = cb.equal(systemEvent.get(SystemEvent.STATUS), SystemEventStatus.SUCCESS);
42+
cq.where(filter);
43+
cq.orderBy(cb.desc(systemEvent.get(SystemEvent.START_DATE)));
44+
45+
List<SystemEvent> resultList = em.createQuery(cq).getResultList();
46+
47+
if (resultList != null) {
48+
return resultList.get(0).getStartDate();
49+
} else {
50+
return null;
51+
}
52+
}
53+
54+
@Override
55+
public void saveSystemEvent(SystemEventDto dto) {
56+
SystemEvent systemEvent = systemEventService.getByUuid(dto.getUuid());
57+
58+
systemEvent = fromDto(dto, systemEvent);
59+
systemEventService.ensurePersisted(systemEvent);
60+
61+
}
62+
63+
private SystemEvent fromDto(@NotNull SystemEventDto source, SystemEvent target) {
64+
65+
if (target == null) {
66+
target = new SystemEvent();
67+
target.setUuid(source.getUuid());
68+
}
69+
70+
DtoHelper.validateDto(source, target);
71+
72+
target.setType(source.getType());
73+
target.setStartDate(source.getStartDate());
74+
target.setEndDate(source.getEndDate());
75+
target.setStatus(source.getStatus());
76+
target.setAdditionalInfo(source.getAdditionalInfo());
77+
78+
return target;
79+
80+
}
81+
82+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package de.symeda.sormas.backend.systemevent;
2+
3+
import de.symeda.sormas.backend.common.BaseAdoService;
4+
5+
import javax.ejb.LocalBean;
6+
import javax.ejb.Stateless;
7+
8+
@Stateless
9+
@LocalBean
10+
public class SystemEventService extends BaseAdoService<SystemEvent> {
11+
12+
public SystemEventService() {
13+
super(SystemEvent.class);
14+
}
15+
16+
}

sormas-backend/src/main/resources/META-INF/persistence.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
<class>de.symeda.sormas.backend.document.Document</class>
6060
<class>de.symeda.sormas.backend.exposure.Exposure</class>
6161
<class>de.symeda.sormas.backend.common.messaging.ManualMessageLog</class>
62+
<class>de.symeda.sormas.backend.systemevent.SystemEvent</class>
6263

6364
<exclude-unlisted-classes>true</exclude-unlisted-classes>
6465

sormas-backend/src/main/resources/sql/sormas_schema.sql

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6196,4 +6196,22 @@ WHERE location.facilitytype IS NOT NULL;
61966196

61976197
INSERT INTO schema_version (version_number, comment) VALUES (302, 'Remove hospital from event''s type of place #3617');
61986198

6199+
-- 2021-01-07 Add system events #3927
6200+
CREATE TABLE systemevent (
6201+
id bigint not null,
6202+
uuid varchar(36) not null unique,
6203+
changedate timestamp not null,
6204+
creationdate timestamp not null,
6205+
type varchar(255) not null,
6206+
startdate timestamp,
6207+
enddate timestamp,
6208+
status varchar(255),
6209+
additionalInfo varchar(512),
6210+
primary key(id)
6211+
);
6212+
6213+
ALTER TABLE systemevent OWNER TO sormas_user;
6214+
6215+
INSERT INTO schema_version (version_number, comment) VALUES (303, 'Add system events #3927');
6216+
61996217
-- *** Insert new sql commands BEFORE this line ***

0 commit comments

Comments
 (0)