From 884453fe3b5ad0b198a9ce6b61142a4af35ac7cd Mon Sep 17 00:00:00 2001
From: "quentin.leblanc" <quentin.leblanc@etu.hesge.ch>
Date: Sat, 2 Feb 2019 17:25:41 +0100
Subject: [PATCH] Refactored builders because it seems like fields can be null
 and not an empty JSONObject

---
 src/main/java/ch/hepia/api/transport/Connection.java | 10 +++++-----
 src/main/java/ch/hepia/api/transport/Journey.java    |  2 +-
 src/main/java/ch/hepia/api/transport/Location.java   |  2 +-
 src/main/java/ch/hepia/api/transport/Section.java    |  6 +++---
 src/main/java/ch/hepia/api/transport/Stop.java       |  4 ++--
 5 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/src/main/java/ch/hepia/api/transport/Connection.java b/src/main/java/ch/hepia/api/transport/Connection.java
index 1004f9b..404f299 100644
--- a/src/main/java/ch/hepia/api/transport/Connection.java
+++ b/src/main/java/ch/hepia/api/transport/Connection.java
@@ -98,27 +98,27 @@ public class Connection {
                 return new EmptyConnection();
             }
 
-            JSONObject fromJSON = datas.getJSONObject("from");
+            JSONObject fromJSON = datas.isNull("from") ? new JSONObject() : datas.getJSONObject("from");
             Stop.StopBuilder from = new Stop.StopBuilder(fromJSON);
 
-            JSONObject toJSON = datas.getJSONObject("to");
+            JSONObject toJSON = datas.isNull("to") ? new JSONObject() : datas.getJSONObject("to");
             Stop.StopBuilder to = new Stop.StopBuilder(toJSON);
 
             DateFormat formatter = new SimpleDateFormat("dd:kk:mm:ss");
             String date = datas.isNull("duration") ? "00:00:00:00" : datas.getString("duration").replace('d',':');
             Time duration = new Time(formatter.parse(date).getTime());
 
-            JSONObject serviceJSON = new JSONObject(datas.get("service"));
+            JSONObject serviceJSON = datas.isNull("service") ? new JSONObject() : new JSONObject(datas.get("service"));
             Service.ServiceBuilder service = new Service.ServiceBuilder(serviceJSON);
 
-            JSONArray productsJSON = datas.getJSONArray("products");
+            JSONArray productsJSON = datas.isNull("from") ? new JSONArray() : datas.getJSONArray("products");
             List<String> products = new ArrayList<>();
             productsJSON.forEach(k -> products.add(k.toString()));
 
             int capacity1st = datas.isNull("capacity1st") ? 0 : datas.getInt("capacity1st");
             int capacity2nd = datas.isNull("capacity2nd") ? 0 : datas.getInt("capacity2nd");
 
