Merge branch 'master' into test

This commit is contained in:
Axel Uhl committed 2011-06-19 14:18:28 +02:00
commit 33565b676a
3 files changed
+31 -20

No files matched your search

@@ -2,11 +2,13 @@ package com.sap.sailing.domain.tractracadapter.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import com.maptrack.client.io.TypeController;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Course;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.TimePoint;
@@ -15,6 +17,7 @@ import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.tracking.DynamicTrackedEvent;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tractracadapter.DomainFactory;
import com.sap.sailing.util.Util.Triple;
import com.tractrac.clientmodule.ControlPoint;
@@ -64,24 +67,26 @@ public class MarkPassingReceiver extends AbstractReceiverWithQueue<RaceCompetito
DynamicTrackedRace trackedRace = trackedEvent.getTrackedRace(getDomainFactory().getRaceDefinition(event
.getA().getRace()));
Course course = trackedRace.getRace().getCourse();
Iterable<Waypoint> waypoints = course.getWaypoints();
Map<com.sap.sailing.domain.base.ControlPoint, MarkPassing> passingsByControlPoint = new HashMap<com.sap.sailing.domain.base.ControlPoint, MarkPassing>();
Iterator<Waypoint> waypointsIter = course.getWaypoints().iterator();
Map<Waypoint, MarkPassing> passingsByWaypoint = new HashMap<Waypoint, MarkPassing>();
// Note: the entries always describe all mark passings for the competitor so far in the current race in order
for (MarkPassingsData.Entry passing : event.getB().getPassings()) {
ControlPoint controlPointPassed = passing.getControlPoint();
com.sap.sailing.domain.base.ControlPoint domainControlPoint = getDomainFactory().getControlPoint(controlPointPassed);
Waypoint passed = findWaypointForControlPoint(waypoints, domainControlPoint);
Waypoint passed = findWaypointForControlPoint(trackedRace, waypointsIter, domainControlPoint,
getDomainFactory().getCompetitor(event.getA().getCompetitor()));
if (passed != null) {
TimePoint time = new MillisecondsTimePoint(passing.getTimestamp());
MarkPassing markPassing = getDomainFactory().createMarkPassing(event.getA().getCompetitor(), passed, time);
passingsByControlPoint.put(domainControlPoint, markPassing);
TimePoint time = new MillisecondsTimePoint(passing.getTimestamp());
MarkPassing markPassing = getDomainFactory().createMarkPassing(event.getA().getCompetitor(), passed,
time);
passingsByWaypoint.put(passed, markPassing);
} else {
logger.warning("Didn't find waypoint in course "+course+" for mark passing around "+passing.getControlPoint());
}
}
List<MarkPassing> markPassings = new ArrayList<MarkPassing>();
for (Waypoint waypoint : waypoints) {
MarkPassing passing = passingsByControlPoint.get(waypoint.getControlPoint());
for (Waypoint waypoint : course.getWaypoints()) {
MarkPassing passing = passingsByWaypoint.get(waypoint);
if (passing != null) {
markPassings.add(passing);
}
@@ -89,8 +94,14 @@ public class MarkPassingReceiver extends AbstractReceiverWithQueue<RaceCompetito
trackedRace.updateMarkPassings(getDomainFactory().getCompetitor(event.getA().getCompetitor()), markPassings);
}
private Waypoint findWaypointForControlPoint(Iterable<Waypoint> waypoints, com.sap.sailing.domain.base.ControlPoint domainControlPoint) {
for (Waypoint waypoint : waypoints) {
/**
* Starts searching in <code>waypointsIter</code> for a waypoint that has the given <code>controlPoint</code>.
* The <code>waypointsIter</code> is advanced to that point.
*/
private Waypoint findWaypointForControlPoint(TrackedRace trackedRace, Iterator<Waypoint> waypointsIter,
com.sap.sailing.domain.base.ControlPoint domainControlPoint, Competitor competitor) {
while (waypointsIter.hasNext()) {
Waypoint waypoint = waypointsIter.next();
if (waypoint.getControlPoint() == domainControlPoint) {
return waypoint;
}
@@ -83,21 +83,22 @@ public class TrackedLegImpl implements TrackedLeg, RaceChangeListener<Competitor
*/
protected List<TrackedLegOfCompetitor> getCompetitorTracksOrderedByRank(TimePoint timePoint) {
synchronized (competitorTracksOrderedByRank) {
List<TrackedLegOfCompetitor> rankecCompetitorList = competitorTracksOrderedByRank.get(timePoint);
if (rankecCompetitorList == null) {
rankecCompetitorList = new ArrayList<TrackedLegOfCompetitor>();
List<TrackedLegOfCompetitor> rankedCompetitorList = competitorTracksOrderedByRank.get(timePoint);
if (rankedCompetitorList == null) {
rankedCompetitorList = new ArrayList<TrackedLegOfCompetitor>();
for (TrackedLegOfCompetitor competitorLeg : getTrackedLegsOfCompetitors()) {
rankecCompetitorList.add(competitorLeg);
rankedCompetitorList.add(competitorLeg);
}
Collections.sort(rankecCompetitorList, new WindwardToGoComparator(this, timePoint));
competitorTracksOrderedByRank.put(timePoint, Collections.unmodifiableList(rankecCompetitorList));
if (Util.size(getTrackedLegsOfCompetitors()) != rankecCompetitorList.size()) {
Collections.sort(rankedCompetitorList, new WindwardToGoComparator(this, timePoint));
rankedCompetitorList = Collections.unmodifiableList(rankedCompetitorList);
competitorTracksOrderedByRank.put(timePoint, rankedCompetitorList);
if (Util.size(getTrackedLegsOfCompetitors()) != rankedCompetitorList.size()) {
logger.warning("Number of competitors in leg (" + Util.size(getTrackedLegsOfCompetitors())
+ ") differs from number of competitors in race ("
+ Util.size(getTrackedRace().getRace().getCompetitors()) + ")");
}
}
return rankecCompetitorList;
return rankedCompetitorList;
}
}
@@ -182,7 +182,6 @@ public class ModeratorApp extends Servlet {
private void showRace(HttpServletRequest req, HttpServletResponse resp) throws IOException, InterruptedException {
long start = System.currentTimeMillis();
Event event = getEvent(req);
TrackedRace trackedRace = getTrackedRace(req);
if (trackedRace == null) {
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Race not found");
@@ -242,7 +241,7 @@ public class ModeratorApp extends Servlet {
}
JSONArray jsonCompetitors = new JSONArray();
Map<Competitor, Integer> ranks = leg.getRanks(timePoint);
for (Competitor competitor : event.getCompetitors()) {
for (Competitor competitor : trackedRace.getRace().getCompetitors()) {
JSONObject jsonCompetitorInLeg = new JSONObject();
TrackedLegOfCompetitor trackedLegOfCompetitor = leg.getTrackedLeg(competitor);
if (trackedLegOfCompetitor != null) {