From 0c4926c7ae452e44908c4957a41103bef78e64c4 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 14 Nov 2011 22:56:14 +0100 Subject: [PATCH] some untested code for creating the basic domain objects from SwissTiming objects --- .../swisstimingadapter/DomainFactory.java | 2 +- .../impl/DomainFactoryImpl.java | 62 ++++++++++++++++++- .../impl/SwissTimingRaceTrackerImpl.java | 10 ++- 3 files changed, 67 insertions(+), 7 deletions(-) diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java index 70cb21bd6e8..d630f6a5b27 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java @@ -15,5 +15,5 @@ public interface DomainFactory { Competitor getOrCreateCompetitor(com.sap.sailing.domain.swisstimingadapter.Competitor competitor); - RaceDefinition createRaceDefinition(Event event, Race race, Course course); + RaceDefinition createRaceDefinition(Event event, Race race, StartList startList, Course course); } 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 5503a83e0f7..efa876928db 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 @@ -2,33 +2,46 @@ package com.sap.sailing.domain.swisstimingadapter.impl; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.base.ControlPoint; import com.sap.sailing.domain.base.Event; import com.sap.sailing.domain.base.Nationality; import com.sap.sailing.domain.base.Person; 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.BuoyImpl; +import com.sap.sailing.domain.base.impl.CourseImpl; import com.sap.sailing.domain.base.impl.EventImpl; +import com.sap.sailing.domain.base.impl.GateImpl; import com.sap.sailing.domain.base.impl.NationalityImpl; import com.sap.sailing.domain.base.impl.PersonImpl; +import com.sap.sailing.domain.base.impl.RaceDefinitionImpl; import com.sap.sailing.domain.base.impl.TeamImpl; +import com.sap.sailing.domain.base.impl.WaypointImpl; import com.sap.sailing.domain.swisstimingadapter.Course; import com.sap.sailing.domain.swisstimingadapter.DomainFactory; +import com.sap.sailing.domain.swisstimingadapter.Mark; import com.sap.sailing.domain.swisstimingadapter.Race; +import com.sap.sailing.domain.swisstimingadapter.StartList; +import com.sap.sailing.util.Util; public class DomainFactoryImpl implements DomainFactory { private final Map raceIDToEventCache; private final Map boatIDToCompetitorCache; + private final Map, ControlPoint> controlPointCache; private final Map nationalityCache; public DomainFactoryImpl() { raceIDToEventCache = new HashMap(); boatIDToCompetitorCache = new HashMap(); + controlPointCache = new HashMap, ControlPoint>(); nationalityCache = new HashMap(); } @@ -72,8 +85,51 @@ public class DomainFactoryImpl implements DomainFactory { } @Override - public RaceDefinition createRaceDefinition(Event event, Race race, Course course) { - // TODO implement SwissTiming DomainFactoryImpl.createRaceDefinition(Event, Race, Course) - return null; + public RaceDefinition createRaceDefinition(Event event, Race race, StartList startList, Course course) { + com.sap.sailing.domain.base.Course domainCourse = createCourse(race.getDescription(), course); + Iterable competitors = createCompetitorList(startList); + RaceDefinition result = new RaceDefinitionImpl(race.getDescription(), domainCourse, /* boatClass */ null, competitors); + event.addRace(result); + return result; + } + + private Iterable createCompetitorList(StartList startList) { + List result = new ArrayList(); + for (com.sap.sailing.domain.swisstimingadapter.Competitor swissTimingCompetitor : startList.getCompetitors()) { + Competitor domainCompetitor = getOrCreateCompetitor(swissTimingCompetitor); + result.add(domainCompetitor); + } + return result; + } + + private com.sap.sailing.domain.base.Course createCourse(String courseName, Course course) { + List waypoints = new ArrayList(); + for (Mark mark : course.getMarks()) { + ControlPoint controlPoint = getOrCreateControlPoint(mark.getDevices()); + Waypoint waypoint = new WaypointImpl(controlPoint); + waypoints.add(waypoint); + } + com.sap.sailing.domain.base.Course result = new CourseImpl(courseName, waypoints); + return result; + } + + private ControlPoint getOrCreateControlPoint(Iterable devices) { + ControlPoint result = controlPointCache.get(devices); + if (result == null) { + switch (Util.size(devices)) { + case 1: + result = new BuoyImpl(devices.iterator().next()); + break; + case 2: + Iterator buoyNameIter = devices.iterator(); + String left = buoyNameIter.next(); + String right = buoyNameIter.next(); + result = new GateImpl(new BuoyImpl(left), new BuoyImpl(right), left+"/"+right); + break; + default: + throw new RuntimeException("Don't know how to handle control points with number of devices neither 1 nor 2. Was "+Util.size(devices)); + } + } + return result; } } diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java index 30b1f643c7d..1ccfa9af478 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java @@ -159,7 +159,7 @@ public class SwissTimingRaceTrackerImpl implements SwissTimingRaceTracker, SailM assert course != null; // now we can create the RaceDefinition and most other things Race race = messageLoader.getRace(raceID); - final RaceDefinition raceDefinition = domainFactory.createRaceDefinition(event, race, course); + final RaceDefinition raceDefinition = domainFactory.createRaceDefinition(event, race, startList, course); trackedRace = getTrackedEvent().createTrackedRace(raceDefinition, windStore, WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND, GPSFixTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_SPEED, new DynamicRaceDefinitionSet() { @@ -174,8 +174,12 @@ public class SwissTimingRaceTrackerImpl implements SwissTimingRaceTracker, SailM @Override public void receivedCourseConfiguration(String raceID, Course course) { this.course = course; - if (startList != null) { - createRaceDefinition(raceID); + if (trackedRace == null) { + if (startList != null) { + createRaceDefinition(raceID); + } + } else { + // TODO update trackedRace with updated course } }