allow a competitor to be modified through the UpdateCompetitor operation

This commit is contained in:
Axel Uhl committed 2013-10-31 18:10:56 +01:00
1 parent 5068f0268a
commit fe8bd57a19
30 files changed
+354 -185

No files matched your search

@@ -7,5 +7,4 @@ public interface Competitor extends Named, WithID, IsManagedBySharedDomainFactor
Team getTeam();
Boat getBoat();
}
@@ -3,6 +3,9 @@ package com.sap.sailing.domain.base;
import java.io.Serializable;
import java.util.UUID;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicCompetitor;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.common.MarkType;
import com.sap.sailing.domain.common.NauticalSide;
@@ -74,10 +77,18 @@ public interface SharedDomainFactory {
Competitor getExistingCompetitorById(Serializable competitorId);
Competitor getOrCreateCompetitor(Serializable competitorId, String name, Team team, Boat boat);
Competitor getOrCreateCompetitor(Serializable competitorId, String name, DynamicTeam team, DynamicBoat boat);
/**
* Same as {@link #getOrCreateCompetitor(Serializable, String, DynamicTeam, DynamicBoat)} but returns the writable
* specialization of the {@link Competitor} interface. Use with care because the setters offered by the <code>Dynamic...</code>
* subinterfaces don't automatically replicate or store the changes.
*/
DynamicCompetitor getOrCreateDynamicCompetitor(UUID competitorId, String name, DynamicTeam team, DynamicBoat boat);
CourseArea getOrCreateCourseArea(Serializable courseAreaId, String name);
CourseArea getExistingCourseAreaById(Serializable courseAreaId);
}
@@ -1,13 +1,12 @@
package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.common.impl.NamedImpl;
public class BoatImpl extends NamedImpl implements Boat {
public class BoatImpl extends NamedImpl implements DynamicBoat {
private static final long serialVersionUID = 3489730487528955788L;
private final BoatClass boatClass;
private final String sailID;
private String sailID;
public BoatImpl(String name, BoatClass boatClass, String sailID) {
super(name);
@@ -24,4 +23,9 @@ public class BoatImpl extends NamedImpl implements Boat {
public String getSailID() {
return sailID;
}
@Override
public void setSailId(String newSailId) {
this.sailID = newSailId;
}
}
@@ -2,37 +2,45 @@ package com.sap.sailing.domain.base.impl;
import java.io.Serializable;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.common.impl.NamedImpl;
public class CompetitorImpl extends NamedImpl implements Competitor {
public class CompetitorImpl implements DynamicCompetitor {
private static final long serialVersionUID = 294603681016643157L;
private final Team team;
private final Boat boat;
private final DynamicTeam team;
private final DynamicBoat boat;
private final Serializable id;
private String name;
public CompetitorImpl(Serializable id, String name, Team team, Boat boat) {
super(name);
public CompetitorImpl(Serializable id, String name, DynamicTeam team, DynamicBoat boat) {
this.id = id;
this.name = name;
this.team = team;
this.boat = boat;
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String newName) {
this.name = newName;
}
@Override
public Serializable getId() {
return id;
}
@Override
public Team getTeam() {
public DynamicTeam getTeam() {
return team;
}
@Override
public Boat getBoat() {
public DynamicBoat getBoat() {
return boat;
}
@@ -0,0 +1,7 @@
package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.Boat;
public interface DynamicBoat extends Boat {
void setSailId(String newSailId);
}
@@ -0,0 +1,9 @@
package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.Renamable;
public interface DynamicCompetitor extends Competitor, Renamable {
DynamicBoat getBoat();
DynamicTeam getTeam();
}
@@ -0,0 +1,8 @@
package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.Person;
public interface DynamicPerson extends Person {
void setNationality(Nationality newNationality);
}
@@ -0,0 +1,8 @@
package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.Team;
public interface DynamicTeam extends Team {
void setNationality(Nationality newNationality);
}
@@ -4,12 +4,11 @@ import java.io.InputStream;
import java.util.Date;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.Person;
import com.sap.sailing.domain.common.impl.NamedImpl;
public class PersonImpl extends NamedImpl implements Person {
public class PersonImpl extends NamedImpl implements DynamicPerson {
private static final long serialVersionUID = -2104903799224233508L;
private final Nationality nationality;
private Nationality nationality;
private final Date dateOfBirth;
private final String description;
@@ -29,6 +28,11 @@ public class PersonImpl extends NamedImpl implements Person {
public Nationality getNationality() {
return nationality;
}
@Override
public void setNationality(Nationality newNationality) {
this.nationality = newNationality;
}
@Override
public Date getDateOfBirth() {
@@ -2,15 +2,14 @@ package com.sap.sailing.domain.base.impl;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.Person;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.common.impl.NamedImpl;
public class TeamImpl extends NamedImpl implements Team {
public class TeamImpl extends NamedImpl implements DynamicTeam {
private static final long serialVersionUID = 4646922280429210183L;
private final Iterable<? extends Person> sailors;
private final Iterable<? extends DynamicPerson> sailors;
private final Person coach;
public TeamImpl(String name, Iterable<? extends Person> sailors, Person coach) {
public TeamImpl(String name, Iterable<? extends DynamicPerson> sailors, Person coach) {
super(name);
this.sailors = sailors;
this.coach = coach;
@@ -39,4 +38,11 @@ public class TeamImpl extends NamedImpl implements Team {
return null;
}
@Override
public void setNationality(Nationality newNationality) {
for (Person sailor : getSailors()) {
((DynamicPerson) sailor).setNationality(newNationality);
}
}
}
@@ -9,18 +9,18 @@ import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.Person;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.base.impl.BoatImpl;
import com.sap.sailing.domain.base.impl.CourseImpl;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicPerson;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.base.impl.PersonImpl;
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
import com.sap.sailing.domain.base.impl.RegattaImpl;
@@ -41,9 +41,9 @@ import com.sap.sailing.domain.swisstimingadapter.Mark;
import com.sap.sailing.domain.swisstimingadapter.MessageType;
import com.sap.sailing.domain.swisstimingadapter.Race;
import com.sap.sailing.domain.swisstimingadapter.RaceSpecificMessageLoader;
import com.sap.sailing.domain.swisstimingadapter.StartList;
import com.sap.sailing.domain.swisstimingadapter.RaceType;
import com.sap.sailing.domain.swisstimingadapter.RaceType.OlympicRaceCode;
import com.sap.sailing.domain.swisstimingadapter.StartList;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.MarkPassing;
@@ -128,13 +128,13 @@ public class DomainFactoryImpl implements DomainFactory {
public Competitor getOrCreateCompetitor(com.sap.sailing.domain.swisstimingadapter.Competitor competitor, RaceType raceType) {
Competitor result = getCompetitorByBoatIDAndRaceType(competitor.getBoatID(), raceType);
if (result == null) {
Boat boat = new BoatImpl(competitor.getName(), raceType.getBoatClass(), competitor.getBoatID());
List<Person> teamMembers = new ArrayList<Person>();
DynamicBoat boat = new BoatImpl(competitor.getName(), raceType.getBoatClass(), competitor.getBoatID());
List<DynamicPerson> teamMembers = new ArrayList<DynamicPerson>();
for (String teamMemberName : competitor.getName().split("[-+&]")) {
teamMembers.add(new PersonImpl(teamMemberName.trim(), getOrCreateNationality(competitor.getThreeLetterIOCCode()),
/* dateOfBirth */ null, teamMemberName.trim()));
}
Team team = new TeamImpl(competitor.getName(), teamMembers, /* coach */ null);
DynamicTeam team = new TeamImpl(competitor.getName(), teamMembers, /* coach */ null);
result = baseDomainFactory.getOrCreateCompetitor(getCompetitorID(competitor.getBoatID(), raceType),
competitor.getName(), team, boat);
}
@@ -17,11 +17,11 @@ import java.util.Map;
import java.util.Set;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Person;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.base.impl.BoatClassImpl;
import com.sap.sailing.domain.base.impl.BoatImpl;
import com.sap.sailing.domain.base.impl.CompetitorImpl;
import com.sap.sailing.domain.base.impl.DynamicPerson;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.base.impl.PersonImpl;
import com.sap.sailing.domain.base.impl.TeamImpl;
import com.sap.sailing.domain.common.Position;
@@ -114,8 +114,8 @@ public abstract class StoredTrackBasedTest extends TrackBasedTest {
Map<Competitor, DynamicGPSFixTrack<Competitor, GPSFixMoving>> tracks = new HashMap<Competitor, DynamicGPSFixTrack<Competitor,GPSFixMoving>>();
final String KIELER_WOCHE = "Kieler Woche";
for (String competitorName : getCompetitorNamesOfStoredTracks(KIELER_WOCHE)) {
Person p = new PersonImpl(competitorName, /* nationality */ null, /* dateOfBirth */ null, /* description */ null);
Team t = new TeamImpl(competitorName, Collections.singleton(p), /* coach */ null);
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, t, new BoatImpl(competitorName,
new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null));
DynamicGPSFixTrack<Competitor, GPSFixMoving> track = readTrack(c, KIELER_WOCHE);
@@ -19,21 +19,21 @@ import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.Course;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.Person;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.Sideline;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.base.impl.BoatImpl;
import com.sap.sailing.domain.base.impl.CourseImpl;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicPerson;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.base.impl.KilometersPerHourSpeedWithBearingImpl;
import com.sap.sailing.domain.base.impl.PersonImpl;
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
@@ -87,9 +87,9 @@ public class DomainFactoryImpl implements DomainFactory {
private final Map<TracTracControlPoint, com.sap.sailing.domain.base.ControlPoint> controlPointCache =
new HashMap<TracTracControlPoint, com.sap.sailing.domain.base.ControlPoint>();
private final Map<Pair<String, UUID>, Person> personCache = new HashMap<>();
private final Map<Pair<String, UUID>, DynamicPerson> personCache = new HashMap<>();
private final Map<Serializable, Team> teamCache = new HashMap<>();
private final Map<Serializable, DynamicTeam> teamCache = new HashMap<>();
/**
* Caches regattas by their name and their boat class's name
@@ -245,20 +245,20 @@ public class DomainFactoryImpl implements DomainFactory {
nationality = null;
logger.log(Level.SEVERE, "Unknown nationality "+nationalityAsString+" for competitor "+name+"; leaving null", iae);
}
Team team = getOrCreateTeam(name, nationality, competitorId);
Boat boat = new BoatImpl(shortName, boatClass, shortName);
DynamicTeam team = getOrCreateTeam(name, nationality, competitorId);
DynamicBoat boat = new BoatImpl(shortName, boatClass, shortName);
result = baseDomainFactory.getOrCreateCompetitor(competitorId, name, team, boat);
}
return result;
}
@Override
public Team getOrCreateTeam(String name, Nationality nationality, UUID competitorId) {
public DynamicTeam getOrCreateTeam(String name, Nationality nationality, UUID competitorId) {
synchronized (teamCache) {
Team result = teamCache.get(competitorId);
DynamicTeam result = teamCache.get(competitorId);
if (result == null) {
String[] sailorNames = name.split("\\b*\\+\\b*");
List<Person> sailors = new ArrayList<Person>();
List<DynamicPerson> sailors = new ArrayList<DynamicPerson>();
for (String sailorName : sailorNames) {
sailors.add(getOrCreatePerson(sailorName.trim(), nationality, competitorId));
}
@@ -270,10 +270,10 @@ public class DomainFactoryImpl implements DomainFactory {
}
@Override
public Person getOrCreatePerson(String name, Nationality nationality, UUID competitorId) {
public DynamicPerson getOrCreatePerson(String name, Nationality nationality, UUID competitorId) {
synchronized (personCache) {
Pair<String, UUID> key = new Pair<String, UUID>(name, competitorId);
Person result = personCache.get(key);
DynamicPerson result = personCache.get(key);
if (result == null) {
result = new PersonImpl(name, nationality, /* date of birth unknown */null, /* description */"");
personCache.put(key, result);
@@ -2,6 +2,9 @@ package com.sap.sailing.domain.base;
import java.io.Serializable;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicTeam;
/**
* Manages a set of {@link Competitor} objects. There may be a transient implementation based on a simple cache,
* and there may be persistent implementations.
@@ -13,7 +16,7 @@ public interface CompetitorStore {
Competitor getExistingCompetitorById(Serializable competitorId);
Competitor getOrCreateCompetitor(Serializable competitorId, String name, Team team, Boat boat);
Competitor getOrCreateCompetitor(Serializable competitorId, String name, DynamicTeam team, DynamicBoat boat);
int size();
@@ -22,7 +25,18 @@ public interface CompetitorStore {
*/
void clear();
Iterable<Competitor> getCompetitors();
Iterable<? extends Competitor> getCompetitors();
void removeCompetitor(Competitor competitor);
/**
* Updates the competitor with {@link Competitor#getId() ID} <code>id</code> by setting the name, sail ID and nationality to
* the values provided. Doing so will not fire any events nor will it replicate this change from a master to any replicas.
* The calling client has to make sure that the changes applied will reach replicas and all other interested clients. It will
* be sufficient to ensure that subsequent DTOs produced from the competitor modified will reflect the changes.<p>
*
* If no competitor with the ID requested is found, the call is a no-op, doing nothing, not even throwing an exception.
* @return TODO
*/
Competitor updateCompetitor(Serializable id, String newName, String newSailId, Nationality newNationality);
}
@@ -14,11 +14,11 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorStore;
@@ -30,7 +30,6 @@ import com.sap.sailing.domain.base.Gate;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.ObjectInputStreamResolvingAgainstDomainFactory;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.common.CountryCode;
import com.sap.sailing.domain.common.Distance;
@@ -300,10 +299,15 @@ public class DomainFactoryImpl implements DomainFactory {
}
@Override
public synchronized Competitor getOrCreateCompetitor(Serializable competitorId, String name, Team team, Boat boat) {
public synchronized Competitor getOrCreateCompetitor(Serializable competitorId, String name, DynamicTeam team, DynamicBoat boat) {
return competitorStore.getOrCreateCompetitor(competitorId, name, team, boat);
}
@Override
public DynamicCompetitor getOrCreateDynamicCompetitor(UUID fromString, String name, DynamicTeam team, DynamicBoat boat) {
return (DynamicCompetitor) getOrCreateDynamicCompetitor(fromString, name, team, boat);
}
@Override
public ObjectInputStreamResolvingAgainstDomainFactory createObjectInputStreamResolvingAgainstThisFactory(InputStream inputStream) throws IOException {
return new ObjectInputStreamResolvingAgainstDomainFactoryImpl(inputStream, this);
@@ -0,0 +1,17 @@
package com.sap.sailing.domain.base.impl;
import java.io.Serializable;
import com.sap.sailing.domain.base.CompetitorStore;
public interface DynamicCompetitorStore extends CompetitorStore {
@Override
DynamicCompetitor getExistingCompetitorById(Serializable competitorId);
@Override
DynamicCompetitor getOrCreateCompetitor(Serializable competitorId, String name, DynamicTeam team, DynamicBoat boat);
@Override
Iterable<? extends DynamicCompetitor> getCompetitors();
}
@@ -4,10 +4,9 @@ import java.io.Serializable;
import java.util.Collections;
import java.util.concurrent.ConcurrentHashMap;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorStore;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.base.Nationality;
public class TransientCompetitorStoreImpl implements CompetitorStore, Serializable {
private static final long serialVersionUID = -4198298775476586931L;
@@ -17,7 +16,7 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
competitorCache = new ConcurrentHashMap<>();
}
private Competitor createCompetitor(Serializable id, String name, Team team, Boat boat) {
private Competitor createCompetitor(Serializable id, String name, DynamicTeam team, DynamicBoat boat) {
Competitor result = new CompetitorImpl(id, name, team, boat);
addNewCompetitor(id, result);
return result;
@@ -33,7 +32,7 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
}
@Override
public Competitor getOrCreateCompetitor(Serializable competitorId, String name, Team team, Boat boat) {
public Competitor getOrCreateCompetitor(Serializable competitorId, String name, DynamicTeam team, DynamicBoat boat) {
Competitor result = getExistingCompetitorById(competitorId); // avoid synchronization for successful read access
if (result == null) {
synchronized(this) {
@@ -70,5 +69,16 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
public void removeCompetitor(Competitor competitor) {
competitorCache.remove(competitor.getId());
}
@Override
public Competitor updateCompetitor(Serializable id, String newName, String newSailId, Nationality newNationality) {
DynamicCompetitor competitor = (DynamicCompetitor) getExistingCompetitorById(id);
if (competitor != null) {
competitor.setName(newName);
competitor.getBoat().setSailId(newSailId);
competitor.getTeam().setNationality(newNationality);
}
return competitor;
}
}
@@ -2,14 +2,14 @@ package com.sap.sailing.server.gateway.deserialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.impl.BoatImpl;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.BoatJsonSerializer;
public class BoatJsonDeserializer implements JsonDeserializer<Boat> {
public class BoatJsonDeserializer implements JsonDeserializer<DynamicBoat> {
private final BoatClassJsonDeserializer boatClassDeserializer;
public BoatJsonDeserializer(BoatClassJsonDeserializer boatClassDeserializer) {
@@ -17,7 +17,7 @@ public class BoatJsonDeserializer implements JsonDeserializer<Boat> {
this.boatClassDeserializer = boatClassDeserializer;
}
public Boat deserialize(JSONObject object) throws JsonDeserializationException {
public DynamicBoat deserialize(JSONObject object) throws JsonDeserializationException {
String name = object.get(BoatJsonSerializer.FIELD_NAME).toString();
String sailId = object.get(BoatJsonSerializer.FIELD_SAIL_ID).toString();
BoatClass boatClass = null;
@@ -4,19 +4,19 @@ import java.io.Serializable;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.CompetitorJsonSerializer;
public class CompetitorJsonDeserializer implements JsonDeserializer<Competitor> {
protected final SharedDomainFactory factory;
protected final JsonDeserializer<Team> teamJsonDeserializer;
protected final JsonDeserializer<Boat> boatJsonDeserializer;
protected final JsonDeserializer<DynamicTeam> teamJsonDeserializer;
protected final JsonDeserializer<DynamicBoat> boatJsonDeserializer;
public static CompetitorJsonDeserializer create(DomainFactory baseDomainFactory) {
return new CompetitorJsonDeserializer(baseDomainFactory, new TeamJsonDeserializer(new PersonJsonDeserializer(
@@ -27,7 +27,7 @@ public class CompetitorJsonDeserializer implements JsonDeserializer<Competitor>
this(factory, null, /* boatDeserializer */ null);
}
public CompetitorJsonDeserializer(SharedDomainFactory factory, JsonDeserializer<Team> teamJsonDeserializer, JsonDeserializer<Boat> boatDeserializer) {
public CompetitorJsonDeserializer(SharedDomainFactory factory, JsonDeserializer<DynamicTeam> teamJsonDeserializer, JsonDeserializer<DynamicBoat> boatDeserializer) {
this.factory = factory;
this.teamJsonDeserializer = teamJsonDeserializer;
this.boatJsonDeserializer = boatDeserializer;
@@ -38,8 +38,8 @@ public class CompetitorJsonDeserializer implements JsonDeserializer<Competitor>
Serializable competitorId = (Serializable) object.get(CompetitorJsonSerializer.FIELD_ID);
competitorId = Helpers.tryUuidConversion(competitorId);
String name = (String) object.get(CompetitorJsonSerializer.FIELD_NAME);
Team team = null;
Boat boat = null;
DynamicTeam team = null;
DynamicBoat boat = null;
if (teamJsonDeserializer != null) {
team = teamJsonDeserializer.deserialize(Helpers.getNestedObjectSafe(object,
CompetitorJsonSerializer.FIELD_TEAM));
@@ -5,13 +5,13 @@ import java.util.Date;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.Person;
import com.sap.sailing.domain.base.impl.DynamicPerson;
import com.sap.sailing.domain.base.impl.PersonImpl;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.PersonJsonSerializer;
public class PersonJsonDeserializer implements JsonDeserializer<Person> {
public class PersonJsonDeserializer implements JsonDeserializer<DynamicPerson> {
private final JsonDeserializer<Nationality> nationalityDeserializer;
@@ -20,7 +20,7 @@ public class PersonJsonDeserializer implements JsonDeserializer<Person> {
}
@Override
public Person deserialize(JSONObject object) throws JsonDeserializationException {
public DynamicPerson deserialize(JSONObject object) throws JsonDeserializationException {
if (object == null) {
// Coach is often null
return null;
@@ -8,32 +8,33 @@ import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.Person;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.base.impl.DynamicPerson;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.base.impl.TeamImpl;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.impl.TeamJsonSerializer;
public class TeamJsonDeserializer implements JsonDeserializer<Team> {
public class TeamJsonDeserializer implements JsonDeserializer<DynamicTeam> {
private final JsonDeserializer<Person> personDeserializer;
private final JsonDeserializer<DynamicPerson> personDeserializer;
public static TeamJsonDeserializer create(DomainFactory baseDomainFactory) {
return new TeamJsonDeserializer(new PersonJsonDeserializer(
new NationalityJsonDeserializer(baseDomainFactory)));
}
public TeamJsonDeserializer(JsonDeserializer<Person> personDeserializer) {
public TeamJsonDeserializer(JsonDeserializer<DynamicPerson> personDeserializer) {
this.personDeserializer = personDeserializer;
}
@Override
public Team deserialize(JSONObject object)
public DynamicTeam deserialize(JSONObject object)
throws JsonDeserializationException {
String name = (String) object.get(TeamJsonSerializer.FIELD_NAME);
Person coach = personDeserializer.deserialize((JSONObject) object
.get(TeamJsonSerializer.FIELD_COACH));
Set<Person> sailors = new HashSet<Person>();
Set<DynamicPerson> sailors = new HashSet<DynamicPerson>();
JSONArray sailorsJson = (JSONArray) object
.get(TeamJsonSerializer.FIELD_SAILORS);
@@ -4,44 +4,44 @@ import java.util.UUID;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.base.impl.BoatImpl;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicCompetitor;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.serialization.masterdata.impl.CompetitorMasterDataJsonSerializer;
public class CompetitorMasterDataDeserializer implements JsonDeserializer<Competitor> {
public class CompetitorMasterDataDeserializer implements JsonDeserializer<DynamicCompetitor> {
private final JsonDeserializer<BoatClass> boatClassDeserializer;
private final JsonDeserializer<Team> teamDeserializer;
private final JsonDeserializer<DynamicTeam> teamDeserializer;
private final SharedDomainFactory domainFactory;
public CompetitorMasterDataDeserializer(JsonDeserializer<BoatClass> boatClassDeserializer,
JsonDeserializer<Team> teamDeserializer, SharedDomainFactory domainFactory) {
JsonDeserializer<DynamicTeam> teamDeserializer, SharedDomainFactory domainFactory) {
this.boatClassDeserializer = boatClassDeserializer;
this.teamDeserializer = teamDeserializer;
this.domainFactory = domainFactory;
}
@Override
public Competitor deserialize(JSONObject object) throws JsonDeserializationException {
public DynamicCompetitor deserialize(JSONObject object) throws JsonDeserializationException {
String name = (String) object.get(CompetitorMasterDataJsonSerializer.FIELD_NAME);
String id = (String) object.get(CompetitorMasterDataJsonSerializer.FIELD_ID);
Boat boat = createBoatFromJson((JSONObject) object.get(CompetitorMasterDataJsonSerializer.FIELD_BOAT));
Team team = teamDeserializer.deserialize((JSONObject) object.get(CompetitorMasterDataJsonSerializer.FIELD_TEAM));
return domainFactory.getOrCreateCompetitor(UUID.fromString(id), name, team, boat);
DynamicBoat boat = createBoatFromJson((JSONObject) object.get(CompetitorMasterDataJsonSerializer.FIELD_BOAT));
DynamicTeam team = teamDeserializer.deserialize((JSONObject) object.get(CompetitorMasterDataJsonSerializer.FIELD_TEAM));
return domainFactory.getOrCreateDynamicCompetitor(UUID.fromString(id), name, team, boat);
}
private Boat createBoatFromJson(JSONObject object) throws JsonDeserializationException {
private DynamicBoat createBoatFromJson(JSONObject object) throws JsonDeserializationException {
String name = (String) object.get(CompetitorMasterDataJsonSerializer.FIELD_NAME);
String sailID = (String) object.get(CompetitorMasterDataJsonSerializer.FIELD_SAIL_ID);
BoatClass boatClass = boatClassDeserializer.deserialize((JSONObject) object.get(CompetitorMasterDataJsonSerializer.FIELD_BOAT_CLASS));
@@ -9,13 +9,13 @@ import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.LeaderboardMasterData;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.Person;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.base.impl.DynamicCompetitor;
import com.sap.sailing.domain.base.impl.DynamicPerson;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.leaderboard.ScoringScheme;
import com.sap.sailing.domain.masterdataimport.EventMasterData;
@@ -47,9 +47,9 @@ public class LeaderboardGroupMasterDataJsonDeserializer implements JsonDeseriali
public static JsonDeserializer<LeaderboardGroupMasterData> create(DomainFactory domainFactory) {
JsonDeserializer<BoatClass> boatClassDeserializer = new BoatClassJsonDeserializer(domainFactory);
JsonDeserializer<Nationality> nationalityDeserializer = new NationalityJsonDeserializer(domainFactory);
JsonDeserializer<Person> personDeserializer = new PersonJsonDeserializer(nationalityDeserializer);
JsonDeserializer<Team> teamDeserializer = new TeamJsonDeserializer(personDeserializer);
JsonDeserializer<Competitor> competitorDeserializer = new CompetitorMasterDataDeserializer(
JsonDeserializer<DynamicPerson> personDeserializer = new PersonJsonDeserializer(nationalityDeserializer);
JsonDeserializer<DynamicTeam> teamDeserializer = new TeamJsonDeserializer(personDeserializer);
JsonDeserializer<DynamicCompetitor> competitorDeserializer = new CompetitorMasterDataDeserializer(
boatClassDeserializer, teamDeserializer, domainFactory);
JsonDeserializer<RaceLogEvent> raceLogEventDeserializer = RaceLogEventDeserializer.create(domainFactory);
JsonDeserializer<LeaderboardMasterData> leaderboardDeserializer = new LeaderboardMasterDataJsonDeserializer(
@@ -13,6 +13,7 @@ import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.LeaderboardMasterData;
import com.sap.sailing.domain.base.impl.DynamicCompetitor;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.common.ScoringSchemeType;
@@ -30,11 +31,11 @@ import com.sap.sailing.server.gateway.serialization.masterdata.impl.RaceColumnMa
public class LeaderboardMasterDataJsonDeserializer implements JsonDeserializer<LeaderboardMasterData> {
private final JsonDeserializer<Competitor> competitorDeserializer;
private final JsonDeserializer<DynamicCompetitor> competitorDeserializer;
private final DomainFactory domainFactory;
private final JsonDeserializer<RaceLogEvent> raceLogEventDeseriaizer;
public LeaderboardMasterDataJsonDeserializer(JsonDeserializer<Competitor> competitorDeserializer,
public LeaderboardMasterDataJsonDeserializer(JsonDeserializer<DynamicCompetitor> competitorDeserializer,
DomainFactory domainFactory, JsonDeserializer<RaceLogEvent> raceLogEventDeseriaizer) {
this.competitorDeserializer = competitorDeserializer;
this.domainFactory = domainFactory;
@@ -22,7 +22,6 @@ import org.junit.Test;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseArea;
@@ -33,12 +32,14 @@ import com.sap.sailing.domain.base.Person;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.base.impl.BoatClassImpl;
import com.sap.sailing.domain.base.impl.BoatImpl;
import com.sap.sailing.domain.base.impl.CompetitorImpl;
import com.sap.sailing.domain.base.impl.CourseAreaImpl;
import com.sap.sailing.domain.base.impl.DomainFactoryImpl;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicPerson;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.base.impl.FleetImpl;
import com.sap.sailing.domain.base.impl.NationalityImpl;
import com.sap.sailing.domain.base.impl.PersonImpl;
@@ -180,24 +181,24 @@ public class MasterDataImportTest {
// Set tracked Race with competitors
Set<Competitor> competitors = new HashSet<Competitor>();
UUID competitorUUID = UUID.randomUUID();
Set<Person> sailors = new HashSet<Person>();
Set<DynamicPerson> sailors = new HashSet<DynamicPerson>();
sailors.add(new PersonImpl("Froderik Poterson", new NationalityImpl("GER"), new Date(645487200000L),
"Oberhoschy"));
Person coach = new PersonImpl("Lennart Hensler", new NationalityImpl("GER"), new Date(645487200000L),
"Der Lennart halt");
Team team = new TeamImpl("Pros", sailors, coach);
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
Boat boat = new BoatImpl("Wingy", boatClass, "GER70133");
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", team, boat);
competitors.add(competitor);
UUID competitorToSuppressUUID = UUID.randomUUID();
Set<Person> sailors2 = new HashSet<Person>();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
sailors2.add(new PersonImpl("Angela Merkel", new NationalityImpl("GER"), new Date(645487200000L),
"segelt auch mit"));
Person coach2 = new PersonImpl("Peer Steinbrueck", new NationalityImpl("GER"), new Date(645487200000L),
"Bester Coach");
Team team2 = new TeamImpl("Noobs", sailors2, coach2);
Boat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", team2, boat2);
competitors.add(competitorToSuppress);
TrackedRace trackedRace = new DummyTrackedRace(competitors, regatta);
@@ -345,22 +346,22 @@ public class MasterDataImportTest {
// Set tracked Race with competitors
Set<Competitor> competitors = new HashSet<Competitor>();
UUID competitorUUID = UUID.randomUUID();
Set<Person> sailors = new HashSet<Person>();
Set<DynamicPerson> sailors = new HashSet<DynamicPerson>();
sailors.add(new PersonImpl("Froderik Poterson", new NationalityImpl("GER"), new Date(645487200000L),
"Oberhoschy"));
Person coach = new PersonImpl("Lennart Hensler", new NationalityImpl("GER"), new Date(645487200000L),
"Der Lennart halt");
Team team = new TeamImpl("Pros", sailors, coach);
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
Boat boat = new BoatImpl("Wingy", boatClass, "GER70133");
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", team, boat);
competitors.add(competitor);
UUID competitor2UUID = UUID.randomUUID();
Set<Person> sailors2 = new HashSet<Person>();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
sailors2.add(new PersonImpl("Test Mustermann", new NationalityImpl("GER"), new Date(645487200000L), "desc"));
Person coach2 = new PersonImpl("Max Test", new NationalityImpl("GER"), new Date(645487200000L), "desc");
Team team2 = new TeamImpl("Pros2", sailors2, coach2);
Boat boat2 = new BoatImpl("FastBoat", boatClass, "GER70133");
DynamicTeam team2 = new TeamImpl("Pros2", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("FastBoat", boatClass, "GER70133");
CompetitorImpl competitor2 = new CompetitorImpl(competitor2UUID, "Froderik", team2, boat2);
competitors.add(competitor2);
TrackedRace trackedRace = new DummyTrackedRace(competitors, regatta);
@@ -500,22 +501,22 @@ public class MasterDataImportTest {
// Set tracked Race with competitors
Set<Competitor> competitors = new HashSet<Competitor>();
UUID competitorUUID = UUID.randomUUID();
Set<Person> sailors = new HashSet<Person>();
Set<DynamicPerson> sailors = new HashSet<DynamicPerson>();
sailors.add(new PersonImpl("Froderik Poterson", new NationalityImpl("GER"), new Date(645487200000L),
"Oberhoschy"));
Person coach = new PersonImpl("Lennart Hensler", new NationalityImpl("GER"), new Date(645487200000L),
"Der Lennart halt");
Team team = new TeamImpl("Pros", sailors, coach);
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
Boat boat = new BoatImpl("Wingy", boatClass, "GER70133");
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
Competitor competitor = sourceDomainFactory.getOrCreateCompetitor(competitorUUID, "Froderik", team, boat);
competitors.add(competitor);
UUID competitor2UUID = UUID.randomUUID();
Set<Person> sailors2 = new HashSet<Person>();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
sailors2.add(new PersonImpl("Test Mustermann", new NationalityImpl("GER"), new Date(645487200000L), "desc"));
Person coach2 = new PersonImpl("Max Test", new NationalityImpl("GER"), new Date(645487200000L), "desc");
Team team2 = new TeamImpl("Pros2", sailors2, coach2);
Boat boat2 = new BoatImpl("FastBoat", boatClass, "GER70133");
DynamicTeam team2 = new TeamImpl("Pros2", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("FastBoat", boatClass, "GER70133");
Competitor competitor2 = sourceDomainFactory.getOrCreateCompetitor(competitor2UUID, "Froderik", team2, boat2);
competitors.add(competitor2);
TrackedRace trackedRace = new DummyTrackedRace(competitors, regatta);
@@ -632,24 +633,24 @@ public class MasterDataImportTest {
// Set tracked Race with competitors
Set<Competitor> competitors = new HashSet<Competitor>();
UUID competitorUUID = UUID.randomUUID();
Set<Person> sailors = new HashSet<Person>();
Set<DynamicPerson> sailors = new HashSet<DynamicPerson>();
sailors.add(new PersonImpl("Froderik Poterson", new NationalityImpl("GER"), new Date(645487200000L),
"Oberhoschy"));
Person coach = new PersonImpl("Lennart Hensler", new NationalityImpl("GER"), new Date(645487200000L),
"Der Lennart halt");
Team team = new TeamImpl("Pros", sailors, coach);
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
Boat boat = new BoatImpl("Wingy", boatClass, "GER70133");
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", team, boat);
competitors.add(competitor);
UUID competitorToSuppressUUID = UUID.randomUUID();
Set<Person> sailors2 = new HashSet<Person>();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
sailors2.add(new PersonImpl("Angela Merkel", new NationalityImpl("GER"), new Date(645487200000L),
"segelt auch mit"));
Person coach2 = new PersonImpl("Peer Steinbrueck", new NationalityImpl("GER"), new Date(645487200000L),
"Bester Coach");
Team team2 = new TeamImpl("Noobs", sailors2, coach2);
Boat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", team2, boat2);
competitors.add(competitorToSuppress);
TrackedRace trackedRace = new DummyTrackedRace(competitors, regatta);
@@ -808,24 +809,24 @@ public class MasterDataImportTest {
// Set tracked Race with competitors
Set<Competitor> competitors = new HashSet<Competitor>();
UUID competitorUUID = UUID.randomUUID();
Set<Person> sailors = new HashSet<Person>();
Set<DynamicPerson> sailors = new HashSet<DynamicPerson>();
sailors.add(new PersonImpl("Froderik Poterson", new NationalityImpl("GER"), new Date(645487200000L),
"Oberhoschy"));
Person coach = new PersonImpl("Lennart Hensler", new NationalityImpl("GER"), new Date(645487200000L),
"Der Lennart halt");
Team team = new TeamImpl("Pros", sailors, coach);
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
Boat boat = new BoatImpl("Wingy", boatClass, "GER70133");
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", team, boat);
competitors.add(competitor);
UUID competitorToSuppressUUID = UUID.randomUUID();
Set<Person> sailors2 = new HashSet<Person>();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
sailors2.add(new PersonImpl("Angela Merkel", new NationalityImpl("GER"), new Date(645487200000L),
"segelt auch mit"));
Person coach2 = new PersonImpl("Peer Steinbrueck", new NationalityImpl("GER"), new Date(645487200000L),
"Bester Coach");
Team team2 = new TeamImpl("Noobs", sailors2, coach2);
Boat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", team2, boat2);
competitors.add(competitorToSuppress);
TrackedRace trackedRace = new DummyTrackedRace(competitors, regatta);
@@ -978,24 +979,24 @@ public class MasterDataImportTest {
// Set tracked Race with competitors
Set<Competitor> competitors = new HashSet<Competitor>();
UUID competitorUUID = UUID.randomUUID();
Set<Person> sailors = new HashSet<Person>();
Set<DynamicPerson> sailors = new HashSet<DynamicPerson>();
sailors.add(new PersonImpl("Froderik Poterson", new NationalityImpl("GER"), new Date(645487200000L),
"Oberhoschy"));
Person coach = new PersonImpl("Lennart Hensler", new NationalityImpl("GER"), new Date(645487200000L),
"Der Lennart halt");
Team team = new TeamImpl("Pros", sailors, coach);
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
Boat boat = new BoatImpl("Wingy", boatClass, "GER70133");
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", team, boat);
competitors.add(competitor);
UUID competitorToSuppressUUID = UUID.randomUUID();
Set<Person> sailors2 = new HashSet<Person>();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
sailors2.add(new PersonImpl("Angela Merkel", new NationalityImpl("GER"), new Date(645487200000L),
"segelt auch mit"));
Person coach2 = new PersonImpl("Peer Steinbrueck", new NationalityImpl("GER"), new Date(645487200000L),
"Bester Coach");
Team team2 = new TeamImpl("Noobs", sailors2, coach2);
Boat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", team2, boat2);
competitors.add(competitorToSuppress);
TrackedRace trackedRace = new DummyTrackedRace(competitors, regatta);
@@ -1103,24 +1104,24 @@ public class MasterDataImportTest {
// Set tracked Race with competitors
Set<Competitor> competitors = new HashSet<Competitor>();
UUID competitorUUID = UUID.randomUUID();
Set<Person> sailors = new HashSet<Person>();
Set<DynamicPerson> sailors = new HashSet<DynamicPerson>();
sailors.add(new PersonImpl("Froderik Poterson", new NationalityImpl("GER"), new Date(645487200000L),
"Oberhoschy"));
Person coach = new PersonImpl("Lennart Hensler", new NationalityImpl("GER"), new Date(645487200000L),
"Der Lennart halt");
Team team = new TeamImpl("Pros", sailors, coach);
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
Boat boat = new BoatImpl("Wingy", boatClass, "GER70133");
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", team, boat);
competitors.add(competitor);
UUID competitorToSuppressUUID = UUID.randomUUID();
Set<Person> sailors2 = new HashSet<Person>();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
sailors2.add(new PersonImpl("Angela Merkel", new NationalityImpl("GER"), new Date(645487200000L),
"segelt auch mit"));
Person coach2 = new PersonImpl("Peer Steinbrueck", new NationalityImpl("GER"), new Date(645487200000L),
"Bester Coach");
Team team2 = new TeamImpl("Noobs", sailors2, coach2);
Boat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", team2, boat2);
competitors.add(competitorToSuppress);
TrackedRace trackedRace = new DummyTrackedRace(competitors, regatta);
@@ -1277,24 +1278,24 @@ public class MasterDataImportTest {
// Set tracked Race with competitors
Set<Competitor> competitors = new HashSet<Competitor>();
UUID competitorUUID = UUID.randomUUID();
Set<Person> sailors = new HashSet<Person>();
Set<DynamicPerson> sailors = new HashSet<DynamicPerson>();
sailors.add(new PersonImpl("Froderik Poterson", new NationalityImpl("GER"), new Date(645487200000L),
"Oberhoschy"));
Person coach = new PersonImpl("Lennart Hensler", new NationalityImpl("GER"), new Date(645487200000L),
"Der Lennart halt");
Team team = new TeamImpl("Pros", sailors, coach);
DynamicTeam team = new TeamImpl("Pros", sailors, coach);
BoatClass boatClass = new BoatClassImpl("H16", true);
Boat boat = new BoatImpl("Wingy", boatClass, "GER70133");
DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133");
CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", team, boat);
competitors.add(competitor);
UUID competitorToSuppressUUID = UUID.randomUUID();
Set<Person> sailors2 = new HashSet<Person>();
Set<DynamicPerson> sailors2 = new HashSet<DynamicPerson>();
sailors2.add(new PersonImpl("Angela Merkel", new NationalityImpl("GER"), new Date(645487200000L),
"segelt auch mit"));
Person coach2 = new PersonImpl("Peer Steinbrueck", new NationalityImpl("GER"), new Date(645487200000L),
"Bester Coach");
Team team2 = new TeamImpl("Noobs", sailors2, coach2);
Boat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2);
DynamicBoat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337");
CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", team2, boat2);
competitors.add(competitorToSuppress);
TrackedRace trackedRace = new DummyTrackedRace(competitors, regatta);
@@ -7,6 +7,7 @@ import java.io.Serializable;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorStore;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.impl.DomainFactoryImpl;
import com.sap.sailing.domain.base.impl.TransientCompetitorStoreImpl;
import com.sap.sailing.domain.persistence.DomainObjectFactory;
@@ -79,5 +80,13 @@ public class PersistentCompetitorStore extends TransientCompetitorStoreImpl impl
storeTo.removeCompetitor(competitor);
super.removeCompetitor(competitor);
}
@Override
public Competitor updateCompetitor(Serializable id, String newName, String newSailId, Nationality newNationality) {
Competitor result = super.updateCompetitor(id, newName, newSailId, newNationality);
storeTo.storeCompetitor(result);
return result;
}
}
@@ -42,6 +42,7 @@ import com.sap.sailing.domain.base.RegattaListener;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.Sideline;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.base.impl.DynamicCompetitor;
import com.sap.sailing.domain.base.impl.EventImpl;
import com.sap.sailing.domain.base.impl.RegattaImpl;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
@@ -1702,7 +1703,8 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
// only copy the competitors from the deserialized competitor store; don't use it because it will have set
// a default Mongo object factory
for (Competitor competitor : ((CompetitorStore) ois.readObject()).getCompetitors()) {
persistentCompetitorStore.getOrCreateCompetitor(competitor.getId(), competitor.getName(), competitor.getTeam(), competitor.getBoat());
DynamicCompetitor dynamicCompetitor = (DynamicCompetitor) competitor;
persistentCompetitorStore.getOrCreateCompetitor(dynamicCompetitor.getId(), dynamicCompetitor.getName(), dynamicCompetitor.getTeam(), dynamicCompetitor.getBoat());
}
logoutput.append("\nReceived " + persistentCompetitorStore.size() + " NEW competitors\n");
@@ -2,46 +2,42 @@ package com.sap.sailing.server.operationaltransformation;
import java.io.Serializable;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.RacingEventServiceOperation;
public class CreatePersistentCompetitor extends
AbstractRacingEventServiceOperation<Competitor> {
private static final long serialVersionUID = 1538753300467120249L;
// private static final Logger logger =
// Logger.getLogger(CreatePersistentCompetitor.class.getName());
public class CreatePersistentCompetitor extends AbstractRacingEventServiceOperation<Competitor> {
private final Serializable id;
private final String name;
private final Team team;
private final Boat boat;
private static final long serialVersionUID = 1538753300467120249L;
// private static final Logger logger =
// Logger.getLogger(CreatePersistentCompetitor.class.getName());
public CreatePersistentCompetitor(Serializable id, String name, Team team,
Boat boat) {
this.id = id;
this.name = name;
this.team = team;
this.boat = boat;
}
private final Serializable id;
private final String name;
private final DynamicTeam team;
private final DynamicBoat boat;
@Override
public Competitor internalApplyTo(RacingEventService toState) {
return toState.getBaseDomainFactory().getOrCreateCompetitor(id, name, team, boat);
}
public CreatePersistentCompetitor(Serializable id, String name, DynamicTeam team, DynamicBoat boat) {
this.id = id;
this.name = name;
this.team = team;
this.boat = boat;
}
@Override
public RacingEventServiceOperation<?> transformClientOp(
RacingEventServiceOperation<?> serverOp) {
return serverOp.transformCreatePersistentCompetitorClientOp(this);
}
@Override
public Competitor internalApplyTo(RacingEventService toState) {
return toState.getBaseDomainFactory().getOrCreateCompetitor(id, name, team, boat);
}
@Override
public RacingEventServiceOperation<?> transformServerOp(
RacingEventServiceOperation<?> clientOp) {
return clientOp.transformCreatePersistentCompetitorServerOp(this);
}
@Override
public RacingEventServiceOperation<?> transformClientOp(RacingEventServiceOperation<?> serverOp) {
return serverOp.transformCreatePersistentCompetitorClientOp(this);
}
@Override
public RacingEventServiceOperation<?> transformServerOp(RacingEventServiceOperation<?> clientOp) {
return clientOp.transformCreatePersistentCompetitorServerOp(this);
}
}
@@ -0,0 +1,42 @@
package com.sap.sailing.server.operationaltransformation;
import java.io.Serializable;
import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.RacingEventServiceOperation;
public class UpdateCompetitor extends AbstractRacingEventServiceOperation<Void> {
private static final long serialVersionUID = 1172181354320184263L;
private final Serializable id;
private final String newName;
private final String newSailId;
private final Nationality newNationality;
public UpdateCompetitor(Serializable id, String newName, String newSailId, Nationality newNationality) {
super();
this.id = id;
this.newName = newName;
this.newSailId = newSailId;
this.newNationality = newNationality;
}
@Override
public Void internalApplyTo(RacingEventService toState) throws Exception {
toState.getBaseDomainFactory().getCompetitorStore().updateCompetitor(id, newName, newSailId, newNationality);
return null;
}
@Override
public RacingEventServiceOperation<?> transformClientOp(RacingEventServiceOperation<?> serverOp) {
// TODO Auto-generated method stub
return null;
}
@Override
public RacingEventServiceOperation<?> transformServerOp(RacingEventServiceOperation<?> clientOp) {
// TODO Auto-generated method stub
return null;
}
}