simplified steps for racelog-tracking

This commit is contained in:
Fredrik Teschke committed 2014-04-23 21:24:24 +02:00
1 parent 764b30ac50
commit 13a1776cc0
18 files changed
+328 -345

No files matched your search

@@ -21,7 +21,7 @@ import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.MultiSelectionModel;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SingleSelectionModel;
import com.google.gwt.view.client.SetSelectionModel;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.common.dto.FleetDTO;
@@ -69,7 +69,7 @@ TrackedRaceChangedListener {
protected LabeledAbstractFilterablePanel<StrippedLeaderboardDTO> filterLeaderboardPanel;
protected final SingleSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality> raceColumnTableSelectionModel;
protected final SetSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality> raceColumnTableSelectionModel;
protected List<StrippedLeaderboardDTO> availableLeaderboardList;
@@ -117,7 +117,8 @@ TrackedRaceChangedListener {
}
public AbstractLeaderboardConfigPanel(final SailingServiceAsync sailingService, AdminConsoleEntryPoint adminConsole,
final ErrorReporter errorReporter, StringMessages theStringConstants) {
final ErrorReporter errorReporter, StringMessages theStringConstants,
SetSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality> raceColumnTableSelectionModel) {
this.stringMessages = theStringConstants;
this.sailingService = sailingService;
leaderboardList = new ListDataProvider<StrippedLeaderboardDTO>();
@@ -236,7 +237,7 @@ TrackedRaceChangedListener {
addColumnsToRacesTable(raceColumnTable);
raceColumnTableSelectionModel = new SingleSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>();
this.raceColumnTableSelectionModel = raceColumnTableSelectionModel;
raceColumnTable.setSelectionModel(raceColumnTableSelectionModel);
raceColumnTableSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
public void onSelectionChange(SelectionChangeEvent event) {
@@ -420,8 +421,10 @@ TrackedRaceChangedListener {
}
protected RaceColumnDTOAndFleetDTOWithNameBasedEquality getSelectedRaceColumnWithFleet() {
RaceColumnDTOAndFleetDTOWithNameBasedEquality raceInLeaderboardAndFleetName = raceColumnTableSelectionModel.getSelectedObject();
return raceInLeaderboardAndFleetName;
if (raceColumnTableSelectionModel.getSelectedSet().isEmpty()) {
return null;
}
return raceColumnTableSelectionModel.getSelectedSet().iterator().next();
}
protected String getSelectedLeaderboardName() {
@@ -29,6 +29,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.view.client.SingleSelectionModel;
import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
@@ -86,7 +87,7 @@ TrackedRaceChangedListener {
public LeaderboardConfigPanel(final SailingServiceAsync sailingService, AdminConsoleEntryPoint adminConsole,
final ErrorReporter errorReporter, StringMessages theStringConstants, final boolean showRaceDetails) {
super(sailingService, adminConsole, errorReporter, theStringConstants);
super(sailingService, adminConsole, errorReporter, theStringConstants, new SingleSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>());
this.showRaceDetails = showRaceDetails;
}
@@ -548,7 +549,7 @@ TrackedRaceChangedListener {
*/
private void moveSelectedRaceColumnDown() {
final String selectedLeaderboardName = getSelectedLeaderboardName();
final String selectedRaceColumnName = raceColumnTableSelectionModel.getSelectedObject().getA().getRaceColumnName();
final String selectedRaceColumnName = getSelectedRaceColumnWithFleet().getA().getRaceColumnName();
sailingService.moveLeaderboardColumnDown(getSelectedLeaderboardName(), selectedRaceColumnName,
new MarkedAsyncCallback<Void>(
new AsyncCallback<Void>() {
@@ -572,7 +573,7 @@ TrackedRaceChangedListener {
*/
private void moveSelectedRaceColumnUp() {
final String selectedLeaderboardName = getSelectedLeaderboardName();
final String selectedRaceColumnName = raceColumnTableSelectionModel.getSelectedObject().getA().getRaceColumnName();
final String selectedRaceColumnName = getSelectedRaceColumnWithFleet().getA().getRaceColumnName();
sailingService.moveLeaderboardColumnUp(getSelectedLeaderboardName(), selectedRaceColumnName,
new MarkedAsyncCallback<Void>(
new AsyncCallback<Void>() {
@@ -10,7 +10,6 @@ import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
public class RaceLogTrackingEventManagementImagesBarCell extends ImagesBarCell {
public static final String ACTION_DENOTE_FOR_RACELOG_TRACKING = "ACTION_DENOTE_FOR_RACELOG_TRACKING";
public static final String ACTION_ADD_RACELOG_TRACKERS = "ACTION_ADD_RACELOG_TRACKERS";
private static AdminConsoleResources resources = GWT.create(AdminConsoleResources.class);
private final StringMessages stringMessages;
@@ -29,12 +28,10 @@ public class RaceLogTrackingEventManagementImagesBarCell extends ImagesBarCell {
ArrayList<ImageSpec> result = new ArrayList<ImageSpec>();
StrippedLeaderboardDTO leaderboard = (StrippedLeaderboardDTO) getContext().getKey();
if (! leaderboard.isDenotedForRaceLogTracking) {
if (leaderboard.isDenotableForRaceLogTracking) {
result.add(new ImageSpec(ACTION_DENOTE_FOR_RACELOG_TRACKING, stringMessages.denoteForRaceLogTracking(), makeImagePrototype(resources.denoteForRaceLogTracking())));
}
if (leaderboard.raceLogTrackersCanBeAdded) {
result.add(new ImageSpec(ACTION_ADD_RACELOG_TRACKERS, stringMessages.addRaceLogTrackers(), makeImagePrototype(resources.addRaceLogTracker())));
}
return result;
}
@@ -1,14 +1,20 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.Set;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.MultiSelectionModel;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
import com.sap.sailing.domain.common.dto.FleetDTO;
@@ -25,11 +31,16 @@ import com.sap.sse.gwt.client.dialog.DataEntryDialog;
/**
* Allows the user to start and stop tracking of races using the RaceLog-tracking connector.
*/
public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConfigPanel {
public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConfigPanel {
private Button startTrackingButton;
private MultiSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality> multiRaceSelectionModel;
public RaceLogTrackingEventManagementPanel(SailingServiceAsync sailingService, AdminConsoleEntryPoint adminConsole,
RegattaRefresher regattaRefresher,
ErrorReporter errorReporter, StringMessages stringMessages) {
super(sailingService, adminConsole, errorReporter, stringMessages);
super(sailingService, adminConsole, errorReporter, stringMessages,
new MultiSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>());
multiRaceSelectionModel = new MultiSelectionModel<>();
}
@Override
@@ -57,9 +68,7 @@ public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConf
leaderboardActionColumn.setFieldUpdater(new FieldUpdater<StrippedLeaderboardDTO, String>() {
@Override
public void update(int index, StrippedLeaderboardDTO leaderboardDTO, String value) {
if (RaceLogTrackingEventManagementImagesBarCell.ACTION_ADD_RACELOG_TRACKERS.equals(value)) {
addRaceLogTrackers(leaderboardDTO);
} else if (RaceLogTrackingEventManagementImagesBarCell.ACTION_DENOTE_FOR_RACELOG_TRACKING.equals(value)) {
if (RaceLogTrackingEventManagementImagesBarCell.ACTION_DENOTE_FOR_RACELOG_TRACKING.equals(value)) {
denoteForRaceLogTracking(leaderboardDTO);
}
}
@@ -111,12 +120,8 @@ public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConf
final String raceColumnName = object.getA().getName();
final String fleetName = object.getB().getName();
boolean editable = object.getB().raceLogTrackingState != RaceLogTrackingState.TRACKING;
if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_ADD_RACELOG_TRACKER.equals(value)) {
addRaceLogTracker(object.getA(), object.getB());
} else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_DENOTE_FOR_RACELOG_TRACKING.equals(value)) {
if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_DENOTE_FOR_RACELOG_TRACKING.equals(value)) {
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)) {
new RaceLogTrackingCompetitorRegistrationsDialog(sailingService, stringMessages, errorReporter,
getSelectedLeaderboardName(), object.getA().getName(), object.getB().getName(), editable).show();
@@ -169,6 +174,9 @@ public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConf
racesTable.addColumn(trackerStateColumn, stringMessages.trackerStatus());
racesTable.addColumn(raceActionColumn, stringMessages.actions());
racesTable.setWidth("600px");
//set multi selection model, overriding single selection model
racesTable.setSelectionModel(multiRaceSelectionModel);
}
@Override
@@ -178,7 +186,34 @@ public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConf
protected void addLeaderboardCreateControls(Panel createPanel) {}
@Override
protected void addSelectedLeaderboardRacesControls(Panel racesPanel) {}
protected void addSelectedLeaderboardRacesControls(Panel racesPanel) {
startTrackingButton = new Button(stringMessages.startTracking());
startTrackingButton.setEnabled(false);
racesPanel.add(startTrackingButton);
startTrackingButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
startTracking(raceColumnTableSelectionModel.getSelectedSet());
}
});
raceColumnTableSelectionModel.addSelectionChangeHandler(new Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
enableStartTrackingButtonIfAppropriateRacesSelected();
}
});
}
private void enableStartTrackingButtonIfAppropriateRacesSelected() {
boolean enable = raceColumnTableSelectionModel.getSelectedSet().size() > 0;
for (RaceColumnDTOAndFleetDTOWithNameBasedEquality race : raceColumnTableSelectionModel.getSelectedSet()) {
if (! race.getB().raceLogTrackingState.isForTracking() || race.getB().raceLogTrackerExists) {
enable = false;
}
}
startTrackingButton.setEnabled(enable);
}
@Override
protected void leaderboardRaceColumnSelectionChanged() {
@@ -216,6 +251,7 @@ public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConf
@Override
public void onSuccess(Void result) {
loadAndRefreshLeaderboard(leaderboard.name, null);
raceColumnTableSelectionModel.clear();
}
@Override
@@ -231,6 +267,7 @@ public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConf
@Override
public void onSuccess(Void result) {
loadAndRefreshLeaderboard(leaderboard.name, raceColumn.getName());
raceColumnTableSelectionModel.clear();
}
@Override
@@ -239,62 +276,30 @@ public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConf
}
});
}
private void startTracking(Set<RaceColumnDTOAndFleetDTOWithNameBasedEquality> races) {
final StrippedLeaderboardDTO leaderboard = getSelectedLeaderboard();
private void addRaceLogTrackers(final StrippedLeaderboardDTO leaderboard) {
final RaceColumnDTOAndFleetDTOWithNameBasedEquality selectedRCFleet = getSelectedRaceColumnWithFleet();
if (leaderboard.raceLogTrackersCanBeAdded) {
sailingService.addRaceLogTrackers(leaderboard.name, new AsyncCallback<Void>() {
@Override
public void onSuccess(Void result) {
loadAndRefreshLeaderboard(leaderboard.name, selectedRCFleet.getA().getName());
trackedRacesListComposite.regattaRefresher.fillRegattas();
}
for (RaceColumnDTOAndFleetDTOWithNameBasedEquality race : races) {
final RaceColumnDTO raceColumn = race.getA();
final FleetDTO fleet = race.getB();
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Failed to add RaceLog tracker: " + caught.getMessage());
}
});
} else {
errorReporter.reportError("No RaceLogTracker can be added for any of the RaceLogs in this leaderboard");
}
}
private void addRaceLogTracker(final RaceColumnDTO raceColumn, FleetDTO fleet) {
if (fleet.raceLogTrackerCanBeAdded) {
final StrippedLeaderboardDTO leaderboard = getSelectedLeaderboard();
sailingService.addRaceLogTracker(leaderboard.name, raceColumn.getName(), fleet.getName(), new AsyncCallback<Void>() {
sailingService.startRaceLogTracking(leaderboard.name, raceColumn.getName(), fleet.getName(),
new AsyncCallback<Void>() {
@Override
public void onSuccess(Void result) {
loadAndRefreshLeaderboard(leaderboard.name, raceColumn.getName());
trackedRacesListComposite.regattaRefresher.fillRegattas();
raceColumnTableSelectionModel.clear();
}
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Failed to add RaceLog trackers: " + caught.getMessage());
errorReporter.reportError("Failed to start tracking " + raceColumn.getName() + " - "
+ fleet.getName() + ": " + caught.getMessage());
}
});
} else {
errorReporter.reportError("No RaceLogTracker can be added for the RaceLog of this fleet");
}
}
private void startRaceLogTracking(final RaceColumnDTO raceColumn, FleetDTO fleet) {
final StrippedLeaderboardDTO leaderboard = getSelectedLeaderboard();
sailingService.startRaceLogTracking(leaderboard.name, raceColumn.getName(), fleet.getName(), new AsyncCallback<Void>() {
@Override
public void onSuccess(Void result) {
loadAndRefreshLeaderboard(leaderboard.name, raceColumn.getName());
trackedRacesListComposite.regattaRefresher.fillRegattas();
}
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Failed to start tracking: " + caught.getMessage());
}
});
}
}
private void setStartTime(RaceColumnDTO raceColumnDTO, FleetDTO fleetDTO) {
@@ -4,15 +4,12 @@ import java.util.ArrayList;
import java.util.List;
import com.google.gwt.core.client.GWT;
import com.sap.sailing.domain.common.racelog.tracking.RaceLogTrackingState;
import com.sap.sailing.gwt.ui.adminconsole.AbstractLeaderboardConfigPanel.RaceColumnDTOAndFleetDTOWithNameBasedEquality;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell;
public class RaceLogTrackingEventManagementRaceImagesBarCell extends ImagesBarCell {
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";
public final static String ACTION_DEFINE_COURSE = "ACTION_DEFINE_COURSE";
public final static String ACTION_MAP_DEVICES = "ACTION_MAP_DEVICES";
@@ -31,17 +28,10 @@ public class RaceLogTrackingEventManagementRaceImagesBarCell extends ImagesBarCe
protected Iterable<ImageSpec> getImageSpecs() {
List<ImageSpec> result = new ArrayList<ImageSpec>();
RaceColumnDTOAndFleetDTOWithNameBasedEquality object = (RaceColumnDTOAndFleetDTOWithNameBasedEquality) getContext().getKey();
if (object.getB().raceLogTrackerCanBeAdded) {
result.add(new ImageSpec(ACTION_ADD_RACELOG_TRACKER, stringMessages.addRaceLogTracker(), makeImagePrototype(resources.addRaceLogTracker())));
}
if (! object.getB().raceLogTrackingState.isForTracking()) {
result.add(new ImageSpec(ACTION_DENOTE_FOR_RACELOG_TRACKING, stringMessages.denoteForRaceLogTracking(), makeImagePrototype(resources.denoteForRaceLogTracking())));
}
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())));
result.add(new ImageSpec(ACTION_DEFINE_COURSE, stringMessages.defineCourse(), makeImagePrototype(resources.defineCourse())));
@@ -9,8 +9,8 @@ import java.util.Set;
import java.util.UUID;
import com.google.gwt.user.client.rpc.RemoteService;
import com.sap.sailing.domain.common.DataImportProgress;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.common.DataImportProgress;
import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.domain.common.LeaderboardType;
import com.sap.sailing.domain.common.MaxPointsReason;
@@ -33,12 +33,14 @@ import com.sap.sailing.domain.common.dto.RaceDTO;
import com.sap.sailing.domain.common.dto.RegattaCreationParametersDTO;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
import com.sap.sailing.domain.common.racelog.tracking.NoCorrespondingServiceRegisteredException;
import com.sap.sailing.domain.common.racelog.tracking.RaceNotCreatedException;
import com.sap.sailing.domain.common.racelog.tracking.NotDenotedForRaceLogTrackingException;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.Revokable;
import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
import com.sap.sailing.domain.racelogtracking.RaceLogTrackingAdapter;
import com.sap.sailing.gwt.ui.shared.BulkScoreCorrectionDTO;
import com.sap.sailing.gwt.ui.shared.CompactRaceMapDataDTO;
import com.sap.sailing.gwt.ui.shared.CompetitorsRaceDataDTO;
@@ -396,15 +398,18 @@ public interface SailingService extends RemoteService {
Map<RegattaAndRaceIdentifier, Integer> importWindFromIgtimi(List<RaceDTO> selectedRaces) throws Exception;
void addRaceLogTrackers(String leaderboardName) throws Exception, RaceNotCreatedException;
void addRaceLogTracker(String leaderboardName, String raceColumnName, String fleetName) throws Exception, RaceNotCreatedException;
void denoteForRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName) throws Exception;
void denoteForRaceLogTracking(String leaderboardName) throws Exception;
void startRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName);
/**
* Performs all the necessary steps to start tracking the race.
* The {@code RaceLog} needs to be denoted for racelog-tracking beforehand.
*
* @see RaceLogTrackingAdapter#startTracking
*/
void startRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName)
throws NotDenotedForRaceLogTrackingException, Exception;
void setCompetitorRegistrations(String leaderboardName, String raceColumnName, String fleetName, Set<CompetitorDTO> competitors);
@@ -441,5 +446,9 @@ public interface SailingService extends RemoteService {
void closeOpenEndedDeviceMapping(String leaderboardName, String raceColumnName, String fleetName, DeviceMappingDTO mapping,
Date closingTimePoint) throws NoCorrespondingServiceRegisteredException, TransformationException;
/**
* Revoke the events in the {@code RaceLog} that are identified by the {@code eventIds}.
* This only affects such events that implement {@link Revokable}.
*/
void revokeRaceLogEvents(String leaderboardName, String raceColumnName, String fleetName, List<Serializable> eventIds);
}
@@ -526,11 +526,6 @@ public interface SailingServiceAsync {
void getLeaderboardsByEvent(EventDTO event, AsyncCallback<List<StrippedLeaderboardDTO>> callback);
void addRaceLogTrackers(String leaderboardName, AsyncCallback<Void> callback);
void addRaceLogTracker(String leaderboardName, String raceColumnName,
String fleetName, AsyncCallback<Void> callback);
void denoteForRaceLogTracking(String leaderboardName,
String raceColumnName, String fleetName,
AsyncCallback<Void> callback);
@@ -161,6 +161,7 @@ import com.sap.sailing.domain.common.racelog.FlagPole;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.common.racelog.tracking.NoCorrespondingServiceRegisteredException;
import com.sap.sailing.domain.common.racelog.tracking.NotDenotedForRaceLogTrackingException;
import com.sap.sailing.domain.common.racelog.tracking.TransformationException;
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinder;
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinderFactory;
@@ -2031,8 +2032,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
} else {
leaderboardDTO.discardThresholds = null;
}
leaderboardDTO.isDenotedForRaceLogTracking = false;
leaderboardDTO.raceLogTrackersCanBeAdded = false;
leaderboardDTO.isDenotableForRaceLogTracking = leaderboard instanceof RegattaLeaderboard;
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
for (Fleet fleet : raceColumn.getFleets()) {
RaceDTO raceDTO = null;
@@ -2054,13 +2054,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
fleetDTO.raceLogTrackerExists = getService().getRaceTrackerById(raceLog.getId()) != null;
fleetDTO.courseDefinitionInRaceLog = new LastPublishedCourseDesignFinder(raceLog).analyze() != null;
if (getRaceLogTrackingAdapter().isDenotedForRaceLogTracking(getService(), raceColumn, fleet)) {
leaderboardDTO.isDenotedForRaceLogTracking = true;
}
if (getRaceLogTrackingAdapter().canRaceLogTrackerBeAdded(getService(), raceColumn, fleet)) {
leaderboardDTO.raceLogTrackersCanBeAdded = true;
fleetDTO.raceLogTrackerCanBeAdded = true;
if (! raceLog.isEmpty()) {
leaderboardDTO.isDenotableForRaceLogTracking = false;
}
}
}
@@ -4024,40 +4019,6 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
}
private void addRaceLogTracker(Leaderboard leaderboard, RaceColumn raceColumn, Fleet fleet) throws Exception {
RegattaIdentifier regatta = null;
if (leaderboard instanceof RegattaLeaderboard) {
regatta = ((RegattaLeaderboard) leaderboard).getRegatta().getRegattaIdentifier();
}
getRaceLogTrackingAdapter().addRace(getService(), regatta, leaderboard, raceColumn, fleet, -1);
}
@Override
public void addRaceLogTracker(String leaderboardName,
String raceColumnName, String fleetName) throws Exception {
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
RaceColumn raceColumn = getService().getLeaderboardByName(leaderboardName).getRaceColumnByName(raceColumnName);
Fleet fleet = raceColumn.getFleetByName(fleetName);
addRaceLogTracker(leaderboard, raceColumn, fleet);
}
@Override
public void addRaceLogTrackers(String leaderboardName) throws Exception {
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
RaceLogTrackingAdapter adapter = getRaceLogTrackingAdapter();
Map<RaceColumn, Collection<Fleet>> canBeLoaded = adapter.listRaceLogTrackersThatCanBeAdded(getService(), leaderboard);
for (RaceColumn raceColumn : canBeLoaded.keySet()) {
if (canBeLoaded.get(raceColumn) != null) {
for (Fleet fleet : canBeLoaded.get(raceColumn)) {
addRaceLogTracker(leaderboard, raceColumn, fleet);
}
}
}
}
@Override
public void denoteForRaceLogTracking(String leaderboardName,
String raceColumnName, String fleetName) throws Exception {
@@ -4065,13 +4026,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
RaceColumn raceColumn = getService().getLeaderboardByName(leaderboardName).getRaceColumnByName(raceColumnName);
Fleet fleet = raceColumn.getFleetByName(fleetName);
getRaceLogTrackingAdapter().denoteForRaceLogTracking(getService(), leaderboard, raceColumn, fleet, null);
getRaceLogTrackingAdapter().denoteRaceForRaceLogTracking(getService(), leaderboard, raceColumn, fleet, null);
}
@Override
public void denoteForRaceLogTracking(String leaderboardName) throws Exception {
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
getRaceLogTrackingAdapter().denoteForRaceLogTracking(getService(), leaderboard);
getRaceLogTrackingAdapter().denoteLeaderboardForRaceLogTracking(getService(), leaderboard);
}
private RaceLog getRaceLog(String leaderboardName, String raceColumnName, String fleetName) {
@@ -4080,16 +4041,6 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
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(
@@ -4397,4 +4348,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
raceLog.add(event);
}
}
@Override
public void startRaceLogTracking(String leaderboardName, String raceColumnName, String fleetName)
throws NotDenotedForRaceLogTrackingException, Exception {
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
Fleet fleet = raceColumn.getFleetByName(fleetName);
getRaceLogTrackingAdapter().startTracking(getService(), leaderboard, raceColumn, fleet);
}
}