Merge branch 'master' into ubilabs--rcapp--bug-3694

This commit is contained in:
Axel Uhl
2016-06-15 09:53:21 +02:00
27 changed files with 488 additions and 251 deletions
@@ -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,
@@ -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<String> 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<? extends Fleet> regattaFleets = Collections.singleton(regattaFleet);
TrackedRegattaRegistry trackedRegattaRegistry = mock(TrackedRegattaRegistry.class);
Series series = new SeriesImpl("series name", isMedal, /* isFleetsCanRunInParallel */ true, regattaFleets, raceColumnNames, trackedRegattaRegistry);
Iterable<? extends Series> 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<RaceIdentifier> raceIdentifiers) {
Iterator<RaceIdentifier> regattaRacesIterator = raceIdentifiers.iterator();
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
raceColumn.setRaceIdentifier(regattaFleet, regattaRacesIterator.next());
}
}
}
@@ -72,7 +72,7 @@
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-superDevMode -incremental -workDir &quot;${project_loc:com.sap.sailing.gwt.ui}/.tmp/gwt-work&quot; -war &quot;${project_loc:com.sap.sailing.gwt.ui}&quot; -noserver -remoteUI &quot;${gwt_remote_ui_server_port}:${unique_id}&quot; -logLevel INFO -codeServerPort 9876 -startupUrl /gwt/Home.html com.sap.sailing.gwt.home.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/EmbeddedMapAndWindChart com.sap.sailing.gwt.ui.EmbeddedMapAndWindChart -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.regattaoverview.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup -startupUrl /gwt/AutoPlay.html com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.home.Home com.sap.sailing.gwt.ui.AdminConsole com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.ui.YoutubePopup com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.Leaderboard com.sap.sailing.gwt.regattaoverview.RegattaOverview com.sap.sailing.gwt.ui.Spectator com.sap.sailing.gwt.ui.LeaderboardEditing com.sap.sailing.gwt.ui.DataMining com.sap.sailing.gwt.ui.RaceBoard com.sap.sailing.gwt.ui.EmbeddedMapAndWindChart"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-incremental -workDir &quot;${project_loc:com.sap.sailing.gwt.ui}/.tmp/gwt-work&quot; -war &quot;${project_loc:com.sap.sailing.gwt.ui}&quot; -noserver -remoteUI &quot;${gwt_remote_ui_server_port}:${unique_id}&quot; -logLevel INFO -codeServerPort 9876 -startupUrl /gwt/Home.html com.sap.sailing.gwt.home.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/EmbeddedMapAndWindChart com.sap.sailing.gwt.ui.EmbeddedMapAndWindChart -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.regattaoverview.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup -startupUrl /gwt/AutoPlay.html com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.home.Home com.sap.sailing.gwt.ui.AdminConsole com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.ui.YoutubePopup com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.Leaderboard com.sap.sailing.gwt.regattaoverview.RegattaOverview com.sap.sailing.gwt.ui.Spectator com.sap.sailing.gwt.ui.LeaderboardEditing com.sap.sailing.gwt.ui.DataMining com.sap.sailing.gwt.ui.RaceBoard com.sap.sailing.gwt.ui.EmbeddedMapAndWindChart"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms1024m -Xmx3072m"/>
</launchConfiguration>
@@ -38,6 +38,8 @@ public class GetRegattaListViewAction implements SailingAction<ResultWithTTL<Sor
result.add(leaderboardContext.getRegattaWithProgress());
}
});
// The following will reduce multiple occurrences of the same regatta, e.g., in different leaderboard groups,
// to one occurrence only, randomly picked, by means of the Comparable property of RegattaWithProgressDTO.
return new ResultWithTTL<>(EventActionUtil.getEventStateDependentTTL(context, eventId,
Duration.ONE_MINUTE.times(3)), new SortedSetResult<>(result));
}
@@ -27,4 +27,7 @@ Require-Bundle: com.sap.sailing.server,
com.sap.sailing.domain.shared.android,
com.sap.sse.replication.testsupport,
com.sap.sse.filestorage,
com.sap.sse.shared.android
com.sap.sse.shared.android,
com.sap.sailing.server.gateway,
javax.ws.rs,
com.sap.sailing.server.testsupport
@@ -4,21 +4,51 @@ import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
import org.junit.Test;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
import com.sap.sailing.domain.test.TrackBasedTest;
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.RacingEventServiceImpl;
import com.sap.sailing.server.masterdata.MasterDataImporter;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.media.MimeType;
import com.sap.sse.mongodb.MongoDBConfiguration;
import com.sap.sse.mongodb.MongoDBService;
import junit.framework.Assert;
public class MediaReplicationTest extends AbstractServerReplicationTest {
@@ -153,4 +183,108 @@ public class MediaReplicationTest extends AbstractServerReplicationTest {
assertThat(replica.getAllMediaTracks().iterator().next().assignedRaces, is(mediaTrack.assignedRaces));
}
@Test
public void testMasterDataImportForMediaTracks() throws MalformedURLException, IOException, InterruptedException,
ClassNotFoundException {
// Setup source service
RacingEventService sourceService = new RacingEventServiceImpl();
Set<RegattaAndRaceIdentifier> assignedRaces = new HashSet<RegattaAndRaceIdentifier>();
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<String> 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<RaceIdentifier> 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<String> 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<MediaTrack> targetTracksMaster = master.getAllMediaTracks();
compareTracks(trackOnSource, targetTracksMaster);
waitSomeTime();
final Iterable<MediaTrack> targetTracksReplica = replica.getAllMediaTracks();
compareTracks(trackOnSource, targetTracksReplica);
}
private void compareTracks(MediaTrack trackOnSource, Iterable<MediaTrack> 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 extends AbstractSailingServerResource> 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();
}
}
@@ -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
@@ -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<RaceIdentifier> raceIdentifiers) {
Iterator<RaceIdentifier> regattaRacesIterator = raceIdentifiers.iterator();
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
raceColumn.setRaceIdentifier(regattaFleet, regattaRacesIterator.next());
}
}
public static RegattaImpl createTestRegatta(String regattaName, Iterable<String> raceColumnNames) {
Iterable<? extends Fleet> regattaFleets = Collections.singleton(regattaFleet);
TrackedRegattaRegistry trackedRegattaRegistry = mock(TrackedRegattaRegistry.class);
Series series = new SeriesImpl("series name", isMedal, /* isFleetsCanRunInParallel */ true, regattaFleets, raceColumnNames, trackedRegattaRegistry);
Iterable<? extends Series> regattaSeries = Collections.singleton(series);
return new RegattaImpl(regattaName, boatClass, startDate, endDate, regattaSeries, persistent, scoringScheme, regatteId , courseArea, OneDesignRankingMetric::new);
}
}
@@ -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<String, Regatta> 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<String> 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<MediaTrack> 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());
@@ -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 */
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.sap.sailing.server.testsupport</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -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
@@ -0,0 +1,3 @@
eclipse.preferences.version=1
pluginProject.extensions=false
resolve.requirebundle=false
@@ -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"
@@ -0,0 +1,4 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>root</artifactId>
<groupId>com.sap.sailing</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>com.sap.sailing.server.testsupport</artifactId>
<packaging>eclipse-plugin</packaging>
</project>
@@ -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;
@@ -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,
@@ -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<Serializable> competitorIds = (List<Serializable>) 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;
}
@@ -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");
+1
View File
@@ -134,6 +134,7 @@
<module>com.sap.sailing.gwt.ui</module>
<module>com.sap.sailing.domain.test</module>
<module>com.sap.sse.replication.testsupport</module>
<module>com.sap.sailing.server.testsupport</module>
<!-- The following test fragment doesn't yet do what it should in the Maven context... -->
<module>com.sap.sse.gwt.test</module>
<!-- -->