map boat class names consistently to BoatClassMasterdata to find the correct BoatClassVectorGraphics

This commit is contained in:
Axel Uhl committed 2015-01-11 17:05:34 +01:00
1 parent 1737d42f00
commit 4eee3e7aad
6 files changed
+48 -70

No files matched your search

@@ -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<String, BoatClassVectorGraphics> boatVectorGraphicsMap;
private static Map<String, BoatClassVectorGraphics> compatibleBoatVectorGraphicsMap;
private static Map<BoatClassMasterdata, BoatClassVectorGraphics> compatibleBoatVectorGraphicsMap;
private static BoatClassVectorGraphics defaultBoatVectorGraphics;
static {
boatVectorGraphicsMap = new HashMap<String, BoatClassVectorGraphics>();
compatibleBoatVectorGraphicsMap = new HashMap<String, BoatClassVectorGraphics>();
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;
}
@@ -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<String> compatibleBoatClassNames;
private final Set<BoatClassMasterdata> 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<String>();
for (String compatibleBoatClass : compatibleBoatClassNames) {
this.compatibleBoatClassNames.add(compatibleBoatClass);
this.compatibleBoatClasses = new HashSet<>();
for (BoatClassMasterdata compatibleBoatClass : compatibleBoatClasses) {
this.compatibleBoatClasses.add(compatibleBoatClass);
}
}
public Set<BoatClassMasterdata> 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<String> getCompatibleBoatClassNames() {
return compatibleBoatClassNames;
public boolean isBoatClassNameCompatible(String boatClassName) {
return compatibleBoatClasses.contains(BoatClassMasterdata.resolveBoatClass(boatClassName));
}
public double getMinHullLengthInPx() {
@@ -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
@@ -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
@@ -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
@@ -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