mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-25 21:43:49 +00:00
added competitor registration dialog
This commit is contained in:
1 parent
ca783d378a
commit
16474ca8f1
12 files changed
+263
-27
No files matched your search
+3
@@ -70,4 +70,7 @@ interface AdminConsoleResources extends ClientBundle {
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/start_racelog_tracking.png")
|
||||
ImageResource startRaceLogTracking();
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/competitor_registrations.png")
|
||||
ImageResource competitorRegistrations();
|
||||
}
|
||||
+121
@@ -0,0 +1,121 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.gwt.core.client.Callback;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.DialogBox;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
|
||||
public class CompetitorRegistrationsDialog extends DialogBox {
|
||||
private final CompetitorTableWrapper competitorTable;
|
||||
|
||||
public CompetitorRegistrationsDialog(final SailingServiceAsync sailingService, final StringMessages stringMessages,
|
||||
final ErrorReporter errorReporter, final String leaderboardName,
|
||||
final String raceColumnName, final String fleetName, boolean editable) {
|
||||
|
||||
boolean filterByLeaderBoardInitially = false;
|
||||
|
||||
VerticalPanel mainPanel = new VerticalPanel();
|
||||
setWidget(mainPanel);
|
||||
|
||||
HorizontalPanel buttonPanel = new HorizontalPanel();
|
||||
final Button toggleOnlyLeaderboard = new Button(filterByLeaderBoardInitially ? stringMessages.removeLeaderboardFilter():
|
||||
stringMessages.filterByLeaderboard());
|
||||
toggleOnlyLeaderboard.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
boolean filterByLeaderboard = toggleOnlyLeaderboard.getText().equals(stringMessages.filterByLeaderboard());
|
||||
competitorTable.refreshCompetitorList(filterByLeaderboard ? leaderboardName : null);
|
||||
toggleOnlyLeaderboard.setText(filterByLeaderboard ? stringMessages.removeLeaderboardFilter() :
|
||||
stringMessages.filterByLeaderboard());
|
||||
}
|
||||
});
|
||||
final Button toggleSelection = new Button(stringMessages.selectAll());
|
||||
toggleSelection.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
boolean selectAll = toggleSelection.getText().equals(stringMessages.selectAll());
|
||||
for (CompetitorDTO competitor : competitorTable.getAllCompetitors()) {
|
||||
competitorTable.getSelectionModel().setSelected(competitor, selectAll);
|
||||
}
|
||||
toggleSelection.setText(selectAll ? stringMessages.deselectAll() : stringMessages.selectAll());
|
||||
}
|
||||
|
||||
});
|
||||
Button cancel = new Button(stringMessages.cancel());
|
||||
cancel.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
hide();
|
||||
}
|
||||
});
|
||||
Button save = new Button(stringMessages.save());
|
||||
save.setEnabled(editable);
|
||||
save.setTitle(stringMessages.canOnlyBeEditedBeforeStartingTracking());
|
||||
save.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
sailingService.setCompetitorRegistrations(leaderboardName, raceColumnName, fleetName,
|
||||
competitorTable.getSelectionModel().getSelectedSet(), new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
hide();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Could not save competitor registrations: " + caught.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
buttonPanel.add(toggleOnlyLeaderboard);
|
||||
buttonPanel.add(toggleSelection);
|
||||
buttonPanel.add(cancel);
|
||||
buttonPanel.add(save);
|
||||
mainPanel.add(buttonPanel);
|
||||
|
||||
competitorTable = new CompetitorTableWrapper(sailingService, stringMessages, errorReporter);
|
||||
mainPanel.add(competitorTable);
|
||||
|
||||
competitorTable.refreshCompetitorList(filterByLeaderBoardInitially ? leaderboardName : null,
|
||||
true, new Callback<Iterable<CompetitorDTO>, Throwable>() {
|
||||
@Override
|
||||
public void onSuccess(Iterable<CompetitorDTO> result) {
|
||||
center();
|
||||
|
||||
//preselect competitors that are already registered
|
||||
sailingService.getCompetitorRegistrations(leaderboardName, raceColumnName, fleetName, new AsyncCallback<Iterable<CompetitorDTO>>() {
|
||||
@Override
|
||||
public void onSuccess(Iterable<CompetitorDTO> result) {
|
||||
Set<String> registeredIds = new HashSet<String>();
|
||||
for (CompetitorDTO c : result) {
|
||||
registeredIds.add(c.getIdAsString());
|
||||
}
|
||||
for (CompetitorDTO c : competitorTable.getAllCompetitors()) {
|
||||
competitorTable.getSelectionModel().setSelected(c, registeredIds.contains(c.getIdAsString()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Could not load already registered competitors: " + caught.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable reason) {}
|
||||
});
|
||||
}
|
||||
}
|
||||
+16
-2
@@ -5,6 +5,7 @@ import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.cell.client.SafeHtmlCell;
|
||||
import com.google.gwt.core.client.Callback;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.resources.client.ImageResource;
|
||||
import com.google.gwt.safehtml.shared.SafeHtml;
|
||||
@@ -183,20 +184,31 @@ public class CompetitorTableWrapper implements IsWidget {
|
||||
return filterField;
|
||||
}
|
||||
|
||||
public void refreshCompetitorList(String leaderboardName) {
|
||||
refreshCompetitorList(leaderboardName, false, null);
|
||||
}
|
||||
|
||||
public void refreshCompetitorList(String leaderboardName, boolean lookInRaceLogs) {
|
||||
refreshCompetitorList(leaderboardName, lookInRaceLogs, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param leaderboardName If null, all existing competitors are loaded
|
||||
*/
|
||||
public void refreshCompetitorList(String leaderboardName) {
|
||||
public void refreshCompetitorList(String leaderboardName, boolean lookInRaceLogs, final Callback<Iterable<CompetitorDTO>,
|
||||
Throwable> callback) {
|
||||
if(leaderboardName != null) {
|
||||
sailingService.getCompetitorsOfLeaderboard(leaderboardName, new AsyncCallback<Iterable<CompetitorDTO>>() {
|
||||
sailingService.getCompetitorsOfLeaderboard(leaderboardName, lookInRaceLogs, new AsyncCallback<Iterable<CompetitorDTO>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Remote Procedure Call getCompetitors() - Failure: " + caught.getMessage());
|
||||
if (callback != null) callback.onFailure(caught);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Iterable<CompetitorDTO> result) {
|
||||
getFilteredCompetitors(result);
|
||||
if (callback != null) callback.onSuccess(result);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
@@ -204,11 +216,13 @@ public class CompetitorTableWrapper implements IsWidget {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Remote Procedure Call getCompetitors() - Failure: " + caught.getMessage());
|
||||
if (callback != null) callback.onFailure(caught);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Iterable<CompetitorDTO> result) {
|
||||
getFilteredCompetitors(result);
|
||||
if (callback != null) callback.onSuccess(result);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
+14
-12
@@ -84,17 +84,14 @@ public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConf
|
||||
@Override
|
||||
public String getValue(RaceColumnDTOAndFleetDTOWithNameBasedEquality raceColumnAndFleetName) {
|
||||
RaceLogTrackingState state = raceColumnAndFleetName.getB().raceLogTrackingState;
|
||||
if (raceColumnAndFleetName.getB().raceLogTrackerExists) {
|
||||
if (state == RaceLogTrackingState.TRACKING) {
|
||||
return "Tracking";
|
||||
} else {
|
||||
return "Tracker is listening";
|
||||
}
|
||||
} else if (raceColumnAndFleetName.getB().raceLogTrackingState.isForTracking()) {
|
||||
return "Denoted";
|
||||
} else {
|
||||
return "Not denoted";
|
||||
}
|
||||
return state.name();
|
||||
}
|
||||
};
|
||||
|
||||
TextColumn<RaceColumnDTOAndFleetDTOWithNameBasedEquality> trackerStateColumn = new TextColumn<RaceColumnDTOAndFleetDTOWithNameBasedEquality>() {
|
||||
@Override
|
||||
public String getValue(RaceColumnDTOAndFleetDTOWithNameBasedEquality raceColumnAndFleetName) {
|
||||
return raceColumnAndFleetName.getB().raceLogTrackerExists ? "Active" : "None";
|
||||
}
|
||||
};
|
||||
|
||||
@@ -110,13 +107,18 @@ public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConf
|
||||
denoteForRaceLogTracking(object.getA(), object.getB());
|
||||
} else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_START_RACELOG_TRACKING.equals(value)) {
|
||||
startRaceLogTracking(object.getA(), object.getB());
|
||||
} else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_COMPETITOR_REGISTRATIONS.equals(value)) {
|
||||
boolean editable = object.getB().raceLogTrackingState != RaceLogTrackingState.TRACKING;
|
||||
new CompetitorRegistrationsDialog(sailingService, stringMessages, errorReporter,
|
||||
getSelectedLeaderboardName(), object.getA().getName(), object.getB().getName(), editable).show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
racesTable.addColumn(raceNameColumn, stringMessages.race());
|
||||
racesTable.addColumn(fleetNameColumn, stringMessages.fleet());
|
||||
racesTable.addColumn(raceLogTrackingStateColumn, stringMessages.status());
|
||||
racesTable.addColumn(raceLogTrackingStateColumn, stringMessages.raceStatusColumn());
|
||||
racesTable.addColumn(trackerStateColumn, stringMessages.trackerStatus());
|
||||
racesTable.addColumn(raceActionColumn, stringMessages.actions());
|
||||
}
|
||||
|
||||
|
||||
+6
-2
@@ -13,6 +13,7 @@ public class RaceLogTrackingEventManagementRaceImagesBarCell extends ImagesBarCe
|
||||
public final static String ACTION_ADD_RACELOG_TRACKER = "ACTION_ADD_RACELOG_TRACKER";
|
||||
public final static String ACTION_DENOTE_FOR_RACELOG_TRACKING = "ACTION_DENOTE_FOR_RACELOG_TRACKING";
|
||||
public final static String ACTION_START_RACELOG_TRACKING = "ACTION_START_RACELOG_TRACKING";
|
||||
public final static String ACTION_COMPETITOR_REGISTRATIONS = "ACTION_COMPETITOR_REGISTRATIONS";
|
||||
|
||||
private final StringMessages stringMessages;
|
||||
private static AdminConsoleResources resources = GWT.create(AdminConsoleResources.class);
|
||||
@@ -33,11 +34,14 @@ public class RaceLogTrackingEventManagementRaceImagesBarCell extends ImagesBarCe
|
||||
result.add(new ImageSpec(ACTION_DENOTE_FOR_RACELOG_TRACKING, stringMessages.denoteForRaceLogTracking(), makeImagePrototype(resources.denoteForRaceLogTracking())));
|
||||
}
|
||||
|
||||
if (object.getB().raceLogTrackingState.isForTracking() &&
|
||||
object.getB().raceLogTrackingState != RaceLogTrackingState.TRACKING) {
|
||||
if (object.getB().raceLogTrackerExists && object.getB().raceLogTrackingState != RaceLogTrackingState.TRACKING) {
|
||||
result.add(new ImageSpec(ACTION_START_RACELOG_TRACKING, stringMessages.startRaceLogTracking(), makeImagePrototype(resources.startRaceLogTracking())));
|
||||
}
|
||||
|
||||
if (object.getB().raceLogTrackingState.isForTracking()) {
|
||||
result.add(new ImageSpec(ACTION_COMPETITOR_REGISTRATIONS, stringMessages.competitorRegistrations(), makeImagePrototype(resources.competitorRegistrations())));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+12
-1
@@ -350,7 +350,14 @@ public interface SailingService extends RemoteService {
|
||||
|
||||
DataMiningSerializationDummy pseudoMethodSoThatSomeDataMiningClassesAreAddedToTheGWTSerializationPolicy();
|
||||
|
||||
Iterable<CompetitorDTO> getCompetitorsOfLeaderboard(String leaderboardName);
|
||||
/**
|
||||
*
|
||||
* @param leaderboardName
|
||||
* @param lookInRaceLogs If set to {@code true}, the {@link RaceLog}s are checked for the competitor registrations.
|
||||
* If set to {@code false}, the {@link RaceDefinition}s are checked instead.
|
||||
* @return
|
||||
*/
|
||||
Iterable<CompetitorDTO> getCompetitorsOfLeaderboard(String leaderboardName, boolean lookInRaceLogs);
|
||||
|
||||
CompetitorDTO addOrUpdateCompetitor(CompetitorDTO competitor);
|
||||
|
||||
@@ -387,4 +394,8 @@ public interface SailingService extends RemoteService {
|
||||
void denoteForRaceLogTracking(String leaderboardName) throws Exception;
|
||||
|
||||
void startRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName);
|
||||
|
||||
void setCompetitorRegistrations(String leaderboardName, String raceColumnName, String fleetName, Set<CompetitorDTO> competitors);
|
||||
|
||||
Iterable<CompetitorDTO> getCompetitorRegistrations(String leaderboardName, String raceColumnName, String fleetName);
|
||||
}
|
||||
+8
-1
@@ -474,7 +474,8 @@ public interface SailingServiceAsync {
|
||||
|
||||
void getCompetitors(AsyncCallback<Iterable<CompetitorDTO>> asyncCallback);
|
||||
|
||||
void getCompetitorsOfLeaderboard(String leaderboardName, AsyncCallback<Iterable<CompetitorDTO>> asyncCallback);
|
||||
void getCompetitorsOfLeaderboard(String leaderboardName, boolean lookInRaceLogs,
|
||||
AsyncCallback<Iterable<CompetitorDTO>> asyncCallback);
|
||||
|
||||
void addOrUpdateCompetitor(CompetitorDTO competitor, AsyncCallback<CompetitorDTO> asyncCallback);
|
||||
|
||||
@@ -528,5 +529,11 @@ public interface SailingServiceAsync {
|
||||
|
||||
void startRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName,
|
||||
AsyncCallback<Void> callback);
|
||||
|
||||
void setCompetitorRegistrations(String leaderboardName, String raceColumnName, String fleetName,
|
||||
Set<CompetitorDTO> competitors, AsyncCallback<Void> callback);
|
||||
|
||||
void getCompetitorRegistrations(String leaderboardName, String raceColumnName, String fleetName,
|
||||
AsyncCallback<Iterable<CompetitorDTO>> callback);
|
||||
}
|
||||
|
||||
+5
@@ -964,4 +964,9 @@ public interface StringMessages extends Messages {
|
||||
String denoteForRaceLogTracking();
|
||||
String raceLogTracking();
|
||||
String startRaceLogTracking();
|
||||
String filterByLeaderboard();
|
||||
String removeLeaderboardFilter();
|
||||
String competitorRegistrations();
|
||||
String trackerStatus();
|
||||
String canOnlyBeEditedBeforeStartingTracking();
|
||||
}
|
||||
+6
-1
@@ -952,4 +952,9 @@ addRaceLogTracker=Add RaceLog Tracker
|
||||
addRaceLogTrackers=Add RaceLog Trackers
|
||||
denoteForRaceLogTracking=Denote for RaceLog tracking
|
||||
raceLogTracking=RaceLog Tracking
|
||||
startRaceLogTracking=Start RaceLog Tracking
|
||||
startRaceLogTracking=Start RaceLog Tracking
|
||||
filterByLeaderboard=Filter by Leaderboard
|
||||
removeLeaderboardFilter=Remove Leaderboard filter
|
||||
competitorRegistrations=Competitor Registrations
|
||||
trackerStatus=Tracker Status
|
||||
canOnlyBeEditedBeforeStartingTracking=Can only be edited before starting tracking
|
||||
+6
-1
@@ -948,4 +948,9 @@ addRaceLogTracker=RaceLog Tracker hinzufügen
|
||||
addRaceLogTrackers=RaceLog Tracker hinzufügen
|
||||
denoteForRaceLogTracking=Für RaceLog Tracking markieren
|
||||
raceLogTracking=RaceLog Tracking
|
||||
startRaceLogTracking=RaceLog Tracking starten
|
||||
startRaceLogTracking=RaceLog Tracking starten
|
||||
filterByLeaderboard=Nach Rangliste filtern
|
||||
removeLeaderboardFilter=Nicht nach Rangliste filtern
|
||||
competitorRegistrations=Team Anmeldungen
|
||||
trackerStatus=Tracker-Status
|
||||
canOnlyBeEditedBeforeStartingTracking=Kann nur vor Beginn des Trackings bearbeitet werden
|
||||
+66
-7
@@ -187,7 +187,9 @@ import com.sap.sailing.domain.racelog.state.racingprocedure.gate.ReadonlyGateSta
|
||||
import com.sap.sailing.domain.racelog.state.racingprocedure.rrs26.ReadonlyRRS26RacingProcedure;
|
||||
import com.sap.sailing.domain.racelog.tracking.RaceLogTrackingAdapter;
|
||||
import com.sap.sailing.domain.racelog.tracking.RaceLogTrackingAdapterFactory;
|
||||
import com.sap.sailing.domain.racelog.tracking.RegisterCompetitorEvent;
|
||||
import com.sap.sailing.domain.racelog.tracking.analyzing.impl.RaceLogTrackingStateAnalyzer;
|
||||
import com.sap.sailing.domain.racelog.tracking.analyzing.impl.RegisteredCompetitorsAnalyzer;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapter;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingAdapterFactory;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingArchiveConfiguration;
|
||||
@@ -3502,11 +3504,23 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<CompetitorDTO> getCompetitorsOfLeaderboard(String leaderboardName) {
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
return convertToCompetitorDTOs(leaderboard.getAllCompetitors());
|
||||
public Iterable<CompetitorDTO> getCompetitorsOfLeaderboard(String leaderboardName, boolean lookInRaceLogs) {
|
||||
if (lookInRaceLogs) {
|
||||
Set<Competitor> result = new HashSet<Competitor>();
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
|
||||
for (Fleet fleet : raceColumn.getFleets()) {
|
||||
RaceLog raceLog = raceColumn.getRaceLog(fleet);
|
||||
result.addAll(new RegisteredCompetitorsAnalyzer(raceLog).analyze());
|
||||
}
|
||||
}
|
||||
return convertToCompetitorDTOs(result);
|
||||
} else {
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
return convertToCompetitorDTOs(leaderboard.getAllCompetitors());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public CompetitorDTO addOrUpdateCompetitor(CompetitorDTO competitor) {
|
||||
Nationality nationality = (competitor.getThreeLetterIocCountryCode() == null || competitor.getThreeLetterIocCountryCode().isEmpty()) ? null :
|
||||
@@ -3873,15 +3887,60 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
getRaceLogTrackingAdapter().denoteForRaceLogTracking(getService(), leaderboard);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName) {
|
||||
private RaceLog getRaceLog(String leaderboardName, String raceColumnName, String fleetName) {
|
||||
RaceColumn raceColumn = getService().getLeaderboardByName(leaderboardName).getRaceColumnByName(raceColumnName);
|
||||
Fleet fleet = raceColumn.getFleetByName(fleetName);
|
||||
RaceLog raceLog = raceColumn.getRaceLog(fleet);
|
||||
return raceColumn.getRaceLog(fleet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName) {
|
||||
RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName);
|
||||
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createStartTrackingEvent(MillisecondsTimePoint.now(),
|
||||
getService().getServerAuthor(), raceLog.getCurrentPassId());
|
||||
|
||||
raceLog.add(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<CompetitorDTO> getCompetitorRegistrations(String leaderboardName, String raceColumnName, String fleetName) {
|
||||
return convertToCompetitorDTOs(
|
||||
new RegisteredCompetitorsAnalyzer(
|
||||
getRaceLog(leaderboardName, raceColumnName, fleetName)).analyze());
|
||||
}
|
||||
|
||||
private void unregisterCompetitor(RaceLog raceLog, Competitor competitor) {
|
||||
for (RaceLogEvent event : raceLog.getUnrevokedEventsDescending()) {
|
||||
if (event instanceof RegisterCompetitorEvent && ((RegisterCompetitorEvent) event).getCompetitor().equals(competitor)) {
|
||||
raceLog.add(RaceLogEventFactory.INSTANCE.createRevokeEvent(MillisecondsTimePoint.now(),
|
||||
getService().getServerAuthor(), raceLog.getCurrentPassId(), event.getId()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCompetitorRegistrations(String leaderboardName, String raceColumnName, String fleetName,
|
||||
Set<CompetitorDTO> competitors) {
|
||||
RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName);
|
||||
Set<Competitor> alreadyRegistered = new HashSet<Competitor>(new RegisteredCompetitorsAnalyzer(raceLog).analyze());
|
||||
Set<Competitor> toBeRegistered = new HashSet<Competitor>();
|
||||
|
||||
for (CompetitorDTO dto : competitors) {
|
||||
toBeRegistered.add(getService().getCompetitorStore().getExistingCompetitorByIdAsString(dto.getIdAsString()));
|
||||
}
|
||||
|
||||
Set<Competitor> toBeRemoved = new HashSet<Competitor>(alreadyRegistered);
|
||||
toBeRemoved.removeAll(toBeRegistered);
|
||||
toBeRegistered.removeAll(alreadyRegistered);
|
||||
|
||||
for (Competitor c : toBeRegistered) {
|
||||
raceLog.add(RaceLogEventFactory.INSTANCE.createRegisterCompetitorEvent(MillisecondsTimePoint.now(),
|
||||
getService().getServerAuthor(), raceLog.getCurrentPassId(), c));
|
||||
}
|
||||
|
||||
for (Competitor c : toBeRemoved) {
|
||||
unregisterCompetitor(raceLog, c);
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 627 B |
Reference in new issue
Block a user