diff --git a/java/com.sap.sailing.domain.shared.android/META-INF/MANIFEST.MF b/java/com.sap.sailing.domain.shared.android/META-INF/MANIFEST.MF index 79b133999a3..3794c5a2077 100644 --- a/java/com.sap.sailing.domain.shared.android/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.domain.shared.android/META-INF/MANIFEST.MF @@ -8,7 +8,7 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Require-Bundle: com.sap.sailing.domain.common, com.sap.sse.common, com.sap.sse.shared.android, - com.sap.sse.datamining.annotations;bundle-version="1.0.0" + com.sap.sse.datamining.annotations Export-Package: com.sap.sailing.domain.abstractlog, com.sap.sailing.domain.abstractlog.impl, com.sap.sailing.domain.abstractlog.race, diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TrackBasedTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TrackBasedTest.java index 8f6d3b1d2c6..19a0138cafe 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TrackBasedTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TrackBasedTest.java @@ -2,34 +2,46 @@ package com.sap.sailing.domain.test; import static org.mockito.Mockito.mock; +import java.io.Serializable; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.UUID; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver; +import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.ControlPoint; import com.sap.sailing.domain.base.Course; +import com.sap.sailing.domain.base.CourseArea; import com.sap.sailing.domain.base.DomainFactory; +import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.Mark; +import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.RaceDefinition; import com.sap.sailing.domain.base.Regatta; +import com.sap.sailing.domain.base.Series; import com.sap.sailing.domain.base.Sideline; import com.sap.sailing.domain.base.Waypoint; import com.sap.sailing.domain.base.impl.BoatClassImpl; import com.sap.sailing.domain.base.impl.BoatImpl; import com.sap.sailing.domain.base.impl.CompetitorImpl; import com.sap.sailing.domain.base.impl.ControlPointWithTwoMarksImpl; +import com.sap.sailing.domain.base.impl.CourseAreaImpl; import com.sap.sailing.domain.base.impl.CourseImpl; +import com.sap.sailing.domain.base.impl.FleetImpl; import com.sap.sailing.domain.base.impl.MarkImpl; import com.sap.sailing.domain.base.impl.NationalityImpl; import com.sap.sailing.domain.base.impl.PersonImpl; import com.sap.sailing.domain.base.impl.RaceDefinitionImpl; import com.sap.sailing.domain.base.impl.RegattaImpl; +import com.sap.sailing.domain.base.impl.SeriesImpl; import com.sap.sailing.domain.base.impl.TeamImpl; import com.sap.sailing.domain.base.impl.WaypointImpl; +import com.sap.sailing.domain.common.BoatClassMasterdata; +import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.ScoringSchemeType; import com.sap.sailing.domain.common.WindSourceType; import com.sap.sailing.domain.common.impl.DegreeBearingImpl; @@ -38,23 +50,30 @@ import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl; import com.sap.sailing.domain.common.impl.WindImpl; import com.sap.sailing.domain.common.impl.WindSourceImpl; import com.sap.sailing.domain.common.tracking.impl.GPSFixImpl; +import com.sap.sailing.domain.leaderboard.RegattaLeaderboard; +import com.sap.sailing.domain.leaderboard.ScoringScheme; +import com.sap.sailing.domain.leaderboard.impl.LowPoint; import com.sap.sailing.domain.racelog.impl.EmptyRaceLogStore; import com.sap.sailing.domain.racelog.tracking.EmptyGPSFixStore; import com.sap.sailing.domain.ranking.OneDesignRankingMetric; import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore; import com.sap.sailing.domain.tracking.MarkPassing; import com.sap.sailing.domain.tracking.TrackedRegatta; +import com.sap.sailing.domain.tracking.TrackedRegattaRegistry; import com.sap.sailing.domain.tracking.impl.DynamicTrackedRaceImpl; import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl; import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.domain.tracking.impl.MarkPassingImpl; import com.sap.sse.common.Color; import com.sap.sse.common.TimePoint; +import com.sap.sse.common.impl.MillisecondsDurationImpl; import com.sap.sse.common.impl.MillisecondsTimePoint; public abstract class TrackBasedTest { private DynamicTrackedRaceImpl trackedRace; + final static Fleet regattaFleet = new FleetImpl("fleet name"); + protected DynamicTrackedRaceImpl getTrackedRace() { return trackedRace; } @@ -140,4 +159,27 @@ public abstract class TrackBasedTest { return trackedRace; } + public static RegattaImpl createTestRegatta(String regattaName, Iterable raceColumnNames) { + final BoatClass boatClass = new BoatClassImpl("boat class name", BoatClassMasterdata._12M); + final TimePoint startDate = MillisecondsTimePoint.now(); + final TimePoint endDate = startDate.plus(MillisecondsDurationImpl.ONE_DAY); + final boolean isMedal = false; + final boolean persistent = false; + final ScoringScheme scoringScheme = new LowPoint(); + final CourseArea courseArea = new CourseAreaImpl("Course Area", UUID.randomUUID()); + final Serializable regatteId = "regatta id"; + + Iterable regattaFleets = Collections.singleton(regattaFleet); + TrackedRegattaRegistry trackedRegattaRegistry = mock(TrackedRegattaRegistry.class); + Series series = new SeriesImpl("series name", isMedal, /* isFleetsCanRunInParallel */ true, regattaFleets, raceColumnNames, trackedRegattaRegistry); + Iterable regattaSeries = Collections.singleton(series); + return new RegattaImpl(regattaName, boatClass, startDate, endDate, regattaSeries, persistent, scoringScheme, regatteId , courseArea, OneDesignRankingMetric::new); + } + + public static void assignRacesToRegattaLeaderboardColumns(RegattaLeaderboard leaderboard, Collection raceIdentifiers) { + Iterator regattaRacesIterator = raceIdentifiers.iterator(); + for (RaceColumn raceColumn : leaderboard.getRaceColumns()) { + raceColumn.setRaceIdentifier(regattaFleet, regattaRacesIterator.next()); + } + } } diff --git a/java/com.sap.sailing.gwt.ui/SailingGWT sdm.launch b/java/com.sap.sailing.gwt.ui/SailingGWT sdm.launch index 01f086d2cd1..82f8aab22d4 100644 --- a/java/com.sap.sailing.gwt.ui/SailingGWT sdm.launch +++ b/java/com.sap.sailing.gwt.ui/SailingGWT sdm.launch @@ -1,78 +1,78 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.gwt.ui/SailingGWT.launch b/java/com.sap.sailing.gwt.ui/SailingGWT.launch index a533c08e61c..6adb642328e 100644 --- a/java/com.sap.sailing.gwt.ui/SailingGWT.launch +++ b/java/com.sap.sailing.gwt.ui/SailingGWT.launch @@ -1,75 +1,75 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetRegattaListViewAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetRegattaListViewAction.java index 9c3d95c921b..988f09cf788 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetRegattaListViewAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetRegattaListViewAction.java @@ -38,6 +38,8 @@ public class GetRegattaListViewAction implements SailingAction(EventActionUtil.getEventStateDependentTTL(context, eventId, Duration.ONE_MINUTE.times(3)), new SortedSetResult<>(result)); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/RegattaReferenceDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/RegattaReferenceDTO.java index 350bdd6da82..d2646012607 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/RegattaReferenceDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/RegattaReferenceDTO.java @@ -32,7 +32,7 @@ public class RegattaReferenceDTO implements DTO, Comparable @Override public int compareTo(RegattaReferenceDTO o) { int compareByDisplayName = displayName.compareTo(o.displayName); - if(compareByDisplayName != 0) { + if (compareByDisplayName != 0) { return compareByDisplayName; } return id.compareTo(o.id); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/regatta/RegattaWithProgressDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/regatta/RegattaWithProgressDTO.java index 5fdcbe5d5df..af13ddf7f8c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/regatta/RegattaWithProgressDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/regatta/RegattaWithProgressDTO.java @@ -24,7 +24,7 @@ public class RegattaWithProgressDTO extends RegattaMetadataDTO { @Override public int compareTo(RegattaReferenceDTO o) { - if(o instanceof RegattaWithProgressDTO) { + if (o instanceof RegattaWithProgressDTO) { RegattaWithProgressDTO other = (RegattaWithProgressDTO) o; RegattaState state = getState(); RegattaState otherState = other.getState(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/multiregattalist/MultiRegattaList.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/multiregattalist/MultiRegattaList.java index 2fdb6c082f4..841ebea8dc3 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/multiregattalist/MultiRegattaList.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/multiregattalist/MultiRegattaList.java @@ -51,7 +51,7 @@ public class MultiRegattaList extends Composite implements RefreshableWidget assignedRaces = new HashSet(); + String regattaName1 = "49er"; + String regattaName2 = "49er FX"; + String missingRegattaName = "Missing Regatta"; + String raceName1 = "R1"; + String raceName2 = "R2"; + String raceName3 = "R3"; + String raceName4 = "R4"; + String raceName5 = "R5"; + String missingRaceName = "Missing Race"; + assignedRaces.add(new RegattaNameAndRaceName(regattaName1, raceName1)); + assignedRaces.add(new RegattaNameAndRaceName(regattaName1, raceName2)); + assignedRaces.add(new RegattaNameAndRaceName(regattaName1, raceName3)); + assignedRaces.add(new RegattaNameAndRaceName(regattaName2, raceName4)); + assignedRaces.add(new RegattaNameAndRaceName(regattaName2, raceName5)); + assignedRaces.add(new RegattaNameAndRaceName(missingRegattaName, missingRaceName)); + MediaTrack trackOnSource = new MediaTrack("testTitle", "http://test/test.mp4", new MillisecondsTimePoint(0), + MillisecondsDurationImpl.ONE_HOUR, MimeType.mp4, assignedRaces); + sourceService.mediaTrackAdded(trackOnSource); + + Collection raceColumnNames = Arrays.asList(raceName1, raceName2, raceName3, raceName4, raceName5); + Regatta regatta = TrackBasedTest.createTestRegatta(regattaName1, raceColumnNames); + sourceService.addRegattaWithoutReplication(regatta); + int[] discardThresholds = new int[0]; + RegattaLeaderboard leaderboard = sourceService.addRegattaLeaderboard(regatta.getRegattaIdentifier(), + "leaderboard display name", discardThresholds); + Collection raceIdentifiers = Arrays.asList(new RegattaNameAndRaceName(regattaName1, raceName1), + new RegattaNameAndRaceName(regattaName1, raceName2), + new RegattaNameAndRaceName(regattaName1, raceName3), + new RegattaNameAndRaceName(regattaName2, raceName4), + new RegattaNameAndRaceName(regattaName2, raceName5)); + TrackBasedTest.assignRacesToRegattaLeaderboardColumns(leaderboard, raceIdentifiers); + boolean displayGroupsInReverseOrder = false; + int[] overallLeaderboardDiscardThresholds = new int[0]; + UUID leaderboardGropuUuid = UUID.randomUUID(); + LeaderboardGroup leaderboardGroup = sourceService.addLeaderboardGroup(leaderboardGropuUuid, + "leaderboard group name", "leaderboard group description", "leaderboard group display name", + displayGroupsInReverseOrder, Collections.singletonList(leaderboard.getName()), + overallLeaderboardDiscardThresholds, ScoringSchemeType.LOW_POINT); + + // Serialize + List groupNamesToExport = Collections.singletonList(leaderboardGroup.getName()); + + final DomainFactory domainFactory; + MasterDataResource resource = new MasterDataResource(); + MasterDataResource spyResource = spyResource(resource, sourceService); + Response response = spyResource.getMasterDataByLeaderboardGroups(groupNamesToExport, false, true, false); + StreamingOutput streamingOutput = (StreamingOutput) response.getEntity(); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + UUID randomUUID = UUID.randomUUID(); + ByteArrayInputStream inputStream = null; + try { + streamingOutput.write(os); + os.flush(); + // Delete all data above from the database, to allow recreating all of it on target server + deleteAllDataFromDatabase(); + // Import in new service + domainFactory = master.getBaseDomainFactory(); + // ensure that this class's class loader and with it the dependency to com.sap.sailing.domain.test + // is known during de-serialization because anonymous inner classes from that bundle may be used + // in the object graph, e.g., for RankingMetricConstructor objects based on locally-instantiated lambda + // expressions + master.addMasterDataClassLoader(this.getClass().getClassLoader()); + inputStream = new ByteArrayInputStream(os.toByteArray()); + MasterDataImporter importer = new MasterDataImporter(domainFactory, master); + importer.importFromStream(inputStream, randomUUID, false); + } finally { + os.close(); + inputStream.close(); + } + + // ---Asserts--- + final Iterable targetTracksMaster = master.getAllMediaTracks(); + compareTracks(trackOnSource, targetTracksMaster); + waitSomeTime(); + final Iterable targetTracksReplica = replica.getAllMediaTracks(); + compareTracks(trackOnSource, targetTracksReplica); + } + + private void compareTracks(MediaTrack trackOnSource, Iterable targetTracksMaster) { + Assert.assertEquals(1, Util.size(targetTracksMaster)); + MediaTrack trackOnTarget = targetTracksMaster.iterator().next(); + Assert.assertEquals(trackOnSource.dbId, trackOnTarget.dbId); + Assert.assertEquals(trackOnSource.url, trackOnTarget.url); + Assert.assertEquals(trackOnSource.assignedRaces, trackOnTarget.assignedRaces); + } + + private T spyResource(T resource, RacingEventService service) { + T spyResource = spy(resource); + doReturn(service).when(spyResource).getService(); + return spyResource; + } + + private void deleteAllDataFromDatabase() { + MongoDBService service = MongoDBConfiguration.getDefaultTestConfiguration().getService(); + service.getDB().getWriteConcern().fsync(); + service.getDB().dropDatabase(); + } + } diff --git a/java/com.sap.sailing.server.test/META-INF/MANIFEST.MF b/java/com.sap.sailing.server.test/META-INF/MANIFEST.MF index f442ef22283..dd44553ef6c 100644 --- a/java/com.sap.sailing.server.test/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.server.test/META-INF/MANIFEST.MF @@ -21,9 +21,9 @@ Require-Bundle: com.sap.sailing.domain, com.sap.sse.common, org.eclipse.jetty.server;bundle-version="9.2.2", com.sap.sailing.domain.shared.android, - com.sap.sailing.domain.racelogtrackingadapter.testsupport + com.sap.sailing.domain.racelogtrackingadapter.testsupport, + com.sap.sailing.server.testsupport Import-Package: com.sap.sailing.server.gateway.jaxrs, com.sap.sailing.server.gateway.jaxrs.spi, org.json.simple, javax.ws.rs.core;version="1.1.1" -Export-Package: com.sap.sailing.server.impl diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/impl/MediaMasterDataExportTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/impl/MediaMasterDataExportTest.java index bf6f4c88ca5..1a6fc8632c4 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/impl/MediaMasterDataExportTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/impl/MediaMasterDataExportTest.java @@ -3,13 +3,11 @@ package com.sap.sailing.server.impl; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; -import java.io.Serializable; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -17,19 +15,12 @@ import java.util.UUID; import org.junit.Test; -import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.CourseArea; import com.sap.sailing.domain.base.Event; import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.Regatta; -import com.sap.sailing.domain.base.Series; -import com.sap.sailing.domain.base.impl.BoatClassImpl; import com.sap.sailing.domain.base.impl.CourseAreaImpl; -import com.sap.sailing.domain.base.impl.FleetImpl; -import com.sap.sailing.domain.base.impl.RegattaImpl; -import com.sap.sailing.domain.base.impl.SeriesImpl; -import com.sap.sailing.domain.common.BoatClassMasterdata; import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.RegattaNameAndRaceName; @@ -47,12 +38,9 @@ import com.sap.sailing.domain.leaderboard.impl.RegattaLeaderboardImpl; import com.sap.sailing.domain.leaderboard.impl.ThresholdBasedResultDiscardingRuleImpl; import com.sap.sailing.domain.masterdataimport.TopLevelMasterData; import com.sap.sailing.domain.racelog.tracking.GPSFixStore; -import com.sap.sailing.domain.ranking.OneDesignRankingMetric; -import com.sap.sailing.domain.tracking.TrackedRegattaRegistry; +import com.sap.sailing.domain.test.TrackBasedTest; import com.sap.sse.common.Duration; import com.sap.sse.common.TimePoint; -import com.sap.sse.common.impl.MillisecondsDurationImpl; -import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.common.media.MimeType; public class MediaMasterDataExportTest { @@ -66,17 +54,11 @@ public class MediaMasterDataExportTest { static final String missingRace2 = "missing race 2"; static final String missingRace3 = "missing race 3"; - static final boolean displayGroupsInReverseOrder = true; - static final ThresholdBasedResultDiscardingRule resultDiscardingRule = new ThresholdBasedResultDiscardingRuleImpl(new int[0]); - static final BoatClass boatClass = new BoatClassImpl("boat class name", BoatClassMasterdata._12M); - static final TimePoint startDate = MillisecondsTimePoint.now(); - static final TimePoint endDate = startDate.plus(MillisecondsDurationImpl.ONE_DAY); - static final boolean isMedal = false; - static final Fleet regattaFleet = new FleetImpl("fleet name"); - static final boolean persistent = false; - static final ScoringScheme scoringScheme = new LowPoint(); - static final CourseArea courseArea = new CourseAreaImpl("Course Area", UUID.randomUUID()); - static final Serializable regatteId = "regatta id"; + private static final boolean displayGroupsInReverseOrder = true; + private static final ThresholdBasedResultDiscardingRule resultDiscardingRule = new ThresholdBasedResultDiscardingRuleImpl(new int[0]); + private static final boolean isMedal = false; + private static final ScoringScheme scoringScheme = new LowPoint(); + private static final CourseArea courseArea = new CourseAreaImpl("Course Area", UUID.randomUUID()); @Test public void testTrackWithAssignedRaceButEmptyLeaderboardGroup() { @@ -147,9 +129,9 @@ public class MediaMasterDataExportTest { for (RaceIdentifier regattaAndRaceIdentifier : regattaRaces) { raceColumnNames.add(regattaAndRaceIdentifier.getRaceName()); } - Regatta regatta = createTestRegatta("regatta name", raceColumnNames); + Regatta regatta = TrackBasedTest.createTestRegatta("regatta name", raceColumnNames); RegattaLeaderboard regattaLeaderboard = new RegattaLeaderboardImpl(regatta, resultDiscardingRule); - assignRacesToRegattaLeaderboardColumns(regattaLeaderboard, regattaRaces); + TrackBasedTest.assignRacesToRegattaLeaderboardColumns(regattaLeaderboard, regattaRaces); FlexibleLeaderboard flexibleLeaderboard = new FlexibleLeaderboardImpl("flexible leaderboard", resultDiscardingRule, scoringScheme , courseArea); for (RaceIdentifier regattaAndRaceIdentifier : flexibleRaces) { @@ -169,22 +151,4 @@ public class MediaMasterDataExportTest { TopLevelMasterData topLevelMasterData = new TopLevelMasterData(groupsToExport , allEvents , regattaForRaceIdString, allMediaTracks , gpsFixStore , exportWind, new HashMap<>()); return topLevelMasterData; } - - public static void assignRacesToRegattaLeaderboardColumns(RegattaLeaderboard leaderboard, Collection raceIdentifiers) { - Iterator regattaRacesIterator = raceIdentifiers.iterator(); - for (RaceColumn raceColumn : leaderboard.getRaceColumns()) { - raceColumn.setRaceIdentifier(regattaFleet, regattaRacesIterator.next()); - } - } - - public static RegattaImpl createTestRegatta(String regattaName, Iterable raceColumnNames) { - Iterable regattaFleets = Collections.singleton(regattaFleet); - TrackedRegattaRegistry trackedRegattaRegistry = mock(TrackedRegattaRegistry.class); - Series series = new SeriesImpl("series name", isMedal, /* isFleetsCanRunInParallel */ true, regattaFleets, raceColumnNames, trackedRegattaRegistry); - Iterable regattaSeries = Collections.singleton(series); - return new RegattaImpl(regattaName, boatClass, startDate, endDate, regattaSeries, persistent, scoringScheme, regatteId , courseArea, OneDesignRankingMetric::new); - } - - - } diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java index 89838f6c62e..d2ba30f80e9 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java @@ -112,6 +112,7 @@ import com.sap.sailing.domain.racelog.tracking.test.mock.MockSmartphoneImeiServi import com.sap.sailing.domain.racelog.tracking.test.mock.SmartphoneImeiIdentifier; import com.sap.sailing.domain.racelogtracking.DeviceIdentifier; import com.sap.sailing.domain.ranking.OneDesignRankingMetric; +import com.sap.sailing.domain.test.TrackBasedTest; import com.sap.sailing.domain.tracking.DynamicTrackedRegatta; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.WindTrack; @@ -119,10 +120,10 @@ import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.server.RacingEventService; import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource; import com.sap.sailing.server.gateway.jaxrs.spi.MasterDataResource; -import com.sap.sailing.server.impl.MediaMasterDataExportTest; import com.sap.sailing.server.impl.RacingEventServiceImpl; import com.sap.sailing.server.masterdata.DummyTrackedRace; import com.sap.sailing.server.masterdata.MasterDataImporter; +import com.sap.sailing.server.testsupport.RacingEventServiceImplMock; import com.sap.sse.common.Color; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; @@ -325,7 +326,7 @@ public class MasterDataImportTest { // Delete all data above from the database, to allow recreating all of it on target server deleteAllDataFromDatabase(); // Import in new service - destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID), serviceFinderFactory); + destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID), serviceFinderFactory){}; domainFactory = destService.getBaseDomainFactory(); DB db = destService.getMongoObjectFactory().getDatabase(); db.setWriteConcern(WriteConcern.SAFE); @@ -429,7 +430,7 @@ public class MasterDataImportTest { Assert.assertTrue(destService.getGPSFixStore().getNumberOfFixes(deviceIdentifier) == 1); // Check for persisting of race log events: - RacingEventService dest2 = new RacingEventServiceImplMock(); + RacingEventService dest2 = new RacingEventServiceImplMock(){}; Leaderboard lb2 = dest2.getLeaderboardByName(TEST_LEADERBOARD_NAME); RaceColumn raceColumn2 = lb2.getRaceColumns().iterator().next(); RaceLog raceLog2 = raceColumn2.getRaceLog(raceColumn2.getFleetByName(fleet1OnTarget.getName())); @@ -546,7 +547,7 @@ public class MasterDataImportTest { // Delete all data above from the database, to allow recreating all of it on target server deleteAllDataFromDatabase(); // Import in new service - destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)); + destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){}; domainFactory = destService.getBaseDomainFactory(); inputStream = new ByteArrayInputStream(os.toByteArray()); @@ -693,7 +694,7 @@ public class MasterDataImportTest { // Delete all data above from the database, to allow recreating all of it on target server deleteAllDataFromDatabase(); // Import in new service - destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)); + destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){}; domainFactory = destService.getBaseDomainFactory(); inputStream = new ByteArrayInputStream(os.toByteArray()); @@ -876,7 +877,7 @@ public class MasterDataImportTest { // Delete all data above from the database, to allow recreating all of it on target server deleteAllDataFromDatabase(); // Import in new service - destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)); + destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){}; domainFactory = destService.getBaseDomainFactory(); inputStream = new ByteArrayInputStream(os.toByteArray()); @@ -1046,7 +1047,7 @@ public class MasterDataImportTest { // Delete all data above from the database, to allow recreating all of it on target server deleteAllDataFromDatabase(); // Import in new service - destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)); + destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){}; domainFactory = destService.getBaseDomainFactory(); // Create existing data on target venueNameNotToOverride = "doNotOverride"; @@ -1244,7 +1245,7 @@ public class MasterDataImportTest { // Delete all data above from the database, to allow recreating all of it on target server deleteAllDataFromDatabase(); // Import in new service - destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)); + destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){}; domainFactory = destService.getBaseDomainFactory(); // Create existing data on target String venueNameToOverride = "Override"; @@ -1409,7 +1410,7 @@ public class MasterDataImportTest { // Delete all data above from the database, to allow recreating all of it on target server deleteAllDataFromDatabase(); // Import in new service - destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)); + destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){}; domainFactory = destService.getBaseDomainFactory(); inputStream = new ByteArrayInputStream(os.toByteArray()); @@ -1543,7 +1544,7 @@ public class MasterDataImportTest { // Delete all data above from the database, to allow recreating all of it on target server deleteAllDataFromDatabase(); // Import in new service - destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)); + destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){}; domainFactory = destService.getBaseDomainFactory(); inputStream = new ByteArrayInputStream(os.toByteArray()); @@ -1681,7 +1682,7 @@ public class MasterDataImportTest { // Delete all data above from the database, to allow recreating all of it on target server deleteAllDataFromDatabase(); // Import in new service - destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)); + destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){}; domainFactory = destService.getBaseDomainFactory(); inputStream = new ByteArrayInputStream(os.toByteArray()); @@ -1710,7 +1711,7 @@ public class MasterDataImportTest { Assert.assertEquals(regattaOnTarget, map.get("dummy2")); // Check if persistent regatta for race id has been persisted - RacingEventServiceImplMock destService2 = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)); + RacingEventServiceImplMock destService2 = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){}; ConcurrentHashMap map2 = destService2.getPersistentRegattasForRaceIDs(); Regatta regattaOnTarget2 = destService2.getRegattaByName(TEST_LEADERBOARD_NAME); Assert.assertEquals(regattaOnTarget2, map2.get("dummy")); @@ -1743,7 +1744,7 @@ public class MasterDataImportTest { sourceService.mediaTrackAdded(trackOnSource); Collection raceColumnNames = Arrays.asList(raceName1, raceName2, raceName3, raceName4, raceName5); - Regatta regatta = MediaMasterDataExportTest.createTestRegatta(regattaName1, raceColumnNames); + Regatta regatta = TrackBasedTest.createTestRegatta(regattaName1, raceColumnNames); sourceService.addRegattaWithoutReplication(regatta); int[] discardThresholds = new int[0]; RegattaLeaderboard leaderboard = sourceService.addRegattaLeaderboard(regatta.getRegattaIdentifier(), @@ -1753,7 +1754,7 @@ public class MasterDataImportTest { new RegattaNameAndRaceName(regattaName1, raceName3), new RegattaNameAndRaceName(regattaName2, raceName4), new RegattaNameAndRaceName(regattaName2, raceName5)); - MediaMasterDataExportTest.assignRacesToRegattaLeaderboardColumns(leaderboard, raceIdentifiers); + TrackBasedTest.assignRacesToRegattaLeaderboardColumns(leaderboard, raceIdentifiers); boolean displayGroupsInReverseOrder = false; int[] overallLeaderboardDiscardThresholds = new int[0]; UUID leaderboardGropuUuid = UUID.randomUUID(); @@ -1780,7 +1781,7 @@ public class MasterDataImportTest { // Delete all data above from the database, to allow recreating all of it on target server deleteAllDataFromDatabase(); // Import in new service - destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)); + destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){}; domainFactory = destService.getBaseDomainFactory(); inputStream = new ByteArrayInputStream(os.toByteArray()); @@ -1790,26 +1791,16 @@ public class MasterDataImportTest { os.close(); inputStream.close(); } - - MasterDataImportObjectCreationCount creationCount = destService.getDataImportLock().getProgress(randomUUID) - .getResult(); + MasterDataImportObjectCreationCount creationCount = destService.getDataImportLock().getProgress(randomUUID).getResult(); // ---Asserts--- - Assert.assertNotNull(creationCount); - Iterable targetTracks = destService.getAllMediaTracks(); - Assert.assertEquals(1, Util.size(targetTracks)); - MediaTrack trackOnTarget = targetTracks.iterator().next(); - Assert.assertEquals(trackOnSource.dbId, trackOnTarget.dbId); - Assert.assertEquals(trackOnSource.url, trackOnTarget.url); - Assert.assertEquals(trackOnSource.assignedRaces, trackOnTarget.assignedRaces); - } @Test @@ -1908,7 +1899,7 @@ public class MasterDataImportTest { // Delete all data above from the database, to allow recreating all of it on target server deleteAllDataFromDatabase(); // Import in new service - destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)); + destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){}; domainFactory = destService.getBaseDomainFactory(); inputStream = new ByteArrayInputStream(os.toByteArray()); @@ -1980,7 +1971,7 @@ public class MasterDataImportTest { // Delete all data above from the database, to allow recreating all of it on target server deleteAllDataFromDatabase(); // Import in new service - destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)); + destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){}; domainFactory = destService.getBaseDomainFactory(); inputStream = new ByteArrayInputStream(os.toByteArray()); @@ -2021,7 +2012,7 @@ public class MasterDataImportTest { Assert.assertEquals(factor, metaColumn.getFactor()); // Verify that overall leaderboard data has been persisted - RacingEventService persistenceVerifier = new RacingEventServiceImplMock(); + RacingEventService persistenceVerifier = new RacingEventServiceImplMock(){}; LeaderboardGroup lg = persistenceVerifier.getLeaderboardGroupByName(TEST_GROUP_NAME); Assert.assertNotNull(lg); overallLeaderboard = (LeaderboardGroupMetaLeaderboard) lg.getOverallLeaderboard(); @@ -2167,7 +2158,7 @@ public class MasterDataImportTest { // Delete all data above from the database, to allow recreating all of it on target server deleteAllDataFromDatabase(); // Import in new service - destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)); + destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)){}; domainFactory = destService.getBaseDomainFactory(); inputStream = new ByteArrayInputStream(os.toByteArray()); @@ -2248,7 +2239,7 @@ public class MasterDataImportTest { .getFirstFixAtOrAfter(logTimePoint2)).getWindFix()); // Check for persisting of race log events: - RacingEventService dest2 = new RacingEventServiceImplMock(); + RacingEventService dest2 = new RacingEventServiceImplMock(){}; Leaderboard lb2 = dest2.getLeaderboardByName(flexLeaderboardName); RaceColumn raceColumn2 = lb2.getRaceColumns().iterator().next(); RaceLog raceLog2 = raceColumn2.getRaceLog(raceColumn2.getFleets().iterator().next()); diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceTrackerStartStopTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceTrackerStartStopTest.java index 46b54829df6..1c35cda5751 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceTrackerStartStopTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RaceTrackerStartStopTest.java @@ -42,6 +42,7 @@ import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackedRegatta; import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sailing.server.RacingEventService; +import com.sap.sailing.server.testsupport.RacingEventServiceImplMock; public class RaceTrackerStartStopTest { @@ -66,7 +67,7 @@ public class RaceTrackerStartStopTest { @Before public void setUp() { - racingEventService = new RacingEventServiceImplMock(); + racingEventService = new RacingEventServiceImplMock(){}; boatClass = new BoatClassImpl(BOATCLASSNAME, /* typicallyStartsUpwind */ true); regatta = new RegattaImpl(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE, RegattaImpl.getDefaultName(EVENTNAME, boatClass.getName()), boatClass, /*startDate*/ null, /*endDate*/ null, /* trackedRegattaRegistry */ diff --git a/java/com.sap.sailing.server.testsupport/.classpath b/java/com.sap.sailing.server.testsupport/.classpath new file mode 100644 index 00000000000..b862a296d38 --- /dev/null +++ b/java/com.sap.sailing.server.testsupport/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/java/com.sap.sailing.server.testsupport/.project b/java/com.sap.sailing.server.testsupport/.project new file mode 100644 index 00000000000..b082705427c --- /dev/null +++ b/java/com.sap.sailing.server.testsupport/.project @@ -0,0 +1,28 @@ + + + com.sap.sailing.server.testsupport + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/java/com.sap.sailing.server.testsupport/.settings/org.eclipse.jdt.core.prefs b/java/com.sap.sailing.server.testsupport/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000000..295926d9641 --- /dev/null +++ b/java/com.sap.sailing.server.testsupport/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/java/com.sap.sailing.server.testsupport/.settings/org.eclipse.pde.core.prefs b/java/com.sap.sailing.server.testsupport/.settings/org.eclipse.pde.core.prefs new file mode 100644 index 00000000000..b7e72d019c2 --- /dev/null +++ b/java/com.sap.sailing.server.testsupport/.settings/org.eclipse.pde.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +pluginProject.extensions=false +resolve.requirebundle=false diff --git a/java/com.sap.sailing.server.testsupport/META-INF/MANIFEST.MF b/java/com.sap.sailing.server.testsupport/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..94aec2a2ec1 --- /dev/null +++ b/java/com.sap.sailing.server.testsupport/META-INF/MANIFEST.MF @@ -0,0 +1,37 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Testsupport +Bundle-SymbolicName: com.sap.sailing.server.testsupport +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Export-Package: com.sap.sailing.server.testsupport +Require-Bundle: com.sap.sailing.server, + com.sap.sailing.domain.common, + com.sap.sse.common, + com.sap.sailing.domain, + com.sap.sse, + com.sap.sse.replication, + com.sap.sse.filestorage, + com.sap.sailing.domain.persistence, + com.sap.sailing.expeditionconnector, + com.sap.sailing.declination, + com.sap.sse.mongodb, + org.mongodb.mongo-java-driver;bundle-version="2.13.0", + com.sap.sailing.domain.persistence, + com.sap.sailing.domain.common, + com.sap.sailing.udpconnector, + com.sap.sailing.domain.shared.android, + com.sap.sailing.server.gateway.serialization, + com.sap.sse.common, + com.sap.sse.operationaltransformation, + com.sap.sse.replication, + com.sap.sse, + com.sap.sailing.server.gateway.serialization.shared.android, + com.sap.sse.shared.android, + com.sap.sse.filestorage, + com.sap.sailing.simulator, + com.sap.sse.security, + org.apache.shiro.web;bundle-version="1.2.2", + org.apache.shiro.core;bundle-version="1.2.2", + javax.servlet;bundle-version="3.1.0" diff --git a/java/com.sap.sailing.server.testsupport/build.properties b/java/com.sap.sailing.server.testsupport/build.properties new file mode 100644 index 00000000000..41eb6ade2b4 --- /dev/null +++ b/java/com.sap.sailing.server.testsupport/build.properties @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/java/com.sap.sailing.server.testsupport/pom.xml b/java/com.sap.sailing.server.testsupport/pom.xml new file mode 100644 index 00000000000..dae01747cad --- /dev/null +++ b/java/com.sap.sailing.server.testsupport/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + root + com.sap.sailing + 1.0.0-SNAPSHOT + + com.sap.sailing.server.testsupport + eclipse-plugin + diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RacingEventServiceImplMock.java b/java/com.sap.sailing.server.testsupport/src/com/sap/sailing/server/testsupport/RacingEventServiceImplMock.java similarity index 76% rename from java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RacingEventServiceImplMock.java rename to java/com.sap.sailing.server.testsupport/src/com/sap/sailing/server/testsupport/RacingEventServiceImplMock.java index 7e4f55db6f6..479b0e6c5de 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/RacingEventServiceImplMock.java +++ b/java/com.sap.sailing.server.testsupport/src/com/sap/sailing/server/testsupport/RacingEventServiceImplMock.java @@ -1,4 +1,4 @@ -package com.sap.sailing.server.test; +package com.sap.sailing.server.testsupport; import java.util.Map; import java.util.Set; @@ -10,7 +10,15 @@ import com.sap.sailing.server.impl.RacingEventServiceImpl; import com.sap.sailing.server.masterdata.DataImportLockWithProgress; import com.sap.sse.common.TypeBasedServiceFinderFactory; -public class RacingEventServiceImplMock extends RacingEventServiceImpl { +/** + * Use an empty anonymous inner subclass for instantiation to ensure that you'll have the right classpath for + * your bundle in order to carry out de-serializations in the correct context. Example: + * {@code new RacingEventServiceImplMock(){}}. + * + * @author Axel Uhl (d043530) + * + */ +public abstract class RacingEventServiceImplMock extends RacingEventServiceImpl { private DataImportLockWithProgress lock; diff --git a/java/com.sap.sailing.server/META-INF/MANIFEST.MF b/java/com.sap.sailing.server/META-INF/MANIFEST.MF index 914c2f075c0..ca1e4920472 100644 --- a/java/com.sap.sailing.server/META-INF/MANIFEST.MF +++ b/java/com.sap.sailing.server/META-INF/MANIFEST.MF @@ -43,7 +43,8 @@ Export-Package: com.sap.sailing.server, com.sap.sailing.domain.swisstimingadapter.test, com.sap.sailing.gwt.ui.test, com.sap.sailing.server.replication.test, - com.sap.sailing.domain.racelogtrackingadapter.test", + com.sap.sailing.domain.racelogtrackingadapter.test, + com.sap.sailing.server.testsupport", com.sap.sailing.server.masterdata, com.sap.sailing.server.operationaltransformation, com.sap.sailing.server.operationaltransformation.racelog, diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/masterdata/MasterDataImporter.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/masterdata/MasterDataImporter.java index c52613e5058..b210dce3d2b 100644 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/masterdata/MasterDataImporter.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/masterdata/MasterDataImporter.java @@ -38,36 +38,29 @@ public class MasterDataImporter { .createObjectInputStreamResolvingAgainstThisFactory(inputStream); racingEventService.createOrUpdateDataImportProgressWithReplication(importOperationId, 0.03, DataImportSubProgress.TRANSFER_STARTED, 0.5); - RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore( racingEventService.getMongoObjectFactory(), racingEventService.getDomainObjectFactory()); RegattaImpl.setOngoingMasterDataImport(new MasterDataImportInformation(raceLogStore)); ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(racingEventService.getCombinedMasterDataClassLoader()); - @SuppressWarnings("unchecked") final List competitorIds = (List) objectInputStream.readObject(); - if (override) { setAllowCompetitorsDataToBeReset(competitorIds); } // Deserialize Regattas to make sure that Regattas are deserialized before Series objectInputStream.readObject(); TopLevelMasterData topLevelMasterData = (TopLevelMasterData) objectInputStream.readObject(); - RegattaImpl.setOngoingMasterDataImport(null); Thread.currentThread().setContextClassLoader(oldContextClassLoader); - // in order to restore all listeners we need to initialize the regatta // after the whole object graph has been restored for (Regatta regatta : topLevelMasterData.getAllRegattas()) { RegattaImpl regattaImpl = (RegattaImpl)regatta; regattaImpl.initializeSeriesAfterDeserialize(); } - racingEventService.createOrUpdateDataImportProgressWithReplication(importOperationId, 0.3, DataImportSubProgress.TRANSFER_COMPLETED, 0.5); - applyMasterDataImportOperation(topLevelMasterData, importOperationId, override); } @@ -84,10 +77,8 @@ public class MasterDataImporter { private MasterDataImportObjectCreationCount applyMasterDataImportOperation(TopLevelMasterData topLevelMasterData, UUID importOperationId, boolean override) { MasterDataImportObjectCreationCountImpl creationCount = new MasterDataImportObjectCreationCountImpl(); - ImportMasterDataOperation op = new ImportMasterDataOperation(topLevelMasterData, importOperationId, override, - creationCount); + ImportMasterDataOperation op = new ImportMasterDataOperation(topLevelMasterData, importOperationId, override, creationCount); creationCount = racingEventService.apply(op); - racingEventService.mediaTracksImported(topLevelMasterData.getFilteredMediaTracks(), override); return creationCount; } diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/ImportMasterDataOperation.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/ImportMasterDataOperation.java index c5d84f5697d..88bca237bae 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/ImportMasterDataOperation.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/ImportMasterDataOperation.java @@ -129,6 +129,7 @@ public class ImportMasterDataOperation extends importDeviceConfigurations(toState); } dataImportLock.getProgress(importOperationId).setResult(creationCount); + toState.mediaTracksImported(masterData.getFilteredMediaTracks(), override); return creationCount; } catch (Exception e) { logger.severe("Error during execution of ImportMasterDataOperation"); diff --git a/java/pom.xml b/java/pom.xml index c6824ecbfa3..861856c858a 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -134,6 +134,7 @@ com.sap.sailing.gwt.ui com.sap.sailing.domain.test com.sap.sse.replication.testsupport + com.sap.sailing.server.testsupport com.sap.sse.gwt.test