11package de .symeda .sormas .backend .labmessage ;
22
3+ import java .time .LocalDateTime ;
34import java .util .ArrayList ;
5+ import java .util .Date ;
46import java .util .List ;
57
68import javax .ejb .EJB ;
2325import de .symeda .sormas .api .labmessage .LabMessageDto ;
2426import de .symeda .sormas .api .labmessage .LabMessageFacade ;
2527import de .symeda .sormas .api .labmessage .LabMessageIndexDto ;
28+ import de .symeda .sormas .api .systemevents .SystemEventDto ;
29+ import de .symeda .sormas .api .systemevents .SystemEventStatus ;
30+ import de .symeda .sormas .api .systemevents .SystemEventType ;
31+ import de .symeda .sormas .api .utils .DateHelper ;
2632import de .symeda .sormas .api .utils .SortProperty ;
2733import de .symeda .sormas .backend .common .BaseAdoService ;
2834import de .symeda .sormas .backend .common .ConfigFacadeEjb ;
2935import de .symeda .sormas .backend .common .CriteriaBuilderHelper ;
36+ import de .symeda .sormas .backend .systemevent .SystemEventFacadeEjb ;
3037import de .symeda .sormas .backend .util .DtoHelper ;
3138import de .symeda .sormas .backend .util .ModelConstants ;
3239
@@ -40,6 +47,8 @@ public class LabMessageFacadeEjb implements LabMessageFacade {
4047 private LabMessageService labMessageService ;
4148 @ EJB
4249 private ConfigFacadeEjb .ConfigFacadeEjbLocal configFacade ;
50+ @ EJB
51+ private SystemEventFacadeEjb .SystemEventFacadeEjbLocal systemEventFacade ;
4352
4453 private LabMessage fromDto (@ NotNull LabMessageDto source , LabMessage target ) {
4554
@@ -214,21 +223,45 @@ public List<LabMessageIndexDto> getIndexList(LabMessageCriteria criteria, Intege
214223 }
215224
216225 @ Override
217- public void fetchExternalLabMessages (boolean onlyNew ) {
226+ public void fetchExternalLabMessages () {
227+ Date now = new Date (DateHelper .now ());
228+ SystemEventDto systemEvent = SystemEventDto .build ();
229+ systemEvent .setType (SystemEventType .FETCH_LAB_MESSAGES );
230+ systemEvent .setStatus (SystemEventStatus .STARTED );
231+ systemEvent .setStartDate (now );
232+ systemEventFacade .saveSystemEvent (systemEvent );
233+
234+ Date since = null ;
235+ since = systemEventFacade .getLatestSuccessByType (SystemEventType .FETCH_LAB_MESSAGES );
236+
237+ if (since == null ) {
238+ since = new Date (0 );
239+ }
240+
218241 List <LabMessageDto > newMessages = null ;
219242 try {
220243 InitialContext ic = new InitialContext ();
221244 String jndiName = configFacade .getDemisJndiName ();
222- // Maybe catch that jndiName can be null
223245 ExternalLabResultsFacade labResultsFacade = (ExternalLabResultsFacade ) ic .lookup (jndiName );
224- newMessages = labResultsFacade .getExternalLabMessages (onlyNew );
225- } catch (NamingException e ) {
226- // That should be handled properly
246+ newMessages = labResultsFacade .getExternalLabMessages (since );
247+ if (newMessages != null ) {
248+ newMessages .stream ().forEach (labMessageDto -> save (labMessageDto ));
249+ }
250+ } catch (Exception e ) {
251+ systemEvent .setStatus (SystemEventStatus .ERROR );
252+ systemEvent .setAdditionalInfo (e .getMessage ());
253+ now .setTime (DateHelper .now ());
254+ systemEvent .setEndDate (now );
255+ systemEvent .setChangeDate (now );
256+ systemEventFacade .saveSystemEvent (systemEvent );
227257 e .printStackTrace ();
258+ return ;
228259 }
229- if (newMessages != null ) {
230- newMessages .stream ().forEach (labMessageDto -> save (labMessageDto ));
231- }
260+ systemEvent .setStatus (SystemEventStatus .SUCCESS );
261+ now .setTime (DateHelper .now ());
262+ systemEvent .setEndDate (now );
263+ systemEvent .setChangeDate (now );
264+ systemEventFacade .saveSystemEvent (systemEvent );
232265 }
233266
234267 @ LocalBean
0 commit comments