mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-30 15:57:11 +00:00
search service now works based on leaderboards, not regattas
This commit is contained in:
1 parent
d7cf30f9f7
commit
c204bece9c
8 files changed
+123
-79
No files matched your search
+3
-1
@@ -1,8 +1,10 @@
|
||||
package com.sap.sailing.server;
|
||||
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sse.common.search.Hit;
|
||||
|
||||
public interface RegattaSearchResult extends Hit {
|
||||
public interface LeaderboardSearchResult extends Hit {
|
||||
Regatta getRegatta();
|
||||
Leaderboard getLeaderboard();
|
||||
}
|
||||
@@ -555,5 +555,5 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
||||
*/
|
||||
Util.Pair<Iterable<EventBase>, Exception> updateRemoteServerEventCacheSynchronously(RemoteSailingServerReference ref);
|
||||
|
||||
Result<RegattaSearchResult> search(KeywordQuery query);
|
||||
Result<LeaderboardSearchResult> search(KeywordQuery query);
|
||||
}
|
||||
Executable
+29
@@ -0,0 +1,29 @@
|
||||
package com.sap.sailing.server.impl;
|
||||
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||
import com.sap.sailing.server.LeaderboardSearchResult;
|
||||
|
||||
public class LeaderboardSearchResultImpl implements LeaderboardSearchResult {
|
||||
private final Leaderboard leaderboard;
|
||||
|
||||
public LeaderboardSearchResultImpl(Leaderboard leaderboard) {
|
||||
this.leaderboard = leaderboard;
|
||||
}
|
||||
|
||||
public Regatta getRegatta() {
|
||||
final Regatta regatta;
|
||||
if (leaderboard instanceof RegattaLeaderboard) {
|
||||
regatta = ((RegattaLeaderboard) leaderboard).getRegatta();
|
||||
} else {
|
||||
regatta = null;
|
||||
}
|
||||
return regatta;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Leaderboard getLeaderboard() {
|
||||
return leaderboard;
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -133,7 +133,7 @@ import com.sap.sailing.operationaltransformation.Operation;
|
||||
import com.sap.sailing.server.OperationExecutionListener;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
import com.sap.sailing.server.RegattaSearchResult;
|
||||
import com.sap.sailing.server.LeaderboardSearchResult;
|
||||
import com.sap.sailing.server.Replicator;
|
||||
import com.sap.sailing.server.masterdata.DataImportLockWithProgress;
|
||||
import com.sap.sailing.server.operationaltransformation.AddCourseArea;
|
||||
@@ -2593,7 +2593,7 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<RegattaSearchResult> search(KeywordQuery query) {
|
||||
public Result<LeaderboardSearchResult> search(KeywordQuery query) {
|
||||
return new RegattaByKeywordSearchService().search(this, query);
|
||||
}
|
||||
}
|
||||
+33
-42
@@ -7,12 +7,10 @@ import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
|
||||
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||
import com.sap.sailing.server.LeaderboardSearchResult;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RegattaSearchResult;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.filter.AbstractListFilter;
|
||||
import com.sap.sse.common.search.KeywordQuery;
|
||||
@@ -30,53 +28,46 @@ import com.sap.sse.common.search.ResultImpl;
|
||||
*
|
||||
*/
|
||||
public class RegattaByKeywordSearchService {
|
||||
Result<RegattaSearchResult> search(final RacingEventService racingEventService, KeywordQuery query) {
|
||||
ResultImpl<RegattaSearchResult> result = new ResultImpl<>(query, new RegattaSearchResultRanker(racingEventService));
|
||||
AbstractListFilter<Regatta> regattaFilter = new AbstractListFilter<Regatta>() {
|
||||
Result<LeaderboardSearchResult> search(final RacingEventService racingEventService, KeywordQuery query) {
|
||||
ResultImpl<LeaderboardSearchResult> result = new ResultImpl<>(query, new RegattaSearchResultRanker(racingEventService));
|
||||
AbstractListFilter<Leaderboard> leaderboardFilter = new AbstractListFilter<Leaderboard>() {
|
||||
@Override
|
||||
public Iterable<String> getStrings(Regatta regatta) {
|
||||
List<String> regattaStrings = new ArrayList<>();
|
||||
regattaStrings.add(regatta.getBaseName());
|
||||
regattaStrings.add(regatta.getBoatClass().getName());
|
||||
for (Competitor competitor : regatta.getCompetitors()) {
|
||||
regattaStrings.add(competitor.getName());
|
||||
regattaStrings.add(competitor.getBoat().getSailID());
|
||||
}
|
||||
final Iterable<LeaderboardGroup> leaderboardGroupsHostingRegatta = getLeaderboardGroupsHostingRegatta(regatta, racingEventService);
|
||||
for (LeaderboardGroup leaderboardGroup : leaderboardGroupsHostingRegatta) {
|
||||
regattaStrings.add(leaderboardGroup.getName());
|
||||
regattaStrings.add(leaderboardGroup.getDescription());
|
||||
for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) {
|
||||
if (leaderboard instanceof RegattaLeaderboard && ((RegattaLeaderboard) leaderboard).getRegatta() == regatta) {
|
||||
regattaStrings.add(leaderboard.getName());
|
||||
regattaStrings.add(leaderboard.getDisplayName());
|
||||
for (Competitor competitor : leaderboard.getCompetitors()) {
|
||||
String competitorDisplayName = leaderboard.getDisplayName(competitor);
|
||||
if (competitorDisplayName != null) {
|
||||
regattaStrings.add(competitorDisplayName);
|
||||
}
|
||||
}
|
||||
}
|
||||
public Iterable<String> getStrings(Leaderboard leaderboard) {
|
||||
List<String> leaderboardStrings = new ArrayList<>();
|
||||
leaderboardStrings.add(leaderboard.getName());
|
||||
leaderboardStrings.add(leaderboard.getDisplayName());
|
||||
for (Competitor competitor : leaderboard.getCompetitors()) {
|
||||
leaderboardStrings.add(competitor.getName());
|
||||
leaderboardStrings.add(competitor.getBoat().getSailID());
|
||||
String competitorDisplayName = leaderboard.getDisplayName(competitor);
|
||||
if (competitorDisplayName != null) {
|
||||
leaderboardStrings.add(competitorDisplayName);
|
||||
}
|
||||
}
|
||||
for (Event event : getEventsHostingRegatta(regatta, racingEventService, leaderboardGroupsHostingRegatta)) {
|
||||
regattaStrings.add(event.getName());
|
||||
regattaStrings.add(event.getVenue().getName());
|
||||
final Iterable<LeaderboardGroup> leaderboardGroupsHostingLeaderboard = getLeaderboardGroupsHostingLeaderboard(
|
||||
leaderboard, racingEventService);
|
||||
for (LeaderboardGroup leaderboardGroup : leaderboardGroupsHostingLeaderboard) {
|
||||
leaderboardStrings.add(leaderboardGroup.getName());
|
||||
leaderboardStrings.add(leaderboardGroup.getDescription());
|
||||
}
|
||||
return regattaStrings;
|
||||
for (Event event : getEventsHostingLeaderboard(leaderboard, racingEventService, leaderboardGroupsHostingLeaderboard)) {
|
||||
leaderboardStrings.add(event.getName());
|
||||
leaderboardStrings.add(event.getVenue().getName());
|
||||
}
|
||||
return leaderboardStrings;
|
||||
}
|
||||
};
|
||||
for (Regatta matchingRegatta : regattaFilter.applyFilter(query.getKeywords(), racingEventService.getAllRegattas())) {
|
||||
result.addHit(new RegattaSearchResultImpl(matchingRegatta));
|
||||
for (Leaderboard matchingLeaderboard : leaderboardFilter.applyFilter(query.getKeywords(), racingEventService.getLeaderboards().values())) {
|
||||
result.addHit(new LeaderboardSearchResultImpl(matchingLeaderboard));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private Iterable<LeaderboardGroup> getLeaderboardGroupsHostingRegatta(Regatta regatta, RacingEventService racingEventService) {
|
||||
private Iterable<LeaderboardGroup> getLeaderboardGroupsHostingLeaderboard(Leaderboard leaderboard, RacingEventService racingEventService) {
|
||||
Set<LeaderboardGroup> result = new LinkedHashSet<>();
|
||||
for (LeaderboardGroup leaderboardGroup : racingEventService.getLeaderboardGroups().values()) {
|
||||
for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) {
|
||||
if (leaderboard instanceof RegattaLeaderboard && ((RegattaLeaderboard) leaderboard).getRegatta() == regatta) {
|
||||
for (Leaderboard lgLeaderboard : leaderboardGroup.getLeaderboards()) {
|
||||
if (lgLeaderboard == leaderboard) {
|
||||
result.add(leaderboardGroup);
|
||||
}
|
||||
}
|
||||
@@ -84,14 +75,14 @@ public class RegattaByKeywordSearchService {
|
||||
return result;
|
||||
}
|
||||
|
||||
private Iterable<Event> getEventsHostingRegatta(Regatta regatta, RacingEventService racingEventService,
|
||||
Iterable<LeaderboardGroup> leaderboardGroupsHostingRegatta) {
|
||||
private Iterable<Event> getEventsHostingLeaderboard(Leaderboard leaderboard, RacingEventService racingEventService,
|
||||
Iterable<LeaderboardGroup> leaderboardGroupsHostingLeaderboard) {
|
||||
Set<Event> result = new LinkedHashSet<>();
|
||||
for (Event event : racingEventService.getAllEvents()) {
|
||||
if (Util.contains(event.getVenue().getCourseAreas(), regatta.getDefaultCourseArea())) {
|
||||
if (Util.contains(event.getVenue().getCourseAreas(), leaderboard.getDefaultCourseArea())) {
|
||||
result.add(event);
|
||||
} else {
|
||||
for (LeaderboardGroup leaderboardGroupHostingRegatta : leaderboardGroupsHostingRegatta) {
|
||||
for (LeaderboardGroup leaderboardGroupHostingRegatta : leaderboardGroupsHostingLeaderboard) {
|
||||
if (Util.contains(event.getLeaderboardGroups(), leaderboardGroupHostingRegatta)) {
|
||||
result.add(event);
|
||||
break;
|
||||
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
package com.sap.sailing.server.impl;
|
||||
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.server.RegattaSearchResult;
|
||||
|
||||
public class RegattaSearchResultImpl implements RegattaSearchResult {
|
||||
private final Regatta regatta;
|
||||
|
||||
public RegattaSearchResultImpl(Regatta regatta) {
|
||||
this.regatta = regatta;
|
||||
}
|
||||
|
||||
public Regatta getRegatta() {
|
||||
return regatta;
|
||||
}
|
||||
}
|
||||
+6
-6
@@ -11,10 +11,10 @@ import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RegattaSearchResult;
|
||||
import com.sap.sailing.server.LeaderboardSearchResult;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
public class RegattaSearchResultRanker implements Comparator<RegattaSearchResult> {
|
||||
public class RegattaSearchResultRanker implements Comparator<LeaderboardSearchResult> {
|
||||
private final TrackedRegattaRegistry trackedRegattaRegistry;
|
||||
|
||||
protected RegattaSearchResultRanker(RacingEventService racingEventService) {
|
||||
@@ -22,15 +22,15 @@ public class RegattaSearchResultRanker implements Comparator<RegattaSearchResult
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(RegattaSearchResult o1, RegattaSearchResult o2) {
|
||||
public int compare(LeaderboardSearchResult o1, LeaderboardSearchResult o2) {
|
||||
Regatta r1 = o1.getRegatta();
|
||||
Regatta r2 = o2.getRegatta();
|
||||
TrackedRegatta trackedR1 = trackedRegattaRegistry.getTrackedRegatta(r1);
|
||||
TrackedRegatta trackedR2 = trackedRegattaRegistry.getTrackedRegatta(r2);
|
||||
TrackedRegatta trackedR1 = r1 == null ? null : trackedRegattaRegistry.getTrackedRegatta(r1);
|
||||
TrackedRegatta trackedR2 = r2 == null ? null : trackedRegattaRegistry.getTrackedRegatta(r2);
|
||||
final int result;
|
||||
if (trackedR1 == null) {
|
||||
if (trackedR2 == null) {
|
||||
result = r1.getName().compareTo(r2.getName());
|
||||
result = o1.getLeaderboard().getName().compareTo(o2.getLeaderboard().getName());
|
||||
} else {
|
||||
result = -1; // a non-tracked regatta is greater (shown further down) than a tracked regatta
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user