mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-22 20:13:52 +00:00
added a searchTag attribute to 'Competitor' to make it possible to 'tag' competitors for an easier search later on
This commit is contained in:
1 parent
a60ca6ff8c
commit
ef7d84bd81
75 files changed
+6602
-6488
No files matched your search
+110
-109
@@ -1,109 +1,110 @@
|
||||
package com.sap.sailing.server.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.Serializable;
|
||||
import java.net.URI;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorStore;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.Nationality;
|
||||
import com.sap.sailing.domain.base.impl.DomainFactoryImpl;
|
||||
import com.sap.sailing.domain.base.impl.TransientCompetitorStoreImpl;
|
||||
import com.sap.sailing.domain.persistence.DomainObjectFactory;
|
||||
import com.sap.sailing.domain.persistence.MongoObjectFactory;
|
||||
import com.sap.sailing.domain.persistence.PersistenceFactory;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.TypeBasedServiceFinderFactory;
|
||||
import com.sap.sse.mongodb.MongoDBService;
|
||||
|
||||
/**
|
||||
* Manages a persistent set of {@link Competitor}s using a {@link MongoObjectFactory} to update the persistent store,
|
||||
* and a {@link DomainObjectFactory} for initially filling this store's in-memory representation from the persistent
|
||||
* store.<p>
|
||||
*
|
||||
* Note that the results of calling {@link CompetitorStore#allowCompetitorResetToDefaults(Competitor)} are not stored
|
||||
* persistently and therefore will be reset when re-initializing a competitor store from the database.
|
||||
*
|
||||
* @author Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public class PersistentCompetitorStore extends TransientCompetitorStoreImpl implements CompetitorStore {
|
||||
private static final long serialVersionUID = 9205956018421790908L;
|
||||
private transient MongoObjectFactory storeTo;
|
||||
private transient DomainObjectFactory loadFrom;
|
||||
|
||||
/**
|
||||
* @param clear
|
||||
* if <code>true</code>, the persistent competitor store is initially cleared, with all persistent
|
||||
* competitor data removed; use with caution!
|
||||
*/
|
||||
public PersistentCompetitorStore(MongoObjectFactory storeTo, boolean clear,
|
||||
TypeBasedServiceFinderFactory serviceFinderFactory, RaceLogResolver raceLogResolver) {
|
||||
DomainFactoryImpl baseDomainFactory = new DomainFactoryImpl(this, raceLogResolver);
|
||||
this.loadFrom = PersistenceFactory.INSTANCE.getDomainObjectFactory(MongoDBService.INSTANCE, baseDomainFactory, serviceFinderFactory);
|
||||
this.storeTo = storeTo;
|
||||
if (clear) {
|
||||
storeTo.removeAllCompetitors();
|
||||
} else {
|
||||
for (Competitor competitor : loadFrom.loadAllCompetitors()) {
|
||||
addCompetitorToTransientStore(competitor.getId(), competitor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DomainObjectFactory getDomainObjectFactory() {
|
||||
return loadFrom;
|
||||
}
|
||||
|
||||
MongoObjectFactory getMongoObjectFactory() {
|
||||
return storeTo;
|
||||
}
|
||||
|
||||
DomainFactory getBaseDomainFactory() {
|
||||
return loadFrom.getBaseDomainFactory();
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses the {@link PersistenceFactory#getDefaultMongoObjectFactory() default DB persistence} to store new competitors.
|
||||
* Use {@link #setStoreTo} to change this after de-serialization.
|
||||
*/
|
||||
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
|
||||
ois.defaultReadObject();
|
||||
storeTo = PersistenceFactory.INSTANCE.getDefaultMongoObjectFactory();
|
||||
}
|
||||
|
||||
private void addCompetitorToTransientStore(Serializable id, Competitor competitor) {
|
||||
super.addNewCompetitor(id, competitor);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addNewCompetitor(Serializable id, Competitor competitor) {
|
||||
storeTo.storeCompetitor(competitor);
|
||||
super.addNewCompetitor(id, competitor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
storeTo.removeAllCompetitors();
|
||||
super.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCompetitor(Competitor competitor) {
|
||||
storeTo.removeCompetitor(competitor);
|
||||
super.removeCompetitor(competitor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Competitor updateCompetitor(String idAsString, String newName, Color newRgbDisplayColor, String newEmail, String newSailId,
|
||||
Nationality newNationality, URI newTeamImageUri, URI newFlagImageUri, Double timeOnTimeFactor, Duration timeOnDistanceAllowancePerNauticalMile) {
|
||||
Competitor result = super.updateCompetitor(idAsString, newName, newRgbDisplayColor, newEmail, newSailId, newNationality,
|
||||
newTeamImageUri, newFlagImageUri, timeOnTimeFactor, timeOnDistanceAllowancePerNauticalMile);
|
||||
storeTo.storeCompetitor(result);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
package com.sap.sailing.server.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.Serializable;
|
||||
import java.net.URI;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorStore;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
import com.sap.sailing.domain.base.Nationality;
|
||||
import com.sap.sailing.domain.base.impl.DomainFactoryImpl;
|
||||
import com.sap.sailing.domain.base.impl.TransientCompetitorStoreImpl;
|
||||
import com.sap.sailing.domain.persistence.DomainObjectFactory;
|
||||
import com.sap.sailing.domain.persistence.MongoObjectFactory;
|
||||
import com.sap.sailing.domain.persistence.PersistenceFactory;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.TypeBasedServiceFinderFactory;
|
||||
import com.sap.sse.mongodb.MongoDBService;
|
||||
|
||||
/**
|
||||
* Manages a persistent set of {@link Competitor}s using a {@link MongoObjectFactory} to update the persistent store,
|
||||
* and a {@link DomainObjectFactory} for initially filling this store's in-memory representation from the persistent
|
||||
* store.<p>
|
||||
*
|
||||
* Note that the results of calling {@link CompetitorStore#allowCompetitorResetToDefaults(Competitor)} are not stored
|
||||
* persistently and therefore will be reset when re-initializing a competitor store from the database.
|
||||
*
|
||||
* @author Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public class PersistentCompetitorStore extends TransientCompetitorStoreImpl implements CompetitorStore {
|
||||
private static final long serialVersionUID = 9205956018421790908L;
|
||||
private transient MongoObjectFactory storeTo;
|
||||
private transient DomainObjectFactory loadFrom;
|
||||
|
||||
/**
|
||||
* @param clear
|
||||
* if <code>true</code>, the persistent competitor store is initially cleared, with all persistent
|
||||
* competitor data removed; use with caution!
|
||||
*/
|
||||
public PersistentCompetitorStore(MongoObjectFactory storeTo, boolean clear,
|
||||
TypeBasedServiceFinderFactory serviceFinderFactory, RaceLogResolver raceLogResolver) {
|
||||
DomainFactoryImpl baseDomainFactory = new DomainFactoryImpl(this, raceLogResolver);
|
||||
this.loadFrom = PersistenceFactory.INSTANCE.getDomainObjectFactory(MongoDBService.INSTANCE, baseDomainFactory, serviceFinderFactory);
|
||||
this.storeTo = storeTo;
|
||||
if (clear) {
|
||||
storeTo.removeAllCompetitors();
|
||||
} else {
|
||||
for (Competitor competitor : loadFrom.loadAllCompetitors()) {
|
||||
addCompetitorToTransientStore(competitor.getId(), competitor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DomainObjectFactory getDomainObjectFactory() {
|
||||
return loadFrom;
|
||||
}
|
||||
|
||||
MongoObjectFactory getMongoObjectFactory() {
|
||||
return storeTo;
|
||||
}
|
||||
|
||||
DomainFactory getBaseDomainFactory() {
|
||||
return loadFrom.getBaseDomainFactory();
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses the {@link PersistenceFactory#getDefaultMongoObjectFactory() default DB persistence} to store new competitors.
|
||||
* Use {@link #setStoreTo} to change this after de-serialization.
|
||||
*/
|
||||
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
|
||||
ois.defaultReadObject();
|
||||
storeTo = PersistenceFactory.INSTANCE.getDefaultMongoObjectFactory();
|
||||
}
|
||||
|
||||
private void addCompetitorToTransientStore(Serializable id, Competitor competitor) {
|
||||
super.addNewCompetitor(id, competitor);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addNewCompetitor(Serializable id, Competitor competitor) {
|
||||
storeTo.storeCompetitor(competitor);
|
||||
super.addNewCompetitor(id, competitor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
storeTo.removeAllCompetitors();
|
||||
super.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCompetitor(Competitor competitor) {
|
||||
storeTo.removeCompetitor(competitor);
|
||||
super.removeCompetitor(competitor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Competitor updateCompetitor(String idAsString, String newName, Color newRgbDisplayColor, String newEmail, String newSailId,
|
||||
Nationality newNationality, URI newTeamImageUri, URI newFlagImageUri, Double timeOnTimeFactor, Duration timeOnDistanceAllowancePerNauticalMile,
|
||||
String searchTag) {
|
||||
Competitor result = super.updateCompetitor(idAsString, newName, newRgbDisplayColor, newEmail, newSailId, newNationality,
|
||||
newTeamImageUri, newFlagImageUri, timeOnTimeFactor, timeOnDistanceAllowancePerNauticalMile, searchTag);
|
||||
storeTo.storeCompetitor(result);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+3
-2
@@ -547,7 +547,8 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
replicate(new UpdateCompetitor(competitor.getId().toString(), competitor.getName(), competitor
|
||||
.getColor(), competitor.getEmail(), competitor.getBoat().getSailID(), competitor.getTeam().getNationality(),
|
||||
competitor.getTeam().getImage(), competitor.getFlagImage(),
|
||||
competitor.getTimeOnTimeFactor(), competitor.getTimeOnDistanceAllowancePerNauticalMile()));
|
||||
competitor.getTimeOnTimeFactor(), competitor.getTimeOnDistanceAllowancePerNauticalMile(),
|
||||
competitor.getSearchTag()));
|
||||
}
|
||||
});
|
||||
this.windStore = windStore;
|
||||
@@ -2510,7 +2511,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
competitorStore.getOrCreateCompetitor(dynamicCompetitor.getId(), dynamicCompetitor.getName(),
|
||||
dynamicCompetitor.getColor(), dynamicCompetitor.getEmail(), dynamicCompetitor.getFlagImage(),
|
||||
dynamicCompetitor.getTeam(), dynamicCompetitor.getBoat(), dynamicCompetitor.getTimeOnTimeFactor(),
|
||||
dynamicCompetitor.getTimeOnDistanceAllowancePerNauticalMile());
|
||||
dynamicCompetitor.getTimeOnDistanceAllowancePerNauticalMile(), dynamicCompetitor.getSearchTag());
|
||||
}
|
||||
logoutput.append("Received " + competitorStore.size() + " NEW competitors\n");
|
||||
|
||||
|
||||
+78
-76
@@ -1,76 +1,78 @@
|
||||
package com.sap.sailing.server.operationaltransformation;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Nationality;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.Duration;
|
||||
|
||||
public class UpdateCompetitor extends AbstractRacingEventServiceOperation<Competitor> {
|
||||
private static final long serialVersionUID = 1172181354320184263L;
|
||||
private final String idAsString;
|
||||
private final String newName;
|
||||
private final Color newDisplayColor;
|
||||
private final String newSailId;
|
||||
private final String newEmail;
|
||||
private final Nationality newNationality;
|
||||
private final URI newTeamImageUri;
|
||||
private final URI newFlagImageUri;
|
||||
private final Double timeOnTimeFactor;
|
||||
private final Duration timeOnDistanceAllowancePerNauticalMile;
|
||||
|
||||
/**
|
||||
* @param idAsString
|
||||
* Identified the competitor to update
|
||||
* @param newNationality
|
||||
* if <code>null</code>, the competitor obtains the "NONE" nationality, usually represented by a white
|
||||
* flag
|
||||
*/
|
||||
public UpdateCompetitor(String idAsString, String newName, Color newDisplayColor, String newEmail,
|
||||
String newSailId, Nationality newNationality, URI newTeamImageUri, URI newFlagImageUri,
|
||||
Double timeOnTimeFactor, Duration timeOnDistanceAllowancePerNauticalMile) {
|
||||
super();
|
||||
this.idAsString = idAsString;
|
||||
this.newName = newName;
|
||||
this.newDisplayColor = newDisplayColor;
|
||||
this.newSailId = newSailId;
|
||||
this.newNationality = newNationality;
|
||||
this.newTeamImageUri = newTeamImageUri;
|
||||
this.newEmail = newEmail;
|
||||
this.newFlagImageUri = newFlagImageUri;
|
||||
this.timeOnTimeFactor = timeOnTimeFactor;
|
||||
this.timeOnDistanceAllowancePerNauticalMile = timeOnDistanceAllowancePerNauticalMile;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link #internalApplyTo(RacingEventService)} already replicates the effects
|
||||
*/
|
||||
@Override
|
||||
public boolean isRequiresExplicitTransitiveReplication() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Competitor internalApplyTo(RacingEventService toState) throws Exception {
|
||||
Competitor result = toState.getBaseDomainFactory().getCompetitorStore()
|
||||
.updateCompetitor(idAsString, newName, newDisplayColor, newEmail, newSailId, newNationality,
|
||||
newTeamImageUri, newFlagImageUri, timeOnTimeFactor, timeOnDistanceAllowancePerNauticalMile);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RacingEventServiceOperation<?> transformClientOp(RacingEventServiceOperation<?> serverOp) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RacingEventServiceOperation<?> transformServerOp(RacingEventServiceOperation<?> clientOp) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
package com.sap.sailing.server.operationaltransformation;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Nationality;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.Duration;
|
||||
|
||||
public class UpdateCompetitor extends AbstractRacingEventServiceOperation<Competitor> {
|
||||
private static final long serialVersionUID = 1172181354320184263L;
|
||||
private final String idAsString;
|
||||
private final String newName;
|
||||
private final Color newDisplayColor;
|
||||
private final String newSailId;
|
||||
private final String newEmail;
|
||||
private final Nationality newNationality;
|
||||
private final URI newTeamImageUri;
|
||||
private final URI newFlagImageUri;
|
||||
private final Double timeOnTimeFactor;
|
||||
private final Duration timeOnDistanceAllowancePerNauticalMile;
|
||||
private final String newSearchTag;
|
||||
|
||||
/**
|
||||
* @param idAsString
|
||||
* Identified the competitor to update
|
||||
* @param newNationality
|
||||
* if <code>null</code>, the competitor obtains the "NONE" nationality, usually represented by a white
|
||||
* flag
|
||||
*/
|
||||
public UpdateCompetitor(String idAsString, String newName, Color newDisplayColor, String newEmail,
|
||||
String newSailId, Nationality newNationality, URI newTeamImageUri, URI newFlagImageUri,
|
||||
Double timeOnTimeFactor, Duration timeOnDistanceAllowancePerNauticalMile, String newSearchTag) {
|
||||
super();
|
||||
this.idAsString = idAsString;
|
||||
this.newName = newName;
|
||||
this.newDisplayColor = newDisplayColor;
|
||||
this.newSailId = newSailId;
|
||||
this.newNationality = newNationality;
|
||||
this.newTeamImageUri = newTeamImageUri;
|
||||
this.newEmail = newEmail;
|
||||
this.newFlagImageUri = newFlagImageUri;
|
||||
this.timeOnTimeFactor = timeOnTimeFactor;
|
||||
this.timeOnDistanceAllowancePerNauticalMile = timeOnDistanceAllowancePerNauticalMile;
|
||||
this.newSearchTag = newSearchTag;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link #internalApplyTo(RacingEventService)} already replicates the effects
|
||||
*/
|
||||
@Override
|
||||
public boolean isRequiresExplicitTransitiveReplication() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Competitor internalApplyTo(RacingEventService toState) throws Exception {
|
||||
Competitor result = toState.getBaseDomainFactory().getCompetitorStore()
|
||||
.updateCompetitor(idAsString, newName, newDisplayColor, newEmail, newSailId, newNationality,
|
||||
newTeamImageUri, newFlagImageUri, timeOnTimeFactor, timeOnDistanceAllowancePerNauticalMile, newSearchTag);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RacingEventServiceOperation<?> transformClientOp(RacingEventServiceOperation<?> serverOp) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RacingEventServiceOperation<?> transformServerOp(RacingEventServiceOperation<?> clientOp) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user