diff --git a/java/com.sap.sailing.domain.igtimiadapter.test/src/com/sap/sailing/domain/igtimiadapter/test/LatestDatumTest.java b/java/com.sap.sailing.domain.igtimiadapter.test/src/com/sap/sailing/domain/igtimiadapter/test/LatestDatumTest.java index 2a098ba8bdf..2935082cc59 100755 --- a/java/com.sap.sailing.domain.igtimiadapter.test/src/com/sap/sailing/domain/igtimiadapter/test/LatestDatumTest.java +++ b/java/com.sap.sailing.domain.igtimiadapter.test/src/com/sap/sailing/domain/igtimiadapter/test/LatestDatumTest.java @@ -16,12 +16,11 @@ import com.sap.sailing.domain.igtimiadapter.impl.FixFactory; public class LatestDatumTest { - private final String sample1 = "{\"latest_data\":[{\"latest_datum\":{\"serial_number\":\"DD-EE-AAGA\",\"resource_id\":1012353,\"c1\":0.5556,\"timestamp\":1384091813000.0}},{\"latest_datum\":{\"serial_number\":\"DD-EE-AAHG\",\"resource_id\":1012356,\"c1\":0.3704,\"timestamp\":1384078160000.0}}]}"; - private final String sample2 = "{\"latest_data\":[{\"latest_datum\":{\"serial_number\":\"DD-EE-AAHG\",\"resource_id\":1012356,\"c1\":4.0744,\"timestamp\":1384078157500.0}}]}"; + private final String sample1 = "{\"DD-EE-AAGA\":{\"9\":{\"t\":[1.384091813E12],\"resource_id\":1012353,\"1\":[0.5556]}},\"DD-EE-AAHG\":{\"9\":{\"t\":[1.386186319E12],\"resource_id\":1012677,\"1\":[0.0]}}}"; @Test public void testFixProductionFromSample1() throws ParseException { - Iterable fixes = new FixFactory().createFixesFromLastDatum((JSONObject) new JSONParser().parse(sample1), Type.SOG); + Iterable fixes = new FixFactory().createFixes((JSONObject) new JSONParser().parse(sample1)); assertEquals(2, Util.size(fixes)); Iterator i = fixes.iterator(); Fix fix1 = i.next(); @@ -31,14 +30,4 @@ public class LatestDatumTest { assertEquals("DD-EE-AAHG", fix2.getSensor().getDeviceSerialNumber()); assertEquals(Type.SOG, fix2.getType()); } - - @Test - public void testFixProductionFromSample2() throws ParseException { - Iterable fixes = new FixFactory().createFixesFromLastDatum((JSONObject) new JSONParser().parse(sample2), Type.AWS); - assertEquals(1, Util.size(fixes)); - Iterator i = fixes.iterator(); - Fix fix1 = i.next(); - assertEquals("DD-EE-AAHG", fix1.getSensor().getDeviceSerialNumber()); - assertEquals(Type.AWS, fix1.getType()); - } } diff --git a/java/com.sap.sailing.domain.igtimiadapter/src/com/sap/sailing/domain/igtimiadapter/impl/FixFactory.java b/java/com.sap.sailing.domain.igtimiadapter/src/com/sap/sailing/domain/igtimiadapter/impl/FixFactory.java index efd286d2860..b2eafbd95a5 100755 --- a/java/com.sap.sailing.domain.igtimiadapter/src/com/sap/sailing/domain/igtimiadapter/impl/FixFactory.java +++ b/java/com.sap.sailing.domain.igtimiadapter/src/com/sap/sailing/domain/igtimiadapter/impl/FixFactory.java @@ -15,6 +15,7 @@ import org.json.simple.JSONObject; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.impl.MillisecondsTimePoint; +import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.domain.igtimiadapter.Sensor; import com.sap.sailing.domain.igtimiadapter.datatypes.Fix; import com.sap.sailing.domain.igtimiadapter.datatypes.Type; @@ -27,60 +28,40 @@ public class FixFactory { for (Entry e : sensorsJson.entrySet()) { String deviceSerialNumber = (String) e.getKey(); JSONObject typesJson = (JSONObject) e.getValue(); - for (Entry fixTypeAndFixesJson : typesJson.entrySet()) { - final String fixTypeAndOptionalSensorId = (String) fixTypeAndFixesJson.getKey(); - final String[] fixTypeAndOptionalColonSeparatedSensorsSubId = fixTypeAndOptionalSensorId.split(":"); - int fixType = Integer.valueOf(fixTypeAndOptionalColonSeparatedSensorsSubId[0]); - JSONObject fixesJson = (JSONObject) fixTypeAndFixesJson.getValue(); - JSONArray timePointsMillis = (JSONArray) fixesJson.get("t"); - int fixIndex = 0; - for (Object timePointMillis : timePointsMillis) { - TimePoint timePoint = new MillisecondsTimePoint(((Number) timePointMillis).longValue()); - Map valuesPerSubindex = new HashMap<>(); - int i=1; - JSONArray values; - while ((values=(JSONArray) fixesJson.get(""+i)) != null) { - valuesPerSubindex.put(i, (Number) values.get(fixIndex)); - i++; - } - Sensor sensor = new SensorImpl(deviceSerialNumber, - fixTypeAndOptionalColonSeparatedSensorsSubId.length < 2 ? 0 - : Long.valueOf(fixTypeAndOptionalColonSeparatedSensorsSubId[1])); - Fix fix = createFix(sensor, Type.valueOf(fixType), timePoint, valuesPerSubindex); - result.add(fix); - fixIndex++; + Util.addAll(createFixesForTypes(deviceSerialNumber, typesJson), result); + } + return result; + } + + private Iterable createFixesForTypes(String deviceSerialNumber, JSONObject typesJson) { + final List result = new ArrayList<>(); + for (Entry fixTypeAndFixesJson : typesJson.entrySet()) { + final String fixTypeAndOptionalSensorId = (String) fixTypeAndFixesJson.getKey(); + final String[] fixTypeAndOptionalColonSeparatedSensorsSubId = fixTypeAndOptionalSensorId.split(":"); + int fixType = Integer.valueOf(fixTypeAndOptionalColonSeparatedSensorsSubId[0]); + JSONObject fixesJson = (JSONObject) fixTypeAndFixesJson.getValue(); + JSONArray timePointsMillis = (JSONArray) fixesJson.get("t"); + int fixIndex = 0; + for (Object timePointMillis : timePointsMillis) { + TimePoint timePoint = new MillisecondsTimePoint(((Number) timePointMillis).longValue()); + Map valuesPerSubindex = new HashMap<>(); + int i=1; + JSONArray values; + while ((values=(JSONArray) fixesJson.get(""+i)) != null) { + valuesPerSubindex.put(i, (Number) values.get(fixIndex)); + i++; } + Sensor sensor = new SensorImpl(deviceSerialNumber, + fixTypeAndOptionalColonSeparatedSensorsSubId.length < 2 ? 0 + : Long.valueOf(fixTypeAndOptionalColonSeparatedSensorsSubId[1])); + Fix fix = createFix(sensor, Type.valueOf(fixType), timePoint, valuesPerSubindex); + result.add(fix); + fixIndex++; } } return result; } - /** - * @param lastDataJson expected to use "c1", "c2", ... instead of "1" and "2" for the sensor parameters, and - * "timestamp" instead of "t" for the timestamp. The values are not provided as arrays but as single values. - */ - public Iterable createFixesFromLastDatum(JSONObject lastDataJson, Type type) { - List result = new ArrayList<>(); - JSONArray latestDataArray = (JSONArray) lastDataJson.get("latest_data"); - for (Object d : latestDataArray) { - JSONObject latestDatum = (JSONObject) ((JSONObject) d).get("latest_datum"); - String serialNumber = (String) latestDatum.get("serial_number"); - // there is a field called "resource_id" but we're currently ignoring it because not all fixes have one and we currently - // don't have a use for it - Map valuesPerSubindex = new HashMap<>(); - int i=1; - Object c_i; - while ((c_i=latestDatum.get("c"+i)) != null) { - valuesPerSubindex.put(i, c_i); - i++; - } - Sensor sensor = new SensorImpl(serialNumber, /* sensor ID */ 0); // Note: the sensor ID isn't obvious from neither the URL nor the response; using 0 as default - TimePoint timestamp = new MillisecondsTimePoint(((Number) latestDatum.get("timestamp")).longValue()); - result.add(createFix(sensor, type, timestamp, valuesPerSubindex)); - } - return result; - } - private Fix createFix(Sensor sensor, Type fixType, TimePoint timePoint, Map valuesPerSubindex) { try { Constructor constructor = fixType.getFixClass().getConstructor(TimePoint.class, Sensor.class, Map.class); diff --git a/java/com.sap.sailing.domain.igtimiadapter/src/com/sap/sailing/domain/igtimiadapter/impl/IgtimiConnectionImpl.java b/java/com.sap.sailing.domain.igtimiadapter/src/com/sap/sailing/domain/igtimiadapter/impl/IgtimiConnectionImpl.java index 4ac20857d94..9389b4c4366 100755 --- a/java/com.sap.sailing.domain.igtimiadapter/src/com/sap/sailing/domain/igtimiadapter/impl/IgtimiConnectionImpl.java +++ b/java/com.sap.sailing.domain.igtimiadapter/src/com/sap/sailing/domain/igtimiadapter/impl/IgtimiConnectionImpl.java @@ -113,7 +113,7 @@ public class IgtimiConnectionImpl implements IgtimiConnection { HttpClient client = connectionFactory.getHttpClient(); HttpGet getLatestData = new HttpGet(connectionFactory.getLatestDatumUrl(deviceSerialNumbers, type, account)); JSONObject latestDataJson = ConnectivityUtils.getJsonFromResponse(client.execute(getLatestData)); - return new FixFactory().createFixesFromLastDatum(latestDataJson, type); + return new FixFactory().createFixes(latestDataJson); } @Override diff --git a/java/com.sap.sailing.gwt.ui/SailingGWT.launch b/java/com.sap.sailing.gwt.ui/SailingGWT.launch index a737234f455..b50a23dbc54 100755 --- a/java/com.sap.sailing.gwt.ui/SailingGWT.launch +++ b/java/com.sap.sailing.gwt.ui/SailingGWT.launch @@ -48,7 +48,7 @@ - +