mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-23 20:43:53 +00:00
Added de/serializer for media tracks for master data import
also extracted the top entry functionality of the importer into a designated object.
This commit is contained in:
1 parent
d8d9bcdcef
commit
f10b2b52cb
9 files changed
+226
-121
No files matched your search
+4
-30
@@ -45,9 +45,6 @@ import javax.servlet.ServletContext;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.util.tracker.ServiceTracker;
|
||||
|
||||
@@ -123,7 +120,6 @@ import com.sap.sailing.domain.common.dto.TrackedRaceDTO;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||
import com.sap.sailing.domain.common.impl.KilometersPerHourSpeedImpl;
|
||||
import com.sap.sailing.domain.common.impl.MasterDataImportObjectCreationCountImpl;
|
||||
import com.sap.sailing.domain.common.impl.MeterDistance;
|
||||
import com.sap.sailing.domain.common.impl.PolarSheetGenerationTriggerResponseImpl;
|
||||
import com.sap.sailing.domain.common.impl.PolarSheetsHistogramDataImpl;
|
||||
@@ -141,7 +137,6 @@ import com.sap.sailing.domain.leaderboard.MetaLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
|
||||
import com.sap.sailing.domain.leaderboard.caching.LiveLeaderboardUpdater;
|
||||
import com.sap.sailing.domain.masterdataimport.LeaderboardGroupMasterData;
|
||||
import com.sap.sailing.domain.persistence.DomainObjectFactory;
|
||||
import com.sap.sailing.domain.persistence.MongoFactory;
|
||||
import com.sap.sailing.domain.persistence.MongoObjectFactory;
|
||||
@@ -246,9 +241,7 @@ import com.sap.sailing.resultimport.ResultUrlProvider;
|
||||
import com.sap.sailing.resultimport.ResultUrlRegistry;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.masterdata.impl.LeaderboardGroupMasterDataJsonDeserializer;
|
||||
import com.sap.sailing.server.masterdata.MasterDataImporter;
|
||||
import com.sap.sailing.server.operationaltransformation.AddColumnToLeaderboard;
|
||||
import com.sap.sailing.server.operationaltransformation.AddColumnToSeries;
|
||||
import com.sap.sailing.server.operationaltransformation.AddCourseArea;
|
||||
@@ -259,7 +252,6 @@ import com.sap.sailing.server.operationaltransformation.CreateFlexibleLeaderboar
|
||||
import com.sap.sailing.server.operationaltransformation.CreateLeaderboardGroup;
|
||||
import com.sap.sailing.server.operationaltransformation.CreateRegattaLeaderboard;
|
||||
import com.sap.sailing.server.operationaltransformation.DisconnectLeaderboardColumnFromTrackedRace;
|
||||
import com.sap.sailing.server.operationaltransformation.ImportMasterDataOperation;
|
||||
import com.sap.sailing.server.operationaltransformation.MoveColumnInSeriesDown;
|
||||
import com.sap.sailing.server.operationaltransformation.MoveColumnInSeriesUp;
|
||||
import com.sap.sailing.server.operationaltransformation.MoveLeaderboardColumnDown;
|
||||
@@ -3219,27 +3211,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
toURL();
|
||||
}
|
||||
|
||||
protected MasterDataImportObjectCreationCountImpl importFromHttpResponse(String response, boolean override) {
|
||||
MasterDataImportObjectCreationCountImpl creationCount = new MasterDataImportObjectCreationCountImpl();
|
||||
JsonDeserializer<LeaderboardGroupMasterData> leaderboardGroupMasterDataDeserializer = LeaderboardGroupMasterDataJsonDeserializer
|
||||
.create(baseDomainFactory);
|
||||
JSONParser parser = new JSONParser();
|
||||
try {
|
||||
JSONArray leaderboardGroupsMasterDataJsonArray = (JSONArray) parser.parse(response);
|
||||
for (Object leaderBoardGroupMasterData : leaderboardGroupsMasterDataJsonArray) {
|
||||
JSONObject leaderBoardGroupMasterDataJson = (JSONObject) leaderBoardGroupMasterData;
|
||||
LeaderboardGroupMasterData masterData = leaderboardGroupMasterDataDeserializer
|
||||
.deserialize(leaderBoardGroupMasterDataJson);
|
||||
ImportMasterDataOperation op = new ImportMasterDataOperation(masterData, override);
|
||||
creationCount.add(getService().apply(op));
|
||||
}
|
||||
} catch (org.json.simple.parser.ParseException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (JsonDeserializationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
return creationCount;
|
||||
protected MasterDataImportObjectCreationCount importFromHttpResponse(String response, boolean override) {
|
||||
MasterDataImporter importer = new MasterDataImporter(baseDomainFactory, getService());
|
||||
return importer.importMasterData(response, override);
|
||||
}
|
||||
|
||||
private String createLeaderboardQuery(String[] groupNames) {
|
||||
|
||||
+1
-1
@@ -241,7 +241,7 @@ public class LeaderboardMasterDataJsonDeserializer implements JsonDeserializer<L
|
||||
}
|
||||
int[] result = new int[indeces.size()];
|
||||
for (int i = 0; i < result.length; i++) {
|
||||
result[i] = (Integer) indeces.get(i);
|
||||
result[i] = ((Long) indeces.get(i)).intValue();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.sap.sailing.server.gateway.deserialization.masterdata.impl;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.common.media.MediaTrack;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.serialization.masterdata.impl.MediaTrackJsonSerializer;
|
||||
|
||||
public class MediaTrackJsonDeserializer implements JsonDeserializer<MediaTrack> {
|
||||
|
||||
@Override
|
||||
public MediaTrack deserialize(JSONObject object) throws JsonDeserializationException {
|
||||
String dbId = (String) object.get(MediaTrackJsonSerializer.FIELD_DB_ID);
|
||||
int durationInMillis = ((Double) object.get(MediaTrackJsonSerializer.FIELD_DURATION)).intValue();
|
||||
MediaTrack.MimeType mimeType = MediaTrack.MimeType.valueOf((String) object
|
||||
.get(MediaTrackJsonSerializer.FIELD_MIME_TYPE));
|
||||
long startTimeInMillis = ((Double) object.get(MediaTrackJsonSerializer.FIELD_START_TIME)).longValue();
|
||||
Date startTime = new Date(startTimeInMillis);
|
||||
MediaTrack.Status status = MediaTrack.Status
|
||||
.valueOf((String) object.get(MediaTrackJsonSerializer.FIELD_STATUS));
|
||||
String title = (String) object.get(MediaTrackJsonSerializer.FIELD_TITLE);
|
||||
String url = (String) object.get(MediaTrackJsonSerializer.FIELD_URL);
|
||||
MediaTrack mediaTrack = new MediaTrack(dbId, title, url, startTime, durationInMillis, mimeType);
|
||||
mediaTrack.status = status;
|
||||
return mediaTrack;
|
||||
}
|
||||
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.sap.sailing.server.gateway.serialization.masterdata.impl;
|
||||
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.common.media.MediaTrack;
|
||||
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
|
||||
|
||||
public class MediaTrackJsonSerializer implements JsonSerializer<MediaTrack> {
|
||||
|
||||
public static final String FIELD_DB_ID = "dbId";
|
||||
public static final String FIELD_DURATION = "duration";
|
||||
public static final String FIELD_MIME_TYPE = "mimeType";
|
||||
public static final String FIELD_START_TIME = "startTime";
|
||||
public static final String FIELD_STATUS = "status";
|
||||
public static final String FIELD_TITLE = "title";
|
||||
public static final String FIELD_URL = "url";
|
||||
|
||||
@Override
|
||||
public JSONObject serialize(MediaTrack mediaTrack) {
|
||||
JSONObject result = new JSONObject();
|
||||
result.put(FIELD_DB_ID, mediaTrack.dbId);
|
||||
result.put(FIELD_DURATION, mediaTrack.durationInMillis);
|
||||
result.put(FIELD_MIME_TYPE, mediaTrack.mimeType.name());
|
||||
result.put(FIELD_START_TIME, mediaTrack.startTime.getTime());
|
||||
result.put(FIELD_STATUS, mediaTrack.status.name());
|
||||
result.put(FIELD_TITLE, mediaTrack.title);
|
||||
result.put(FIELD_URL, mediaTrack.url);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
+27
-5
@@ -1,13 +1,16 @@
|
||||
package com.sap.sailing.server.gateway.serialization.masterdata.impl;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.common.media.MediaTrack;
|
||||
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
|
||||
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
|
||||
|
||||
@@ -21,19 +24,28 @@ import com.sap.sailing.server.gateway.serialization.JsonSerializer;
|
||||
*/
|
||||
public class TopLevelMasterDataSerializer {
|
||||
|
||||
public static final String FIELD_PER_LG = "perLg";
|
||||
public static final String FIELD_MEDIA = "media";
|
||||
private final Map<String, LeaderboardGroup> allLeaderboardGroups;
|
||||
private final Iterable<Event> allEvents;
|
||||
private final ConcurrentHashMap<String, Regatta> regattaForRaceIdStrings;
|
||||
private final Collection<MediaTrack> allMediaTracks;
|
||||
|
||||
public TopLevelMasterDataSerializer(Map<String, LeaderboardGroup> allLeaderboardGroups, Iterable<Event> allEvents, ConcurrentHashMap<String, Regatta> regattaForRaceIdString) {
|
||||
private final JsonSerializer<MediaTrack> mediaTrackSerializer;
|
||||
|
||||
public TopLevelMasterDataSerializer(Map<String, LeaderboardGroup> allLeaderboardGroups, Iterable<Event> allEvents,
|
||||
ConcurrentHashMap<String, Regatta> regattaForRaceIdString, Collection<MediaTrack> allMediaTracks) {
|
||||
this.allLeaderboardGroups = allLeaderboardGroups;
|
||||
this.allEvents = allEvents;
|
||||
this.regattaForRaceIdStrings = regattaForRaceIdString;
|
||||
|
||||
this.allMediaTracks = allMediaTracks;
|
||||
mediaTrackSerializer = new MediaTrackJsonSerializer();
|
||||
}
|
||||
|
||||
public JSONArray serialize(Set<String> requestedLeaderboardGroupNames) {
|
||||
JSONArray masterData = new JSONArray();
|
||||
public JSONObject serialize(Set<String> requestedLeaderboardGroupNames) {
|
||||
JSONObject masterData = new JSONObject();
|
||||
|
||||
JSONArray masterDataPerLg = new JSONArray();
|
||||
|
||||
for (String name : requestedLeaderboardGroupNames) {
|
||||
LeaderboardGroup leaderboardGroup = allLeaderboardGroups.get(name);
|
||||
@@ -41,10 +53,20 @@ public class TopLevelMasterDataSerializer {
|
||||
continue;
|
||||
}
|
||||
JsonSerializer<LeaderboardGroup> serializer = new LeaderboardGroupMasterDataJsonSerializer(allEvents, regattaForRaceIdStrings);
|
||||
masterData.add(serializer.serialize(leaderboardGroup));
|
||||
masterDataPerLg.add(serializer.serialize(leaderboardGroup));
|
||||
}
|
||||
masterData.put(FIELD_PER_LG, masterDataPerLg);
|
||||
masterData.put(FIELD_MEDIA, createJsonArrayForMediaTracks());
|
||||
|
||||
return masterData;
|
||||
}
|
||||
|
||||
private JSONArray createJsonArrayForMediaTracks() {
|
||||
JSONArray array = new JSONArray();
|
||||
for (MediaTrack mediaTrack : allMediaTracks) {
|
||||
array.add(mediaTrackSerializer);
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
}
|
||||
+3
-3
@@ -13,7 +13,7 @@ import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
|
||||
import com.sap.sailing.server.gateway.AbstractJsonHttpServlet;
|
||||
@@ -40,9 +40,9 @@ public class MasterDataByLeaderboardGroupJsonGetServlet extends AbstractJsonHttp
|
||||
}
|
||||
|
||||
TopLevelMasterDataSerializer masterSerializer = new TopLevelMasterDataSerializer(leaderboardGroups,
|
||||
getService().getAllEvents(), getService().getPersistentRegattasForRaceIDs());
|
||||
getService().getAllEvents(), getService().getPersistentRegattasForRaceIDs(), getService().getAllMediaTracks());
|
||||
|
||||
JSONArray masterData = masterSerializer.serialize(requestedLeaderboardGroupNames);
|
||||
JSONObject masterData = masterSerializer.serialize(requestedLeaderboardGroupNames);
|
||||
|
||||
setJsonResponseHeader(resp);
|
||||
masterData.writeJSONString(resp.getWriter());
|
||||
|
||||
+39
-81
@@ -14,7 +14,6 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.junit.After;
|
||||
import org.junit.Test;
|
||||
@@ -43,25 +42,22 @@ import com.sap.sailing.domain.base.impl.NationalityImpl;
|
||||
import com.sap.sailing.domain.base.impl.PersonImpl;
|
||||
import com.sap.sailing.domain.base.impl.SeriesImpl;
|
||||
import com.sap.sailing.domain.base.impl.TeamImpl;
|
||||
import com.sap.sailing.domain.common.MasterDataImportObjectCreationCount;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.impl.MasterDataImportObjectCreationCountImpl;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
|
||||
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
|
||||
import com.sap.sailing.domain.masterdataimport.LeaderboardGroupMasterData;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEventFactory;
|
||||
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
|
||||
import com.sap.sailing.domain.racelog.impl.RaceLogEventFactoryImpl;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.mongodb.MongoDBService;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.masterdata.impl.LeaderboardGroupMasterDataJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.serialization.masterdata.impl.TopLevelMasterDataSerializer;
|
||||
import com.sap.sailing.server.impl.RacingEventServiceImpl;
|
||||
import com.sap.sailing.server.masterdata.MasterDataImporter;
|
||||
import com.sap.sailing.server.operationaltransformation.DummyTrackedRace;
|
||||
import com.sap.sailing.server.operationaltransformation.ImportMasterDataOperation;
|
||||
|
||||
public class MasterDataImportTest {
|
||||
|
||||
@@ -209,11 +205,11 @@ public class MasterDataImportTest {
|
||||
// Serialize
|
||||
TopLevelMasterDataSerializer serializer = new TopLevelMasterDataSerializer(
|
||||
sourceService.getLeaderboardGroups(), sourceService.getAllEvents(),
|
||||
sourceService.getPersistentRegattasForRaceIDs());
|
||||
sourceService.getPersistentRegattasForRaceIDs(), sourceService.getAllMediaTracks());
|
||||
Set<String> names = new HashSet<String>();
|
||||
names.add(TEST_GROUP_NAME);
|
||||
JSONArray masterDataOverallArray = serializer.serialize(names);
|
||||
Assert.assertNotNull(masterDataOverallArray);
|
||||
JSONObject masterDataOverallObject = serializer.serialize(names);
|
||||
Assert.assertNotNull(masterDataOverallObject);
|
||||
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteCreatedDataFromDatabase();
|
||||
@@ -221,18 +217,9 @@ public class MasterDataImportTest {
|
||||
// Deserialization copied from doPost in MasterDataByLeaderboardGroupJsonPostServlet
|
||||
RacingEventService destService = new RacingEventServiceImplMock();
|
||||
DomainFactory domainFactory = DomainFactory.INSTANCE;
|
||||
MasterDataImportObjectCreationCountImpl creationCount = new MasterDataImportObjectCreationCountImpl();
|
||||
JsonDeserializer<LeaderboardGroupMasterData> leaderboardGroupMasterDataDeserializer = LeaderboardGroupMasterDataJsonDeserializer
|
||||
.create(domainFactory);
|
||||
JSONArray leaderboardGroupsMasterDataJsonArray = masterDataOverallArray;
|
||||
// Actual import. Roughly copied from doPost in MasterDataByLeaderboardGroupJsonPostServlet
|
||||
for (Object leaderBoardGroupMasterData : leaderboardGroupsMasterDataJsonArray) {
|
||||
JSONObject leaderBoardGroupMasterDataJson = (JSONObject) leaderBoardGroupMasterData;
|
||||
LeaderboardGroupMasterData masterData = leaderboardGroupMasterDataDeserializer
|
||||
.deserialize(leaderBoardGroupMasterDataJson);
|
||||
ImportMasterDataOperation op = new ImportMasterDataOperation(masterData, false);
|
||||
creationCount.add(destService.apply(op));
|
||||
}
|
||||
MasterDataImporter importer = new MasterDataImporter(domainFactory, destService);
|
||||
MasterDataImportObjectCreationCount creationCount = importer.importMasterData(
|
||||
masterDataOverallObject.toString(), false);
|
||||
|
||||
Assert.assertNotNull(creationCount);
|
||||
Event eventOnTarget = destService.getEvent(eventUUID);
|
||||
@@ -375,11 +362,12 @@ public class MasterDataImportTest {
|
||||
|
||||
// Serialize
|
||||
TopLevelMasterDataSerializer serializer = new TopLevelMasterDataSerializer(
|
||||
sourceService.getLeaderboardGroups(), sourceService.getAllEvents(), sourceService.getPersistentRegattasForRaceIDs());
|
||||
sourceService.getLeaderboardGroups(), sourceService.getAllEvents(),
|
||||
sourceService.getPersistentRegattasForRaceIDs(), sourceService.getAllMediaTracks());
|
||||
Set<String> names = new HashSet<String>();
|
||||
names.add(TEST_GROUP_NAME);
|
||||
JSONArray masterDataOverallArray = serializer.serialize(names);
|
||||
Assert.assertNotNull(masterDataOverallArray);
|
||||
JSONObject masterDataOverallObject = serializer.serialize(names);
|
||||
Assert.assertNotNull(masterDataOverallObject);
|
||||
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteCreatedDataFromDatabase();
|
||||
@@ -414,18 +402,10 @@ public class MasterDataImportTest {
|
||||
// Deserialization copied from SailingServiceImpl
|
||||
|
||||
DomainFactory domainFactory = DomainFactory.INSTANCE;
|
||||
MasterDataImportObjectCreationCountImpl creationCount = new MasterDataImportObjectCreationCountImpl();
|
||||
JsonDeserializer<LeaderboardGroupMasterData> leaderboardGroupMasterDataDeserializer = LeaderboardGroupMasterDataJsonDeserializer
|
||||
.create(domainFactory);
|
||||
JSONArray leaderboardGroupsMasterDataJsonArray = masterDataOverallArray;
|
||||
// Actual import. Roughly copied from SailingServiceImpl
|
||||
for (Object leaderBoardGroupMasterData : leaderboardGroupsMasterDataJsonArray) {
|
||||
JSONObject leaderBoardGroupMasterDataJson = (JSONObject) leaderBoardGroupMasterData;
|
||||
LeaderboardGroupMasterData masterData = leaderboardGroupMasterDataDeserializer
|
||||
.deserialize(leaderBoardGroupMasterDataJson);
|
||||
ImportMasterDataOperation op = new ImportMasterDataOperation(masterData, false);
|
||||
creationCount.add(destService.apply(op));
|
||||
}
|
||||
MasterDataImporter importer = new MasterDataImporter(domainFactory, destService);
|
||||
MasterDataImportObjectCreationCount creationCount = importer.importMasterData(
|
||||
masterDataOverallObject.toString(), false);
|
||||
|
||||
|
||||
//---Asserts---
|
||||
|
||||
@@ -545,11 +525,12 @@ public class MasterDataImportTest {
|
||||
|
||||
// Serialize
|
||||
TopLevelMasterDataSerializer serializer = new TopLevelMasterDataSerializer(
|
||||
sourceService.getLeaderboardGroups(), sourceService.getAllEvents(), sourceService.getPersistentRegattasForRaceIDs());
|
||||
sourceService.getLeaderboardGroups(), sourceService.getAllEvents(), sourceService.getPersistentRegattasForRaceIDs(),
|
||||
sourceService.getAllMediaTracks());
|
||||
Set<String> names = new HashSet<String>();
|
||||
names.add(TEST_GROUP_NAME);
|
||||
JSONArray masterDataOverallArray = serializer.serialize(names);
|
||||
Assert.assertNotNull(masterDataOverallArray);
|
||||
JSONObject masterDataOverallObject = serializer.serialize(names);
|
||||
Assert.assertNotNull(masterDataOverallObject);
|
||||
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteCreatedDataFromDatabase();
|
||||
@@ -584,18 +565,10 @@ public class MasterDataImportTest {
|
||||
// Deserialization copied from SailingServiceImpl
|
||||
|
||||
DomainFactory domainFactory = DomainFactory.INSTANCE;
|
||||
MasterDataImportObjectCreationCountImpl creationCount = new MasterDataImportObjectCreationCountImpl();
|
||||
JsonDeserializer<LeaderboardGroupMasterData> leaderboardGroupMasterDataDeserializer = LeaderboardGroupMasterDataJsonDeserializer
|
||||
.create(domainFactory);
|
||||
JSONArray leaderboardGroupsMasterDataJsonArray = masterDataOverallArray;
|
||||
// Actual import. Roughly copied from SailingServiceImpl
|
||||
for (Object leaderBoardGroupMasterData : leaderboardGroupsMasterDataJsonArray) {
|
||||
JSONObject leaderBoardGroupMasterDataJson = (JSONObject) leaderBoardGroupMasterData;
|
||||
LeaderboardGroupMasterData masterData = leaderboardGroupMasterDataDeserializer
|
||||
.deserialize(leaderBoardGroupMasterDataJson);
|
||||
ImportMasterDataOperation op = new ImportMasterDataOperation(masterData, true);
|
||||
creationCount.add(destService.apply(op));
|
||||
}
|
||||
MasterDataImporter importer = new MasterDataImporter(domainFactory, destService);
|
||||
MasterDataImportObjectCreationCount creationCount = importer.importMasterData(
|
||||
masterDataOverallObject.toString(), true);
|
||||
|
||||
|
||||
//---Asserts---
|
||||
|
||||
@@ -708,11 +681,12 @@ public class MasterDataImportTest {
|
||||
|
||||
// Serialize
|
||||
TopLevelMasterDataSerializer serializer = new TopLevelMasterDataSerializer(
|
||||
sourceService.getLeaderboardGroups(), sourceService.getAllEvents(), sourceService.getPersistentRegattasForRaceIDs());
|
||||
sourceService.getLeaderboardGroups(), sourceService.getAllEvents(), sourceService.getPersistentRegattasForRaceIDs(),
|
||||
sourceService.getAllMediaTracks());
|
||||
Set<String> names = new HashSet<String>();
|
||||
names.add(TEST_GROUP_NAME);
|
||||
JSONArray masterDataOverallArray = serializer.serialize(names);
|
||||
Assert.assertNotNull(masterDataOverallArray);
|
||||
JSONObject masterDataOverallObject = serializer.serialize(names);
|
||||
Assert.assertNotNull(masterDataOverallObject);
|
||||
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteCreatedDataFromDatabase();
|
||||
@@ -723,18 +697,10 @@ public class MasterDataImportTest {
|
||||
// Deserialization copied from SailingServiceImpl
|
||||
|
||||
DomainFactory domainFactory = DomainFactory.INSTANCE;
|
||||
MasterDataImportObjectCreationCountImpl creationCount = new MasterDataImportObjectCreationCountImpl();
|
||||
JsonDeserializer<LeaderboardGroupMasterData> leaderboardGroupMasterDataDeserializer = LeaderboardGroupMasterDataJsonDeserializer
|
||||
.create(domainFactory);
|
||||
JSONArray leaderboardGroupsMasterDataJsonArray = masterDataOverallArray;
|
||||
// Actual import. Roughly copied from SailingServiceImpl
|
||||
for (Object leaderBoardGroupMasterData : leaderboardGroupsMasterDataJsonArray) {
|
||||
JSONObject leaderBoardGroupMasterDataJson = (JSONObject) leaderBoardGroupMasterData;
|
||||
LeaderboardGroupMasterData masterData = leaderboardGroupMasterDataDeserializer
|
||||
.deserialize(leaderBoardGroupMasterDataJson);
|
||||
ImportMasterDataOperation op = new ImportMasterDataOperation(masterData, false);
|
||||
creationCount.add(destService.apply(op));
|
||||
}
|
||||
MasterDataImporter importer = new MasterDataImporter(domainFactory, destService);
|
||||
MasterDataImportObjectCreationCount creationCount = importer.importMasterData(
|
||||
masterDataOverallObject.toString(), false);
|
||||
|
||||
|
||||
//---Asserts---
|
||||
|
||||
@@ -839,11 +805,11 @@ public class MasterDataImportTest {
|
||||
// Serialize
|
||||
TopLevelMasterDataSerializer serializer = new TopLevelMasterDataSerializer(
|
||||
sourceService.getLeaderboardGroups(), sourceService.getAllEvents(),
|
||||
sourceService.getPersistentRegattasForRaceIDs());
|
||||
sourceService.getPersistentRegattasForRaceIDs(), sourceService.getAllMediaTracks());
|
||||
Set<String> names = new HashSet<String>();
|
||||
names.add(TEST_GROUP_NAME);
|
||||
JSONArray masterDataOverallArray = serializer.serialize(names);
|
||||
Assert.assertNotNull(masterDataOverallArray);
|
||||
JSONObject masterDataOverallObject = serializer.serialize(names);
|
||||
Assert.assertNotNull(masterDataOverallObject);
|
||||
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteCreatedDataFromDatabase();
|
||||
@@ -852,18 +818,10 @@ public class MasterDataImportTest {
|
||||
|
||||
RacingEventService destService = new RacingEventServiceImplMock();
|
||||
DomainFactory domainFactory = DomainFactory.INSTANCE;
|
||||
MasterDataImportObjectCreationCountImpl creationCount = new MasterDataImportObjectCreationCountImpl();
|
||||
JsonDeserializer<LeaderboardGroupMasterData> leaderboardGroupMasterDataDeserializer = LeaderboardGroupMasterDataJsonDeserializer
|
||||
.create(domainFactory);
|
||||
JSONArray leaderboardGroupsMasterDataJsonArray = masterDataOverallArray;
|
||||
// Actual import. Roughly copied from SailingServiceImpl
|
||||
for (Object leaderBoardGroupMasterData : leaderboardGroupsMasterDataJsonArray) {
|
||||
JSONObject leaderBoardGroupMasterDataJson = (JSONObject) leaderBoardGroupMasterData;
|
||||
LeaderboardGroupMasterData masterData = leaderboardGroupMasterDataDeserializer
|
||||
.deserialize(leaderBoardGroupMasterDataJson);
|
||||
ImportMasterDataOperation op = new ImportMasterDataOperation(masterData, false);
|
||||
creationCount.add(destService.apply(op));
|
||||
}
|
||||
MasterDataImporter importer = new MasterDataImporter(domainFactory, destService);
|
||||
MasterDataImportObjectCreationCount creationCount = importer.importMasterData(
|
||||
masterDataOverallObject.toString(), false);
|
||||
|
||||
|
||||
// ---Asserts---
|
||||
|
||||
|
||||
@@ -6,7 +6,10 @@ Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Activator: com.sap.sailing.server.impl.Activator
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
|
||||
Import-Package: org.json.simple,
|
||||
Import-Package: com.sap.sailing.server.gateway.deserialization,
|
||||
com.sap.sailing.server.gateway.deserialization.masterdata.impl,
|
||||
com.sap.sailing.server.gateway.serialization.masterdata.impl,
|
||||
org.json.simple,
|
||||
org.json.simple.parser,
|
||||
org.osgi.framework;version="1.3.0",
|
||||
org.osgi.util.tracker;version="1.3.1"
|
||||
@@ -32,5 +35,6 @@ 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.server.masterdata,
|
||||
com.sap.sailing.server.operationaltransformation
|
||||
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
package com.sap.sailing.server.masterdata;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.common.MasterDataImportObjectCreationCount;
|
||||
import com.sap.sailing.domain.common.impl.MasterDataImportObjectCreationCountImpl;
|
||||
import com.sap.sailing.domain.common.media.MediaTrack;
|
||||
import com.sap.sailing.domain.masterdataimport.LeaderboardGroupMasterData;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.masterdata.impl.LeaderboardGroupMasterDataJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.masterdata.impl.MediaTrackJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.serialization.masterdata.impl.TopLevelMasterDataSerializer;
|
||||
import com.sap.sailing.server.operationaltransformation.ImportMasterDataOperation;
|
||||
|
||||
public class MasterDataImporter {
|
||||
|
||||
private final DomainFactory baseDomainFactory;
|
||||
|
||||
private final RacingEventService racingEventService;
|
||||
|
||||
public MasterDataImporter(DomainFactory baseDomainFactory, RacingEventService racingEventService) {
|
||||
this.baseDomainFactory = baseDomainFactory;
|
||||
this.racingEventService = racingEventService;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public MasterDataImportObjectCreationCount importMasterData(String response, boolean override) {
|
||||
MasterDataImportObjectCreationCountImpl creationCount = new MasterDataImportObjectCreationCountImpl();
|
||||
JsonDeserializer<LeaderboardGroupMasterData> leaderboardGroupMasterDataDeserializer = LeaderboardGroupMasterDataJsonDeserializer
|
||||
.create(baseDomainFactory);
|
||||
JSONParser parser = new JSONParser();
|
||||
try {
|
||||
JSONObject masterDataOverall = (JSONObject) parser.parse(response);
|
||||
JSONArray leaderboardGroupsMasterDataJsonArray = (JSONArray) masterDataOverall.get(TopLevelMasterDataSerializer.FIELD_PER_LG);
|
||||
for (Object leaderBoardGroupMasterData : leaderboardGroupsMasterDataJsonArray) {
|
||||
JSONObject leaderBoardGroupMasterDataJson = (JSONObject) leaderBoardGroupMasterData;
|
||||
LeaderboardGroupMasterData masterData = leaderboardGroupMasterDataDeserializer
|
||||
.deserialize(leaderBoardGroupMasterDataJson);
|
||||
ImportMasterDataOperation op = new ImportMasterDataOperation(masterData, override);
|
||||
creationCount.add(racingEventService.apply(op));
|
||||
}
|
||||
JsonDeserializer<MediaTrack> mediaTrackDeserializer = new MediaTrackJsonDeserializer();
|
||||
JSONArray mediaTracks = (JSONArray) masterDataOverall.get(TopLevelMasterDataSerializer.FIELD_MEDIA);
|
||||
List<MediaTrack> tracks = new ArrayList<MediaTrack>();
|
||||
for (Object obj : mediaTracks) {
|
||||
tracks.add(mediaTrackDeserializer.deserialize((JSONObject) obj));
|
||||
}
|
||||
Collection<MediaTrack> existingMediaTracks = racingEventService.getAllMediaTracks();
|
||||
Map<String, MediaTrack> existingMap = new HashMap<String, MediaTrack>();
|
||||
|
||||
for (MediaTrack oneTrack : existingMediaTracks) {
|
||||
existingMap.put(oneTrack.dbId, oneTrack);
|
||||
}
|
||||
|
||||
for (MediaTrack oneNewTrack : tracks) {
|
||||
if (existingMap.containsKey(oneNewTrack.dbId)) {
|
||||
if (override) {
|
||||
racingEventService.mediaTrackDeleted(existingMap.get(oneNewTrack));
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
racingEventService.mediaTrackAdded(oneNewTrack);
|
||||
}
|
||||
} catch (org.json.simple.parser.ParseException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (JsonDeserializationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return creationCount;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user