From 9e4cb6140347db35469223aa53cc3cef4a56338f Mon Sep 17 00:00:00 2001 From: Peter Siegmund Date: Mon, 6 Jul 2015 15:06:11 +0200 Subject: [PATCH 1/8] Bug 3067 - Consistent server url --- .../sap/sailing/racecommittee/app/AppPreferences.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppPreferences.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppPreferences.java index e01cf01ba73..3c1a608e6b9 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppPreferences.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppPreferences.java @@ -251,6 +251,17 @@ public class AppPreferences { if (value.equals("")) { return "http://localhost:8889"; } + + // add missing protocol + if (!value.startsWith("http://") && !value.startsWith("https://")) { + value = "http://" + value; + } + + // remove trailing slash + if (value.endsWith("/")) { + value = value.substring(0, value.length() - 1); + } + return value; } From 9844f0f794565142435b525c443fcbe3885cb378 Mon Sep 17 00:00:00 2001 From: Peter Siegmund Date: Tue, 7 Jul 2015 10:30:38 +0200 Subject: [PATCH 2/8] Bug 3067 - Consistent server url --- .../res/xml/preference_general.xml | 2 +- .../racecommittee/app/AppPreferences.java | 10 ---- .../preference/GeneralPreferenceFragment.java | 2 - .../app/ui/views/UrlEditTextPreference.java | 51 +++++++++++++++++++ 4 files changed, 52 insertions(+), 13 deletions(-) create mode 100644 mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/UrlEditTextPreference.java diff --git a/mobile/com.sap.sailing.racecommittee.app/res/xml/preference_general.xml b/mobile/com.sap.sailing.racecommittee.app/res/xml/preference_general.xml index fe27c5faf7c..49e16616365 100644 --- a/mobile/com.sap.sailing.racecommittee.app/res/xml/preference_general.xml +++ b/mobile/com.sap.sailing.racecommittee.app/res/xml/preference_general.xml @@ -10,7 +10,7 @@ android:defaultValue="@string/empty" android:key="@string/preference_identifier_key" android:title="@string/device_identifier"/> - diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppPreferences.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppPreferences.java index 3c1a608e6b9..534a6e3e78b 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppPreferences.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppPreferences.java @@ -252,16 +252,6 @@ public class AppPreferences { return "http://localhost:8889"; } - // add missing protocol - if (!value.startsWith("http://") && !value.startsWith("https://")) { - value = "http://" + value; - } - - // remove trailing slash - if (value.endsWith("/")) { - value = value.substring(0, value.length() - 1); - } - return value; } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/preference/GeneralPreferenceFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/preference/GeneralPreferenceFragment.java index 6b3acea2d5e..1af2762450f 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/preference/GeneralPreferenceFragment.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/preference/GeneralPreferenceFragment.java @@ -88,8 +88,6 @@ public class GeneralPreferenceFragment extends BasePreferenceFragment { setupServerUrlBox(); setupSyncQRCodeButton(); setupForceUpdateButton(); - - bindPreferenceSummaryToValue(findPreference(R.string.preference_server_url_key)); } private void setupIdentifierBox() { diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/UrlEditTextPreference.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/UrlEditTextPreference.java new file mode 100644 index 00000000000..9298304ec8d --- /dev/null +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/UrlEditTextPreference.java @@ -0,0 +1,51 @@ +package com.sap.sailing.racecommittee.app.ui.views; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build; +import android.preference.EditTextPreference; +import android.util.AttributeSet; + +public class UrlEditTextPreference extends EditTextPreference { + + public UrlEditTextPreference(Context context) { + super(context); + } + + public UrlEditTextPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public UrlEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public UrlEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + @Override + public void setText(String text) { + super.setText(normalizeUrl(text)); + } + + private String normalizeUrl(String url) { + // add missing protocol + if (!url.startsWith("http://") && !url.startsWith("https://")) { + url = "http://" + url; + } + + // remove trailing slash + if (url.endsWith("/")) { + url = url.substring(0, url.length() - 1); + } + + return url; + } + + @Override + public CharSequence getSummary() { + return getText(); + } +} From cf3e8ab51c462175008d3c06787b60f11e684524 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sat, 18 Jul 2015 15:13:24 +0200 Subject: [PATCH 3/8] fixing bug 3134: NPE in GetFinishedRacesAction --- .../gwt/ui/shared/dispatch/event/SimpleCompetitorDTO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/SimpleCompetitorDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/SimpleCompetitorDTO.java index 37ea70a2ae7..bfffd5de208 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/SimpleCompetitorDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/dispatch/event/SimpleCompetitorDTO.java @@ -26,7 +26,7 @@ public class SimpleCompetitorDTO extends NamedDTO implements Serializable { final Nationality nationality = competitor.getTeam().getNationality(); CountryCode countryCode = nationality == null ? null : nationality.getCountryCode(); this.sailID = competitor.getBoat().getSailID(); - this.twoLetterIsoCountryCode = countryCode.getTwoLetterISOCode(); + this.twoLetterIsoCountryCode = countryCode == null ? null : countryCode.getTwoLetterISOCode(); this.flagImageURL = competitor.getFlagImage() == null ? null : competitor.getFlagImage().toString(); } From fa77190656edb424f019d6b75ae6df4d4173c799 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sat, 18 Jul 2015 15:58:35 +0200 Subject: [PATCH 4/8] fixed finish line condition --- .../com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java | 2 +- .../com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java index 6b5d10c274d..f9777db99f2 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java @@ -1407,7 +1407,7 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe // draw the finish line final Position finishLineLeftPosition = courseDTO.getFinishMarkPositions().get(0); final Position finishLineRightPosition = courseDTO.getFinishMarkPositions().get(1); - if (courseDTO.startLineAngleToCombinedWind != null) { + if (courseDTO.finishLineAngleToCombinedWind != null) { finishLineAdvantageText.replace(0, finishLineAdvantageText.length(), " "+stringMessages.lineAngleToWindAndAdvantage( NumberFormat.getFormat("0.0").format(courseDTO.finishLineLengthInMeters), NumberFormat.getFormat("0.0").format(Math.abs(courseDTO.finishLineAngleToCombinedWind)), diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java index 7d9e1c75e65..1b6e082d5db 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java @@ -58,6 +58,7 @@ public class RaceBoardEntryPoint extends AbstractSailingEntryPoint { @Override protected void doOnModuleLoad() { + GWT.debugger(); super.doOnModuleLoad(); EntryPointHelper.registerASyncService((ServiceDefTarget) mediaService, RemoteServiceMappingConstants.mediaServiceRemotePath); // read mandatory parameters From 30b4082933c409183b96b61d2c350bf19d3f5be9 Mon Sep 17 00:00:00 2001 From: fmittag Date: Sat, 18 Jul 2015 16:38:17 +0200 Subject: [PATCH 5/8] used currentLegNo and totalLegCount of CourseDTO to compute the conditions to show the start and finish line --- .../gwt/ui/client/shared/racemap/RaceMap.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java index 6b5d10c274d..4addc445162 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java @@ -1376,11 +1376,9 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe }; private void showStartAndFinishAndCourseMiddleLines(final CoursePositionsDTO courseDTO) { +// Window.alert("legs" + courseDTO.currentLegNumber + "/" + courseDTO.totalLegsCount); if (map != null && courseDTO != null && courseDTO.course != null && courseDTO.course.waypoints != null && !courseDTO.course.waypoints.isEmpty()) { - com.sap.sse.common.Util.Pair leadingVisibleCompetitorInfo = getFarthestAheadVisibleCompetitorWithOneBasedLegNumber(getCompetitorsToShow()); - int oneBasedLegOfLeadingCompetitor = leadingVisibleCompetitorInfo == null ? -1 : leadingVisibleCompetitorInfo.getA(); - int numberOfLegs = courseDTO.course.waypoints.size()-1; // draw the start line final WaypointDTO startWaypoint = courseDTO.course.waypoints.get(0); updateCountdownCanvas(startWaypoint); @@ -1397,8 +1395,8 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe } startLine = showOrRemoveOrUpdateLine(startLine, /* showLine */ courseDTO.getStartMarkPositions() != null && courseDTO.getStartMarkPositions().size() == 2 && - ((oneBasedLegOfLeadingCompetitor <= 1 && - settings.getHelpLinesSettings().isVisible(HelpLineTypes.STARTLINE)) || + ((courseDTO.currentLegNumber <= 1 && + settings.getHelpLinesSettings().isVisible(HelpLineTypes.STARTLINE)) || settings.getHelpLinesSettings().isVisible(HelpLineTypes.COURSEGEOMETRY)), startLineLeftPosition, startLineRightPosition, startLineInfoProvider, "#ffffff"); // TODO bug3027: show SmallTransparentInfoOverlay in addition to tooltip if course geometry option is true; remove it if option is false @@ -1417,7 +1415,8 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe finishLineAdvantageText.delete(0, finishLineAdvantageText.length()); } finishLine = showOrRemoveOrUpdateLine(finishLine, /* showLine */ courseDTO.getFinishMarkPositions() != null && courseDTO.getFinishMarkPositions().size() == 2 && - (oneBasedLegOfLeadingCompetitor > 0 && oneBasedLegOfLeadingCompetitor == numberOfLegs && settings.getHelpLinesSettings().isVisible(HelpLineTypes.FINISHLINE)) + (courseDTO.currentLegNumber == courseDTO.totalLegsCount && + settings.getHelpLinesSettings().isVisible(HelpLineTypes.FINISHLINE)) || settings.getHelpLinesSettings().isVisible(HelpLineTypes.COURSEGEOMETRY), finishLineLeftPosition, finishLineRightPosition, finishLineInfoProvider, "#000000"); // the control point pairs for which we already decided whether or not @@ -1430,8 +1429,8 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe boolean showCourseMiddleLine = keysAlreadyHandled.containsKey(key) && keysAlreadyHandled.get(key).getA() || settings.getHelpLinesSettings().isVisible(HelpLineTypes.COURSEGEOMETRY) || (settings.getHelpLinesSettings().isVisible(HelpLineTypes.COURSEMIDDLELINE) - && oneBasedLegOfLeadingCompetitor > 0 - && oneBasedLegOfLeadingCompetitor-1 == zeroBasedIndexOfStartWaypoint); + && courseDTO.currentLegNumber > 0 + && courseDTO.currentLegNumber-1 == zeroBasedIndexOfStartWaypoint); keysAlreadyHandled.put(key, new Pair<>(showCourseMiddleLine, zeroBasedIndexOfStartWaypoint)); } Set> keysToConsider = new HashSet<>(keysAlreadyHandled.keySet()); From bfd0cc991f24b9ec44f7b0d049e6e6d5c0137c51 Mon Sep 17 00:00:00 2001 From: fmittag Date: Sat, 18 Jul 2015 16:39:28 +0200 Subject: [PATCH 6/8] removed debug line from code --- .../com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java | 1 - 1 file changed, 1 deletion(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java index 4addc445162..660959402d5 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java @@ -1376,7 +1376,6 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe }; private void showStartAndFinishAndCourseMiddleLines(final CoursePositionsDTO courseDTO) { -// Window.alert("legs" + courseDTO.currentLegNumber + "/" + courseDTO.totalLegsCount); if (map != null && courseDTO != null && courseDTO.course != null && courseDTO.course.waypoints != null && !courseDTO.course.waypoints.isEmpty()) { // draw the start line From 995ea8df6dee823be47da4004c949602925cae0f Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sat, 18 Jul 2015 16:45:41 +0200 Subject: [PATCH 7/8] bug3133: the problem was that due to the refactoring of line drawing positions at index 0 and 1 were tried to obtain for both start/finish line --- .../gwt/ui/client/shared/racemap/RaceMap.java | 18 ++++++++---------- .../gwt/ui/raceboard/RaceBoardEntryPoint.java | 1 - 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java index f9777db99f2..17c39678c82 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java @@ -1384,8 +1384,9 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe // draw the start line final WaypointDTO startWaypoint = courseDTO.course.waypoints.get(0); updateCountdownCanvas(startWaypoint); - final Position startLineLeftPosition = courseDTO.getStartMarkPositions().get(0); - final Position startLineRightPosition = courseDTO.getStartMarkPositions().get(1); + final int numberOfStartWaypointMarks = courseDTO.getStartMarkPositions() == null ? 0 : courseDTO.getStartMarkPositions().size(); + final Position startLineLeftPosition = numberOfStartWaypointMarks == 0 ? null : courseDTO.getStartMarkPositions().get(0); + final Position startLineRightPosition = numberOfStartWaypointMarks < 2 ? null : courseDTO.getStartMarkPositions().get(1); if (courseDTO.startLineAngleToCombinedWind != null) { startLineAdvantageText.replace(0, startLineAdvantageText.length(), " "+stringMessages.lineAngleToWindAndAdvantage( NumberFormat.getFormat("0.0").format(courseDTO.startLineLengthInMeters), @@ -1395,18 +1396,15 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe } else { startLineAdvantageText.delete(0, startLineAdvantageText.length()); } - startLine = showOrRemoveOrUpdateLine(startLine, /* showLine */ courseDTO.getStartMarkPositions() != null && - courseDTO.getStartMarkPositions().size() == 2 && + startLine = showOrRemoveOrUpdateLine(startLine, /* showLine */ numberOfStartWaypointMarks == 2 && ((oneBasedLegOfLeadingCompetitor <= 1 && settings.getHelpLinesSettings().isVisible(HelpLineTypes.STARTLINE)) || settings.getHelpLinesSettings().isVisible(HelpLineTypes.COURSEGEOMETRY)), startLineLeftPosition, startLineRightPosition, startLineInfoProvider, "#ffffff"); - // TODO bug3027: show SmallTransparentInfoOverlay in addition to tooltip if course geometry option is true; remove it if option is false - // TODO bug3027: show *all* course middle lines if course geometry option is true - // draw the finish line - final Position finishLineLeftPosition = courseDTO.getFinishMarkPositions().get(0); - final Position finishLineRightPosition = courseDTO.getFinishMarkPositions().get(1); + final int numberOfFinishWaypointMarks = courseDTO.getFinishMarkPositions() == null ? 0 : courseDTO.getFinishMarkPositions().size(); + final Position finishLineLeftPosition = numberOfFinishWaypointMarks == 0 ? null : courseDTO.getFinishMarkPositions().get(0); + final Position finishLineRightPosition = numberOfFinishWaypointMarks < 2 ? null : courseDTO.getFinishMarkPositions().get(1); if (courseDTO.finishLineAngleToCombinedWind != null) { finishLineAdvantageText.replace(0, finishLineAdvantageText.length(), " "+stringMessages.lineAngleToWindAndAdvantage( NumberFormat.getFormat("0.0").format(courseDTO.finishLineLengthInMeters), @@ -1416,7 +1414,7 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe } else { finishLineAdvantageText.delete(0, finishLineAdvantageText.length()); } - finishLine = showOrRemoveOrUpdateLine(finishLine, /* showLine */ courseDTO.getFinishMarkPositions() != null && courseDTO.getFinishMarkPositions().size() == 2 && + finishLine = showOrRemoveOrUpdateLine(finishLine, /* showLine */ numberOfFinishWaypointMarks == 2 && (oneBasedLegOfLeadingCompetitor > 0 && oneBasedLegOfLeadingCompetitor == numberOfLegs && settings.getHelpLinesSettings().isVisible(HelpLineTypes.FINISHLINE)) || settings.getHelpLinesSettings().isVisible(HelpLineTypes.COURSEGEOMETRY), finishLineLeftPosition, finishLineRightPosition, finishLineInfoProvider, "#000000"); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java index 1b6e082d5db..7d9e1c75e65 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java @@ -58,7 +58,6 @@ public class RaceBoardEntryPoint extends AbstractSailingEntryPoint { @Override protected void doOnModuleLoad() { - GWT.debugger(); super.doOnModuleLoad(); EntryPointHelper.registerASyncService((ServiceDefTarget) mediaService, RemoteServiceMappingConstants.mediaServiceRemotePath); // read mandatory parameters From a2b67908176b2765160123a24fd0230145d71f74 Mon Sep 17 00:00:00 2001 From: fmittag Date: Sat, 18 Jul 2015 17:01:10 +0200 Subject: [PATCH 8/8] fix for missing advantage line for finishing boats --- .../sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java index 660959402d5..b096efde3bf 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java @@ -1196,10 +1196,10 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe // this only works because the quickRanks are sorted for (Entry competitorsByWindwardDistanceTraveledAndOneBasedLegNumber : competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber.entrySet()) { - if (Util.contains(competitorsToShow, competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getKey())) { + if (Util.contains(competitorsToShow, competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getKey()) && + competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getValue() != null) { leadingCompetitorDTO = competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getKey(); - legOfLeaderCompetitor = competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getValue() == null ? - 0 : competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getValue(); + legOfLeaderCompetitor = competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getValue(); return new com.sap.sse.common.Util.Pair(legOfLeaderCompetitor, leadingCompetitorDTO); } }