-            JSONArray sectionsJSON = datas.getJSONArray("sections");
+            JSONArray sectionsJSON = datas.isNull("from") ? new JSONArray() : datas.getJSONArray("sections");
             List<Section> sections = new ArrayList<>();
             sectionsJSON.forEach(o -> {
                 JSONObject k = (JSONObject) o;
diff --git a/src/main/java/ch/hepia/api/transport/Journey.java b/src/main/java/ch/hepia/api/transport/Journey.java
index 136c05b..c51b434 100644
--- a/src/main/java/ch/hepia/api/transport/Journey.java
+++ b/src/main/java/ch/hepia/api/transport/Journey.java
@@ -130,7 +130,7 @@ public class Journey {
 
             String to = datas.isNull("to") ? "" : datas.getString("to");
 
-            JSONArray passListJSON = datas.getJSONArray("passList");
+            JSONArray passListJSON = datas.isNull("from") ? new JSONArray() : datas.getJSONArray("passList");
             List<Stop> passList = new ArrayList<>();
             passListJSON.forEach( o -> {
                 JSONObject k = (JSONObject) o;
diff --git a/src/main/java/ch/hepia/api/transport/Location.java b/src/main/java/ch/hepia/api/transport/Location.java
index 75c5194..f36977e 100644
--- a/src/main/java/ch/hepia/api/transport/Location.java
+++ b/src/main/java/ch/hepia/api/transport/Location.java
@@ -81,7 +81,7 @@ public class Location {
             String name = datas.isNull("name") ? "" : datas.getString("name");
             double score = datas.isNull("score") ? 0 : datas.getDouble("score");
 
-            JSONObject coordinatesJSON = datas.getJSONObject("coordinate");
+            JSONObject coordinatesJSON = datas.isNull("coordinate") ? new JSONObject() : datas.getJSONObject("coordinate");
             Coordinates.CoordinatesBuilder coordinates = new Coordinates.CoordinatesBuilder(coordinatesJSON);
 
             double distance = datas.isNull("distance") ? 0 : datas.getDouble("distance");
diff --git a/src/main/java/ch/hepia/api/transport/Section.java b/src/main/java/ch/hepia/api/transport/Section.java
index f301b3b..ed06519 100644
--- a/src/main/java/ch/hepia/api/transport/Section.java
+++ b/src/main/java/ch/hepia/api/transport/Section.java
@@ -90,15 +90,15 @@ public class Section {
                 return new EmptySection();
             }
 
-            JSONObject journeyJSON = datas.getJSONObject("journey");
+            JSONObject journeyJSON = datas.isNull("journey") ? new JSONObject() : datas.getJSONObject("journey");
             Journey.JourneyBuilder journey = new Journey.JourneyBuilder(journeyJSON);
 
             double walktime = datas.isNull("walktime") ? 0 : datas.getDouble("walktime");
 
-            JSONObject departureJSON = datas.getJSONObject("departure");
+            JSONObject departureJSON = datas.isNull("departure") ? new JSONObject() : datas.getJSONObject("departure");
             Stop.StopBuilder departure = new Stop.StopBuilder(departureJSON);
 
-            JSONObject arrivalJSON = datas.getJSONObject("arrival");
+            JSONObject arrivalJSON = datas.isNull("arrival") ? new JSONObject() : datas.getJSONObject("arrival");
             Stop.StopBuilder arrival = new Stop.StopBuilder(arrivalJSON);
 
             return new Section(journey.build(), walktime, departure.build(), arrival.build());
diff --git a/src/main/java/ch/hepia/api/transport/Stop.java b/src/main/java/ch/hepia/api/transport/Stop.java
index e48645c..1decc5d 100644
--- a/src/main/java/ch/hepia/api/transport/Stop.java
+++ b/src/main/java/ch/hepia/api/transport/Stop.java
@@ -105,7 +105,7 @@ public class Stop {
             String[] keys = new String[10];
             datas.keySet().toArray(keys);
             String type = keys[4];
-            JSONObject locationJSON = datas.getJSONObject(type);
+            JSONObject locationJSON = datas.isNull("type") ? new JSONObject() : datas.getJSONObject(type);
             Location.LocationBuilder location = new Location.LocationBuilder(locationJSON, type);
 
             DateFormat formatter = new SimpleDateFormat("kk:mm:ss");
@@ -118,7 +118,7 @@ public class Stop {
             int delay = datas.isNull("delay") ? 0 : datas.getInt("delay");
             int plateform = datas.isNull("plateform") ? 0 : datas.getInt("plateform");
 
-            JSONObject prognosisJSON = new JSONObject(datas.get("prognosis"));
+            JSONObject prognosisJSON = datas.isNull("prognosis") ? new JSONObject() : new JSONObject(datas.get("prognosis"));
             Prognosis.PrognosisBuilder prognosis = new Prognosis.PrognosisBuilder(prognosisJSON);
 
             return new Stop(location.build(), arrival, departure, delay, plateform, prognosis.build());
-- 
GitLab