added a searchTag attribute to 'Competitor' to make it possible to 'tag' competitors for an easier search later on

This commit is contained in:
fmittag committed 2016-04-14 13:44:37 -04:00
1 parent a60ca6ff8c
commit ef7d84bd81
75 files changed
+6602 -6488

No files matched your search

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