Initial implementation to calculate the regatta progress for the regatta

list
This commit is contained in:
Steffen Schaefer committed 2015-07-07 13:50:35 +02:00
1 parent 4a2abd031e
commit a54ab2c620
5 files changed
+110 -5

No files matched your search

@@ -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()));
@@ -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;
}
}
@@ -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);
}
@@ -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;
}
}
@@ -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;
}
}