mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-25 06:58:39 +00:00
changed loading of competitors in competitorStore to load the old competitors with the contained boat
This commit is contained in:
+2
-2
@@ -12,7 +12,7 @@ import com.mongodb.DBObject;
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorWithBoat;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
@@ -131,7 +131,7 @@ public interface DomainObjectFactory {
|
||||
/**
|
||||
* Loads all competitors, and resolves them via the domain factory.
|
||||
*/
|
||||
Collection<Competitor> loadAllCompetitors();
|
||||
Collection<CompetitorWithBoat> loadAllCompetitors();
|
||||
|
||||
/**
|
||||
* Loads all boats, and resolves them via the domain factory.
|
||||
|
||||
+7
-6
@@ -127,6 +127,7 @@ import com.sap.sailing.domain.abstractlog.regatta.impl.RegattaLogImpl;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorWithBoat;
|
||||
import com.sap.sailing.domain.base.ControlPoint;
|
||||
import com.sap.sailing.domain.base.ControlPointWithTwoMarks;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
@@ -223,7 +224,7 @@ import com.sap.sailing.domain.tracking.impl.WindTrackImpl;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.BoatJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.CompetitorJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.CompetitorWithBoatJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.DeviceConfigurationJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.RegattaConfigurationJsonDeserializer;
|
||||
@@ -251,7 +252,7 @@ import com.sap.sse.util.ThreadPoolUtil;
|
||||
|
||||
public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
private static final Logger logger = Logger.getLogger(DomainObjectFactoryImpl.class.getName());
|
||||
private final CompetitorJsonDeserializer competitorDeserializer;
|
||||
private final CompetitorWithBoatJsonDeserializer competitorWithBoatDeserializer;
|
||||
private final BoatJsonDeserializer boatDeserializer;
|
||||
|
||||
private final DB database;
|
||||
@@ -281,7 +282,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
this.raceTrackingConnectivityParamsServiceFinder = null;
|
||||
}
|
||||
this.baseDomainFactory = baseDomainFactory;
|
||||
this.competitorDeserializer = CompetitorJsonDeserializer.create(baseDomainFactory);
|
||||
this.competitorWithBoatDeserializer = CompetitorWithBoatJsonDeserializer.create(baseDomainFactory);
|
||||
this.boatDeserializer = BoatJsonDeserializer.create(baseDomainFactory);
|
||||
this.database = db;
|
||||
}
|
||||
@@ -2124,13 +2125,13 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Competitor> loadAllCompetitors() {
|
||||
ArrayList<Competitor> result = new ArrayList<Competitor>();
|
||||
public Collection<CompetitorWithBoat> loadAllCompetitors() {
|
||||
ArrayList<CompetitorWithBoat> result = new ArrayList<>();
|
||||
DBCollection collection = database.getCollection(CollectionNames.COMPETITORS.name());
|
||||
try {
|
||||
for (DBObject o : collection.find()) {
|
||||
JSONObject json = Helpers.toJSONObjectSafe(new JSONParser().parse(JSON.serialize(o)));
|
||||
Competitor c = competitorDeserializer.deserialize(json);
|
||||
CompetitorWithBoat c = competitorWithBoatDeserializer.deserialize(json);
|
||||
result.add(c);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
||||
+1
-6
@@ -1,14 +1,9 @@
|
||||
package com.sap.sailing.domain.base;
|
||||
|
||||
import com.sap.sse.datamining.annotations.Connector;
|
||||
|
||||
/**
|
||||
* A competitor having an assigned boat
|
||||
* This makes sense e.g. in the context of a race where a competitor needs a boat in order to compete
|
||||
* @author fmittag
|
||||
*
|
||||
*/
|
||||
public interface CompetitorWithBoat extends Competitor {
|
||||
@Connector(messageKey = "Boat", ordinal = 10)
|
||||
Boat getBoat();
|
||||
public interface CompetitorWithBoat extends Competitor, WithBoat {
|
||||
}
|
||||
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package com.sap.sailing.domain.base;
|
||||
|
||||
import com.sap.sse.datamining.annotations.Connector;
|
||||
|
||||
/**
|
||||
* Something with a boat.
|
||||
*/
|
||||
public interface WithBoat {
|
||||
@Connector(messageKey = "Boat", ordinal = 10)
|
||||
Boat getBoat();
|
||||
}
|
||||
+5
@@ -4,6 +4,11 @@ import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorAndBoat;
|
||||
|
||||
/**
|
||||
* A utility class to hold a combination of a competitor and a boat
|
||||
* @author Frank Mittag
|
||||
*
|
||||
*/
|
||||
public class CompetitorAndBoatImpl implements CompetitorAndBoat {
|
||||
private static final long serialVersionUID = 6057339511208358777L;
|
||||
private final Competitor competitor;
|
||||
|
||||
+7
@@ -4,6 +4,7 @@ import java.io.Serializable;
|
||||
import java.net.URI;
|
||||
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorWithBoat;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.Duration;
|
||||
@@ -20,6 +21,12 @@ public class CompetitorWithBoatImpl extends CompetitorImpl implements Competitor
|
||||
this.boat = boat;
|
||||
}
|
||||
|
||||
public CompetitorWithBoatImpl(Competitor competitor, Boat boat) {
|
||||
this(competitor.getId(), competitor.getName(), competitor.getShortName(), competitor.getColor(), competitor.getEmail(),
|
||||
competitor.getFlagImage(), (DynamicTeam) competitor.getTeam(), competitor.getTimeOnTimeFactor(),
|
||||
competitor.getTimeOnDistanceAllowancePerNauticalMile(), competitor.getSearchTag(), boat);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boat getBoat() {
|
||||
return boat;
|
||||
|
||||
+1
-1
@@ -675,7 +675,7 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
}
|
||||
|
||||
Competitor existingCompetitor = getOrCreateCompetitor(rc.getCompetitor());
|
||||
if (competitorBoatInfo != null && existingCompetitor.getShortName() != rc.getCompetitor().getShortName()) {
|
||||
if (isSeparateBoat && existingCompetitor.getShortName() != rc.getCompetitor().getShortName()) {
|
||||
// in case we find a boat info we only want to update the shortName field of the competitor (instead of using sailID)
|
||||
CompetitorStore competitorStore = baseDomainFactory.getCompetitorStore();
|
||||
boolean isOldCompetitorToUpdateDuringGetOrCreate = competitorStore.isCompetitorToUpdateDuringGetOrCreate(existingCompetitor);
|
||||
|
||||
+2
-2
@@ -15,7 +15,7 @@ import com.mongodb.DB;
|
||||
import com.mongodb.DBCollection;
|
||||
import com.mongodb.MongoException;
|
||||
import com.mongodb.WriteConcern;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorWithBoat;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.impl.DomainFactoryImpl;
|
||||
import com.sap.sailing.domain.base.impl.DynamicCompetitor;
|
||||
@@ -64,7 +64,7 @@ public class StoreAndLoadCompetitorsTest extends AbstractMongoDBTest {
|
||||
c.setFlagImage(flagImageURI1);
|
||||
mongoObjectFactory.storeCompetitor(c);
|
||||
|
||||
Collection<Competitor> allCompetitors = domainObjectFactory.loadAllCompetitors();
|
||||
Collection<CompetitorWithBoat> allCompetitors = domainObjectFactory.loadAllCompetitors();
|
||||
assertEquals(1, Util.size(allCompetitors));
|
||||
DynamicCompetitor loadedCompetitor = (DynamicCompetitor) allCompetitors.iterator().next();
|
||||
assertEquals(flagImageURI1, loadedCompetitor.getFlagImage());
|
||||
|
||||
+5
-5
@@ -9,10 +9,10 @@ import java.util.logging.Logger;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorAndBoat;
|
||||
import com.sap.sailing.domain.base.CompetitorFactory;
|
||||
import com.sap.sailing.domain.base.CompetitorWithBoat;
|
||||
import com.sap.sailing.domain.base.SharedDomainFactory;
|
||||
import com.sap.sailing.domain.base.impl.CompetitorAndBoatImpl;
|
||||
import com.sap.sailing.domain.base.impl.CompetitorWithBoatImpl;
|
||||
import com.sap.sailing.domain.base.impl.DynamicBoat;
|
||||
import com.sap.sailing.domain.base.impl.DynamicTeam;
|
||||
import com.sap.sailing.domain.common.tracking.impl.CompetitorJsonConstants;
|
||||
@@ -23,7 +23,7 @@ import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.impl.MillisecondsDurationImpl;
|
||||
import com.sap.sse.common.impl.RGBColor;
|
||||
|
||||
public class CompetitorWithBoatJsonDeserializer implements JsonDeserializer<CompetitorAndBoat> {
|
||||
public class CompetitorWithBoatJsonDeserializer implements JsonDeserializer<CompetitorWithBoat> {
|
||||
protected final CompetitorFactory competitorFactory;
|
||||
protected final JsonDeserializer<DynamicTeam> teamJsonDeserializer;
|
||||
protected final JsonDeserializer<DynamicBoat> boatJsonDeserializer;
|
||||
@@ -45,7 +45,7 @@ public class CompetitorWithBoatJsonDeserializer implements JsonDeserializer<Comp
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompetitorAndBoat deserialize(JSONObject object) throws JsonDeserializationException {
|
||||
public CompetitorWithBoat deserialize(JSONObject object) throws JsonDeserializationException {
|
||||
Serializable competitorId = (Serializable) object.get(CompetitorJsonSerializer.FIELD_ID);
|
||||
try {
|
||||
Class<?> idClass = Class.forName((String) object.get(CompetitorJsonConstants.FIELD_ID_TYPE));
|
||||
@@ -97,7 +97,7 @@ public class CompetitorWithBoatJsonDeserializer implements JsonDeserializer<Comp
|
||||
timeOnDistanceAllowanceInSecondsPerNauticalMile == null ? null :
|
||||
new MillisecondsDurationImpl((long) (timeOnDistanceAllowanceInSecondsPerNauticalMile*1000)), searchTag);
|
||||
|
||||
return new CompetitorAndBoatImpl(competitor, boat);
|
||||
return new CompetitorWithBoatImpl(competitor, boat);
|
||||
} catch (Exception e) {
|
||||
throw new JsonDeserializationException(e);
|
||||
}
|
||||
|
||||
+4
-3
@@ -10,6 +10,7 @@ import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorStore;
|
||||
import com.sap.sailing.domain.base.CompetitorWithBoat;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.Nationality;
|
||||
import com.sap.sailing.domain.base.impl.DomainFactoryImpl;
|
||||
@@ -54,8 +55,8 @@ public class PersistentCompetitorStore extends TransientCompetitorStoreImpl impl
|
||||
storeTo.removeAllBoats();
|
||||
} else {
|
||||
// TODO bug2822: How to migrate the competitors with contained boats to competitors with separate boat
|
||||
Collection<Competitor> allCompetitors = loadFrom.loadAllCompetitors();
|
||||
for (Competitor competitor : allCompetitors) {
|
||||
Collection<CompetitorWithBoat> allCompetitors = loadFrom.loadAllCompetitors();
|
||||
for (CompetitorWithBoat competitor : allCompetitors) {
|
||||
addCompetitorToTransientStore(competitor.getId(), competitor);
|
||||
}
|
||||
Collection<Boat> allBoats = loadFrom.loadAllBoats();
|
||||
@@ -86,7 +87,7 @@ public class PersistentCompetitorStore extends TransientCompetitorStoreImpl impl
|
||||
storeTo = PersistenceFactory.INSTANCE.getDefaultMongoObjectFactory();
|
||||
}
|
||||
|
||||
private void addCompetitorToTransientStore(Serializable id, Competitor competitor) {
|
||||
private void addCompetitorToTransientStore(Serializable id, CompetitorWithBoat competitor) {
|
||||
super.addNewCompetitor(id, competitor);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user