Get marks from RegattaLog instead of from trackedRace/RaceLog

This commit is contained in:
Jan Broß committed 2015-10-30 13:44:14 +01:00
1 parent 4d7eed5032
commit 36e2908adc
2 files changed
+17 -33

No files matched your search

@@ -579,7 +579,7 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
ArrayList<LeaderboardGroupDTO> getLeaderboardGroupsByEventId(UUID id);
Iterable<MarkDTO> getMarksInRegattaLog(String leaderboardName);
Iterable<MarkDTO> getMarksInRegattaLog(String leaderboardName) throws DoesNotHaveRegattaLogException;
List<DeviceMappingDTO> getDeviceMappingsFromLogHierarchy(String leaderboardName) throws TransformationException;
@@ -4963,14 +4963,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
/**
* Also finds the last position of the marks, if set by pinging them
*/
private Collection<MarkDTO> convertToMarkDTOs(LeaderboardThatHasRegattaLike leaderboard, RaceLog raceLog, Iterable<Mark> marks) {
List<MarkDTO> dtos = new ArrayList<MarkDTO>();
private MarkDTO convertToMarkDTO(LeaderboardThatHasRegattaLike leaderboard, Mark mark) {
final TimePoint now = MillisecondsTimePoint.now();
for (Mark mark : marks) {
final Position lastPos = getService().getMarkPosition(mark, leaderboard, now, raceLog);
dtos.add(convertToMarkDTO(mark, lastPos));
}
return dtos;
final Position lastPos = getService().getMarkPosition(mark, leaderboard, now, null);
return convertToMarkDTO(mark, lastPos);
}
@Override
@@ -5724,38 +5720,26 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
}
/**
* Gets all Marks defined in the RaceLogs of the RaceColumns corresponding to the leaderboard leaderboardName
* Gets all Marks defined in the RegattaLog and the trackedRace
* @throws DoesNotHaveRegattaLogException
*/
@Override
public Iterable<MarkDTO> getMarksInRegattaLog(String leaderboardName) {
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
if (leaderboard == null) {
// TODO: implement proper Exception Handling
return null;
}
if (!(leaderboard instanceof IsRegattaLike)){
return null;
public Iterable<MarkDTO> getMarksInRegattaLog(String leaderboardName) throws DoesNotHaveRegattaLogException {
Leaderboard l = getService().getLeaderboardByName(leaderboardName);
if (! (l instanceof HasRegattaLike)) {
throw new DoesNotHaveRegattaLogException();
}
LeaderboardThatHasRegattaLike leaderboard = (LeaderboardThatHasRegattaLike) l;
RegattaLog regattaLog = ((HasRegattaLike) l).getRegattaLike().getRegattaLog();
Set<MarkDTO> markDTOs = new HashSet<>();
Map<Serializable, Mark> marksById = new HashMap<>();
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
for (Fleet fleet : raceColumn.getFleets()) {
RaceLog raceLog = raceColumn.getRaceLog(fleet);
TrackedRace trackedRace = raceColumn.getTrackedRace(fleet); //might not yet be attached
if (trackedRace != null) {
for (Mark markFromTrackedRace : trackedRace.getMarks()) {
marksById.put(markFromTrackedRace.getId(), markFromTrackedRace);
}
}
Util.addAll(convertToMarkDTOs(
(LeaderboardThatHasRegattaLike) getService().getLeaderboardByName(leaderboardName),
raceLog, marksById.values()), markDTOs);
}
List<RegattaLogEvent> markEvents = new AllEventsOfTypeFinder<>(regattaLog, /* only unrevoked */ true, RegattaLogDefineMarkEvent.class).analyze();
for (RegattaLogEvent regattaLogEvent : markEvents) {
RegattaLogDefineMarkEvent defineMarkEvent = (RegattaLogDefineMarkEvent) regattaLogEvent;
markDTOs.add(convertToMarkDTO(leaderboard, defineMarkEvent.getMark()));
}
return markDTOs;
}