From 72ed2fd1978b9ba78acdbc5021ec303c10cec9e9 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 17 Sep 2019 15:16:14 +0200 Subject: [PATCH] avoid NPEs in case no certificate or no corrected time available Change-Id: I1ba8065b4d2345ec347e5c2dd35d9cc231d4a311 --- .../sailing/domain/common/BoatClassMasterdata.java | 4 ++-- .../orc/impl/ORCPerformanceCurveRankingMetric.java | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java index 25adf4fa9dc..ceafc97e647 100755 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/BoatClassMasterdata.java @@ -133,14 +133,14 @@ public enum BoatClassMasterdata { X_99 ("X-99", true, 9.96, 2.95, BoatHullType.MONOHULL, true, "X99"), // multi-class "boat classes"; to be replaced at some later point in time by something like a RegattaClass - ORC ("ORC", true, 13.83, 3.91, BoatHullType.MONOHULL, true), + ORC ("ORC", true, 13.83, 3.91, BoatHullType.MONOHULL, true, "ORC I", "ORC II", "ORC III", "ORC IV", "ORC III+IV"), ORC_CLUB ("ORC Club", true, 13.83, 3.91, BoatHullType.MONOHULL, true), ORC_INTERNATIONAL ("ORC International", true, 13.83, 3.91, BoatHullType.MONOHULL, true, "ORC Int."), // Performance Handicap Racing Fleet (PHRF) is a handicap system used for racing in North America PHRF ("PHRF", true, 13.83, 3.91, BoatHullType.MONOHULL, true), - // a 'boat class' to track runners at runnng events + // a 'boat class' to track runners at running events RUNNING ("Runner", true, 1.0, 1.0, BoatHullType.NO_HULL, false, "Running"); private final String displayName; diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPerformanceCurveRankingMetric.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPerformanceCurveRankingMetric.java index fed261cf86e..9d819c8ef0b 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPerformanceCurveRankingMetric.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPerformanceCurveRankingMetric.java @@ -475,7 +475,7 @@ public class ORCPerformanceCurveRankingMetric extends AbstractRankingMetric { competitorRankingInfo.put(competitor, new CompetitorRankingInfoImpl( timePoint, competitor, getWindwardDistanceTraveled(competitor, timePoint, cache), actualRaceDuration, correctedTime, - actualRaceDuration.plus(correctedTime), + correctedTime == null ? null : actualRaceDuration.plus(correctedTime), correctedTime)); } } @@ -497,9 +497,13 @@ public class ORCPerformanceCurveRankingMetric extends AbstractRankingMetric { final Competitor leader = rankingInfo.getLeaderByCorrectedEstimatedTimeToCompetitorFarthestAhead(); try { final ORCPerformanceCurve competitorPerformanceCurve = getPerformanceCurveForPartialCourse(competitor, rankingInfo.getTimePoint(), cache); - final Speed impliedWindOfLeader = getImpliedWind(leader, rankingInfo.getTimePoint(), cache); - final Duration allowanceForLeaderInCompetitorsPerformanceCurve = competitorPerformanceCurve.getAllowancePerCourse(impliedWindOfLeader); - result = actualRaceDuration.minus(allowanceForLeaderInCompetitorsPerformanceCurve); + if (competitorPerformanceCurve == null) { + result = null; + } else { + final Speed impliedWindOfLeader = getImpliedWind(leader, rankingInfo.getTimePoint(), cache); + final Duration allowanceForLeaderInCompetitorsPerformanceCurve = competitorPerformanceCurve.getAllowancePerCourse(impliedWindOfLeader); + result = actualRaceDuration.minus(allowanceForLeaderInCompetitorsPerformanceCurve); + } } catch (FunctionEvaluationException | MaxIterationsExceededException e) { logger.log(Level.WARNING, "Problem evaluating performance curve for competitor "+competitor+" for time point "+rankingInfo.getTimePoint(), e); result = null;