Refactored live race calculation to avoid specific container DTOs

This commit is contained in:
Benjamin Barth committed 2015-07-06 15:39:25 +02:00
1 parent 363bf5f5d7
commit ba6770caea
10 files changed
+42 -55

No files matched your search

@@ -12,10 +12,10 @@ import com.sap.sailing.gwt.home.client.place.event.partials.racelist.RaceListDat
import com.sap.sailing.gwt.home.client.place.event.partials.racelist.SortableRaceListColumn;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.reload.RefreshableWidget;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.dispatch.SortedSetResult;
import com.sap.sailing.gwt.ui.shared.dispatch.event.LiveRaceDTO;
import com.sap.sailing.gwt.ui.shared.dispatch.event.LiveRacesDTO;
public class RacesListLive extends Composite implements RefreshableWidget<LiveRacesDTO> {
public class RacesListLive extends Composite implements RefreshableWidget<SortedSetResult<LiveRaceDTO>> {
private final RaceListLiveRaces raceList;
@@ -26,12 +26,16 @@ public class RacesListLive extends Composite implements RefreshableWidget<LiveRa
}
@Override
public void setData(LiveRacesDTO data, long nextUpdate, int updateNo) {
if(data == null || data.getRaces().isEmpty()) {
public void setData(SortedSetResult<LiveRaceDTO> data, long nextUpdate, int updateNo) {
this.setListData(data.getValues());
}
public void setListData(Collection<LiveRaceDTO> data) {
if(data == null || data.isEmpty()) {
getElement().getStyle().setDisplay(Display.NONE);
} else {
getElement().getStyle().clearDisplay();
raceList.setListData(data.getRaces());
raceList.setListData(data);
}
}
@@ -106,8 +106,8 @@ public class RegattaRacesTabView extends Composite implements RegattaTabView<Reg
}
@Override
public void onSuccess(ResultWithTTL<RaceListViewDTO> result) {
liveRacesList.setData(result.getDto().getLiveRaces(), 0, 0);
finishedRacesList.setListData(result.getDto().getAllRaces());
liveRacesList.setListData(result.getDto().getLiveRaces());
finishedRacesList.setListData(result.getDto().getFinishedRaces());
// for (RaceListSeriesDTO series : result.getDto().getRacesForCompetitionFormat()) {
// compFormatContainerUi.add(new RegattaCompetitionSeries(currentPresenter, series));
// }
@@ -9,9 +9,10 @@ import com.sap.sailing.domain.base.Event;
import com.sap.sailing.gwt.ui.shared.dispatch.Action;
import com.sap.sailing.gwt.ui.shared.dispatch.DispatchContext;
import com.sap.sailing.gwt.ui.shared.dispatch.ResultWithTTL;
import com.sap.sailing.gwt.ui.shared.dispatch.SortedSetResult;
import com.sap.sailing.gwt.ui.shared.dispatch.event.EventActionUtil.CalculationWithEvent;
public class GetLiveRacesForEventAction implements Action<ResultWithTTL<LiveRacesDTO>> {
public class GetLiveRacesForEventAction implements Action<ResultWithTTL<SortedSetResult<LiveRaceDTO>>> {
private static final Logger logger = Logger.getLogger(GetLiveRacesForEventAction.class.getName());
private UUID eventId;
@@ -25,14 +26,14 @@ public class GetLiveRacesForEventAction implements Action<ResultWithTTL<LiveRace
@Override
@GwtIncompatible
public ResultWithTTL<LiveRacesDTO> execute(final DispatchContext context) {
public ResultWithTTL<SortedSetResult<LiveRaceDTO>> execute(final DispatchContext context) {
long start = System.currentTimeMillis();
ResultWithTTL<LiveRacesDTO> result = EventActionUtil.withLiveRaceOrDefaultSchedule(context, eventId, new CalculationWithEvent<LiveRacesDTO>() {
ResultWithTTL<SortedSetResult<LiveRaceDTO>> result = EventActionUtil.withLiveRaceOrDefaultSchedule(context, eventId, new CalculationWithEvent<SortedSetResult<LiveRaceDTO>>() {
@Override
public ResultWithTTL<LiveRacesDTO> calculateWithEvent(Event event) {
public ResultWithTTL<SortedSetResult<LiveRaceDTO>> calculateWithEvent(Event event) {
LiveRaceCalculator liveRaceCalculator = new LiveRaceCalculator();
EventActionUtil.forRacesOfEvent(context, eventId, liveRaceCalculator);
ResultWithTTL<LiveRacesDTO> result = liveRaceCalculator.getResult();
ResultWithTTL<SortedSetResult<LiveRaceDTO>> result = liveRaceCalculator.getResult();
return result;
}
});
@@ -7,9 +7,10 @@ import com.sap.sailing.domain.base.Event;
import com.sap.sailing.gwt.ui.shared.dispatch.Action;
import com.sap.sailing.gwt.ui.shared.dispatch.DispatchContext;
import com.sap.sailing.gwt.ui.shared.dispatch.ResultWithTTL;
import com.sap.sailing.gwt.ui.shared.dispatch.SortedSetResult;
import com.sap.sailing.gwt.ui.shared.dispatch.event.EventActionUtil.CalculationWithEvent;
public class GetLiveRacesForRegattaAction implements Action<ResultWithTTL<LiveRacesDTO>> {
public class GetLiveRacesForRegattaAction implements Action<ResultWithTTL<SortedSetResult<LiveRaceDTO>>> {
private UUID eventId;
private String regattaName;
@@ -23,10 +24,10 @@ public class GetLiveRacesForRegattaAction implements Action<ResultWithTTL<LiveRa
@Override
@GwtIncompatible
public ResultWithTTL<LiveRacesDTO> execute(final DispatchContext context) {
return EventActionUtil.withLiveRaceOrDefaultSchedule(context, eventId, new CalculationWithEvent<LiveRacesDTO>() {
public ResultWithTTL<SortedSetResult<LiveRaceDTO>> execute(final DispatchContext context) {
return EventActionUtil.withLiveRaceOrDefaultSchedule(context, eventId, new CalculationWithEvent<SortedSetResult<LiveRaceDTO>>() {
@Override
public ResultWithTTL<LiveRacesDTO> calculateWithEvent(Event event) {
public ResultWithTTL<SortedSetResult<LiveRaceDTO>> calculateWithEvent(Event event) {
LiveRaceCalculator liveRaceCalculator = new LiveRaceCalculator();
EventActionUtil.forRacesOfRegatta(context, eventId, regattaName, liveRaceCalculator);
return liveRaceCalculator.getResult();
@@ -1,23 +1,26 @@
package com.sap.sailing.gwt.ui.shared.dispatch.event;
import java.util.TreeSet;
import com.google.gwt.core.shared.GwtIncompatible;
import com.sap.sailing.gwt.ui.shared.dispatch.ResultWithTTL;
import com.sap.sailing.gwt.ui.shared.dispatch.SortedSetResult;
import com.sap.sailing.gwt.ui.shared.dispatch.event.EventActionUtil.RaceCallback;
import com.sap.sailing.gwt.ui.shared.race.RaceMetadataDTO.RaceViewState;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@GwtIncompatible
final class LiveRaceCalculator implements RaceCallback {
private final LiveRacesDTO result = new LiveRacesDTO();
private final TreeSet<LiveRaceDTO> resultSet = new TreeSet<LiveRaceDTO>();
@Override
public void doForRace(RaceContext rc) {
rc.addLiveRace(result);
rc.addLiveRace(resultSet);
}
public ResultWithTTL<LiveRacesDTO> getResult() {
public ResultWithTTL<SortedSetResult<LiveRaceDTO>> getResult() {
long ttl = 1000 * 60 * 2;
for(LiveRaceDTO race : result.getRaces()) {
for(LiveRaceDTO race : resultSet) {
if(race.getViewState() == RaceViewState.RUNNING) {
ttl = Math.min(ttl, 1000 * 30);
} else if(race.getViewState() == RaceViewState.SCHEDULED) {
@@ -27,6 +30,6 @@ final class LiveRaceCalculator implements RaceCallback {
ttl = Math.min(ttl, 1000 * 60);
}
}
return new ResultWithTTL<LiveRacesDTO>(ttl, result);
return new ResultWithTTL<SortedSetResult<LiveRaceDTO>>(ttl, new SortedSetResult<>(resultSet));
}
}
@@ -1,19 +0,0 @@
package com.sap.sailing.gwt.ui.shared.dispatch.event;
import java.util.Collection;
import java.util.TreeSet;
import com.sap.sailing.gwt.ui.shared.dispatch.DTO;
public class LiveRacesDTO implements DTO {
private TreeSet<LiveRaceDTO> races = new TreeSet<>();
public Collection<LiveRaceDTO> getRaces() {
return races;
}
public void addRace(LiveRaceDTO race) {
this.races.add(race);
}
}
@@ -1,5 +1,6 @@
package com.sap.sailing.gwt.ui.shared.dispatch.event;
import java.util.Collection;
import java.util.Date;
import java.util.List;
@@ -275,10 +276,10 @@ public class RaceContext {
return finishTime;
}
public void addLiveRace(LiveRacesDTO result) {
public void addLiveRace(Collection<LiveRaceDTO> result) {
LiveRaceDTO liveRaceDTO = getLiveRaceOrNull();
if(liveRaceDTO != null) {
result.addRace(liveRaceDTO);
result.add(liveRaceDTO);
}
}
@@ -15,7 +15,7 @@ public class RaceListDataCalculator implements RaceCallback {
RaceListRaceDTO finishedRace = context.getFinishedRaceOrNull();
if(finishedRace != null) {
result.addRace(finishedRace);
result.getFinishedRaces().add(finishedRace);
}
}
@@ -8,26 +8,22 @@ import com.sap.sailing.gwt.ui.shared.dispatch.DTO;
public class RaceListViewDTO implements DTO {
private LiveRacesDTO liveRaces = new LiveRacesDTO();
private TreeSet<LiveRaceDTO> liveRaces = new TreeSet<>();
private TreeSet<RaceListRaceDTO> allRaces = new TreeSet<>();
private TreeSet<RaceListRaceDTO> finishedRaces = new TreeSet<>();
public void addRace(RaceListRaceDTO race) {
allRaces.add(race);
}
public LiveRacesDTO getLiveRaces() {
public Collection<LiveRaceDTO> getLiveRaces() {
return liveRaces;
}
public Collection<RaceListRaceDTO> getAllRaces() {
return allRaces;
public Collection<RaceListRaceDTO> getFinishedRaces() {
return finishedRaces;
}
public Collection<RaceListSeriesDTO> getRacesForCompetitionFormat() {
RaceListSeriesDTO withFleets = new RaceListSeriesDTO("Fleets");
RaceListSeriesDTO noFleets = new RaceListSeriesDTO("");
for (RaceListRaceDTO race : allRaces) {
for (RaceListRaceDTO race : finishedRaces) {
RaceListSeriesDTO series = race.getFleet() == null ? noFleets : withFleets;
series.addRace(race);
}
@@ -2,11 +2,11 @@ package com.sap.sailing.gwt.ui.shared.race;
import java.util.Date;
import com.google.gwt.user.client.rpc.IsSerializable;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.dispatch.DTO;
import com.sap.sse.common.Util;
public class RaceMetadataDTO implements IsSerializable, Comparable<RaceMetadataDTO> {
public class RaceMetadataDTO implements DTO, Comparable<RaceMetadataDTO> {
public enum RaceViewState {
PLANNED { // no start time set