From 85251206a8628795a83bdcb3bfbff7d793a2cda3 Mon Sep 17 00:00:00 2001 From: Nicolas Date: Sun, 30 Nov 2014 15:14:47 +0100 Subject: [PATCH] Fixed reformated SailingServiceImpl. --- .../gwt/ui/server/SailingServiceImpl.java | 1522 ++++++++--------- 1 file changed, 757 insertions(+), 765 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index dcbacca8d8a..c6f484502cd 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -435,7 +435,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private final MongoObjectFactory mongoObjectFactory; private final SwissTimingAdapterPersistence swissTimingAdapterPersistence; - + private final ServiceTracker swissTimingAdapterTracker; private final ServiceTracker tractracAdapterTracker; @@ -443,8 +443,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private final ServiceTracker igtimiAdapterTracker; private final ServiceTracker raceLogTrackingAdapterTracker; - - private final ServiceTracker deviceIdentifierStringSerializationHandlerTracker; + + private final ServiceTracker + deviceIdentifierStringSerializationHandlerTracker; private final com.sap.sailing.domain.tractracadapter.persistence.MongoObjectFactory tractracMongoObjectFactory; @@ -457,11 +458,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private final com.sap.sailing.domain.common.CountryCodeFactory countryCodeFactory; private final Executor executor; - + private final com.sap.sailing.domain.base.DomainFactory baseDomainFactory; - + private static final int LEADERBOARD_BY_NAME_RESULTS_CACHE_BY_ID_SIZE = 100; - + private static final int LEADERBOARD_DIFFERENCE_CACHE_SIZE = 50; private final LinkedHashMap leaderboardByNameResultsCacheById; @@ -469,9 +470,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private int leaderboardDifferenceCacheByIdPairHits; private int leaderboardDifferenceCacheByIdPairMisses; /** - * Caches some results of the hard to compute difference between two {@link LeaderboardDTO}s. The objects contained - * as values have been obtained by {@link IncrementalLeaderboardDTO#strip(LeaderboardDTO)}. The cache size is - * limited to {@link #LEADERBOARD_DIFFERENCE_CACHE_SIZE}. + * Caches some results of the hard to compute difference between two {@link LeaderboardDTO}s. The objects contained as values + * have been obtained by {@link IncrementalLeaderboardDTO#strip(LeaderboardDTO)}. The cache size is limited to + * {@link #LEADERBOARD_DIFFERENCE_CACHE_SIZE}. */ private final LinkedHashMap, IncrementalLeaderboardDTO> leaderboardDifferenceCacheByIdPair; @@ -497,29 +498,25 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S baseDomainFactory = getService().getBaseDomainFactory(); mongoObjectFactory = getService().getMongoObjectFactory(); domainObjectFactory = getService().getDomainObjectFactory(); - // TODO what about passing on the mongo/domain object factory to obtain an according - // SwissTimingAdapterPersistence instance similar to how the tractracDomainObjectFactory etc. are created below? + // TODO what about passing on the mongo/domain object factory to obtain an according SwissTimingAdapterPersistence instance similar to how the tractracDomainObjectFactory etc. are created below? swissTimingAdapterPersistence = SwissTimingAdapterPersistence.INSTANCE; swissTimingReplayService = getSwissTimingReplayService(context); scoreCorrectionProviderServiceTracker = createAndOpenScoreCorrectionProviderServiceTracker(context); tractracDomainObjectFactory = com.sap.sailing.domain.tractracadapter.persistence.PersistenceFactory.INSTANCE - .createDomainObjectFactory(mongoObjectFactory.getDatabase(), getTracTracAdapter().getTracTracDomainFactory()); + .createDomainObjectFactory(mongoObjectFactory.getDatabase(), getTracTracAdapter() + .getTracTracDomainFactory()); tractracMongoObjectFactory = com.sap.sailing.domain.tractracadapter.persistence.MongoObjectFactory.INSTANCE; swissTimingFactory = SwissTimingFactory.INSTANCE; countryCodeFactory = com.sap.sailing.domain.common.CountryCodeFactory.INSTANCE; - leaderboardDifferenceCacheByIdPair = new LinkedHashMap, IncrementalLeaderboardDTO>( - LEADERBOARD_DIFFERENCE_CACHE_SIZE, 0.75f, /* accessOrder */true) { + leaderboardDifferenceCacheByIdPair = new LinkedHashMap, IncrementalLeaderboardDTO>(LEADERBOARD_DIFFERENCE_CACHE_SIZE, 0.75f, /* accessOrder */ true) { private static final long serialVersionUID = 3775119859130148488L; - @Override protected boolean removeEldestEntry(Entry, IncrementalLeaderboardDTO> eldest) { return this.size() > LEADERBOARD_DIFFERENCE_CACHE_SIZE; } }; - leaderboardByNameResultsCacheById = new LinkedHashMap(LEADERBOARD_BY_NAME_RESULTS_CACHE_BY_ID_SIZE, 0.75f, /* accessOrder */ - true) { + leaderboardByNameResultsCacheById = new LinkedHashMap(LEADERBOARD_BY_NAME_RESULTS_CACHE_BY_ID_SIZE, 0.75f, /* accessOrder */ true) { private static final long serialVersionUID = 3775119859130148488L; - @Override protected boolean removeEldestEntry(Entry eldest) { return this.size() > LEADERBOARD_BY_NAME_RESULTS_CACHE_BY_ID_SIZE; @@ -529,23 +526,22 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S // providing the updates is not outperformed by all the re-calculations happening here. Leave at least one // core to other things, but by using at least three threads ensure that no simplistic deadlocks may occur. final int THREAD_POOL_SIZE = Math.max(Runtime.getRuntime().availableProcessors(), 3); - executor = new ThreadPoolExecutor(/* corePoolSize */THREAD_POOL_SIZE, - /* maximumPoolSize */THREAD_POOL_SIZE, - /* keepAliveTime */60, TimeUnit.SECONDS, - /* workQueue */new LinkedBlockingQueue()); + executor = new ThreadPoolExecutor(/* corePoolSize */ THREAD_POOL_SIZE, + /* maximumPoolSize */ THREAD_POOL_SIZE, + /* keepAliveTime */ 60, TimeUnit.SECONDS, + /* workQueue */ new LinkedBlockingQueue()); } - + /** - * Stops this service and frees its resources. In particular, caching services and threads owned by this service - * will be notified to stop their jobs. + * Stops this service and frees its resources. In particular, caching services and threads owned by this service will be + * notified to stop their jobs. */ public void stop() { quickRanksLiveCache.stop(); } protected SwissTimingReplayService getSwissTimingReplayService(BundleContext context) { - return createAndOpenSwissTimingReplayServiceTracker(context).getService().createSwissTimingReplayService( - getSwissTimingAdapter().getSwissTimingDomainFactory()); + return createAndOpenSwissTimingReplayServiceTracker(context).getService().createSwissTimingReplayService(getSwissTimingAdapter().getSwissTimingDomainFactory()); } protected SwissTimingAdapter getSwissTimingAdapter() { @@ -588,7 +584,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S protected ServiceTracker createAndOpenRaceLogTrackingAdapterTracker( BundleContext context) { - ServiceTracker result = new ServiceTracker( + ServiceTracker result = + new ServiceTracker( context, RaceLogTrackingAdapterFactory.class.getName(), null); result.open(); return result; @@ -598,16 +595,18 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S oos.defaultWriteObject(); } - protected ServiceTracker createAndOpenRacingEventServiceTracker(BundleContext context) { - ServiceTracker result = new ServiceTracker(context, - RacingEventService.class.getName(), null); + protected ServiceTracker createAndOpenRacingEventServiceTracker( + BundleContext context) { + ServiceTracker result = new ServiceTracker( + context, RacingEventService.class.getName(), null); result.open(); return result; } - protected ServiceTracker createAndOpenResultUrlRegistryServiceTracker(BundleContext context) { - ServiceTracker result = new ServiceTracker(context, - ResultUrlRegistry.class.getName(), null); + protected ServiceTracker createAndOpenResultUrlRegistryServiceTracker( + BundleContext context) { + ServiceTracker result = new ServiceTracker( + context, ResultUrlRegistry.class.getName(), null); result.open(); return result; } @@ -617,8 +616,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S */ protected ServiceTracker createAndOpenScoreCorrectionProviderServiceTracker( BundleContext bundleContext) { - ServiceTracker tracker = new ServiceTracker( - bundleContext, ScoreCorrectionProvider.class.getName(), + ServiceTracker tracker = new ServiceTracker(bundleContext, + ScoreCorrectionProvider.class.getName(), /* customizer */null); tracker.open(); return tracker; @@ -637,7 +636,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S public ScoreCorrectionProviderDTO getScoreCorrectionsOfProvider(String providerName) throws Exception { ScoreCorrectionProviderDTO result = null; for (ScoreCorrectionProvider scoreCorrectionProvider : getAllScoreCorrectionProviders()) { - if (scoreCorrectionProvider.getName().equals(providerName)) { + if(scoreCorrectionProvider.getName().equals(providerName)) { result = convertScoreCorrectionProviderDTO(scoreCorrectionProvider); break; } @@ -656,8 +655,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return result; } - private ScoreCorrectionProviderDTO convertScoreCorrectionProviderDTO(ScoreCorrectionProvider scoreCorrectionProvider) throws Exception { - Map>> hasResultsForBoatClassFromDateByEventName = new HashMap>>(); + private ScoreCorrectionProviderDTO convertScoreCorrectionProviderDTO(ScoreCorrectionProvider scoreCorrectionProvider) + throws Exception { + Map>> hasResultsForBoatClassFromDateByEventName = new HashMap>>(); for (Map.Entry>> e : scoreCorrectionProvider .getHasResultsForBoatClassFromDateByEventName().entrySet()) { Set> set = new HashSet>(); @@ -678,7 +678,6 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return result; } - /** * If date is null, the {@link LiveLeaderboardUpdater} for the * leaderboardName requested is obtained or created if it doesn't exist yet. The request is then passed @@ -689,7 +688,6 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S *

