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:
Frederik Petersen committed 2013-07-04 07:49:43 +02:00
1 parent d8d9bcdcef
commit f10b2b52cb
9 files changed
+226 -121

No files matched your search

@@ -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) {
@@ -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;
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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());
@@ -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
@@ -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;
}
}