@@ -365,22 +365,65 @@ protected void logout() {
365
365
}
366
366
367
367
private @ Nullable JablotronHistoryDataEvent parseEventHistoryResponse (String response ) {
368
- JsonObject jsonObject = JsonParser .parseString (response ).getAsJsonObject ();
369
- JsonArray edges = jsonObject .getAsJsonObject ("data" ).getAsJsonObject ("forEndUser" ).getAsJsonObject ("events" )
370
- .getAsJsonObject ("events" ).getAsJsonArray ("edges" );
371
-
372
- JsonObject node = edges .get (0 ).getAsJsonObject ().getAsJsonObject ("node" ).getAsJsonObject ();
368
+ JablotronHistoryDataEvent event = new JablotronHistoryDataEvent ();
369
+ JsonObject jsonObject ;
373
370
374
- JsonObject invoker = node .getAsJsonArray ("invokers" ).get (0 ).getAsJsonObject ();
375
- JsonObject subject = node .getAsJsonArray ("subjects" ).get (0 ).getAsJsonObject ();
371
+ try {
372
+ jsonObject = JsonParser .parseString (response ).getAsJsonObject ();
373
+ } catch (JsonSyntaxException ex ) {
374
+ logger .debug ("Invalid JSON received: {}" , response );
375
+ return null ;
376
+ }
376
377
377
- JablotronHistoryDataEvent event = new JablotronHistoryDataEvent ();
378
- event .setIconType (node .get ("icon" ).getAsString ());
379
- event .setEventText (node .getAsJsonObject ("name" ).get ("translation" ).getAsString ());
380
- event .setDate (node .get ("occurredAt" ).getAsString ());
381
- event .setSectionName (subject .getAsJsonObject ("defaultName" ).get ("translation" ).getAsString ());
382
- event .setInvokerName (invoker .getAsJsonObject ("defaultName" ).get ("translation" ).getAsString ());
378
+ JsonObject data = jsonObject .has ("data" ) ? jsonObject .getAsJsonObject ("data" ) : null ;
379
+ JsonObject forEndUser = (data != null && data .has ("forEndUser" )) ? data .getAsJsonObject ("forEndUser" ) : null ;
380
+ JsonObject events = (forEndUser != null && forEndUser .has ("events" )) ? forEndUser .getAsJsonObject ("events" )
381
+ : null ;
382
+ JsonObject eventsInner = (events != null && events .has ("events" )) ? events .getAsJsonObject ("events" ) : null ;
383
+ JsonArray edges = (eventsInner != null && eventsInner .has ("edges" )) ? eventsInner .getAsJsonArray ("edges" )
384
+ : null ;
385
+
386
+ if (edges != null && !edges .isEmpty ()) {
387
+ JsonObject node = edges .get (0 ).isJsonNull () ? null : edges .get (0 ).getAsJsonObject ();
388
+
389
+ if (node != null ) {
390
+ JsonArray invokers = node .has ("invokers" ) ? node .getAsJsonArray ("invokers" ) : null ;
391
+ JsonArray subjects = node .has ("subjects" ) ? node .getAsJsonArray ("subjects" ) : null ;
392
+
393
+ JsonObject invoker = (invokers != null && !invokers .isEmpty () && !invokers .get (0 ).isJsonNull ())
394
+ ? invokers .get (0 ).getAsJsonObject ()
395
+ : null ;
396
+ JsonObject subject = (subjects != null && !subjects .isEmpty () && !subjects .get (0 ).isJsonNull ())
397
+ ? subjects .get (0 ).getAsJsonObject ()
398
+ : null ;
399
+
400
+ event .setIconType (
401
+ node .has ("icon" ) && !node .get ("icon" ).isJsonNull () ? node .get ("icon" ).getAsString () : "" );
402
+ event .setEventText (node .has ("name" ) && node .getAsJsonObject ("name" ).has ("translation" )
403
+ && !node .getAsJsonObject ("name" ).get ("translation" ).isJsonNull ()
404
+ ? node .getAsJsonObject ("name" ).get ("translation" ).getAsString ()
405
+ : "" );
406
+ event .setDate (node .has ("occurredAt" ) && !node .get ("occurredAt" ).isJsonNull ()
407
+ ? node .get ("occurredAt" ).getAsString ()
408
+ : "" );
409
+
410
+ if (subject != null && subject .has ("defaultName" )
411
+ && subject .getAsJsonObject ("defaultName" ).has ("translation" )) {
412
+ event .setSectionName (!subject .getAsJsonObject ("defaultName" ).get ("translation" ).isJsonNull ()
413
+ ? subject .getAsJsonObject ("defaultName" ).get ("translation" ).getAsString ()
414
+ : "" );
415
+ }
383
416
417
+ if (invoker != null && invoker .has ("defaultName" )
418
+ && invoker .getAsJsonObject ("defaultName" ).has ("translation" )) {
419
+ event .setInvokerName (!invoker .getAsJsonObject ("defaultName" ).get ("translation" ).isJsonNull ()
420
+ ? invoker .getAsJsonObject ("defaultName" ).get ("translation" ).getAsString ()
421
+ : "" );
422
+ }
423
+ }
424
+ } else {
425
+ logger .debug ("JSON edges member is null or empty" );
426
+ }
384
427
return event ;
385
428
}
386
429
0 commit comments