mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-14 22:43:57 +00:00
Bug 5101: Added an API to get the device statuses associated to a
regatta
This commit is contained in:
1 parent
dbaccd2c67
commit
2af26765cf
1 file changed
+50
+50
@@ -17,6 +17,7 @@ import java.util.concurrent.Callable;
|
||||
import java.util.function.Function;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.DefaultValue;
|
||||
@@ -46,6 +47,8 @@ import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompetitorMappingEvent;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMappingEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogDeviceCompetitorMappingEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.tracking.analyzing.impl.RegattaLogDeviceMappingFinder;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorWithBoat;
|
||||
import com.sap.sailing.domain.base.Course;
|
||||
@@ -77,6 +80,7 @@ import com.sap.sailing.domain.common.tracking.GPSFix;
|
||||
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.polars.NotEnoughDataHasBeenAddedException;
|
||||
import com.sap.sailing.domain.racelogtracking.DeviceMappingWithRegattaLogEvent;
|
||||
import com.sap.sailing.domain.racelogtracking.impl.SmartphoneUUIDIdentifierImpl;
|
||||
import com.sap.sailing.domain.ranking.RankingMetric.RankingInfo;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
@@ -107,6 +111,7 @@ import com.sap.sailing.server.gateway.serialization.impl.CompleteManeuverCurveWi
|
||||
import com.sap.sailing.server.gateway.serialization.impl.CompleteManeuverCurvesWithEstimationDataJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.DefaultWindTrackJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.DetailedBoatClassJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.DeviceIdentifierJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.DistanceJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.FleetJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.GPSFixJsonSerializer;
|
||||
@@ -129,6 +134,7 @@ import com.sap.sailing.server.gateway.serialization.impl.TargetTimeInfoSerialize
|
||||
import com.sap.sailing.server.gateway.serialization.impl.TeamJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.TrackedRaceJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.WindJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
|
||||
import com.sap.sailing.server.operationaltransformation.AddColumnToSeries;
|
||||
import com.sap.sailing.server.operationaltransformation.UpdateSeries;
|
||||
import com.sap.sse.InvalidDateException;
|
||||
@@ -139,6 +145,7 @@ import com.sap.sse.common.Speed;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.WithID;
|
||||
import com.sap.sse.common.impl.MillisecondsDurationImpl;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
import com.sap.sse.common.impl.RGBColor;
|
||||
@@ -2277,4 +2284,47 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
}
|
||||
return Response.ok().header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
|
||||
}
|
||||
|
||||
@GET
|
||||
@Produces("application/json;charset=UTF-8")
|
||||
@Path("{regattaname}/tracking_devices")
|
||||
public Response getTrackingStatus(@PathParam("regattaName") String regattaName) {
|
||||
Regatta regatta = getService().getRegattaByName(regattaName);
|
||||
if (regatta != null) {
|
||||
// Deeper insights to tracking data is only available to users who can administer a regatta
|
||||
SecurityUtils.getSubject().checkPermission(regatta.getIdentifier().getStringPermission(DefaultActions.UPDATE));
|
||||
|
||||
TrackingDeviceStatusSerializer serializer = new TrackingDeviceStatusSerializer(new DeviceIdentifierJsonSerializer(
|
||||
getServiceFinderFactory().createServiceFinder(DeviceIdentifierJsonHandler.class)));
|
||||
|
||||
RegattaLogDeviceMappingFinder<WithID> regattaLogDeviceMappingFinder = new RegattaLogDeviceMappingFinder<WithID>(regatta.getRegattaLog());
|
||||
Map<WithID, List<DeviceMappingWithRegattaLogEvent<WithID>>> foundMappings = regattaLogDeviceMappingFinder.analyze();
|
||||
|
||||
JSONObject result = new JSONObject();
|
||||
foundMappings.forEach((item, mappings) -> {
|
||||
JSONArray deviceStatusesOfTrackedItem = new JSONArray();
|
||||
mappings.stream().map(DeviceMappingWithRegattaLogEvent<WithID>::getDevice).collect(Collectors.toSet())
|
||||
.forEach(deviceIdentifier -> {
|
||||
deviceStatusesOfTrackedItem.add(serializer.serialize(
|
||||
TrackingDeviceStatus.calculateDeviceStatus(deviceIdentifier, getService())));
|
||||
});
|
||||
JSONObject itemObject = new JSONObject();
|
||||
itemObject.put("deviceStatuses", deviceStatusesOfTrackedItem);
|
||||
if (item instanceof Competitor) {
|
||||
itemObject.put("competitorId", item.getId().toString());
|
||||
((JSONArray) result.computeIfAbsent("competitors", k -> new JSONArray())).add(itemObject);
|
||||
} else if (item instanceof Boat) {
|
||||
itemObject.put("boatId", item.getId().toString());
|
||||
((JSONArray) result.computeIfAbsent("boats", k -> new JSONArray())).add(itemObject);
|
||||
} else if (item instanceof Mark) {
|
||||
itemObject.put("markId", item.getId().toString());
|
||||
((JSONArray) result.computeIfAbsent("marks", k -> new JSONArray())).add(itemObject);
|
||||
}
|
||||
});
|
||||
return Response.ok(result.toJSONString()).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8")
|
||||
.build();
|
||||
} else {
|
||||
throw new IllegalStateException("Regatta named " + regattaName + " could not be resolved");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user