diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java index b86bd2d687d..21d56001c48 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java @@ -55,7 +55,6 @@ import difflib.PatchFailedException; */ public class DomainFactoryImpl implements DomainFactory { private final Map raceIDToEventCache; - private final Map boatIDToCompetitorCache; private final Map, ControlPoint> controlPointCache; private final Map olympicClassesByID; private final BoatClass unknownBoatClass; @@ -64,7 +63,6 @@ public class DomainFactoryImpl implements DomainFactory { public DomainFactoryImpl(com.sap.sailing.domain.base.DomainFactory baseDomainFactory) { this.baseDomainFactory = baseDomainFactory; raceIDToEventCache = new HashMap(); - boatIDToCompetitorCache = new HashMap(); controlPointCache = new HashMap, ControlPoint>(); olympicClassesByID = new HashMap(); /* @@ -102,12 +100,12 @@ public class DomainFactoryImpl implements DomainFactory { @Override public Competitor getCompetitorByBoatID(String boatID) { - return boatIDToCompetitorCache.get(boatID); + return baseDomainFactory.getExistingCompetitorById(boatID); } @Override public Competitor getOrCreateCompetitor(com.sap.sailing.domain.swisstimingadapter.Competitor competitor, BoatClass boatClass) { - Competitor result = boatIDToCompetitorCache.get(competitor.getBoatID()); + Competitor result = getCompetitorByBoatID(competitor.getBoatID()); if (result == null) { Boat boat = new BoatImpl(competitor.getName(), boatClass, competitor.getBoatID()); List teamMembers = new ArrayList(); @@ -116,8 +114,7 @@ public class DomainFactoryImpl implements DomainFactory { /* dateOfBirth */ null, teamMemberName.trim())); } Team team = new TeamImpl(competitor.getName(), teamMembers, /* coach */ null); - result = new com.sap.sailing.domain.base.impl.CompetitorImpl(competitor.getBoatID(), competitor.getName(), team, boat); - boatIDToCompetitorCache.put(competitor.getBoatID(), result); + result = baseDomainFactory.createCompetitor(competitor.getBoatID(), competitor.getName(), team, boat); } return result; } diff --git a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java index 55486fedb8a..5c78f674230 100644 --- a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java +++ b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/DomainFactoryImpl.java @@ -30,7 +30,6 @@ import com.sap.sailing.domain.base.RaceDefinition; import com.sap.sailing.domain.base.Team; import com.sap.sailing.domain.base.Waypoint; import com.sap.sailing.domain.base.impl.BoatImpl; -import com.sap.sailing.domain.base.impl.CompetitorImpl; import com.sap.sailing.domain.base.impl.CourseImpl; import com.sap.sailing.domain.base.impl.EventImpl; import com.sap.sailing.domain.base.impl.KilometersPerHourSpeedWithBearingImpl; @@ -80,9 +79,6 @@ public class DomainFactoryImpl implements DomainFactory { private final Map controlPointCache = new HashMap(); - private final Map competitorCache = - new HashMap(); - private final Map personCache = new HashMap(); private final Map teamCache = new HashMap(); @@ -167,18 +163,15 @@ public class DomainFactoryImpl implements DomainFactory { @Override public Competitor getOrCreateCompetitor(com.tractrac.clientmodule.Competitor competitor) { - synchronized (competitorCache) { - Competitor result = competitorCache.get(competitor); - if (result == null) { - BoatClass boatClass = getOrCreateBoatClass(competitor.getCompetitorClass()); - Nationality nationality = getOrCreateNationality(competitor.getNationality()); - Team team = getOrCreateTeam(competitor.getName(), nationality); - Boat boat = new BoatImpl(competitor.getShortName(), boatClass, competitor.getShortName()); - result = new CompetitorImpl(competitor.getId(), competitor.getName(), team, boat); - competitorCache.put(competitor, result); - } - return result; + Competitor result = baseDomainFactory.getExistingCompetitorById(competitor.getId()); + if (result == null) { + BoatClass boatClass = getOrCreateBoatClass(competitor.getCompetitorClass()); + Nationality nationality = getOrCreateNationality(competitor.getNationality()); + Team team = getOrCreateTeam(competitor.getName(), nationality); + Boat boat = new BoatImpl(competitor.getShortName(), boatClass, competitor.getShortName()); + result = baseDomainFactory.createCompetitor(competitor.getId(), competitor.getName(), team, boat); } + return result; } @Override diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/DomainFactory.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/DomainFactory.java index 255a6213f3e..9a9ea0960e4 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/DomainFactory.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/DomainFactory.java @@ -1,5 +1,7 @@ package com.sap.sailing.domain.base; +import java.io.Serializable; + import com.sap.sailing.domain.base.impl.DomainFactoryImpl; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.tracking.MarkPassing; @@ -22,4 +24,8 @@ public interface DomainFactory { MarkPassing createMarkPassing(TimePoint timePoint, Waypoint waypoint, Competitor competitor); BoatClass getOrCreateBoatClass(String name, boolean typicallyStartsUpwind); + + Competitor getExistingCompetitorById(Serializable competitorId); + + Competitor createCompetitor(Serializable id, String name, Team team, Boat boat); } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java index d5505cdb39d..edc610499af 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java @@ -1,9 +1,11 @@ package com.sap.sailing.domain.base.impl; import java.awt.TrayIcon.MessageType; +import java.io.Serializable; import java.util.HashMap; import java.util.Map; +import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Buoy; import com.sap.sailing.domain.base.Competitor; @@ -11,6 +13,7 @@ import com.sap.sailing.domain.base.ControlPoint; import com.sap.sailing.domain.base.DomainFactory; import com.sap.sailing.domain.base.Gate; import com.sap.sailing.domain.base.Nationality; +import com.sap.sailing.domain.base.Team; import com.sap.sailing.domain.base.Waypoint; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.tracking.MarkPassing; @@ -26,11 +29,14 @@ public class DomainFactoryImpl implements DomainFactory { private final Map buoyCache; private final Map boatClassCache; + + private final Map competitorCache; public DomainFactoryImpl() { nationalityCache = new HashMap(); buoyCache = new HashMap(); boatClassCache = new HashMap(); + competitorCache = new HashMap(); } @Override @@ -87,4 +93,16 @@ public class DomainFactoryImpl implements DomainFactory { } } + @Override + public Competitor getExistingCompetitorById(Serializable competitorId) { + return competitorCache.get(competitorId); + } + + @Override + public Competitor createCompetitor(Serializable id, String name, Team team, Boat boat) { + Competitor result = new CompetitorImpl(id, name, team, boat); + competitorCache.put(id, result); + return result; + } + }