mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-05 20:03:52 +00:00
Merge remote branch 'origin/gwt' into gwt
This commit is contained in:
commit
b1ced08cbb
17 files changed
+335
-126
No files matched your search
+108
-56
@@ -20,6 +20,13 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.NavigableSet;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.FutureTask;
|
||||
import java.util.concurrent.RunnableFuture;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
@@ -66,6 +73,7 @@ import com.sap.sailing.domain.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.domain.tracking.GPSFixTrack;
|
||||
import com.sap.sailing.domain.tracking.Maneuver;
|
||||
import com.sap.sailing.domain.tracking.MarkPassing;
|
||||
import com.sap.sailing.domain.tracking.NoWindError;
|
||||
import com.sap.sailing.domain.tracking.NoWindException;
|
||||
import com.sap.sailing.domain.tracking.RacesHandle;
|
||||
import com.sap.sailing.domain.tracking.TrackedLeg.LegType;
|
||||
@@ -82,8 +90,8 @@ import com.sap.sailing.domain.tractracadapter.TracTracConfiguration;
|
||||
import com.sap.sailing.gwt.ui.client.SailingService;
|
||||
import com.sap.sailing.gwt.ui.shared.BoatClassDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorsAndTimePointsDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorInRaceDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorsAndTimePointsDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.GPSFixDAO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardDAO;
|
||||
@@ -142,6 +150,8 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
private final com.sap.sailing.domain.tractracadapter.persistence.DomainObjectFactory tractracDomainObjectFactory;
|
||||
|
||||
private final com.sap.sailing.util.CountryCodeFactory countryCodeFactory;
|
||||
|
||||
private final Executor executor;
|
||||
|
||||
public SailingServiceImpl() {
|
||||
BundleContext context = Activator.getDefault();
|
||||
@@ -153,6 +163,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
tractracMongoObjectFactory = com.sap.sailing.domain.tractracadapter.persistence.MongoObjectFactory.INSTANCE;
|
||||
swissTimingFactory = SwissTimingFactory.INSTANCE;
|
||||
countryCodeFactory = com.sap.sailing.util.CountryCodeFactory.INSTANCE;
|
||||
executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
|
||||
}
|
||||
|
||||
protected ServiceTracker<RacingEventService, RacingEventService> createAndOpenRacingEventServiceTracker(
|
||||
@@ -165,14 +176,14 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
|
||||
@Override
|
||||
public LeaderboardDAO getLeaderboardByName(String leaderboardName, Date date,
|
||||
Collection<String> namesOfRacesForWhichToLoadLegDetails)
|
||||
final Collection<String> namesOfRacesForWhichToLoadLegDetails)
|
||||
throws NoWindException {
|
||||
long startOfRequestHandling = System.currentTimeMillis();
|
||||
LeaderboardDAO result = null;
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
if (leaderboard != null) {
|
||||
result = new LeaderboardDAO();
|
||||
TimePoint timePoint = new MillisecondsTimePoint(date);
|
||||
final TimePoint timePoint = new MillisecondsTimePoint(date);
|
||||
result.competitors = new ArrayList<CompetitorDAO>();
|
||||
result.name = leaderboard.getName();
|
||||
result.competitorDisplayNames = new HashMap<CompetitorDAO, String>();
|
||||
@@ -182,21 +193,41 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
result.rows = new HashMap<CompetitorDAO, LeaderboardRowDAO>();
|
||||
result.hasCarriedPoints = leaderboard.hasCarriedPoints();
|
||||
result.discardThresholds = leaderboard.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces();
|
||||
for (Competitor competitor : leaderboard.getCompetitors()) {
|
||||
for (final Competitor competitor : leaderboard.getCompetitors()) {
|
||||
CompetitorDAO competitorDAO = getCompetitorDAO(competitor);
|
||||
LeaderboardRowDAO row = new LeaderboardRowDAO();
|
||||
row.competitor = competitorDAO;
|
||||
row.fieldsByRaceName = new HashMap<String, LeaderboardEntryDAO>();
|
||||
row.carriedPoints = leaderboard.hasCarriedPoints(competitor) ? leaderboard.getCarriedPoints(competitor) : null;
|
||||
result.competitors.add(competitorDAO);
|
||||
for (RaceInLeaderboard raceColumn : leaderboard.getRaceColumns()) {
|
||||
Entry entry = leaderboard.getEntry(competitor, raceColumn, timePoint);
|
||||
LeaderboardEntryDAO entryDAO = getLeaderboardEntryDAO(entry, raceColumn.getTrackedRace(),
|
||||
competitor, timePoint, namesOfRacesForWhichToLoadLegDetails != null
|
||||
&& namesOfRacesForWhichToLoadLegDetails.contains(raceColumn.getName()));
|
||||
row.fieldsByRaceName.put(raceColumn.getName(), entryDAO);
|
||||
result.rows.put(competitorDAO, row);
|
||||
Map<String, Future<LeaderboardEntryDAO>> futuresForColumnName = new HashMap<String, Future<LeaderboardEntryDAO>>();
|
||||
for (final RaceInLeaderboard raceColumn : leaderboard.getRaceColumns()) {
|
||||
final Entry entry = leaderboard.getEntry(competitor, raceColumn, timePoint);
|
||||
RunnableFuture<LeaderboardEntryDAO> future = new FutureTask<LeaderboardEntryDAO>(new Callable<LeaderboardEntryDAO>() {
|
||||
@Override
|
||||
public LeaderboardEntryDAO call() {
|
||||
try {
|
||||
return getLeaderboardEntryDAO(entry, raceColumn.getTrackedRace(), competitor, timePoint,
|
||||
namesOfRacesForWhichToLoadLegDetails != null
|
||||
&& namesOfRacesForWhichToLoadLegDetails.contains(raceColumn.getName()));
|
||||
} catch (NoWindException e) {
|
||||
throw new NoWindError(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
executor.execute(future);
|
||||
futuresForColumnName.put(raceColumn.getName(), future);
|
||||
}
|
||||
for (Map.Entry<String, Future<LeaderboardEntryDAO>> raceColumnNameAndFuture : futuresForColumnName.entrySet()) {
|
||||
try {
|
||||
row.fieldsByRaceName.put(raceColumnNameAndFuture.getKey(), raceColumnNameAndFuture.getValue().get());
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (ExecutionException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
result.rows.put(competitorDAO, row);
|
||||
String displayName = leaderboard.getDisplayName(competitor);
|
||||
if (displayName != null) {
|
||||
result.competitorDisplayNames.put(competitorDAO, displayName);
|
||||
@@ -448,9 +479,9 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
@Override
|
||||
public void removeAndUntrackedRace(EventAndRaceIdentifier eventAndRaceidentifier) throws Exception{
|
||||
Event event = getEvent(eventAndRaceidentifier);
|
||||
if(event!= null){
|
||||
if(event!= null) {
|
||||
RaceDefinition race = getRace(eventAndRaceidentifier);
|
||||
if(race != null){
|
||||
if(race != null) {
|
||||
getService().removeRace(event, race);
|
||||
}
|
||||
}
|
||||
@@ -1185,8 +1216,8 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
@Override
|
||||
public String[] getCountryCodes() {
|
||||
List<String> countryCodes = new ArrayList<String>();
|
||||
for (CountryCode cc : countryCodeFactory.getAll()){
|
||||
if (cc.getThreeLetterIOCCode() != null && !cc.getThreeLetterIOCCode().equals("")){
|
||||
for (CountryCode cc : countryCodeFactory.getAll()) {
|
||||
if (cc.getThreeLetterIOCCode() != null && !cc.getThreeLetterIOCCode().equals("")) {
|
||||
countryCodes.add(cc.getThreeLetterIOCCode());
|
||||
}
|
||||
}
|
||||
@@ -1201,22 +1232,22 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
TrackedRace trackedRace = getTrackedRace(race);
|
||||
Iterable<Competitor> competitors = trackedRace.getRace().getCompetitors();
|
||||
List<Competitor> selectedCompetitor = new ArrayList<Competitor>();
|
||||
for (CompetitorDAO cDAO : competitorAndTimePointsDAO.getCompetitor()){
|
||||
for (Competitor c : competitors){
|
||||
if (c.getId().toString().equals(cDAO.id)){
|
||||
for (CompetitorDAO cDAO : competitorAndTimePointsDAO.getCompetitor()) {
|
||||
for (Competitor c : competitors) {
|
||||
if (c.getId().toString().equals(cDAO.id)) {
|
||||
selectedCompetitor.add(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch (dataType){
|
||||
switch (dataType) {
|
||||
case CURRENT_SPEED_OVER_GROUND_IN_KNOTS:
|
||||
for (int c = 0; c < selectedCompetitor.size(); c++){
|
||||
for (int c = 0; c < selectedCompetitor.size(); c++) {
|
||||
Double[] entries = new Double[competitorAndTimePointsDAO.getTimePoints().length];
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getTimePoints().length; i++){
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getTimePoints().length; i++) {
|
||||
MillisecondsTimePoint time = new MillisecondsTimePoint(competitorAndTimePointsDAO.getTimePoints()[i]);
|
||||
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(selectedCompetitor.get(c), time);
|
||||
if (trackedLeg != null){
|
||||
if (trackedLeg != null) {
|
||||
SpeedWithBearing speedOverGround = trackedLeg.getSpeedOverGround(time);
|
||||
entries[i] = (speedOverGround == null) ? null : speedOverGround.getKnots();
|
||||
}
|
||||
@@ -1224,10 +1255,10 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
CompetitorDAO competitor = competitorAndTimePointsDAO.getCompetitor()[c];
|
||||
competitorData.setRaceData(competitor, entries);
|
||||
entries = new Double[competitorAndTimePointsDAO.getMarkPassings(competitor).length];
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getMarkPassings(competitor).length; i++){
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getMarkPassings(competitor).length; i++) {
|
||||
MillisecondsTimePoint time = new MillisecondsTimePoint(competitorAndTimePointsDAO.getMarkPassings(competitor)[i].getB());
|
||||
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(selectedCompetitor.get(c), time);
|
||||
if (trackedLeg != null){
|
||||
if (trackedLeg != null) {
|
||||
SpeedWithBearing speedOverGround = trackedLeg.getSpeedOverGround(time);
|
||||
entries[i] = (speedOverGround == null) ? null : speedOverGround.getKnots();
|
||||
}
|
||||
@@ -1236,12 +1267,12 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
break;
|
||||
case VELOCITY_MADE_GOOD_IN_KNOTS:
|
||||
for (int c = 0; c < selectedCompetitor.size(); c++){
|
||||
for (int c = 0; c < selectedCompetitor.size(); c++) {
|
||||
Double[] entries = new Double[competitorAndTimePointsDAO.getTimePoints().length];
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getTimePoints().length; i++){
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getTimePoints().length; i++) {
|
||||
MillisecondsTimePoint time = new MillisecondsTimePoint(competitorAndTimePointsDAO.getTimePoints()[i]);
|
||||
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(selectedCompetitor.get(c), time);
|
||||
if (trackedLeg != null){
|
||||
if (trackedLeg != null) {
|
||||
Speed velocityMadeGood = trackedLeg.getVelocityMadeGood(time);
|
||||
entries[i] = (velocityMadeGood == null) ? null : velocityMadeGood.getKnots();
|
||||
}
|
||||
@@ -1249,10 +1280,10 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
competitorData.setRaceData(competitorAndTimePointsDAO.getCompetitor()[c], entries);
|
||||
CompetitorDAO competitor = competitorAndTimePointsDAO.getCompetitor()[c];
|
||||
entries = new Double[competitorAndTimePointsDAO.getMarkPassings(competitor).length];
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getMarkPassings(competitor).length; i++){
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getMarkPassings(competitor).length; i++) {
|
||||
MillisecondsTimePoint time = new MillisecondsTimePoint(competitorAndTimePointsDAO.getMarkPassings(competitor)[i].getB());
|
||||
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(selectedCompetitor.get(c), time);
|
||||
if (trackedLeg != null){
|
||||
if (trackedLeg != null) {
|
||||
Speed velocityMadeGood = trackedLeg.getVelocityMadeGood(time);
|
||||
entries[i] = (velocityMadeGood == null) ? null : velocityMadeGood.getKnots();
|
||||
}
|
||||
@@ -1261,18 +1292,18 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
break;
|
||||
case DISTANCE_TRAVELED:
|
||||
for (int c = 0; c < selectedCompetitor.size(); c++){
|
||||
for (int c = 0; c < selectedCompetitor.size(); c++) {
|
||||
Double[] entries = new Double[competitorAndTimePointsDAO.getTimePoints().length];
|
||||
double distanceOfPreviousLegs = 0;
|
||||
double lastTraveledDistance = 0;
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getTimePoints().length; i++){
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getTimePoints().length; i++) {
|
||||
MillisecondsTimePoint time = new MillisecondsTimePoint(competitorAndTimePointsDAO.getTimePoints()[i]);
|
||||
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(selectedCompetitor.get(c), time);
|
||||
if (trackedLeg != null){
|
||||
if (trackedLeg != null) {
|
||||
Distance distanceTraveled = trackedLeg.getDistanceTraveled(time);
|
||||
if (distanceTraveled != null){
|
||||
if (distanceTraveled != null) {
|
||||
double d = distanceTraveled.getMeters();
|
||||
if (d < lastTraveledDistance){
|
||||
if (d < lastTraveledDistance) {
|
||||
distanceOfPreviousLegs += lastTraveledDistance;
|
||||
}
|
||||
lastTraveledDistance = d;
|
||||
@@ -1283,14 +1314,14 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
competitorData.setRaceData(competitorAndTimePointsDAO.getCompetitor()[c], entries);
|
||||
CompetitorDAO competitor = competitorAndTimePointsDAO.getCompetitor()[c];
|
||||
entries = new Double[competitorAndTimePointsDAO.getMarkPassings(competitor).length];
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getMarkPassings(competitor).length; i++){
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getMarkPassings(competitor).length; i++) {
|
||||
MillisecondsTimePoint time = new MillisecondsTimePoint(competitorAndTimePointsDAO.getMarkPassings(competitor)[i].getB());
|
||||
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(selectedCompetitor.get(c), time);
|
||||
if (trackedLeg != null){
|
||||
if (trackedLeg != null) {
|
||||
Distance distanceTraveled = trackedLeg.getDistanceTraveled(time);
|
||||
if (distanceTraveled != null){
|
||||
if (distanceTraveled != null) {
|
||||
double d = distanceTraveled.getMeters();
|
||||
if (d < lastTraveledDistance){
|
||||
if (d < lastTraveledDistance) {
|
||||
distanceOfPreviousLegs += lastTraveledDistance;
|
||||
}
|
||||
lastTraveledDistance = d;
|
||||
@@ -1302,22 +1333,22 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
break;
|
||||
case GAP_TO_LEADER_IN_SECONDS:
|
||||
for (int c = 0; c < selectedCompetitor.size(); c++){
|
||||
for (int c = 0; c < selectedCompetitor.size(); c++) {
|
||||
Double[] entries = new Double[competitorAndTimePointsDAO.getTimePoints().length];
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getTimePoints().length; i++){
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getTimePoints().length; i++) {
|
||||
MillisecondsTimePoint time = new MillisecondsTimePoint(competitorAndTimePointsDAO.getTimePoints()[i]);
|
||||
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(selectedCompetitor.get(c), time);
|
||||
if (trackedLeg != null){
|
||||
if (trackedLeg != null) {
|
||||
entries[i] = trackedLeg.getGapToLeaderInSeconds(time);
|
||||
}
|
||||
}
|
||||
competitorData.setRaceData(competitorAndTimePointsDAO.getCompetitor()[c], entries);
|
||||
CompetitorDAO competitor = competitorAndTimePointsDAO.getCompetitor()[c];
|
||||
entries = new Double[competitorAndTimePointsDAO.getMarkPassings(competitor).length];
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getMarkPassings(competitor).length; i++){
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getMarkPassings(competitor).length; i++) {
|
||||
MillisecondsTimePoint time = new MillisecondsTimePoint(competitorAndTimePointsDAO.getMarkPassings(competitor)[i].getB());
|
||||
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(selectedCompetitor.get(c), time);
|
||||
if (trackedLeg != null){
|
||||
if (trackedLeg != null) {
|
||||
entries[i] = trackedLeg.getGapToLeaderInSeconds(time);
|
||||
}
|
||||
}
|
||||
@@ -1325,12 +1356,12 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
break;
|
||||
case WINDWARD_DISTANCE_TO_OVERALL_LEADER:
|
||||
for (int c = 0; c < selectedCompetitor.size(); c++){
|
||||
for (int c = 0; c < selectedCompetitor.size(); c++) {
|
||||
Double[] entries = new Double[competitorAndTimePointsDAO.getTimePoints().length];
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getTimePoints().length; i++){
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getTimePoints().length; i++) {
|
||||
MillisecondsTimePoint time = new MillisecondsTimePoint(competitorAndTimePointsDAO.getTimePoints()[i]);
|
||||
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(selectedCompetitor.get(c), time);
|
||||
if (trackedLeg != null){
|
||||
if (trackedLeg != null) {
|
||||
Distance distanceToLeader = trackedLeg.getWindwardDistanceToOverallLeader(time);
|
||||
entries[i] = (distanceToLeader == null) ? null : distanceToLeader.getMeters();
|
||||
}
|
||||
@@ -1338,10 +1369,10 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
competitorData.setRaceData(competitorAndTimePointsDAO.getCompetitor()[c], entries);
|
||||
CompetitorDAO competitor = competitorAndTimePointsDAO.getCompetitor()[c];
|
||||
entries = new Double[competitorAndTimePointsDAO.getMarkPassings(competitor).length];
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getMarkPassings(competitor).length; i++){
|
||||
for (int i = 0; i < competitorAndTimePointsDAO.getMarkPassings(competitor).length; i++) {
|
||||
MillisecondsTimePoint time = new MillisecondsTimePoint(competitorAndTimePointsDAO.getMarkPassings(competitor)[i].getB());
|
||||
TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(selectedCompetitor.get(c), time);
|
||||
if (trackedLeg != null){
|
||||
if (trackedLeg != null) {
|
||||
Distance distanceToLeader = trackedLeg.getWindwardDistanceToOverallLeader(time);
|
||||
entries[i] = (distanceToLeader == null) ? null : distanceToLeader.getMeters();
|
||||
}
|
||||
@@ -1401,15 +1432,36 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
public Map<CompetitorDAO, List<ManeuverDAO>> getManeuvers(RaceIdentifier raceIdentifier,
|
||||
Map<CompetitorDAO, Date> from, Map<CompetitorDAO, Date> to) throws NoWindException {
|
||||
Map<CompetitorDAO, List<ManeuverDAO>> result = new HashMap<CompetitorDAO, List<ManeuverDAO>>();
|
||||
TrackedRace trackedRace = getTrackedRace(raceIdentifier);
|
||||
for (Competitor competitor : trackedRace.getRace().getCompetitors()) {
|
||||
final TrackedRace trackedRace = getTrackedRace(raceIdentifier);
|
||||
Map<CompetitorDAO, Future<List<ManeuverDAO>>> futures = new HashMap<CompetitorDAO, Future<List<ManeuverDAO>>>();
|
||||
for (final Competitor competitor : trackedRace.getRace().getCompetitors()) {
|
||||
CompetitorDAO competitorDAO = getCompetitorDAO(competitor);
|
||||
if (from.containsKey(competitorDAO)) {
|
||||
TimePoint timePointFrom = new MillisecondsTimePoint(from.get(competitorDAO));
|
||||
TimePoint timePointTo = new MillisecondsTimePoint(to.get(competitorDAO));
|
||||
List<Maneuver> maneuversForCompetitor = trackedRace.getManeuvers(competitor, timePointFrom, timePointTo);
|
||||
List<ManeuverDAO> maneuverDAOs = createManeuverDAOsForCompetitor(maneuversForCompetitor, trackedRace, competitor);
|
||||
result.put(competitorDAO, maneuverDAOs);
|
||||
final TimePoint timePointFrom = new MillisecondsTimePoint(from.get(competitorDAO));
|
||||
final TimePoint timePointTo = new MillisecondsTimePoint(to.get(competitorDAO));
|
||||
RunnableFuture<List<ManeuverDAO>> future = new FutureTask<List<ManeuverDAO>>(new Callable<List<ManeuverDAO>>() {
|
||||
@Override
|
||||
public List<ManeuverDAO> call() {
|
||||
List<Maneuver> maneuversForCompetitor;
|
||||
try {
|
||||
maneuversForCompetitor = trackedRace.getManeuvers(competitor, timePointFrom, timePointTo);
|
||||
} catch (NoWindException e) {
|
||||
throw new NoWindError(e);
|
||||
}
|
||||
return createManeuverDAOsForCompetitor(maneuversForCompetitor, trackedRace, competitor);
|
||||
}
|
||||
});
|
||||
executor.execute(future);
|
||||
futures.put(competitorDAO, future);
|
||||
}
|
||||
}
|
||||
for (Map.Entry<CompetitorDAO, Future<List<ManeuverDAO>>> competitorAndFuture : futures.entrySet()) {
|
||||
try {
|
||||
result.put(competitorAndFuture.getKey(), competitorAndFuture.getValue().get());
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (ExecutionException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
@@ -1516,7 +1568,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
for (Competitor competitor : trackedRace.getRace().getCompetitors()) {
|
||||
NavigableSet<MarkPassing> markPassings = trackedRace.getMarkPassings(competitor);
|
||||
List<Pair<String, Long>> markPassingTimes = new ArrayList<Pair<String,Long>>();
|
||||
for (MarkPassing markPassing : markPassings){
|
||||
for (MarkPassing markPassing : markPassings) {
|
||||
markPassingTimes.add(new Pair<String, Long>(markPassing.getWaypoint().getName(), markPassing.getTimePoint().asMillis()));
|
||||
}
|
||||
competitors.add(getCompetitorDAO(competitor));
|
||||
|
||||
Reference in new issue
Block a user