mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-13 22:15:26 +00:00
Merge branch 'permission-vertical' of ssh://trac@sapsailing.com/home/trac/git into permission-vertical
This commit is contained in:
commit
1d8cf1faf2
3 files changed
+144
-93
No files matched your search
+56
-48
@@ -8,6 +8,7 @@ import org.json.simple.JSONObject;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.common.security.SecuredDomainType;
|
||||
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.domain.maneuverdetection.impl.ManeuverDetectorImpl;
|
||||
import com.sap.sailing.domain.maneuverdetection.impl.TrackTimeInfo;
|
||||
@@ -19,6 +20,7 @@ import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.impl.MillisecondsDurationImpl;
|
||||
import com.sap.sse.security.SecurityService;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -40,12 +42,13 @@ public class CompetitorTrackWithEstimationDataJsonSerializer extends AbstractTra
|
||||
private final BoatClassJsonSerializer boatClassJsonSerializer;
|
||||
private final CompetitorTrackElementsJsonSerializer elementsJsonSerializer;
|
||||
private final PolarDataService polarDataService;
|
||||
private final SecurityService securityService;
|
||||
private final Integer startBeforeStartLineInSeconds;
|
||||
private final Integer endBeforeStartLineInSeconds;
|
||||
private final Integer startAfterFinishLineInSeconds;
|
||||
private final Integer endAfterFinishLineInSeconds;
|
||||
|
||||
public CompetitorTrackWithEstimationDataJsonSerializer(PolarDataService polarDataService,
|
||||
public CompetitorTrackWithEstimationDataJsonSerializer(PolarDataService polarDataService, SecurityService securityService,
|
||||
BoatClassJsonSerializer boatClassJsonSerializer,
|
||||
CompetitorTrackElementsJsonSerializer elementsJsonSerializer, Integer startBeforeStartLineInSeconds,
|
||||
Integer endBeforeStartLineInSeconds, Integer startAfterFinishLineInSeconds,
|
||||
@@ -57,6 +60,7 @@ public class CompetitorTrackWithEstimationDataJsonSerializer extends AbstractTra
|
||||
this.endBeforeStartLineInSeconds = endBeforeStartLineInSeconds;
|
||||
this.startAfterFinishLineInSeconds = startAfterFinishLineInSeconds;
|
||||
this.endAfterFinishLineInSeconds = endAfterFinishLineInSeconds;
|
||||
this.securityService = securityService;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -65,54 +69,58 @@ public class CompetitorTrackWithEstimationDataJsonSerializer extends AbstractTra
|
||||
JSONArray byCompetitorJson = new JSONArray();
|
||||
result.put(BYCOMPETITOR, byCompetitorJson);
|
||||
for (Competitor competitor : trackedRace.getRace().getCompetitors()) {
|
||||
ManeuverDetectorImpl maneuverDetector = new ManeuverDetectorImpl(trackedRace, competitor);
|
||||
TrackTimeInfo trackTimeInfo = maneuverDetector.getTrackTimeInfo();
|
||||
if (trackTimeInfo != null) {
|
||||
TimePoint from = null;
|
||||
TimePoint to = null;
|
||||
if (startBeforeStartLineInSeconds != null) {
|
||||
from = trackTimeInfo.getTrackStartTimePoint()
|
||||
.minus(new MillisecondsDurationImpl(startBeforeStartLineInSeconds * 1000L));
|
||||
} else if (startAfterFinishLineInSeconds != null) {
|
||||
from = trackTimeInfo.getTrackEndTimePoint()
|
||||
.plus(new MillisecondsDurationImpl(startAfterFinishLineInSeconds * 1000L));
|
||||
} else {
|
||||
from = trackTimeInfo.getTrackStartTimePoint();
|
||||
if (securityService.hasCurrentUserExplictPermissions(competitor,
|
||||
SecuredDomainType.CompetitorAndBoatActions.LIST)) {
|
||||
ManeuverDetectorImpl maneuverDetector = new ManeuverDetectorImpl(trackedRace, competitor);
|
||||
TrackTimeInfo trackTimeInfo = maneuverDetector.getTrackTimeInfo();
|
||||
if (trackTimeInfo != null) {
|
||||
TimePoint from = null;
|
||||
TimePoint to = null;
|
||||
if (startBeforeStartLineInSeconds != null) {
|
||||
from = trackTimeInfo.getTrackStartTimePoint()
|
||||
.minus(new MillisecondsDurationImpl(startBeforeStartLineInSeconds * 1000L));
|
||||
} else if (startAfterFinishLineInSeconds != null) {
|
||||
from = trackTimeInfo.getTrackEndTimePoint()
|
||||
.plus(new MillisecondsDurationImpl(startAfterFinishLineInSeconds * 1000L));
|
||||
} else {
|
||||
from = trackTimeInfo.getTrackStartTimePoint();
|
||||
}
|
||||
if (endAfterFinishLineInSeconds != null) {
|
||||
to = trackTimeInfo.getTrackEndTimePoint()
|
||||
.plus(new MillisecondsDurationImpl(endAfterFinishLineInSeconds * 1000L));
|
||||
} else if (endBeforeStartLineInSeconds != null) {
|
||||
to = trackTimeInfo.getTrackStartTimePoint()
|
||||
.minus(new MillisecondsDurationImpl(endBeforeStartLineInSeconds * 1000L));
|
||||
} else {
|
||||
to = trackTimeInfo.getTrackEndTimePoint();
|
||||
}
|
||||
final JSONObject forCompetitorJson = new JSONObject();
|
||||
byCompetitorJson.add(forCompetitorJson);
|
||||
forCompetitorJson.put(COMPETITOR_NAME, competitor.getName());
|
||||
forCompetitorJson.put(BOAT_CLASS, boatClassJsonSerializer
|
||||
.serialize(trackedRace.getRace().getBoatOfCompetitor(competitor).getBoatClass()));
|
||||
forCompetitorJson.put(FIXES_COUNT_FOR_POLARS, getFixesCountForPolars(trackedRace, competitor));
|
||||
Duration averageIntervalBetweenFixes = trackedRace.getTrack(competitor)
|
||||
.getAverageIntervalBetweenFixes();
|
||||
forCompetitorJson.put(AVG_INTERVAL_BETWEEN_FIXES_IN_SECONDS,
|
||||
averageIntervalBetweenFixes == null ? 0 : averageIntervalBetweenFixes.asSeconds());
|
||||
GPSFixTrack<Competitor, GPSFixMoving> track = trackedRace.getTrack(competitor);
|
||||
Double distanceTravelledInMeters = null;
|
||||
if (trackTimeInfo.getTrackStartTimePoint() != null
|
||||
&& trackTimeInfo.getTrackEndTimePoint() != null) {
|
||||
distanceTravelledInMeters = track.getDistanceTraveled(trackTimeInfo.getTrackStartTimePoint(),
|
||||
trackTimeInfo.getTrackEndTimePoint()).getMeters();
|
||||
}
|
||||
forCompetitorJson.put(DISTANCE_TRAVELLED_IN_METERS, distanceTravelledInMeters);
|
||||
forCompetitorJson.put(START_TIME_POINT, trackTimeInfo.getTrackStartTimePoint() == null ? null
|
||||
: trackTimeInfo.getTrackStartTimePoint().asMillis());
|
||||
forCompetitorJson.put(END_TIME_POINT, trackTimeInfo.getTrackEndTimePoint() == null ? null
|
||||
: trackTimeInfo.getTrackEndTimePoint().asMillis());
|
||||
forCompetitorJson.put(MARK_PASSINGS_COUNT, getMarkPassingsCount(trackedRace, competitor));
|
||||
forCompetitorJson.put(WAYPOINTS_COUNT, getWaypointsCount(trackedRace));
|
||||
forCompetitorJson.put(ELEMENTS,
|
||||
elementsJsonSerializer.serialize(trackedRace, competitor, from, to, trackTimeInfo));
|
||||
}
|
||||
if (endAfterFinishLineInSeconds != null) {
|
||||
to = trackTimeInfo.getTrackEndTimePoint()
|
||||
.plus(new MillisecondsDurationImpl(endAfterFinishLineInSeconds * 1000L));
|
||||
} else if (endBeforeStartLineInSeconds != null) {
|
||||
to = trackTimeInfo.getTrackStartTimePoint()
|
||||
.minus(new MillisecondsDurationImpl(endBeforeStartLineInSeconds * 1000L));
|
||||
} else {
|
||||
to = trackTimeInfo.getTrackEndTimePoint();
|
||||
}
|
||||
final JSONObject forCompetitorJson = new JSONObject();
|
||||
byCompetitorJson.add(forCompetitorJson);
|
||||
forCompetitorJson.put(COMPETITOR_NAME, competitor.getName());
|
||||
forCompetitorJson.put(BOAT_CLASS, boatClassJsonSerializer
|
||||
.serialize(trackedRace.getRace().getBoatOfCompetitor(competitor).getBoatClass()));
|
||||
forCompetitorJson.put(FIXES_COUNT_FOR_POLARS, getFixesCountForPolars(trackedRace, competitor));
|
||||
Duration averageIntervalBetweenFixes = trackedRace.getTrack(competitor)
|
||||
.getAverageIntervalBetweenFixes();
|
||||
forCompetitorJson.put(AVG_INTERVAL_BETWEEN_FIXES_IN_SECONDS,
|
||||
averageIntervalBetweenFixes == null ? 0 : averageIntervalBetweenFixes.asSeconds());
|
||||
GPSFixTrack<Competitor, GPSFixMoving> track = trackedRace.getTrack(competitor);
|
||||
Double distanceTravelledInMeters = null;
|
||||
if (trackTimeInfo.getTrackStartTimePoint() != null && trackTimeInfo.getTrackEndTimePoint() != null) {
|
||||
distanceTravelledInMeters = track.getDistanceTraveled(trackTimeInfo.getTrackStartTimePoint(),
|
||||
trackTimeInfo.getTrackEndTimePoint()).getMeters();
|
||||
}
|
||||
forCompetitorJson.put(DISTANCE_TRAVELLED_IN_METERS, distanceTravelledInMeters);
|
||||
forCompetitorJson.put(START_TIME_POINT, trackTimeInfo.getTrackStartTimePoint() == null ? null
|
||||
: trackTimeInfo.getTrackStartTimePoint().asMillis());
|
||||
forCompetitorJson.put(END_TIME_POINT, trackTimeInfo.getTrackEndTimePoint() == null ? null
|
||||
: trackTimeInfo.getTrackEndTimePoint().asMillis());
|
||||
forCompetitorJson.put(MARK_PASSINGS_COUNT, getMarkPassingsCount(trackedRace, competitor));
|
||||
forCompetitorJson.put(WAYPOINTS_COUNT, getWaypointsCount(trackedRace));
|
||||
forCompetitorJson.put(ELEMENTS,
|
||||
elementsJsonSerializer.serialize(trackedRace, competitor, from, to, trackTimeInfo));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
+12
-5
@@ -9,21 +9,25 @@ import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.impl.DynamicBoat;
|
||||
import com.sap.sailing.domain.common.security.SecuredDomainType;
|
||||
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.security.SecurityService;
|
||||
|
||||
public class RaceEntriesJsonSerializer implements JsonSerializer<RaceDefinition> {
|
||||
public static final String FIELD_NAME = "name";
|
||||
public static final String FIELD_COMPETITORS = "competitors";
|
||||
|
||||
private final CompetitorAndBoatJsonSerializer competitorAndBoatSerializer;
|
||||
private final SecurityService securityService;
|
||||
|
||||
public RaceEntriesJsonSerializer() {
|
||||
this(null);
|
||||
public RaceEntriesJsonSerializer(final SecurityService securityService) {
|
||||
this(null, securityService);
|
||||
}
|
||||
|
||||
public RaceEntriesJsonSerializer(CompetitorAndBoatJsonSerializer competitorAndBoatSerializer) {
|
||||
public RaceEntriesJsonSerializer(CompetitorAndBoatJsonSerializer competitorAndBoatSerializer, final SecurityService securityService) {
|
||||
this.competitorAndBoatSerializer = competitorAndBoatSerializer;
|
||||
this.securityService = securityService;
|
||||
}
|
||||
|
||||
public JSONObject serialize(RaceDefinition race) {
|
||||
@@ -32,8 +36,11 @@ public class RaceEntriesJsonSerializer implements JsonSerializer<RaceDefinition>
|
||||
if(competitorAndBoatSerializer != null) {
|
||||
JSONArray competitorsJson = new JSONArray();
|
||||
for (Entry<Competitor, Boat> competitorAndBoatEntry: race.getCompetitorsAndTheirBoats().entrySet()) {
|
||||
competitorsJson.add(competitorAndBoatSerializer.serialize(new Pair<>(competitorAndBoatEntry.getKey(),
|
||||
(DynamicBoat) competitorAndBoatEntry.getValue())));
|
||||
Competitor competitor = competitorAndBoatEntry.getKey();
|
||||
competitor = (securityService.hasCurrentUserExplictPermissions(competitor, SecuredDomainType.CompetitorAndBoatActions.LIST)) ? competitor : null;
|
||||
DynamicBoat boat = (DynamicBoat) competitorAndBoatEntry.getValue();
|
||||
boat = (securityService.hasCurrentUserExplictPermissions(boat, SecuredDomainType.CompetitorAndBoatActions.LIST)) ? boat : null;
|
||||
competitorsJson.add(competitorAndBoatSerializer.serialize(new Pair<>(competitor, boat)));
|
||||
}
|
||||
result.put(FIELD_COMPETITORS, competitorsJson);
|
||||
}
|
||||
|
||||
+76
-40
@@ -302,7 +302,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
response = getBadRaceErrorResponse(regattaName, raceName);
|
||||
} else {
|
||||
CompetitorAndBoatJsonSerializer competitorAndBoatJsonSerializer = CompetitorAndBoatJsonSerializer.create();
|
||||
JsonSerializer<RaceDefinition> raceEntriesSerializer = new RaceEntriesJsonSerializer(competitorAndBoatJsonSerializer);
|
||||
JsonSerializer<RaceDefinition> raceEntriesSerializer = new RaceEntriesJsonSerializer(competitorAndBoatJsonSerializer, getSecurityService());
|
||||
JSONObject serializedRaceEntries = raceEntriesSerializer.serialize(race);
|
||||
String json = serializedRaceEntries.toJSONString();
|
||||
response = Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
|
||||
@@ -358,6 +358,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (competitor == null) {
|
||||
response = getBadCompetitorIdResponse(competitorId);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserExplicitPermissions(competitor, SecuredDomainType.CompetitorAndBoatActions.LIST, SecuredDomainType.CompetitorAndBoatActions.READ_PUBLIC);
|
||||
regatta.registerCompetitor(competitor);
|
||||
response = Response.ok().build();
|
||||
}
|
||||
@@ -597,6 +598,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (boat == null) {
|
||||
response = Response.status(Status.NOT_FOUND).entity("Boat is not valid").type(MediaType.TEXT_PLAIN).build();
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserExplicitPermissions(boat, SecuredDomainType.CompetitorAndBoatActions.LIST, SecuredDomainType.CompetitorAndBoatActions.READ_PUBLIC);
|
||||
response = createAndAddCompetitor(regattaName, nationalityThreeLetterIOCCode, displayColor,
|
||||
timeOnTimeFactor, timeOnDistanceAllowancePerNauticalMileAsMillis, searchTag, competitorName,
|
||||
competitorShortName, competitorEmail, flagImageURI, teamImageURI, t -> boat, deviceUuid,
|
||||
@@ -651,6 +653,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (competitor == null) {
|
||||
response = getBadCompetitorIdResponse(competitorId);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserExplicitPermissions(competitor, SecuredDomainType.CompetitorAndBoatActions.LIST);
|
||||
regatta.deregisterCompetitor(competitor);
|
||||
response = Response.ok().build();
|
||||
}
|
||||
@@ -838,6 +841,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
return getBadRegattaErrorResponse(regattaName);
|
||||
}
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
@@ -958,6 +962,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = getBadRaceErrorResponse(regattaName, raceName);
|
||||
@@ -997,6 +1002,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = getBadRaceErrorResponse(regattaName, raceName);
|
||||
@@ -1038,6 +1044,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = getBadRaceErrorResponse(regattaName, raceName);
|
||||
@@ -1141,6 +1148,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
.entity("Could not find a regatta with name '" + StringEscapeUtils.escapeHtml(regattaName) + "'.").type(MediaType.TEXT_PLAIN)
|
||||
.build();
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = Response.status(Status.NOT_FOUND)
|
||||
@@ -1175,47 +1183,55 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
Regatta regatta = findRegattaByName(regattaName);
|
||||
if (regatta == null) {
|
||||
response = Response.status(Status.NOT_FOUND)
|
||||
.entity("Could not find a regatta with name '" + StringEscapeUtils.escapeHtml(regattaName) + "'.").type(MediaType.TEXT_PLAIN)
|
||||
.build();
|
||||
} else if (!((fromtime != null && totime != null) || (fromtimeasmillis != null && totimeasmillis != null))) {
|
||||
response = Response.status(Status.NOT_FOUND)
|
||||
.entity("Either the 'fromtime' and 'totime' or the 'fromtimeasmillis' and 'totimeasmillis' parameter must be set.").type(MediaType.TEXT_PLAIN)
|
||||
.build();
|
||||
.entity("Could not find a regatta with name '" + StringEscapeUtils.escapeHtml(regattaName) + "'.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
} else {
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = Response.status(Status.NOT_FOUND)
|
||||
.entity("Could not find a race with name '" + StringEscapeUtils.escapeHtml(raceName) + "'.").type(MediaType.TEXT_PLAIN)
|
||||
.build();
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
if (!((fromtime != null && totime != null) || (fromtimeasmillis != null && totimeasmillis != null))) {
|
||||
|
||||
response = Response.status(Status.NOT_FOUND).entity(
|
||||
"Either the 'fromtime' and 'totime' or the 'fromtimeasmillis' and 'totimeasmillis' parameter must be set.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
} else {
|
||||
TrackedRace trackedRace = findTrackedRace(regattaName, raceName);
|
||||
|
||||
TimePoint from;
|
||||
TimePoint to;
|
||||
try {
|
||||
from = parseTimePoint(fromtime, fromtimeasmillis,
|
||||
trackedRace.getStartOfRace() == null ? new MillisecondsTimePoint(0) :
|
||||
/* 24h before race start */new MillisecondsTimePoint(trackedRace.getStartOfRace()
|
||||
.asMillis() - 24 * 3600 * 1000));
|
||||
} catch (InvalidDateException e1) {
|
||||
return Response.status(Status.INTERNAL_SERVER_ERROR).entity("Could not parse the 'from' time.")
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = Response.status(Status.NOT_FOUND)
|
||||
.entity("Could not find a race with name '" + StringEscapeUtils.escapeHtml(raceName) + "'.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
try {
|
||||
to = parseTimePoint(totime, totimeasmillis, MillisecondsTimePoint.now());
|
||||
} catch (InvalidDateException e1) {
|
||||
return Response.status(Status.INTERNAL_SERVER_ERROR).entity("Could not parse the 'to' time.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
// Crop request interval to startOfTracking / [endOfTracking|timePointOfLastEvent]
|
||||
final TimePoint finalFrom = Util.getLatestOfTimePoints(from, trackedRace.getStartOfTracking());
|
||||
final TimePoint finalTo = Util.getEarliestOfTimePoints(to, Util.getEarliestOfTimePoints(trackedRace.getEndOfTracking(), trackedRace.getTimePointOfNewestEvent()));
|
||||
TrackedRaceJsonSerializer serializer = new TrackedRaceJsonSerializer(
|
||||
ws->new DefaultWindTrackJsonSerializer(/* maxNumberOfFixes */ 10000, finalFrom, finalTo, ws), windSource, windSourceId);
|
||||
} else {
|
||||
TrackedRace trackedRace = findTrackedRace(regattaName, raceName);
|
||||
|
||||
JSONObject jsonWindTracks = serializer.serialize(trackedRace);
|
||||
String json = jsonWindTracks.toJSONString();
|
||||
return Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
|
||||
TimePoint from;
|
||||
TimePoint to;
|
||||
try {
|
||||
from = parseTimePoint(fromtime, fromtimeasmillis,
|
||||
trackedRace.getStartOfRace() == null ? new MillisecondsTimePoint(0) :
|
||||
/* 24h before race start */new MillisecondsTimePoint(
|
||||
trackedRace.getStartOfRace().asMillis() - 24 * 3600 * 1000));
|
||||
} catch (InvalidDateException e1) {
|
||||
return Response.status(Status.INTERNAL_SERVER_ERROR).entity("Could not parse the 'from' time.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
try {
|
||||
to = parseTimePoint(totime, totimeasmillis, MillisecondsTimePoint.now());
|
||||
} catch (InvalidDateException e1) {
|
||||
return Response.status(Status.INTERNAL_SERVER_ERROR).entity("Could not parse the 'to' time.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
// Crop request interval to startOfTracking / [endOfTracking|timePointOfLastEvent]
|
||||
final TimePoint finalFrom = Util.getLatestOfTimePoints(from, trackedRace.getStartOfTracking());
|
||||
final TimePoint finalTo = Util.getEarliestOfTimePoints(to, Util.getEarliestOfTimePoints(
|
||||
trackedRace.getEndOfTracking(), trackedRace.getTimePointOfNewestEvent()));
|
||||
TrackedRaceJsonSerializer serializer = new TrackedRaceJsonSerializer(
|
||||
ws -> new DefaultWindTrackJsonSerializer(/* maxNumberOfFixes */ 10000, finalFrom, finalTo,
|
||||
ws),
|
||||
windSource, windSourceId);
|
||||
|
||||
JSONObject jsonWindTracks = serializer.serialize(trackedRace);
|
||||
String json = jsonWindTracks.toJSONString();
|
||||
return Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
return response;
|
||||
@@ -1234,6 +1250,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
.entity("Could not find a regatta with name '" + StringEscapeUtils.escapeHtml(regattaName) + "'.").type(MediaType.TEXT_PLAIN)
|
||||
.build();
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = Response.status(Status.NOT_FOUND)
|
||||
@@ -1274,6 +1291,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
.entity("Could not find a regatta with name '" + StringEscapeUtils.escapeHtml(regattaName) + "'.").type(MediaType.TEXT_PLAIN)
|
||||
.build();
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = Response.status(Status.NOT_FOUND)
|
||||
@@ -1318,6 +1336,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
.entity("Could not find a regatta with name '" + StringEscapeUtils.escapeHtml(regattaName) + "'.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = Response.status(Status.NOT_FOUND)
|
||||
@@ -1388,6 +1407,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
.entity("Could not find a regatta with name '" + StringEscapeUtils.escapeHtml(regattaName) + "'.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = Response.status(Status.NOT_FOUND)
|
||||
@@ -1396,7 +1416,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
} else {
|
||||
TrackedRace trackedRace = findTrackedRace(regattaName, raceName);
|
||||
CompetitorTrackWithEstimationDataJsonSerializer serializer = new CompetitorTrackWithEstimationDataJsonSerializer(
|
||||
getService().getPolarDataService(), new DetailedBoatClassJsonSerializer(),
|
||||
getService().getPolarDataService(), getSecurityService(), new DetailedBoatClassJsonSerializer(),
|
||||
new CompleteManeuverCurvesWithEstimationDataJsonSerializer(getService().getPolarDataService(),
|
||||
new CompleteManeuverCurveWithEstimationDataJsonSerializer(
|
||||
new ManeuverMainCurveWithEstimationDataJsonSerializer(),
|
||||
@@ -1436,6 +1456,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
.entity("Could not find a regatta with name '" + StringEscapeUtils.escapeHtml(regattaName) + "'.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = Response.status(Status.NOT_FOUND)
|
||||
@@ -1444,7 +1465,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
} else {
|
||||
TrackedRace trackedRace = findTrackedRace(regattaName, raceName);
|
||||
CompetitorTrackWithEstimationDataJsonSerializer serializer = new CompetitorTrackWithEstimationDataJsonSerializer(
|
||||
getService().getPolarDataService(), new DetailedBoatClassJsonSerializer(),
|
||||
getService().getPolarDataService(), getSecurityService(), new DetailedBoatClassJsonSerializer(),
|
||||
new GpsFixesWithEstimationDataJsonSerializer(new GPSFixMovingJsonSerializer(),
|
||||
new ManeuverWindJsonSerializer(), addWind, addNextWaypoint, smoothFixes),
|
||||
getNullableValueFromDefault(startBeforeStartLineInSeconds),
|
||||
@@ -1474,6 +1495,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
.entity("Could not find a regatta with name '" + StringEscapeUtils.escapeHtml(regattaName) + "'.").type(MediaType.TEXT_PLAIN)
|
||||
.build();
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
JSONObject jsonRaceResults = new JSONObject();
|
||||
jsonRaceResults.put("regatta", regatta.getName());
|
||||
JSONArray jsonRaces = new JSONArray();
|
||||
@@ -1502,6 +1524,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
.entity("Could not find a regatta with name '" + StringEscapeUtils.escapeHtml(regattaName) + "'.").type(MediaType.TEXT_PLAIN)
|
||||
.build();
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = Response.status(Status.NOT_FOUND)
|
||||
@@ -1669,6 +1692,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
.entity("Could not find a regatta with name '" + StringEscapeUtils.escapeHtml(regattaName) + "'.").type(MediaType.TEXT_PLAIN)
|
||||
.build();
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = Response.status(Status.NOT_FOUND)
|
||||
@@ -1809,6 +1833,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
response = getDataMiningResource().avgSpeedPerCompetitorAndLegType(regattaName);
|
||||
}
|
||||
return response;
|
||||
@@ -1824,6 +1849,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = getBadRaceErrorResponse(regattaName, raceName);
|
||||
@@ -1844,6 +1870,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
response = getDataMiningResource().sumDistanceTraveledPerCompetitorAndLegType(regattaName);
|
||||
}
|
||||
return response;
|
||||
@@ -1859,6 +1886,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = getBadRaceErrorResponse(regattaName, raceName);
|
||||
@@ -1879,6 +1907,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
response = getDataMiningResource().sumManeuversPerCompetitor(regattaName);
|
||||
}
|
||||
return response;
|
||||
@@ -1894,6 +1923,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = getBadRaceErrorResponse(regattaName, raceName);
|
||||
@@ -1914,6 +1944,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
response = getDataMiningResource().avgSpeedPerCompetitor(regattaName);
|
||||
}
|
||||
return response;
|
||||
@@ -1928,6 +1959,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = getBadRaceErrorResponse(regattaName, raceName);
|
||||
@@ -1947,6 +1979,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
response = getDataMiningResource().sumDistanceTraveledPerCompetitor(regattaName);
|
||||
}
|
||||
return response;
|
||||
@@ -1961,6 +1994,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
RaceDefinition race = findRaceByName(regatta, raceName);
|
||||
if (race == null) {
|
||||
response = getBadRaceErrorResponse(regattaName, raceName);
|
||||
@@ -1982,6 +2016,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
final JSONArray jsonResponse = new JSONArray();
|
||||
final Series series = getSeriesUsingLastAsDefault(regatta, toSeries);
|
||||
if (series == null) {
|
||||
@@ -2015,6 +2050,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (regatta == null) {
|
||||
response = getBadRegattaErrorResponse(regattaName);
|
||||
} else {
|
||||
getSecurityService().checkCurrentUserReadPermission(regatta);
|
||||
boolean found = false;
|
||||
for (final Series series : regatta.getSeries()) {
|
||||
if (series.getRaceColumnByName(raceColumnName) != null) {
|
||||
|
||||
Reference in new issue
Block a user