mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-27 06:17:27 +00:00
Initial implementation to calculate the regatta progress for the regatta
list
This commit is contained in:
1 parent
4a2abd031e
commit
a54ab2c620
5 files changed
+110
-5
No files matched your search
+5
-5
@@ -57,11 +57,7 @@ public final class EventActionUtil {
|
||||
Event event = context.getRacingEventService().getEvent(eventId);
|
||||
for (LeaderboardGroup lg : event.getLeaderboardGroups()) {
|
||||
for (Leaderboard lb : lg.getLeaderboards()) {
|
||||
for(RaceColumn raceColumn : lb.getRaceColumns()) {
|
||||
for(Fleet fleet : raceColumn.getFleets()) {
|
||||
callback.doForRace(new RaceContext(event, lb, raceColumn, fleet, context.getRacingEventService()));
|
||||
}
|
||||
}
|
||||
forRacesOfLeaderboard(context, event, lb, callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -70,6 +66,10 @@ public final class EventActionUtil {
|
||||
Event event = context.getRacingEventService().getEvent(eventId);
|
||||
// TODO check that the leaderboard is part of the event
|
||||
Leaderboard lb = context.getRacingEventService().getLeaderboardByName(regattaName);
|
||||
forRacesOfLeaderboard(context, event, lb, callback);
|
||||
}
|
||||
|
||||
private static void forRacesOfLeaderboard(DispatchContext context, Event event, Leaderboard lb, RaceCallback callback) {
|
||||
for(RaceColumn raceColumn : lb.getRaceColumns()) {
|
||||
for(Fleet fleet : raceColumn.getFleets()) {
|
||||
callback.doForRace(new RaceContext(event, lb, raceColumn, fleet, context.getRacingEventService()));
|
||||
|
||||
+24
@@ -18,6 +18,7 @@ import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.base.RaceColumnInSeries;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.common.LeaderboardNameConstants;
|
||||
@@ -105,6 +106,10 @@ public class RaceContext {
|
||||
if (!isShowFleetData()) {
|
||||
return null;
|
||||
}
|
||||
return getFleetMetadata();
|
||||
}
|
||||
|
||||
public FleetMetadataDTO getFleetMetadata() {
|
||||
return new FleetMetadataDTO(fleet.getName(), fleet.getColor() == null ? null : fleet.getColor().getAsHtml());
|
||||
}
|
||||
|
||||
@@ -448,4 +453,23 @@ public class RaceContext {
|
||||
public RegattaAndRaceIdentifier getRaceIdentifier() {
|
||||
return trackedRace.getRaceIdentifier();
|
||||
}
|
||||
|
||||
public String getSeriesName() {
|
||||
if(raceColumn instanceof RaceColumnInSeries) {
|
||||
return ((RaceColumnInSeries) raceColumn).getSeries().getName();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public String getRaceName() {
|
||||
return raceColumn.getName();
|
||||
}
|
||||
|
||||
public String getFleetName() {
|
||||
return fleet.getName();
|
||||
}
|
||||
|
||||
public boolean isFinished() {
|
||||
return state.getStatus() == RaceLogRaceStatus.FINISHED;
|
||||
}
|
||||
}
|
||||
+3
@@ -7,15 +7,18 @@ import com.sap.sailing.gwt.ui.shared.dispatch.event.EventActionUtil.RaceCallback
|
||||
@GwtIncompatible
|
||||
public class RaceListDataCalculator implements RaceCallback {
|
||||
|
||||
private final RegattaProgressCalculator progressCalculator = new RegattaProgressCalculator();
|
||||
private final RaceListViewDTO result = new RaceListViewDTO();
|
||||
|
||||
@Override
|
||||
public void doForRace(RaceContext context) {
|
||||
progressCalculator.doForRace(context);
|
||||
result.add(context.getLiveRaceOrNull());
|
||||
result.add(context.getFinishedRaceOrNull());
|
||||
}
|
||||
|
||||
public ResultWithTTL<RaceListViewDTO> getResult() {
|
||||
result.setProgress(progressCalculator.getResult());
|
||||
return new ResultWithTTL<>(5000, result);
|
||||
}
|
||||
|
||||
|
||||
+11
@@ -5,6 +5,7 @@ import java.util.Collection;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.DTO;
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.regatta.RegattaProgressDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.race.RaceMetadataDTO;
|
||||
|
||||
public class RaceListViewDTO implements DTO {
|
||||
@@ -13,6 +14,8 @@ public class RaceListViewDTO implements DTO {
|
||||
|
||||
private TreeSet<RaceListRaceDTO> finishedRaces = new TreeSet<>();
|
||||
|
||||
private RegattaProgressDTO progress;
|
||||
|
||||
public void add(LiveRaceDTO liveRace) {
|
||||
add(liveRaces, liveRace);
|
||||
}
|
||||
@@ -44,4 +47,12 @@ public class RaceListViewDTO implements DTO {
|
||||
}
|
||||
return Arrays.asList(withFleets, noFleets);
|
||||
}
|
||||
|
||||
public RegattaProgressDTO getProgress() {
|
||||
return progress;
|
||||
}
|
||||
|
||||
public void setProgress(RegattaProgressDTO progress) {
|
||||
this.progress = progress;
|
||||
}
|
||||
}
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
package com.sap.sailing.gwt.ui.shared.dispatch.event;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.regatta.RegattaProgressDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.dispatch.regatta.RegattaProgressSeriesDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.race.FleetMetadataDTO;
|
||||
|
||||
public class RegattaProgressCalculator implements EventActionUtil.RaceCallback {
|
||||
private final Map<String, Set<String>> racesPerSeries = new LinkedHashMap<>();
|
||||
private final Map<String, Map<String, Set<String>>> racesPerSeriesAndFleet = new HashMap<>();
|
||||
private final Map<String, FleetMetadataDTO> fleets = new HashMap<>();
|
||||
|
||||
@Override
|
||||
public void doForRace(RaceContext context) {
|
||||
String seriesName = context.getSeriesName();
|
||||
|
||||
Set<String> racesInSeries = racesPerSeries.get(seriesName);
|
||||
if(racesInSeries == null) {
|
||||
racesInSeries = new HashSet<>();
|
||||
racesPerSeries.put(seriesName, racesInSeries);
|
||||
}
|
||||
String raceName = context.getRaceName();
|
||||
racesInSeries.add(raceName);
|
||||
|
||||
Map<String, Set<String>> racesInSeriesAndFleet = racesPerSeriesAndFleet.get(seriesName);
|
||||
if(racesInSeriesAndFleet == null) {
|
||||
racesInSeriesAndFleet = new LinkedHashMap<String, Set<String>>();
|
||||
racesPerSeriesAndFleet.put(seriesName, racesInSeriesAndFleet);
|
||||
}
|
||||
String fleetName = context.getFleetName();
|
||||
Set<String> racesInFleet = racesInSeriesAndFleet.get(fleetName);
|
||||
if(racesInFleet == null) {
|
||||
racesInFleet = new HashSet<>();
|
||||
racesInSeriesAndFleet.put(fleetName, racesInFleet);
|
||||
}
|
||||
if(context.isFinished()) {
|
||||
racesInFleet.add(raceName);
|
||||
}
|
||||
|
||||
if(!fleets.containsKey(fleetName)) {
|
||||
fleets.put(fleetName, context.getFleetMetadata());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public RegattaProgressDTO getResult() {
|
||||
RegattaProgressDTO progress = new RegattaProgressDTO();
|
||||
for(Map.Entry<String, Set<String>> racesInSeries : racesPerSeries.entrySet()) {
|
||||
String seriesName = racesInSeries.getKey();
|
||||
int totalRaceCount = racesInSeries.getValue().size();
|
||||
RegattaProgressSeriesDTO regattaProgressOfSeries = new RegattaProgressSeriesDTO(seriesName, totalRaceCount);
|
||||
for(Map.Entry<String, Set<String>> racesInFleet : racesPerSeriesAndFleet.get(seriesName).entrySet()) {
|
||||
String fleetName = racesInFleet.getKey();
|
||||
int finishedRacesForFleet = racesInFleet.getValue().size();
|
||||
regattaProgressOfSeries.addFleet(fleets.get(fleetName), finishedRacesForFleet);
|
||||
}
|
||||
progress.addSeries(regattaProgressOfSeries);
|
||||
}
|
||||
return progress;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user