diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/DataRetriever.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/DataRetriever.java new file mode 100644 index 00000000000..dfe00b1e2d9 --- /dev/null +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/DataRetriever.java @@ -0,0 +1,11 @@ +package com.sap.sailing.datamining; + +import java.util.Collection; + +import com.sap.sailing.server.RacingEventService; + +public interface DataRetriever { + + public Collection retrieveData(RacingEventService racingEventService); + +} diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/GPSFixRetriever.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/GPSFixRetriever.java new file mode 100644 index 00000000000..0a04ce77442 --- /dev/null +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/GPSFixRetriever.java @@ -0,0 +1,5 @@ +package com.sap.sailing.datamining; + +public interface GPSFixRetriever extends DataRetriever { + +} diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/GPSFixRetrieverImpl.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/GPSFixRetrieverImpl.java new file mode 100644 index 00000000000..f3fae02572e --- /dev/null +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/GPSFixRetrieverImpl.java @@ -0,0 +1,96 @@ +package com.sap.sailing.datamining.impl; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import com.sap.sailing.datamining.GPSFixContext; +import com.sap.sailing.datamining.GPSFixRetriever; +import com.sap.sailing.datamining.GPSFixWithContext; +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.base.CourseArea; +import com.sap.sailing.domain.base.Fleet; +import com.sap.sailing.domain.base.Leg; +import com.sap.sailing.domain.base.RaceColumn; +import com.sap.sailing.domain.leaderboard.Leaderboard; +import com.sap.sailing.domain.leaderboard.LeaderboardGroup; +import com.sap.sailing.domain.tracking.GPSFixMoving; +import com.sap.sailing.domain.tracking.GPSFixTrack; +import com.sap.sailing.domain.tracking.TrackedLeg; +import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor; +import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sailing.server.RacingEventService; + +public class GPSFixRetrieverImpl implements GPSFixRetriever { + + + @Override + public Collection retrieveData(RacingEventService racingEventService) { + Collection data = new ArrayList(); + for (LeaderboardGroup leaderboardGroup : racingEventService.getLeaderboardGroups().values()) { + for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) { + CourseArea courseArea = leaderboard.getDefaultCourseArea(); + for (RaceColumn raceColumn : leaderboard.getRaceColumns()) { + for (Fleet fleet : raceColumn.getFleets()) { + TrackedRace trackedRace = raceColumn.getTrackedRace(fleet); + if (trackedRace != null) { + int legNumber = 1; + for (Leg leg : trackedRace.getRace().getCourse().getLegs()) { + TrackedLeg trackedLeg = trackedRace.getTrackedLeg(leg); + if (trackedLeg != null) { + for (Competitor competitor : trackedRace.getRace().getCompetitors()) { + data.addAll(retrieveDataFor(leaderboardGroup, leaderboard, courseArea, fleet, trackedRace, + trackedLeg, legNumber, competitor)); + } + legNumber++; + } + } + } + } + } + } + } + return data; + } + +// @Override +// public Collection retrieveData(RacingEventService racingEventService) { +// Collection data = new ArrayList(); +// for (Regatta regatta : racingEventService.getAllRegattas()) { +// TrackedRegatta trackedRegatta = racingEventService.getTrackedRegatta(regatta); +// if (trackedRegatta != null) { +// for (TrackedRace trackedRace : trackedRegatta.getTrackedRaces()) { +// if (trackedRace != null) { +// int legNumber = 1; +// for (Leg leg : trackedRace.getRace().getCourse().getLegs()) { +// for (Competitor competitor : trackedRace.getRace().getCompetitors()) { +// data.addAll(retrieveDataFor(trackedRace, leg, legNumber, competitor)); +// } +// legNumber++; +// } +// } +// } +// } +// } +// return data; +// } + + private Collection retrieveDataFor(LeaderboardGroup leaderboardGroup, Leaderboard leaderboard, CourseArea courseArea, Fleet fleet, TrackedRace trackedRace, TrackedLeg trackedLeg, int legNumber, Competitor competitor) { + List data = new ArrayList(); + TrackedLegOfCompetitor trackedLegOfCompetitor = trackedLeg.getTrackedLeg(competitor); + GPSFixTrack competitorTrack = trackedRace.getTrack(competitor); + competitorTrack.lockForRead(); + try { + if (trackedLegOfCompetitor.getStartTime() != null && trackedLegOfCompetitor.getFinishTime() != null) { + for (GPSFixMoving gpsFix : competitorTrack.getFixes(trackedLegOfCompetitor.getStartTime(), true, trackedLegOfCompetitor.getFinishTime(), true)) { + GPSFixContext context = new GPSFixContextImpl(leaderboardGroup, leaderboard, courseArea, fleet, trackedRace, trackedLeg, legNumber, competitor); + data.add(new GPSFixWithContextImpl(gpsFix, context )); + } + } + } finally { + competitorTrack.unlockAfterRead(); + } + return data; + } + +}