Merge branch 'design2015' of ssh://sapsailing.com/home/trac/git into design2015

# By fmittag
# Via fmittag
* 'design2015' of ssh://sapsailing.com/home/trac/git:
  fix for Bug 2515 - Height of leaderboard competitor charts depends on height of leaderboard which is too tall with long leaderboard / many competitors
  added a link to jobs.sapsailing.com in the footer
  added racecommittee app tutorial for race officer
  added a load/store test for flagImage attribute of competitor
  added replication test for flagImage attribute of competitor
  added flagImage attribute of competitor to rest api
  added flagImageUrl as new attribute on competitor to enable custom flags (e.g. club flags) instead of the nation flags
  first appearance of a club flag in the leaderboard
This commit is contained in:
Papick Garcia Taboada committed 2015-04-23 14:59:40 +02:00
commit 9f70902adc
76 files changed
+326 -166

No files matched your search

Binary file not shown.
@@ -33,6 +33,8 @@ public interface CompetitorDTO extends Serializable, MappableToDevice {
*/
CompetitorDTO getCompetitorFromPrevious(LeaderboardDTO previousVersion);
String getFlagImageURL();
String getImageURL();
}
@@ -24,11 +24,12 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
private String idAsString;
private BoatClassDTO boatClass;
private String imageURL;
private String flagImageURL;
public CompetitorDTOImpl() {}
public CompetitorDTOImpl(String name, Color color, String email, String twoLetterIsoCountryCode, String threeLetterIocCountryCode,
String countryName, String sailID, String idAsString, String imageURL, BoatClassDTO boatClass) {
String countryName, String sailID, String idAsString, String imageURL, String flagImageURL, BoatClassDTO boatClass) {
super(name);
this.color = color;
this.email = email;
@@ -37,8 +38,9 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
this.countryName = countryName;
this.sailID = sailID;
this.idAsString = idAsString;
this.boatClass = boatClass;
this.imageURL = imageURL;
this.flagImageURL = flagImageURL;
this.boatClass = boatClass;
}
@Override
@@ -52,6 +54,7 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
result = prime * result + ((email == null) ? 0 : email.hashCode());
result = prime * result + ((threeLetterIocCountryCode == null) ? 0 : threeLetterIocCountryCode.hashCode());
result = prime * result + ((imageURL == null) ? 0 : imageURL.hashCode());
result = prime * result + ((flagImageURL == null) ? 0 : flagImageURL.hashCode());
return result;
}
@@ -99,6 +102,11 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
return false;
} else if (!imageURL.equals(other.imageURL))
return false;
if (flagImageURL == null) {
if (other.flagImageURL != null)
return false;
} else if (!flagImageURL.equals(other.flagImageURL))
return false;
return true;
}
@@ -127,6 +135,11 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
return imageURL;
}
@Override
public String getFlagImageURL() {
return flagImageURL;
}
@Override
public String getIdAsString() {
return idAsString;
@@ -105,6 +105,12 @@ public class PreviousCompetitorDTOImpl implements CompetitorDTO {
" need to be replaced by an object of "+CompetitorDTOImpl.class.getName()+" after deserialization");
}
@Override
public String getFlagImageURL() {
throw new RuntimeException("Internal error. Objects of type "+PreviousCompetitorDTOImpl.class.getName()+
" need to be replaced by an object of "+CompetitorDTOImpl.class.getName()+" after deserialization");
}
@Override
public CompetitorDTO getCompetitorFromPrevious(LeaderboardDTO previousVersion) {
return previousVersion.competitors.get(indexInPreviousCompetitorList);
@@ -40,7 +40,7 @@ public class AbstractGPSFixStoreTest {
protected final DeviceIdentifier device = new SmartphoneImeiIdentifier("a");
protected RaceLog raceLog;
protected GPSFixStore store;
protected final Competitor comp = DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null);
protected final Competitor comp = DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null, null);
protected final Mark mark = DomainFactory.INSTANCE.getOrCreateMark("mark");
private final AbstractLogEventAuthor author = new LogEventAuthorImpl("author", 0);
@@ -168,7 +168,7 @@ public class CreateAndTrackWithRaceLogTest {
assertFalse(raceLog.isEmpty());
// add a mapping and one fix in, one out of mapping
Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null, null);
Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null, null, null);
DeviceIdentifier dev1 = new SmartphoneImeiIdentifier("dev1");
raceLog.add(factory.createDeviceCompetitorMappingEvent(t(), author, dev1, comp1, 0, t(0), t(10)));
addFixes0(dev1);
@@ -202,7 +202,7 @@ public class CreateAndTrackWithRaceLogTest {
adapter.denoteRaceForRaceLogTracking(service, leaderboard, column, fleet, "race");
// add a mapping and one fix in, one out of mapping
Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null, null);
Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", null, null, null, null, null);
DeviceIdentifier dev1 = new SmartphoneImeiIdentifier("dev1");
regattaLog.add(new RegattaLogDeviceCompetitorMappingEventImpl(t(), author, t(), UUID.randomUUID(), comp1, dev1,
t(0), t(10)));
@@ -49,7 +49,7 @@ public class TrackedRaceLoadsFixesTest extends AbstractGPSFixStoreTest {
@Test
public void areFixesStoredInDb() throws TransformationException, NoCorrespondingServiceRegisteredException,
InterruptedException {
Competitor comp2 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp2", "comp2", null, null, null, null);
Competitor comp2 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp2", "comp2", null, null, null, null, null);
Mark mark2 = DomainFactory.INSTANCE.getOrCreateMark("mark2");
DeviceIdentifier device2 = new SmartphoneImeiIdentifier("imei2");
DeviceIdentifier device3 = new SmartphoneImeiIdentifier("imei3");
@@ -52,7 +52,7 @@ public class MultiLogAnalyzerTest {
private AbstractLogEventAuthor author;
private static Competitor createCompetitor(int n) {
return new CompetitorImpl(n, n + "", null, null, null, null);
return new CompetitorImpl(n, n + "", null, null, null, null, null);
}
private static DeviceIdentifier createDevice() {
@@ -22,8 +22,8 @@ import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class DeviceMappingFinderTest extends AbstractRaceLogTrackingTest {
private final Competitor competitor = new CompetitorImpl("comp", "Comp", null, null, null, null);
private final Competitor competitor2 = new CompetitorImpl("comp2", "Comp2", null, null, null, null);
private final Competitor competitor = new CompetitorImpl("comp", "Comp", null, null, null, null, null);
private final Competitor competitor2 = new CompetitorImpl("comp2", "Comp2", null, null, null, null, null);
private final DeviceIdentifier device = new SmartphoneImeiIdentifier("imei");
private int time = 0;
@@ -1,5 +1,7 @@
package com.sap.sailing.domain.base;
import java.net.URI;
import com.sap.sse.common.Color;
import com.sap.sse.common.IsManagedByCache;
import com.sap.sse.common.Named;
@@ -18,7 +20,13 @@ public interface Competitor extends Named, WithID, IsManagedByCache<SharedDomain
String getEmail();
boolean hasEmail();
/**
* an alternative flag image (per default the nation flag
* @return the URI of the flag image
*/
URI getFlagImage();
/**
* Adds a listener to this competitor. The listener is also added to the boat and the team for changes.
* Adding a listener that is already part of this competitor's listeners set remains without effect.
@@ -1,6 +1,7 @@
package com.sap.sailing.domain.base;
import java.io.Serializable;
import java.net.URI;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicTeam;
@@ -26,5 +27,5 @@ public interface CompetitorFactory {
*/
boolean isCompetitorToUpdateDuringGetOrCreate(Competitor result);
Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat);
Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, URI flagImageURI, DynamicTeam team, DynamicBoat boat);
}
@@ -64,7 +64,7 @@ public interface CompetitorStore extends CompetitorFactory {
* If no competitor with the ID requested is found, the call is a no-op, doing nothing, not even throwing an exception.
*/
Competitor updateCompetitor(String idAsString, String newName, Color newDisplayColor, String newEmail, String newSailId,
Nationality newNationality, URI newTeamImageUri);
Nationality newNationality, URI newTeamImageUri, URI newFlagImageUri);
CompetitorDTO convertToCompetitorDTO(Competitor c);
@@ -3,6 +3,7 @@ package com.sap.sailing.domain.base.impl;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.net.URI;
import java.util.HashSet;
import java.util.Set;
@@ -21,14 +22,16 @@ public class CompetitorImpl implements DynamicCompetitor {
private Color color;
private transient Set<CompetitorChangeListener> listeners;
private String email;
private URI flagImage;
public CompetitorImpl(Serializable id, String name, Color color, String email, DynamicTeam team, DynamicBoat boat) {
public CompetitorImpl(Serializable id, String name, Color color, String email, URI flagImage, DynamicTeam team, DynamicBoat boat) {
this.id = id;
this.name = name;
this.team = team;
this.boat = boat;
this.color = color;
this.email = email;
this.flagImage = flagImage;
this.listeners = new HashSet<CompetitorChangeListener>();
}
@@ -75,7 +78,7 @@ public class CompetitorImpl implements DynamicCompetitor {
@Override
public Competitor resolve(SharedDomainFactory domainFactory) {
Competitor result = domainFactory.getOrCreateCompetitor(getId(), getName(), getColor(), getEmail(), getTeam(), getBoat());
Competitor result = domainFactory.getOrCreateCompetitor(getId(), getName(), getColor(), getEmail(), getFlagImage(), getTeam(), getBoat());
return result;
}
@@ -134,4 +137,14 @@ public class CompetitorImpl implements DynamicCompetitor {
public boolean hasEmail(){
return email != null && !email.isEmpty();
}
@Override
public URI getFlagImage() {
return flagImage;
}
@Override
public void setFlagImage(URI flagImage) {
this.flagImage = flagImage;
}
}
@@ -1,5 +1,7 @@
package com.sap.sailing.domain.base.impl;
import java.net.URI;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.Renamable;
import com.sap.sse.common.Color;
@@ -12,4 +14,6 @@ public interface DynamicCompetitor extends Competitor, Renamable {
void setColor(Color displayColor);
void setEmail(String email);
void setFlagImage(URI flagImage);
}
@@ -4,6 +4,7 @@ import java.io.Serializable;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
import java.net.URI;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
@@ -332,11 +333,11 @@ public class SharedDomainFactoryImpl implements SharedDomainFactory {
}
@Override
public Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat) {
public Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, URI flagImage, DynamicTeam team, DynamicBoat boat) {
if (logger.isLoggable(Level.FINEST)) {
logger.log(Level.FINEST, "getting or creating competitor "+name+" with ID "+competitorId+" in domain factory "+this);
}
return getCompetitorStore().getOrCreateCompetitor(competitorId, name, displayColor, email, team, boat);
return getCompetitorStore().getOrCreateCompetitor(competitorId, name, displayColor, email, flagImage, team, boat);
}
@Override
@@ -68,8 +68,8 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
listeners.remove(listener);
}
private Competitor createCompetitor(Serializable id, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat) {
Competitor result = new CompetitorImpl(id, name, displayColor, email, team, boat);
private Competitor createCompetitor(Serializable id, String name, Color displayColor, String email, URI flagImage, DynamicTeam team, DynamicBoat boat) {
Competitor result = new CompetitorImpl(id, name, displayColor, email, flagImage, team, boat);
addNewCompetitor(id, result);
if (logger.isLoggable(Level.FINEST)) {
logger.log(Level.FINEST, "Created competitor "+name+" with ID "+id, new Exception("Here is where it happened"));
@@ -93,21 +93,21 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
}
@Override
public Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat) {
public Competitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, URI flagImage, DynamicTeam team, DynamicBoat boat) {
Competitor result = getExistingCompetitorById(competitorId); // avoid synchronization for successful read access
if (result == null) {
LockUtil.lockForWrite(lock);
try {
result = getExistingCompetitorById(competitorId); // try again, now while holding the write lock
if (result == null) {
result = createCompetitor(competitorId, name, displayColor, email, team, boat);
result = createCompetitor(competitorId, name, displayColor, email, flagImage, team, boat);
}
} finally {
LockUtil.unlockAfterWrite(lock);
}
} else if (isCompetitorToUpdateDuringGetOrCreate(result)) {
updateCompetitor(result.getId().toString(), name, displayColor, email, boat.getSailID(), team.getNationality(),
team.getImage());
team.getImage(), flagImage);
competitorNoLongerToUpdateDuringGetOrCreate(result);
}
return result;
@@ -192,7 +192,7 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
@Override
public Competitor updateCompetitor(String idAsString, String newName, Color newDisplayColor, String newEmail, String newSailId,
Nationality newNationality, URI newTeamImageUri) {
Nationality newNationality, URI newTeamImageUri, URI newFlagImageUri) {
DynamicCompetitor competitor = (DynamicCompetitor) getExistingCompetitorByIdAsString(idAsString);
if (competitor != null) {
LockUtil.lockForWrite(lock);
@@ -200,6 +200,7 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
competitor.setName(newName);
competitor.setColor(newDisplayColor);
competitor.setEmail(newEmail);
competitor.setFlagImage(newFlagImageUri);
competitor.getBoat().setSailId(newSailId);
competitor.getTeam().setNationality(newNationality);
competitor.getTeam().setImage(newTeamImageUri);
@@ -233,7 +234,9 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
competitorDTO = new CompetitorDTOImpl(c.getName(), c.getColor(), c.getEmail(), countryCode == null ? ""
: countryCode.getTwoLetterISOCode(), countryCode == null ? ""
: countryCode.getThreeLetterIOCCode(), countryCode == null ? "" : countryCode.getName(),
c.getBoat().getSailID(), c.getId().toString(), c.getTeam().getImage() == null ? null : c.getTeam().getImage().toString(),
c.getBoat().getSailID(), c.getId().toString(),
c.getTeam().getImage() == null ? null : c.getTeam().getImage().toString(),
c.getFlagImage() == null ? null : c.getFlagImage().toString(),
new BoatClassDTO(c.getBoat().getBoatClass()
.getName(), c.getBoat().getBoatClass().getDisplayName(), c.getBoat().getBoatClass().getHullLength().getMeters()));
weakCompetitorDTOCache.put(c, competitorDTO);
@@ -124,7 +124,7 @@ public class DomainFactoryImpl implements DomainFactory {
teamMembers.add(person);
}
DynamicTeam team = new TeamImpl(competitor.getName(), teamMembers, /* coach */ null);
result = competitorStore.getOrCreateCompetitor(competitor.getID(), competitor.getName(), null /*displayColor*/, null /*email*/, team, boat);
result = competitorStore.getOrCreateCompetitor(competitor.getID(), competitor.getName(), null /*displayColor*/, null /*email*/, null, team, boat);
}
return result;
}
@@ -140,7 +140,7 @@ public class DomainFactoryImpl implements DomainFactory {
}
DynamicTeam team = new TeamImpl(competitor.getName(), teamMembers, /* coach */ null);
result = baseDomainFactory.getCompetitorStore().getOrCreateCompetitor(getCompetitorID(competitor.getBoatID(), raceId, boatClass),
competitor.getName(), null /*displayColor*/, null /*email*/, team, boat);
competitor.getName(), null /*displayColor*/, null /*email*/, null, team, boat);
return result;
}
@@ -233,7 +233,7 @@ public class LeaderboardDTODiffingTest {
public void testCompetitorListChange() {
newVersion.competitors = new ArrayList<CompetitorDTO>(newVersion.competitors); // clone competitor list so it's not identical to that of previous version
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "someone@nobody.de", "DE", "GER", "Germany", "GER 1234", "912p09871203987",
/* imageURL */ null, new BoatClassDTO("505", 5.05));
/* imageURL */ null, /* flagImageURL */ null, new BoatClassDTO("505", 5.05));
newVersion.competitors.add(13, somebodyNew); // insert a competitor; this should mess up all others' indexes; check if this works
CompetitorDTO wolfgang = getPreviousCompetitorByName("HUNGER +JESS");
newVersion.competitors.remove(wolfgang);
@@ -253,7 +253,7 @@ public class LeaderboardDTODiffingTest {
newVersion.setSuppressedCompetitors(newSuppressedCompetitors);
newVersion.competitors = new ArrayList<CompetitorDTO>(newVersion.competitors); // clone competitor list so it's not identical to that of previous version
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "someone@nobody.de", "DE", "GER", "Germany", "GER 1234", "912p09871203987",
/* imageURL */ null, new BoatClassDTO("505", 5.05));
/* imageURL */ null, /* flagImageURL */ null, new BoatClassDTO("505", 5.05));
newVersion.setSuppressed(newVersion.competitors.get(13), true); // suppress an existing competitor; compaction should reduce this to a single number only
newVersion.setSuppressed(somebodyNew, true); // check that mixed mode with existing and new competitors works as well
List<CompetitorDTO> newSuppressedCompetitorsBeforeStripping = new ArrayList<CompetitorDTO>();
@@ -275,7 +275,7 @@ public class LeaderboardDTODiffingTest {
public void testDisplayNameChange() {
newVersion.competitors = new ArrayList<CompetitorDTO>(newVersion.competitors); // clone competitor list so it's not identical to that of previous version
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "someone@nobody.de", "DE", "GER", "Germany", "GER 1234", "912p09871203987",
/* imageURL */ null, new BoatClassDTO("505", 5.05));
/* imageURL */ null, /* flagImageURL */ null, new BoatClassDTO("505", 5.05));
newVersion.competitors.add(somebodyNew);
newVersion.competitorDisplayNames = new HashMap<CompetitorDTO, String>(newVersion.competitorDisplayNames);
newVersion.competitorDisplayNames.put(newVersion.competitors.get(13), "Humba");
@@ -304,7 +304,7 @@ public class LeaderboardDTODiffingTest {
newVersion.setCompetitorsFromBestToWorst(r9, newOrdering);
newVersion.competitors = new ArrayList<CompetitorDTO>(newVersion.competitors); // clone competitor list so it's not identical to that of previous version
CompetitorDTO somebodyNew = new CompetitorDTOImpl("Someone New", Color.RED, "someone@nobody.de", "DE", "GER", "Germany", "GER 1234", "912p09871203987",
/* imageURL */ null, new BoatClassDTO("505", 5.05));
/* imageURL */ null, /* flagImageURL */ null, new BoatClassDTO("505", 5.05));
newVersion.competitors.add(somebodyNew);
newOrdering.add(somebodyNew);
CompetitorDTO formerRank13 = newOrdering.remove(13);
@@ -15,7 +15,7 @@ import com.sap.sse.common.Color;
public abstract class AbstractLeaderboardTest {
public static CompetitorImpl createCompetitor(String competitorName) {
return new CompetitorImpl(competitorName, competitorName, Color.RED, null, new TeamImpl("STG", Collections.singleton(
return new CompetitorImpl(competitorName, competitorName, Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl(competitorName, new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous "+competitorName)),
new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
@@ -24,7 +24,7 @@ public abstract class AbstractLeaderboardTest {
}
public static Competitor createCompetitor(String competitorName, CompetitorFactory competitorFactory) {
return competitorFactory.getOrCreateCompetitor(competitorName, competitorName, Color.RED, "someone@nobody.de", new TeamImpl("STG", Collections.singleton(
return competitorFactory.getOrCreateCompetitor(competitorName, competitorName, Color.RED, "someone@nobody.de", null, new TeamImpl("STG", Collections.singleton(
new PersonImpl(competitorName, new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous "+competitorName)),
new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
@@ -33,7 +33,7 @@ public abstract class AbstractLeaderboardTest {
}
public static CompetitorImpl createCompetitor(String competitorName, Serializable id) {
return new CompetitorImpl(id, competitorName, Color.RED, null, new TeamImpl("STG", Collections.singleton(
return new CompetitorImpl(id, competitorName, Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl(competitorName, new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous "+competitorName)),
new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
@@ -157,7 +157,7 @@ public class LeaderboardCourseChangeTest {
Set<Competitor> competitors = new HashSet<>();
DynamicBoat mockedBoat = mock(DynamicBoat.class);
when(mockedBoat.getBoatClass()).thenReturn(boatClass);
competitors.add(new CompetitorImpl(UUID.randomUUID(), "TestCompetitor", Color.BLACK, null,
competitors.add(new CompetitorImpl(UUID.randomUUID(), "TestCompetitor", Color.BLACK, null, null,
mock(DynamicTeam.class), mockedBoat));
return competitors;
}
@@ -188,7 +188,7 @@ public class OfflineSerializationTest extends AbstractSerializationTest {
DomainFactory senderDomainFactory = new DomainFactoryImpl();
DomainFactory receiverDomainFactory = new DomainFactoryImpl();
String competitorName = "Tina Maximiliane Lutz";
Competitor sendersCompetitor1 = new CompetitorImpl(123, competitorName, Color.RED, null, new TeamImpl("STG", Collections.singleton(
Competitor sendersCompetitor1 = new CompetitorImpl(123, competitorName, Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl(competitorName, senderDomainFactory.getOrCreateNationality("GER"),
/* dateOfBirth */ null, "This is famous "+competitorName)),
new PersonImpl("Rigo van Maas", senderDomainFactory.getOrCreateNationality("GER"),
@@ -117,7 +117,7 @@ public abstract class StoredTrackBasedTest extends TrackBasedTest {
for (String competitorName : getCompetitorNamesOfStoredTracks(KIELER_WOCHE)) {
DynamicPerson p = new PersonImpl(competitorName, /* nationality */ null, /* dateOfBirth */ null, /* description */ null);
DynamicTeam t = new TeamImpl(competitorName, Collections.singleton(p), /* coach */ null);
Competitor c = new CompetitorImpl(competitorName, competitorName, Color.RED, null, t, new BoatImpl(competitorName,
Competitor c = new CompetitorImpl(competitorName, competitorName, Color.RED, null, null, t, new BoatImpl(competitorName,
new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null));
DynamicGPSFixTrack<Competitor, GPSFixMoving> track = readTrack(c, KIELER_WOCHE);
if (track != null) {
@@ -34,7 +34,7 @@ public class TackTest extends StoredTrackBasedTestWithTrackedRace {
@Override
@Before
public void setUp() {
competitor = new CompetitorImpl(123, "Wolfgang Hunger", Color.RED, null, new TeamImpl("STG", Collections.singleton(
competitor = new CompetitorImpl(123, "Wolfgang Hunger", Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl("Wolfgang Hunger", new NationalityImpl("GER"),
/* dateOfBirth */null, "This is famous Wolfgang Hunger")), new PersonImpl("Rigo van Maas",
new NationalityImpl("NED"),
@@ -60,7 +60,7 @@ public abstract class TrackBasedTest {
}
public static CompetitorImpl createCompetitor(String competitorName) {
return new CompetitorImpl(UUID.randomUUID(), competitorName, Color.RED, null, new TeamImpl("STG", Collections.singleton(
return new CompetitorImpl(UUID.randomUUID(), competitorName, Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl(competitorName, new NationalityImpl("GER"),
/* dateOfBirth */null, "This is famous " + competitorName)), new PersonImpl("Rigo van Maas",
new NationalityImpl("NED"),
@@ -270,7 +270,7 @@ public class WindTest {
Waypoint w1 = domainFactory.createWaypoint(startFinish, /*passingInstruction*/ null);
Waypoint w2 = domainFactory.createWaypoint(top, /*passingInstruction*/ null);
Waypoint w3 = domainFactory.createWaypoint(startFinish, /*passingInstruction*/ null);
Competitor competitor = new CompetitorImpl(123, "Test Competitor", Color.RED, null, new TeamImpl("STG", Collections.singleton(
Competitor competitor = new CompetitorImpl(123, "Test Competitor", Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl("Test Competitor", new NationalityImpl("GER"),
/* dateOfBirth */null, "This is famous " + "Test Competitor")), new PersonImpl("Rigo van Maas",
new NationalityImpl("NED"),
@@ -39,9 +39,9 @@ import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class AbstractMockedRaceMarkPassingTest {
protected Competitor ron = new CompetitorImpl("Ron", "Ron", null, null, null, null);
protected Competitor tom = new CompetitorImpl("Tom", "Tom", null, null, null, null);
protected Competitor ben = new CompetitorImpl("Ben", "Ben", null, null, null, null);
protected Competitor ron = new CompetitorImpl("Ron", "Ron", null, null, null, null, null);
protected Competitor tom = new CompetitorImpl("Tom", "Tom", null, null, null, null, null);
protected Competitor ben = new CompetitorImpl("Ben", "Ben", null, null, null, null, null);
protected Mark m = new MarkImpl("Mark");
protected Mark gate1 = new MarkImpl("Gate1");
@@ -258,7 +258,7 @@ public class DomainFactoryImpl implements DomainFactory {
}
DynamicTeam team = getOrCreateTeam(name, nationality, competitorId);
DynamicBoat boat = new BoatImpl(shortName, boatClass, shortName);
result = competitorStore.getOrCreateCompetitor(competitorId, name, null /*displayColor*/, null /*email*/, team, boat);
result = competitorStore.getOrCreateCompetitor(competitorId, name, null /*displayColor*/, null /*email*/, null /*flagImag */, team, boat);
}
return result;
}
@@ -1,6 +1,7 @@
package com.sap.sailing.domain.base.impl;
import java.io.Serializable;
import java.net.URI;
import com.sap.sailing.domain.base.CompetitorStore;
import com.sap.sse.common.Color;
@@ -10,7 +11,8 @@ public interface DynamicCompetitorStore extends CompetitorStore {
DynamicCompetitor getExistingCompetitorById(Serializable competitorId);
@Override
DynamicCompetitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, DynamicTeam team, DynamicBoat boat);
DynamicCompetitor getOrCreateCompetitor(Serializable competitorId, String name, Color displayColor, String email, URI flagImage,
DynamicTeam team, DynamicBoat boat);
@Override
Iterable<? extends DynamicCompetitor> getCompetitors();
@@ -1,5 +1,7 @@
package com.sap.sailing.domain.tracking.impl;
import java.net.URI;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorChangeListener;
@@ -82,6 +84,11 @@ public class DummyMarkPassingWithTimePointOnly implements MarkPassing {
public boolean hasEmail() {
return false;
}
@Override
public URI getFlagImage() {
return null;
}
};
}
}
@@ -163,7 +163,7 @@ public class PolarSheetGenerationServiceTest {
waypoints.add(new WaypointImpl(null));
waypoints.add(new WaypointImpl(null));
ArrayList<Competitor> competitors = new ArrayList<Competitor>();
Competitor competitor = new CompetitorImpl(UUID.randomUUID(), "Hans Frantz", Color.RED, null,
Competitor competitor = new CompetitorImpl(UUID.randomUUID(), "Hans Frantz", Color.RED, null, null,
new TeamImpl("SAP", null, null), new BoatImpl("Schnelle Forelle", forelle, "GER000"));
competitors.add(competitor);
RaceDefinition race = new RaceDefinitionImpl("Forelle1", new CourseImpl("ForelleCourse", waypoints), forelle, competitors);
@@ -121,6 +121,7 @@ public interface TextMessages extends Messages {
String eventRegattaRacesLegendVideo();
String eventRegattaRacesLegendAudio();
String eventSponsorsTitle();
String footerJobs();
String footerCopyright();
String footerLanguage();
String footerLegal();
@@ -110,8 +110,9 @@ eventRegattaRacesLegendWind=Wind Data
eventRegattaRacesLegendVideo=Video Stream
eventRegattaRacesLegendAudio=Audio Stream
eventSponsorsTitle=Event Sponsorships
footerJobs=Jobs
footerCopyright=\u00A9 2015 SAP Sailing Analytics
footerLanguage=SAP Sailing offered in
footerLanguage=SAP Sailing in
footerLegal=Legal Disclosure
footerPrivacy=Privacy
footerFeedback=Feedback
@@ -110,6 +110,7 @@ eventRegattaRacesLegendWind=Winddaten
eventRegattaRacesLegendVideo=Video Stream
eventRegattaRacesLegendAudio=Audio Stream
eventSponsorsTitle=Veranstaltungssponsoren
footerJobs=Jobs
footerCopyright=\u00A9 2015 SAP Sailing Analytics
footerLanguage=SAP Sailing in
footerLegal=Impressum
@@ -9,7 +9,7 @@
<!-- Website footer-->
<footer class="{local_res.css.sitefooter}">
<div class="{res.mediaCss.grid}">
<div class="{res.mediaCss.small12} {res.mediaCss.medium8} {res.mediaCss.columns}">
<div class="{res.mediaCss.small12} {res.mediaCss.medium9} {res.mediaCss.columns}">
<div class="{local_res.css.sitefooter_copyright}">
<ui:text from='{i18n.footerCopyright}' />
</div>
@@ -20,6 +20,9 @@
<a href="http://www.sap.com/about/legal/privacy.html" target="_blank" class="{local_res.css.sitefooter_links_link}">
<ui:text from='{i18n.footerPrivacy}' />
</a>
<a href="http://jobs.sapsailing.com" target="_blank" class="{local_res.css.sitefooter_links_link}">
<ui:text from='{i18n.footerJobs}'/>
</a>
<a href="mailto:sailing_analytics%40sap.com?subject=[SAP Sailing] Feedback" target="_blank" class="{local_res.css.sitefooter_links_link}">
<ui:text from='{i18n.footerFeedback}' />
</a>
@@ -28,11 +31,11 @@
</a>
</div>
</div>
<div ui:field="languageSelectionDiv" class="{res.mediaCss.small12} {res.mediaCss.medium4} {res.mediaCss.columns} {local_res.css.sitefooter_language}">
<div ui:field="languageSelectionDiv" class="{res.mediaCss.small12} {res.mediaCss.medium3} {res.mediaCss.columns} {local_res.css.sitefooter_language}">
<span><ui:text from='{i18n.footerLanguage}' />:</span>
<g:Anchor ui:field="changeLanguageLink" styleName="{local_res.css.sitefooter_language_link}" />
</div>
</div>
</footer>
</g:HTMLPanel>
</ui:UiBinder>
</ui:UiBinder>
@@ -41,6 +41,7 @@ public class CompetitorEditDialog extends DataEntryDialog<CompetitorDTO> {
private final TextBox sailId;
private final TextBox email;
private final StringMessages stringMessages;
private final TextBox flagImageURL;
private final URLFieldWithFileUpload imageUrlAndUploadComposite;
public CompetitorEditDialog(final StringMessages stringMessages, CompetitorDTO competitorToEdit,
@@ -122,6 +123,7 @@ public class CompetitorEditDialog extends DataEntryDialog<CompetitorDTO> {
}
}
this.sailId = createTextBox(competitorToEdit.getSailID());
this.flagImageURL = createTextBox(competitorToEdit.getFlagImageURL(), 100);
imageUrlAndUploadComposite = new URLFieldWithFileUpload(stringMessages);
imageUrlAndUploadComposite.setURL(competitorToEdit.getImageURL());
}
@@ -180,13 +182,13 @@ public class CompetitorEditDialog extends DataEntryDialog<CompetitorDTO> {
/* twoLetterIsoCountryCode */ null,
threeLetterIocCountryCode.getValue(threeLetterIocCountryCode.getSelectedIndex()),
/* countryName */ null, sailId.getText(), competitorToEdit.getIdAsString(),
imageUrlAndUploadComposite.getURL(), boatClass);
imageUrlAndUploadComposite.getURL(), flagImageURL.getText(), boatClass);
return result;
}
@Override
protected Widget getAdditionalWidget() {
Grid result = new Grid(7, 2);
Grid result = new Grid(8, 2);
result.setWidget(0, 0, new Label(stringMessages.name()));
result.setWidget(0, 1, name);
result.setWidget(1, 0, new Label(stringMessages.sailNumber()));
@@ -199,8 +201,10 @@ public class CompetitorEditDialog extends DataEntryDialog<CompetitorDTO> {
result.setWidget(4, 1, email);
result.setWidget(5, 0, new Label(stringMessages.boatClass()));
result.setWidget(5, 1, boatClassName);
result.setWidget(6, 0, new Label(stringMessages.imageURL()));
result.setWidget(6, 1, imageUrlAndUploadComposite);
result.setWidget(6, 0, new Label(stringMessages.flagImageURL()));
result.setWidget(6, 1, flagImageURL);
result.setWidget(7, 0, new Label(stringMessages.imageURL()));
result.setWidget(7, 1, imageUrlAndUploadComposite);
return result;
}
@@ -70,15 +70,23 @@ public class CompetitorTableWrapper<S extends SelectionModel<CompetitorDTO>> ext
SafeHtmlBuilder sb = new SafeHtmlBuilder();
ImageResourceRenderer renderer = new ImageResourceRenderer();
final String twoLetterIsoCountryCode = competitor.getTwoLetterIsoCountryCode();
final ImageResource flagImageResource;
if (twoLetterIsoCountryCode==null || twoLetterIsoCountryCode.isEmpty()) {
flagImageResource = FlagImageResolver.getEmptyFlagImageResource();
} else {
flagImageResource = FlagImageResolver.getFlagImageResource(twoLetterIsoCountryCode);
}
if (flagImageResource != null) {
sb.append(renderer.render(flagImageResource));
final String imageURL = competitor.getImageURL();
if (imageURL != null && !imageURL.isEmpty()) {
sb.appendHtmlConstant("<img src=\"" + imageURL + "\" width=\"18px\" height=\"12px\" title=\"" + competitor.getName() + "\"/>");
sb.appendHtmlConstant("&nbsp;");
} else {
final ImageResource flagImageResource;
if (twoLetterIsoCountryCode==null || twoLetterIsoCountryCode.isEmpty()) {
flagImageResource = FlagImageResolver.getEmptyFlagImageResource();
} else {
flagImageResource = FlagImageResolver.getFlagImageResource(twoLetterIsoCountryCode);
}
if (flagImageResource != null) {
sb.append(renderer.render(flagImageResource));
sb.appendHtmlConstant("&nbsp;");
}
}
sb.appendEscaped(competitor.getSailID());
return sb.toSafeHtml();
@@ -99,7 +107,7 @@ public class CompetitorTableWrapper<S extends SelectionModel<CompetitorDTO>> ext
return t.getColor();
}
});
Column<CompetitorDTO, SafeHtml> imageColumn = new Column<CompetitorDTO, SafeHtml>(new SafeHtmlCell()) {
@Override
public SafeHtml getValue(CompetitorDTO competitor) {
@@ -165,7 +173,7 @@ public class CompetitorTableWrapper<S extends SelectionModel<CompetitorDTO>> ext
table.addColumn(competitorNameColumn, stringMessages.name());
table.addColumn(boatClassColumn, stringMessages.boatClass());
table.addColumn(displayColorColumn, stringMessages.color());
table.addColumn(imageColumn, stringMessages.imageURL());
table.addColumn(imageColumn, stringMessages.image());
table.addColumn(competitorEMailColumn, stringMessages.email());
table.addColumn(competitorIdColumn, stringMessages.id());
}
@@ -37,7 +37,7 @@ public class CompetitorSelectionModel implements CompetitorSelectionProvider {
super();
this.hasMultiSelection = hasMultiSelection;
this.competitorsFilterSet = competitorsFilterSet;
this.allCompetitors = new HashSet<CompetitorDTO>();
this.allCompetitors = new LinkedHashSet<CompetitorDTO>();
this.selectedCompetitors = new LinkedHashSet<CompetitorDTO>();
this.listeners = new HashSet<CompetitorSelectionChangeListener>();
this.competitorsColorMap = new ColorMapImpl<CompetitorDTO>();
@@ -1055,7 +1055,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, c
String addRaces();
String withNamePrefix();
String pleaseSelectASeriesFirst();
String upcommingEventStartsInDays(@PluralCount(DefaultRule_0_1_2_n.class) int days);
String eventSharingShortText(String eventName, String venue, String dateString);
String eventSharingLongText(String eventName, String venue, String dateString, String url);
@@ -1066,6 +1065,9 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, c
String media();
String photos();
String videos();
String image();
String video();
String flagImageURL();
String imageURLs();
String videoURLs();
String sponsorImageURLs();
@@ -1047,6 +1047,9 @@ mediaNoContent=There are no photos or videos available yet.
media=Media
photos=Photos
videos=Videos
image=Image
video=Video
flagImageURL=Flag image URL
imageURLs=Image URLs
videoURLs=Video URLs
sponsorImageURLs=Sponsor Image URLs
@@ -1041,6 +1041,9 @@ mediaNoContent=Zur Zeit sind keine Videos oder Photos vorhanden.
media=Medien
photos=Fotos
videos=Videos
image=Bild
video=Video
flagImageURL=Flaggenbild-URL
imageURLs=Bilder-URLs
videoURLs=Video-URLs
sponsorImageURLs=Sponsorenlogo-URLs
@@ -1002,6 +1002,9 @@ mediaNoContent=There are no photos or videos available yet.
media=Media
photos=Photos
videos=Videos
image=Image
video=Video
flagImageURL=Flag image URL
imageURLs=Image URLs
videoURLs=Video URLs
sponsorImageURLs=Sponsor Image URLs
@@ -143,6 +143,9 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS
@SafeHtmlTemplates.Template("<div style=\"color:{0};\">")
SafeHtml cellFrameWithTextColor(String textColor);
@SafeHtmlTemplates.Template("<div style=\"color:{0};\">")
SafeHtml cellWithImageResourceAndText(ImageResource image, String text);
}
private static RaceColumnTemplates raceColumnTemplate = GWT.create(RaceColumnTemplates.class);
@@ -661,18 +664,26 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS
@Override
public void render(Context context, T object, SafeHtmlBuilder sb) {
ImageResourceRenderer renderer = new ImageResourceRenderer();
final String twoLetterIsoCountryCode = competitorFetcher.getCompetitor(object).getTwoLetterIsoCountryCode();
final ImageResource flagImageResource;
if (twoLetterIsoCountryCode==null || twoLetterIsoCountryCode.isEmpty()) {
flagImageResource = FlagImageResolver.getEmptyFlagImageResource();
} else {
flagImageResource = FlagImageResolver.getFlagImageResource(twoLetterIsoCountryCode);
}
if (flagImageResource != null) {
sb.append(renderer.render(flagImageResource));
CompetitorDTO competitor = competitorFetcher.getCompetitor(object);
final String twoLetterIsoCountryCode = competitor.getTwoLetterIsoCountryCode();
final String imageURL = competitor.getImageURL();
if (imageURL != null && !imageURL.isEmpty()) {
sb.appendHtmlConstant("<img src=\"" + imageURL + "\" width=\"18px\" height=\"12px\" title=\"" + competitor.getName() + "\"/>");
sb.appendHtmlConstant("&nbsp;");
} else {
final ImageResource flagImageResource;
if (twoLetterIsoCountryCode==null || twoLetterIsoCountryCode.isEmpty()) {
flagImageResource = FlagImageResolver.getEmptyFlagImageResource();
} else {
flagImageResource = FlagImageResolver.getFlagImageResource(twoLetterIsoCountryCode);
}
if (flagImageResource != null) {
sb.append(renderer.render(flagImageResource));
sb.appendHtmlConstant("&nbsp;");
}
}
sb.appendEscaped(competitorFetcher.getCompetitor(object).getSailID());
sb.appendEscaped(competitor.getSailID());
}
@Override
@@ -4520,13 +4520,15 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
DynamicBoat boat = new BoatImpl(competitor.getName() + " boat", boatClass, competitor.getSailID());
result = getBaseDomainFactory().convertToCompetitorDTO(
getBaseDomainFactory().getOrCreateCompetitor(UUID.randomUUID(), competitor.getName(),
competitor.getColor(), competitor.getEmail(), team, boat));
competitor.getColor(), competitor.getEmail(),
competitor.getFlagImageURL() == null ? null : new URI(competitor.getFlagImageURL()), team, boat));
} else {
result = getBaseDomainFactory().convertToCompetitorDTO(
getService().apply(
new UpdateCompetitor(competitor.getIdAsString(), competitor.getName(), competitor
.getColor(), competitor.getEmail(), competitor.getSailID(), nationality,
competitor.getImageURL()==null?null:new URI(competitor.getImageURL()))));
competitor.getFlagImageURL() == null ? null : new URI(competitor.getFlagImageURL()),
competitor.getImageURL() == null ? null : new URI(competitor.getImageURL()))));
}
return result;
}
@@ -82,7 +82,7 @@ public class StoreAndLoadDeviceIdentifierTest extends AbstractMongoDBTest {
private DeviceIdentifier storeAndLoad(DeviceIdentifier device, TypeBasedServiceFinderFactory forStoring, TypeBasedServiceFinderFactory forLoading) {
createFactories(forStoring);
Competitor c = new CompetitorImpl("a", "a", null, null, null, null);
Competitor c = new CompetitorImpl("a", "a", null, null, null, null, null);
raceLog.add(RaceLogEventFactory.INSTANCE.createDeviceCompetitorMappingEvent(now(), author, device,
c, 0, now(), now()));
@@ -174,7 +174,7 @@ public class StoreAndLoadRaceLogEventsTest extends AbstractMongoDBTest {
@Test
public void testStoreAndLoadDeviceCompetitorMappingEvent() {
DeviceIdentifier device = new SmartphoneImeiIdentifier("a");
Competitor mappedTo = DomainFactory.INSTANCE.getOrCreateCompetitor("abc", "abc", null, null, null, null);
Competitor mappedTo = DomainFactory.INSTANCE.getOrCreateCompetitor("abc", "abc", null, null, null, null, null);
TimePoint from = new MillisecondsTimePoint(20);
TimePoint to = new MillisecondsTimePoint(30);
RaceLogDeviceCompetitorMappingEvent expectedEvent = eventFactory.createDeviceCompetitorMappingEvent(
@@ -251,7 +251,7 @@ public class StoreAndLoadRaceLogEventsTest extends AbstractMongoDBTest {
public void testStoreAndLoadRegisterCompetitorEvent() {
RaceLogRegisterCompetitorEvent expectedEvent = eventFactory.createRegisterCompetitorEvent(
expectedEventTime, author, expectedEventTime, expectedId, expectedPassId,
DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null));
DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null, null));
DBObject dbObject = mongoFactory.storeRaceLogEntry(logIdentifier, expectedEvent);
RaceLogRegisterCompetitorEvent actualEvent = loadEvent(dbObject);
@@ -2,13 +2,17 @@ package com.sap.sailing.mongodb.test;
import static org.junit.Assert.assertEquals;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
import java.util.Collection;
import java.util.UUID;
import org.junit.Test;
import com.mongodb.DB;
import com.mongodb.MongoException;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.impl.DynamicCompetitor;
import com.sap.sailing.domain.persistence.DomainObjectFactory;
@@ -30,17 +34,35 @@ public class StoreCompetitorTest extends AbstractMongoDBTest {
}
@Test
public void testStoreAndUpdateCompetitor() {
public void testStoreAndUpdateCompetitor() throws URISyntaxException {
URI flagImageURI1 = new URI("http://www.sapsailing/flagimage1.jpg");
URI flagImageURI2 = new URI("http://www.sapsailing/flagimage2.jpg");
String competitorName1 = "Hasso";
String competitorName2 = "Hasso Plattner";
MongoObjectFactory mongoObjectFactory = PersistenceFactory.INSTANCE.getMongoObjectFactory(getMongoService());
DomainObjectFactory domainObjectFactory = PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), DomainFactory.INSTANCE);
dropCompetitorCollection();
DynamicCompetitor c = AbstractLeaderboardTest.createCompetitor("Hasso");
DynamicCompetitor c = AbstractLeaderboardTest.createCompetitor(competitorName1);
c.setFlagImage(flagImageURI1);
mongoObjectFactory.storeCompetitor(c);
assertEquals(1, Util.size(domainObjectFactory.loadAllCompetitors()));
c.setName("Hasso Plattner");
mongoObjectFactory.storeCompetitor(c);
assertEquals(1, Util.size(domainObjectFactory.loadAllCompetitors()));
Collection<Competitor> allCompetitors = domainObjectFactory.loadAllCompetitors();
assertEquals(1, Util.size(allCompetitors));
DynamicCompetitor loadedCompetitor = (DynamicCompetitor) allCompetitors.iterator().next();
assertEquals(flagImageURI1, loadedCompetitor.getFlagImage());
assertEquals(competitorName1, loadedCompetitor.getName());
loadedCompetitor.setName(competitorName2);
loadedCompetitor.setFlagImage(flagImageURI2);
mongoObjectFactory.storeCompetitor(loadedCompetitor);
allCompetitors = domainObjectFactory.loadAllCompetitors();
assertEquals(1, Util.size(allCompetitors));
loadedCompetitor = (DynamicCompetitor) allCompetitors.iterator().next();
assertEquals(flagImageURI2, loadedCompetitor.getFlagImage());
assertEquals(competitorName2, loadedCompetitor.getName());
}
@Test
@@ -58,7 +58,7 @@ public class StoreGPSFixTrackTest extends AbstractMongoDBTest {
public void testStoreAndLoadFixes() throws TransformationException, NoCorrespondingServiceRegisteredException {
TypeBasedServiceFinderFactory factory = new MockSmartphoneImeiServiceFinderFactory();
AbstractLogEventAuthor author = new LogEventAuthorImpl("author", 0);
Competitor comp = DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null);
Competitor comp = DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null, null);
Mark mark = DomainFactory.INSTANCE.getOrCreateMark("mark");
MongoObjectFactory mongoObjectFactory = PersistenceFactory.INSTANCE.getMongoObjectFactory(getMongoService(), factory);
DomainObjectFactory domainObjectFactory = PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), DomainFactory.INSTANCE, factory);
@@ -627,7 +627,7 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
regattaStartDate, regattaEndDate, /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null);
List<Competitor> competitors = new ArrayList<Competitor>();
competitors.add(new CompetitorImpl("Axel", "Axel Uhl", Color.RED, null, null, null));
competitors.add(new CompetitorImpl("Axel", "Axel Uhl", Color.RED, null, null, null, null));
Iterable<Waypoint> waypoints = Collections.emptyList();
Course course = new CourseImpl("Course", waypoints);
@@ -113,11 +113,11 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe
@Test
public void testStoringAndRetrievingLeaderboardGroupWithOverallLeaderboardWithScoreCorrection() throws NoWindException {
RacingEventService racingEventService = new RacingEventServiceImpl();
Competitor wolfgang = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", Color.RED, null, new TeamImpl("STG", Collections.singleton(
Competitor wolfgang = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl("$$$Dr. Wolfgang+Hunger$$$", new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous Dr. Wolfgang Hunger")), new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
/* dateOfBirth */ null, "This is Rigo, the coach")), new BoatImpl("Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null));
Competitor hasso = new CompetitorImpl(234, "Hasso Plattner", Color.RED, null,
Competitor hasso = new CompetitorImpl(234, "Hasso Plattner", Color.RED, null, null,
new TeamImpl("STG", Collections.singleton(
new PersonImpl("Hasso Plattner", new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous Dr. Hasso Plattner")), new PersonImpl("Lutz Patrunky", new NationalityImpl("GER"),
@@ -169,11 +169,11 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe
@Test
public void testStoringAndRetrievingLeaderboardGroupWithSuppressedCompetitorsInOverallLeaderboard() {
Competitor wolfgang = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", Color.RED, null, new TeamImpl("STG", Collections.singleton(
Competitor wolfgang = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl("$$$Dr. Wolfgang+Hunger$$$", new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous Dr. Wolfgang Hunger")), new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
/* dateOfBirth */ null, "This is Rigo, the coach")), new BoatImpl("Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null));
Competitor hasso = new CompetitorImpl(234, "Hasso Plattner", Color.RED, null,
Competitor hasso = new CompetitorImpl(234, "Hasso Plattner", Color.RED, null, null,
new TeamImpl("STG", Collections.singleton(
new PersonImpl("Hasso Plattner", new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous Dr. Hasso Plattner")), new PersonImpl("Lutz Patrunky", new NationalityImpl("GER"),
@@ -225,11 +225,11 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe
@Test
public void testStoringAndRetrievingLeaderboardGroupWithTwoSuppressedCompetitorsInOverallLeaderboard() {
Competitor wolfgang = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", Color.RED, null, new TeamImpl("STG", Collections.singleton(
Competitor wolfgang = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl("$$$Dr. Wolfgang+Hunger$$$", new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous Dr. Wolfgang Hunger")), new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
/* dateOfBirth */ null, "This is Rigo, the coach")), new BoatImpl("Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null));
Competitor hasso = new CompetitorImpl(234, "Hasso Plattner", Color.RED, null,
Competitor hasso = new CompetitorImpl(234, "Hasso Plattner", Color.RED, null,null,
new TeamImpl("STG", Collections.singleton(
new PersonImpl("Hasso Plattner", new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous Dr. Hasso Plattner")), new PersonImpl("Lutz Patrunky", new NationalityImpl("GER"),
@@ -76,7 +76,7 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest {
FlexibleLeaderboardImpl leaderboard = new FlexibleLeaderboardImpl(leaderboardName, new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces),
new LowPoint(), null);
Competitor wolfgang = createCompetitor();
Competitor hasso = new CompetitorImpl(234, "Hasso Plattner", Color.RED, null,
Competitor hasso = new CompetitorImpl(234, "Hasso Plattner", Color.RED, null, null,
new TeamImpl("STG", Collections.singleton(
new PersonImpl("Hasso Plattner", new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous Dr. Hasso Plattner")), new PersonImpl("Lutz Patrunky", new NationalityImpl("GER"),
@@ -350,7 +350,7 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest {
final DomainFactory domainFactory = new DomainFactoryImpl();
// create the competitor through the competitor store/factory here so that the DomainObjectFactory finds it and
// resolves the score corrections appropriate
Competitor competitor = domainFactory.getOrCreateCompetitor(123, "$$$Dr. Wolfgang+Hunger$$$", Color.RED, "someone@nowhere.de", new TeamImpl("STG", Collections.singleton(
Competitor competitor = domainFactory.getOrCreateCompetitor(123, "$$$Dr. Wolfgang+Hunger$$$", Color.RED, "someone@nowhere.de", null, new TeamImpl("STG", Collections.singleton(
new PersonImpl("$$$Dr. Wolfgang+Hunger$$$", new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous Dr. Wolfgang Hunger")), new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
/* dateOfBirth */ null, "This is Rigo, the coach")), new BoatImpl("Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null));
@@ -377,7 +377,7 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest {
}
private Competitor createCompetitor() {
Competitor competitor = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", Color.RED, null, new TeamImpl("STG", Collections.singleton(
Competitor competitor = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl("$$$Dr. Wolfgang+Hunger$$$", new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous Dr. Wolfgang Hunger")), new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
/* dateOfBirth */ null, "This is Rigo, the coach")), new BoatImpl("Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null));
@@ -277,7 +277,8 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD
@Test
public void testStoreAndRetrieveSimpleLeaderboardWithRaceLogFinishPositioningConfirmedEvent() {
Competitor storedCompetitor = DomainFactory.INSTANCE.getOrCreateCompetitor(UUID.randomUUID(), "SAP Extreme Sailing Team", Color.RED, "someone@nowhere.de", null, null);
Competitor storedCompetitor = DomainFactory.INSTANCE.getOrCreateCompetitor(UUID.randomUUID(), "SAP Extreme Sailing Team",
Color.RED, "someone@nowhere.de", null, null, null);
CompetitorResults storedPositioningList = new CompetitorResultsImpl();
storedPositioningList.add(new com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason>(storedCompetitor.getId(), storedCompetitor.getName(), MaxPointsReason.NONE));
@@ -346,7 +347,8 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD
@Test
public void testStoreAndRetrieveSimpleLeaderboardWithRaceLogFinishPositioningListChangeEvent() {
Competitor storedCompetitor = DomainFactory.INSTANCE.getOrCreateCompetitor(UUID.randomUUID(), "SAP Extreme Sailing Team", Color.RED, "someone@nowhere.de", null, null);
Competitor storedCompetitor = DomainFactory.INSTANCE.getOrCreateCompetitor(UUID.randomUUID(), "SAP Extreme Sailing Team", Color.RED,
"someone@nowhere.de", null, null, null);
CompetitorResults storedPositioningList = new CompetitorResultsImpl();
storedPositioningList.add(new com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason>(storedCompetitor.getId(), storedCompetitor.getName(), MaxPointsReason.NONE));
@@ -187,7 +187,8 @@ public class TestStoringAndRetrievingRaceLogInRegatta extends AbstractTestStorin
@Test
public void testStoreAndRetrieveRegattaWithRaceLogFinishPositioningListChangeEvent() {
Competitor storedCompetitor = DomainFactory.INSTANCE.getOrCreateCompetitor(UUID.randomUUID(), "SAP Extreme Sailing Team", Color.RED, "someone@nowhere.de", null, null);
Competitor storedCompetitor = DomainFactory.INSTANCE.getOrCreateCompetitor(UUID.randomUUID(), "SAP Extreme Sailing Team", Color.RED,
"someone@nowhere.de", null, null, null);
CompetitorResults storedPositioningList = new CompetitorResultsImpl();
storedPositioningList.add(new com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason>(storedCompetitor.getId(), storedCompetitor.getName(), MaxPointsReason.NONE));
@@ -217,7 +218,8 @@ public class TestStoringAndRetrievingRaceLogInRegatta extends AbstractTestStorin
@Test
public void testStoreAndRetrieveRegattaWithRaceLogFinishPositioningConfirmedEvent() {
Competitor storedCompetitor = DomainFactory.INSTANCE.getOrCreateCompetitor(UUID.randomUUID(), "SAP Extreme Sailing Team", Color.RED, "someone@nowhere.de", null, null);
Competitor storedCompetitor = DomainFactory.INSTANCE.getOrCreateCompetitor(UUID.randomUUID(), "SAP Extreme Sailing Team", Color.RED,
"someone@nowhere.de", null, null, null);
CompetitorResults storedPositioningList = new CompetitorResultsImpl();
storedPositioningList.add(new com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason>(storedCompetitor.getId(), storedCompetitor.getName(), MaxPointsReason.NONE));
@@ -91,7 +91,7 @@ public class PolarSheetGenerationTest {
settings, executor);
BoatClass forelle = new BoatClassImpl("Forelle", true);
Competitor competitor = new CompetitorImpl(UUID.randomUUID(), "Hans Frantz", Color.RED, null,
Competitor competitor = new CompetitorImpl(UUID.randomUUID(), "Hans Frantz", Color.RED, null, null,
new TeamImpl("SAP", null, null), new BoatImpl("Schnelle Forelle", forelle, "GER000"));
PolarFixAggregationWorker task = new PolarFixAggregationWorker(race,
@@ -2,7 +2,9 @@ package com.sap.sailing.server.gateway.deserialization.impl;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.net.URI;
import java.util.UUID;
import java.util.logging.Logger;
import org.json.simple.JSONObject;
@@ -22,6 +24,7 @@ public class CompetitorJsonDeserializer implements JsonDeserializer<Competitor>
protected final CompetitorFactory competitorStore;
protected final JsonDeserializer<DynamicTeam> teamJsonDeserializer;
protected final JsonDeserializer<DynamicBoat> boatJsonDeserializer;
private static final Logger logger = Logger.getLogger(CompetitorJsonDeserializer.class.getName());
public static CompetitorJsonDeserializer create(SharedDomainFactory baseDomainFactory) {
return new CompetitorJsonDeserializer(baseDomainFactory, new TeamJsonDeserializer(new PersonJsonDeserializer(
@@ -53,6 +56,16 @@ public class CompetitorJsonDeserializer implements JsonDeserializer<Competitor>
String displayColorAsString = (String) object.get(CompetitorJsonSerializer.FIELD_DISPLAY_COLOR);
String email = (String) object.get(CompetitorJsonSerializer.FIELD_EMAIL);
URI flagImageURI = null;
String flagImageURIAsString = (String) object.get(CompetitorJsonSerializer.FIELD_FLAG_IMAGE_URI);
if (flagImageURIAsString != null) {
try {
flagImageURI = URI.create(flagImageURIAsString);
} catch (IllegalArgumentException e) {
logger.warning("Illegal flag image URI " + e.getMessage());
}
}
final Color displayColor;
if (displayColorAsString == null || displayColorAsString.isEmpty()) {
displayColor = null;
@@ -70,7 +83,7 @@ public class CompetitorJsonDeserializer implements JsonDeserializer<Competitor>
CompetitorJsonSerializer.FIELD_BOAT));
}
Competitor competitor = competitorStore.getOrCreateCompetitor(competitorId, name, displayColor, email, team, boat);
Competitor competitor = competitorStore.getOrCreateCompetitor(competitorId, name, displayColor, email, flagImageURI, team, boat);
return competitor;
} catch (Exception e) {
throw new JsonDeserializationException(e);
@@ -41,13 +41,13 @@ public class TeamJsonDeserializer implements JsonDeserializer<DynamicTeam> {
}
String imageURIAsString = (String) object.get(TeamJsonSerializer.FIELD_IMAGE_URI);
if (imageURIAsString != null){
try {
URI imageURI = URI.create(imageURIAsString);
return new TeamImpl(name, sailors, coach, imageURI);
} catch (IllegalArgumentException e){
logger.warning("Illegal team image URI "+e.getMessage());
}
if (imageURIAsString != null) {
try {
URI imageURI = URI.create(imageURIAsString);
return new TeamImpl(name, sailors, coach, imageURI);
} catch (IllegalArgumentException e) {
logger.warning("Illegal team image URI " + e.getMessage());
}
}
return new TeamImpl(name, sailors, coach);
@@ -31,6 +31,7 @@ public class CompetitorJsonSerializer implements JsonSerializer<Competitor> {
public static final String FIELD_BOAT = "boat";
public static final String FIELD_DISPLAY_COLOR = "displayColor";
public static final String FIELD_EMAIL = "email";
public static final String FIELD_FLAG_IMAGE_URI = "flagImageUri";
private final JsonSerializer<Team> teamJsonSerializer;
private final JsonSerializer<Boat> boatJsonSerializer;
@@ -74,6 +75,9 @@ public class CompetitorJsonSerializer implements JsonSerializer<Competitor> {
CountryCode countryCode = nationality == null ? null : nationality.getCountryCode();
result.put(FIELD_NATIONALITY_ISO2, countryCode == null ? "" : countryCode.getTwoLetterISOCode());
result.put(FIELD_NATIONALITY_ISO3, countryCode == null ? "" : countryCode.getThreeLetterISOCode());
if (competitor.getFlagImage() != null) {
result.put(FIELD_FLAG_IMAGE_URI, competitor.getFlagImage().toString());
}
if (teamJsonSerializer != null) {
result.put(FIELD_TEAM, teamJsonSerializer.serialize(competitor.getTeam()));
}
@@ -241,7 +241,7 @@ public class RaceLogEventSerializerTest {
public void testRegisterCompetitorEventSerializer() {
// we use the real event type here because we do not want to re-implement the dispatching.
RaceLogEvent event = factory.createRegisterCompetitorEvent(null, author, 0,
DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null));
DomainFactory.INSTANCE.getOrCreateCompetitor("comp", "comp", null, null, null, null, null));
serializer.serialize(event);
verify(registerCompetitorEventSerializer).serialize(event);
}
@@ -89,7 +89,7 @@ public abstract class AbstractJsonExportTest {
BoatClass boatClass = new BoatClassImpl("505", /* typicallyStartsUpwind */ true);
for (int i = 1; i <= numberOfCompetitorsToCreate; i++) {
String competitorName = "C" + i;
Competitor competitor = new CompetitorImpl(UUID.randomUUID(), competitorName, Color.RED, null, new TeamImpl("STG", Collections.singleton(
Competitor competitor = new CompetitorImpl(UUID.randomUUID(), competitorName, Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl(competitorName, new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous "+competitorName)),
new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
@@ -49,7 +49,7 @@ public class RaceLogSerializationTest {
private JsonDeserializer<RaceLogEvent> deserializer;
private final AbstractLogEventAuthor author = new LogEventAuthorImpl("test", 0);
private static final Competitor competitor = new CompetitorImpl("a", "b", null,
null,
null, null,
new TeamImpl("a", Collections.singletonList(new PersonImpl("a", new NationalityImpl("GER"), new Date(), "abc")), null), new BoatImpl("a", new BoatClassImpl("a", true), "abc"));
@Before
@@ -71,7 +71,7 @@ public abstract class AbstractJaxRsApiTest {
BoatClass boatClass = new BoatClassImpl("505", /* typicallyStartsUpwind */ true);
for (int i = 1; i <= numberOfCompetitorsToCreate; i++) {
String competitorName = "C" + i;
Competitor competitor = new CompetitorImpl(123, competitorName, Color.RED, null, new TeamImpl("STG", Collections.singleton(
Competitor competitor = new CompetitorImpl(123, competitorName, Color.RED, null, null, new TeamImpl("STG", Collections.singleton(
new PersonImpl(competitorName, new NationalityImpl("GER"),
/* dateOfBirth */ null, "This is famous "+competitorName)),
new PersonImpl("Rigo van Maas", new NationalityImpl("NED"),
@@ -34,7 +34,7 @@ public class CompetitorsResourceTest extends AbstractJaxRsApiTest {
super.setUp();
DynamicTeam team = new TeamImpl(null, Collections.singleton(new PersonImpl(null, new NationalityImpl(nationality), null, null)), null);
DynamicBoat boat = new BoatImpl(null, new BoatClassImpl(boatClassName, false), sailID);
racingEventService.getBaseDomainFactory().getOrCreateCompetitor(id, name, null, null, team, boat);
racingEventService.getBaseDomainFactory().getOrCreateCompetitor(id, name, null, null, null, team, boat);
}
@Test
@@ -45,7 +45,7 @@ public class LeaderboardsResourceCheckinAndOutTest extends AbstractJaxRsApiTest
super.setUp();
Competitor c = createCompetitors(1).get(0);
competitor = racingEventService.getBaseDomainFactory().getOrCreateCompetitor(c.getId(), c.getName(),
c.getColor(), c.getEmail(), (DynamicTeam) c.getTeam(), (DynamicBoat) c.getBoat());
c.getColor(), c.getEmail(), c.getFlagImage(), (DynamicTeam) c.getTeam(), (DynamicBoat) c.getBoat());
Regatta regatta = new RegattaImpl("regatta", new BoatClassImpl("49er", false), MillisecondsTimePoint.now(),
MillisecondsTimePoint.now(), Collections.singleton(new SeriesImpl("series", false, Collections
@@ -54,7 +54,7 @@ public class TeamImageTest extends AbstractJaxRsApiTest {
DynamicTeam team = new TeamImpl(null, Collections.singleton(new PersonImpl(null, new NationalityImpl(
nationality), null, null)), null);
DynamicBoat boat = new BoatImpl(null, new BoatClassImpl(boatClassName, false), sailID);
racingEventService.getBaseDomainFactory().getOrCreateCompetitor(id, name, null, null, team, boat);
racingEventService.getBaseDomainFactory().getOrCreateCompetitor(id, name, null, null, null, team, boat);
}
@Test
@@ -50,7 +50,11 @@ public class CompetitorsResource extends AbstractSailingServerResource {
json.put("nationality", competitor.getTeam().getNationality().getThreeLetterIOCAcronym());
json.put("countryCode", competitor.getTeam().getNationality().getCountryCode().getTwoLetterISOCode());
json.put("boatClassName", competitor.getBoat().getBoatClass().getName());
json.put("color", competitor.getColor() != null ? competitor.getColor().getAsHtml() : null);
if(competitor.getFlagImage() != null) {
json.put("flagImage", competitor.getFlagImage().toString());
}
return json;
}
@@ -146,7 +150,7 @@ public class CompetitorsResource extends AbstractSailingServerResource {
}
getService().getCompetitorStore().updateCompetitor(competitorId, competitor.getName(), competitor.getColor(), competitor.getEmail(),
competitor.getBoat().getSailID(), competitor.getTeam().getNationality(), imageUri);
competitor.getBoat().getSailID(), competitor.getTeam().getNationality(), imageUri, competitor.getFlagImage());
logger.log(Level.INFO, "Set team image for competitor " + competitor.getName());
JSONObject result = new JSONObject();
@@ -201,8 +201,10 @@ public class RegattasResource extends AbstractSailingServerResource {
jsonCompetitor.put("id", competitor.getId() != null ? competitor.getId().toString() : null);
jsonCompetitor.put("name", competitor.getName());
jsonCompetitor.put("sailNumber", competitor.getBoat().getSailID());
jsonCompetitor.put("color", competitor.getColor() != null ? competitor.getColor().getAsHtml()
: null);
jsonCompetitor.put("color", competitor.getColor() != null ? competitor.getColor().getAsHtml() : null);
if(competitor.getFlagImage() != null) {
jsonCompetitor.put("flagImage", competitor.getFlagImage().toString());
}
GPSFixTrack<Competitor, GPSFixMoving> track = trackedRace.getTrack(competitor);
JSONArray jsonFixes = new JSONArray();
track.lockForRead();
@@ -6,6 +6,8 @@ import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Collections;
import org.junit.Test;
@@ -63,12 +65,14 @@ public class CompetitorReplicationTest extends AbstractServerReplicationTest {
* the competitor with its modified state over to the replica where a
* {@link DomainFactory#getOrCreateCompetitor(java.io.Serializable, String, com.sap.sailing.domain.base.impl.DynamicTeam, com.sap.sailing.domain.base.impl.DynamicBoat)}
* will be triggered. This should also update the competitor on the client.
* @throws URISyntaxException
*/
@Test
public void testSimpleSpecificRegattaReplication() throws InterruptedException {
public void testSimpleSpecificRegattaReplication() throws InterruptedException, URISyntaxException {
String baseEventName = "My Test Event";
String boatClassName = "Kielzugvogel";
Integer regattaId = 12345;
URI flagImageURI = new URI("http://www.sapsailing.com");
Iterable<Series> series = Collections.emptyList();
Regatta masterRegatta = master.createRegatta(RegattaImpl.getDefaultName(baseEventName, boatClassName), boatClassName,
/*startDate*/ null, /*endDate*/ null, regattaId, series,
@@ -76,7 +80,7 @@ public class CompetitorReplicationTest extends AbstractServerReplicationTest {
Iterable<Waypoint> emptyWaypointList = Collections.emptyList();
final String competitorName = "Der mit dem Kiel zieht";
Competitor competitor = master.getBaseDomainFactory().getOrCreateCompetitor(
123, competitorName, Color.RED, "someone@nowhere.de",
123, competitorName, Color.RED, "someone@nowhere.de", flagImageURI,
new TeamImpl("STG", Collections.singleton(new PersonImpl(competitorName, new NationalityImpl("GER"),
/* dateOfBirth */null, "This is famous " + competitorName)), new PersonImpl("Rigo van Maas",
new NationalityImpl("NED"),
@@ -101,13 +105,14 @@ public class CompetitorReplicationTest extends AbstractServerReplicationTest {
assertEquals(competitor.getId(), replicatedCompetitor.getId());
assertEquals(competitor.getName(), replicatedCompetitor.getName());
assertEquals(competitor.getColor(), replicatedCompetitor.getColor());
assertEquals(competitor.getFlagImage(), replicatedCompetitor.getFlagImage());
assertEquals(competitor.getBoat().getSailID(), replicatedCompetitor.getBoat().getSailID());
assertEquals(competitor.getTeam().getNationality(), replicatedCompetitor.getTeam().getNationality());
// now update competitor on master using replicating operation
final String newCompetitorName = "Der Vogel, der mit dem Kiel zieht";
master.apply(new UpdateCompetitor(competitor.getId().toString(), newCompetitorName, competitor.getColor(), competitor.getEmail(), competitor.getBoat().getSailID(), competitor.getTeam().getNationality(),
competitor.getTeam().getImage()));
competitor.getTeam().getImage(), competitor.getFlagImage()));
Thread.sleep(1000);
assertEquals(newCompetitorName, replicatedCompetitor.getName()); // expect in-place update of existing competitor in replica
@@ -115,7 +120,7 @@ public class CompetitorReplicationTest extends AbstractServerReplicationTest {
master.apply(new AllowCompetitorResetToDefaults(Collections.singleton(competitor.getId().toString())));
// modify the competitor on the master "from below" without an UpdateCompetitor operation, only locally:
master.getBaseDomainFactory().getCompetitorStore().updateCompetitor(competitor.getId().toString(), competitorName, Color.RED, competitor.getEmail(),
competitor.getBoat().getSailID(), competitor.getTeam().getNationality(), competitor.getTeam().getImage());
competitor.getBoat().getSailID(), competitor.getTeam().getNationality(), competitor.getTeam().getImage(), competitor.getFlagImage());
final RegattaAndRaceIdentifier raceIdentifier = masterRegatta.getRaceIdentifier(raceDefinition);
DynamicTrackedRace trackedRace = (DynamicTrackedRace) master.apply(new CreateTrackedRace(raceIdentifier,
EmptyWindStore.INSTANCE, EmptyGPSFixStore.INSTANCE, /* delayToLiveInMillis */ 3000,
@@ -71,7 +71,7 @@ public class TrackedRaceContentsReplicationTest extends AbstractServerReplicatio
// FIXME use master DomainFactory; see bug 592
final DomainFactory masterDomainFactory = DomainFactory.INSTANCE;
BoatClass boatClass = masterDomainFactory.getOrCreateBoatClass(boatClassName, /* typicallyStartsUpwind */true);
competitor = masterDomainFactory.getCompetitorStore().getOrCreateCompetitor("GER 61", "Tina Lutz", Color.RED, "someone@nowhere.de", new TeamImpl("Tina Lutz + Susann Beucke",
competitor = masterDomainFactory.getCompetitorStore().getOrCreateCompetitor("GER 61", "Tina Lutz", Color.RED, "someone@nowhere.de", null, new TeamImpl("Tina Lutz + Susann Beucke",
(List<PersonImpl>) Arrays.asList(new PersonImpl[] { new PersonImpl("Tina Lutz", DomainFactory.INSTANCE.getOrCreateNationality("GER"), null, null),
new PersonImpl("Tina Lutz", DomainFactory.INSTANCE.getOrCreateNationality("GER"), null, null) }),
new PersonImpl("Rigo de Mas", DomainFactory.INSTANCE.getOrCreateNationality("NED"), null, null)),
@@ -22,20 +22,20 @@ public class CompetitorStoreTest {
public void testAddingToTransientStore() {
CompetitorStore transientStore = new TransientCompetitorStoreImpl();
DynamicCompetitor template = AbstractLeaderboardTest.createCompetitor("Test Competitor");
Competitor competitor = transientStore.getOrCreateCompetitor(template.getId(), template.getName(), template.getColor(), template.getEmail(), template.getTeam(), template.getBoat());
Competitor competitor = transientStore.getOrCreateCompetitor(template.getId(), template.getName(), template.getColor(), template.getEmail(), template.getFlagImage(), template.getTeam(), template.getBoat());
assertTrue(competitor != template);
Competitor competitor2 = transientStore.getOrCreateCompetitor(template.getId(), template.getName(), template.getColor(), template.getEmail(), template.getTeam(), template.getBoat());
Competitor competitor2 = transientStore.getOrCreateCompetitor(template.getId(), template.getName(), template.getColor(), template.getEmail(), template.getFlagImage(), template.getTeam(), template.getBoat());
assertSame(competitor, competitor2);
assertEquals(DomainFactory.INSTANCE.getOrCreateNationality("GER"), competitor.getTeam().getNationality());
DynamicTeam differentTeam = AbstractLeaderboardTest.createCompetitor("Test Competitor").getTeam();
differentTeam.setNationality(DomainFactory.INSTANCE.getOrCreateNationality("GHA")); // Ghana
Competitor competitor3 = transientStore.getOrCreateCompetitor(template.getId(), template.getName(), template.getColor(), template.getEmail(), differentTeam, template.getBoat());
Competitor competitor3 = transientStore.getOrCreateCompetitor(template.getId(), template.getName(), template.getColor(), template.getEmail(), template.getFlagImage(), differentTeam, template.getBoat());
assertSame(competitor, competitor3); // use existing competitor despite the different team
assertSame(competitor.getTeam(), competitor3.getTeam());
// now mark the competitor as to update from defaults
transientStore.allowCompetitorResetToDefaults(competitor);
Competitor competitor4 = transientStore.getOrCreateCompetitor(template.getId(), template.getName(), template.getColor(), template.getEmail(), differentTeam, template.getBoat());
Competitor competitor4 = transientStore.getOrCreateCompetitor(template.getId(), template.getName(), template.getColor(), template.getEmail(), template.getFlagImage(), differentTeam, template.getBoat());
assertSame(competitor, competitor4); // expecting an in-place update
assertEquals(differentTeam.getNationality(), competitor4.getTeam().getNationality());
}
@@ -44,7 +44,7 @@ public class CompetitorStoreTest {
public void testPersistentCompetitorStore() {
CompetitorStore persistentStore1 = new PersistentCompetitorStore(PersistenceFactory.INSTANCE.getDefaultMongoObjectFactory(), /* clearStore */ true, null);
DynamicCompetitor template = AbstractLeaderboardTest.createCompetitor("Test Competitor");
Competitor competitor = persistentStore1.getOrCreateCompetitor(template.getId(), template.getName(), template.getColor(), template.getEmail(), template.getTeam(), template.getBoat());
Competitor competitor = persistentStore1.getOrCreateCompetitor(template.getId(), template.getName(), template.getColor(), template.getEmail(), template.getFlagImage(), template.getTeam(), template.getBoat());
CompetitorStore persistentStore2 = new PersistentCompetitorStore(PersistenceFactory.INSTANCE.getDefaultMongoObjectFactory(), /* clearStore */ false, null);
Competitor competitor2 = persistentStore2.getExistingCompetitorById(template.getId());
@@ -53,14 +53,14 @@ public class CompetitorStoreTest {
assertEquals(template.getTeam().getNationality(), competitor2.getTeam().getNationality());
DynamicTeam differentTeam = AbstractLeaderboardTest.createCompetitor("Test Competitor").getTeam();
differentTeam.setNationality(DomainFactory.INSTANCE.getOrCreateNationality("GHA")); // Ghana
Competitor competitor3 = persistentStore2.getOrCreateCompetitor(template.getId(), template.getName(), template.getColor(), template.getEmail(), differentTeam, template.getBoat());
Competitor competitor3 = persistentStore2.getOrCreateCompetitor(template.getId(), template.getName(), template.getColor(), template.getEmail(), template.getFlagImage(), differentTeam, template.getBoat());
assertSame(competitor2, competitor3); // use existing competitor despite the different team
assertNotSame(differentTeam, competitor2.getTeam()); // team expected to remain unchanged
assertEquals(competitor.getTeam().getNationality(), competitor3.getTeam().getNationality()); // no updatability requested; nationality expected to remain unchanged
// now mark the competitor as to update from defaults
persistentStore2.allowCompetitorResetToDefaults(competitor2);
Competitor competitor4 = persistentStore2.getOrCreateCompetitor(template.getId(), template.getName(), template.getColor(), template.getEmail(), differentTeam, template.getBoat());
Competitor competitor4 = persistentStore2.getOrCreateCompetitor(template.getId(), template.getName(), template.getColor(), template.getEmail(), template.getFlagImage(), differentTeam, template.getBoat());
assertSame(competitor2, competitor4); // expecting an in-place update
assertEquals(differentTeam.getNationality(), competitor4.getTeam().getNationality());
}
@@ -61,7 +61,7 @@ public class LeaderboardStorageTest extends TestCase {
DynamicBoat boat = new BoatImpl("woot", service.getBaseDomainFactory().getOrCreateBoatClass("H16"), "70155");
String competitorId = "testC";
Competitor competitor = service.getBaseDomainFactory().getOrCreateCompetitor(competitorId, "Test C", null,
null, team, boat);
null, null, team, boat);
double carriedPoints = 2.0;
leaderboard.setCarriedPoints(competitor, carriedPoints);
@@ -217,7 +217,7 @@ public class MasterDataImportTest {
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, team, boat);
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, null, team, boat);
competitors.add(competitor);
UUID competitorToSuppressUUID = UUID.randomUUID();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
@@ -227,7 +227,7 @@ public class MasterDataImportTest {
"Bester Coach");
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", Color.RED, null,
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", Color.RED, null,null,
team2, boat2);
competitors.add(competitorToSuppress);
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
@@ -448,7 +448,7 @@ public class MasterDataImportTest {
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, team, boat);
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, null, team, boat);
competitors.add(competitor);
UUID competitor2UUID = UUID.randomUUID();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
@@ -456,7 +456,7 @@ public class MasterDataImportTest {
DynamicPerson coach2 = new PersonImpl("Max Test", new NationalityImpl("GER"), new Date(645487200000L), "desc");
DynamicTeam team2 = new TeamImpl("Pros2", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("FastBoat", boatClass, "GER70133");
CompetitorImpl competitor2 = new CompetitorImpl(competitor2UUID, "Froderik", Color.RED, null, team2, boat2);
CompetitorImpl competitor2 = new CompetitorImpl(competitor2UUID, "Froderik", Color.RED, null, null, team2, boat2);
competitors.add(competitor2);
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitors, regatta, null, sourceService.getWindStore());
@@ -603,7 +603,7 @@ public class MasterDataImportTest {
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, team, boat);
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, null, team, boat);
competitors.add(competitor);
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
@@ -748,7 +748,7 @@ public class MasterDataImportTest {
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
Competitor competitor = sourceDomainFactory.getOrCreateCompetitor(competitorUUID, "Froderik", Color.RED, "noone@nowhere.de", team,
Competitor competitor = sourceDomainFactory.getOrCreateCompetitor(competitorUUID, "Froderik", Color.RED, "noone@nowhere.de", null, team,
boat);
competitors.add(competitor);
UUID competitor2UUID = UUID.randomUUID();
@@ -758,7 +758,7 @@ public class MasterDataImportTest {
DynamicTeam team2 = new TeamImpl("Pros2", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("FastBoat", boatClass, "GER70133");
Competitor competitor2 = sourceDomainFactory.getCompetitorStore().getOrCreateCompetitor(competitor2UUID,
"Froderik", Color.RED, "noone@nowhere.de", team2, boat2);
"Froderik", Color.RED, "noone@nowhere.de", null, team2, boat2);
competitors.add(competitor2);
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitors, regatta, null, sourceService.getWindStore());
@@ -904,7 +904,7 @@ public class MasterDataImportTest {
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, team, boat);
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, null, team, boat);
competitors.add(competitor);
UUID competitorToSuppressUUID = UUID.randomUUID();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
@@ -914,7 +914,7 @@ public class MasterDataImportTest {
"Bester Coach");
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", Color.RED, null,
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", Color.RED, null, null,
team2, boat2);
competitors.add(competitorToSuppress);
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
@@ -1103,7 +1103,7 @@ public class MasterDataImportTest {
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, team, boat);
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, null, team, boat);
competitors.add(competitor);
UUID competitorToSuppressUUID = UUID.randomUUID();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
@@ -1114,7 +1114,7 @@ public class MasterDataImportTest {
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", Color.RED, null,
team2, boat2);
null, team2, boat2);
competitors.add(competitorToSuppress);
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitors, regatta, null, sourceService.getWindStore());
@@ -1205,7 +1205,7 @@ public class MasterDataImportTest {
DynamicBoat boatToOverride = new BoatImpl("Wingy", boatClassToOverride, "GER70133");
String competitorOldName = "oldName";
Competitor competitorToOverride = domainFactory.getOrCreateCompetitor(competitorUUID, competitorOldName,
Color.BLUE, "noone@nowhere.de", teamToOverride, boatToOverride);
Color.BLUE, "noone@nowhere.de", null, teamToOverride, boatToOverride);
competitorsToOverride.add(competitorToOverride);
Leaderboard leaderboardToOverride = destService.addRegattaLeaderboard(
@@ -1398,7 +1398,7 @@ public class MasterDataImportTest {
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, team, boat);
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, null, team, boat);
competitors.add(competitor);
UUID competitorToSuppressUUID = UUID.randomUUID();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
@@ -1408,7 +1408,7 @@ public class MasterDataImportTest {
"Bester Coach");
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", Color.RED, null,
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", Color.RED, null,null,
team2, boat2);
competitors.add(competitorToSuppress);
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
@@ -1532,7 +1532,7 @@ public class MasterDataImportTest {
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, team, boat);
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, null, team, boat);
competitors.add(competitor);
UUID competitorToSuppressUUID = UUID.randomUUID();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
@@ -1542,7 +1542,7 @@ public class MasterDataImportTest {
"Bester Coach");
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", Color.RED, null,
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", Color.RED, null, null,
team2, boat2);
competitors.add(competitorToSuppress);
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
@@ -1748,7 +1748,7 @@ public class MasterDataImportTest {
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, team, boat);
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, null, team, boat);
competitors.add(competitor);
UUID competitorToSuppressUUID = UUID.randomUUID();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
@@ -1758,7 +1758,7 @@ public class MasterDataImportTest {
"Bester Coach");
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", Color.RED, null,
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", Color.RED, null, null,
team2, boat2);
competitors.add(competitorToSuppress);
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
@@ -1977,7 +1977,7 @@ public class MasterDataImportTest {
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, team, boat);
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, null, null, team, boat);
competitors.add(competitor);
UUID competitorToSuppressUUID = UUID.randomUUID();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
@@ -1987,7 +1987,7 @@ public class MasterDataImportTest {
"Bester Coach");
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", Color.RED, null,
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", Color.RED, null, null,
team2, boat2);
competitors.add(competitorToSuppress);
TrackedRace trackedRace = new DummyTrackedRace(raceId, competitors, regatta, null, sourceService.getWindStore());
@@ -105,7 +105,7 @@ public class WindByRaceLogTest {
}
private Competitor createCompetitor(final DomainFactory masterDomainFactory) {
return masterDomainFactory.getOrCreateCompetitor("GER 61", "Sailor", Color.RED, "noone@nowhere.de", new TeamImpl("Sailor",
return masterDomainFactory.getOrCreateCompetitor("GER 61", "Sailor", Color.RED, "noone@nowhere.de", null, new TeamImpl("Sailor",
(List<PersonImpl>) Arrays.asList(new PersonImpl[] { new PersonImpl("Sailor 1", DomainFactory.INSTANCE.getOrCreateNationality("GER"), null, null)}),
new PersonImpl("Sailor 2", DomainFactory.INSTANCE.getOrCreateNationality("NED"), null, null)),
new BoatImpl("GER 61", DomainFactory.INSTANCE.getOrCreateBoatClass("470", /* typicallyStartsUpwind */ true), "GER 61"));
@@ -97,9 +97,9 @@ public class PersistentCompetitorStore extends TransientCompetitorStoreImpl impl
@Override
public Competitor updateCompetitor(String idAsString, String newName, Color newRgbDisplayColor, String newEmail, String newSailId,
Nationality newNationality, URI newTeamImageUri) {
Nationality newNationality, URI newTeamImageUri, URI newFlagImageUri) {
Competitor result = super.updateCompetitor(idAsString, newName, newRgbDisplayColor, newEmail, newSailId, newNationality,
newTeamImageUri);
newTeamImageUri, newFlagImageUri);
storeTo.storeCompetitor(result);
return result;
}
@@ -478,7 +478,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
public void competitorUpdated(Competitor competitor) {
replicate(new UpdateCompetitor(competitor.getId().toString(), competitor.getName(), competitor
.getColor(), competitor.getEmail(), competitor.getBoat().getSailID(), competitor.getTeam().getNationality(),
competitor.getTeam().getImage()));
competitor.getTeam().getImage(), competitor.getFlagImage()));
}
});
this.windStore = windStore;
@@ -2452,7 +2452,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
for (Competitor competitor : ((CompetitorStore) ois.readObject()).getCompetitors()) {
DynamicCompetitor dynamicCompetitor = (DynamicCompetitor) competitor;
competitorStore.getOrCreateCompetitor(dynamicCompetitor.getId(), dynamicCompetitor.getName(),
dynamicCompetitor.getColor(), dynamicCompetitor.getEmail(), dynamicCompetitor.getTeam(), dynamicCompetitor.getBoat());
dynamicCompetitor.getColor(), dynamicCompetitor.getEmail(), dynamicCompetitor.getFlagImage(), dynamicCompetitor.getTeam(), dynamicCompetitor.getBoat());
}
logoutput.append("Received " + competitorStore.size() + " NEW competitors\n");
@@ -17,6 +17,7 @@ public class UpdateCompetitor extends AbstractRacingEventServiceOperation<Compet
private final String newEmail;
private final Nationality newNationality;
private final URI newTeamImageUri;
private final URI newFlagImageUri;
/**
* @param idAsString
@@ -26,7 +27,7 @@ public class UpdateCompetitor extends AbstractRacingEventServiceOperation<Compet
* flag
*/
public UpdateCompetitor(String idAsString, String newName, Color newDisplayColor, String newEmail, String newSailId,
Nationality newNationality, URI newTeamImageUri) {
Nationality newNationality, URI newTeamImageUri, URI newFlagImageUri) {
super();
this.idAsString = idAsString;
this.newName = newName;
@@ -35,6 +36,7 @@ public class UpdateCompetitor extends AbstractRacingEventServiceOperation<Compet
this.newNationality = newNationality;
this.newTeamImageUri = newTeamImageUri;
this.newEmail = newEmail;
this.newFlagImageUri = newFlagImageUri;
}
/**
@@ -49,7 +51,7 @@ public class UpdateCompetitor extends AbstractRacingEventServiceOperation<Compet
public Competitor internalApplyTo(RacingEventService toState) throws Exception {
Competitor result = toState.getBaseDomainFactory().getCompetitorStore()
.updateCompetitor(idAsString, newName, newDisplayColor, newEmail, newSailId, newNationality,
newTeamImageUri);
newTeamImageUri, newFlagImageUri);
return result;
}
@@ -3,6 +3,7 @@ package com.sap.sailing.xrr.structureimport;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
@@ -202,11 +203,12 @@ public class StructureImporter {
String name = person.getGivenName() + " " + person.getFamilyName();
Color color = null;
String email = null;
URI flagImage = null;
Nationality nationality = (person.getNOC() == null) ? null : getNationality(person.getNOC()
.toString());
BoatAndTeam boatAndTeam = getBoatAndTeam(idAsString, name, nationality, boatClass);
this.baseDomainFactory.convertToCompetitorDTO(this.baseDomainFactory.getOrCreateCompetitor(
UUID.fromString(idAsString), name, color, email, boatAndTeam.getTeam(), boatAndTeam.getBoat()));
UUID.fromString(idAsString), name, color, email, flagImage, boatAndTeam.getTeam(), boatAndTeam.getBoat()));
} else {
break;
}
@@ -90,11 +90,11 @@ public class OfflineDataManager extends DataManager {
medal), new EmptyRegattaConfiguration());
List<Competitor> competitors = new ArrayList<Competitor>();
competitors.add(new CompetitorImpl(UUID.randomUUID(), "SAP Extreme Sailing Team", Color.BLUE, null, null, null));
competitors.add(new CompetitorImpl(UUID.randomUUID(), "The Wave Muscat", Color.LIGHT_GRAY, null, null, null));
competitors.add(new CompetitorImpl(UUID.randomUUID(), "Red Bull Extreme Sailing Team", Color.RED, null, null, null));
competitors.add(new CompetitorImpl(UUID.randomUUID(), "Team Korea", Color.GREEN, null, null, null));
competitors.add(new CompetitorImpl(UUID.randomUUID(), "Realteam", Color.BLACK, null, null, null));
competitors.add(new CompetitorImpl(UUID.randomUUID(), "SAP Extreme Sailing Team", Color.BLUE, null, null, null, null));
competitors.add(new CompetitorImpl(UUID.randomUUID(), "The Wave Muscat", Color.LIGHT_GRAY, null, null, null, null));
competitors.add(new CompetitorImpl(UUID.randomUUID(), "Red Bull Extreme Sailing Team", Color.RED, null, null, null, null));
competitors.add(new CompetitorImpl(UUID.randomUUID(), "Team Korea", Color.GREEN, null, null, null, null));
competitors.add(new CompetitorImpl(UUID.randomUUID(), "Realteam", Color.BLACK, null, null, null, null));
RaceLogEventFactory factory = new RaceLogEventFactoryImpl();
RaceLog log = new RaceLogImpl(UUID.randomUUID());