diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/BoatClassVectorGraphicsResolver.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/BoatClassVectorGraphicsResolver.java index e4738939e1c..35461bcf162 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/BoatClassVectorGraphicsResolver.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/BoatClassVectorGraphicsResolver.java @@ -3,6 +3,7 @@ package com.sap.sailing.gwt.ui.client.shared.racemap; import java.util.HashMap; import java.util.Map; +import com.sap.sailing.domain.common.BoatClassMasterdata; import com.sap.sailing.gwt.ui.shared.racemap.BoatClassVectorGraphics; import com.sap.sailing.gwt.ui.shared.racemap.Extreme40VectorGraphics; import com.sap.sailing.gwt.ui.shared.racemap.LaserVectorGraphics; @@ -14,42 +15,34 @@ import com.sap.sailing.gwt.ui.shared.racemap._49erVectorGraphics; * @author Frank Mittag (C5163874) */ public class BoatClassVectorGraphicsResolver { - private static Map boatVectorGraphicsMap; - private static Map compatibleBoatVectorGraphicsMap; + private static Map compatibleBoatVectorGraphicsMap; private static BoatClassVectorGraphics defaultBoatVectorGraphics; static { - boatVectorGraphicsMap = new HashMap(); - compatibleBoatVectorGraphicsMap = new HashMap(); + compatibleBoatVectorGraphicsMap = new HashMap<>(); - BoatClassVectorGraphics laser = new LaserVectorGraphics("470", "470er"); - BoatClassVectorGraphics _49er = new _49erVectorGraphics("49erFX", "49FX", "29er"); - BoatClassVectorGraphics extreme40 = new Extreme40VectorGraphics("Extreme", "D35"); - BoatClassVectorGraphics smallMultihull = new SmallMultihullVectorGraphics("Nacra 17", "Formula 16", "Formula 18", - "Hobie Wild Cat", "Hobie Tiger", "A-Catamaran", "Tornado"); - - defaultBoatVectorGraphics = laser; - boatVectorGraphicsMap.put(laser.getMainBoatClassName(), laser); - boatVectorGraphicsMap.put(_49er.getMainBoatClassName(), _49er); - boatVectorGraphicsMap.put(extreme40.getMainBoatClassName(), extreme40); - boatVectorGraphicsMap.put(smallMultihull.getMainBoatClassName(), smallMultihull); + BoatClassVectorGraphics laser = new LaserVectorGraphics(BoatClassMasterdata.LASER_INT, BoatClassMasterdata.LASER_RADIAL); + BoatClassVectorGraphics _49er = new _49erVectorGraphics(BoatClassMasterdata._49ER, BoatClassMasterdata._49ERFX, BoatClassMasterdata._29ER); + BoatClassVectorGraphics extreme40 = new Extreme40VectorGraphics(BoatClassMasterdata.EXTREME_40, BoatClassMasterdata.D_35); + BoatClassVectorGraphics smallMultihull = new SmallMultihullVectorGraphics(BoatClassMasterdata.NACRA_17, + BoatClassMasterdata.F_16, BoatClassMasterdata.F_18, BoatClassMasterdata.HOBIE_WILD_CAT, + BoatClassMasterdata.HOBIE_TIGER, BoatClassMasterdata.A_CAT, BoatClassMasterdata.TORNADO); + + defaultBoatVectorGraphics = laser; // TODO see bug 2571; this should be a slup-rigged icon working for 470, 505, J/70 etc. + for (BoatClassVectorGraphics g : new BoatClassVectorGraphics[] { laser, _49er, extreme40, smallMultihull }) { + for (BoatClassMasterdata b : g.getCompatibleBoatClasses()) { + compatibleBoatVectorGraphicsMap.put(b, g); + } + } } public static BoatClassVectorGraphics resolveBoatClassVectorGraphics(String boatClassName) { - BoatClassVectorGraphics result = defaultBoatVectorGraphics; - if (boatVectorGraphicsMap.containsKey(boatClassName)) { - result = boatVectorGraphicsMap.get(boatClassName); - } else if (compatibleBoatVectorGraphicsMap.containsKey(boatClassName)) { + BoatClassMasterdata resolvedBoatClass = BoatClassMasterdata.resolveBoatClass(boatClassName); + final BoatClassVectorGraphics result; + if (resolvedBoatClass != null && compatibleBoatVectorGraphicsMap.containsKey(boatClassName)) { result = compatibleBoatVectorGraphicsMap.get(boatClassName); } else { - // now try to find compatible boat class images - for (BoatClassVectorGraphics boatClassImageData : boatVectorGraphicsMap.values()) { - if (boatClassImageData.isBoatClassNameCompatible(boatClassName)) { - result = boatClassImageData; - compatibleBoatVectorGraphicsMap.put(boatClassName, boatClassImageData); - break; - } - } + result = defaultBoatVectorGraphics; } return result; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/BoatClassVectorGraphics.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/BoatClassVectorGraphics.java index c554a05aba2..381a2655c89 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/BoatClassVectorGraphics.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/BoatClassVectorGraphics.java @@ -1,9 +1,11 @@ package com.sap.sailing.gwt.ui.shared.racemap; -import java.util.ArrayList; -import java.util.List; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; import com.google.gwt.canvas.dom.client.Context2d; +import com.sap.sailing.domain.common.BoatClassMasterdata; import com.sap.sailing.domain.common.Color; import com.sap.sailing.domain.common.LegType; import com.sap.sailing.domain.common.Tack; @@ -33,20 +35,22 @@ public abstract class BoatClassVectorGraphics { private final double hullLengthInPx; private final double beamInPx; - private final String mainBoatClassName; - private final List compatibleBoatClassNames; + private final Set compatibleBoatClasses; - BoatClassVectorGraphics(String mainBoatClassName, double boatOverallLengthInPx, double boatBeamInPx, double boatHullLengthInPx, - String...compatibleBoatClassNames) { - this.mainBoatClassName = mainBoatClassName; + BoatClassVectorGraphics(double boatOverallLengthInPx, double boatBeamInPx, double boatHullLengthInPx, + BoatClassMasterdata... compatibleBoatClasses) { this.overallLengthInPx = boatOverallLengthInPx; this.beamInPx = boatBeamInPx; this.hullLengthInPx = boatHullLengthInPx; - this.compatibleBoatClassNames = new ArrayList(); - for (String compatibleBoatClass : compatibleBoatClassNames) { - this.compatibleBoatClassNames.add(compatibleBoatClass); + this.compatibleBoatClasses = new HashSet<>(); + for (BoatClassMasterdata compatibleBoatClass : compatibleBoatClasses) { + this.compatibleBoatClasses.add(compatibleBoatClass); } } + + public Set getCompatibleBoatClasses() { + return Collections.unmodifiableSet(compatibleBoatClasses); + } protected abstract void drawBoat(Context2d ctx, boolean isSelected, String color); @@ -128,31 +132,8 @@ public abstract class BoatClassVectorGraphics { return beamInPx; } - public boolean isBoatClassNameCompatible(String boatClass) { - boolean result = false; - // remove all white space characters - String boatClassToCheck = boatClass.replaceAll("\\s",""); - // remove all '-' characters - boatClassToCheck = boatClass.replaceAll("-",""); - if (mainBoatClassName.equalsIgnoreCase(boatClassToCheck)) { - result = true; - } else { - for (String compatibleName : compatibleBoatClassNames) { - if (compatibleName.equalsIgnoreCase(boatClassToCheck)) { - result = true; - break; - } - } - } - return result; - } - - public String getMainBoatClassName() { - return mainBoatClassName; - } - - public List getCompatibleBoatClassNames() { - return compatibleBoatClassNames; + public boolean isBoatClassNameCompatible(String boatClassName) { + return compatibleBoatClasses.contains(BoatClassMasterdata.resolveBoatClass(boatClassName)); } public double getMinHullLengthInPx() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/Extreme40VectorGraphics.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/Extreme40VectorGraphics.java index da546cbde4d..5412fbb511e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/Extreme40VectorGraphics.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/Extreme40VectorGraphics.java @@ -2,11 +2,12 @@ package com.sap.sailing.gwt.ui.shared.racemap; import com.google.gwt.canvas.dom.client.Context2d; import com.google.gwt.canvas.dom.client.Context2d.LineJoin; +import com.sap.sailing.domain.common.BoatClassMasterdata; public class Extreme40VectorGraphics extends BoatClassVectorGraphics { - public Extreme40VectorGraphics(String... compatibleBoatClassNames) { - super("EXTREME40", 1600, 760, 1220, compatibleBoatClassNames); + public Extreme40VectorGraphics(BoatClassMasterdata... compatibleBoatClasses) { + super(1600, 760, 1220, compatibleBoatClasses); } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/LaserVectorGraphics.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/LaserVectorGraphics.java index 8c8c1860dd7..b30244df06a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/LaserVectorGraphics.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/LaserVectorGraphics.java @@ -1,11 +1,12 @@ package com.sap.sailing.gwt.ui.shared.racemap; import com.google.gwt.canvas.dom.client.Context2d; +import com.sap.sailing.domain.common.BoatClassMasterdata; public class LaserVectorGraphics extends BoatClassVectorGraphics { - public LaserVectorGraphics(String... compatibleBoatClassNames) { - super("LASER", 423, 137, 423, compatibleBoatClassNames); + public LaserVectorGraphics(BoatClassMasterdata... compatibleBoatClasses) { + super(423, 137, 423, compatibleBoatClasses); } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/SmallMultihullVectorGraphics.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/SmallMultihullVectorGraphics.java index 1834d7427fa..b72bc864965 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/SmallMultihullVectorGraphics.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/SmallMultihullVectorGraphics.java @@ -2,11 +2,12 @@ package com.sap.sailing.gwt.ui.shared.racemap; import com.google.gwt.canvas.dom.client.Context2d; import com.google.gwt.canvas.dom.client.Context2d.LineJoin; +import com.sap.sailing.domain.common.BoatClassMasterdata; public class SmallMultihullVectorGraphics extends BoatClassVectorGraphics { - public SmallMultihullVectorGraphics(String... compatibleBoatClassNames) { - super("Multihull", 710, 260, 525, compatibleBoatClassNames); + public SmallMultihullVectorGraphics(BoatClassMasterdata... compatibleBoatClasses) { + super(710, 260, 525, compatibleBoatClasses); } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/_49erVectorGraphics.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/_49erVectorGraphics.java index 695517ae34b..1d049b3598d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/_49erVectorGraphics.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/_49erVectorGraphics.java @@ -2,11 +2,12 @@ package com.sap.sailing.gwt.ui.shared.racemap; import com.google.gwt.canvas.dom.client.Context2d; import com.google.gwt.canvas.dom.client.Context2d.LineJoin; +import com.sap.sailing.domain.common.BoatClassMasterdata; public class _49erVectorGraphics extends BoatClassVectorGraphics { - public _49erVectorGraphics(String... compatibleBoatClassNames) { - super("49ER", 499, 290, 499, compatibleBoatClassNames); + public _49erVectorGraphics(BoatClassMasterdata... compatibleBoatClasses) { + super(499, 290, 499, compatibleBoatClasses); } @Override