|
@@ -2,9 +2,7 @@ package cz.senslog.telemetry.server;
|
|
|
|
|
|
|
|
import cz.senslog.telemetry.app.Application;
|
|
import cz.senslog.telemetry.app.Application;
|
|
|
import cz.senslog.telemetry.database.SortType;
|
|
import cz.senslog.telemetry.database.SortType;
|
|
|
-import cz.senslog.telemetry.database.domain.UnitLocation;
|
|
|
|
|
import cz.senslog.telemetry.database.repository.SensLogRepository;
|
|
import cz.senslog.telemetry.database.repository.SensLogRepository;
|
|
|
-import cz.senslog.telemetry.utils.JsonConvertor;
|
|
|
|
|
import cz.senslog.telemetry.utils.TernaryCondition;
|
|
import cz.senslog.telemetry.utils.TernaryCondition;
|
|
|
import io.vertx.core.http.HttpServerRequest;
|
|
import io.vertx.core.http.HttpServerRequest;
|
|
|
import io.vertx.core.json.JsonArray;
|
|
import io.vertx.core.json.JsonArray;
|
|
@@ -16,14 +14,12 @@ import org.apache.logging.log4j.Logger;
|
|
|
|
|
|
|
|
import java.time.OffsetDateTime;
|
|
import java.time.OffsetDateTime;
|
|
|
import java.time.ZoneId;
|
|
import java.time.ZoneId;
|
|
|
-import java.time.ZoneOffset;
|
|
|
|
|
-import java.time.ZonedDateTime;
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
+import java.util.function.BiFunction;
|
|
|
import java.util.function.Function;
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
-import static cz.senslog.telemetry.utils.JsonConvertor.floatArrToJson;
|
|
|
|
|
|
|
+import static java.lang.Boolean.parseBoolean;
|
|
|
import static java.time.format.DateTimeFormatter.ISO_DATE_TIME;
|
|
import static java.time.format.DateTimeFormatter.ISO_DATE_TIME;
|
|
|
import static java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME;
|
|
import static java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME;
|
|
|
import static java.util.stream.Collectors.toList;
|
|
import static java.util.stream.Collectors.toList;
|
|
@@ -32,6 +28,11 @@ public class OpenAPIHandler {
|
|
|
private static final Logger logger = LogManager.getLogger(OpenAPIHandler.class);
|
|
private static final Logger logger = LogManager.getLogger(OpenAPIHandler.class);
|
|
|
|
|
|
|
|
private static final int DEFAULT_MAX_DATA_LIMIT = 500;
|
|
private static final int DEFAULT_MAX_DATA_LIMIT = 500;
|
|
|
|
|
+ private static final ZoneId DEFAULT_ZONE_ID = ZoneId.of("UTC");
|
|
|
|
|
+ private static final boolean DEFAULT_NAVIGATION_LINKS = true;
|
|
|
|
|
+
|
|
|
|
|
+ private static final BiFunction<OffsetDateTime, ZoneId, String> DATE_TIME_FORMATTER = (dateTime, zoneId) ->
|
|
|
|
|
+ OffsetDateTime.ofInstant(dateTime.toInstant(), zoneId).format(ISO_OFFSET_DATE_TIME);
|
|
|
|
|
|
|
|
private final SensLogRepository repo;
|
|
private final SensLogRepository repo;
|
|
|
|
|
|
|
@@ -57,56 +58,154 @@ public class OpenAPIHandler {
|
|
|
).encode());
|
|
).encode());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public void campaignAll(RoutingContext rc) {
|
|
|
|
|
|
|
+ public void campaignsGET(RoutingContext rc) {
|
|
|
String host = hostURLFull(rc.request());
|
|
String host = hostURLFull(rc.request());
|
|
|
|
|
+
|
|
|
|
|
+ List<String> paramZone = rc.queryParam("zone");
|
|
|
|
|
+ ZoneId zone = paramZone.isEmpty() ? DEFAULT_ZONE_ID : ZoneId.of(paramZone.get(0));
|
|
|
|
|
+
|
|
|
|
|
+ List<String> paramNavigationLinks = rc.queryParam("navigationLinks");
|
|
|
|
|
+ boolean navigationLinks = paramNavigationLinks.isEmpty() ? DEFAULT_NAVIGATION_LINKS : parseBoolean(paramNavigationLinks.get(0));
|
|
|
|
|
+
|
|
|
repo.allCampaigns()
|
|
repo.allCampaigns()
|
|
|
.onSuccess(data -> rc.response().end(new JsonArray(
|
|
.onSuccess(data -> rc.response().end(new JsonArray(
|
|
|
- data.stream().map(c -> JsonObject.of(
|
|
|
|
|
- "Campaign@NavigationLink", String.format("%s/campaigns/%d", host, c.getId()),
|
|
|
|
|
- "id", c.getId(),
|
|
|
|
|
- "description", c.getDescription(),
|
|
|
|
|
- "from_time", c.getFromTime().toString(),
|
|
|
|
|
- "to_time", c.getToTime().toString()
|
|
|
|
|
- )).collect(toList())).encode()))
|
|
|
|
|
- .onFailure(th -> { logger.catching(th); rc.fail(400, th); });
|
|
|
|
|
|
|
+ data.stream().map(c -> (navigationLinks ? JsonObject.of(
|
|
|
|
|
+ "Campaign@NavigationLink", String.format("%s/campaigns/%d", host, c.getId())
|
|
|
|
|
+ ) : JsonObject.of()).mergeIn(JsonObject.of(
|
|
|
|
|
+ "id", c.getId(),
|
|
|
|
|
+ "description", c.getDescription(),
|
|
|
|
|
+ "fromTime", DATE_TIME_FORMATTER.apply(c.getFromTime(), zone),
|
|
|
|
|
+ "toTime", DATE_TIME_FORMATTER.apply(c.getToTime(), zone)
|
|
|
|
|
+ ))).collect(toList())).encode()))
|
|
|
|
|
+ .onFailure(th -> rc.fail(400, th));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public void campaignById(RoutingContext rc) {
|
|
|
|
|
|
|
+ public void campaignIdGET(RoutingContext rc) {
|
|
|
String host = hostURLFull(rc.request());
|
|
String host = hostURLFull(rc.request());
|
|
|
- long campaignId = Long.parseLong(rc.pathParam("id"));
|
|
|
|
|
|
|
+
|
|
|
|
|
+ long campaignId = Long.parseLong(rc.pathParam("campaignId"));
|
|
|
|
|
+
|
|
|
|
|
+ List<String> paramZone = rc.queryParam("zone");
|
|
|
|
|
+ ZoneId zone = paramZone.isEmpty() ? DEFAULT_ZONE_ID : ZoneId.of(paramZone.get(0));
|
|
|
|
|
+
|
|
|
|
|
+ List<String> paramNavigationLinks = rc.queryParam("navigationLinks");
|
|
|
|
|
+ boolean navigationLinks = paramNavigationLinks.isEmpty() ? DEFAULT_NAVIGATION_LINKS : parseBoolean(paramNavigationLinks.get(0));
|
|
|
|
|
+
|
|
|
repo.findCampaignById(campaignId)
|
|
repo.findCampaignById(campaignId)
|
|
|
- .onSuccess(c -> repo.findUnitIdsByCampaignId(c.getId())
|
|
|
|
|
- .onSuccess(units -> rc.response().end(JsonObject.of(
|
|
|
|
|
- "Observations@NavigationLink", String.format("%s/campaigns/%d/observations",host, c.getId()),
|
|
|
|
|
|
|
+ .onSuccess(c -> rc.response().end((navigationLinks ? JsonObject.of(
|
|
|
|
|
+ "self@NavigationLink", String.format("%s/campaigns/%d", host, c.getId()),
|
|
|
|
|
+ "Observations@NavigationLink", String.format("%s/campaigns/%d/units/observations", host, c.getId()),
|
|
|
|
|
+ "Locations@NavigationLink", String.format("%s/campaigns/%d/units/observations/locations?limitPerUnit=1", host, c.getId()),
|
|
|
|
|
+ "Units@NavigationLink", String.format("%s/campaigns/%d/units", host, c.getId())
|
|
|
|
|
+ ) : JsonObject.of()).mergeIn(JsonObject.of(
|
|
|
"id", c.getId(),
|
|
"id", c.getId(),
|
|
|
"description", c.getDescription(),
|
|
"description", c.getDescription(),
|
|
|
- "from_time", c.getFromTime().toString(),
|
|
|
|
|
- "to_time", c.getToTime().toString(),
|
|
|
|
|
- "units", units.stream().map(u -> JsonObject.of(
|
|
|
|
|
- "Unit@NavigationLink", String.format("%s/units/%d", host, u),
|
|
|
|
|
- "unit_id", u
|
|
|
|
|
- )).collect(toList())
|
|
|
|
|
- ).encode()))
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ "fromTime", DATE_TIME_FORMATTER.apply(c.getFromTime(), zone),
|
|
|
|
|
+ "toTime", DATE_TIME_FORMATTER.apply(c.getToTime(), zone)
|
|
|
|
|
+ )).encode())
|
|
|
|
|
+ .onFailure(th -> rc.fail(400, th)));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public void campaignIdUnitsGET(RoutingContext rc) {
|
|
|
|
|
+ String host = hostURLFull(rc.request());
|
|
|
|
|
+
|
|
|
|
|
+ long campaignId = Long.parseLong(rc.pathParam("campaignId"));
|
|
|
|
|
+
|
|
|
|
|
+ List<String> paramZone = rc.queryParam("zone");
|
|
|
|
|
+ ZoneId zone = paramZone.isEmpty() ? DEFAULT_ZONE_ID : ZoneId.of(paramZone.get(0));
|
|
|
|
|
+
|
|
|
|
|
+ List<String> paramNavigationLinks = rc.queryParam("navigationLinks");
|
|
|
|
|
+ boolean navigationLinks = paramNavigationLinks.isEmpty() ? DEFAULT_NAVIGATION_LINKS : parseBoolean(paramNavigationLinks.get(0));
|
|
|
|
|
+
|
|
|
|
|
+ repo.findUnitsByCampaignId(campaignId)
|
|
|
|
|
+ .onSuccess(units -> rc.response().end(new JsonArray(
|
|
|
|
|
+ units.stream().map(u -> (navigationLinks ? JsonObject.of(
|
|
|
|
|
+ "Unit@NavigationLink", String.format("%s/units/%d",host, u.getUnitId())
|
|
|
|
|
+ ) : JsonObject.of()).mergeIn(JsonObject.of(
|
|
|
|
|
+ "id", u.getUnitId(),
|
|
|
|
|
+ "description", u.getDescription(),
|
|
|
|
|
+ "fromTime", DATE_TIME_FORMATTER.apply(u.getFromTime(), zone),
|
|
|
|
|
+ "toTime", DATE_TIME_FORMATTER.apply(u.getToTime(), zone)
|
|
|
|
|
+ ))).collect(toList())
|
|
|
|
|
+ ).encode()))
|
|
|
.onFailure(th -> rc.fail(400, th));
|
|
.onFailure(th -> rc.fail(400, th));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public void campaignByIdObservations(RoutingContext rc) {
|
|
|
|
|
|
|
+ public void campaignIdUnitsObservationsGET(RoutingContext rc) {
|
|
|
String host = hostURLFull(rc.request());
|
|
String host = hostURLFull(rc.request());
|
|
|
- long campaignId = Long.parseLong(rc.pathParam("id"));
|
|
|
|
|
- repo.findObservationsByCampaignId(campaignId)
|
|
|
|
|
- .onSuccess(observations -> rc.response().end(JsonObject.of(
|
|
|
|
|
- "Campaign@NavigationLink", String.format("%s/campaigns/%d",host, campaignId),
|
|
|
|
|
- "data", observations.stream().map(o -> JsonObject.of(
|
|
|
|
|
- "unit_id", o.getUnitId(),
|
|
|
|
|
- "time_stamp", o.getTimestamp().format(ISO_DATE_TIME),
|
|
|
|
|
- "location", JsonObject.of(
|
|
|
|
|
- "longitude", o.getLongitude(),
|
|
|
|
|
- "latitude", o.getLatitude(),
|
|
|
|
|
- "altitude", o.getAltitude()),
|
|
|
|
|
- "observed_values", o.getObservedValues()
|
|
|
|
|
- )).collect(toList())
|
|
|
|
|
- ).encode()))
|
|
|
|
|
|
|
+ JsonObject paramsJson = new JsonObject();
|
|
|
|
|
+
|
|
|
|
|
+ long campaignId = Long.parseLong(rc.pathParam("campaignId"));
|
|
|
|
|
+
|
|
|
|
|
+ List<String> paramFrom = rc.queryParam("from");
|
|
|
|
|
+ OffsetDateTime from = TernaryCondition.<OffsetDateTime>ternaryIf(paramFrom::isEmpty, () -> null, () -> {
|
|
|
|
|
+ paramsJson.put("from", paramFrom.get(0));
|
|
|
|
|
+ return OffsetDateTime.parse(paramFrom.get(0));
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ List<String> paramTo = rc.queryParam("to");
|
|
|
|
|
+ OffsetDateTime to = TernaryCondition.<OffsetDateTime>ternaryIf(paramTo::isEmpty, () -> null,() -> {
|
|
|
|
|
+ paramsJson.put("to", paramTo.get(0));
|
|
|
|
|
+ return OffsetDateTime.parse(paramTo.get(0));
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ List<String> paramZone = rc.queryParam("zone");
|
|
|
|
|
+ ZoneId zone = TernaryCondition.<ZoneId>ternaryIf(paramZone::isEmpty, ZoneId.of("UTC"), () -> {
|
|
|
|
|
+ paramsJson.put("zone", paramZone.get(0));
|
|
|
|
|
+ return ZoneId.of(paramZone.get(0));
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ List<String> paramOffset = rc.queryParam("offset");
|
|
|
|
|
+ int offset = TernaryCondition.<Integer>ternaryIf(paramOffset::isEmpty, 0, () -> {
|
|
|
|
|
+ paramsJson.put("offset", paramOffset.get(0));
|
|
|
|
|
+ return Integer.parseInt(paramOffset.get(0));
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ List<String> paramLimit = rc.queryParam("limit");
|
|
|
|
|
+ int limit = TernaryCondition.<Integer>ternaryIf(paramLimit::isEmpty, DEFAULT_MAX_DATA_LIMIT, () -> {
|
|
|
|
|
+ paramsJson.put("limit", paramLimit.get(0));
|
|
|
|
|
+ return Integer.parseInt(paramLimit.get(0));
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ List<String> paramNavigationLinks = rc.queryParam("navigationLinks");
|
|
|
|
|
+ boolean navigationLinks = TernaryCondition.<Boolean>ternaryIf(paramNavigationLinks::isEmpty, true, () -> {
|
|
|
|
|
+ paramsJson.put("navigationLinks", paramNavigationLinks.get(0));
|
|
|
|
|
+ return parseBoolean(paramNavigationLinks.get(0));
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ JsonObject navLinks = navigationLinks ? JsonObject.of(
|
|
|
|
|
+ "Campaign@NavigationLink", String.format("%s/campaigns/%d",host, campaignId)
|
|
|
|
|
+ ) : JsonObject.of();
|
|
|
|
|
+
|
|
|
|
|
+ Function<Long, String> createNextNavLink = dataSize -> {
|
|
|
|
|
+ String urlParams = paramsJson.stream()
|
|
|
|
|
+ .filter(e -> !e.getKey().equals("offset"))
|
|
|
|
|
+ .map(e -> String.format("%s=%s", e.getKey(), e.getValue()))
|
|
|
|
|
+ .collect(Collectors.joining("&"));
|
|
|
|
|
+ long newOffset = offset + dataSize;
|
|
|
|
|
+ return String.format("%s/campaigns/%d/units/observations?offset=%d%s", host, campaignId, newOffset, (urlParams.isEmpty() ? "" : "&"+urlParams));
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ repo.findObservationsByCampaignIdWithPaging(campaignId, from, to, zone, offset, limit)
|
|
|
|
|
+ .onSuccess(paging -> rc.response().end(navLinks.mergeIn(navigationLinks && paging.hasNext() ? JsonObject.of(
|
|
|
|
|
+ "next@NavigationLink", createNextNavLink.apply(paging.size())
|
|
|
|
|
+ ) : JsonObject.of()).mergeIn(JsonObject.of(
|
|
|
|
|
+ "params", paramsJson,
|
|
|
|
|
+ "size", paging.size(),
|
|
|
|
|
+ "offset", offset,
|
|
|
|
|
+ "hasNext", paging.hasNext(),
|
|
|
|
|
+ "data", new JsonArray(
|
|
|
|
|
+ paging.data().stream().map(o -> JsonObject.of(
|
|
|
|
|
+ "unitId", o.getUnitId(),
|
|
|
|
|
+ "timestamp", OffsetDateTime.ofInstant(o.getTimestamp().toInstant(), zone).format(ISO_OFFSET_DATE_TIME),
|
|
|
|
|
+ "speed", o.getSpeed(),
|
|
|
|
|
+ "location", JsonObject.of(
|
|
|
|
|
+ "longitude", o.getLocation().getLongitude(),
|
|
|
|
|
+ "latitude", o.getLocation().getLatitude(),
|
|
|
|
|
+ "altitude", o.getLocation().getAltitude()),
|
|
|
|
|
+ "observedValues", o.getObservedValues()
|
|
|
|
|
+ )).collect(toList()))
|
|
|
|
|
+ )).encode()))
|
|
|
.onFailure(th -> rc.fail(400, th));
|
|
.onFailure(th -> rc.fail(400, th));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -150,7 +249,7 @@ public class OpenAPIHandler {
|
|
|
List<String> paramNavigationLinks = rc.queryParam("navigationLinks");
|
|
List<String> paramNavigationLinks = rc.queryParam("navigationLinks");
|
|
|
boolean navigationLinks = TernaryCondition.<Boolean>ternaryIf(paramNavigationLinks::isEmpty, true, () -> {
|
|
boolean navigationLinks = TernaryCondition.<Boolean>ternaryIf(paramNavigationLinks::isEmpty, true, () -> {
|
|
|
paramsJson.put("navigationLinks", paramNavigationLinks.get(0));
|
|
paramsJson.put("navigationLinks", paramNavigationLinks.get(0));
|
|
|
- return Boolean.parseBoolean(paramNavigationLinks.get(0));
|
|
|
|
|
|
|
+ return parseBoolean(paramNavigationLinks.get(0));
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
JsonObject navLinks = navigationLinks ? JsonObject.of(
|
|
JsonObject navLinks = navigationLinks ? JsonObject.of(
|
|
@@ -164,7 +263,7 @@ public class OpenAPIHandler {
|
|
|
.map(e -> String.format("%s=%s", e.getKey(), e.getValue()))
|
|
.map(e -> String.format("%s=%s", e.getKey(), e.getValue()))
|
|
|
.collect(Collectors.joining("&"));
|
|
.collect(Collectors.joining("&"));
|
|
|
long newOffset = offset + dataSize;
|
|
long newOffset = offset + dataSize;
|
|
|
- return String.format("%s/campaigns/%d/units/%d/observations?offset=%d&%s", host, campaignId, unitId, newOffset, urlParams);
|
|
|
|
|
|
|
+ return String.format("%s/campaigns/%d/units/%d/observations?offset=%d%s", host, campaignId, unitId, newOffset, (urlParams.isEmpty() ? "" : "&"+urlParams));
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
repo.findObservationsByCampaignIdAndUnitIdWithPaging(campaignId, unitId, from, to, zone, offset, limit)
|
|
repo.findObservationsByCampaignIdAndUnitIdWithPaging(campaignId, unitId, from, to, zone, offset, limit)
|
|
@@ -180,36 +279,20 @@ public class OpenAPIHandler {
|
|
|
"timestamp", OffsetDateTime.ofInstant(o.getTimestamp().toInstant(), zone).format(ISO_OFFSET_DATE_TIME),
|
|
"timestamp", OffsetDateTime.ofInstant(o.getTimestamp().toInstant(), zone).format(ISO_OFFSET_DATE_TIME),
|
|
|
"speed", o.getSpeed(),
|
|
"speed", o.getSpeed(),
|
|
|
"location", JsonObject.of(
|
|
"location", JsonObject.of(
|
|
|
- "longitude", o.getLongitude(),
|
|
|
|
|
- "latitude", o.getLatitude(),
|
|
|
|
|
- "altitude", o.getAltitude()),
|
|
|
|
|
|
|
+ "longitude", o.getLocation().getLongitude(),
|
|
|
|
|
+ "latitude", o.getLocation().getLatitude(),
|
|
|
|
|
+ "altitude", o.getLocation().getAltitude()),
|
|
|
"observedValues", o.getObservedValues()
|
|
"observedValues", o.getObservedValues()
|
|
|
)).collect(toList()))
|
|
)).collect(toList()))
|
|
|
)).encode()))
|
|
)).encode()))
|
|
|
.onFailure(th -> rc.fail(400, th));
|
|
.onFailure(th -> rc.fail(400, th));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public void campaignIdUnitsGET(RoutingContext rc) {
|
|
|
|
|
- String host = hostURLFull(rc.request());
|
|
|
|
|
- long campaignId = Long.parseLong(rc.pathParam("id"));
|
|
|
|
|
- repo.findUnitsByCampaignId(campaignId)
|
|
|
|
|
- .onSuccess(units -> rc.response().end(new JsonArray(
|
|
|
|
|
- units.stream().map(u -> JsonObject.of(
|
|
|
|
|
- "Unit@NavigationLink", String.format("%s/units/%d",host, u.getUnitId()),
|
|
|
|
|
- "id", u.getUnitId(),
|
|
|
|
|
- "description", u.getDescription(),
|
|
|
|
|
- "fromTime", u.getFromTime().format(ISO_OFFSET_DATE_TIME),
|
|
|
|
|
- "toTime", u.getToTime().format(ISO_OFFSET_DATE_TIME)
|
|
|
|
|
- )).collect(toList())
|
|
|
|
|
- ).encode()))
|
|
|
|
|
- .onFailure(th -> rc.fail(400, th));
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void campaignIdUnitsObservationsLocationGET(RoutingContext rc) {
|
|
|
|
|
|
|
+ public void campaignIdUnitsObservationsLocationsGET(RoutingContext rc) {
|
|
|
String host = hostURLFull(rc.request());
|
|
String host = hostURLFull(rc.request());
|
|
|
JsonObject paramsJson = new JsonObject();
|
|
JsonObject paramsJson = new JsonObject();
|
|
|
|
|
|
|
|
- long campaignId = Long.parseLong(rc.pathParam("id"));
|
|
|
|
|
|
|
+ long campaignId = Long.parseLong(rc.pathParam("campaignId"));
|
|
|
List<String> paramFrom = rc.queryParam("from");
|
|
List<String> paramFrom = rc.queryParam("from");
|
|
|
OffsetDateTime from = TernaryCondition.<OffsetDateTime>ternaryIf(paramFrom::isEmpty, () -> null, () -> {
|
|
OffsetDateTime from = TernaryCondition.<OffsetDateTime>ternaryIf(paramFrom::isEmpty, () -> null, () -> {
|
|
|
paramsJson.put("from", paramFrom.get(0));
|
|
paramsJson.put("from", paramFrom.get(0));
|
|
@@ -243,7 +326,7 @@ public class OpenAPIHandler {
|
|
|
List<String> paramNavigationLinks = rc.queryParam("navigationLinks");
|
|
List<String> paramNavigationLinks = rc.queryParam("navigationLinks");
|
|
|
boolean navigationLinks = TernaryCondition.<Boolean>ternaryIf(paramNavigationLinks::isEmpty, true, () -> {
|
|
boolean navigationLinks = TernaryCondition.<Boolean>ternaryIf(paramNavigationLinks::isEmpty, true, () -> {
|
|
|
paramsJson.put("navigationLinks", paramNavigationLinks.get(0));
|
|
paramsJson.put("navigationLinks", paramNavigationLinks.get(0));
|
|
|
- return Boolean.parseBoolean(paramNavigationLinks.get(0));
|
|
|
|
|
|
|
+ return parseBoolean(paramNavigationLinks.get(0));
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
JsonObject navLinks = navigationLinks ? JsonObject.of(
|
|
JsonObject navLinks = navigationLinks ? JsonObject.of(
|
|
@@ -257,7 +340,11 @@ public class OpenAPIHandler {
|
|
|
"data", new JsonArray(locations.stream().map(l -> JsonObject.of(
|
|
"data", new JsonArray(locations.stream().map(l -> JsonObject.of(
|
|
|
"unitId", l.getUnitId(),
|
|
"unitId", l.getUnitId(),
|
|
|
"timestamp", OffsetDateTime.ofInstant(l.getTimestamp().toInstant(), zone).format(ISO_OFFSET_DATE_TIME),
|
|
"timestamp", OffsetDateTime.ofInstant(l.getTimestamp().toInstant(), zone).format(ISO_OFFSET_DATE_TIME),
|
|
|
- "location", floatArrToJson(l.getLocation())
|
|
|
|
|
|
|
+ "location", JsonArray.of(
|
|
|
|
|
+ l.getLocation().getLongitude(),
|
|
|
|
|
+ l.getLocation().getLatitude(),
|
|
|
|
|
+ l.getLocation().getAltitude()
|
|
|
|
|
+ )
|
|
|
)).collect(toList()))
|
|
)).collect(toList()))
|
|
|
)).encode()))
|
|
)).encode()))
|
|
|
.onFailure(th -> rc.fail(400, th));
|
|
.onFailure(th -> rc.fail(400, th));
|
|
@@ -305,7 +392,7 @@ public class OpenAPIHandler {
|
|
|
List<String> paramNavigationLinks = rc.queryParam("navigationLinks");
|
|
List<String> paramNavigationLinks = rc.queryParam("navigationLinks");
|
|
|
boolean navigationLinks = TernaryCondition.<Boolean>ternaryIf(paramNavigationLinks::isEmpty, true, () -> {
|
|
boolean navigationLinks = TernaryCondition.<Boolean>ternaryIf(paramNavigationLinks::isEmpty, true, () -> {
|
|
|
paramsJson.put("navigationLinks", paramNavigationLinks.get(0));
|
|
paramsJson.put("navigationLinks", paramNavigationLinks.get(0));
|
|
|
- return Boolean.parseBoolean(paramNavigationLinks.get(0));
|
|
|
|
|
|
|
+ return parseBoolean(paramNavigationLinks.get(0));
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
JsonObject navLinks = navigationLinks ? JsonObject.of(
|
|
JsonObject navLinks = navigationLinks ? JsonObject.of(
|
|
@@ -334,7 +421,11 @@ public class OpenAPIHandler {
|
|
|
"data", new JsonArray(
|
|
"data", new JsonArray(
|
|
|
paging.data().stream().map(l -> JsonObject.of(
|
|
paging.data().stream().map(l -> JsonObject.of(
|
|
|
"timestamp", OffsetDateTime.ofInstant(l.getTimestamp().toInstant(), zone).format(ISO_OFFSET_DATE_TIME),
|
|
"timestamp", OffsetDateTime.ofInstant(l.getTimestamp().toInstant(), zone).format(ISO_OFFSET_DATE_TIME),
|
|
|
- "location", floatArrToJson(l.getLocation())
|
|
|
|
|
|
|
+ "location", JsonArray.of(
|
|
|
|
|
+ l.getLocation().getLongitude(),
|
|
|
|
|
+ l.getLocation().getLatitude(),
|
|
|
|
|
+ l.getLocation().getAltitude()
|
|
|
|
|
+ )
|
|
|
)).collect(toList()))
|
|
)).collect(toList()))
|
|
|
)).encode()))
|
|
)).encode()))
|
|
|
.onFailure(th -> rc.fail(400, th));
|
|
.onFailure(th -> rc.fail(400, th));
|