diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java index 4aab44bdbd4..ad1a5756936 100755 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/RaceLogRaceTracker.java @@ -267,8 +267,9 @@ public class RaceLogRaceTracker implements RaceTracker, GPSFixReceivedListener { } } - trackedRace.setStartOfTrackingReceived(earliestMappingStart); - trackedRace.setEndOfTrackingReceived(latestMappingEnd); + // FIXME need better way to come to a realistic and adjusting start/end of tracking +// trackedRace.setStartOfTrackingReceived(earliestMappingStart); +// trackedRace.setEndOfTrackingReceived(latestMappingEnd); } private boolean hasMappingAlreadyBeenLoaded( 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 2e299c9d976..9dadbd5328d 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 @@ -66,6 +66,7 @@ import com.sap.sailing.gwt.ui.shared.RaceLogDTO; import com.sap.sailing.gwt.ui.shared.RaceLogSetStartTimeAndProcedureDTO; import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO; import com.sap.sailing.gwt.ui.shared.RegattaDTO; +import com.sap.sailing.gwt.ui.shared.RegattaLogDTO; import com.sap.sailing.gwt.ui.shared.RegattaOverviewEntryDTO; import com.sap.sailing.gwt.ui.shared.RegattaScoreCorrectionDTO; import com.sap.sailing.gwt.ui.shared.RemoteSailingServerReferenceDTO; @@ -397,6 +398,8 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS RaceLogDTO getRaceLog(String leaderboardName, RaceColumnDTO raceColumnDTO, FleetDTO fleet); + RegattaLogDTO getRegattaLog(String leaderboardName) throws DoesNotHaveRegattaLogException; + List getLeaderboardGroupNamesFromRemoteServer(String host); UUID importMasterData(String host, String[] groupNames, boolean override, boolean compress, boolean exportWind); @@ -586,4 +589,5 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS void inviteBuoyTenderViaEmail(String serverUrlWithoutTrailingSlash, EventDTO eventDto, String leaderboardName, String emails, String localeInfoName) throws MailException; + } 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 46d7fed78e4..c92198f18e8 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 @@ -56,6 +56,7 @@ import com.sap.sailing.gwt.ui.shared.RaceLogDTO; import com.sap.sailing.gwt.ui.shared.RaceLogSetStartTimeAndProcedureDTO; import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO; import com.sap.sailing.gwt.ui.shared.RegattaDTO; +import com.sap.sailing.gwt.ui.shared.RegattaLogDTO; import com.sap.sailing.gwt.ui.shared.RegattaOverviewEntryDTO; import com.sap.sailing.gwt.ui.shared.RegattaScoreCorrectionDTO; import com.sap.sailing.gwt.ui.shared.RemoteSailingServerReferenceDTO; @@ -506,8 +507,9 @@ public interface SailingServiceAsync extends BuildVersionRetriever, FileStorageM void getRaceLog(String leaderboardName, RaceColumnDTO raceColumnDTO, FleetDTO fleet, AsyncCallback callback); - void importMasterData(String host, String[] names, boolean override, boolean compress, - boolean exportWind, + void getRegattaLog(String leaderboardName, AsyncCallback callback); + + void importMasterData(String host, String[] names, boolean override, boolean compress, boolean exportWind, AsyncCallback asyncCallback); void getImportOperationProgress(UUID id, AsyncCallback asyncCallback); @@ -692,5 +694,6 @@ public interface SailingServiceAsync extends BuildVersionRetriever, FileStorageM void getMarksInRaceLogsAndTrackedRaces(String leaderboardName, AsyncCallback> callback); void inviteBuoyTenderViaEmail(String serverUrlWithoutTrailingSlash, EventDTO eventDto, String leaderboardName, - String emails, String localeInfoName, AsyncCallback callback); + String emails, String localeInfoName, AsyncCallback callback); + } 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 07b0f7c4506..1b23ce39c06 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 @@ -74,6 +74,7 @@ import com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl.DefinedMa import com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl.RaceLogOpenEndedDeviceMappingCloser; import com.sap.sailing.domain.abstractlog.race.tracking.analyzing.impl.RaceLogTrackingStateAnalyzer; import com.sap.sailing.domain.abstractlog.regatta.RegattaLog; +import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent; import com.sap.sailing.domain.abstractlog.shared.analyzing.DeviceCompetitorMappingFinder; import com.sap.sailing.domain.abstractlog.shared.analyzing.DeviceMarkMappingFinder; import com.sap.sailing.domain.abstractlog.shared.analyzing.RegisteredCompetitorsAnalyzer; @@ -301,6 +302,8 @@ import com.sap.sailing.gwt.ui.shared.RaceMapDataDTO; import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO; import com.sap.sailing.gwt.ui.shared.RaceWithCompetitorsDTO; import com.sap.sailing.gwt.ui.shared.RegattaDTO; +import com.sap.sailing.gwt.ui.shared.RegattaLogDTO; +import com.sap.sailing.gwt.ui.shared.RegattaLogEventDTO; import com.sap.sailing.gwt.ui.shared.RegattaOverviewEntryDTO; import com.sap.sailing.gwt.ui.shared.RegattaScoreCorrectionDTO; import com.sap.sailing.gwt.ui.shared.RegattaScoreCorrectionDTO.ScoreCorrectionEntryDTO; @@ -4251,6 +4254,30 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return result; } + @Override + public RegattaLogDTO getRegattaLog(String leaderboardName) throws DoesNotHaveRegattaLogException { + RegattaLogDTO result = null; + RegattaLog regattaLog = getRegattaLogInternal(leaderboardName); + if (regattaLog != null) { + List entries = new ArrayList<>(); + result = new RegattaLogDTO(leaderboardName, entries); + regattaLog.lockForRead(); + try { + for(RegattaLogEvent raceLogEvent: regattaLog.getRawFixes()) { + RegattaLogEventDTO entry = new RegattaLogEventDTO( + raceLogEvent.getAuthor().getName(), raceLogEvent.getAuthor().getPriority(), + raceLogEvent.getCreatedAt() != null ? raceLogEvent.getCreatedAt().asDate() : null, + raceLogEvent.getLogicalTimePoint() != null ? raceLogEvent.getLogicalTimePoint().asDate() : null, + raceLogEvent.getClass().getSimpleName(), raceLogEvent.getShortInfo()); + entries.add(entry); + } + } finally { + regattaLog.unlockAfterRead(); + } + } + return result; + } + @Override public List getLeaderboardGroupNamesFromRemoteServer(String url) { com.sap.sse.common.Util.Pair hostnameAndPort = parseHostAndPort(url); @@ -4818,7 +4845,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return getRaceLog(triple.getA(), triple.getB(), triple.getC()); } - private RegattaLog getRegattaLog(String leaderboardName) throws DoesNotHaveRegattaLogException { + private RegattaLog getRegattaLogInternal(String leaderboardName) throws DoesNotHaveRegattaLogException { Leaderboard l = getService().getLeaderboardByName(leaderboardName); if (! (l instanceof HasRegattaLike)) { throw new DoesNotHaveRegattaLogException(); @@ -4844,7 +4871,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S throws DoesNotHaveRegattaLogException { return convertToCompetitorDTOs( new RegisteredCompetitorsAnalyzer<>( - getRegattaLog(leaderboardName)).analyze()); + getRegattaLogInternal(leaderboardName)).analyze()); } private Competitor getCompetitor(CompetitorDTO dto) { @@ -4866,7 +4893,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public void setCompetitorRegistrations(String leaderboardName, Set competitorDTOs) throws DoesNotHaveRegattaLogException { - RegattaLog regattaLog = getRegattaLog(leaderboardName); + RegattaLog regattaLog = getRegattaLogInternal(leaderboardName); Set competitors = new HashSet(); for (CompetitorDTO dto : competitorDTOs) { competitors.add(getCompetitor(dto)); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/AbstractLogDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/AbstractLogDTO.java new file mode 100755 index 00000000000..61ca1de2f27 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/AbstractLogDTO.java @@ -0,0 +1,28 @@ +package com.sap.sailing.gwt.ui.shared; + +import java.util.List; + +import com.google.gwt.user.client.rpc.IsSerializable; + +/** + * DTO for a race log with all raw race log entries + */ +public class AbstractLogDTO implements IsSerializable { + private String leaderboardName; + private List entries; + + AbstractLogDTO() {} + + public AbstractLogDTO(String leaderboardName, List entries) { + this.leaderboardName = leaderboardName; + this.entries = entries; + } + + public String getLeaderboardName() { + return leaderboardName; + } + + public List getEntries() { + return entries; + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/AbstractLogEventDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/AbstractLogEventDTO.java new file mode 100755 index 00000000000..bcda8c7f3f6 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/AbstractLogEventDTO.java @@ -0,0 +1,64 @@ +package com.sap.sailing.gwt.ui.shared; + +import java.util.Date; + +import com.google.gwt.user.client.rpc.IsSerializable; + +/** + * DTO for a race log entry. + */ +public class AbstractLogEventDTO implements IsSerializable { + private String authorName; + private Integer authorPriority; + private Date createdAt; + private Date logicalTimePoint; + + /** RaceLogEvent.getClass().getSimpleName() */ + private String type; + + /** RaceLogEvent.toString() */ + private String info; + + AbstractLogEventDTO() {} + + public AbstractLogEventDTO(String authorName, Integer authorPriority, Date createdAt, Date logicalTimePoint, + String type, String info) { + this.authorName = authorName; + this.authorPriority = authorPriority; + this.createdAt = createdAt; + this.logicalTimePoint = logicalTimePoint; + this.type = type; + this.info = info; + } + + public String getAuthorName() { + return authorName; + } + + public Integer getAuthorPriority() { + return authorPriority; + } + + public Date getLogicalTimePoint() { + return logicalTimePoint; + } + + public String getType() { + String result = type; + if(result.startsWith("RaceLog")) { + result = result.substring("RaceLog".length(), result.length()); + } + if(result.endsWith("EventImpl")) { + result = result.substring(0, result.length()- "EventImpl".length()); + } + return result; + } + + public String getInfo() { + return info; + } + + public Date getCreatedAt() { + return createdAt; + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceLogDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceLogDTO.java index 90c7f6fa378..ca4c65aa7dd 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceLogDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceLogDTO.java @@ -7,25 +7,18 @@ import com.google.gwt.user.client.rpc.IsSerializable; /** * DTO for a race log with all raw race log entries */ -public class RaceLogDTO implements IsSerializable { - private String leaderboardName; +public class RaceLogDTO extends AbstractLogDTO implements IsSerializable { private String raceColumnName; private String fleetName; private Integer currentPassId; - private List entries; RaceLogDTO() {} public RaceLogDTO(String leaderboardName, String raceColumnName, String fleetName, Integer currentPassId, List entries) { - this.leaderboardName = leaderboardName; + super(leaderboardName, entries); this.raceColumnName = raceColumnName; this.fleetName = fleetName; this.currentPassId = currentPassId; - this.entries = entries; - } - - public String getLeaderboardName() { - return leaderboardName; } public String getRaceColumnName() { @@ -36,10 +29,6 @@ public class RaceLogDTO implements IsSerializable { return fleetName; } - public List getEntries() { - return entries; - } - public Integer getCurrentPassId() { return currentPassId; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceLogEventDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceLogEventDTO.java index 0b05a8b2052..352003cd84f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceLogEventDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceLogEventDTO.java @@ -7,64 +7,18 @@ import com.google.gwt.user.client.rpc.IsSerializable; /** * DTO for a race log entry. */ -public class RaceLogEventDTO implements IsSerializable { +public class RaceLogEventDTO extends AbstractLogEventDTO implements IsSerializable { private Integer passId; - private String authorName; - private Integer authorPriority; - private Date createdAt; - private Date logicalTimePoint; - - /** RaceLogEvent.getClass().getSimpleName() */ - private String type; - - /** RaceLogEvent.toString() */ - private String info; RaceLogEventDTO() {} public RaceLogEventDTO(int passId, String authorName, Integer authorPriority, Date createdAt, Date logicalTimePoint, String type, String info) { + super(authorName, authorPriority, createdAt, logicalTimePoint, type, info); this.passId = passId; - this.authorName = authorName; - this.authorPriority = authorPriority; - this.createdAt = createdAt; - this.logicalTimePoint = logicalTimePoint; - this.type = type; - this.info = info; } public int getPassId() { return passId; } - - public String getAuthorName() { - return authorName; - } - - public Integer getAuthorPriority() { - return authorPriority; - } - - public Date getLogicalTimePoint() { - return logicalTimePoint; - } - - public String getType() { - String result = type; - if(result.startsWith("RaceLog")) { - result = result.substring("RaceLog".length(), result.length()); - } - if(result.endsWith("EventImpl")) { - result = result.substring(0, result.length()- "EventImpl".length()); - } - return result; - } - - public String getInfo() { - return info; - } - - public Date getCreatedAt() { - return createdAt; - } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaLogDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaLogDTO.java new file mode 100755 index 00000000000..e914c714957 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaLogDTO.java @@ -0,0 +1,16 @@ +package com.sap.sailing.gwt.ui.shared; + +import java.util.List; + +import com.google.gwt.user.client.rpc.IsSerializable; + +/** + * DTO for a race log with all raw race log entries + */ +public class RegattaLogDTO extends AbstractLogDTO implements IsSerializable { + RegattaLogDTO() {} + + public RegattaLogDTO(String leaderboardName, List entries) { + super(leaderboardName, entries); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaLogEventDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaLogEventDTO.java new file mode 100755 index 00000000000..8c90ec95cc5 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaLogEventDTO.java @@ -0,0 +1,17 @@ +package com.sap.sailing.gwt.ui.shared; + +import java.util.Date; + +import com.google.gwt.user.client.rpc.IsSerializable; + +/** + * DTO for a race log entry. + */ +public class RegattaLogEventDTO extends AbstractLogEventDTO implements IsSerializable { + RegattaLogEventDTO() {} + + public RegattaLogEventDTO(String authorName, Integer authorPriority, Date createdAt, Date logicalTimePoint, + String type, String info) { + super(authorName, authorPriority, createdAt, logicalTimePoint, type, info); + } +}