Merge remote-tracking branch 'origin/master' into foiling

Conflicts:
	java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/AbstractGPSFixStoreTest.java
	java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java
	java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java
This commit is contained in:
Steffen Schaefer committed 2016-04-21 09:23:17 +02:00
commit 526bfb32b5
345 files changed
+27141 -8483

No files matched your search

@@ -11,6 +11,8 @@
<booleanAttribute key="default_auto_start" value="true"/>
<intAttribute key="default_start_level" value="4"/>
<booleanAttribute key="includeOptional" value="true"/>
<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.pde.ui.launcher.PDESourceLookupDirector"/>
<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;sourceLookupDirector&gt;&#13;&#10;&lt;sourceContainers duplicates=&quot;false&quot;&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;classpathContainer path=&amp;quot;org.eclipse.jdt.launching.JRE_CONTAINER&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.classpathContainer&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;default/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.default&quot;/&gt;&#13;&#10;&lt;/sourceContainers&gt;&#13;&#10;&lt;/sourceLookupDirector&gt;&#13;&#10;"/>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
@@ -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;
}
}
@@ -561,7 +561,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.dataImportLock = new DataImportLockWithProgress();
@@ -2541,7 +2542,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;
}
}