|
|
@@ -0,0 +1,287 @@
|
|
|
+package io.connector.module.afarcloud;
|
|
|
+
|
|
|
+import io.vertx.core.json.JsonArray;
|
|
|
+import io.vertx.core.json.JsonObject;
|
|
|
+
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
|
+
|
|
|
+class OGCSensorThingsAssertions {
|
|
|
+
|
|
|
+ private static JsonObject findSensorAFC(JsonArray afc, Map<String, String> properties) {
|
|
|
+ if (afc.size() == 1) {
|
|
|
+ return afc.getJsonObject(0);
|
|
|
+ } else {
|
|
|
+ for (int i = 0; i < afc.size(); i++) {
|
|
|
+ JsonObject sensor = afc.getJsonObject(i);
|
|
|
+ if (sensor.getString("resourceId").equalsIgnoreCase(properties.get("multiSensorId"))) {
|
|
|
+ return sensor;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return new JsonObject();
|
|
|
+ }
|
|
|
+
|
|
|
+ private static JsonObject findSensorOGC(JsonArray ogc, Map<String, String> properties) {
|
|
|
+ if (ogc.size() == 1) {
|
|
|
+ return ogc.getJsonObject(0);
|
|
|
+ } else {
|
|
|
+ for (int i = 0; i < ogc.size(); i++) {
|
|
|
+ JsonObject sensor = ogc.getJsonObject(i);
|
|
|
+ if (sensor.getString("@iot.id").contains(properties.get("multiSensorId"))) {
|
|
|
+ return sensor;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return new JsonObject();
|
|
|
+ }
|
|
|
+
|
|
|
+ private static JsonObject findResourceAFC(JsonArray resourcesAFC, Map<String, String> properties) {
|
|
|
+ for (int i = 0; i < resourcesAFC.size(); i++) {
|
|
|
+ JsonObject resource = resourcesAFC.getJsonObject(i);
|
|
|
+ if (resource.getString("resource").equalsIgnoreCase(properties.get("multiSensorId"))) {
|
|
|
+ return resource;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return new JsonObject();
|
|
|
+ }
|
|
|
+
|
|
|
+ private static JsonObject findSensorInfoAFC(String observedProperty, JsonArray observationsAFC) {
|
|
|
+ for (int i = 0; i < observationsAFC.size(); i++) {
|
|
|
+ JsonObject observationAFC = observationsAFC.getJsonObject(i);
|
|
|
+ String observedPropertyAFC = observationAFC.getString("observedProperty");
|
|
|
+ if (observedPropertyAFC.equals(observedProperty)) {
|
|
|
+ return observationAFC;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return new JsonObject();
|
|
|
+ };
|
|
|
+
|
|
|
+ private static JsonObject findMeasurementAFC(String observedProperty, JsonArray measurements) {
|
|
|
+ for (int i = 0; i < measurements.size(); i++) {
|
|
|
+ JsonObject measurement = measurements.getJsonObject(i);
|
|
|
+ if (measurement.getString("measurement").equals(observedProperty)) {
|
|
|
+ return measurement;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return new JsonObject();
|
|
|
+ };
|
|
|
+
|
|
|
+ public static void assertThings(String jsonAFC, String jsonOGC, Map<String, String> properties) {
|
|
|
+ JsonObject sensorAFC = findSensorAFC(new JsonArray(jsonAFC), properties);
|
|
|
+ JsonObject sensorOGC = findSensorOGC(new JsonArray(jsonOGC), properties);
|
|
|
+
|
|
|
+ assertEquals(sensorAFC.getString("resourceUrn"), sensorOGC.getString("@iot.id"));
|
|
|
+ assertEquals(sensorAFC.getString("resourceType"), sensorOGC.getString("name"));
|
|
|
+ assertEquals(sensorAFC.getString("resourceType"), sensorOGC.getString("description"));
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void assertSensor(String jsonAFC, String jsonOGC, Map<String, String> properties) {
|
|
|
+ JsonObject sensorAFC = new JsonObject(jsonAFC);
|
|
|
+ JsonObject sensorOGC = new JsonObject(jsonOGC);
|
|
|
+
|
|
|
+ assertEquals(sensorAFC.getString("resourceUrn"), sensorOGC.getString("@iot.id"));
|
|
|
+ assertEquals(sensorAFC.getString("resourceType"), sensorOGC.getString("name"));
|
|
|
+ assertEquals(sensorAFC.getString("resourceType"), sensorOGC.getString("description"));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void assertDataStream(String jsonAFCSensor, String jsonAFCData, String jsonOGC, Map<String, String> properties) {
|
|
|
+
|
|
|
+ JsonObject sensorAFC = new JsonObject(jsonAFCSensor);
|
|
|
+ JsonArray observationsAFC = sensorAFC.getJsonArray("observations");
|
|
|
+
|
|
|
+ JsonObject dataAFC = new JsonObject(jsonAFCData);
|
|
|
+ JsonArray resourcesAFC = dataAFC.getJsonObject("results").getJsonArray("resources");
|
|
|
+
|
|
|
+ JsonObject resourceAFC = findResourceAFC(resourcesAFC, properties);
|
|
|
+ JsonArray measurements = resourceAFC.getJsonArray("measurements");
|
|
|
+
|
|
|
+ JsonArray dataStreamOGC = new JsonArray(jsonOGC);
|
|
|
+
|
|
|
+ String resourceUrnAFC = sensorAFC.getString("resourceUrn");
|
|
|
+ for (int i = 0; i < dataStreamOGC.size(); i++) {
|
|
|
+ JsonObject dataStream = dataStreamOGC.getJsonObject(i);
|
|
|
+ String id = dataStream.getString("@iot.id");
|
|
|
+ String [] idParts = id.split("&");
|
|
|
+ String resourceUrnOGC = idParts[0];
|
|
|
+ String observedPropertyOGC = idParts[1];
|
|
|
+ assertEquals(resourceUrnAFC, resourceUrnOGC);
|
|
|
+
|
|
|
+ JsonObject sensorInfoAFC = findSensorInfoAFC(observedPropertyOGC, observationsAFC);
|
|
|
+ String observedPropertyAFC = sensorInfoAFC.getString("observedProperty");
|
|
|
+ assertEquals(observedPropertyAFC, observedPropertyOGC);
|
|
|
+ assertEquals(observedPropertyAFC, dataStream.getString("name"));
|
|
|
+ assertEquals(observedPropertyAFC, dataStream.getString("description"));
|
|
|
+
|
|
|
+ JsonObject unitOfMeasurementOGC = dataStream.getJsonObject("unitOfMeasurement");
|
|
|
+ assertEquals(observedPropertyAFC, unitOfMeasurementOGC.getString("name"));
|
|
|
+
|
|
|
+ JsonObject measurementAFC = findMeasurementAFC(observedPropertyOGC, measurements);
|
|
|
+ JsonArray afc = measurementAFC.getJsonArray("observations");
|
|
|
+ JsonObject observationAFC = afc.size() == 1 ? afc.getJsonObject(0) : new JsonObject();
|
|
|
+
|
|
|
+ String uomAFC = observationAFC.getString("uom");
|
|
|
+ String definitionOGC = unitOfMeasurementOGC.getString("definition");
|
|
|
+ assertEquals(uomAFC, definitionOGC);
|
|
|
+
|
|
|
+ String observationTypeOGC = dataStream.getString("observationType");
|
|
|
+ assertEquals("http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement", observationTypeOGC);
|
|
|
+
|
|
|
+ JsonObject observedAreaOGC = dataStream.getJsonObject("observedArea");
|
|
|
+ assertEquals("Point", observedAreaOGC.getString("type"));
|
|
|
+ JsonArray coordinatesOGC = observedAreaOGC.getJsonArray("coordinates");
|
|
|
+ Integer latitudeAFC = observationAFC.getInteger("latitude");
|
|
|
+ Integer longitudeAFC = observationAFC.getInteger("longitude");
|
|
|
+ assertEquals(longitudeAFC, coordinatesOGC.getInteger(0));
|
|
|
+ assertEquals(latitudeAFC, coordinatesOGC.getInteger(1));
|
|
|
+
|
|
|
+ String timeAFC = observationAFC.getString("time");
|
|
|
+ String phenomenonTimeOGC = dataStream.getString("phenomenonTime");
|
|
|
+ String [] phTimeParts = phenomenonTimeOGC.split("/");
|
|
|
+ assertEquals("<none>", phTimeParts[0]);
|
|
|
+ assertEquals(timeAFC, phTimeParts[1]);
|
|
|
+
|
|
|
+ String resultTimeOGC = dataStream.getString("resultTime");
|
|
|
+ String [] rsTimeParts = resultTimeOGC.split("/");
|
|
|
+ assertEquals("<none>", rsTimeParts[0]);
|
|
|
+ assertEquals(timeAFC, rsTimeParts[1]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void assertObservedProperty(String jsonAFCSensor, String jsonAFCData, String jsonOGC, Map<String, String> properties) {
|
|
|
+ JsonObject sensorAFC = new JsonObject(jsonAFCSensor);
|
|
|
+ JsonArray observationsAFC = sensorAFC.getJsonArray("observations");
|
|
|
+
|
|
|
+ JsonObject dataAFC = new JsonObject(jsonAFCData);
|
|
|
+ JsonArray resourcesAFC = dataAFC.getJsonObject("results").getJsonArray("resources");
|
|
|
+
|
|
|
+ JsonObject resourceAFC = findResourceAFC(resourcesAFC, properties);
|
|
|
+ JsonArray measurements = resourceAFC.getJsonArray("measurements");
|
|
|
+
|
|
|
+ JsonObject observedPropertyOGC = new JsonObject(jsonOGC);
|
|
|
+ String idOGC = observedPropertyOGC.getString("@iot.id");
|
|
|
+ String [] idParts = idOGC.split("&");
|
|
|
+ String resourceUrnOGC = idParts[0];
|
|
|
+ String propertyOGC = idParts[1];
|
|
|
+
|
|
|
+ JsonObject sensorInfoAFC = findSensorInfoAFC(propertyOGC, observationsAFC);
|
|
|
+
|
|
|
+ assertEquals(sensorAFC.getString("resourceUrn"), resourceUrnOGC);
|
|
|
+
|
|
|
+ String observedPropertyAFC = sensorInfoAFC.getString("observedProperty");
|
|
|
+ assertEquals(observedPropertyAFC, propertyOGC);
|
|
|
+ assertEquals(observedPropertyAFC, observedPropertyOGC.getString("name"));
|
|
|
+ assertEquals(observedPropertyAFC, observedPropertyOGC.getString("description"));
|
|
|
+
|
|
|
+ JsonObject measurementAFC = findMeasurementAFC(propertyOGC, measurements);
|
|
|
+ JsonArray afc = measurementAFC.getJsonArray("observations");
|
|
|
+ JsonObject observationAFC = afc.size() == 1 ? afc.getJsonObject(0) : new JsonObject();
|
|
|
+ assertEquals(observationAFC.getString("uom"), observedPropertyOGC.getString("definition"));
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void assertObservation(String jsonAFCData, String jsonOGC, Map<String, String> properties) {
|
|
|
+ JsonObject dataAFC = new JsonObject(jsonAFCData);
|
|
|
+ JsonArray resourcesAFC = dataAFC.getJsonObject("results").getJsonArray("resources");
|
|
|
+
|
|
|
+ JsonObject resourceAFC = findResourceAFC(resourcesAFC, properties);
|
|
|
+
|
|
|
+ JsonArray observationsOGC = new JsonArray(jsonOGC);
|
|
|
+ JsonObject observationOGC = observationsOGC.size() == 1 ? observationsOGC.getJsonObject(0) : new JsonObject();
|
|
|
+ String idOGC = observationOGC.getString("@iot.id");
|
|
|
+ String [] idParts = idOGC.split("&");
|
|
|
+ String resourceOGC = idParts[0];
|
|
|
+ String measurementOGC = idParts[1];
|
|
|
+ String timeOGC = idParts[2];
|
|
|
+
|
|
|
+ assertEquals(resourceAFC.getString("resource"), resourceOGC);
|
|
|
+
|
|
|
+ JsonObject measurementAFC = findMeasurementAFC(measurementOGC, resourceAFC.getJsonArray("measurements"));
|
|
|
+ assertEquals(measurementAFC.getString("measurement"), measurementOGC);
|
|
|
+
|
|
|
+ JsonArray observationsAFC = measurementAFC.getJsonArray("observations");
|
|
|
+ JsonObject observationAFC = observationsAFC.size() == 1 ? observationsAFC.getJsonObject(0) : new JsonObject();
|
|
|
+ String timeAFC = observationAFC.getString("time");
|
|
|
+ assertEquals(timeAFC, timeOGC);
|
|
|
+ assertEquals(timeAFC, observationOGC.getString("phenomenonTime"));
|
|
|
+ assertEquals(timeAFC, observationOGC.getString("resultTime"));
|
|
|
+ assertEquals(observationAFC.getDouble("value"), observationOGC.getDouble("result"));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void assertLocations(String jsonAFCSensor, String jsonAFCData, String jsonOGC, Map<String, String> properties) {
|
|
|
+ JsonObject sensorAFC = new JsonObject(jsonAFCSensor);
|
|
|
+
|
|
|
+ JsonArray locationsOGC = new JsonArray(jsonOGC);
|
|
|
+ JsonObject locationOGC = locationsOGC.size() == 1 ? locationsOGC.getJsonObject(0) : new JsonObject();
|
|
|
+
|
|
|
+ JsonObject dataAFC = new JsonObject(jsonAFCData);
|
|
|
+ JsonArray resourcesAFC = dataAFC.getJsonObject("results").getJsonArray("resources");
|
|
|
+ JsonObject resourceAFC = findResourceAFC(resourcesAFC, properties);
|
|
|
+
|
|
|
+ String idOGC = locationOGC.getString("@iot.id");
|
|
|
+ String [] idParts = idOGC.split("&");
|
|
|
+ String resourceUrnOGC = idParts[0];
|
|
|
+ String observedPropertyOGC = idParts[1];
|
|
|
+ String timeOGC = idParts[2];
|
|
|
+
|
|
|
+ JsonArray observationsAFC = sensorAFC.getJsonArray("observations");
|
|
|
+ JsonObject sensorInfoAFC = findSensorInfoAFC(observedPropertyOGC, observationsAFC);
|
|
|
+
|
|
|
+ assertEquals(sensorAFC.getString("resourceUrn"), resourceUrnOGC);
|
|
|
+ assertEquals(sensorInfoAFC.getString("observedProperty"), observedPropertyOGC);
|
|
|
+ assertEquals(sensorAFC.getString("resourceType"), locationOGC.getString("name"));
|
|
|
+
|
|
|
+ JsonObject geoLocationOGC = locationOGC.getJsonObject("location");
|
|
|
+ assertEquals("Feature", geoLocationOGC.getString("type"));
|
|
|
+
|
|
|
+ JsonObject geometryOGC = geoLocationOGC.getJsonObject("geometry");
|
|
|
+ assertEquals("Point", geometryOGC.getString("type"));
|
|
|
+
|
|
|
+ JsonArray coordinatesOGC = geometryOGC.getJsonArray("coordinates");
|
|
|
+ assertEquals(sensorAFC.getDouble("longitude"), coordinatesOGC.getDouble(0));
|
|
|
+ assertEquals(sensorAFC.getDouble("latitude"), coordinatesOGC.getDouble(1));
|
|
|
+ assertEquals(sensorAFC.getDouble("altitude"), coordinatesOGC.getDouble(2));
|
|
|
+
|
|
|
+ JsonObject measurementAFC = findMeasurementAFC(observedPropertyOGC, resourceAFC.getJsonArray("measurements"));
|
|
|
+ assertEquals(measurementAFC.getString("measurement"), observedPropertyOGC);
|
|
|
+
|
|
|
+ JsonArray observationsDataAFC = measurementAFC.getJsonArray("observations");
|
|
|
+ JsonObject observationDataAFC = observationsDataAFC.size() == 1 ? observationsDataAFC.getJsonObject(0) : new JsonObject();
|
|
|
+ assertEquals(observationDataAFC.getString("time"), timeOGC);
|
|
|
+ assertEquals(observationDataAFC.getString("provider"), locationOGC.getString("description"));
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void assertHistoricalLocation(String jsonAFCSensor, String jsonAFCData, String jsonOGC, Map<String, String> properties) {
|
|
|
+ JsonObject sensorAFC = new JsonObject(jsonAFCSensor);
|
|
|
+
|
|
|
+ JsonArray hisLocsOGC = new JsonArray(jsonOGC);
|
|
|
+ JsonObject hisLocationOGC = hisLocsOGC.size() == 1 ? hisLocsOGC.getJsonObject(0) : new JsonObject();
|
|
|
+
|
|
|
+ JsonObject dataAFC = new JsonObject(jsonAFCData);
|
|
|
+ JsonArray resourcesAFC = dataAFC.getJsonObject("results").getJsonArray("resources");
|
|
|
+ JsonObject resourceAFC = findResourceAFC(resourcesAFC, properties);
|
|
|
+
|
|
|
+ String idOGC = hisLocationOGC.getString("@iot.id");
|
|
|
+ String [] idParts = idOGC.split("&");
|
|
|
+ String resourceUrnOGC = idParts[0];
|
|
|
+ String observedPropertyOGC = idParts[1];
|
|
|
+ String timeOGC = idParts[2];
|
|
|
+
|
|
|
+ JsonArray observationsAFC = sensorAFC.getJsonArray("observations");
|
|
|
+ JsonObject sensorInfoAFC = findSensorInfoAFC(observedPropertyOGC, observationsAFC);
|
|
|
+
|
|
|
+ assertEquals(sensorAFC.getString("resourceUrn"), resourceUrnOGC);
|
|
|
+ assertEquals(sensorInfoAFC.getString("observedProperty"), observedPropertyOGC);
|
|
|
+
|
|
|
+ JsonObject measurementAFC = findMeasurementAFC(observedPropertyOGC, resourceAFC.getJsonArray("measurements"));
|
|
|
+ assertEquals(measurementAFC.getString("measurement"), observedPropertyOGC);
|
|
|
+
|
|
|
+ JsonArray observationsDataAFC = measurementAFC.getJsonArray("observations");
|
|
|
+ JsonObject observationDataAFC = observationsDataAFC.size() == 1 ? observationsDataAFC.getJsonObject(0) : new JsonObject();
|
|
|
+ String timeAFC = observationDataAFC.getString("time");
|
|
|
+ assertEquals(timeAFC, timeOGC);
|
|
|
+ assertEquals(timeAFC, hisLocationOGC.getString("time"));
|
|
|
+ }
|
|
|
+}
|