diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/CompetitorAndBoatStore.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/CompetitorAndBoatStore.java index 034d32766cb..82ee5439cfc 100755 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/CompetitorAndBoatStore.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/CompetitorAndBoatStore.java @@ -130,18 +130,6 @@ public interface CompetitorAndBoatStore extends CompetitorFactory, BoatFactory { void removeCompetitorUpdateListener(CompetitorUpdateListener listener); - /** - * Updates the competitor with {@link Competitor#getId() ID} id 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.

- * - * If no competitor with the ID requested is found, the call is a no-op, doing nothing, not even throwing an exception. - */ - CompetitorWithBoat updateCompetitorWithBoat(String idAsString, String newName, String newShortName, Color newDisplayColor, String newEmail, - Nationality newNationality, URI newTeamImageUri, URI newFlagImageUri, - Double timeOnTimeFactor, Duration timeOnDistanceAllowancePerNauticalMile, String searchTag); - /** * If a valid boat is returned and the caller has information available that could be used to update the boat, * the caller must check the result of {@link #isBoatToUpdateDuringGetOrCreate(Competitor)}, and if true, diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/TransientCompetitorAndBoatStoreImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/TransientCompetitorAndBoatStoreImpl.java index a93acb78791..3e02fd719dc 100755 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/TransientCompetitorAndBoatStoreImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/impl/TransientCompetitorAndBoatStoreImpl.java @@ -441,43 +441,12 @@ public class TransientCompetitorAndBoatStoreImpl implements CompetitorAndBoatSto } } else if (isCompetitorToUpdateDuringGetOrCreate(result)) { assert result.getBoat() == boat; - updateCompetitorWithBoat(result.getId().toString(), name, shortName, displayColor, email, team.getNationality(), + updateCompetitor(result.getId().toString(), name, shortName, displayColor, email, team.getNationality(), team.getImage(), flagImage, timeOnTimeFactor, timeOnDistanceAllowancePerNauticalMile, searchTag); competitorNoLongerToUpdateDuringGetOrCreate(result); } return result; } - - @Override - public CompetitorWithBoat updateCompetitorWithBoat(String idAsString, String newName, String newShortName, Color newDisplayColor, String newEmail, - Nationality newNationality, URI newTeamImageUri, URI newFlagImageUri, - Double timeOnTimeFactor, Duration timeOnDistanceAllowancePerNauticalMile, String newSearchTag) { - DynamicCompetitorWithBoat competitor = (DynamicCompetitorWithBoat) getExistingCompetitorByIdAsString(idAsString); - if (competitor != null) { - LockUtil.lockForWrite(lock); - try { - competitor.setName(newName); - competitor.setShortName(newShortName); - competitor.setColor(newDisplayColor); - competitor.setEmail(newEmail); - competitor.setFlagImage(newFlagImageUri); - competitor.getTeam().setNationality(newNationality); - competitor.getTeam().setImage(newTeamImageUri); - competitor.setTimeOnTimeFactor(timeOnTimeFactor); - competitor.setTimeOnDistanceAllowancePerNauticalMile(timeOnDistanceAllowancePerNauticalMile); - competitor.setSearchTag(newSearchTag); - weakCompetitorDTOCache.remove(competitor); - } finally { - LockUtil.unlockAfterWrite(lock); - } - } - synchronized (competitorUpdateListeners) { - for (CompetitorUpdateListener listener : competitorUpdateListeners) { - listener.competitorUpdated(competitor); - } - } - return (CompetitorWithBoat) competitor; - } /** Boat stuff starts here */ diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/PersistentCompetitorAndBoatStore.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/PersistentCompetitorAndBoatStore.java index d9ba4499c99..cca712af5e0 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/PersistentCompetitorAndBoatStore.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/PersistentCompetitorAndBoatStore.java @@ -162,16 +162,6 @@ public class PersistentCompetitorAndBoatStore extends TransientCompetitorAndBoat super.addNewCompetitors(competitors); } - @Override - public CompetitorWithBoat updateCompetitorWithBoat(String idAsString, String newName, String newShortName, Color newRgbDisplayColor, String newEmail, - Nationality newNationality, URI newTeamImageUri, URI newFlagImageUri, Double timeOnTimeFactor, Duration timeOnDistanceAllowancePerNauticalMile, - String searchTag) { - CompetitorWithBoat result = super.updateCompetitorWithBoat(idAsString, newName, newShortName, newRgbDisplayColor, newEmail, newNationality, - newTeamImageUri, newFlagImageUri, timeOnTimeFactor, timeOnDistanceAllowancePerNauticalMile, searchTag); - storeTo.storeCompetitor(result); - return result; - } - @Override protected void addNewBoat(DynamicBoat boat) { storeTo.storeBoat(boat); diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java index 7436bbf8f84..50da5cb6293 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java @@ -724,7 +724,8 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes competitor.getColor(), competitor.getEmail(), competitor.getFlagImage(), competitor.getTeam()==null?null:competitor.getTeam().getNationality(), competitor.getTimeOnTimeFactor(), - competitor.getTimeOnDistanceAllowancePerNauticalMile(), competitor.getSearchTag())); + competitor.getTimeOnDistanceAllowancePerNauticalMile(), competitor.getSearchTag(), + competitor.hasBoat() ? ((CompetitorWithBoat) competitor).getBoat().getId() : null)); } }); this.competitorAndBoatStore.addBoatUpdateListener(new BoatUpdateListener() { @@ -2608,7 +2609,6 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes replicate(new TrackRegatta(regatta.getRegattaIdentifier())); regattaTrackingCache.put(regatta, result); ensureRegattaIsObservedForDefaultLeaderboardAndAutoLeaderboardLinking(result); - trackedRegattaListener.regattaAdded(result); } return result; @@ -2995,7 +2995,6 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes regatta.addRegattaListener(this); logoutput.append(String.format("%3s\n", regatta.toString())); } - logger.info("Reading all events..."); eventsById.putAll((Map) ois.readObject()); logoutput.append("\nReceived " + eventsById.size() + " NEW events\n"); diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/CreateCompetitor.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/CreateCompetitor.java index d21cae3320a..b8d83565dcd 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/CreateCompetitor.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/CreateCompetitor.java @@ -5,8 +5,11 @@ import java.net.URI; import java.util.Collections; import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.base.CompetitorAndBoatStore; import com.sap.sailing.domain.base.CompetitorAndBoatStore.CompetitorUpdateListener; +import com.sap.sailing.domain.base.CompetitorWithBoat; import com.sap.sailing.domain.base.Nationality; +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; @@ -17,6 +20,18 @@ import com.sap.sailing.server.impl.RacingEventServiceImpl; import com.sap.sse.common.Color; import com.sap.sse.common.Duration; +/** + * Creates a {@link Competitor} if {@link #boatId} is {@code null}, or a {@link CompetitorWithBoat} otherwise. See also + * {@link CompetitorAndBoatStore#getOrCreateCompetitor(Serializable, String, String, Color, String, URI, DynamicTeam, Double, Duration, String)} + * and + * {@link CompetitorAndBoatStore#getOrCreateCompetitorWithBoat(Serializable, String, String, Color, String, URI, DynamicTeam, Double, Duration, String, com.sap.sailing.domain.base.impl.DynamicBoat)}, + * respectively. This operation assumes that the boat creation has been replicated before the competitor creation in + * case a non-{@code null} boat ID has been provided, so the boat is expected to be found by a + * {@link CompetitorAndBoatStore#getExistingBoatById(Serializable) lookup by ID}. + * + * @author Axel Uhl (d043530) + * + */ public class CreateCompetitor extends AbstractRacingEventServiceOperation { private static final long serialVersionUID = 1172181354320184263L; private final Serializable competitorId; @@ -29,10 +44,11 @@ public class CreateCompetitor extends AbstractRacingEventServiceOperation