diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java
index b3011827b19..1617ea5e649 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java
@@ -12,6 +12,7 @@ import com.google.gwt.user.client.rpc.RemoteService;
import com.sap.sailing.domain.abstractlog.Revokable;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogTagEvent;
+import com.sap.sailing.domain.abstractlog.race.state.ReadonlyRaceState;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.common.CompetitorDescriptor;
@@ -64,6 +65,7 @@ import com.sap.sailing.expeditionconnector.ExpeditionDeviceConfiguration;
import com.sap.sailing.gwt.ui.adminconsole.RaceLogSetTrackingTimesDTO;
import com.sap.sailing.gwt.ui.client.shared.charts.MarkPositionService.MarkTrackDTO;
import com.sap.sailing.gwt.ui.client.shared.charts.MarkPositionService.MarkTracksDTO;
+import com.sap.sailing.gwt.ui.server.RaceLogTagEvents;
import com.sap.sailing.gwt.ui.shared.BulkScoreCorrectionDTO;
import com.sap.sailing.gwt.ui.shared.CompactBoatPositionsDTO;
import com.sap.sailing.gwt.ui.shared.CompactRaceMapDataDTO;
@@ -197,13 +199,23 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
RaceTimesInfoDTO getRaceTimesInfo(RegattaAndRaceIdentifier raceIdentifier);
- RaceTimesInfoDTO getRaceTimesInfoIncludingTags(RegattaAndRaceIdentifier raceIdentifier,
- TimePoint latestReceivedTagTime);
+ /**
+ * Returns {@link RaceTimesInfoDTO race times info} for specified race (raceIdentifier) including
+ * {@link RaceLogTagEvent tag events} since received timestamp (searchSince). Loads tags from
+ * {@link ReadonlyRaceState cache} instead of scanning the whole {@link RaceLog} every request.
+ */
+ RaceTimesInfoDTO getRaceTimesInfoIncludingTags(RegattaAndRaceIdentifier raceIdentifier, TimePoint searchSince);
List getRaceTimesInfos(Collection raceIdentifiers);
+ /**
+ * Collects besides {@link RaceTimesInfoDTO race times infos} public {@link RaceLogTagEvent tag events} from
+ * {@link ReadonlyRaceState cache} and compares the createdAt timepoint to the received
+ * searchSince timepoint. Returns {@link RaceTimesInfoDTO race times infos} including
+ * {@link RaceLogTagEvents public tag events} since the latest client-side received tag.
+ */
List getRaceTimesInfosIncludingTags(Collection raceIdentifiers,
- Map latestReceivedTagTimes);
+ Map searchSinceMap);
CoursePositionsDTO getCoursePositions(RegattaAndRaceIdentifier raceIdentifier, Date date);
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java
index 39067c25457..d734ae68338 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java
@@ -240,15 +240,14 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan
void getRaceTimesInfo(RegattaAndRaceIdentifier raceIdentifier, AsyncCallback callback);
- void getRaceTimesInfoIncludingTags(RegattaAndRaceIdentifier raceIdentifier, TimePoint latestReceivedTagTime,
+ void getRaceTimesInfoIncludingTags(RegattaAndRaceIdentifier raceIdentifier, TimePoint searchSince,
AsyncCallback callback);
void getRaceTimesInfos(Collection raceIdentifiers,
AsyncCallback> callback);
void getRaceTimesInfosIncludingTags(Collection raceIdentifiers,
- Map latestReceivedTagTimes,
- AsyncCallback> callback);
+ Map searchSinceMap, AsyncCallback> callback);
void getCoursePositions(RegattaAndRaceIdentifier raceIdentifier, Date date,
AsyncCallback asyncCallback);
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java
index 12c82d290f4..8830a079090 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java
@@ -2234,17 +2234,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet
return raceTimesInfo;
}
- /**
- * Returns {@link RaceTimesInfoDTO race times info} for specified race (raceIdentifier) including
- * {@link RaceLogTagEvent tag events} since received timestamp (latestReceivedTagTime). Loads tags from
- * {@link ReadonlyRaceState cache} instead of scanning the whole {@link RaceLog} every request.
- */
- // TODO: rename latestReceivedTagTime to match role
@Override
public RaceTimesInfoDTO getRaceTimesInfoIncludingTags(RegattaAndRaceIdentifier raceIdentifier,
- TimePoint latestReceivedTagTime) {
+ TimePoint searchSince) {
RaceTimesInfoDTO raceTimesInfo = getRaceTimesInfo(raceIdentifier);
- raceTimesInfo.setTags(getService().getTaggingService().getPublicTags(raceIdentifier, latestReceivedTagTime));
+ raceTimesInfo.setTags(getService().getTaggingService().getPublicTags(raceIdentifier, searchSince));
return raceTimesInfo;
}
@@ -2260,19 +2254,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet
return raceTimesInfos;
}
- /**
- * Collects besides {@link RaceTimesInfoDTO race times infos} public {@link RaceLogTagEvent tag events} from
- * {@link ReadonlyRaceState cache} and compares the createdAt timepoint to the received latest tag
- * creation timepoint. Returns {@link RaceTimesInfoDTO race times infos} including {@link RaceLogTagEvents public
- * tag events} since the latest client-side received tag.
- */
@Override
public List getRaceTimesInfosIncludingTags(Collection raceIdentifiers,
- Map latestReceivedTagTimes) {
+ Map searchSinceMap) {
List raceTimesInfos = new ArrayList();
for (RegattaAndRaceIdentifier raceIdentifier : raceIdentifiers) {
RaceTimesInfoDTO raceTimesInfo = getRaceTimesInfoIncludingTags(raceIdentifier,
- latestReceivedTagTimes.get(raceIdentifier));
+ searchSinceMap.get(raceIdentifier));
if (raceTimesInfo != null) {
raceTimesInfos.add(raceTimesInfo);
}
diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/tagging/TaggingService.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/tagging/TaggingService.java
index 06d9badbb9b..0c75b494340 100644
--- a/java/com.sap.sailing.server/src/com/sap/sailing/server/tagging/TaggingService.java
+++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/tagging/TaggingService.java
@@ -9,7 +9,6 @@ import com.sap.sse.common.TimePoint;
// TODO: Replace error handling by throwing exceptions, see "topleveltranslations.json"
// TODO: CommentTooLong
-// TODO: rename latestReceivedTagTime to match role
// TODO: remove entry in settings if there are no private tags for this race anymore
// TODO: rename keys to naming pattern (ssailing.tags....)
// TODO: use document settings id for tags/tag-buttons/... as race identifier
@@ -119,8 +118,8 @@ public interface TaggingService {
* new privacy status
* @return true if tag was updated successfully, otherwise false
*/
- boolean updateTag(String leaderboardName, String raceColumnName, String fleetName, TagDTO tagToUpdate,
- String tag, String comment, String imageURL, boolean visibleForPublic);
+ boolean updateTag(String leaderboardName, String raceColumnName, String fleetName, TagDTO tagToUpdate, String tag,
+ String comment, String imageURL, boolean visibleForPublic);
/**
* Returns all public tags for the specified race.
@@ -137,14 +136,16 @@ public interface TaggingService {
List getPublicTags(String leaderboardName, String raceColumnName, String fleetName);
/**
- * Returns all public tags since the given latestReceivedTagTime for the specified race.
+ * Returns all public tags since the given searchSinceTimePoint for the specified race.
*
* @param raceIdentifier
* required to identify {@link RaceLog}, must NOT be null
+ * @param searchSince
+ * tags will only be returned if they got created after this time point
* @return list of {@link TagDTO tags}, empty list in case an error occurs or there are no tags available but
* never null!
*/
- List getPublicTags(RegattaAndRaceIdentifier raceIdentifier, TimePoint latestReceivedTagTime);
+ List getPublicTags(RegattaAndRaceIdentifier raceIdentifier, TimePoint searchSince);
/**
* Returns all private tags of current user for the specified race.
diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/tagging/TaggingServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/tagging/TaggingServiceImpl.java
index 9f4ca873e92..33103a4dfa0 100644
--- a/java/com.sap.sailing.server/src/com/sap/sailing/server/tagging/TaggingServiceImpl.java
+++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/tagging/TaggingServiceImpl.java
@@ -280,7 +280,7 @@ public class TaggingServiceImpl implements TaggingService {
}
@Override
- public List getPublicTags(RegattaAndRaceIdentifier raceIdentifier, TimePoint latestReceivedTagTime) {
+ public List getPublicTags(RegattaAndRaceIdentifier raceIdentifier, TimePoint searchSince) {
final List result = new ArrayList();
TrackedRace trackedRace = racingService.getExistingTrackedRace(raceIdentifier);
Iterable raceLogs = trackedRace.getAttachedRaceLogs();
@@ -288,11 +288,11 @@ public class TaggingServiceImpl implements TaggingService {
ReadonlyRaceState raceState = ReadonlyRaceStateImpl.getOrCreate(racingService, raceLog);
Iterable foundTagEvents = raceState.getTagEvents();
for (RaceLogTagEvent tagEvent : foundTagEvents) {
- if ((latestReceivedTagTime == null && tagEvent.getRevokedAt() == null)
- || (latestReceivedTagTime != null && tagEvent.getRevokedAt() == null
- && tagEvent.getCreatedAt().after(latestReceivedTagTime))
- || (latestReceivedTagTime != null && tagEvent.getRevokedAt() != null
- && tagEvent.getRevokedAt().after(latestReceivedTagTime))) {
+ if ((searchSince == null && tagEvent.getRevokedAt() == null)
+ || (searchSince != null && tagEvent.getRevokedAt() == null
+ && tagEvent.getCreatedAt().after(searchSince))
+ || (searchSince != null && tagEvent.getRevokedAt() != null
+ && tagEvent.getRevokedAt().after(searchSince))) {
result.add(new TagDTO(tagEvent.getTag(), tagEvent.getComment(), tagEvent.getImageURL(),
true, tagEvent.getUsername(), tagEvent.getLogicalTimePoint(), tagEvent.getCreatedAt(),
tagEvent.getRevokedAt()));