* * Otherwise, the leaderboard is computed synchronously on the fly. - * * @param previousLeaderboardId * if null or no leaderboard with that {@link LeaderboardDTO#getId() ID} is known, a * {@link FullLeaderboardDTO} will be computed; otherwise, an {@link IncrementalLeaderboardDTO} will be @@ -697,8 +695,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S */ @Override public IncrementalOrFullLeaderboardDTO getLeaderboardByName(final String leaderboardName, final Date date, - final Collection namesOfRaceColumnsForWhichToLoadLegDetails, boolean addOverallDetails, String previousLeaderboardId, - boolean fillNetPointsUncorrected) throws NoWindException, InterruptedException, ExecutionException, IllegalArgumentException { + final Collection namesOfRaceColumnsForWhichToLoadLegDetails, boolean addOverallDetails, + String previousLeaderboardId, boolean fillNetPointsUncorrected) throws NoWindException, InterruptedException, ExecutionException, + IllegalArgumentException { try { long startOfRequestHandling = System.currentTimeMillis(); IncrementalOrFullLeaderboardDTO result = null; @@ -710,8 +709,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } else { timePoint = new MillisecondsTimePoint(date); } - LeaderboardDTO leaderboardDTO = leaderboard.getLeaderboardDTO(timePoint, namesOfRaceColumnsForWhichToLoadLegDetails, - addOverallDetails, getService(), baseDomainFactory, fillNetPointsUncorrected); + LeaderboardDTO leaderboardDTO = leaderboard.getLeaderboardDTO(timePoint, + namesOfRaceColumnsForWhichToLoadLegDetails, addOverallDetails, getService(), baseDomainFactory, fillNetPointsUncorrected); LeaderboardDTO previousLeaderboardDTO = null; synchronized (leaderboardByNameResultsCacheById) { leaderboardByNameResultsCacheById.put(leaderboardDTO.getId(), leaderboardDTO); @@ -719,21 +718,18 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S previousLeaderboardDTO = leaderboardByNameResultsCacheById.get(previousLeaderboardId); } } - // Un-comment the following lines if you need to update the file used by LeaderboardDTODiffingTest, set - // a breakpoint + // Un-comment the following lines if you need to update the file used by LeaderboardDTODiffingTest, set a breakpoint // and toggle the storeLeaderboardForTesting flag if you found a good version. See also bug 1417. - // boolean storeLeaderboardForTesting = false; - // if (storeLeaderboardForTesting) { - // ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new - // File("c:/data/SAP/sailing/workspace/java/com.sap.sailing.domain.test/resources/IncrementalLeaderboardDTO.ser"))); - // oos.writeObject(leaderboardDTO); - // oos.close(); - // } +// boolean storeLeaderboardForTesting = false; +// if (storeLeaderboardForTesting) { +// ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("c:/data/SAP/sailing/workspace/java/com.sap.sailing.domain.test/resources/IncrementalLeaderboardDTO.ser"))); +// oos.writeObject(leaderboardDTO); +// oos.close(); +// } final IncrementalLeaderboardDTO cachedDiff; if (previousLeaderboardId != null) { synchronized (leaderboardDifferenceCacheByIdPair) { - cachedDiff = leaderboardDifferenceCacheByIdPair.get(new com.sap.sse.common.Util.Pair( - previousLeaderboardId, leaderboardDTO.getId())); + cachedDiff = leaderboardDifferenceCacheByIdPair.get(new com.sap.sse.common.Util.Pair(previousLeaderboardId, leaderboardDTO.getId())); } if (cachedDiff == null) { leaderboardDifferenceCacheByIdPairMisses++; @@ -748,22 +744,20 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } else { final IncrementalLeaderboardDTO incrementalResult; if (cachedDiff == null) { - IncrementalLeaderboardDTO preResult = new IncrementalLeaderboardDTOCloner().clone(leaderboardDTO).strip( - previousLeaderboardDTO); + IncrementalLeaderboardDTO preResult = new IncrementalLeaderboardDTOCloner().clone(leaderboardDTO).strip(previousLeaderboardDTO); synchronized (leaderboardDifferenceCacheByIdPair) { - leaderboardDifferenceCacheByIdPair.put(new com.sap.sse.common.Util.Pair(previousLeaderboardId, - leaderboardDTO.getId()), preResult); + leaderboardDifferenceCacheByIdPair.put(new com.sap.sse.common.Util.Pair(previousLeaderboardId, leaderboardDTO.getId()), preResult); } incrementalResult = preResult; } else { incrementalResult = cachedDiff; } - incrementalResult.setCurrentServerTime(new Date()); // may update a cached object, but we consider a - // reference update atomic + incrementalResult.setCurrentServerTime(new Date()); // may update a cached object, but we consider a reference update atomic result = incrementalResult; } - logger.fine("getLeaderboardByName(" + leaderboardName + ", " + date + ", " + namesOfRaceColumnsForWhichToLoadLegDetails - + ", addOverallDetails=" + addOverallDetails + ") took " + (System.currentTimeMillis() - startOfRequestHandling) + logger.fine("getLeaderboardByName(" + leaderboardName + ", " + date + ", " + + namesOfRaceColumnsForWhichToLoadLegDetails + ", addOverallDetails=" + addOverallDetails + + ") took " + (System.currentTimeMillis() - startOfRequestHandling) + "ms; diff cache hits/misses " + leaderboardDifferenceCacheByIdPairHits + "/" + leaderboardDifferenceCacheByIdPairMisses); } @@ -777,7 +771,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } catch (IllegalArgumentException e) { throw e; } catch (Exception e) { - logger.log(Level.SEVERE, "Exception during SailingService.getLeaderboardByName", e); + logger.log(Level.SEVERE,"Exception during SailingService.getLeaderboardByName", e); throw new RuntimeException(e); } } @@ -805,7 +799,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private MarkDTO convertToMarkDTO(Mark mark, Position position) { MarkDTO markDTO; - if (position != null) { + if(position != null) { markDTO = new MarkDTO(mark.getId().toString(), mark.getName(), position.getLatDeg(), position.getLngDeg()); } else { markDTO = new MarkDTO(mark.getId().toString(), mark.getName()); @@ -850,9 +844,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } List raceColumns = convertToRaceColumnDTOs(series.getRaceColumns()); SeriesDTO result = new SeriesDTO(series.getName(), fleets, raceColumns, series.isMedal(), - series.getResultDiscardingRule() == null ? null : series.getResultDiscardingRule() - .getDiscardIndexResultsStartingWithHowManyRaces(), series.isStartsWithZeroScore(), - series.isFirstColumnIsNonDiscardableCarryForward(), series.hasSplitFleetContiguousScoring()); + series.getResultDiscardingRule() == null ? null : series.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces(), + series.isStartsWithZeroScore(), series.isFirstColumnIsNonDiscardableCarryForward(), series.hasSplitFleetContiguousScoring()); return result; } @@ -861,39 +854,39 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S raceColumnDTO.setMedalRace(raceColumn.isMedalRace()); raceColumnDTO.setExplicitFactor(raceColumn.getExplicitFactor()); } - + private List convertToRaceColumnDTOs(Iterable raceColumns) { List raceColumnDTOs = new ArrayList(); RaceColumnDTOFactory columnFactory = RaceColumnDTOFactory.INSTANCE; for (RaceColumn raceColumn : raceColumns) { - final RaceColumnDTO raceColumnDTO = columnFactory.createRaceColumnDTO(raceColumn.getName(), raceColumn.isMedalRace(), - raceColumn.getExplicitFactor(), raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn) - .getRegatta().getName() : null, raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn) - .getSeries().getName() : null); + final RaceColumnDTO raceColumnDTO = columnFactory.createRaceColumnDTO(raceColumn.getName(), + raceColumn.isMedalRace(), raceColumn.getExplicitFactor(), + raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn).getRegatta().getName() : null, + raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn).getSeries().getName() : null); raceColumnDTOs.add(raceColumnDTO); } return raceColumnDTOs; } - + private RaceInfoDTO createRaceInfoDTO(String seriesName, RaceColumn raceColumn, Fleet fleet) { RaceInfoDTO raceInfoDTO = new RaceInfoDTO(); RaceLog raceLog = raceColumn.getRaceLog(fleet); if (raceLog != null) { - + raceInfoDTO.isTracked = raceColumn.getTrackedRace(fleet) != null ? true : false; ReadonlyRaceState state = ReadonlyRaceStateImpl.create(raceLog); - + TimePoint startTime = state.getStartTime(); if (startTime != null) { raceInfoDTO.startTime = startTime.asDate(); } raceInfoDTO.lastStatus = state.getStatus(); - + if (raceLog.getLastRawFix() != null) { raceInfoDTO.lastUpdateTime = raceLog.getLastRawFix().getCreatedAt().asDate(); } - + TimePoint finishedTime = state.getFinishedTime(); if (finishedTime != null) { raceInfoDTO.finishedTime = finishedTime.asDate(); @@ -920,14 +913,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S raceInfoDTO.lastFlagsDisplayedStateChanged = previousFlagState.hasPoleChanged(mostInterestingFlagPole); } } - + AbortingFlagFinder abortingFlagFinder = new AbortingFlagFinder(raceLog); - + RaceLogFlagEvent abortingFlagEvent = abortingFlagFinder.analyze(); if (abortingFlagEvent != null) { raceInfoDTO.isRaceAbortedInPassBefore = true; raceInfoDTO.abortingTimeInPassBefore = abortingFlagEvent.getLogicalTimePoint().asDate(); - + if (raceInfoDTO.lastStatus.equals(RaceLogRaceStatus.UNSCHEDULED)) { raceInfoDTO.lastUpperFlag = abortingFlagEvent.getUpperFlag(); raceInfoDTO.lastLowerFlag = abortingFlagEvent.getLowerFlag(); @@ -935,13 +928,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S raceInfoDTO.lastFlagsDisplayedStateChanged = true; } } - + CourseBase lastCourse = state.getCourseDesign(); if (lastCourse != null) { raceInfoDTO.lastCourseDesign = convertCourseDesignToRaceCourseDTO(lastCourse); raceInfoDTO.lastCourseName = lastCourse.getName(); } - + if (raceInfoDTO.lastStatus.equals(RaceLogRaceStatus.FINISHED)) { TimePoint protestStartTime = state.getProtestTime(); if (protestStartTime != null) { @@ -953,7 +946,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S raceInfoDTO.lastFlagsDisplayedStateChanged = true; } } - + Wind wind = state.getWindFix(); if (wind != null) { raceInfoDTO.lastWind = createWindDTOFromAlreadyAveraged(wind, MillisecondsTimePoint.now()); @@ -969,7 +962,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S raceInfoDTO.isTracked = raceColumn.getTrackedRace(fleet) != null ? true : false; return raceInfoDTO; } - + private void fillStartProcedureSpecifics(RaceInfoDTO raceInfoDTO, ReadonlyRaceState state) { RaceInfoExtensionDTO info = null; raceInfoDTO.startProcedure = state.getRacingProcedure().getType(); @@ -1007,7 +1000,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S for (RaceDefinition r : regatta.getAllRaces()) { RegattaAndRaceIdentifier raceIdentifier = new RegattaNameAndRaceName(regatta.getName(), r.getName()); TrackedRace trackedRace = getService().getExistingTrackedRace(raceIdentifier); - TrackedRaceDTO trackedRaceDTO = null; + TrackedRaceDTO trackedRaceDTO = null; if (trackedRace != null) { trackedRaceDTO = getBaseDomainFactory().createTrackedRaceDTO(trackedRace); } @@ -1016,7 +1009,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (trackedRace != null) { getBaseDomainFactory().updateRaceDTOWithTrackedRaceData(trackedRace, raceDTO); } - raceDTO.boatClass = regatta.getBoatClass() == null ? null : regatta.getBoatClass().getName(); + raceDTO.boatClass = regatta.getBoatClass() == null ? null : regatta.getBoatClass().getName(); result.add(raceDTO); } return result; @@ -1032,21 +1025,21 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public com.sap.sse.common.Util.Pair> listTracTracRacesInEvent(String eventJsonURL, - boolean listHiddenRaces) throws MalformedURLException, IOException, ParseException, org.json.simple.parser.ParseException, - URISyntaxException { - com.sap.sse.common.Util.Pair> raceRecords; - raceRecords = getTracTracAdapter().getTracTracRaceRecords(new URL(eventJsonURL), /* loadClientParam */false); + public com.sap.sse.common.Util.Pair> listTracTracRacesInEvent(String eventJsonURL, boolean listHiddenRaces) throws MalformedURLException, IOException, ParseException, org.json.simple.parser.ParseException, URISyntaxException { + com.sap.sse.common.Util.Pair> raceRecords; + raceRecords = getTracTracAdapter().getTracTracRaceRecords(new URL(eventJsonURL), /*loadClientParam*/ false); List result = new ArrayList(); for (RaceRecord raceRecord : raceRecords.getB()) { if (listHiddenRaces == false && raceRecord.getRaceStatus().equals(TracTracConnectionConstants.HIDDEN_STATUS)) { continue; } - - result.add(new TracTracRaceRecordDTO(raceRecord.getID(), raceRecord.getEventName(), raceRecord.getName(), raceRecord - .getTrackingStartTime().asDate(), raceRecord.getTrackingEndTime().asDate(), raceRecord.getRaceStartTime().asDate(), - raceRecord.getBoatClassNames(), raceRecord.getRaceStatus(), raceRecord.getRaceVisibility(), raceRecord.getJsonURL() - .toString(), hasRememberedRegatta(raceRecord.getID()))); + + result.add(new TracTracRaceRecordDTO(raceRecord.getID(), raceRecord.getEventName(), raceRecord.getName(), + raceRecord.getTrackingStartTime().asDate(), + raceRecord + .getTrackingEndTime().asDate(), raceRecord.getRaceStartTime().asDate(), + raceRecord.getBoatClassNames(), raceRecord.getRaceStatus(), raceRecord.getRaceVisibility(), raceRecord.getJsonURL().toString(), + hasRememberedRegatta(raceRecord.getID()))); } return new com.sap.sse.common.Util.Pair>(raceRecords.getA(), result); } @@ -1058,15 +1051,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public void trackWithTracTrac(RegattaIdentifier regattaToAddTo, Iterable rrs, String liveURI, String storedURI, String courseDesignUpdateURI, boolean trackWind, final boolean correctWindByDeclination, - final boolean simulateWithStartTimeNow, boolean ignoreTracTracMarkPassings, String tracTracUsername, String tracTracPassword) + final boolean simulateWithStartTimeNow, final boolean ignoreTracTracMarkPassings, String tracTracUsername, String tracTracPassword) throws Exception { logger.info("tracWithTracTrac for regatta " + regattaToAddTo + " for race records " + rrs + " with liveURI " + liveURI + " and storedURI " + storedURI); for (TracTracRaceRecordDTO rr : rrs) { // reload JSON and load clientparams.php - RaceRecord record = getTracTracAdapter().getSingleTracTracRaceRecord(new URL(rr.jsonURL), rr.id, /* loadClientParams */true); - logger.info("Loaded race " + record.getName() + " in " + record.getEventName() + " start:" + record.getRaceStartTime() - + " trackingStart:" + record.getTrackingStartTime() + " trackingEnd:" + record.getTrackingEndTime()); + RaceRecord record = getTracTracAdapter().getSingleTracTracRaceRecord(new URL(rr.jsonURL), rr.id, /*loadClientParams*/true); + logger.info("Loaded race " + record.getName() + " in " + record.getEventName() + " start:" + record.getRaceStartTime() + " trackingStart:" + record.getTrackingStartTime() + " trackingEnd:" + record.getTrackingEndTime()); // note that the live URI may be null for races that were put into replay mode final String effectiveLiveURI; if (!record.getRaceStatus().equals(TracTracConnectionConstants.REPLAY_STATUS)) { @@ -1084,8 +1076,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } else { effectiveStoredURI = storedURI; } - final RaceHandle raceHandle = getTracTracAdapter().addTracTracRace(getService(), regattaToAddTo, record.getParamURL(), - effectiveLiveURI == null ? null : new URI(effectiveLiveURI), new URI(effectiveStoredURI), + final RaceHandle raceHandle = getTracTracAdapter().addTracTracRace(getService(), regattaToAddTo, + record.getParamURL(), effectiveLiveURI == null ? null : new URI(effectiveLiveURI), + new URI(effectiveStoredURI), new URI(courseDesignUpdateURI), new MillisecondsTimePoint(record.getTrackingStartTime().asMillis()), new MillisecondsTimePoint(record.getTrackingEndTime().asMillis()), MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory), @@ -1115,18 +1108,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Iterable configs = tractracDomainObjectFactory.getTracTracConfigurations(); List result = new ArrayList(); for (TracTracConfiguration ttConfig : configs) { - result.add(new TracTracConfigurationDTO(ttConfig.getName(), ttConfig.getJSONURL().toString(), ttConfig.getLiveDataURI() - .toString(), ttConfig.getStoredDataURI().toString(), ttConfig.getCourseDesignUpdateURI().toString(), ttConfig - .getTracTracUsername().toString(), ttConfig.getTracTracPassword().toString())); + result.add(new TracTracConfigurationDTO(ttConfig.getName(), ttConfig.getJSONURL().toString(), + ttConfig.getLiveDataURI().toString(), ttConfig.getStoredDataURI().toString(), ttConfig.getCourseDesignUpdateURI().toString(), + ttConfig.getTracTracUsername().toString(), ttConfig.getTracTracPassword().toString())); } return result; } @Override - public void storeTracTracConfiguration(String name, String jsonURL, String liveDataURI, String storedDataURI, - String courseDesignUpdateURI, String tracTracUsername, String tracTracPassword) throws Exception { - tractracMongoObjectFactory.storeTracTracConfiguration(getTracTracAdapter().createTracTracConfiguration(name, jsonURL, liveDataURI, - storedDataURI, courseDesignUpdateURI, tracTracUsername, tracTracPassword)); + public void storeTracTracConfiguration(String name, String jsonURL, String liveDataURI, String storedDataURI, String courseDesignUpdateURI, String tracTracUsername, String tracTracPassword) throws Exception { + tractracMongoObjectFactory.storeTracTracConfiguration(getTracTracAdapter().createTracTracConfiguration(name, jsonURL, liveDataURI, storedDataURI, + courseDesignUpdateURI, tracTracUsername, tracTracPassword)); } @Override @@ -1157,10 +1149,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } /** - * @param timeoutInMilliseconds - * eventually passed to {@link RaceHandle#getRace(long)}. If the race definition can be obtained within - * this timeout, wind for the race will be tracked; otherwise, the method returns without taking any - * effect. + * @param timeoutInMilliseconds eventually passed to {@link RaceHandle#getRace(long)}. If the race definition + * can be obtained within this timeout, wind for the race will be tracked; otherwise, the method returns without + * taking any effect. */ private void startTrackingWind(RaceHandle raceHandle, boolean correctByDeclination, long timeoutInMilliseconds) throws Exception { Regatta regatta = raceHandle.getRegatta(); @@ -1169,8 +1160,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (race != null) { getService().startTrackingWind(regatta, race, correctByDeclination); } else { - log("RaceDefinition wasn't received within " + timeoutInMilliseconds + "ms for a race in regatta " + regatta.getName() - + ". Aborting wait; no wind tracking for this race."); + log("RaceDefinition wasn't received within " + timeoutInMilliseconds + "ms for a race in regatta " + + regatta.getName() + ". Aborting wait; no wind tracking for this race."); } } } @@ -1193,7 +1184,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S windSourcesToDeliver.add(new WindSourceImpl(WindSourceType.WEB)); } for (WindSource windSource : windSourcesToDeliver) { - if (windSource.getType() == WindSourceType.WEB) { + if(windSource.getType() == WindSourceType.WEB) { WindTrackInfoDTO windTrackInfoDTO = new WindTrackInfoDTO(); windTrackInfoDTO.windFixes = new ArrayList(); WindTrack windTrack = trackedRace.getOrCreateWindTrack(windSource); @@ -1203,7 +1194,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Iterator windIter = windTrack.getRawFixes().iterator(); while (windIter.hasNext()) { Wind wind = windIter.next(); - if (wind != null) { + if(wind != null) { WindDTO windDTO = createWindDTO(wind, windTrack); windTrackInfoDTO.windFixes.add(windDTO); } @@ -1226,11 +1217,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S windDTO.trueWindSpeedInKnots = wind.getKnots(); windDTO.trueWindSpeedInMetersPerSecond = wind.getMetersPerSecond(); if (wind.getPosition() != null) { - windDTO.position = new PositionDTO(wind.getPosition().getLatDeg(), wind.getPosition().getLngDeg()); + windDTO.position = new PositionDTO(wind.getPosition().getLatDeg(), wind.getPosition() + .getLngDeg()); } if (wind.getTimePoint() != null) { windDTO.measureTimepoint = wind.getTimePoint().asMillis(); - Wind estimatedWind = windTrack.getAveragedWind(wind.getPosition(), wind.getTimePoint()); + Wind estimatedWind = windTrack + .getAveragedWind(wind.getPosition(), wind.getTimePoint()); if (estimatedWind != null) { windDTO.dampenedTrueWindBearingDeg = estimatedWind.getBearing().getDegrees(); windDTO.dampenedTrueWindFromDeg = estimatedWind.getBearing().reverse().getDegrees(); @@ -1256,7 +1249,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S windDTO.dampenedTrueWindSpeedInKnots = wind.getKnots(); windDTO.dampenedTrueWindSpeedInMetersPerSecond = wind.getMetersPerSecond(); if (wind.getPosition() != null) { - windDTO.position = new PositionDTO(wind.getPosition().getLatDeg(), wind.getPosition().getLngDeg()); + windDTO.position = new PositionDTO(wind.getPosition().getLatDeg(), wind.getPosition() + .getLngDeg()); } if (wind.getTimePoint() != null) { windDTO.measureTimepoint = wind.getTimePoint().asMillis(); @@ -1265,12 +1259,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } /** - * Fetches the {@link WindTrack#getAveragedWind(Position, TimePoint) average wind} from all wind tracks or those - * identified by windSourceTypeNames + * Fetches the {@link WindTrack#getAveragedWind(Position, TimePoint) average wind} from all wind tracks or those identified + * by windSourceTypeNames */ @Override public WindInfoForRaceDTO getAveragedWindInfo(RegattaAndRaceIdentifier raceIdentifier, Date from, long millisecondsStepWidth, - int numberOfFixes, double latDeg, double lngDeg, Collection windSourceTypeNames) throws NoWindException { + int numberOfFixes, double latDeg, double lngDeg, Collection windSourceTypeNames) + throws NoWindException { Position position = new DegreePosition(latDeg, lngDeg); WindInfoForRaceDTO result = null; TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); @@ -1294,13 +1289,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S windTrackInfoDTO.windFixes = new ArrayList(); WindTrack windTrack = trackedRace.getOrCreateWindTrack(windSource); windTrackInfoDTOs.put(windSource, windTrackInfoDTO); - windTrackInfoDTO.dampeningIntervalInMilliseconds = windTrack.getMillisecondsOverWhichToAverageWind(); + windTrackInfoDTO.dampeningIntervalInMilliseconds = windTrack + .getMillisecondsOverWhichToAverageWind(); TimePoint timePoint = fromTimePoint; Double minWindConfidence = 2.0; Double maxWindConfidence = -1.0; for (int i = 0; i < numberOfFixes; i++) { - WindWithConfidence> averagedWindWithConfidence = windTrack - .getAveragedWindWithConfidence(position, timePoint); + WindWithConfidence> averagedWindWithConfidence = windTrack.getAveragedWindWithConfidence(position, timePoint); if (averagedWindWithConfidence != null) { WindDTO windDTO = createWindDTOFromAlreadyAveraged(averagedWindWithConfidence.getObject(), timePoint); double confidence = averagedWindWithConfidence.getConfidence(); @@ -1315,8 +1310,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } timePoint = new MillisecondsTimePoint(timePoint.asMillis() + millisecondsStepWidth); } - windTrackInfoDTO.minWindConfidence = minWindConfidence; - windTrackInfoDTO.maxWindConfidence = maxWindConfidence; + windTrackInfoDTO.minWindConfidence = minWindConfidence; + windTrackInfoDTO.maxWindConfidence = maxWindConfidence; } } } @@ -1334,12 +1329,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S */ @Override public WindInfoForRaceDTO getAveragedWindInfo(RegattaAndRaceIdentifier raceIdentifier, Date from, long millisecondsStepWidth, - int numberOfFixes, Collection windSourceTypeNames, boolean onlyUpToNewestEvent, - boolean includeCombinedWindForAllLegMiddles) throws NoWindException { + int numberOfFixes, Collection windSourceTypeNames, boolean onlyUpToNewestEvent, boolean includeCombinedWindForAllLegMiddles) + throws NoWindException { assert from != null; TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); WindInfoForRaceDTO result = getAveragedWindInfo(new MillisecondsTimePoint(from), millisecondsStepWidth, numberOfFixes, - windSourceTypeNames, trackedRace, /* onlyUpToNewestEvent */true, includeCombinedWindForAllLegMiddles); + windSourceTypeNames, trackedRace, /* onlyUpToNewestEvent */ true, includeCombinedWindForAllLegMiddles); return result; } @@ -1377,26 +1372,20 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S for (final WindSource windSource : windSourcesToDeliver) { // TODO consider parallelizing if (windSourceTypeNames == null || windSourceTypeNames.contains(windSource.getType().name())) { - WindTrackInfoDTO windTrackInfoDTO = createWindTrackInfoDTO(from, millisecondsStepWidth, numberOfFixes, trackedRace, - onlyUpToNewestEvent, newestEvent, windSource, new PositionAtTimeProvider() { - @Override - public Position getPosition(TimePoint at) { - return windSource == combinedWindSource ? trackedRace.getCenterOfCourse(at) : null; - } - }); + WindTrackInfoDTO windTrackInfoDTO = createWindTrackInfoDTO(from, millisecondsStepWidth, + numberOfFixes, trackedRace, onlyUpToNewestEvent, newestEvent, windSource, + new PositionAtTimeProvider() { @Override public Position getPosition(TimePoint at) { + return windSource == combinedWindSource ? trackedRace.getCenterOfCourse(at) : null; + }}); windTrackInfoDTOs.put(windSource, windTrackInfoDTO); } } if (includeCombinedWindForAllLegMiddles) { int zeroBasedLegNumber = 0; for (final TrackedLeg trackedLeg : trackedRace.getTrackedLegs()) { - WindTrackInfoDTO windTrackInfoForLegMiddle = createWindTrackInfoDTO(from, millisecondsStepWidth, numberOfFixes, - trackedRace, onlyUpToNewestEvent, newestEvent, combinedWindSource, new PositionAtTimeProvider() { - @Override - public Position getPosition(TimePoint at) { - return trackedLeg.getMiddleOfLeg(at); - } - }); + WindTrackInfoDTO windTrackInfoForLegMiddle = createWindTrackInfoDTO(from, millisecondsStepWidth, + numberOfFixes, trackedRace, onlyUpToNewestEvent, newestEvent, combinedWindSource, + new PositionAtTimeProvider() { @Override public Position getPosition(TimePoint at) { return trackedLeg.getMiddleOfLeg(at); }}); result.addWindOnLegMiddle(zeroBasedLegNumber, windTrackInfoForLegMiddle); zeroBasedLegNumber++; } @@ -1408,9 +1397,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private interface PositionAtTimeProvider { Position getPosition(TimePoint at); } - - private WindTrackInfoDTO createWindTrackInfoDTO(TimePoint from, long millisecondsStepWidth, int numberOfFixes, TrackedRace trackedRace, - boolean onlyUpToNewestEvent, TimePoint newestEvent, WindSource windSource, PositionAtTimeProvider positionProvider) { + + private WindTrackInfoDTO createWindTrackInfoDTO(TimePoint from, long millisecondsStepWidth, int numberOfFixes, + TrackedRace trackedRace, boolean onlyUpToNewestEvent, TimePoint newestEvent, WindSource windSource, + PositionAtTimeProvider positionProvider) { WindTrack windTrack = trackedRace.getOrCreateWindTrack(windSource); WindTrackInfoDTO windTrackInfoDTO = new WindTrackInfoDTO(); windTrackInfoDTO.windFixes = new ArrayList(); @@ -1418,9 +1408,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S TimePoint timePoint = from; Double minWindConfidence = 2.0; Double maxWindConfidence = -1.0; - for (int i = 0; i < numberOfFixes && (!onlyUpToNewestEvent || (newestEvent != null && timePoint.before(newestEvent))); i++) { - WindWithConfidence> averagedWindWithConfidence = windTrack - .getAveragedWindWithConfidence(positionProvider.getPosition(timePoint), timePoint); + for (int i = 0; i < numberOfFixes && (!onlyUpToNewestEvent || + (newestEvent != null && timePoint.before(newestEvent))); i++) { + WindWithConfidence> averagedWindWithConfidence = + windTrack.getAveragedWindWithConfidence(positionProvider.getPosition(timePoint), timePoint); if (averagedWindWithConfidence != null) { if (logger.getLevel() != null && logger.getLevel().equals(Level.FINEST)) { logger.finest("Found averaged wind: " + averagedWindWithConfidence); @@ -1437,13 +1428,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } } else { if (logger.getLevel() != null && logger.getLevel().equals(Level.FINEST)) { - logger.finest("Did NOT find any averaged wind for timepoint " + timePoint + " and tracked race " - + trackedRace.getRaceIdentifier().getRaceName()); + logger.finest("Did NOT find any averaged wind for timepoint " + timePoint + " and tracked race " + trackedRace.getRaceIdentifier().getRaceName()); } } timePoint = new MillisecondsTimePoint(timePoint.asMillis() + millisecondsStepWidth); } - windTrackInfoDTO.minWindConfidence = minWindConfidence; + windTrackInfoDTO.minWindConfidence = minWindConfidence; windTrackInfoDTO.maxWindConfidence = maxWindConfidence; return windTrackInfoDTO; } @@ -1467,12 +1457,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S WindInfoForRaceDTO result = null; if (trackedRace != null) { TimePoint fromTimePoint = from == null ? trackedRace.getStartOfTracking() : new MillisecondsTimePoint(from); - TimePoint toTimePoint = to == null ? trackedRace.getEndOfRace() == null ? MillisecondsTimePoint.now().minus( - trackedRace.getDelayToLiveInMillis()) : trackedRace.getEndOfRace() : new MillisecondsTimePoint(to); + TimePoint toTimePoint = to == null ? trackedRace.getEndOfRace() == null ? + MillisecondsTimePoint.now().minus(trackedRace.getDelayToLiveInMillis()) : trackedRace.getEndOfRace() : new MillisecondsTimePoint(to); if (fromTimePoint != null && toTimePoint != null) { - int numberOfFixes = (int) ((toTimePoint.asMillis() - fromTimePoint.asMillis()) / resolutionInMilliseconds); - result = getAveragedWindInfo(fromTimePoint, resolutionInMilliseconds, numberOfFixes, windSourceTypeNames, trackedRace, - onlyUpToNewestEvent, /* includeCombinedWindForAllLegMiddles */false); + int numberOfFixes = (int) ((toTimePoint.asMillis() - fromTimePoint.asMillis())/resolutionInMilliseconds); + result = getAveragedWindInfo(fromTimePoint, resolutionInMilliseconds, numberOfFixes, + windSourceTypeNames, trackedRace, onlyUpToNewestEvent, /* includeCombinedWindForAllLegMiddles */ false); } } return result; @@ -1636,15 +1626,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } if (speed != null) { if (windDTO.trueWindBearingDeg != null) { - speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl(windDTO.trueWindBearingDeg)); + speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl( + windDTO.trueWindBearingDeg)); } else if (windDTO.trueWindFromDeg != null) { - speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), - new DegreeBearingImpl(windDTO.trueWindFromDeg).reverse()); + speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl( + windDTO.trueWindFromDeg).reverse()); } } Wind wind = new WindImpl(p, at, speedWithBearing); Iterable webWindSources = trackedRace.getWindSources(WindSourceType.WEB); - if (Util.size(webWindSources) == 0) { + if(Util.size(webWindSources) == 0) { // create a new WEB wind source if not available trackedRace.recordWind(wind, new WindSourceImpl(WindSourceType.WEB)); } else { @@ -1655,10 +1646,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public CompactRaceMapDataDTO getRaceMapData(RegattaAndRaceIdentifier raceIdentifier, Date date, - Map fromPerCompetitorIdAsString, Map toPerCompetitorIdAsString, boolean extrapolate) - throws NoWindException { - final Map> boatPositions = getBoatPositions(raceIdentifier, fromPerCompetitorIdAsString, - toPerCompetitorIdAsString, extrapolate); + Map fromPerCompetitorIdAsString, Map toPerCompetitorIdAsString, + boolean extrapolate) throws NoWindException { + final Map> boatPositions = getBoatPositions(raceIdentifier, + fromPerCompetitorIdAsString, toPerCompetitorIdAsString, extrapolate); final CoursePositionsDTO coursePositions = getCoursePositions(raceIdentifier, date); final List courseSidelines = getCourseSidelines(raceIdentifier, date); final List quickRanks = getQuickRanks(raceIdentifier, date); @@ -1684,7 +1675,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S * chronological order is provided. The last one is the last position at or before date. */ private Map> getBoatPositions(RegattaAndRaceIdentifier raceIdentifier, - Map fromPerCompetitorIdAsString, Map toPerCompetitorIdAsString, boolean extrapolate) + Map fromPerCompetitorIdAsString, Map toPerCompetitorIdAsString, + boolean extrapolate) throws NoWindException { Map, LegType> legTypeCache = new HashMap<>(); Map> result = new HashMap>(); @@ -1708,7 +1700,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S GPSFixMoving fix = fixIter.next(); if (fix.getTimePoint().before(toTimePointExcluding)) { if (logger.isLoggable(Level.FINEST)) { - logger.finest("" + competitor.getName() + ": " + fix); + logger.finest(""+competitor.getName()+": " + fix); } fixes.add(fix); } else { @@ -1719,15 +1711,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S track.unlockAfterRead(); } if (fixes.isEmpty()) { - // then there was no (smoothened) fix between fromTimePoint and toTimePointExcluding; - // estimate... - TimePoint middle = new MillisecondsTimePoint((toTimePointExcluding.asMillis() + fromTimePoint.asMillis()) / 2); + // then there was no (smoothened) fix between fromTimePoint and toTimePointExcluding; estimate... + TimePoint middle = new MillisecondsTimePoint((toTimePointExcluding.asMillis()+fromTimePoint.asMillis())/2); Position estimatedPosition = track.getEstimatedPosition(middle, extrapolate); SpeedWithBearing estimatedSpeed = track.getEstimatedSpeed(middle); if (estimatedPosition != null && estimatedSpeed != null) { GPSFixMoving estimatedFix = new GPSFixMovingImpl(estimatedPosition, middle, estimatedSpeed); if (logger.getLevel() != null && logger.getLevel().equals(Level.FINEST)) { - logger.finest("" + competitor.getName() + ": " + estimatedFix + " (estimated)"); + logger.finest(""+competitor.getName()+": " + estimatedFix+" (estimated)"); } fixes.add(estimatedFix); } @@ -1735,22 +1726,23 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Iterator fixIter = fixes.iterator(); if (fixIter.hasNext()) { GPSFixMoving fix = fixIter.next(); - while (fix != null - && (fix.getTimePoint().before(toTimePointExcluding) || (fix.getTimePoint().equals(toTimePointExcluding) && toTimePointExcluding - .equals(fromTimePoint)))) { + while (fix != null && (fix.getTimePoint().before(toTimePointExcluding) || + (fix.getTimePoint().equals(toTimePointExcluding) && toTimePointExcluding.equals(fromTimePoint)))) { Wind wind = trackedRace.getWind(fix.getPosition(), fix.getTimePoint()); final SpeedWithBearing estimatedSpeed = track.getEstimatedSpeed(fix.getTimePoint()); - Tack tack = wind == null ? null : trackedRace.getTack(estimatedSpeed, wind, fix.getTimePoint()); - TrackedLegOfCompetitor trackedLegOfCompetitor = trackedRace.getTrackedLeg(competitor, fix.getTimePoint()); + Tack tack = wind == null? null : trackedRace.getTack(estimatedSpeed, wind, fix.getTimePoint()); + TrackedLegOfCompetitor trackedLegOfCompetitor = trackedRace.getTrackedLeg(competitor, + fix.getTimePoint()); LegType legType; if (trackedLegOfCompetitor != null && trackedLegOfCompetitor.getLeg() != null) { TimePoint quantifiedTimePoint = quantifyTimePointWithResolution(fix.getTimePoint(), /* resolutionInMilliseconds */ 60000); - Pair cacheKey = new Pair(trackedLegOfCompetitor.getLeg(), - quantifiedTimePoint); + Pair cacheKey = new Pair( + trackedLegOfCompetitor.getLeg(), quantifiedTimePoint); legType = legTypeCache.get(cacheKey); if (legType == null) { - legType = trackedRace.getTrackedLeg(trackedLegOfCompetitor.getLeg()).getLegType(fix.getTimePoint()); + legType = trackedRace.getTrackedLeg(trackedLegOfCompetitor.getLeg()).getLegType( + fix.getTimePoint()); legTypeCache.put(cacheKey, legType); } } else { @@ -1771,13 +1763,15 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Tack tack2 = wind2 == null ? null : trackedRace.getTack(estimatedSpeed2, wind2, toTimePointExcluding); LegType legType2; if (trackedLegOfCompetitor != null && trackedLegOfCompetitor.getLeg() != null) { - TimePoint quantifiedTimePoint = quantifyTimePointWithResolution(fix.getTimePoint(), /* resolutionInMilliseconds */ + TimePoint quantifiedTimePoint = quantifyTimePointWithResolution( + fix.getTimePoint(), /* resolutionInMilliseconds */ 60000); - Pair cacheKey = new Pair(trackedLegOfCompetitor.getLeg(), - quantifiedTimePoint); + Pair cacheKey = new Pair( + trackedLegOfCompetitor.getLeg(), quantifiedTimePoint); legType2 = legTypeCache.get(cacheKey); if (legType2 == null) { - legType2 = trackedRace.getTrackedLeg(trackedLegOfCompetitor.getLeg()).getLegType( + legType2 = trackedRace.getTrackedLeg(trackedLegOfCompetitor.getLeg()) + .getLegType( fix.getTimePoint()); legTypeCache.put(cacheKey, legType2); } @@ -1785,10 +1779,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S legType2 = null; } WindDTO windDTO2 = wind2 == null ? null : createWindDTOFromAlreadyAveraged(wind2, toTimePointExcluding); - GPSFixDTO extrapolated = new GPSFixDTO(toPerCompetitorIdAsString.get(competitorDTO.getIdAsString()), - position == null ? null : new PositionDTO(position.getLatDeg(), position.getLngDeg()), - estimatedSpeed2 == null ? null : createSpeedWithBearingDTO(estimatedSpeed2), windDTO2, tack2, - legType2, /* extrapolated */true); + GPSFixDTO extrapolated = new GPSFixDTO( + toPerCompetitorIdAsString.get(competitorDTO.getIdAsString()), + position==null?null:new PositionDTO(position.getLatDeg(), position.getLngDeg()), + estimatedSpeed2==null?null:createSpeedWithBearingDTO(estimatedSpeed2), windDTO2, + tack2, legType2, /* extrapolated */ true); fixesForCompetitor.add(extrapolated); } fix = null; @@ -1806,14 +1801,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } private SpeedWithBearingDTO createSpeedWithBearingDTO(SpeedWithBearing speedWithBearing) { - return new SpeedWithBearingDTO(speedWithBearing.getKnots(), speedWithBearing.getBearing().getDegrees()); + return new SpeedWithBearingDTO(speedWithBearing.getKnots(), speedWithBearing + .getBearing().getDegrees()); } - private GPSFixDTO createGPSFixDTO(GPSFix fix, SpeedWithBearing speedWithBearing, WindDTO windDTO, Tack tack, LegType legType, - boolean extrapolated) { - return new GPSFixDTO(fix.getTimePoint().asDate(), fix.getPosition() == null ? null : new PositionDTO(fix.getPosition().getLatDeg(), - fix.getPosition().getLngDeg()), speedWithBearing == null ? null : createSpeedWithBearingDTO(speedWithBearing), windDTO, - tack, legType, extrapolated); + private GPSFixDTO createGPSFixDTO(GPSFix fix, SpeedWithBearing speedWithBearing, WindDTO windDTO, Tack tack, LegType legType, boolean extrapolated) { + return new GPSFixDTO(fix.getTimePoint().asDate(), fix.getPosition()==null?null:new PositionDTO(fix + .getPosition().getLatDeg(), fix.getPosition().getLngDeg()), + speedWithBearing==null?null:createSpeedWithBearingDTO(speedWithBearing), windDTO, tack, legType, extrapolated); } @Override @@ -1830,14 +1825,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S raceTimesInfo.startOfRace = trackedRace.getStartOfRace() == null ? null : trackedRace.getStartOfRace().asDate(); raceTimesInfo.startOfTracking = trackedRace.getStartOfTracking() == null ? null : trackedRace.getStartOfTracking().asDate(); - raceTimesInfo.newestTrackingEvent = trackedRace.getTimePointOfNewestEvent() == null ? null : trackedRace - .getTimePointOfNewestEvent().asDate(); + raceTimesInfo.newestTrackingEvent = trackedRace.getTimePointOfNewestEvent() == null ? null : trackedRace.getTimePointOfNewestEvent().asDate(); raceTimesInfo.endOfTracking = trackedRace.getEndOfTracking() == null ? null : trackedRace.getEndOfTracking().asDate(); raceTimesInfo.endOfRace = trackedRace.getEndOfRace() == null ? null : trackedRace.getEndOfRace().asDate(); raceTimesInfo.delayToLiveInMs = trackedRace.getDelayToLiveInMillis(); - Iterable>> markPassingsTimes = trackedRace - .getMarkPassingsTimes(); + Iterable>> markPassingsTimes = trackedRace.getMarkPassingsTimes(); synchronized (markPassingsTimes) { int numberOfWaypoints = Util.size(markPassingsTimes); int wayPointNumber = 1; @@ -1880,7 +1873,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } finally { trackedRace.getRace().getCourse().unlockAfterRead(); } - } + } if (raceTimesInfo != null) { raceTimesInfo.currentServerTime = new Date(); } @@ -1923,7 +1916,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return result; } - + @Override public CoursePositionsDTO getCoursePositions(RegattaAndRaceIdentifier raceIdentifier, Date date) { CoursePositionsDTO result = new CoursePositionsDTO(); @@ -1942,7 +1935,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S for (Waypoint waypoint : course.getWaypoints()) { Position waypointPosition = trackedRace.getApproximatePosition(waypoint, dateAsTimePoint); if (waypointPosition != null) { - result.waypointPositions.add(new PositionDTO(waypointPosition.getLatDeg(), waypointPosition.getLngDeg())); + result.waypointPositions.add(new PositionDTO(waypointPosition.getLatDeg(), waypointPosition + .getLngDeg())); } for (Mark b : waypoint.getMarks()) { marks.add(b); @@ -1961,13 +1955,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (firstWaypoint != null && Util.size(firstWaypoint.getMarks()) == 2) { final LineDetails markPositionDTOsAndLineAdvantage = trackedRace.getStartLine(dateAsTimePoint); if (markPositionDTOsAndLineAdvantage != null) { - final List startMarkPositionDTOs = getMarkPositionDTOs(dateAsTimePoint, trackedRace, firstWaypoint); + final List startMarkPositionDTOs = getMarkPositionDTOs(dateAsTimePoint, trackedRace, + firstWaypoint); result.startMarkPositions = startMarkPositionDTOs; result.startLineLengthInMeters = markPositionDTOsAndLineAdvantage.getLength().getMeters(); - Bearing absoluteAngleDifferenceToTrueWind = markPositionDTOsAndLineAdvantage.getAbsoluteAngleDifferenceToTrueWind(); + Bearing absoluteAngleDifferenceToTrueWind = markPositionDTOsAndLineAdvantage + .getAbsoluteAngleDifferenceToTrueWind(); result.startLineAngleToCombinedWind = absoluteAngleDifferenceToTrueWind == null ? null : absoluteAngleDifferenceToTrueWind.getDegrees(); - result.startLineAdvantageousSide = markPositionDTOsAndLineAdvantage.getAdvantageousSideWhileApproachingLine(); + result.startLineAdvantageousSide = markPositionDTOsAndLineAdvantage + .getAdvantageousSideWhileApproachingLine(); Distance advantage = markPositionDTOsAndLineAdvantage.getAdvantage(); result.startLineAdvantageInMeters = advantage == null ? null : advantage.getMeters(); } @@ -1976,13 +1973,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (lastWaypoint != null && Util.size(lastWaypoint.getMarks()) == 2) { final LineDetails markPositionDTOsAndLineAdvantage = trackedRace.getFinishLine(dateAsTimePoint); if (markPositionDTOsAndLineAdvantage != null) { - final List finishMarkPositionDTOs = getMarkPositionDTOs(dateAsTimePoint, trackedRace, lastWaypoint); + final List finishMarkPositionDTOs = getMarkPositionDTOs(dateAsTimePoint, trackedRace, + lastWaypoint); result.finishMarkPositions = finishMarkPositionDTOs; result.finishLineLengthInMeters = markPositionDTOsAndLineAdvantage.getLength().getMeters(); - Bearing absoluteAngleDifferenceToTrueWind = markPositionDTOsAndLineAdvantage.getAbsoluteAngleDifferenceToTrueWind(); + Bearing absoluteAngleDifferenceToTrueWind = markPositionDTOsAndLineAdvantage + .getAbsoluteAngleDifferenceToTrueWind(); result.finishLineAngleToCombinedWind = absoluteAngleDifferenceToTrueWind == null ? null : absoluteAngleDifferenceToTrueWind.getDegrees(); - result.finishLineAdvantageousSide = markPositionDTOsAndLineAdvantage.getAdvantageousSideWhileApproachingLine(); + result.finishLineAdvantageousSide = markPositionDTOsAndLineAdvantage + .getAdvantageousSideWhileApproachingLine(); Distance advantage = markPositionDTOsAndLineAdvantage.getAdvantage(); result.finishLineAdvantageInMeters = advantage == null ? null : advantage.getMeters(); } @@ -1990,7 +1990,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return result; } - + @Override public RaceCourseDTO getRaceCourse(RegattaAndRaceIdentifier raceIdentifier, Date date) { List waypointDTOs = new ArrayList(); @@ -2010,44 +2010,42 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S controlPointDTO = convertToControlPointDTO(waypoint.getControlPoint(), trackedRace, dateAsTimePoint); controlPointCache.put(waypoint.getControlPoint().getId(), controlPointDTO); } - WaypointDTO waypointDTO = new WaypointDTO(waypoint.getName(), controlPointDTO, waypoint.getPassingInstructions()); + WaypointDTO waypointDTO = new WaypointDTO(waypoint.getName(), controlPointDTO, + waypoint.getPassingInstructions()); waypointDTOs.add(waypointDTO); } } return new RaceCourseDTO(waypointDTOs, allMarks); } - + private ControlPointDTO convertToControlPointDTO(ControlPoint controlPoint, TrackedRace trackedRace, TimePoint timePoint) { ControlPointDTO result; if (controlPoint instanceof ControlPointWithTwoMarks) { final Mark left = ((ControlPointWithTwoMarks) controlPoint).getLeft(); - final Position leftPos = trackedRace.getOrCreateTrack(left).getEstimatedPosition(timePoint, /* extrapolate */false); + final Position leftPos = trackedRace.getOrCreateTrack(left).getEstimatedPosition(timePoint, /* extrapolate */ false); final Mark right = ((ControlPointWithTwoMarks) controlPoint).getRight(); - final Position rightPos = trackedRace.getOrCreateTrack(right).getEstimatedPosition(timePoint, /* extrapolate */false); - result = new GateDTO(controlPoint.getId().toString(), controlPoint.getName(), convertToMarkDTO(left, leftPos), - convertToMarkDTO(right, rightPos)); + final Position rightPos = trackedRace.getOrCreateTrack(right).getEstimatedPosition(timePoint, /* extrapolate */ false); + result = new GateDTO(controlPoint.getId().toString(), controlPoint.getName(), convertToMarkDTO(left, leftPos), convertToMarkDTO(right, rightPos)); } else { - final Position posOfFirst = trackedRace.getOrCreateTrack(controlPoint.getMarks().iterator().next()).getEstimatedPosition( - timePoint, /* extrapolate */false); - result = new MarkDTO(controlPoint.getId().toString(), controlPoint.getName(), posOfFirst == null ? -1 : posOfFirst.getLatDeg(), - posOfFirst == null ? -1 : posOfFirst.getLngDeg()); + final Position posOfFirst = trackedRace.getOrCreateTrack(controlPoint.getMarks().iterator().next()). + getEstimatedPosition(timePoint, /* extrapolate */ false); + result = new MarkDTO(controlPoint.getId().toString(), controlPoint.getName(), posOfFirst == null ? -1 : posOfFirst.getLatDeg(), posOfFirst == null ? -1 : posOfFirst.getLngDeg()); } return result; } - + private ControlPointDTO convertToControlPointDTO(ControlPoint controlPoint) { ControlPointDTO result; if (controlPoint instanceof ControlPointWithTwoMarks) { final Mark left = ((ControlPointWithTwoMarks) controlPoint).getLeft(); final Mark right = ((ControlPointWithTwoMarks) controlPoint).getRight(); - result = new GateDTO(controlPoint.getId().toString(), controlPoint.getName(), convertToMarkDTO(left, null), convertToMarkDTO( - right, null)); + result = new GateDTO(controlPoint.getId().toString(), controlPoint.getName(), convertToMarkDTO(left, null), convertToMarkDTO(right, null)); } else { result = new MarkDTO(controlPoint.getId().toString(), controlPoint.getName()); } return result; } - + private ControlPoint getOrCreateControlPoint(ControlPointDTO dto) { String id = dto.getIdAsString(); if (id == null) { @@ -2065,12 +2063,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } /** - * Creates new ControlPoints, if nThe resulting list of control points is then passed to - * {@link Course#update(List, com.sap.sailing.domain.base.DomainFactory)} for the course of the race identified by - * raceIdentifier. + * Creates new ControlPoints, if nThe resulting + * list of control points is then passed to {@link Course#update(List, com.sap.sailing.domain.base.DomainFactory)} for + * the course of the race identified by raceIdentifier. */ @Override - public void updateRaceCourse(RegattaAndRaceIdentifier raceIdentifier, List> courseDTO) { + public void updateRaceCourse(RegattaAndRaceIdentifier raceIdentifier, + List> courseDTO) { TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); if (trackedRace != null) { Course course = trackedRace.getRace().getCourse(); @@ -2086,11 +2085,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } } - private List getMarkPositionDTOs(TimePoint timePoint, TrackedRace trackedRace, Waypoint waypoint) { + private List getMarkPositionDTOs( + TimePoint timePoint, TrackedRace trackedRace, Waypoint waypoint) { List markPositionDTOs = new ArrayList(); for (Mark startMark : waypoint.getMarks()) { - final Position estimatedMarkPosition = trackedRace.getOrCreateTrack(startMark).getEstimatedPosition(timePoint, /* extrapolate */ - false); + final Position estimatedMarkPosition = trackedRace.getOrCreateTrack(startMark) + .getEstimatedPosition(timePoint, /* extrapolate */false); if (estimatedMarkPosition != null) { markPositionDTOs.add(new PositionDTO(estimatedMarkPosition.getLatDeg(), estimatedMarkPosition.getLngDeg())); } @@ -2103,7 +2103,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S * null means "live" and is then replaced by "now" minus the tracked race's * {@link TrackedRace#getDelayToLiveInMillis() delay}. */ - public List computeQuickRanks(RegattaAndRaceIdentifier raceIdentifier, TimePoint timePoint) throws NoWindException { + public List computeQuickRanks(RegattaAndRaceIdentifier raceIdentifier, TimePoint timePoint) + throws NoWindException { List result = new ArrayList(); TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); if (trackedRace != null) { @@ -2119,8 +2120,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S TrackedLegOfCompetitor trackedLeg = trackedRace.getTrackedLeg(competitor, actualTimePoint); if (trackedLeg != null) { int legNumberOneBased = race.getCourse().getLegs().indexOf(trackedLeg.getLeg()) + 1; - QuickRankDTO quickRankDTO = new QuickRankDTO(baseDomainFactory.convertToCompetitorDTO(competitor), rank, - legNumberOneBased); + QuickRankDTO quickRankDTO = new QuickRankDTO(baseDomainFactory.convertToCompetitorDTO(competitor), + rank, legNumberOneBased); result.add(quickRankDTO); } rank++; @@ -2164,7 +2165,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Map windTrackInfoDTOs = new HashMap(); result.windTrackInfoByWindSource = windTrackInfoDTOs; - for (WindSource windSource : trackedRace.getWindSources()) { + for(WindSource windSource: trackedRace.getWindSources()) { windTrackInfoDTOs.put(windSource, new WindTrackInfoDTO()); } windTrackInfoDTOs.put(new WindSourceImpl(WindSourceType.COMBINED), new WindTrackInfoDTO()); @@ -2197,10 +2198,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } if (speed != null) { if (windDTO.trueWindBearingDeg != null) { - speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl(windDTO.trueWindBearingDeg)); + speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl( + windDTO.trueWindBearingDeg)); } else if (windDTO.trueWindFromDeg != null) { - speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), - new DegreeBearingImpl(windDTO.trueWindFromDeg).reverse()); + speedWithBearing = new KnotSpeedWithBearingImpl(speed.getKnots(), new DegreeBearingImpl( + windDTO.trueWindFromDeg).reverse()); } } Wind wind = new WindImpl(p, at, speedWithBearing); @@ -2215,7 +2217,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private ReplicationService getReplicationService() { return replicationServiceTracker.getService(); } - + @Override public List getLeaderboardNames() { return new ArrayList(getService().getLeaderboards().keySet()); @@ -2225,43 +2227,38 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S public com.sap.sse.common.Util.Pair checkLeaderboardName(String leaderboardName) { com.sap.sse.common.Util.Pair result = null; - if (getService().getLeaderboards().containsKey(leaderboardName)) { + if(getService().getLeaderboards().containsKey(leaderboardName)) { Leaderboard leaderboard = getService().getLeaderboards().get(leaderboardName); boolean isMetaLeaderboard = leaderboard instanceof MetaLeaderboard ? true : false; boolean isRegattaLeaderboard = leaderboard instanceof RegattaLeaderboard ? true : false; LeaderboardType type; - if (isMetaLeaderboard) { + if(isMetaLeaderboard) { type = isRegattaLeaderboard ? LeaderboardType.RegattaMetaLeaderboard : LeaderboardType.FlexibleMetaLeaderboard; } else { type = isRegattaLeaderboard ? LeaderboardType.RegattaLeaderboard : LeaderboardType.FlexibleLeaderboard; } result = new com.sap.sse.common.Util.Pair(leaderboard.getName(), type); } - + return result; } @Override - public StrippedLeaderboardDTO createFlexibleLeaderboard(String leaderboardName, String leaderboardDisplayName, int[] discardThresholds, - ScoringSchemeType scoringSchemeType, UUID courseAreaId) { - return createStrippedLeaderboardDTO( - getService().apply( - new CreateFlexibleLeaderboard(leaderboardName, leaderboardDisplayName, discardThresholds, baseDomainFactory - .createScoringScheme(scoringSchemeType), courseAreaId)), false, false); + public StrippedLeaderboardDTO createFlexibleLeaderboard(String leaderboardName, String leaderboardDisplayName, int[] discardThresholds, ScoringSchemeType scoringSchemeType, + UUID courseAreaId) { + return createStrippedLeaderboardDTO(getService().apply(new CreateFlexibleLeaderboard(leaderboardName, leaderboardDisplayName, discardThresholds, + baseDomainFactory.createScoringScheme(scoringSchemeType), courseAreaId)), false, false); } - public StrippedLeaderboardDTO createRegattaLeaderboard(RegattaIdentifier regattaIdentifier, String leaderboardDisplayName, - int[] discardThresholds) { - return createStrippedLeaderboardDTO( - getService().apply(new CreateRegattaLeaderboard(regattaIdentifier, leaderboardDisplayName, discardThresholds)), false, - false); + public StrippedLeaderboardDTO createRegattaLeaderboard(RegattaIdentifier regattaIdentifier, String leaderboardDisplayName, int[] discardThresholds) { + return createStrippedLeaderboardDTO(getService().apply(new CreateRegattaLeaderboard(regattaIdentifier, leaderboardDisplayName, discardThresholds)), false, false); } @Override public List getLeaderboards() { Map leaderboards = getService().getLeaderboards(); List results = new ArrayList(); - for (Leaderboard leaderboard : leaderboards.values()) { + for(Leaderboard leaderboard: leaderboards.values()) { StrippedLeaderboardDTO dao = createStrippedLeaderboardDTO(leaderboard, false, false); results.add(dao); } @@ -2316,8 +2313,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S List results = new ArrayList(); Map leaderboards = getService().getLeaderboards(); for (Leaderboard leaderboard : leaderboards.values()) { - if (leaderboard instanceof RegattaLeaderboard - && ((RegattaLeaderboard) leaderboard).getRegatta().getRegattaIdentifier().equals(regattaIdentifier)) { + if (leaderboard instanceof RegattaLeaderboard && ((RegattaLeaderboard) leaderboard).getRegatta().getRegattaIdentifier().equals(regattaIdentifier)) { Iterable races = leaderboard.getRaceColumns(); for (RaceColumn raceInLeaderboard : races) { for (Fleet fleet : raceInLeaderboard.getFleets()) { @@ -2337,16 +2333,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } /** - * Creates a {@link LeaderboardDTO} for leaderboard and fills in the name, race master data in the form - * of {@link RaceColumnDTO}s, whether or not there are {@link LeaderboardDTO#hasCarriedPoints carried points} and - * the {@link LeaderboardDTO#discardThresholds discarding thresholds} for the leaderboard. No data about the points + * Creates a {@link LeaderboardDTO} for leaderboard and fills in the name, race master data + * in the form of {@link RaceColumnDTO}s, whether or not there are {@link LeaderboardDTO#hasCarriedPoints carried points} + * and the {@link LeaderboardDTO#discardThresholds discarding thresholds} for the leaderboard. No data about the points * is filled into the result object. No data about the competitor display names is filled in; instead, an empty map * is used for {@link LeaderboardDTO#competitorDisplayNames}.
- * If withGeoLocationData is true the geographical location of all races will be - * determined. + * If withGeoLocationData is true the geographical location of all races will be determined. */ - private StrippedLeaderboardDTO createStrippedLeaderboardDTO(Leaderboard leaderboard, boolean withGeoLocationData, - boolean withStatisticalData) { + private StrippedLeaderboardDTO createStrippedLeaderboardDTO(Leaderboard leaderboard, boolean withGeoLocationData, boolean withStatisticalData) { StrippedLeaderboardDTO leaderboardDTO = new StrippedLeaderboardDTO(); TimePoint startOfLatestRace = null; Long delayToLiveInMillisForLatestRace = null; @@ -2357,13 +2351,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (leaderboard instanceof RegattaLeaderboard) { RegattaLeaderboard regattaLeaderboard = (RegattaLeaderboard) leaderboard; Regatta regatta = regattaLeaderboard.getRegatta(); - leaderboardDTO.regattaName = regatta.getName(); - leaderboardDTO.type = leaderboard instanceof MetaLeaderboard ? LeaderboardType.RegattaMetaLeaderboard - : LeaderboardType.RegattaLeaderboard; + leaderboardDTO.regattaName = regatta.getName(); + leaderboardDTO.type = leaderboard instanceof MetaLeaderboard ? LeaderboardType.RegattaMetaLeaderboard : LeaderboardType.RegattaLeaderboard; leaderboardDTO.scoringScheme = regatta.getScoringScheme().getType(); } else { - leaderboardDTO.type = leaderboard instanceof MetaLeaderboard ? LeaderboardType.FlexibleMetaLeaderboard - : LeaderboardType.FlexibleLeaderboard; + leaderboardDTO.type = leaderboard instanceof MetaLeaderboard ? LeaderboardType.FlexibleMetaLeaderboard : LeaderboardType.FlexibleLeaderboard; leaderboardDTO.scoringScheme = leaderboard.getScoringScheme().getType(); } if (leaderboard.getDefaultCourseArea() != null) { @@ -2373,8 +2365,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S leaderboardDTO.setDelayToLiveInMillisForLatestRace(delayToLiveInMillisForLatestRace); leaderboardDTO.hasCarriedPoints = leaderboard.hasCarriedPoints(); if (leaderboard.getResultDiscardingRule() instanceof ThresholdBasedResultDiscardingRule) { - leaderboardDTO.discardThresholds = ((ThresholdBasedResultDiscardingRule) leaderboard.getResultDiscardingRule()) - .getDiscardIndexResultsStartingWithHowManyRaces(); + leaderboardDTO.discardThresholds = ((ThresholdBasedResultDiscardingRule) leaderboard.getResultDiscardingRule()).getDiscardIndexResultsStartingWithHowManyRaces(); } else { leaderboardDTO.discardThresholds = null; } @@ -2384,32 +2375,28 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S RegattaAndRaceIdentifier raceIdentifier = null; TrackedRace trackedRace = raceColumn.getTrackedRace(fleet); if (trackedRace != null) { - if (startOfLatestRace == null - || (trackedRace.getStartOfRace() != null && trackedRace.getStartOfRace().compareTo(startOfLatestRace) > 0)) { + if (startOfLatestRace == null || (trackedRace.getStartOfRace() != null && trackedRace.getStartOfRace().compareTo(startOfLatestRace) > 0)) { delayToLiveInMillisForLatestRace = trackedRace.getDelayToLiveInMillis(); } - raceIdentifier = new RegattaNameAndRaceName(trackedRace.getTrackedRegatta().getRegatta().getName(), trackedRace - .getRace().getName()); + raceIdentifier = new RegattaNameAndRaceName(trackedRace.getTrackedRegatta().getRegatta().getName(), trackedRace.getRace().getName()); raceDTO = baseDomainFactory.createRaceDTO(getService(), withGeoLocationData, raceIdentifier, trackedRace); - if (withStatisticalData) { + if(withStatisticalData) { Collection mediaTracksForRace = getService().getMediaTracksForRace(raceIdentifier); - raceDTO.trackedRaceStatistics = baseDomainFactory.createTrackedRaceStatisticsDTO(trackedRace, leaderboard, - raceColumn, fleet, mediaTracksForRace); + raceDTO.trackedRaceStatistics = baseDomainFactory.createTrackedRaceStatisticsDTO(trackedRace, leaderboard, raceColumn, fleet, mediaTracksForRace); } - } + } final FleetDTO fleetDTO = baseDomainFactory.convertToFleetDTO(fleet); - RaceColumnDTO raceColumnDTO = leaderboardDTO.addRace(raceColumn.getName(), raceColumn.getExplicitFactor(), raceColumn - .getFactor(), raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn).getRegatta().getName() - : null, raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn).getSeries().getName() : null, + RaceColumnDTO raceColumnDTO = leaderboardDTO.addRace(raceColumn.getName(), raceColumn.getExplicitFactor(), raceColumn.getFactor(), + raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn).getRegatta().getName() : null, + raceColumn instanceof RaceColumnInSeries ? ((RaceColumnInSeries) raceColumn).getSeries().getName() : null, fleetDTO, raceColumn.isMedalRace(), raceIdentifier, raceDTO); RaceLog raceLog = raceColumn.getRaceLog(fleet); - RaceLogTrackingState raceLogTrackingState = raceLog == null ? RaceLogTrackingState.NOT_A_RACELOG_TRACKED_RACE - : new RaceLogTrackingStateAnalyzer(raceLog).analyze(); + RaceLogTrackingState raceLogTrackingState = raceLog == null ? RaceLogTrackingState.NOT_A_RACELOG_TRACKED_RACE : + new RaceLogTrackingStateAnalyzer(raceLog).analyze(); boolean raceLogTrackerExists = raceLog == null ? false : getService().getRaceTrackerById(raceLog.getId()) != null; - boolean competitorRegistrationsExist = raceLog == null ? false : !new RegisteredCompetitorsAnalyzer(raceLog).analyze() - .isEmpty(); - RaceLogTrackingInfoDTO raceLogTrackingInfo = new RaceLogTrackingInfoDTO(raceLogTrackerExists, competitorRegistrationsExist, - raceLogTrackingState); + boolean competitorRegistrationsExist = raceLog == null ? false : !new RegisteredCompetitorsAnalyzer(raceLog).analyze().isEmpty(); + RaceLogTrackingInfoDTO raceLogTrackingInfo = new RaceLogTrackingInfoDTO(raceLogTrackerExists, + competitorRegistrationsExist, raceLogTrackingState); raceColumnDTO.setRaceLogTrackingInfo(fleetDTO, raceLogTrackingInfo); } } @@ -2417,14 +2404,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public StrippedLeaderboardDTO updateLeaderboard(String leaderboardName, String newLeaderboardName, String newLeaderboardDisplayName, - int[] newDiscardingThresholds, UUID newCourseAreaId) { - Leaderboard updatedLeaderboard = getService().apply( - new UpdateLeaderboard(leaderboardName, newLeaderboardName, newLeaderboardDisplayName, newDiscardingThresholds, - newCourseAreaId)); + public StrippedLeaderboardDTO updateLeaderboard(String leaderboardName, String newLeaderboardName, String newLeaderboardDisplayName, int[] newDiscardingThresholds, UUID newCourseAreaId) { + Leaderboard updatedLeaderboard = getService().apply(new UpdateLeaderboard(leaderboardName, newLeaderboardName, newLeaderboardDisplayName, newDiscardingThresholds, newCourseAreaId)); return createStrippedLeaderboardDTO(updatedLeaderboard, false, false); } - + @Override public void removeLeaderboards(Collection leaderboardNames) { for (String leaderoardName : leaderboardNames) { @@ -2449,7 +2433,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public void addColumnsToLeaderboard(String leaderboardName, List> columnsToAdd) { - for (com.sap.sse.common.Util.Pair columnToAdd : columnsToAdd) { + for(com.sap.sse.common.Util.Pair columnToAdd: columnsToAdd) { getService().apply(new AddColumnToLeaderboard(columnToAdd.getA(), leaderboardName, columnToAdd.getB())); } } @@ -2482,14 +2466,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public boolean connectTrackedRaceToLeaderboardColumn(String leaderboardName, String raceColumnName, String fleetName, - RegattaAndRaceIdentifier raceIdentifier) { + public boolean connectTrackedRaceToLeaderboardColumn(String leaderboardName, String raceColumnName, + String fleetName, RegattaAndRaceIdentifier raceIdentifier) { return getService().apply(new ConnectTrackedRaceToLeaderboardColumn(leaderboardName, raceColumnName, fleetName, raceIdentifier)); } @Override - public Map getRegattaAndRaceNameOfTrackedRaceConnectedToLeaderboardColumn(String leaderboardName, - String raceColumnName) { + public Map getRegattaAndRaceNameOfTrackedRaceConnectedToLeaderboardColumn(String leaderboardName, String raceColumnName) { Map result = new HashMap(); Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); if (leaderboard != null) { @@ -2519,11 +2502,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public com.sap.sse.common.Util.Triple updateLeaderboardMaxPointsReason(String leaderboardName, - String competitorIdAsString, String raceColumnName, MaxPointsReason maxPointsReason, Date date) throws NoWindException { + public com.sap.sse.common.Util.Triple updateLeaderboardMaxPointsReason(String leaderboardName, String competitorIdAsString, String raceColumnName, + MaxPointsReason maxPointsReason, Date date) throws NoWindException { return getService().apply( - new UpdateLeaderboardMaxPointsReason(leaderboardName, raceColumnName, competitorIdAsString, maxPointsReason, - new MillisecondsTimePoint(date))); + new UpdateLeaderboardMaxPointsReason(leaderboardName, raceColumnName, competitorIdAsString, + maxPointsReason, new MillisecondsTimePoint(date))); } @Override @@ -2537,8 +2520,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public void updateLeaderboardScoreCorrectionMetadata(String leaderboardName, Date timePointOfLastCorrectionValidity, String comment) { getService().apply( - new UpdateLeaderboardScoreCorrectionMetadata(leaderboardName, timePointOfLastCorrectionValidity == null ? null - : new MillisecondsTimePoint(timePointOfLastCorrectionValidity), comment)); + new UpdateLeaderboardScoreCorrectionMetadata(leaderboardName, + timePointOfLastCorrectionValidity == null ? null : new MillisecondsTimePoint(timePointOfLastCorrectionValidity), + comment)); } @Override @@ -2546,15 +2530,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Date dateForResults = new Date(); // we don't care about the result date/time here; use current date as default for (Map.Entry> e : updates.getScoreUpdatesForRaceColumnByCompetitorIdAsString().entrySet()) { for (Map.Entry raceColumnNameAndCorrectedScore : e.getValue().entrySet()) { - updateLeaderboardScoreCorrection(updates.getLeaderboardName(), e.getKey(), raceColumnNameAndCorrectedScore.getKey(), - raceColumnNameAndCorrectedScore.getValue(), dateForResults); + updateLeaderboardScoreCorrection(updates.getLeaderboardName(), e.getKey(), + raceColumnNameAndCorrectedScore.getKey(), raceColumnNameAndCorrectedScore.getValue(), dateForResults); } } - for (Map.Entry> e : updates.getMaxPointsUpdatesForRaceColumnByCompetitorIdAsString() - .entrySet()) { + for (Map.Entry> e : updates.getMaxPointsUpdatesForRaceColumnByCompetitorIdAsString().entrySet()) { for (Map.Entry raceColumnNameAndNewMaxPointsReason : e.getValue().entrySet()) { - updateLeaderboardMaxPointsReason(updates.getLeaderboardName(), e.getKey(), raceColumnNameAndNewMaxPointsReason.getKey(), - raceColumnNameAndNewMaxPointsReason.getValue(), dateForResults); + updateLeaderboardMaxPointsReason(updates.getLeaderboardName(), e.getKey(), + raceColumnNameAndNewMaxPointsReason.getKey(), raceColumnNameAndNewMaxPointsReason.getValue(), dateForResults); } } } @@ -2596,18 +2579,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S Iterable configs = swissTimingAdapterPersistence.getSwissTimingConfigurations(); List result = new ArrayList(); for (SwissTimingConfiguration stConfig : configs) { - result.add(new SwissTimingConfigurationDTO(stConfig.getName(), stConfig.getJsonURL(), stConfig.getHostname(), stConfig - .getPort())); + result.add(new SwissTimingConfigurationDTO(stConfig.getName(), stConfig.getJsonURL(), stConfig.getHostname(), stConfig.getPort())); } return result; } @Override - public SwissTimingEventRecordDTO getRacesOfSwissTimingEvent(String eventJsonURL) throws UnknownHostException, IOException, - InterruptedException, ParseException { - SwissTimingEventRecordDTO result = null; + public SwissTimingEventRecordDTO getRacesOfSwissTimingEvent(String eventJsonURL) + throws UnknownHostException, IOException, InterruptedException, ParseException { + SwissTimingEventRecordDTO result = null; List swissTimingRaces = new ArrayList(); - + // TODO: delete getSwissTimingAdapter().getSwissTimingRaceRecords() method // TODO: delete SwissTimingDomainFactory.getRaceTypeFromRaceID(String raceID) URL url = new URL(eventJsonURL); @@ -2616,18 +2598,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S EventResultDescriptor eventResult = parser.getEventResult((InputStream) eventResultConn.getContent()); if (eventResult != null) { for (RegattaResultDescriptor regattaResult : eventResult.getRegattaResults()) { - for (RaceResultDescriptor race : regattaResult.getRaceResults()) { - // add only the tracked races - if (race.isTracked() != null && race.isTracked() == true) { - SwissTimingRaceRecordDTO swissTimingRaceRecordDTO = new SwissTimingRaceRecordDTO(race.getId(), race.getName(), - regattaResult.getName(), race.getSeriesName(), race.getFleetName(), race.getStatus(), race.getStartTime(), - regattaResult.getXrrEntriesUrl() != null ? regattaResult.getXrrEntriesUrl().toExternalForm() : null, - hasRememberedRegatta(race.getId())); - swissTimingRaceRecordDTO.boatClass = regattaResult.getIsafId() != null && !regattaResult.getIsafId().isEmpty() ? regattaResult - .getIsafId() : regattaResult.getClassName(); + for(RaceResultDescriptor race: regattaResult.getRaceResults()) { + // add only the tracked races + if(race.isTracked() != null && race.isTracked() == true) { + SwissTimingRaceRecordDTO swissTimingRaceRecordDTO = new SwissTimingRaceRecordDTO(race.getId(), race.getName(), + regattaResult.getName(), race.getSeriesName(), race.getFleetName(), race.getStatus(), race.getStartTime(), + regattaResult.getXrrEntriesUrl() != null ? regattaResult.getXrrEntriesUrl().toExternalForm() : null, hasRememberedRegatta(race.getId())); + swissTimingRaceRecordDTO.boatClass = regattaResult.getIsafId() != null && !regattaResult.getIsafId().isEmpty() ? regattaResult.getIsafId() : regattaResult.getClassName(); swissTimingRaceRecordDTO.gender = regattaResult.getCompetitorGenderType().name(); swissTimingRaces.add(swissTimingRaceRecordDTO); - } + } } } result = new SwissTimingEventRecordDTO(eventResult.getId(), eventResult.getName(), eventResult.getTrackingDataHost(), @@ -2638,40 +2618,38 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public void storeSwissTimingConfiguration(String configName, String jsonURL, String hostname, int port) { - if (!jsonURL.equalsIgnoreCase("test")) { - swissTimingAdapterPersistence.storeSwissTimingConfiguration(swissTimingFactory.createSwissTimingConfiguration(configName, - jsonURL, hostname, port)); + if(!jsonURL.equalsIgnoreCase("test")) { + swissTimingAdapterPersistence.storeSwissTimingConfiguration(swissTimingFactory.createSwissTimingConfiguration(configName, jsonURL, hostname, port)); } } @Override public void trackWithSwissTiming(RegattaIdentifier regattaToAddTo, Iterable rrs, String hostname, int port, boolean trackWind, final boolean correctWindByDeclination) throws Exception { - logger.info("tracWithSwissTiming for regatta " + regattaToAddTo + " for race records " + rrs + " with hostname " + hostname - + " and port " + port); + logger.info("tracWithSwissTiming for regatta " + regattaToAddTo + " for race records " + rrs + + " with hostname " + hostname + " and port " + port); Map cachedRegattaEntriesLists = new HashMap(); for (SwissTimingRaceRecordDTO rr : rrs) { BoatClass boatClass = getBaseDomainFactory().getOrCreateBoatClass(rr.boatClass); - String raceDescription = rr.regattaName != null ? rr.regattaName : ""; + String raceDescription = rr.regattaName != null ? rr.regattaName : ""; raceDescription += rr.seriesName != null ? "/" + rr.seriesName : ""; - raceDescription += raceDescription.length() > 0 ? "/" + rr.getName() : rr.getName(); + raceDescription += raceDescription.length() > 0 ? "/" + rr.getName() : rr.getName(); // try to find a cached entry list for the regatta RegattaResults regattaResults = cachedRegattaEntriesLists.get(rr.xrrEntriesUrl); - if (regattaResults == null) { - regattaResults = getSwissTimingAdapter().readRegattaEntryListFromXrrUrl(rr.xrrEntriesUrl); - if (regattaResults != null) { - cachedRegattaEntriesLists.put(rr.xrrEntriesUrl, regattaResults); + if(regattaResults == null) { + regattaResults = getSwissTimingAdapter().readRegattaEntryListFromXrrUrl(rr.xrrEntriesUrl); + if(regattaResults != null) { + cachedRegattaEntriesLists.put(rr.xrrEntriesUrl, regattaResults); } } StartList startList = null; - if (regattaResults != null) { - startList = getSwissTimingAdapter().readStartListForRace(rr.raceId, regattaResults); + if(regattaResults != null) { + startList = getSwissTimingAdapter().readStartListForRace(rr.raceId, regattaResults); } // now read the entry list for the race from the result - final RaceHandle raceHandle = getSwissTimingAdapter().addSwissTimingRace(getService(), regattaToAddTo, rr.raceId, rr.getName(), - raceDescription, boatClass, hostname, port, startList, - MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory), - RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS); + final RaceHandle raceHandle = getSwissTimingAdapter().addSwissTimingRace(getService(), regattaToAddTo, rr.raceId, rr.getName(), raceDescription, + boatClass, hostname, port, startList, + MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory), RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS); if (trackWind) { new Thread("Wind tracking starter for race " + rr.raceId + "/" + rr.getName()) { public void run() { @@ -2690,11 +2668,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public List listSwissTiminigReplayRaces(String swissTimingUrl) { List replayRaces = getSwissTimingReplayService().listReplayRaces(swissTimingUrl); - List result = new ArrayList(replayRaces.size()); + List result = new ArrayList(replayRaces.size()); for (SwissTimingReplayRace replayRace : replayRaces) { - result.add(new SwissTimingReplayRaceDTO(replayRace.getFlightNumber(), replayRace.getRaceId(), replayRace.getRsc(), replayRace - .getName(), replayRace.getBoatClass(), replayRace.getStartTime(), replayRace.getLink(), hasRememberedRegatta(replayRace - .getRaceId()))); + result.add(new SwissTimingReplayRaceDTO(replayRace.getFlightNumber(), replayRace.getRaceId(), replayRace.getRsc(), replayRace.getName(), replayRace.getBoatClass(), replayRace.getStartTime(), replayRace.getLink(), hasRememberedRegatta(replayRace.getRaceId()))); } return result; } @@ -2702,7 +2678,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public void replaySwissTimingRace(RegattaIdentifier regattaIdentifier, Iterable replayRaceDTOs, boolean trackWind, boolean correctWindByDeclination, boolean simulateWithStartTimeNow) { - logger.info("replaySwissTimingRace for regatta " + regattaIdentifier + " for races " + replayRaceDTOs); + logger.info("replaySwissTimingRace for regatta "+regattaIdentifier+" for races "+replayRaceDTOs); Regatta regatta; for (SwissTimingReplayRaceDTO replayRaceDTO : replayRaceDTOs) { try { @@ -2716,12 +2692,15 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S break; } } - regatta = getService().createRegatta(RegattaImpl.getDefaultName(replayRaceDTO.rsc, boatClass.trim()), boatClass.trim(), + regatta = getService().createRegatta( + RegattaImpl.getDefaultName(replayRaceDTO.rsc, boatClass.trim()), + boatClass.trim(), RegattaImpl.getDefaultName(replayRaceDTO.rsc, replayRaceDTO.boat_class), Collections.singletonList(new SeriesImpl(LeaderboardNameConstants.DEFAULT_SERIES_NAME, - /* isMedal */false, Collections.singletonList(new FleetImpl(LeaderboardNameConstants.DEFAULT_FLEET_NAME)), + /* isMedal */false, Collections.singletonList(new FleetImpl( + LeaderboardNameConstants.DEFAULT_FLEET_NAME)), /* race column names */new ArrayList(), getService())), false, - baseDomainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */true); + baseDomainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */ true); // TODO: is course area relevant for swiss timing replay? } else { regatta = getService().getRegatta(regattaIdentifier); @@ -2746,7 +2725,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } /** - * Finds a competitor in a sequence of competitors that has an {@link Competitor#getId()} equal to id. + * Finds a competitor in a sequence of competitors that has an {@link Competitor#getId()} equal to id. */ private Competitor getCompetitorByIdAsString(Iterable competitors, String idAsString) { for (Competitor c : competitors) { @@ -2757,8 +2736,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return null; } - private Double getCompetitorRaceDataEntry(DetailType dataType, TrackedRace trackedRace, Competitor competitor, TimePoint timePoint, - String leaderboardGroupName, String leaderboardName, WindLegTypeAndLegBearingCache cache) throws NoWindException { + private Double getCompetitorRaceDataEntry(DetailType dataType, TrackedRace trackedRace, Competitor competitor, + TimePoint timePoint, String leaderboardGroupName, String leaderboardName, WindLegTypeAndLegBearingCache cache) throws NoWindException { Double result = null; Course course = trackedRace.getRace().getCourse(); course.lockForRead(); // make sure the tracked leg survives this call even if a course update is pending @@ -2805,7 +2784,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S break; } Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); - result = leaderboard == null ? null : (double) leaderboard.getTotalRankOfCompetitor(competitor, timePoint); + result = leaderboard == null ? null : (double) leaderboard.getTotalRankOfCompetitor(competitor, + timePoint); break; case OVERALL_RANK: if (leaderboardGroupName == null || leaderboardGroupName.isEmpty()) { @@ -2829,7 +2809,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } break; default: - throw new UnsupportedOperationException("Theres currently no support for the enum value '" + dataType + "' in this method."); + throw new UnsupportedOperationException("Theres currently no support for the enum value '" + dataType + + "' in this method."); } return result; } finally { @@ -2838,68 +2819,66 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public CompetitorsRaceDataDTO getCompetitorsRaceData(RegattaAndRaceIdentifier race, List competitors, Date from, - Date to, final long stepSizeInMs, final DetailType detailType, final String leaderboardGroupName, final String leaderboardName) - throws NoWindException { + public CompetitorsRaceDataDTO getCompetitorsRaceData(RegattaAndRaceIdentifier race, List competitors, Date from, Date to, + final long stepSizeInMs, final DetailType detailType, final String leaderboardGroupName, final String leaderboardName) throws NoWindException { CompetitorsRaceDataDTO result = null; final TrackedRace trackedRace = getExistingTrackedRace(race); if (trackedRace != null) { TimePoint newestEvent = trackedRace.getTimePointOfNewestEvent(); final TimePoint startTime = from == null ? trackedRace.getStartOfTracking() : new MillisecondsTimePoint(from); final TimePoint endTime = (to == null || to.after(newestEvent.asDate())) ? newestEvent : new MillisecondsTimePoint(to); - result = new CompetitorsRaceDataDTO(detailType, startTime == null ? null : startTime.asDate(), endTime == null ? null - : endTime.asDate()); + result = new CompetitorsRaceDataDTO(detailType, startTime==null?null:startTime.asDate(), endTime==null?null:endTime.asDate()); final ConcurrentHashMap cachesByTimePoint = new ConcurrentHashMap<>(); Map> resultFutures = new HashMap>(); for (final CompetitorDTO competitorDTO : competitors) { FutureTask future = new FutureTask(new Callable() { - @Override - public CompetitorRaceDataDTO call() throws NoWindException { - Competitor competitor = getCompetitorByIdAsString(trackedRace.getRace().getCompetitors(), - competitorDTO.getIdAsString()); - ArrayList> markPassingsData = new ArrayList>(); - ArrayList> raceData = new ArrayList>(); - // Filling the mark passings - Set competitorMarkPassings = trackedRace.getMarkPassings(competitor); - if (competitorMarkPassings != null) { - trackedRace.lockForRead(competitorMarkPassings); - try { - for (MarkPassing markPassing : competitorMarkPassings) { - MillisecondsTimePoint time = new MillisecondsTimePoint(markPassing.getTimePoint().asMillis()); - WindLegTypeAndLegBearingCache cache = cachesByTimePoint.get(time); - if (cache == null) { - cache = new LeaderboardDTOCalculationReuseCache(time); - cachesByTimePoint.put(time, cache); - } - Double competitorMarkPassingsData = getCompetitorRaceDataEntry(detailType, trackedRace, competitor, - time, leaderboardGroupName, leaderboardName, cache); - if (competitorMarkPassingsData != null) { - markPassingsData.add(new com.sap.sse.common.Util.Triple(markPassing - .getWaypoint().getName(), time.asDate(), competitorMarkPassingsData)); + @Override + public CompetitorRaceDataDTO call() throws NoWindException { + Competitor competitor = getCompetitorByIdAsString(trackedRace.getRace().getCompetitors(), + competitorDTO.getIdAsString()); + ArrayList> markPassingsData = new ArrayList>(); + ArrayList> raceData = new ArrayList>(); + // Filling the mark passings + Set competitorMarkPassings = trackedRace.getMarkPassings(competitor); + if (competitorMarkPassings != null) { + trackedRace.lockForRead(competitorMarkPassings); + try { + for (MarkPassing markPassing : competitorMarkPassings) { + MillisecondsTimePoint time = new MillisecondsTimePoint(markPassing.getTimePoint().asMillis()); + WindLegTypeAndLegBearingCache cache = cachesByTimePoint.get(time); + if (cache == null) { + cache = new LeaderboardDTOCalculationReuseCache(time); + cachesByTimePoint.put(time, cache); + } + Double competitorMarkPassingsData = getCompetitorRaceDataEntry(detailType, + trackedRace, competitor, time, leaderboardGroupName, leaderboardName, cache); + if (competitorMarkPassingsData != null) { + markPassingsData.add(new com.sap.sse.common.Util.Triple(markPassing + .getWaypoint().getName(), time.asDate(), competitorMarkPassingsData)); + } + } + } finally { + trackedRace.unlockAfterRead(competitorMarkPassings); } } - } finally { - trackedRace.unlockAfterRead(competitorMarkPassings); - } - } - if (startTime != null && endTime != null) { - for (long i = startTime.asMillis(); i <= endTime.asMillis(); i += stepSizeInMs) { - MillisecondsTimePoint time = new MillisecondsTimePoint(i); - WindLegTypeAndLegBearingCache cache = cachesByTimePoint.get(time); - if (cache == null) { - cache = new LeaderboardDTOCalculationReuseCache(time); - cachesByTimePoint.put(time, cache); - } - Double competitorRaceData = getCompetitorRaceDataEntry(detailType, trackedRace, competitor, time, - leaderboardGroupName, leaderboardName, cache); - if (competitorRaceData != null) { - raceData.add(new com.sap.sse.common.Util.Pair(time.asDate(), competitorRaceData)); + if (startTime != null && endTime != null) { + for (long i = startTime.asMillis(); i <= endTime.asMillis(); i += stepSizeInMs) { + MillisecondsTimePoint time = new MillisecondsTimePoint(i); + WindLegTypeAndLegBearingCache cache = cachesByTimePoint.get(time); + if (cache == null) { + cache = new LeaderboardDTOCalculationReuseCache(time); + cachesByTimePoint.put(time, cache); + } + Double competitorRaceData = getCompetitorRaceDataEntry(detailType, trackedRace, + competitor, time, leaderboardGroupName, leaderboardName, cache); + if (competitorRaceData != null) { + raceData.add(new com.sap.sse.common.Util.Pair(time.asDate(), competitorRaceData)); + } + } } + return new CompetitorRaceDataDTO(competitorDTO, detailType, markPassingsData, raceData); } - } - return new CompetitorRaceDataDTO(competitorDTO, detailType, markPassingsData, raceData); - } - }); + }); resultFutures.put(competitorDTO, future); executor.execute(future); } @@ -2909,12 +2888,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S competitorData = e.getValue().get(); } catch (InterruptedException e1) { competitorData = null; - logger.log(Level.SEVERE, "Exception while trying to compute competitor data " + detailType + " for competitor " - + e.getKey().getName(), e1); + logger.log(Level.SEVERE, "Exception while trying to compute competitor data "+detailType+" for competitor "+e.getKey().getName(), e1); } catch (ExecutionException e1) { competitorData = null; - logger.log(Level.SEVERE, "Exception while trying to compute competitor data " + detailType + " for competitor " - + e.getKey().getName(), e1); + logger.log(Level.SEVERE, "Exception while trying to compute competitor data "+detailType+" for competitor "+e.getKey().getName(), e1); } result.setCompetitorData(e.getKey(), competitorData); } @@ -2923,11 +2900,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public List, List>> getLeaderboardDataEntriesForAllRaceColumns( - String leaderboardName, Date date, DetailType detailType) throws Exception { - List, List>> result = new ArrayList, List>>(); - // Attention: The reason why we read the data from the LeaderboardDTO and not from the leaderboard directly is - // to ensure + public List, List>> getLeaderboardDataEntriesForAllRaceColumns(String leaderboardName, + Date date, DetailType detailType) throws Exception { + List, List>> result = new ArrayList,List>>(); + // Attention: The reason why we read the data from the LeaderboardDTO and not from the leaderboard directly is to ensure // the use of the leaderboard cache. final Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); if (leaderboard != null) { @@ -2941,15 +2917,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (detailType != null) { switch (detailType) { case REGATTA_TOTAL_POINTS_SUM: - for (Entry> e : leaderboard.getTotalPointsSumAfterRaceColumn(effectiveTimePoint) - .entrySet()) { + for (Entry> e : leaderboard.getTotalPointsSumAfterRaceColumn(effectiveTimePoint).entrySet()) { List competitorDTOs = new ArrayList<>(); List pointSums = new ArrayList<>(); for (Entry e2 : e.getValue().entrySet()) { competitorDTOs.add(baseDomainFactory.convertToCompetitorDTO(e2.getKey())); pointSums.add(e2.getValue()); } - result.add(new Triple, List>(e.getKey().getName(), competitorDTOs, pointSums)); + result.add(new Triple, List>(e.getKey().getName(), competitorDTOs, pointSums)); } break; case REGATTA_RANK: @@ -2981,23 +2956,24 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S public List> getLeaderboardsNamesOfMetaLeaderboard(String metaLeaderboardName) { Leaderboard leaderboard = getService().getLeaderboardByName(metaLeaderboardName); if (leaderboard == null) { - throw new IllegalArgumentException("Couldn't find leaderboard named " + metaLeaderboardName); + throw new IllegalArgumentException("Couldn't find leaderboard named "+metaLeaderboardName); } if (!(leaderboard instanceof MetaLeaderboard)) { - throw new IllegalArgumentException("The leaderboard " + metaLeaderboardName + " is not a metaleaderboard"); + throw new IllegalArgumentException("The leaderboard "+metaLeaderboardName + " is not a metaleaderboard"); } List> result = new ArrayList>(); MetaLeaderboard metaLeaderboard = (MetaLeaderboard) leaderboard; - for (Leaderboard containedLeaderboard : metaLeaderboard.getLeaderboards()) { - result.add(new com.sap.sse.common.Util.Pair(containedLeaderboard.getName(), containedLeaderboard - .getDisplayName() != null ? containedLeaderboard.getDisplayName() : containedLeaderboard.getName())); + for (Leaderboard containedLeaderboard: metaLeaderboard.getLeaderboards()) { + result.add(new com.sap.sse.common.Util.Pair(containedLeaderboard.getName(), + containedLeaderboard.getDisplayName() != null ? containedLeaderboard.getDisplayName() : containedLeaderboard.getName())); } return result; } @Override - public Map> getDouglasPoints(RegattaAndRaceIdentifier raceIdentifier, Map from, - Map to, double meters) throws NoWindException { + public Map> getDouglasPoints(RegattaAndRaceIdentifier raceIdentifier, + Map from, Map to, + double meters) throws NoWindException { Map> result = new HashMap>(); TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); if (trackedRace != null) { @@ -3010,7 +2986,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S // Distance for DouglasPeucker TimePoint timePointFrom = new MillisecondsTimePoint(from.get(competitorDTO)); TimePoint timePointTo = new MillisecondsTimePoint(to.get(competitorDTO)); - List gpsFixApproximation = trackedRace.approximate(competitor, maxDistance, timePointFrom, timePointTo); + List gpsFixApproximation = trackedRace.approximate(competitor, maxDistance, + timePointFrom, timePointTo); List gpsFixDouglasList = new ArrayList(); for (int i = 0; i < gpsFixApproximation.size(); i++) { GPSFix fix = gpsFixApproximation.get(i); @@ -3026,11 +3003,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } Tack tack = trackedRace.getTack(competitor, fix.getTimePoint()); TrackedLegOfCompetitor trackedLegOfCompetitor = trackedRace.getTrackedLeg(competitor, fix.getTimePoint()); - LegType legType = trackedLegOfCompetitor == null ? null : trackedRace - .getTrackedLeg(trackedLegOfCompetitor.getLeg()).getLegType(fix.getTimePoint()); + LegType legType = trackedLegOfCompetitor == null ? null : trackedRace.getTrackedLeg( + trackedLegOfCompetitor.getLeg()).getLegType(fix.getTimePoint()); Wind wind = trackedRace.getWind(fix.getPosition(), fix.getTimePoint()); WindDTO windDTO = createWindDTOFromAlreadyAveraged(wind, fix.getTimePoint()); - GPSFixDTO fixDTO = createGPSFixDTO(fix, speedWithBearing, windDTO, tack, legType, /* extrapolated */false); + GPSFixDTO fixDTO = createGPSFixDTO(fix, speedWithBearing, windDTO, tack, legType, /* extrapolated */false); gpsFixDouglasList.add(fixDTO); } result.put(competitorDTO, gpsFixDouglasList); @@ -3041,8 +3018,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public Map> getManeuvers(RegattaAndRaceIdentifier raceIdentifier, Map from, - Map to) throws NoWindException { + public Map> getManeuvers(RegattaAndRaceIdentifier raceIdentifier, + Map from, Map to) throws NoWindException { Map> result = new HashMap>(); final TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); if (trackedRace != null) { @@ -3052,19 +3029,21 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (from.containsKey(competitorDTO)) { final TimePoint timePointFrom = new MillisecondsTimePoint(from.get(competitorDTO)); final TimePoint timePointTo = new MillisecondsTimePoint(to.get(competitorDTO)); - RunnableFuture> future = new FutureTask>(new Callable>() { - @Override - public List call() { - List maneuversForCompetitor; - try { - maneuversForCompetitor = trackedRace.getManeuvers(competitor, timePointFrom, timePointTo, /* waitForLatest */ - true); - } catch (NoWindException e) { - throw new NoWindError(e); - } - return createManeuverDTOsForCompetitor(maneuversForCompetitor, trackedRace, competitor); - } - }); + RunnableFuture> future = new FutureTask>( + new Callable>() { + @Override + public List call() { + List maneuversForCompetitor; + try { + maneuversForCompetitor = trackedRace.getManeuvers(competitor, timePointFrom, + timePointTo, /* waitForLatest */ true); + } catch (NoWindException e) { + throw new NoWindError(e); + } + return createManeuverDTOsForCompetitor(maneuversForCompetitor, trackedRace, + competitor); + } + }); executor.execute(future); futures.put(competitorDTO, future); } @@ -3087,18 +3066,20 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S for (Maneuver maneuver : maneuvers) { final ManeuverDTO maneuverDTO; if (maneuver.getType() == ManeuverType.MARK_PASSING) { - maneuverDTO = new MarkpassingManeuverDTO(maneuver.getType(), maneuver.getNewTack(), new PositionDTO(maneuver.getPosition() - .getLatDeg(), maneuver.getPosition().getLngDeg()), maneuver.getTimePoint().asDate(), + maneuverDTO = new MarkpassingManeuverDTO(maneuver.getType(), maneuver.getNewTack(), + new PositionDTO(maneuver.getPosition().getLatDeg(), maneuver.getPosition().getLngDeg()), + maneuver.getTimePoint().asDate(), createSpeedWithBearingDTO(maneuver.getSpeedWithBearingBefore()), - createSpeedWithBearingDTO(maneuver.getSpeedWithBearingAfter()), maneuver.getDirectionChangeInDegrees(), - maneuver.getManeuverLoss() == null ? null : maneuver.getManeuverLoss().getMeters(), - ((MarkPassingManeuver) maneuver).getSide()); - } else { - maneuverDTO = new ManeuverDTO(maneuver.getType(), maneuver.getNewTack(), new PositionDTO( - maneuver.getPosition().getLatDeg(), maneuver.getPosition().getLngDeg()), maneuver.getTimePoint().asDate(), + createSpeedWithBearingDTO(maneuver.getSpeedWithBearingAfter()), + maneuver.getDirectionChangeInDegrees(), maneuver.getManeuverLoss()==null?null:maneuver.getManeuverLoss().getMeters(), + ((MarkPassingManeuver) maneuver).getSide()); + } else { + maneuverDTO = new ManeuverDTO(maneuver.getType(), maneuver.getNewTack(), + new PositionDTO(maneuver.getPosition().getLatDeg(), maneuver.getPosition().getLngDeg()), + maneuver.getTimePoint().asDate(), createSpeedWithBearingDTO(maneuver.getSpeedWithBearingBefore()), - createSpeedWithBearingDTO(maneuver.getSpeedWithBearingAfter()), maneuver.getDirectionChangeInDegrees(), - maneuver.getManeuverLoss() == null ? null : maneuver.getManeuverLoss().getMeters()); + createSpeedWithBearingDTO(maneuver.getSpeedWithBearingAfter()), + maneuver.getDirectionChangeInDegrees(), maneuver.getManeuverLoss()==null?null:maneuver.getManeuverLoss().getMeters()); } result.add(maneuverDTO); } @@ -3131,9 +3112,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } /** - * Returns a servlet context that, when asked for a resource, first tries the original servlet context's - * implementation. If that fails, it prepends "war/" to the request because the war/ folder contains all the - * resources exposed externally through the HTTP server. + * Returns a servlet context that, when asked for a resource, first tries the original servlet context's implementation. If that + * fails, it prepends "war/" to the request because the war/ folder contains all the resources exposed externally + * through the HTTP server. */ @Override public ServletContext getServletContext() { @@ -3145,8 +3126,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S * Override of function to prevent exception "Blocked request without GWT permutation header (XSRF attack?)" when testing the GWT sites */ protected void checkPermutationStrongName() throws SecurityException { - // Override to prevent exception "Blocked request without GWT permutation header (XSRF attack?)" when testing - // the GWT sites + //Override to prevent exception "Blocked request without GWT permutation header (XSRF attack?)" when testing the GWT sites return; } @@ -3167,8 +3147,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return convertToLeaderboardGroupDTO(getService().getLeaderboardGroupByName(groupName), withGeoLocationData, false); } - private LeaderboardGroupDTO convertToLeaderboardGroupDTO(LeaderboardGroup leaderboardGroup, boolean withGeoLocationData, - boolean withStatisticalData) { + private LeaderboardGroupDTO convertToLeaderboardGroupDTO(LeaderboardGroup leaderboardGroup, boolean withGeoLocationData, boolean withStatisticalData) { LeaderboardGroupDTO groupDTO = new LeaderboardGroupDTO(leaderboardGroup.getId(), leaderboardGroup.getName(), leaderboardGroup.getDisplayName(), leaderboardGroup.getDescription()); groupDTO.displayLeaderboardsInReverseOrder = leaderboardGroup.isDisplayGroupsInReverseOrder(); @@ -3186,6 +3165,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return groupDTO; } + @Override public void renameLeaderboardGroup(String oldName, String newName) { getService().apply(new RenameLeaderboardGroup(oldName, newName)); @@ -3204,11 +3184,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public LeaderboardGroupDTO createLeaderboardGroup(String groupName, String description, String displayName, - boolean displayGroupsInReverseOrder, int[] overallLeaderboardDiscardThresholds, - ScoringSchemeType overallLeaderboardScoringSchemeType) { + boolean displayGroupsInReverseOrder, + int[] overallLeaderboardDiscardThresholds, ScoringSchemeType overallLeaderboardScoringSchemeType) { CreateLeaderboardGroup createLeaderboardGroupOp = new CreateLeaderboardGroup(groupName, description, displayName, - displayGroupsInReverseOrder, new ArrayList(), overallLeaderboardDiscardThresholds, - overallLeaderboardScoringSchemeType); + displayGroupsInReverseOrder, new ArrayList(), overallLeaderboardDiscardThresholds, overallLeaderboardScoringSchemeType); return convertToLeaderboardGroupDTO(getService().apply(createLeaderboardGroupOp), false, false); } @@ -3216,8 +3195,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S public void updateLeaderboardGroup(String oldName, String newName, String newDescription, String newDisplayName, List leaderboardNames, int[] overallLeaderboardDiscardThresholds, ScoringSchemeType overallLeaderboardScoringSchemeType) { getService().apply( - new UpdateLeaderboardGroup(oldName, newName, newDescription, newDisplayName, leaderboardNames, - overallLeaderboardDiscardThresholds, overallLeaderboardScoringSchemeType)); + new UpdateLeaderboardGroup(oldName, newName, newDescription, newDisplayName, + leaderboardNames, overallLeaderboardDiscardThresholds, overallLeaderboardScoringSchemeType)); } @Override @@ -3230,11 +3209,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S for (Entry>, Integer> e : statistics.entrySet()) { replicationCountByOperationClassName.put(e.getKey().getName(), e.getValue()); } - replicaDTOs.add(new ReplicaDTO(replicaDescriptor.getIpAddress().getHostName(), - replicaDescriptor.getRegistrationTime().asDate(), replicaDescriptor.getUuid().toString(), - replicationCountByOperationClassName, service.getAverageNumberOfOperationsPerMessage(replicaDescriptor), service - .getNumberOfMessagesSent(replicaDescriptor), service.getNumberOfBytesSent(replicaDescriptor), service - .getAverageNumberOfBytesPerMessage(replicaDescriptor))); + replicaDTOs.add(new ReplicaDTO(replicaDescriptor.getIpAddress().getHostName(), replicaDescriptor + .getRegistrationTime().asDate(), replicaDescriptor.getUuid().toString(), + replicationCountByOperationClassName, service.getAverageNumberOfOperationsPerMessage(replicaDescriptor), + service.getNumberOfMessagesSent(replicaDescriptor), service.getNumberOfBytesSent(replicaDescriptor), service.getAverageNumberOfBytesPerMessage(replicaDescriptor))); } ReplicationMasterDTO master; ReplicationMasterDescriptor replicatingFromMaster = service.getReplicatingFromMaster(); @@ -3248,13 +3226,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public void startReplicatingFromMaster(String messagingHost, String masterHost, String exchangeName, int servletPort, int messagingPort) - throws IOException, ClassNotFoundException, InterruptedException { + public void startReplicatingFromMaster(String messagingHost, String masterHost, String exchangeName, int servletPort, int messagingPort) throws IOException, ClassNotFoundException, InterruptedException { // the queue name must be always the same for this server. in order to achieve // this we're using the unique server identifier getReplicationService().startToReplicateFrom( - ReplicationFactory.INSTANCE.createReplicationMasterDescriptor(messagingHost, masterHost, exchangeName, servletPort, - messagingPort, getReplicationService().getServerIdentifier().toString())); + ReplicationFactory.INSTANCE.createReplicationMasterDescriptor(messagingHost, masterHost, exchangeName, servletPort, messagingPort, + getReplicationService().getServerIdentifier().toString())); } @Override @@ -3278,8 +3255,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S result.add(localEvent); } } - for (Entry, Exception>> serverRefAndEventsOrException : getService() - .getPublicEventsOfAllSailingServers().entrySet()) { + for (Entry, Exception>> serverRefAndEventsOrException : + getService().getPublicEventsOfAllSailingServers().entrySet()) { final com.sap.sse.common.Util.Pair, Exception> eventsOrException = serverRefAndEventsOrException.getValue(); final RemoteSailingServerReference serverRef = serverRefAndEventsOrException.getKey(); final Iterable remoteEvents = eventsOrException.getA(); @@ -3297,10 +3274,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } /** - * Determines the base URL (protocol, host and port parts) used for the currently executing servlet request. - * Defaults to http://sapsailing.com. - * - * @throws MalformedURLException + * Determines the base URL (protocol, host and port parts) used for the currently executing servlet request. Defaults + * to http://sapsailing.com. + * @throws MalformedURLException */ private URL getRequestBaseURL() throws MalformedURLException { final URL url = new URL(getThreadLocalRequest().getRequestURL().toString()); @@ -3309,10 +3285,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } private URL getBaseURL(URL url) throws MalformedURLException { - return new URL(url.getProtocol(), url.getHost(), url.getPort(), /* file */""); + return new URL(url.getProtocol(), url.getHost(), url.getPort(), /* file */ ""); } - private RemoteSailingServerReferenceDTO createRemoteSailingServerReferenceDTO(final RemoteSailingServerReference serverRef, + private RemoteSailingServerReferenceDTO createRemoteSailingServerReferenceDTO( + final RemoteSailingServerReference serverRef, final com.sap.sse.common.Util.Pair, Exception> eventsOrException) { final Iterable events = eventsOrException.getA(); final Iterable eventDTOs; @@ -3320,15 +3297,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (events == null) { eventDTOs = null; final Exception exception = eventsOrException.getB(); - sailingServerDTO = new RemoteSailingServerReferenceDTO(serverRef.getName(), serverRef.getURL().toExternalForm(), - exception == null ? null : exception.getMessage()); + sailingServerDTO = new RemoteSailingServerReferenceDTO(serverRef.getName(), + serverRef.getURL().toExternalForm(), exception==null?null:exception.getMessage()); } else { eventDTOs = convertToEventDTOs(events); - sailingServerDTO = new RemoteSailingServerReferenceDTO(serverRef.getName(), serverRef.getURL().toExternalForm(), eventDTOs); + sailingServerDTO = new RemoteSailingServerReferenceDTO( + serverRef.getName(), serverRef + .getURL().toExternalForm(), eventDTOs); } return sailingServerDTO; } - + private Iterable convertToEventDTOs(Iterable events) { List result = new ArrayList<>(); for (EventBase event : events) { @@ -3339,20 +3318,21 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public EventDTO updateEvent(UUID eventId, String eventName, String eventDescription, Date startDate, Date endDate, VenueDTO venue, - boolean isPublic, Iterable leaderboardGroupIds, String officialWebsiteURLString, String logoImageURLString, - Iterable imageURLStrings, Iterable videoURLStrings, Iterable sponsorImageURLStrings) - throws MalformedURLException { + public EventDTO updateEvent(UUID eventId, String eventName, String eventDescription, Date startDate, Date endDate, + VenueDTO venue, boolean isPublic, Iterable leaderboardGroupIds, String officialWebsiteURLString, + String logoImageURLString, Iterable imageURLStrings, Iterable videoURLStrings, + Iterable sponsorImageURLStrings) throws MalformedURLException { TimePoint startTimePoint = startDate != null ? new MillisecondsTimePoint(startDate) : null; - TimePoint endTimePoint = endDate != null ? new MillisecondsTimePoint(endDate) : null; + TimePoint endTimePoint = endDate != null ? new MillisecondsTimePoint(endDate) : null; URL officialWebsiteURL = officialWebsiteURLString != null ? new URL(officialWebsiteURLString) : null; URL logoImageURL = logoImageURLString != null ? new URL(logoImageURLString) : null; List imageURLs = createURLsFromStrings(imageURLStrings); List videoURLs = createURLsFromStrings(videoURLStrings); List sponsorimagieURLs = createURLsFromStrings(sponsorImageURLStrings); getService().apply( - new UpdateEvent(eventId, eventName, eventDescription, startTimePoint, endTimePoint, venue.getName(), isPublic, - leaderboardGroupIds, logoImageURL, officialWebsiteURL, imageURLs, videoURLs, sponsorimagieURLs)); + new UpdateEvent(eventId, eventName, eventDescription, startTimePoint, endTimePoint, venue.getName(), + isPublic, leaderboardGroupIds, logoImageURL, officialWebsiteURL, imageURLs, videoURLs, + sponsorimagieURLs)); return getEventById(eventId, false); } @@ -3370,17 +3350,18 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public EventDTO createEvent(String eventName, String eventDescription, Date startDate, Date endDate, String venue, boolean isPublic, - List courseAreaNames, Iterable imageURLs, Iterable videoURLs, Iterable sponsorImageURLs, - String logoImageURLAsString, String officialWebsiteURLAsString) throws MalformedURLException { + public EventDTO createEvent(String eventName, String eventDescription, Date startDate, Date endDate, String venue, + boolean isPublic, List courseAreaNames, Iterable imageURLs, + Iterable videoURLs, Iterable sponsorImageURLs, String logoImageURLAsString, String officialWebsiteURLAsString) + throws MalformedURLException { UUID eventUuid = UUID.randomUUID(); - TimePoint startTimePoint = startDate != null ? new MillisecondsTimePoint(startDate) : null; - TimePoint endTimePoint = endDate != null ? new MillisecondsTimePoint(endDate) : null; + TimePoint startTimePoint = startDate != null ? new MillisecondsTimePoint(startDate) : null; + TimePoint endTimePoint = endDate != null ? new MillisecondsTimePoint(endDate) : null; getService().apply( new CreateEvent(eventName, eventDescription, startTimePoint, endTimePoint, venue, isPublic, eventUuid, - createURLsFromStrings(imageURLs), createURLsFromStrings(videoURLs), createURLsFromStrings(sponsorImageURLs), - logoImageURLAsString == null ? null : new URL(logoImageURLAsString), officialWebsiteURLAsString == null ? null - : new URL(officialWebsiteURLAsString))); + createURLsFromStrings(imageURLs), createURLsFromStrings(videoURLs), + createURLsFromStrings(sponsorImageURLs), + logoImageURLAsString == null ? null : new URL(logoImageURLAsString), officialWebsiteURLAsString == null ? null : new URL(officialWebsiteURLAsString))); for (String courseAreaName : courseAreaNames) { createCourseArea(eventUuid, courseAreaName); } @@ -3446,9 +3427,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private LeaderboardGroupBaseDTO convertToLeaderboardGroupBaseDTO(LeaderboardGroupBase leaderboardGroupBase) { return new LeaderboardGroupBaseDTO(leaderboardGroupBase.getId(), leaderboardGroupBase.getName(), - leaderboardGroupBase.getDescription(), leaderboardGroupBase.getDisplayName(), leaderboardGroupBase.hasOverallLeaderboard()); + leaderboardGroupBase.getDescription(), leaderboardGroupBase.getDisplayName(), + leaderboardGroupBase.hasOverallLeaderboard()); } - + private void copyEventBaseFieldsToDTO(EventBase event, EventBaseDTO eventDTO) { eventDTO.venue = new VenueDTO(); eventDTO.venue.setName(event.getVenue() != null ? event.getVenue().getName() : null); @@ -3464,15 +3446,15 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S eventDTO.setLogoImageURL(event.getLogoImageURL().toString()); setImageSize(event, eventDTO, event.getLogoImageURL()); } - for (URL url : event.getSponsorImageURLs()) { + for(URL url: event.getSponsorImageURLs()) { eventDTO.addSponsorImageURL(url.toString()); setImageSize(event, eventDTO, url); } - for (URL url : event.getImageURLs()) { + for(URL url: event.getImageURLs()) { eventDTO.addImageURL(url.toString()); setImageSize(event, eventDTO, url); } - for (URL url : event.getVideoURLs()) { + for(URL url: event.getVideoURLs()) { eventDTO.addVideoURL(url.toString()); } } @@ -3481,15 +3463,15 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S try { eventDTO.setImageSize(imageURL.toString(), event.getImageSize(imageURL)); } catch (InterruptedException | ExecutionException e) { - logger.log(Level.FINE, "Was unable to obtain image size for " + imageURL + " earlier.", e); + logger.log(Level.FINE, "Was unable to obtain image size for "+imageURL+" earlier.", e); } } - + private EventDTO convertToEventDTO(Event event, boolean withStatisticalData) { EventDTO eventDTO = new EventDTO(event.getName()); copyEventBaseFieldsToDTO(event, eventDTO); eventDTO.regattas = new ArrayList(); - for (Regatta regatta : event.getRegattas()) { + for (Regatta regatta: event.getRegattas()) { RegattaDTO regattaDTO = new RegattaDTO(); regattaDTO.setName(regatta.getName()); regattaDTO.races = convertToRaceDTOs(regatta); @@ -3511,15 +3493,15 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S courseAreaDTO.id = courseArea.getId(); return courseAreaDTO; } - + /** for backward compatibility with the regatta overview */ @Override public List getRegattaStructureForEvent(UUID eventId) { List raceGroups = new ArrayList(); Event event = getService().getEvent(eventId); Map leaderboardWithLeaderboardGroups = new HashMap(); - for (LeaderboardGroup leaderboardGroup : event.getLeaderboardGroups()) { - for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) { + for(LeaderboardGroup leaderboardGroup: event.getLeaderboardGroups()) { + for(Leaderboard leaderboard: leaderboardGroup.getLeaderboards()) { leaderboardWithLeaderboardGroups.put(leaderboard, leaderboardGroup); } } @@ -3530,8 +3512,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S RaceGroupDTO raceGroup = new RaceGroupDTO(leaderboard.getName()); raceGroup.courseAreaIdAsString = courseArea.getId().toString(); raceGroup.displayName = getRegattaNameFromLeaderboard(leaderboard); - if (leaderboardWithLeaderboardGroups.containsKey(leaderboard)) { - raceGroup.leaderboardGroupName = leaderboardWithLeaderboardGroups.get(leaderboard).getName(); + if(leaderboardWithLeaderboardGroups.containsKey(leaderboard)) { + raceGroup.leaderboardGroupName = leaderboardWithLeaderboardGroups.get(leaderboard).getName(); } if (leaderboard instanceof RegattaLeaderboard) { RegattaLeaderboard regattaLeaderboard = (RegattaLeaderboard) leaderboard; @@ -3565,14 +3547,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S List raceGroups = new ArrayList(); Event event = getService().getEvent(eventId); Map leaderboardWithLeaderboardGroups = new HashMap(); - for (LeaderboardGroup leaderboardGroup : event.getLeaderboardGroups()) { - for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) { + for(LeaderboardGroup leaderboardGroup: event.getLeaderboardGroups()) { + for(Leaderboard leaderboard: leaderboardGroup.getLeaderboards()) { leaderboardWithLeaderboardGroups.put(leaderboard, leaderboardGroup); } } if (event != null) { - for (LeaderboardGroup leaderboardGroup : event.getLeaderboardGroups()) { - for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) { + for(LeaderboardGroup leaderboardGroup: event.getLeaderboardGroups()) { + for(Leaderboard leaderboard: leaderboardGroup.getLeaderboards()) { RaceGroupDTO raceGroup = new RaceGroupDTO(leaderboard.getName()); for (CourseArea courseArea : event.getVenue().getCourseAreas()) { if (leaderboard.getDefaultCourseArea() != null && leaderboard.getDefaultCourseArea() == courseArea) { @@ -3581,8 +3563,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } } raceGroup.displayName = getRegattaNameFromLeaderboard(leaderboard); - if (leaderboardWithLeaderboardGroups.containsKey(leaderboard)) { - raceGroup.leaderboardGroupName = leaderboardWithLeaderboardGroups.get(leaderboard).getName(); + if(leaderboardWithLeaderboardGroups.containsKey(leaderboard)) { + raceGroup.leaderboardGroupName = leaderboardWithLeaderboardGroups.get(leaderboard).getName(); } if (leaderboard instanceof RegattaLeaderboard) { RegattaLeaderboard regattaLeaderboard = (RegattaLeaderboard) leaderboard; @@ -3602,8 +3584,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S FleetDTO fleetDTO = new FleetDTO(LeaderboardNameConstants.DEFAULT_FLEET_NAME, 0, null); seriesDTO.getFleets().add(fleetDTO); seriesDTO.getRaceColumns().addAll(convertToRaceColumnDTOs(leaderboard.getRaceColumns())); - for (Competitor c : leaderboard.getCompetitors()) { - if (c.getBoat() != null && c.getBoat().getBoatClass() != null) { + for(Competitor c: leaderboard.getCompetitors()) { + if(c.getBoat() != null && c.getBoat().getBoatClass() != null) { raceGroup.boatClass = c.getBoat().getBoatClass().getDisplayName(); } } @@ -3615,17 +3597,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return raceGroups; } + /** - * The name of the regatta to be shown on the regatta overview webpage is retrieved from the name of the - * {@link Leaderboard}. Since regattas are not always represented by a {@link Regatta} object in the Sailing Suite - * but need to be shown on the regatta overview page, the leaderboard is used as the representative of the sailing - * regatta. When a display name is set for a leaderboard, this name is favored against the (mostly technical) - * regatta name as the display name represents the publicly visible name of the regatta.
- * When the leaderboard is a {@link RegattaLeaderboard} the name of the {@link Regatta} is used, otherwise the - * leaderboard is a {@link FlexibleLeaderboard} and it's name is used as the last option. - * - * @param leaderboard - * The {@link Leaderboard} from which the name is be retrieved + * The name of the regatta to be shown on the regatta overview webpage is retrieved from the name of the {@link Leaderboard}. Since regattas are + * not always represented by a {@link Regatta} object in the Sailing Suite but need to be shown on the regatta overview page, the leaderboard is + * used as the representative of the sailing regatta. When a display name is set for a leaderboard, this name is favored against the (mostly technical) + * regatta name as the display name represents the publicly visible name of the regatta. + *
+ * When the leaderboard is a {@link RegattaLeaderboard} the name of the {@link Regatta} is used, otherwise the leaderboard + * is a {@link FlexibleLeaderboard} and it's name is used as the last option. + * @param leaderboard The {@link Leaderboard} from which the name is be retrieved * @return the name of the regatta to be shown on the regatta overview page */ private String getRegattaNameFromLeaderboard(Leaderboard leaderboard) { @@ -3649,12 +3630,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S removeRegatta(regatta); } } - + @Override public void removeRegatta(RegattaIdentifier regattaIdentifier) { getService().apply(new RemoveRegatta(regattaIdentifier)); } - + @Override public void removeSeries(RegattaIdentifier identifier, String seriesName) { getService().apply(new RemoveSeries(identifier, seriesName)); @@ -3668,40 +3649,39 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public void updateRegatta(RegattaIdentifier regattaName, UUID defaultCourseAreaUuid, RegattaConfigurationDTO configurationDTO, - boolean useStartTimeInference) { - getService().apply( - new UpdateSpecificRegatta(regattaName, defaultCourseAreaUuid, convertToRegattaConfiguration(configurationDTO), - useStartTimeInference)); + public void updateRegatta(RegattaIdentifier regattaName, UUID defaultCourseAreaUuid, + RegattaConfigurationDTO configurationDTO, boolean useStartTimeInference) { + getService().apply(new UpdateSpecificRegatta(regattaName, defaultCourseAreaUuid, convertToRegattaConfiguration(configurationDTO), useStartTimeInference)); } @Override - public List addRaceColumnsToSeries(RegattaIdentifier regattaIdentifier, String seriesName, - List columnNames) { + public List addRaceColumnsToSeries(RegattaIdentifier regattaIdentifier, String seriesName, List columnNames) { List result = new ArrayList(); - for (String columnName : columnNames) { + for(String columnName: columnNames) { RaceColumnInSeries raceColumnInSeries = getService().apply(new AddColumnToSeries(regattaIdentifier, seriesName, columnName)); - if (raceColumnInSeries != null) { + if(raceColumnInSeries != null) { result.add(convertToRaceColumnInSeriesDTO(raceColumnInSeries)); } } return result; } - + @Override public void updateSeries(RegattaIdentifier regattaIdentifier, String seriesName, String newSeriesName, boolean isMedal, - int[] resultDiscardingThresholds, boolean startsWithZeroScore, boolean firstColumnIsNonDiscardableCarryForward, - boolean hasSplitFleetContiguousScoring, List fleets) { + int[] resultDiscardingThresholds, boolean startsWithZeroScore, + boolean firstColumnIsNonDiscardableCarryForward, boolean hasSplitFleetContiguousScoring, + List fleets) { getService().apply( - new UpdateSeries(regattaIdentifier, seriesName, newSeriesName, isMedal, resultDiscardingThresholds, startsWithZeroScore, - firstColumnIsNonDiscardableCarryForward, hasSplitFleetContiguousScoring, fleets)); + new UpdateSeries(regattaIdentifier, seriesName, newSeriesName, isMedal, resultDiscardingThresholds, + startsWithZeroScore, firstColumnIsNonDiscardableCarryForward, hasSplitFleetContiguousScoring, + fleets)); } @Override public RaceColumnInSeriesDTO addRaceColumnToSeries(RegattaIdentifier regattaIdentifier, String seriesName, String columnName) { RaceColumnInSeriesDTO result = null; RaceColumnInSeries raceColumnInSeries = getService().apply(new AddColumnToSeries(regattaIdentifier, seriesName, columnName)); - if (raceColumnInSeries != null) { + if(raceColumnInSeries != null) { result = convertToRaceColumnInSeriesDTO(raceColumnInSeries); } return result; @@ -3709,7 +3689,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public void removeRaceColumnsFromSeries(RegattaIdentifier regattaIdentifier, String seriesName, List columnNames) { - for (String columnName : columnNames) { + for(String columnName: columnNames) { getService().apply(new RemoveColumnFromSeries(regattaIdentifier, seriesName, columnName)); } } @@ -3731,22 +3711,24 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public RegattaDTO createRegatta(String regattaName, String boatClassName, - RegattaCreationParametersDTO seriesNamesWithFleetNamesAndFleetOrderingAndMedal, boolean persistent, - ScoringSchemeType scoringSchemeType, UUID defaultCourseAreaId, boolean useStartTimeInference) { + RegattaCreationParametersDTO seriesNamesWithFleetNamesAndFleetOrderingAndMedal, + boolean persistent, ScoringSchemeType scoringSchemeType, UUID defaultCourseAreaId, boolean useStartTimeInference) { Regatta regatta = getService().apply( - new AddSpecificRegatta(regattaName, boatClassName, UUID.randomUUID(), seriesNamesWithFleetNamesAndFleetOrderingAndMedal, + new AddSpecificRegatta( + regattaName, boatClassName, UUID.randomUUID(), + seriesNamesWithFleetNamesAndFleetOrderingAndMedal, persistent, baseDomainFactory.createScoringScheme(scoringSchemeType), defaultCourseAreaId, useStartTimeInference)); return convertToRegattaDTO(regatta); } @Override - public RegattaScoreCorrectionDTO getScoreCorrections(String scoreCorrectionProviderName, String eventName, String boatClassName, - Date timePointWhenResultPublished) throws Exception { + public RegattaScoreCorrectionDTO getScoreCorrections(String scoreCorrectionProviderName, String eventName, + String boatClassName, Date timePointWhenResultPublished) throws Exception { RegattaScoreCorrectionDTO result = null; for (ScoreCorrectionProvider scp : getAllScoreCorrectionProviders()) { if (scp.getName().equals(scoreCorrectionProviderName)) { - result = createScoreCorrection(scp.getScoreCorrections(eventName, boatClassName, new MillisecondsTimePoint( - timePointWhenResultPublished))); + result = createScoreCorrection(scp.getScoreCorrections(eventName, boatClassName, + new MillisecondsTimePoint(timePointWhenResultPublished))); break; } } @@ -3766,11 +3748,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return new RegattaScoreCorrectionDTO(scoreCorrections.getProvider().getName(), map); } - private ScoreCorrectionEntryDTO createScoreCorrectionEntryDTO(ScoreCorrectionForCompetitorInRace scoreCorrectionForCompetitor) { - return new ScoreCorrectionEntryDTO(scoreCorrectionForCompetitor.getPoints(), scoreCorrectionForCompetitor.isDiscarded(), - scoreCorrectionForCompetitor.getMaxPointsReason()); + private ScoreCorrectionEntryDTO createScoreCorrectionEntryDTO( + ScoreCorrectionForCompetitorInRace scoreCorrectionForCompetitor) { + return new ScoreCorrectionEntryDTO(scoreCorrectionForCompetitor.getPoints(), + scoreCorrectionForCompetitor.isDiscarded(), scoreCorrectionForCompetitor.getMaxPointsReason()); } - + @Override public List getUrlResultProviderNames() { List result = new ArrayList(); @@ -3796,9 +3779,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public List getRemoteSailingServerReferences() { List result = new ArrayList(); - for (Entry, Exception>> remoteSailingServerRefAndItsCachedEvent : getService() - .getPublicEventsOfAllSailingServers().entrySet()) { - RemoteSailingServerReferenceDTO dto = createRemoteSailingServerReferenceDTO(remoteSailingServerRefAndItsCachedEvent.getKey(), + for (Entry, Exception>> remoteSailingServerRefAndItsCachedEvent : + getService().getPublicEventsOfAllSailingServers().entrySet()) { + RemoteSailingServerReferenceDTO dto = createRemoteSailingServerReferenceDTO( + remoteSailingServerRefAndItsCachedEvent.getKey(), remoteSailingServerRefAndItsCachedEvent.getValue()); result.add(dto); } @@ -3813,8 +3797,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public RemoteSailingServerReferenceDTO addRemoteSailingServerReference(RemoteSailingServerReferenceDTO sailingServer) - throws MalformedURLException { + public RemoteSailingServerReferenceDTO addRemoteSailingServerReference(RemoteSailingServerReferenceDTO sailingServer) throws MalformedURLException { final String expandedURL; if (sailingServer.getUrl().contains("//")) { expandedURL = sailingServer.getUrl(); @@ -3822,12 +3805,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S expandedURL = "http://" + sailingServer.getUrl(); } URL serverURL = new URL(expandedURL); - RemoteSailingServerReference serverRef = getService() - .apply(new AddRemoteSailingServerReference(sailingServer.getName(), serverURL)); - com.sap.sse.common.Util.Pair, Exception> eventsOrException = getService() - .updateRemoteServerEventCacheSynchronously(serverRef); + RemoteSailingServerReference serverRef = getService().apply(new AddRemoteSailingServerReference(sailingServer.getName(), serverURL)); + com.sap.sse.common.Util.Pair, Exception> eventsOrException = getService().updateRemoteServerEventCacheSynchronously(serverRef); return createRemoteSailingServerReferenceDTO(serverRef, eventsOrException); - + } @Override @@ -3866,13 +3847,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private ResultUrlRegistry getResultUrlRegistry() { return resultUrlRegistryServiceTracker.getService(); - } + } @Override public List getOverallLeaderboardNamesContaining(String leaderboardName) { Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); if (leaderboard == null) { - throw new IllegalArgumentException("Couldn't find leaderboard named " + leaderboardName); + throw new IllegalArgumentException("Couldn't find leaderboard named "+leaderboardName); } List result = new ArrayList(); for (Map.Entry leaderboardEntry : getService().getLeaderboards().entrySet()) { @@ -3898,8 +3879,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public void storeSwissTimingArchiveConfiguration(String swissTimingJsonUrl) { - swissTimingAdapterPersistence.storeSwissTimingArchiveConfiguration(swissTimingFactory - .createSwissTimingArchiveConfiguration(swissTimingJsonUrl)); + swissTimingAdapterPersistence.storeSwissTimingArchiveConfiguration(swissTimingFactory.createSwissTimingArchiveConfiguration( + swissTimingJsonUrl)); } @Override @@ -3939,16 +3920,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public List getRaceStateEntriesForLeaderboard(String leaderboardName, boolean showOnlyCurrentlyRunningRaces, - boolean showOnlyRacesOfSameDay, final List visibleRegattas) throws NoWindException, InterruptedException, - ExecutionException { + public List getRaceStateEntriesForLeaderboard(String leaderboardName, + boolean showOnlyCurrentlyRunningRaces, boolean showOnlyRacesOfSameDay, final List visibleRegattas) + throws NoWindException, InterruptedException, ExecutionException { Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); return getRaceStateEntriesForLeaderboard(leaderboard, showOnlyCurrentlyRunningRaces, showOnlyRacesOfSameDay, visibleRegattas); } - private List getRaceStateEntriesForLeaderboard(Leaderboard leaderboard, boolean showOnlyCurrentlyRunningRaces, - boolean showOnlyRacesOfSameDay, final List visibleRegattas) throws NoWindException, InterruptedException, - ExecutionException { + private List getRaceStateEntriesForLeaderboard(Leaderboard leaderboard, + boolean showOnlyCurrentlyRunningRaces, boolean showOnlyRacesOfSameDay, final List visibleRegattas) + throws NoWindException, InterruptedException, ExecutionException { List result = new ArrayList(); Calendar dayToCheck = Calendar.getInstance(); dayToCheck.setTime(new Date()); @@ -3963,8 +3944,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S for (Series series : regattaLeaderboard.getRegatta().getSeries()) { Map> entriesPerFleet = new HashMap>(); for (RaceColumn raceColumn : series.getRaceColumns()) { - getRegattaOverviewEntries(showOnlyRacesOfSameDay, dayToCheck, usedCourseArea, leaderboard, regattaName, - series.getName(), raceColumn, entriesPerFleet); + getRegattaOverviewEntries(showOnlyRacesOfSameDay, dayToCheck, + usedCourseArea, leaderboard, regattaName, series.getName(), raceColumn, entriesPerFleet); } result.addAll(getRegattaOverviewEntriesToBeShown(showOnlyCurrentlyRunningRaces, entriesPerFleet)); } @@ -3972,24 +3953,24 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } else { Map> entriesPerFleet = new HashMap>(); for (RaceColumn raceColumn : leaderboard.getRaceColumns()) { - getRegattaOverviewEntries(showOnlyRacesOfSameDay, dayToCheck, usedCourseArea, leaderboard, regattaName, - LeaderboardNameConstants.DEFAULT_SERIES_NAME, raceColumn, entriesPerFleet); + getRegattaOverviewEntries(showOnlyRacesOfSameDay, dayToCheck, usedCourseArea, + leaderboard, regattaName, LeaderboardNameConstants.DEFAULT_SERIES_NAME, raceColumn, entriesPerFleet); } result.addAll(getRegattaOverviewEntriesToBeShown(showOnlyCurrentlyRunningRaces, entriesPerFleet)); } } return result; } - + @Override public List getRaceStateEntriesForRaceGroup(UUID eventId, List visibleCourseAreaIds, - List visibleRegattas, boolean showOnlyCurrentlyRunningRaces, boolean showOnlyRacesOfSameDay) throws NoWindException, - InterruptedException, ExecutionException { + List visibleRegattas, boolean showOnlyCurrentlyRunningRaces, boolean showOnlyRacesOfSameDay) + throws NoWindException, InterruptedException, ExecutionException { List result = new ArrayList(); - + Calendar dayToCheck = Calendar.getInstance(); dayToCheck.setTime(new Date()); - + Event event = getService().getEvent(eventId); if (event != null) { for (CourseArea courseArea : event.getVenue().getCourseAreas()) { @@ -3997,8 +3978,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S for (Leaderboard leaderboard : getService().getLeaderboards().values()) { final CourseArea leaderboardDefaultCourseArea = leaderboard.getDefaultCourseArea(); if (leaderboardDefaultCourseArea != null && leaderboardDefaultCourseArea.equals(courseArea)) { - result.addAll(getRaceStateEntriesForLeaderboard(leaderboard.getName(), showOnlyCurrentlyRunningRaces, - showOnlyRacesOfSameDay, visibleRegattas)); + result.addAll(getRaceStateEntriesForLeaderboard(leaderboard.getName(), + showOnlyCurrentlyRunningRaces, showOnlyRacesOfSameDay, visibleRegattas)); } } } @@ -4007,13 +3988,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return result; } - private void getRegattaOverviewEntries(boolean showOnlyRacesOfSameDay, Calendar dayToCheck, CourseArea courseArea, - Leaderboard leaderboard, String regattaName, String seriesName, RaceColumn raceColumn, + private void getRegattaOverviewEntries(boolean showOnlyRacesOfSameDay, Calendar dayToCheck, + CourseArea courseArea, Leaderboard leaderboard, String regattaName, String seriesName, RaceColumn raceColumn, Map> entriesPerFleet) { for (Fleet fleet : raceColumn.getFleets()) { - RegattaOverviewEntryDTO entry = createRegattaOverviewEntryDTO(courseArea, leaderboard, regattaName, seriesName, raceColumn, - fleet, showOnlyRacesOfSameDay, dayToCheck); + RegattaOverviewEntryDTO entry = createRegattaOverviewEntryDTO(courseArea, + leaderboard, regattaName, seriesName, raceColumn, fleet, + showOnlyRacesOfSameDay, dayToCheck); if (entry != null) { addRegattaOverviewEntryToEntriesPerFleet(entriesPerFleet, fleet, entry); } @@ -4032,20 +4014,20 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (entry.raceInfo.lastStatus.equals(RaceLogRaceStatus.FINISHED)) { finishedEntries.add(entry); } else if (entry.raceInfo.lastStatus.equals(RaceLogRaceStatus.UNSCHEDULED)) { - // don't filter when the race is unscheduled and aborted before + //don't filter when the race is unscheduled and aborted before if (!entry.raceInfo.isRaceAbortedInPassBefore) { result.remove(entry); } - + } } } if (!finishedEntries.isEmpty()) { - // keep the last finished race in the list to be shown + //keep the last finished race in the list to be shown int indexOfLastElement = finishedEntries.size() - 1; finishedEntries.remove(indexOfLastElement); - - // ... and remove all other finished races + + //... and remove all other finished races result.removeAll(finishedEntries); } } @@ -4053,16 +4035,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return result; } - private void addRegattaOverviewEntryToEntriesPerFleet(Map> entriesPerFleet, Fleet fleet, - RegattaOverviewEntryDTO entry) { + private void addRegattaOverviewEntryToEntriesPerFleet(Map> entriesPerFleet, + Fleet fleet, RegattaOverviewEntryDTO entry) { if (!entriesPerFleet.containsKey(fleet.getName())) { - entriesPerFleet.put(fleet.getName(), new ArrayList()); + entriesPerFleet.put(fleet.getName(), new ArrayList()); } entriesPerFleet.get(fleet.getName()).add(entry); } - - private RegattaOverviewEntryDTO createRegattaOverviewEntryDTO(CourseArea courseArea, Leaderboard leaderboard, String regattaName, - String seriesName, RaceColumn raceColumn, Fleet fleet, boolean showOnlyRacesOfSameDay, Calendar dayToCheck) { + + private RegattaOverviewEntryDTO createRegattaOverviewEntryDTO(CourseArea courseArea, Leaderboard leaderboard, + String regattaName, String seriesName, RaceColumn raceColumn, Fleet fleet, boolean showOnlyRacesOfSameDay, Calendar dayToCheck) { RegattaOverviewEntryDTO entry = new RegattaOverviewEntryDTO(); if (courseArea != null) { entry.courseAreaName = courseArea.getName(); @@ -4075,16 +4057,15 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S entry.regattaName = leaderboard.getName(); entry.raceInfo = createRaceInfoDTO(seriesName, raceColumn, fleet); entry.currentServerTime = new Date(); - + if (showOnlyRacesOfSameDay) { - if (!RaceStateOfSameDayHelper.isRaceStateOfSameDay(entry.raceInfo.startTime, entry.raceInfo.finishedTime, - entry.raceInfo.abortingTimeInPassBefore, dayToCheck)) { + if (!RaceStateOfSameDayHelper.isRaceStateOfSameDay(entry.raceInfo.startTime, entry.raceInfo.finishedTime, entry.raceInfo.abortingTimeInPassBefore, dayToCheck)) { entry = null; } } return entry; } - + @Override public String getBuildVersion() { return BuildVersion.getBuildVersion(); @@ -4131,16 +4112,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S public RaceLogDTO getRaceLog(String leaderboardName, RaceColumnDTO raceColumnDTO, FleetDTO fleet) { RaceLogDTO result = null; RaceLog raceLog = getService().getRaceLog(leaderboardName, raceColumnDTO.getName(), fleet.getName()); - if (raceLog != null) { + if(raceLog != null) { List entries = new ArrayList(); result = new RaceLogDTO(leaderboardName, raceColumnDTO.getName(), fleet.getName(), raceLog.getCurrentPassId(), entries); raceLog.lockForRead(); try { - for (RaceLogEvent raceLogEvent : raceLog.getRawFixes()) { - RaceLogEventDTO entry = new RaceLogEventDTO(raceLogEvent.getPassId(), raceLogEvent.getAuthor().getName(), raceLogEvent - .getAuthor().getPriority(), raceLogEvent.getCreatedAt() != null ? raceLogEvent.getCreatedAt().asDate() : null, - raceLogEvent.getLogicalTimePoint() != null ? raceLogEvent.getLogicalTimePoint().asDate() : null, raceLogEvent - .getClass().getSimpleName(), raceLogEvent.getShortInfo()); + for(RaceLogEvent raceLogEvent: raceLog.getRawFixes()) { + RaceLogEventDTO entry = new RaceLogEventDTO(raceLogEvent.getPassId(), + raceLogEvent.getAuthor().getName(), raceLogEvent.getAuthor().getPriority(), + raceLogEvent.getCreatedAt() != null ? raceLogEvent.getCreatedAt().asDate() : null, + raceLogEvent.getLogicalTimePoint() != null ? raceLogEvent.getLogicalTimePoint().asDate() : null, + raceLogEvent.getClass().getSimpleName(), raceLogEvent.getShortInfo()); entries.add(entry); } } finally { @@ -4232,8 +4214,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public UUID importMasterData(final String urlAsString, final String[] groupNames, final boolean override, final boolean compress, - final boolean exportWind) { + public UUID importMasterData(final String urlAsString, final String[] groupNames, final boolean override, + final boolean compress, final boolean exportWind) { final UUID importOperationId = UUID.randomUUID(); getService().createOrUpdateDataImportProgressWithReplication(importOperationId, 0.0, "Initializing", 0.0); // Create a progress indicator for as long as the server gets data from the other server. @@ -4243,7 +4225,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public void run() { long startTime = System.currentTimeMillis(); - getService().createOrUpdateDataImportProgressWithReplication(importOperationId, 0.01, "Setting up connection", 0.5); + getService().createOrUpdateDataImportProgressWithReplication(importOperationId, 0.01, + "Setting up connection", 0.5); com.sap.sse.common.Util.Pair hostnameAndPort = parseHostAndPort(urlAsString); String hostname = hostnameAndPort.getA(); int port = hostnameAndPort.getB(); @@ -4270,10 +4253,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S // server connection.setReadTimeout(60000); connection.connect(); - getService().createOrUpdateDataImportProgressWithReplication(importOperationId, 0.02, "Connecting", 0.5); + getService().createOrUpdateDataImportProgressWithReplication(importOperationId, 0.02, "Connecting", + 0.5); if (compress) { - InputStream timeoutExtendingInputStream = new TimeoutExtendingInputStream(connection.getInputStream(), connection); + InputStream timeoutExtendingInputStream = new TimeoutExtendingInputStream( + connection.getInputStream(), connection); inputStream = new GZIPInputStream(timeoutExtendingInputStream); } else { inputStream = new TimeoutExtendingInputStream(connection.getInputStream(), connection); @@ -4310,7 +4295,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return importOperationId; } - + private URL createUrl(String host, Integer port, String path, String query) throws Exception { URL url; if (query != null) { @@ -4325,7 +4310,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return getService().getDataImportLock().getProgress(id); } - private String createLeaderboardQuery(String[] groupNames, boolean compress, boolean exportWind) throws UnsupportedEncodingException { + private String createLeaderboardQuery(String[] groupNames, boolean compress, boolean exportWind) + throws UnsupportedEncodingException { StringBuffer queryStringBuffer = new StringBuffer(""); for (int i = 0; i < groupNames.length; i++) { String encodedGroupName = URLEncoder.encode(groupNames[i], "UTF-8"); @@ -4360,23 +4346,21 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public CompetitorDTO addOrUpdateCompetitor(CompetitorDTO competitor) { - Nationality nationality = (competitor.getThreeLetterIocCountryCode() == null || competitor.getThreeLetterIocCountryCode().isEmpty()) ? null - : getBaseDomainFactory().getOrCreateNationality(competitor.getThreeLetterIocCountryCode()); - // new competitor - if (competitor.getIdAsString() == null || competitor.getIdAsString().isEmpty()) { - BoatClass boatClass = getBaseDomainFactory().getOrCreateBoatClass(competitor.getBoatClass().getName()); - DynamicPerson sailor = new PersonImpl(competitor.getName(), nationality, null, null); - DynamicTeam team = new TeamImpl(competitor.getName() + " team", Collections.singleton(sailor), null); - DynamicBoat boat = new BoatImpl(competitor.getName() + " boat", boatClass, competitor.getSailID()); - return getBaseDomainFactory().convertToCompetitorDTO( - getBaseDomainFactory() - .getOrCreateCompetitor(UUID.randomUUID(), competitor.getName(), competitor.getColor(), team, boat)); - } - + Nationality nationality = (competitor.getThreeLetterIocCountryCode() == null || competitor.getThreeLetterIocCountryCode().isEmpty()) ? null : + getBaseDomainFactory().getOrCreateNationality(competitor.getThreeLetterIocCountryCode()); + //new competitor + if (competitor.getIdAsString() == null || competitor.getIdAsString().isEmpty()) { + BoatClass boatClass = getBaseDomainFactory().getOrCreateBoatClass(competitor.getBoatClass().getName()); + DynamicPerson sailor = new PersonImpl(competitor.getName(), nationality, null, null); + DynamicTeam team = new TeamImpl(competitor.getName() + " team", Collections.singleton(sailor), null); + DynamicBoat boat = new BoatImpl(competitor.getName() + " boat", boatClass, competitor.getSailID()); + return getBaseDomainFactory().convertToCompetitorDTO(getBaseDomainFactory().getOrCreateCompetitor(UUID.randomUUID(), competitor.getName(), competitor.getColor(), + team, boat)); + } + return getBaseDomainFactory().convertToCompetitorDTO( - getService().apply( - new UpdateCompetitor(competitor.getIdAsString(), competitor.getName(), competitor.getColor(), competitor - .getSailID(), nationality))); + getService().apply(new UpdateCompetitor(competitor.getIdAsString(), competitor.getName(), + competitor.getColor(), competitor.getSailID(), nationality))); } @Override @@ -4387,11 +4371,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } getService().apply(new AllowCompetitorResetToDefaults(competitorIdsAsStrings)); } - + @Override public List getDeviceConfigurationMatchers() { List configs = new ArrayList(); - for (Entry entry : getService().getAllDeviceConfigurations().entrySet()) { + for (Entry entry : + getService().getAllDeviceConfigurations().entrySet()) { DeviceConfigurationMatcher matcher = entry.getKey(); configs.add(convertToDeviceConfigurationMatcherDTO(matcher)); } @@ -4410,8 +4395,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public DeviceConfigurationMatcherDTO createOrUpdateDeviceConfiguration(DeviceConfigurationMatcherDTO matcherDTO, - DeviceConfigurationDTO configurationDTO) { + public DeviceConfigurationMatcherDTO createOrUpdateDeviceConfiguration(DeviceConfigurationMatcherDTO matcherDTO, DeviceConfigurationDTO configurationDTO) { DeviceConfigurationMatcher matcher = convertToDeviceConfigurationMatcher(matcherDTO.type, matcherDTO.clients); DeviceConfiguration configuration = convertToDeviceConfiguration(configurationDTO); getService().createOrUpdateDeviceConfiguration(matcher, configuration); @@ -4427,14 +4411,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S private DeviceConfigurationMatcherDTO convertToDeviceConfigurationMatcherDTO(DeviceConfigurationMatcher matcher) { List clients = new ArrayList(); - + if (matcher instanceof DeviceConfigurationMatcherSingle) { - clients.add(((DeviceConfigurationMatcherSingle) matcher).getClientIdentifier()); + clients.add(((DeviceConfigurationMatcherSingle)matcher).getClientIdentifier()); } else if (matcher instanceof DeviceConfigurationMatcherMulti) { - Util.addAll(((DeviceConfigurationMatcherMulti) matcher).getClientIdentifiers(), clients); + Util.addAll(((DeviceConfigurationMatcherMulti)matcher).getClientIdentifiers(), clients); } - - DeviceConfigurationMatcherDTO dto = new DeviceConfigurationMatcherDTO(matcher.getMatcherType(), clients, matcher.getMatchingRank()); + + DeviceConfigurationMatcherDTO dto = new DeviceConfigurationMatcherDTO( + matcher.getMatcherType(), + clients, + matcher.getMatchingRank()); return dto; } @@ -4453,15 +4440,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return dto; } - private DeviceConfigurationDTO.RegattaConfigurationDTO convertToRegattaConfigurationDTO(RegattaConfiguration configuration) { + private DeviceConfigurationDTO.RegattaConfigurationDTO convertToRegattaConfigurationDTO( + RegattaConfiguration configuration) { if (configuration == null) { return null; } DeviceConfigurationDTO.RegattaConfigurationDTO dto = new DeviceConfigurationDTO.RegattaConfigurationDTO(); - + dto.defaultRacingProcedureType = configuration.getDefaultRacingProcedureType(); dto.defaultCourseDesignerMode = configuration.getDefaultCourseDesignerMode(); - + if (configuration.getRRS26Configuration() != null) { dto.rrs26Configuration = new DeviceConfigurationDTO.RegattaConfigurationDTO.RRS26ConfigurationDTO(); dto.rrs26Configuration.classFlag = configuration.getRRS26Configuration().getClassFlag(); @@ -4535,22 +4523,20 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public boolean setStartTimeAndProcedure(RaceLogSetStartTimeAndProcedureDTO dto) { - TimePoint newStartTime = getService().setStartTimeAndProcedure(dto.leaderboardName, dto.raceColumnName, dto.fleetName, - dto.authorName, dto.authorPriority, dto.passId, new MillisecondsTimePoint(dto.logicalTimePoint), - new MillisecondsTimePoint(dto.startTime), dto.racingProcedure); + TimePoint newStartTime = getService().setStartTimeAndProcedure(dto.leaderboardName, dto.raceColumnName, + dto.fleetName, dto.authorName, dto.authorPriority, + dto.passId, new MillisecondsTimePoint(dto.logicalTimePoint), new MillisecondsTimePoint(dto.startTime), + dto.racingProcedure); return new MillisecondsTimePoint(dto.startTime).equals(newStartTime); } @Override - public com.sap.sse.common.Util.Triple getStartTimeAndProcedure(String leaderboardName, - String raceColumnName, String fleetName) { - com.sap.sse.common.Util.Triple result = getService().getStartTimeAndProcedure( - leaderboardName, raceColumnName, fleetName); + public com.sap.sse.common.Util.Triple getStartTimeAndProcedure(String leaderboardName, String raceColumnName, String fleetName) { + com.sap.sse.common.Util.Triple result = getService().getStartTimeAndProcedure(leaderboardName, raceColumnName, fleetName); if (result == null || result.getA() == null) { return null; } - return new com.sap.sse.common.Util.Triple( - result.getA() == null ? null : result.getA().asDate(), result.getB(), result.getC()); + return new com.sap.sse.common.Util.Triple(result.getA() == null ? null : result.getA().asDate(), result.getB(), result.getC()); } @Override @@ -4587,8 +4573,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public Map importWindFromIgtimi(List selectedRaces, boolean correctByDeclination) - throws IllegalStateException, ClientProtocolException, IOException, org.json.simple.parser.ParseException { + public Map importWindFromIgtimi(List selectedRaces, boolean correctByDeclination) throws IllegalStateException, + ClientProtocolException, IOException, org.json.simple.parser.ParseException { final IgtimiConnectionFactory igtimiConnectionFactory = getIgtimiConnectionFactory(); final Iterable trackedRaces; if (selectedRaces != null && !selectedRaces.isEmpty()) { @@ -4611,7 +4597,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S if (i == null) { i = 0; } - numberOfWindFixesImportedPerRace.put(key, i + resultForAccount.getValue()); + numberOfWindFixesImportedPerRace.put(key, i+resultForAccount.getValue()); } } return numberOfWindFixesImportedPerRace; @@ -4662,50 +4648,52 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } @Override - public void denoteForRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName) throws Exception { - Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); - RaceColumn raceColumn = getService().getLeaderboardByName(leaderboardName).getRaceColumnByName(raceColumnName); - Fleet fleet = raceColumn.getFleetByName(fleetName); - - getRaceLogTrackingAdapter().denoteRaceForRaceLogTracking(getService(), leaderboard, raceColumn, fleet, null); + public void denoteForRaceLogTracking(String leaderboardName, + String raceColumnName, String fleetName) throws Exception { + Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); + RaceColumn raceColumn = getService().getLeaderboardByName(leaderboardName).getRaceColumnByName(raceColumnName); + Fleet fleet = raceColumn.getFleetByName(fleetName); + + getRaceLogTrackingAdapter().denoteRaceForRaceLogTracking(getService(), leaderboard, raceColumn, fleet, null); } - + @Override public void removeDenotationForRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName) { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); getRaceLogTrackingAdapter().removeDenotationForRaceLogTracking(getService(), raceLog); } - + @Override public void denoteForRaceLogTracking(String leaderboardName) throws Exception { - Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); + Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); getRaceLogTrackingAdapter().denoteAllRacesForRaceLogTracking(getService(), leaderboard); } - + /** - * @param triple - * leaderboard and racecolumn and fleet names + * @param triple leaderboard and racecolumn and fleet names * @return */ private RaceLog getRaceLog(com.sap.sse.common.Util.Triple triple) { return getRaceLog(triple.getA(), triple.getB(), triple.getC()); } - + private RaceLog getRaceLog(String leaderboardName, String raceColumnName, String fleetName) { RaceColumn raceColumn = getService().getLeaderboardByName(leaderboardName).getRaceColumnByName(raceColumnName); Fleet fleet = raceColumn.getFleetByName(fleetName); return raceColumn.getRaceLog(fleet); } - + @Override public Collection getCompetitorRegistrations(String leaderboardName, String raceColumnName, String fleetName) { - return convertToCompetitorDTOs(new RegisteredCompetitorsAnalyzer(getRaceLog(leaderboardName, raceColumnName, fleetName)).analyze()); + return convertToCompetitorDTOs( + new RegisteredCompetitorsAnalyzer( + getRaceLog(leaderboardName, raceColumnName, fleetName)).analyze()); } - + private Competitor getCompetitor(CompetitorDTO dto) { return getService().getCompetitorStore().getExistingCompetitorByIdAsString(dto.getIdAsString()); } - + @Override public void setCompetitorRegistrations(String leaderboardName, String raceColumnName, String fleetName, Set competitorDTOs) { @@ -4714,10 +4702,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S for (CompetitorDTO dto : competitorDTOs) { competitors.add(getCompetitor(dto)); } - + getRaceLogTrackingAdapter().registerCompetitors(getService(), raceLog, competitors); } - + private Mark convertToMark(MarkDTO dto, boolean resolve) { if (resolve) { Mark existing = baseDomainFactory.getExistingMarkByIdAsString(dto.getIdAsString()); @@ -4725,12 +4713,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return existing; } } - + Serializable id = UUID.randomUUID(); - + return baseDomainFactory.getOrCreateMark(id, dto.getName(), dto.type, dto.color, dto.shape, dto.pattern); } - + /** * Also finds the last position of the marks, if set by pinging them */ @@ -4751,7 +4739,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return dtos; } - + @Override public void addMarkToRaceLog(String leaderboardName, String raceColumnName, String fleetName, MarkDTO markDTO) { Mark mark = convertToMark(markDTO, false); @@ -4760,42 +4748,42 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S getService().getServerAuthor(), raceLog.getCurrentPassId(), mark); raceLog.add(event); } - + @Override public Collection getMarksInRaceLog(String leaderboardName, String raceColumnName, String fleetName) { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); Collection marks = new DefinedMarkFinder(raceLog).analyze(); return convertToMarkDTOs(raceLog, marks); } - + @Override public void addCourseDefinitionToRaceLog(String leaderboardName, String raceColumnName, String fleetName, List> courseDTO) { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); String name = String.format("Course for %s - %s - %s", leaderboardName, raceColumnName, fleetName); - + CourseBase lastPublishedCourse = new LastPublishedCourseDesignFinder(raceLog).analyze(); if (lastPublishedCourse == null) { lastPublishedCourse = new CourseDataImpl(name); } - + List> controlPoints = new ArrayList<>(); for (Pair waypointDTO : courseDTO) { controlPoints.add(new Pair<>(getOrCreateControlPoint(waypointDTO.getA()), waypointDTO.getB())); } Course course = new CourseImpl(name, lastPublishedCourse.getWaypoints()); - + try { course.update(controlPoints, baseDomainFactory); } catch (Exception e) { throw new RuntimeException(e); } - - RaceLogEvent event = RaceLogEventFactory.INSTANCE.createCourseDesignChangedEvent(MillisecondsTimePoint.now(), getService() - .getServerAuthor(), raceLog.getCurrentPassId(), course); + + RaceLogEvent event = RaceLogEventFactory.INSTANCE.createCourseDesignChangedEvent(MillisecondsTimePoint.now(), + getService().getServerAuthor(), raceLog.getCurrentPassId(), course); raceLog.add(event); } - + private WaypointDTO convertToWaypointDTO(Waypoint waypoint, Map controlPointCache) { ControlPointDTO cp = controlPointCache.get(waypoint.getControlPoint().getId()); if (cp == null) { @@ -4804,7 +4792,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return new WaypointDTO(waypoint.getName(), cp, waypoint.getPassingInstructions()); } - + private RaceCourseDTO convertToRaceCourseDTO(CourseBase course) { List waypointDTOs = new ArrayList(); Map controlPointCache = new HashMap<>(); @@ -4814,35 +4802,36 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return result; } - + @Override - public RaceCourseDTO getLastCourseDefinitionInRaceLog(String leaderboardName, String raceColumnName, String fleetName) { + public RaceCourseDTO getLastCourseDefinitionInRaceLog(String leaderboardName, String raceColumnName, + String fleetName) { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); - + CourseBase lastPublishedCourse = new LastPublishedCourseDesignFinder(raceLog).analyze(); if (lastPublishedCourse == null) { lastPublishedCourse = new CourseDataImpl(""); } - + return convertToRaceCourseDTO(lastPublishedCourse); } - + private Position convertToPosition(PositionDTO dto) { return new DegreePosition(dto.latDeg, dto.lngDeg); } - + @Override - public void pingMarkViaRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName, MarkDTO markDTO, - PositionDTO positionDTO) { + public void pingMarkViaRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName, + MarkDTO markDTO, PositionDTO positionDTO) { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); Mark mark = convertToMark(markDTO, true); TimePoint time = MillisecondsTimePoint.now(); Position position = convertToPosition(positionDTO); GPSFix fix = new GPSFixImpl(position, time); - + getRaceLogTrackingAdapter().pingMark(raceLog, mark, fix, getService()); } - + @Override public void copyCourseAndCompetitorsToOtherRaceLogs(com.sap.sse.common.Util.Triple fromTriple, Set> toTriples) { @@ -4854,34 +4843,35 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S getRaceLogTrackingAdapter().copyCourseAndCompetitors(fromRaceLog, toRaceLogs, baseDomainFactory, getService()); } - + private TypeBasedServiceFinder getDeviceIdentifierStringSerializerHandlerFinder( boolean withFallback) { TypeBasedServiceFinderFactory factory = getService().getTypeBasedServiceFinderFactory(); - TypeBasedServiceFinder finder = factory - .createServiceFinder(DeviceIdentifierStringSerializationHandler.class); + TypeBasedServiceFinder finder = factory.createServiceFinder(DeviceIdentifierStringSerializationHandler.class); if (withFallback) { finder.setFallbackService(new PlaceHolderDeviceIdentifierStringSerializationHandler()); } return finder; } - + private DeviceIdentifier deserializeDeviceIdentifier(String type, String deviceId) throws NoCorrespondingServiceRegisteredException, - TransformationException { - DeviceIdentifierStringSerializationHandler handler = getDeviceIdentifierStringSerializerHandlerFinder(false).findService(type); + TransformationException { + DeviceIdentifierStringSerializationHandler handler = + getDeviceIdentifierStringSerializerHandlerFinder(false).findService(type); return handler.deserialize(deviceId, type, deviceId); } - + private String serializeDeviceIdentifier(DeviceIdentifier deviceId) throws TransformationException { - return getDeviceIdentifierStringSerializerHandlerFinder(true).findService(deviceId.getIdentifierType()).serialize(deviceId).getB(); + return getDeviceIdentifierStringSerializerHandlerFinder(true).findService( + deviceId.getIdentifierType()).serialize(deviceId).getB(); } - + private DeviceMappingDTO convertToDeviceMappingDTO(DeviceMapping mapping) throws TransformationException { String deviceId = serializeDeviceIdentifier(mapping.getDevice()); - Date from = mapping.getTimeRange().from() == null || mapping.getTimeRange().from().asMillis() == Long.MIN_VALUE ? null : mapping - .getTimeRange().from().asDate(); - Date to = mapping.getTimeRange().to() == null || mapping.getTimeRange().to().asMillis() == Long.MAX_VALUE ? null : mapping - .getTimeRange().to().asDate(); + Date from = mapping.getTimeRange().from() == null || mapping.getTimeRange().from().asMillis() == Long.MIN_VALUE ? + null : mapping.getTimeRange().from().asDate(); + Date to = mapping.getTimeRange().to() == null || mapping.getTimeRange().to().asMillis() == Long.MAX_VALUE ? + null : mapping.getTimeRange().to().asDate(); MappableToDevice item = null; if (mapping.getMappedTo() instanceof Competitor) { item = baseDomainFactory.convertToCompetitorDTO((Competitor) mapping.getMappedTo()); @@ -4902,13 +4892,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } originalRaceLogEventUUIDs.add((UUID) id); } - return new DeviceMappingDTO(new DeviceIdentifierDTO(mapping.getDevice().getIdentifierType(), - deviceId), from, to, item, originalRaceLogEventUUIDs); + return new DeviceMappingDTO(new DeviceIdentifierDTO(mapping.getDevice().getIdentifierType(), + deviceId), from, to, item, originalRaceLogEventUUIDs); } - + @Override - public List getDeviceMappingsFromRaceLog(String leaderboardName, String raceColumnName, String fleetName) - throws TransformationException { + public List getDeviceMappingsFromRaceLog(String leaderboardName, String raceColumnName, + String fleetName) throws TransformationException { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); List result = new ArrayList(); for (List> list : new DeviceCompetitorMappingFinder(raceLog).analyze().values()) { @@ -4923,10 +4913,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return result; } - + @Override - public void addDeviceMappingToRaceLog(String leaderboardName, String raceColumnName, String fleetName, DeviceMappingDTO dto) - throws NoCorrespondingServiceRegisteredException, TransformationException { + public void addDeviceMappingToRaceLog(String leaderboardName, String raceColumnName, String fleetName, + DeviceMappingDTO dto) throws NoCorrespondingServiceRegisteredException, TransformationException { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); DeviceMapping mapping = convertToDeviceMapping(dto); TimePoint now = MillisecondsTimePoint.now(); @@ -4934,9 +4924,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S TimePoint from = mapping.getTimeRange().openBeginning() ? null : mapping.getTimeRange().from(); TimePoint to = mapping.getTimeRange().openEnd() ? null : mapping.getTimeRange().to(); if (dto.mappedTo instanceof MarkDTO) { - Mark mark = convertToMark(((MarkDTO) dto.mappedTo), true); - event = RaceLogEventFactory.INSTANCE.createDeviceMarkMappingEvent(now, getService().getServerAuthor(), mapping.getDevice(), - mark, raceLog.getCurrentPassId(), from, to); + Mark mark = convertToMark(((MarkDTO) dto.mappedTo), true); + event = RaceLogEventFactory.INSTANCE.createDeviceMarkMappingEvent(now, getService().getServerAuthor(), + mapping.getDevice(), mark, raceLog.getCurrentPassId(), from, to); } else if (dto.mappedTo instanceof CompetitorDTO) { Competitor competitor = getService().getCompetitorStore().getExistingCompetitorByIdAsString( ((CompetitorDTO) dto.mappedTo).getIdAsString()); @@ -4947,26 +4937,27 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } raceLog.add(event); } - - private ServiceTracker createAndOpenDeviceIdentifierStringSerializationHandlerTracker( - BundleContext context) { - ServiceTracker tracker = new ServiceTracker( - context, DeviceIdentifierStringSerializationHandler.class, null); - + + private ServiceTracker + createAndOpenDeviceIdentifierStringSerializationHandlerTracker(BundleContext context) { + ServiceTracker tracker = + new ServiceTracker( + context, DeviceIdentifierStringSerializationHandler.class, null); + tracker.open(); return tracker; } - + @Override public List getDeserializableDeviceIdentifierTypes() { List result = new ArrayList(); - for (ServiceReference reference : deviceIdentifierStringSerializationHandlerTracker - .getServiceReferences()) { + for (ServiceReference reference : + deviceIdentifierStringSerializationHandlerTracker.getServiceReferences()) { result.add((String) reference.getProperty(TypeBasedServiceFinder.TYPE)); } return result; } - + DeviceMapping convertToDeviceMapping(DeviceMappingDTO dto) throws NoCorrespondingServiceRegisteredException, TransformationException { DeviceIdentifier device = deserializeDeviceIdentifier(dto.deviceIdentifier.deviceType, dto.deviceIdentifier.deviceId); TimePoint from = dto.from == null ? null : new MillisecondsTimePoint(dto.from); @@ -4984,20 +4975,21 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S throw new RuntimeException("Can only map devices to competitors or marks"); } } - + @Override - public void closeOpenEndedDeviceMapping(String leaderboardName, String raceColumnName, String fleetName, DeviceMappingDTO mappingDTO, - Date closingTimePoint) throws NoCorrespondingServiceRegisteredException, TransformationException { + public void closeOpenEndedDeviceMapping(String leaderboardName, String raceColumnName, String fleetName, + DeviceMappingDTO mappingDTO, Date closingTimePoint) throws NoCorrespondingServiceRegisteredException, TransformationException { RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName); DeviceMapping mapping = convertToDeviceMapping(mappingDTO); - List closingEvents = new OpenEndedDeviceMappingCloser(raceLog, mapping, getService() - .getServerAuthor(), new MillisecondsTimePoint(closingTimePoint)).analyze(); - + List closingEvents = + new OpenEndedDeviceMappingCloser(raceLog, mapping, getService().getServerAuthor(), + new MillisecondsTimePoint(closingTimePoint)).analyze(); + for (RaceLogEvent event : closingEvents) { - raceLog.add(event); + raceLog.add(event); } } - + @Override public void revokeRaceLogEvents(String leaderboardName, String raceColumnName, String fleetName, List eventIds) throws NotRevokableException { @@ -5011,32 +5003,32 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } } } - + @Override public void startRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName) throws NotDenotedForRaceLogTrackingException, Exception { Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName); Fleet fleet = raceColumn.getFleetByName(fleetName); - + getRaceLogTrackingAdapter().startTracking(getService(), leaderboard, raceColumn, fleet); } - + @Override public Collection getGPSFixImporterTypes() { Set result = new HashSet<>(); Collection> refs = Collections.emptyList(); try { - refs = Activator.getDefault().getServiceReferences(GPSFixImporter.class, null); + refs = Activator.getDefault(). getServiceReferences(GPSFixImporter.class, null); } catch (InvalidSyntaxException e) { - // shouldn't happen, as we are passing null for the filter + //shouldn't happen, as we are passing null for the filter } for (ServiceReference ref : refs) { result.add((String) ref.getProperty(TypeBasedServiceFinder.TYPE)); } return result; } - + @Override public List getTrackFileImportDeviceIds(List uuids) throws NoCorrespondingServiceRegisteredException, TransformationException { @@ -5048,7 +5040,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S TimeRange timeRange = getService().getGPSFixStore().getTimeRangeCoveredByFixes(device); Date from = timeRange == null ? null : timeRange.from().asDate(); Date to = timeRange == null ? null : timeRange.to().asDate(); - result.add(new TrackFileImportDeviceIdentifierDTO(uuidAsString, device.getFileName(), device.getTrackName(), numFixes, from, to)); + result.add(new TrackFileImportDeviceIdentifierDTO(uuidAsString, device.getFileName(), device.getTrackName(), + numFixes, from, to)); } return result; } @@ -5088,23 +5081,23 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return new LeaderboardSearchResultDTO(baseURL.toString(), isOnRemoteServer, leaderboardSearchResult.getLeaderboard().getName(), leaderboardSearchResult.getLeaderboard().getDisplayName(), leaderboardSearchResult.getRegattaName(), - leaderboardSearchResult.getBoatClassName(), convertToEventDTO(leaderboardSearchResult.getEvent()), leaderboardGroups); + leaderboardSearchResult.getBoatClassName(), convertToEventDTO(leaderboardSearchResult.getEvent()), + leaderboardGroups); } @Override public RaceDTO setStartTimeReceivedForRace(RaceIdentifier raceIdentifier, Date newStartTimeReceived) { if (newStartTimeReceived != null) { - RegattaNameAndRaceName regattaAndRaceIdentifier = new RegattaNameAndRaceName(raceIdentifier.getRegattaName(), - raceIdentifier.getRaceName()); + RegattaNameAndRaceName regattaAndRaceIdentifier = new RegattaNameAndRaceName( + raceIdentifier.getRegattaName(), raceIdentifier.getRaceName()); DynamicTrackedRace trackedRace = getService().getTrackedRace(regattaAndRaceIdentifier); trackedRace.setStartTimeReceived(new MillisecondsTimePoint(newStartTimeReceived)); - + return baseDomainFactory.createRaceDTO(getService(), false, regattaAndRaceIdentifier, trackedRace); } return null; - } - + @Override public Map getCompetitorRaceLogMarkPassingData(String leaderboardName, RaceColumnDTO raceColumnDTO, FleetDTO fleet, CompetitorDTO competitor) { @@ -5151,7 +5144,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S new MillisecondsTimePoint(dateOfMarkPassing), indexOfWaypoint)); } } - + @Override public void updateSuppressedMarkPassings(String leaderboardName, RaceColumnDTO raceColumnDTO, FleetDTO fleet, Integer newZeroBasedIndexOfSuppressedMarkPassing, CompetitorDTO competitorDTO) { @@ -5216,5 +5209,4 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } return result; } - }