mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-25 21:43:49 +00:00
Implemented the competitor/Boat combination stored in TrackedRace domain object as temporary solution
The data is transfered to the UI as part of the RaceMapDataDTO and used in the new CompetitorColorProvider class.
This commit is contained in:
1 parent
e5d94608c0
commit
931e56385d
24 files changed
+229
-32
No files matched your search
+6
-2
@@ -21,6 +21,8 @@ import com.google.gwt.user.client.ui.Widget;
|
|||||||
import com.sap.sailing.dashboards.gwt.client.startanalysis.rankingtable.StartAnalysisStartRankTable;
|
import com.sap.sailing.dashboards.gwt.client.startanalysis.rankingtable.StartAnalysisStartRankTable;
|
||||||
import com.sap.sailing.dashboards.gwt.shared.dto.startanalysis.StartAnalysisDTO;
|
import com.sap.sailing.dashboards.gwt.shared.dto.startanalysis.StartAnalysisDTO;
|
||||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||||
|
import com.sap.sailing.gwt.ui.client.CompetitorColorProvider;
|
||||||
|
import com.sap.sailing.gwt.ui.client.CompetitorColorProviderImpl;
|
||||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
|
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
|
||||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||||
@@ -65,6 +67,7 @@ public class StartlineAnalysisCard extends Composite implements HasWidgets, Star
|
|||||||
private SailingServiceAsync sailingServiceAsync;
|
private SailingServiceAsync sailingServiceAsync;
|
||||||
private StringMessages stringMessages;
|
private StringMessages stringMessages;
|
||||||
private final CompetitorSelectionModel competitorSelectionModel;
|
private final CompetitorSelectionModel competitorSelectionModel;
|
||||||
|
private final CompetitorColorProvider colorProvider;
|
||||||
|
|
||||||
private final double WIND_LINE_ADVANTAGE_DIV_WIDTH_IN_PT = 185;
|
private final double WIND_LINE_ADVANTAGE_DIV_WIDTH_IN_PT = 185;
|
||||||
private final double GEOMETRIC_LINE_ADVANTAGE_DIV_WIDTH_IN_PT = 210;
|
private final double GEOMETRIC_LINE_ADVANTAGE_DIV_WIDTH_IN_PT = 210;
|
||||||
@@ -78,7 +81,8 @@ public class StartlineAnalysisCard extends Composite implements HasWidgets, Star
|
|||||||
stringMessages = StringMessages.INSTANCE;
|
stringMessages = StringMessages.INSTANCE;
|
||||||
resources.combinedWindPanelStyle().ensureInjected();
|
resources.combinedWindPanelStyle().ensureInjected();
|
||||||
this.sailingServiceAsync = sailingServiceAsync;
|
this.sailingServiceAsync = sailingServiceAsync;
|
||||||
competitorSelectionModel = new CompetitorSelectionModel(/* hasMultiSelection */true);
|
colorProvider = new CompetitorColorProviderImpl();
|
||||||
|
competitorSelectionModel = new CompetitorSelectionModel(/* hasMultiSelection */true, colorProvider);
|
||||||
competitorSelectionModel.setCompetitors(startAnalysisDTO.getCompetitorDTOsFromStartAnaylsisCompetitorDTOs(),
|
competitorSelectionModel.setCompetitors(startAnalysisDTO.getCompetitorDTOsFromStartAnaylsisCompetitorDTOs(),
|
||||||
raceMap);
|
raceMap);
|
||||||
initWidget(uiBinder.createAndBindUi(this));
|
initWidget(uiBinder.createAndBindUi(this));
|
||||||
@@ -146,7 +150,7 @@ public class StartlineAnalysisCard extends Composite implements HasWidgets, Star
|
|||||||
AsyncActionsExecutor asyncActionsExecutor = new AsyncActionsExecutor();
|
AsyncActionsExecutor asyncActionsExecutor = new AsyncActionsExecutor();
|
||||||
RaceTimesInfoProvider raceTimesInfoProvider = new RaceTimesInfoProvider(sailingServiceAsync,
|
RaceTimesInfoProvider raceTimesInfoProvider = new RaceTimesInfoProvider(sailingServiceAsync,
|
||||||
asyncActionsExecutor, null, Collections.singletonList(startAnalysisDTO.regattaAndRaceIdentifier), 5000l /* requestInterval */);
|
asyncActionsExecutor, null, Collections.singletonList(startAnalysisDTO.regattaAndRaceIdentifier), 5000l /* requestInterval */);
|
||||||
raceMap = new RaceMap(sailingServiceAsync, asyncActionsExecutor, null, timer, competitorSelectionModel,
|
raceMap = new RaceMap(sailingServiceAsync, asyncActionsExecutor, null, timer, competitorSelectionModel, colorProvider,
|
||||||
StringMessages.INSTANCE, false, false, false, startAnalysisDTO.regattaAndRaceIdentifier,
|
StringMessages.INSTANCE, false, false, false, startAnalysisDTO.regattaAndRaceIdentifier,
|
||||||
resources.combinedWindPanelStyle(), /* showHeaderPanel */ true);
|
resources.combinedWindPanelStyle(), /* showHeaderPanel */ true);
|
||||||
raceMap.onRaceSelectionChange(Collections.singletonList(startAnalysisDTO.regattaAndRaceIdentifier));
|
raceMap.onRaceSelectionChange(Collections.singletonList(startAnalysisDTO.regattaAndRaceIdentifier));
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.sap.sailing.domain.common.dto;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import com.sap.sse.common.Color;
|
||||||
|
|
||||||
|
public class BoatDTO extends NamedDTO implements Serializable {
|
||||||
|
private static final long serialVersionUID = -4076992788294272162L;
|
||||||
|
|
||||||
|
private String sailId;
|
||||||
|
private Color color;
|
||||||
|
|
||||||
|
// for GWT
|
||||||
|
BoatDTO() {}
|
||||||
|
|
||||||
|
public BoatDTO(String name, String sailId) {
|
||||||
|
this(name, sailId, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BoatDTO(String name, String sailId, Color color) {
|
||||||
|
super(name);
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color getColor() {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSailId() {
|
||||||
|
return sailId;
|
||||||
|
}
|
||||||
|
}
|
||||||
+10
@@ -10,6 +10,7 @@ import java.util.TreeSet;
|
|||||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||||
|
import com.sap.sailing.domain.base.Boat;
|
||||||
import com.sap.sailing.domain.base.BoatClass;
|
import com.sap.sailing.domain.base.BoatClass;
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.CourseArea;
|
import com.sap.sailing.domain.base.CourseArea;
|
||||||
@@ -992,4 +993,13 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
|||||||
public IsManagedByCache<SharedDomainFactory> resolve(SharedDomainFactory domainFactory) {
|
public IsManagedByCache<SharedDomainFactory> resolve(SharedDomainFactory domainFactory) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boat resolveBoatOfCompetitor(Competitor competitor) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBoatForCompetitor(Competitor competitor, Boat boat) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+6
@@ -9,6 +9,7 @@ import java.util.Set;
|
|||||||
|
|
||||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||||
|
import com.sap.sailing.domain.base.Boat;
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.Leg;
|
import com.sap.sailing.domain.base.Leg;
|
||||||
import com.sap.sailing.domain.base.Mark;
|
import com.sap.sailing.domain.base.Mark;
|
||||||
@@ -653,4 +654,9 @@ public class MockedTrackedRaceWithStartTimeAndRanks implements TrackedRace {
|
|||||||
public IsManagedByCache<SharedDomainFactory> resolve(SharedDomainFactory domainFactory) {
|
public IsManagedByCache<SharedDomainFactory> resolve(SharedDomainFactory domainFactory) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boat resolveBoatOfCompetitor(Competitor competitor) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+1
-1
@@ -257,7 +257,7 @@ public interface DomainFactory {
|
|||||||
*/
|
*/
|
||||||
RaceDefinition getAndWaitForRaceDefinition(UUID raceId, long timeoutInMilliseconds);
|
RaceDefinition getAndWaitForRaceDefinition(UUID raceId, long timeoutInMilliseconds);
|
||||||
|
|
||||||
Iterable<Util.Pair<Competitor, Boat>> getBoatsInfoForCompetitors(IRace race, BoatClass defaultBoatClass);
|
List<Util.Pair<Competitor, Boat>> getBoatsInfoForCompetitors(IRace race, BoatClass defaultBoatClass);
|
||||||
|
|
||||||
Util.Pair<Iterable<com.sap.sailing.domain.base.Competitor>, BoatClass> getCompetitorsAndDominantBoatClass(IRace race);
|
Util.Pair<Iterable<com.sap.sailing.domain.base.Competitor>, BoatClass> getCompetitorsAndDominantBoatClass(IRace race);
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -585,7 +585,7 @@ public class DomainFactoryImpl implements DomainFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterable<Util.Pair<Competitor, Boat>> getBoatsInfoForCompetitors(IRace race, BoatClass defaultBoatClass) {
|
public List<Util.Pair<Competitor, Boat>> getBoatsInfoForCompetitors(IRace race, BoatClass defaultBoatClass) {
|
||||||
final List<Util.Pair<Competitor, Boat>> competitorBoatInfos = new ArrayList<>();
|
final List<Util.Pair<Competitor, Boat>> competitorBoatInfos = new ArrayList<>();
|
||||||
for (IRaceCompetitor rc : race.getRaceCompetitors()) {
|
for (IRaceCompetitor rc : race.getRaceCompetitors()) {
|
||||||
Util.Triple<String, String, String> competitorBoatInfo = getMetadataParser().parseCompetitorBoat(rc);
|
Util.Triple<String, String, String> competitorBoatInfo = getMetadataParser().parseCompetitorBoat(rc);
|
||||||
|
|||||||
+6
-1
@@ -157,12 +157,17 @@ public class RaceCourseReceiver extends AbstractReceiverWithQueue<IControlRoute,
|
|||||||
logger.log(Level.INFO, "Received course for non-existing race "+tractracRace.getName()+". Creating RaceDefinition.");
|
logger.log(Level.INFO, "Received course for non-existing race "+tractracRace.getName()+". Creating RaceDefinition.");
|
||||||
// create race definition and add to event
|
// create race definition and add to event
|
||||||
com.sap.sse.common.Util.Pair<Iterable<Competitor>, BoatClass> competitorsAndDominantBoatClass = getDomainFactory().getCompetitorsAndDominantBoatClass(tractracRace);
|
com.sap.sse.common.Util.Pair<Iterable<Competitor>, BoatClass> competitorsAndDominantBoatClass = getDomainFactory().getCompetitorsAndDominantBoatClass(tractracRace);
|
||||||
Iterable<Pair<Competitor, Boat>> boatsInfoForCompetitors = getDomainFactory().getBoatsInfoForCompetitors(tractracRace, competitorsAndDominantBoatClass.getB());
|
|
||||||
trackedRace = getDomainFactory().getOrCreateRaceDefinitionAndTrackedRace(
|
trackedRace = getDomainFactory().getOrCreateRaceDefinitionAndTrackedRace(
|
||||||
getTrackedRegatta(), tractracRace.getId(), tractracRace.getName(), competitorsAndDominantBoatClass.getA(),
|
getTrackedRegatta(), tractracRace.getId(), tractracRace.getName(), competitorsAndDominantBoatClass.getA(),
|
||||||
competitorsAndDominantBoatClass.getB(), course, sidelines, windStore, delayToLiveInMillis,
|
competitorsAndDominantBoatClass.getB(), course, sidelines, windStore, delayToLiveInMillis,
|
||||||
millisecondsOverWhichToAverageWind, raceDefinitionSetToUpdate, tracTracUpdateURI,
|
millisecondsOverWhichToAverageWind, raceDefinitionSetToUpdate, tracTracUpdateURI,
|
||||||
getTracTracEvent().getId(), tracTracUsername, tracTracPassword, useInternalMarkPassingAlgorithm, raceLogResolver);
|
getTracTracEvent().getId(), tracTracUsername, tracTracPassword, useInternalMarkPassingAlgorithm, raceLogResolver);
|
||||||
|
List<Pair<Competitor, Boat>> boatsInfoForCompetitors = getDomainFactory().getBoatsInfoForCompetitors(tractracRace, competitorsAndDominantBoatClass.getB());
|
||||||
|
if(boatsInfoForCompetitors != null) {
|
||||||
|
for(Pair<Competitor, Boat> competitorAndBoat: boatsInfoForCompetitors) {
|
||||||
|
trackedRace.setBoatForCompetitor(competitorAndBoat.getA(), competitorAndBoat.getB());
|
||||||
|
}
|
||||||
|
}
|
||||||
needToUpdateRaceTimes = true;
|
needToUpdateRaceTimes = true;
|
||||||
if (getSimulator() != null) {
|
if (getSimulator() != null) {
|
||||||
getSimulator().setTrackedRace(trackedRace);
|
getSimulator().setTrackedRace(trackedRace);
|
||||||
|
|||||||
+8
@@ -1,5 +1,6 @@
|
|||||||
package com.sap.sailing.domain.tracking;
|
package com.sap.sailing.domain.tracking;
|
||||||
|
|
||||||
|
import com.sap.sailing.domain.base.Boat;
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.CourseBase;
|
import com.sap.sailing.domain.base.CourseBase;
|
||||||
import com.sap.sailing.domain.base.Mark;
|
import com.sap.sailing.domain.base.Mark;
|
||||||
@@ -103,4 +104,11 @@ public interface DynamicTrackedRace extends TrackedRace {
|
|||||||
void invalidateStartTime();
|
void invalidateStartTime();
|
||||||
|
|
||||||
void invalidateEndTime();
|
void invalidateEndTime();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the boat for the competitor only for this race.
|
||||||
|
* @param competitor
|
||||||
|
* @param boat
|
||||||
|
*/
|
||||||
|
void setBoatForCompetitor(Competitor competitor, Boat boat);
|
||||||
}
|
}
|
||||||
@@ -11,6 +11,7 @@ import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
|||||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedure;
|
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedure;
|
||||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||||
import com.sap.sailing.domain.abstractlog.shared.events.DeviceMappingEvent;
|
import com.sap.sailing.domain.abstractlog.shared.events.DeviceMappingEvent;
|
||||||
|
import com.sap.sailing.domain.base.Boat;
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.Course;
|
import com.sap.sailing.domain.base.Course;
|
||||||
import com.sap.sailing.domain.base.Leg;
|
import com.sap.sailing.domain.base.Leg;
|
||||||
@@ -878,4 +879,10 @@ public interface TrackedRace extends Serializable, IsManagedByCache<SharedDomain
|
|||||||
return getMarks();
|
return getMarks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resolves the boat used by the competitor for this race
|
||||||
|
* @param competitor the competitor
|
||||||
|
* @return the boat
|
||||||
|
*/
|
||||||
|
public Boat resolveBoatOfCompetitor(Competitor competitor);
|
||||||
}
|
}
|
||||||
+5
@@ -17,6 +17,7 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||||
|
import com.sap.sailing.domain.base.Boat;
|
||||||
import com.sap.sailing.domain.base.BoatClass;
|
import com.sap.sailing.domain.base.BoatClass;
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.CourseBase;
|
import com.sap.sailing.domain.base.CourseBase;
|
||||||
@@ -827,4 +828,8 @@ DynamicTrackedRace, GPSTrackListener<Competitor, GPSFixMoving> {
|
|||||||
return (DynamicGPSFixTrack<Mark, GPSFix>) super.getTrack(mark);
|
return (DynamicGPSFixTrack<Mark, GPSFix>) super.getTrack(mark);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBoatForCompetitor(Competitor competitor, Boat boat) {
|
||||||
|
boatsForCompetitor.put(competitor, boat);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+13
@@ -57,6 +57,7 @@ import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.ReadonlyRac
|
|||||||
import com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl.DefinedMarkFinder;
|
import com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl.DefinedMarkFinder;
|
||||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||||
import com.sap.sailing.domain.abstractlog.shared.analyzing.DeviceMarkMappingFinder;
|
import com.sap.sailing.domain.abstractlog.shared.analyzing.DeviceMarkMappingFinder;
|
||||||
|
import com.sap.sailing.domain.base.Boat;
|
||||||
import com.sap.sailing.domain.base.BoatClass;
|
import com.sap.sailing.domain.base.BoatClass;
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.Course;
|
import com.sap.sailing.domain.base.Course;
|
||||||
@@ -257,6 +258,8 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
|||||||
|
|
||||||
private final Map<Competitor, NavigableSet<MarkPassing>> markPassingsForCompetitor;
|
private final Map<Competitor, NavigableSet<MarkPassing>> markPassingsForCompetitor;
|
||||||
|
|
||||||
|
protected final Map<Competitor, Boat> boatsForCompetitor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The mark passing sets used as values are ordered by time stamp.
|
* The mark passing sets used as values are ordered by time stamp.
|
||||||
*/
|
*/
|
||||||
@@ -464,6 +467,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
|||||||
race.getCourse().unlockAfterRead();
|
race.getCourse().unlockAfterRead();
|
||||||
}
|
}
|
||||||
markPassingsForCompetitor = new HashMap<Competitor, NavigableSet<MarkPassing>>();
|
markPassingsForCompetitor = new HashMap<Competitor, NavigableSet<MarkPassing>>();
|
||||||
|
boatsForCompetitor = new HashMap<Competitor, Boat>();
|
||||||
tracks = new HashMap<Competitor, GPSFixTrack<Competitor, GPSFixMoving>>();
|
tracks = new HashMap<Competitor, GPSFixTrack<Competitor, GPSFixMoving>>();
|
||||||
for (Competitor competitor : race.getCompetitors()) {
|
for (Competitor competitor : race.getCompetitors()) {
|
||||||
markPassingsForCompetitor.put(competitor, new ConcurrentSkipListSet<MarkPassing>(
|
markPassingsForCompetitor.put(competitor, new ConcurrentSkipListSet<MarkPassing>(
|
||||||
@@ -3879,4 +3883,13 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
|||||||
result.addAll(marksDefinedInRaceLog);
|
result.addAll(marksDefinedInRaceLog);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boat resolveBoatOfCompetitor(Competitor competitor) {
|
||||||
|
Boat result = boatsForCompetitor.get(competitor);
|
||||||
|
if(result == null) {
|
||||||
|
result = competitor.getBoat();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+10
@@ -11,6 +11,7 @@ import java.util.Set;
|
|||||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||||
|
import com.sap.sailing.domain.base.Boat;
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.CourseBase;
|
import com.sap.sailing.domain.base.CourseBase;
|
||||||
import com.sap.sailing.domain.base.Leg;
|
import com.sap.sailing.domain.base.Leg;
|
||||||
@@ -790,4 +791,13 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
|||||||
public IsManagedByCache<SharedDomainFactory> resolve(SharedDomainFactory domainFactory) {
|
public IsManagedByCache<SharedDomainFactory> resolve(SharedDomainFactory domainFactory) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boat resolveBoatOfCompetitor(Competitor competitor) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBoatForCompetitor(Competitor competitor, Boat boat) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+3
-3
@@ -1,13 +1,13 @@
|
|||||||
package com.sap.sailing.gwt.ui.client;
|
package com.sap.sailing.gwt.ui.client;
|
||||||
|
|
||||||
|
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
|
||||||
import com.sap.sse.common.Color;
|
import com.sap.sse.common.Color;
|
||||||
|
|
||||||
public interface CompetitorColorProvider {
|
public interface CompetitorColorProvider {
|
||||||
Color getColor(CompetitorDTO competitor);
|
Color getColor(CompetitorDTO competitor);
|
||||||
|
Color getColor(CompetitorDTO competitor, RegattaAndRaceIdentifier raceIdentfier);
|
||||||
Color getColor(CompetitorDTO competitor, RaceColumnDTO raceColumn);
|
void setColor(CompetitorDTO competitor, RegattaAndRaceIdentifier raceIdentfier, Color color);
|
||||||
|
|
||||||
void addBlockedColor(Color color);
|
void addBlockedColor(Color color);
|
||||||
void removeBlockedColor(Color color);
|
void removeBlockedColor(Color color);
|
||||||
|
|||||||
+32
-9
@@ -1,32 +1,56 @@
|
|||||||
package com.sap.sailing.gwt.ui.client;
|
package com.sap.sailing.gwt.ui.client;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.sap.sailing.domain.common.ColorMap;
|
import com.sap.sailing.domain.common.ColorMap;
|
||||||
|
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
|
||||||
import com.sap.sailing.domain.common.impl.ColorMapImpl;
|
import com.sap.sailing.domain.common.impl.ColorMapImpl;
|
||||||
import com.sap.sse.common.Color;
|
import com.sap.sse.common.Color;
|
||||||
|
|
||||||
public class CompetitorColorProviderImpl implements CompetitorColorProvider {
|
public class CompetitorColorProviderImpl implements CompetitorColorProvider {
|
||||||
private final ColorMap<CompetitorDTO> competitorsColorMap;
|
private final ColorMap<CompetitorDTO> competitorsColorMap;
|
||||||
|
private final Map<RegattaAndRaceIdentifier, Map<CompetitorDTO, Color>> competitorsBoatColorsPerRace;
|
||||||
|
|
||||||
public CompetitorColorProviderImpl() {
|
public CompetitorColorProviderImpl() {
|
||||||
this.competitorsColorMap = new ColorMapImpl<CompetitorDTO>();
|
this.competitorsColorMap = new ColorMapImpl<CompetitorDTO>();
|
||||||
|
this.competitorsBoatColorsPerRace = new HashMap<RegattaAndRaceIdentifier, Map<CompetitorDTO,Color>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Color getColor(CompetitorDTO competitor) {
|
public Color getColor(CompetitorDTO competitor) {
|
||||||
final Color result;
|
return getColor(competitor, null);
|
||||||
if (competitor.getColor() != null) {
|
|
||||||
result = competitor.getColor();
|
|
||||||
} else {
|
|
||||||
result = competitorsColorMap.getColorByID(competitor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Color getColor(CompetitorDTO competitor, RegattaAndRaceIdentifier raceIdentfier) {
|
||||||
|
Color result = null;
|
||||||
|
if(raceIdentfier != null) {
|
||||||
|
Map<CompetitorDTO, Color> raceColors = competitorsBoatColorsPerRace.get(raceIdentfier);
|
||||||
|
if(raceColors != null) {
|
||||||
|
result = raceColors.get(competitor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(result == null && competitor.getColor() != null) {
|
||||||
|
result = competitor.getColor();
|
||||||
|
}
|
||||||
|
// fallback
|
||||||
|
if(result == null) {
|
||||||
|
competitorsColorMap.getColorByID(competitor);
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Color getColor(CompetitorDTO competitor, RaceColumnDTO raceColumn) {
|
public void setColor(CompetitorDTO competitor, RegattaAndRaceIdentifier raceIdentfier, Color color) {
|
||||||
return null;
|
Map<CompetitorDTO, Color> raceColors = competitorsBoatColorsPerRace.get(raceIdentfier);
|
||||||
|
if(raceColors == null) {
|
||||||
|
raceColors = new HashMap<CompetitorDTO, Color>();
|
||||||
|
competitorsBoatColorsPerRace.put(raceIdentfier, raceColors);
|
||||||
|
}
|
||||||
|
raceColors.put(competitor, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -38,5 +62,4 @@ public class CompetitorColorProviderImpl implements CompetitorColorProvider {
|
|||||||
public void removeBlockedColor(Color color) {
|
public void removeBlockedColor(Color color) {
|
||||||
competitorsColorMap.removeBlockedColor(color);
|
competitorsColorMap.removeBlockedColor(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+6
@@ -8,6 +8,7 @@ import java.util.Iterator;
|
|||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||||
import com.sap.sse.common.Color;
|
import com.sap.sse.common.Color;
|
||||||
import com.sap.sse.common.Util;
|
import com.sap.sse.common.Util;
|
||||||
@@ -238,6 +239,11 @@ public class CompetitorSelectionModel implements CompetitorSelectionProvider {
|
|||||||
return allCompetitors.contains(competitor) ? competitorColorProvider.getColor(competitor) : null;
|
return allCompetitors.contains(competitor) ? competitorColorProvider.getColor(competitor) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Color getColor(CompetitorDTO competitor, RegattaAndRaceIdentifier raceIdentfier) {
|
||||||
|
return allCompetitors.contains(competitor) ? competitorColorProvider.getColor(competitor, raceIdentfier) : null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FilterSet<CompetitorDTO, Filter<CompetitorDTO>> getCompetitorsFilterSet() {
|
public FilterSet<CompetitorDTO, Filter<CompetitorDTO>> getCompetitorsFilterSet() {
|
||||||
return competitorsFilterSet;
|
return competitorsFilterSet;
|
||||||
|
|||||||
+3
@@ -1,5 +1,6 @@
|
|||||||
package com.sap.sailing.gwt.ui.client;
|
package com.sap.sailing.gwt.ui.client;
|
||||||
|
|
||||||
|
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||||
import com.sap.sse.common.Color;
|
import com.sap.sse.common.Color;
|
||||||
import com.sap.sse.common.filter.Filter;
|
import com.sap.sse.common.filter.Filter;
|
||||||
@@ -62,6 +63,8 @@ public interface CompetitorSelectionProvider {
|
|||||||
|
|
||||||
Color getColor(CompetitorDTO competitor);
|
Color getColor(CompetitorDTO competitor);
|
||||||
|
|
||||||
|
Color getColor(CompetitorDTO competitor, RegattaAndRaceIdentifier raceIdentfier);
|
||||||
|
|
||||||
void addCompetitorSelectionChangeListener(CompetitorSelectionChangeListener listener);
|
void addCompetitorSelectionChangeListener(CompetitorSelectionChangeListener listener);
|
||||||
|
|
||||||
void removeCompetitorSelectionChangeListener(CompetitorSelectionChangeListener listener);
|
void removeCompetitorSelectionChangeListener(CompetitorSelectionChangeListener listener);
|
||||||
|
|||||||
+15
-5
@@ -78,6 +78,7 @@ import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
|||||||
import com.sap.sailing.domain.common.Tack;
|
import com.sap.sailing.domain.common.Tack;
|
||||||
import com.sap.sailing.domain.common.WindSource;
|
import com.sap.sailing.domain.common.WindSource;
|
||||||
import com.sap.sailing.domain.common.WindSourceType;
|
import com.sap.sailing.domain.common.WindSourceType;
|
||||||
|
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||||
@@ -87,6 +88,7 @@ import com.sap.sailing.gwt.ui.actions.GetPolarAction;
|
|||||||
import com.sap.sailing.gwt.ui.actions.GetRaceMapDataAction;
|
import com.sap.sailing.gwt.ui.actions.GetRaceMapDataAction;
|
||||||
import com.sap.sailing.gwt.ui.actions.GetWindInfoAction;
|
import com.sap.sailing.gwt.ui.actions.GetWindInfoAction;
|
||||||
import com.sap.sailing.gwt.ui.client.ClientResources;
|
import com.sap.sailing.gwt.ui.client.ClientResources;
|
||||||
|
import com.sap.sailing.gwt.ui.client.CompetitorColorProvider;
|
||||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
|
import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
|
||||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
||||||
import com.sap.sailing.gwt.ui.client.NumberFormatterFactory;
|
import com.sap.sailing.gwt.ui.client.NumberFormatterFactory;
|
||||||
@@ -284,7 +286,8 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
|
|||||||
|
|
||||||
private Map<CompetitorDTO, List<GPSFixDTO>> lastDouglasPeuckerResult;
|
private Map<CompetitorDTO, List<GPSFixDTO>> lastDouglasPeuckerResult;
|
||||||
|
|
||||||
private CompetitorSelectionProvider competitorSelection;
|
private final CompetitorSelectionProvider competitorSelection;
|
||||||
|
private final CompetitorColorProvider competitorColorProvider;
|
||||||
|
|
||||||
private List<RegattaAndRaceIdentifier> selectedRaces;
|
private List<RegattaAndRaceIdentifier> selectedRaces;
|
||||||
|
|
||||||
@@ -397,7 +400,7 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
|
|||||||
private final NumberFormat numberFormatOneDecimal = NumberFormat.getFormat("0.0");
|
private final NumberFormat numberFormatOneDecimal = NumberFormat.getFormat("0.0");
|
||||||
|
|
||||||
public RaceMap(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
|
public RaceMap(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
|
||||||
ErrorReporter errorReporter, Timer timer, CompetitorSelectionProvider competitorSelection,
|
ErrorReporter errorReporter, Timer timer, CompetitorSelectionProvider competitorSelection, CompetitorColorProvider competitorColorProvider,
|
||||||
StringMessages stringMessages, boolean showMapControls, boolean showViewStreamlets, boolean showViewSimulation,
|
StringMessages stringMessages, boolean showMapControls, boolean showViewStreamlets, boolean showViewSimulation,
|
||||||
RegattaAndRaceIdentifier raceIdentifier, CombinedWindPanelStyle combinedWindPanelStyle, boolean showHeaderPanel) {
|
RegattaAndRaceIdentifier raceIdentifier, CombinedWindPanelStyle combinedWindPanelStyle, boolean showHeaderPanel) {
|
||||||
this.setSize("100%", "100%");
|
this.setSize("100%", "100%");
|
||||||
@@ -419,6 +422,7 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
|
|||||||
windSensorOverlays = new HashMap<WindSource, WindSensorOverlay>();
|
windSensorOverlays = new HashMap<WindSource, WindSensorOverlay>();
|
||||||
courseMarkOverlays = new HashMap<String, CourseMarkOverlay>();
|
courseMarkOverlays = new HashMap<String, CourseMarkOverlay>();
|
||||||
this.competitorSelection = competitorSelection;
|
this.competitorSelection = competitorSelection;
|
||||||
|
this.competitorColorProvider = competitorColorProvider;
|
||||||
competitorSelection.addCompetitorSelectionChangeListener(this);
|
competitorSelection.addCompetitorSelectionChangeListener(this);
|
||||||
settings = new RaceMapSettings();
|
settings = new RaceMapSettings();
|
||||||
coordinateSystem = new DelegateCoordinateSystem(new IdentityCoordinateSystem());
|
coordinateSystem = new DelegateCoordinateSystem(new IdentityCoordinateSystem());
|
||||||
@@ -880,6 +884,12 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
|
|||||||
public void onSuccess(RaceMapDataDTO raceMapDataDTO) {
|
public void onSuccess(RaceMapDataDTO raceMapDataDTO) {
|
||||||
if (map != null && raceMapDataDTO != null) {
|
if (map != null && raceMapDataDTO != null) {
|
||||||
quickRanks = raceMapDataDTO.quickRanks;
|
quickRanks = raceMapDataDTO.quickRanks;
|
||||||
|
// set competitor boats for the color provider
|
||||||
|
if(!raceMapDataDTO.competitorBoats.isEmpty()) {
|
||||||
|
for(Entry<CompetitorDTO, BoatDTO> competitorAndBoat: raceMapDataDTO.competitorBoats.entrySet()) {
|
||||||
|
competitorColorProvider.setColor(competitorAndBoat.getKey(), raceIdentifier, competitorAndBoat.getValue().getColor());
|
||||||
|
}
|
||||||
|
}
|
||||||
competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber =
|
competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber =
|
||||||
raceMapDataDTO.competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber;
|
raceMapDataDTO.competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber;
|
||||||
if (showViewSimulation && settings.isShowSimulationOverlay()) {
|
if (showViewSimulation && settings.isShowSimulationOverlay()) {
|
||||||
@@ -1774,11 +1784,11 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
|
|||||||
|
|
||||||
private CompetitorInfoOverlay createCompetitorInfoOverlay(int zIndex, final CompetitorDTO competitorDTO) {
|
private CompetitorInfoOverlay createCompetitorInfoOverlay(int zIndex, final CompetitorDTO competitorDTO) {
|
||||||
String infoText = competitorDTO.getSailID() == null || competitorDTO.getSailID().isEmpty() ? competitorDTO.getName() : competitorDTO.getSailID();
|
String infoText = competitorDTO.getSailID() == null || competitorDTO.getSailID().isEmpty() ? competitorDTO.getName() : competitorDTO.getSailID();
|
||||||
return new CompetitorInfoOverlay(map, zIndex, competitorSelection.getColor(competitorDTO), infoText, coordinateSystem);
|
return new CompetitorInfoOverlay(map, zIndex, competitorSelection.getColor(competitorDTO, raceIdentifier), infoText, coordinateSystem);
|
||||||
}
|
}
|
||||||
|
|
||||||
private BoatOverlay createBoatOverlay(int zIndex, final CompetitorDTO competitorDTO, boolean highlighted) {
|
private BoatOverlay createBoatOverlay(int zIndex, final CompetitorDTO competitorDTO, boolean highlighted) {
|
||||||
final BoatOverlay boatCanvas = new BoatOverlay(map, zIndex, competitorDTO, competitorSelection.getColor(competitorDTO), coordinateSystem);
|
final BoatOverlay boatCanvas = new BoatOverlay(map, zIndex, competitorDTO, competitorSelection.getColor(competitorDTO, raceIdentifier), coordinateSystem);
|
||||||
boatCanvas.setSelected(highlighted);
|
boatCanvas.setSelected(highlighted);
|
||||||
boatCanvas.addClickHandler(new ClickMapHandler() {
|
boatCanvas.addClickHandler(new ClickMapHandler() {
|
||||||
@Override
|
@Override
|
||||||
@@ -2469,7 +2479,7 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
|
|||||||
options.setStrokeOpacity(1.0);
|
options.setStrokeOpacity(1.0);
|
||||||
boolean noCompetitorSelected = Util.isEmpty(competitorSelection.getSelectedCompetitors());
|
boolean noCompetitorSelected = Util.isEmpty(competitorSelection.getSelectedCompetitors());
|
||||||
if (isHighlighted || noCompetitorSelected) {
|
if (isHighlighted || noCompetitorSelected) {
|
||||||
options.setStrokeColor(competitorSelection.getColor(competitor).getAsHtml());
|
options.setStrokeColor(competitorSelection.getColor(competitor, raceIdentifier).getAsHtml());
|
||||||
} else {
|
} else {
|
||||||
options.setStrokeColor(CssColor.make(200, 200, 200).toString());
|
options.setStrokeColor(CssColor.make(200, 200, 200).toString());
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-2
@@ -277,7 +277,7 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS
|
|||||||
* {@link RaceColumnDTO#getRaceIdentifier(String) race identifier} matches the value of this attribute will be
|
* {@link RaceColumnDTO#getRaceIdentifier(String) race identifier} matches the value of this attribute will be
|
||||||
* added.
|
* added.
|
||||||
*/
|
*/
|
||||||
private final RaceIdentifier preSelectedRace;
|
private final RegattaAndRaceIdentifier preSelectedRace;
|
||||||
|
|
||||||
private final VerticalPanel contentPanel;
|
private final VerticalPanel contentPanel;
|
||||||
|
|
||||||
@@ -619,7 +619,8 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(Context context, LeaderboardRowDTO object, SafeHtmlBuilder sb) {
|
public void render(Context context, LeaderboardRowDTO object, SafeHtmlBuilder sb) {
|
||||||
String competitorColor = LeaderboardPanel.this.competitorSelectionProvider.getColor(object.competitor).getAsHtml();
|
String competitorColor = LeaderboardPanel.this.competitorSelectionProvider.getColor(object.competitor,
|
||||||
|
LeaderboardPanel.this.preSelectedRace).getAsHtml();
|
||||||
String competitorColorBarStyle;
|
String competitorColorBarStyle;
|
||||||
if (LeaderboardPanel.this.isEmbedded && preSelectedRace != null) {
|
if (LeaderboardPanel.this.isEmbedded && preSelectedRace != null) {
|
||||||
competitorColorBarStyle = "style=\"border-bottom: 2px solid " + competitorColor + ";\"";
|
competitorColorBarStyle = "style=\"border-bottom: 2px solid " + competitorColor + ";\"";
|
||||||
@@ -2317,6 +2318,12 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS
|
|||||||
for (RaceColumn<?> columnToCollapseAndExpandAgain : columnsToCollapseAndExpandAgain) {
|
for (RaceColumn<?> columnToCollapseAndExpandAgain : columnsToCollapseAndExpandAgain) {
|
||||||
columnToCollapseAndExpandAgain.toggleExpansion();
|
columnToCollapseAndExpandAgain.toggleExpansion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// here we need to add the competitor colors for the preselected race column or so
|
||||||
|
if(preSelectedRace != null) {
|
||||||
|
// leaderboard.
|
||||||
|
}
|
||||||
|
|
||||||
competitorSelectionProvider.setCompetitors(leaderboard.competitors, /* listenersNotToNotify */this);
|
competitorSelectionProvider.setCompetitors(leaderboard.competitors, /* listenersNotToNotify */this);
|
||||||
if (!initialCompetitorFilterHasBeenApplied) {
|
if (!initialCompetitorFilterHasBeenApplied) {
|
||||||
applyTop30FilterIfCompetitorSizeGreaterEqual40(leaderboard);
|
applyTop30FilterIfCompetitorSizeGreaterEqual40(leaderboard);
|
||||||
|
|||||||
+7
-4
@@ -23,6 +23,8 @@ import com.sap.sailing.domain.common.LeaderboardNameConstants;
|
|||||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||||
import com.sap.sailing.gwt.ui.client.AbstractSailingEntryPoint;
|
import com.sap.sailing.gwt.ui.client.AbstractSailingEntryPoint;
|
||||||
|
import com.sap.sailing.gwt.ui.client.CompetitorColorProvider;
|
||||||
|
import com.sap.sailing.gwt.ui.client.CompetitorColorProviderImpl;
|
||||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
||||||
import com.sap.sailing.gwt.ui.client.LogoAndTitlePanel;
|
import com.sap.sailing.gwt.ui.client.LogoAndTitlePanel;
|
||||||
@@ -158,9 +160,10 @@ public class EmbeddedMapAndWindChartEntryPoint extends AbstractSailingEntryPoint
|
|||||||
timePanelSettings.setRefreshInterval(refreshInterval);
|
timePanelSettings.setRefreshInterval(refreshInterval);
|
||||||
timePanel.updateSettings(timePanelSettings);
|
timePanel.updateSettings(timePanelSettings);
|
||||||
raceMapResources.combinedWindPanelStyle().ensureInjected();
|
raceMapResources.combinedWindPanelStyle().ensureInjected();
|
||||||
final CompetitorSelectionProvider competitorSelection = createEmptyFilterCompetitorModel(); // show no competitors
|
final CompetitorColorProvider colorProvider = new CompetitorColorProviderImpl();
|
||||||
|
final CompetitorSelectionProvider competitorSelection = createEmptyFilterCompetitorModel(colorProvider); // show no competitors
|
||||||
final RaceMap raceMap = new RaceMap(sailingService, asyncActionsExecutor, /* errorReporter */ EmbeddedMapAndWindChartEntryPoint.this, timer,
|
final RaceMap raceMap = new RaceMap(sailingService, asyncActionsExecutor, /* errorReporter */ EmbeddedMapAndWindChartEntryPoint.this, timer,
|
||||||
competitorSelection, getStringMessages(), showMapControls, showViewStreamlets,
|
competitorSelection, colorProvider, getStringMessages(), showMapControls, showViewStreamlets,
|
||||||
showViewSimulation, selectedRaceIdentifier, raceMapResources.combinedWindPanelStyle(), /* showHeaderPanel */ false) {
|
showViewSimulation, selectedRaceIdentifier, raceMapResources.combinedWindPanelStyle(), /* showHeaderPanel */ false) {
|
||||||
@Override
|
@Override
|
||||||
protected void showAdditionalControls(MapWidget map) {
|
protected void showAdditionalControls(MapWidget map) {
|
||||||
@@ -194,8 +197,8 @@ public class EmbeddedMapAndWindChartEntryPoint extends AbstractSailingEntryPoint
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private CompetitorSelectionProvider createEmptyFilterCompetitorModel() {
|
private CompetitorSelectionProvider createEmptyFilterCompetitorModel(CompetitorColorProvider colorProvider) {
|
||||||
final CompetitorSelectionModel result = new CompetitorSelectionModel(/* hasMultiSelection */ true);
|
final CompetitorSelectionModel result = new CompetitorSelectionModel(/* hasMultiSelection */ true, colorProvider);
|
||||||
final FilterSet<CompetitorDTO, Filter<CompetitorDTO>> filterSet = result.getOrCreateCompetitorsFilterSet("Empty");
|
final FilterSet<CompetitorDTO, Filter<CompetitorDTO>> filterSet = result.getOrCreateCompetitorsFilterSet("Empty");
|
||||||
filterSet.addFilter(new Filter<CompetitorDTO>() {
|
filterSet.addFilter(new Filter<CompetitorDTO>() {
|
||||||
@Override public boolean matches(CompetitorDTO object) { return false; }
|
@Override public boolean matches(CompetitorDTO object) { return false; }
|
||||||
|
|||||||
+5
-2
@@ -26,6 +26,8 @@ import com.sap.sailing.domain.common.dto.FleetDTO;
|
|||||||
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
|
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
|
||||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||||
import com.sap.sailing.domain.common.dto.RaceDTO;
|
import com.sap.sailing.domain.common.dto.RaceDTO;
|
||||||
|
import com.sap.sailing.gwt.ui.client.CompetitorColorProvider;
|
||||||
|
import com.sap.sailing.gwt.ui.client.CompetitorColorProviderImpl;
|
||||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||||
import com.sap.sailing.gwt.ui.client.EntryPointLinkFactory;
|
import com.sap.sailing.gwt.ui.client.EntryPointLinkFactory;
|
||||||
import com.sap.sailing.gwt.ui.client.GlobalNavigationPanel;
|
import com.sap.sailing.gwt.ui.client.GlobalNavigationPanel;
|
||||||
@@ -151,11 +153,12 @@ public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeLi
|
|||||||
regattaAndRaceTimeInformationHeader.setStyleName("RegattaAndRaceTime-Header");
|
regattaAndRaceTimeInformationHeader.setStyleName("RegattaAndRaceTime-Header");
|
||||||
timeRangeWithZoomModel = new TimeRangeWithZoomModel();
|
timeRangeWithZoomModel = new TimeRangeWithZoomModel();
|
||||||
componentViewers = new ArrayList<ComponentViewer>();
|
componentViewers = new ArrayList<ComponentViewer>();
|
||||||
competitorSelectionModel = new CompetitorSelectionModel(/* hasMultiSelection */ true);
|
final CompetitorColorProvider colorProvider = new CompetitorColorProviderImpl();
|
||||||
|
competitorSelectionModel = new CompetitorSelectionModel(/* hasMultiSelection */ true, colorProvider);
|
||||||
|
|
||||||
raceMapResources.combinedWindPanelStyle().ensureInjected();
|
raceMapResources.combinedWindPanelStyle().ensureInjected();
|
||||||
raceMap = new RaceMap(sailingService, asyncActionsExecutor, errorReporter, timer,
|
raceMap = new RaceMap(sailingService, asyncActionsExecutor, errorReporter, timer,
|
||||||
competitorSelectionModel, stringMessages, showMapControls, getConfiguration().isShowViewStreamlets(), getConfiguration().isShowViewSimulation(),
|
competitorSelectionModel, colorProvider, stringMessages, showMapControls, getConfiguration().isShowViewStreamlets(), getConfiguration().isShowViewSimulation(),
|
||||||
selectedRaceIdentifier, raceMapResources.combinedWindPanelStyle(), /* showHeaderPanel */ true);
|
selectedRaceIdentifier, raceMapResources.combinedWindPanelStyle(), /* showHeaderPanel */ true);
|
||||||
CompetitorFilterPanel competitorSearchTextBox = new CompetitorFilterPanel(competitorSelectionModel, stringMessages, raceMap,
|
CompetitorFilterPanel competitorSearchTextBox = new CompetitorFilterPanel(competitorSelectionModel, stringMessages, raceMap,
|
||||||
new LeaderboardFetcher() {
|
new LeaderboardFetcher() {
|
||||||
|
|||||||
+20
-1
@@ -90,6 +90,7 @@ import com.sap.sailing.domain.abstractlog.regatta.tracking.analyzing.impl.Regatt
|
|||||||
import com.sap.sailing.domain.abstractlog.shared.analyzing.DeviceCompetitorMappingFinder;
|
import com.sap.sailing.domain.abstractlog.shared.analyzing.DeviceCompetitorMappingFinder;
|
||||||
import com.sap.sailing.domain.abstractlog.shared.analyzing.DeviceMarkMappingFinder;
|
import com.sap.sailing.domain.abstractlog.shared.analyzing.DeviceMarkMappingFinder;
|
||||||
import com.sap.sailing.domain.abstractlog.shared.analyzing.RegisteredCompetitorsAnalyzer;
|
import com.sap.sailing.domain.abstractlog.shared.analyzing.RegisteredCompetitorsAnalyzer;
|
||||||
|
import com.sap.sailing.domain.base.Boat;
|
||||||
import com.sap.sailing.domain.base.BoatClass;
|
import com.sap.sailing.domain.base.BoatClass;
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.ControlPoint;
|
import com.sap.sailing.domain.base.ControlPoint;
|
||||||
@@ -179,6 +180,7 @@ import com.sap.sailing.domain.common.WindSourceType;
|
|||||||
import com.sap.sailing.domain.common.abstractlog.NotRevokableException;
|
import com.sap.sailing.domain.common.abstractlog.NotRevokableException;
|
||||||
import com.sap.sailing.domain.common.configuration.DeviceConfigurationMatcherType;
|
import com.sap.sailing.domain.common.configuration.DeviceConfigurationMatcherType;
|
||||||
import com.sap.sailing.domain.common.dto.BoatClassDTO;
|
import com.sap.sailing.domain.common.dto.BoatClassDTO;
|
||||||
|
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||||
import com.sap.sailing.domain.common.dto.FullLeaderboardDTO;
|
import com.sap.sailing.domain.common.dto.FullLeaderboardDTO;
|
||||||
@@ -1572,6 +1574,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
|||||||
boolean extrapolate, LegIdentifier simulationLegIdentifier) throws NoWindException {
|
boolean extrapolate, LegIdentifier simulationLegIdentifier) throws NoWindException {
|
||||||
final Map<CompetitorDTO, List<GPSFixDTO>> boatPositions = getBoatPositions(raceIdentifier,
|
final Map<CompetitorDTO, List<GPSFixDTO>> boatPositions = getBoatPositions(raceIdentifier,
|
||||||
fromPerCompetitorIdAsString, toPerCompetitorIdAsString, extrapolate);
|
fromPerCompetitorIdAsString, toPerCompetitorIdAsString, extrapolate);
|
||||||
|
final Map<CompetitorDTO, BoatDTO> competitorBoats = getBoatsOfCompetitors(raceIdentifier);
|
||||||
final CoursePositionsDTO coursePositions = getCoursePositions(raceIdentifier, date);
|
final CoursePositionsDTO coursePositions = getCoursePositions(raceIdentifier, date);
|
||||||
final List<SidelineDTO> courseSidelines = getCourseSidelines(raceIdentifier, date);
|
final List<SidelineDTO> courseSidelines = getCourseSidelines(raceIdentifier, date);
|
||||||
final QuickRanksDTO quickRanks = getQuickRanks(raceIdentifier, date);
|
final QuickRanksDTO quickRanks = getQuickRanks(raceIdentifier, date);
|
||||||
@@ -1580,7 +1583,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
|||||||
SimulationService simulationService = getService().getSimulationService();
|
SimulationService simulationService = getService().getSimulationService();
|
||||||
simulationResultVersion = simulationService.getSimulationResultsVersion(simulationLegIdentifier);
|
simulationResultVersion = simulationService.getSimulationResultsVersion(simulationLegIdentifier);
|
||||||
}
|
}
|
||||||
return new CompactRaceMapDataDTO(boatPositions, coursePositions, courseSidelines, quickRanks, simulationResultVersion);
|
return new CompactRaceMapDataDTO(boatPositions, competitorBoats, coursePositions, courseSidelines, quickRanks, simulationResultVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1728,6 +1731,22 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<CompetitorDTO, BoatDTO> getBoatsOfCompetitors(RegattaAndRaceIdentifier raceIdentifier) {
|
||||||
|
Map<CompetitorDTO, BoatDTO> result = new HashMap<CompetitorDTO, BoatDTO>();
|
||||||
|
TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier);
|
||||||
|
if (trackedRace != null) {
|
||||||
|
for (Competitor competitor : trackedRace.getRace().getCompetitors()) {
|
||||||
|
Boat boatOfCompetitor = trackedRace.resolveBoatOfCompetitor(competitor);
|
||||||
|
if(boatOfCompetitor != null) {
|
||||||
|
CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorDTO(competitor);
|
||||||
|
BoatDTO boatDTO = new BoatDTO(boatOfCompetitor.getName(), boatOfCompetitor.getSailID(), boatOfCompetitor.getColor());
|
||||||
|
result.put(competitorDTO, boatDTO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private TimePoint quantifyTimePointWithResolution(TimePoint timePoint, long resolutionInMilliseconds) {
|
private TimePoint quantifyTimePointWithResolution(TimePoint timePoint, long resolutionInMilliseconds) {
|
||||||
return new MillisecondsTimePoint(timePoint.asMillis() / resolutionInMilliseconds * resolutionInMilliseconds);
|
return new MillisecondsTimePoint(timePoint.asMillis() / resolutionInMilliseconds * resolutionInMilliseconds);
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-1
@@ -8,6 +8,7 @@ import java.util.Map;
|
|||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||||
|
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||||
import com.sap.sse.common.Util;
|
import com.sap.sse.common.Util;
|
||||||
@@ -24,6 +25,8 @@ import com.sap.sse.common.Util;
|
|||||||
*/
|
*/
|
||||||
public class CompactRaceMapDataDTO implements IsSerializable {
|
public class CompactRaceMapDataDTO implements IsSerializable {
|
||||||
private Map<String, List<GPSFixDTO>> boatPositionsByCompetitorIdAsString;
|
private Map<String, List<GPSFixDTO>> boatPositionsByCompetitorIdAsString;
|
||||||
|
private Map<String, BoatDTO> competitorBoatsByCompetitorIdAsString;
|
||||||
|
|
||||||
private CoursePositionsDTO coursePositions;
|
private CoursePositionsDTO coursePositions;
|
||||||
private List<SidelineDTO> courseSidelines;
|
private List<SidelineDTO> courseSidelines;
|
||||||
private List<CompactQuickRankDTO> quickRanks;
|
private List<CompactQuickRankDTO> quickRanks;
|
||||||
@@ -32,12 +35,16 @@ public class CompactRaceMapDataDTO implements IsSerializable {
|
|||||||
|
|
||||||
CompactRaceMapDataDTO() {}
|
CompactRaceMapDataDTO() {}
|
||||||
|
|
||||||
public CompactRaceMapDataDTO(Map<CompetitorDTO, List<GPSFixDTO>> boatPositions, CoursePositionsDTO coursePositions,
|
public CompactRaceMapDataDTO(Map<CompetitorDTO, List<GPSFixDTO>> boatPositions, Map<CompetitorDTO, BoatDTO> competitorBoats, CoursePositionsDTO coursePositions,
|
||||||
List<SidelineDTO> courseSidelines, QuickRanksDTO quickRanks, long simulationResultVersion) {
|
List<SidelineDTO> courseSidelines, QuickRanksDTO quickRanks, long simulationResultVersion) {
|
||||||
this.boatPositionsByCompetitorIdAsString = new HashMap<String, List<GPSFixDTO>>();
|
this.boatPositionsByCompetitorIdAsString = new HashMap<String, List<GPSFixDTO>>();
|
||||||
for (Map.Entry<CompetitorDTO, List<GPSFixDTO>> e : boatPositions.entrySet()) {
|
for (Map.Entry<CompetitorDTO, List<GPSFixDTO>> e : boatPositions.entrySet()) {
|
||||||
this.boatPositionsByCompetitorIdAsString.put(e.getKey().getIdAsString(), e.getValue());
|
this.boatPositionsByCompetitorIdAsString.put(e.getKey().getIdAsString(), e.getValue());
|
||||||
}
|
}
|
||||||
|
this.competitorBoatsByCompetitorIdAsString = new HashMap<String, BoatDTO>();
|
||||||
|
for (Map.Entry<CompetitorDTO, BoatDTO> e : competitorBoats.entrySet()) {
|
||||||
|
this.competitorBoatsByCompetitorIdAsString.put(e.getKey().getIdAsString(), e.getValue());
|
||||||
|
}
|
||||||
this.quickRanks = new ArrayList<CompactQuickRankDTO>(quickRanks == null ? 0 : Util.size(quickRanks.getQuickRanks()));
|
this.quickRanks = new ArrayList<CompactQuickRankDTO>(quickRanks == null ? 0 : Util.size(quickRanks.getQuickRanks()));
|
||||||
this.competitorsInOrderOfWindwardDistanceTraveledFarthestFirstIdAsStringAndOneBasedLegNumber = new LinkedHashMap<>();
|
this.competitorsInOrderOfWindwardDistanceTraveledFarthestFirstIdAsStringAndOneBasedLegNumber = new LinkedHashMap<>();
|
||||||
Map<String, Integer> competitorIdAsStringToOneBasedLegNumber = new HashMap<>();
|
Map<String, Integer> competitorIdAsStringToOneBasedLegNumber = new HashMap<>();
|
||||||
@@ -81,6 +88,14 @@ public class CompactRaceMapDataDTO implements IsSerializable {
|
|||||||
result.boatPositions.put(competitor, e.getValue());
|
result.boatPositions.put(competitor, e.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
result.competitorBoats = new HashMap<CompetitorDTO, BoatDTO>();
|
||||||
|
for (Map.Entry<String, BoatDTO> e : competitorBoatsByCompetitorIdAsString.entrySet()) {
|
||||||
|
final CompetitorDTO competitor = competitorsByIdAsString.get(e.getKey());
|
||||||
|
if (competitor != null) {
|
||||||
|
// maybe null in case the competitor was added, e.g., by unsuppressing, while this call was underway
|
||||||
|
result.competitorBoats.put(competitor, e.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
result.competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber = new LinkedHashMap<>();
|
result.competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber = new LinkedHashMap<>();
|
||||||
for (Entry<String, Integer> i : competitorsInOrderOfWindwardDistanceTraveledFarthestFirstIdAsStringAndOneBasedLegNumber.entrySet()) {
|
for (Entry<String, Integer> i : competitorsInOrderOfWindwardDistanceTraveledFarthestFirstIdAsStringAndOneBasedLegNumber.entrySet()) {
|
||||||
CompetitorDTO c = competitorsByIdAsString.get(i.getKey());
|
CompetitorDTO c = competitorsByIdAsString.get(i.getKey());
|
||||||
|
|||||||
+2
@@ -5,10 +5,12 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||||
|
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||||
|
|
||||||
public class RaceMapDataDTO implements IsSerializable {
|
public class RaceMapDataDTO implements IsSerializable {
|
||||||
public Map<CompetitorDTO, List<GPSFixDTO>> boatPositions;
|
public Map<CompetitorDTO, List<GPSFixDTO>> boatPositions;
|
||||||
|
public Map<CompetitorDTO, BoatDTO> competitorBoats;
|
||||||
public CoursePositionsDTO coursePositions;
|
public CoursePositionsDTO coursePositions;
|
||||||
public List<SidelineDTO> courseSidelines;
|
public List<SidelineDTO> courseSidelines;
|
||||||
public LinkedHashMap<CompetitorDTO, QuickRankDTO> quickRanks;
|
public LinkedHashMap<CompetitorDTO, QuickRankDTO> quickRanks;
|
||||||
|
|||||||
+6
@@ -9,6 +9,7 @@ import java.util.Set;
|
|||||||
|
|
||||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||||
|
import com.sap.sailing.domain.base.Boat;
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.Leg;
|
import com.sap.sailing.domain.base.Leg;
|
||||||
import com.sap.sailing.domain.base.Mark;
|
import com.sap.sailing.domain.base.Mark;
|
||||||
@@ -628,4 +629,9 @@ public class DummyTrackedRace extends TrackedRaceWithWindEssentials {
|
|||||||
public IsManagedByCache<SharedDomainFactory> resolve(SharedDomainFactory domainFactory) {
|
public IsManagedByCache<SharedDomainFactory> resolve(SharedDomainFactory domainFactory) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boat resolveBoatOfCompetitor(Competitor competitor) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user