Merge branch 'master' into translation

This commit is contained in:
Axel Uhl committed 2016-03-30 14:13:59 +02:00
commit beee35fe90
15 files changed
+151 -127

No files matched your search

@@ -1615,8 +1615,7 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
loadRegattaLogEvents(result, query, identifier); loadRegattaLogEvents(result, query, identifier);
} catch (Throwable t) { } catch (Throwable t) {
// something went wrong during DB access; report, then use empty new regatta log // something went wrong during DB access; report, then use empty new regatta log
logger.log(Level.SEVERE, "Error connecting to MongoDB, unable to load recorded regatta log data. Check MongoDB settings."); logger.log(Level.SEVERE, "Error connecting to MongoDB, unable to load recorded regatta log data for "+identifier+". Check MongoDB settings.", t);
logger.log(Level.SEVERE, "loadRegattaLog", t);
} }
return result; return result;
} }
@@ -1708,7 +1707,15 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
private RegattaLogRegisterCompetitorEvent loadRegattaLogRegisterCompetitorEvent(TimePoint createdAt, AbstractLogEventAuthor author, private RegattaLogRegisterCompetitorEvent loadRegattaLogRegisterCompetitorEvent(TimePoint createdAt, AbstractLogEventAuthor author,
TimePoint logicalTimePoint, Serializable id, DBObject dbObject) { TimePoint logicalTimePoint, Serializable id, DBObject dbObject) {
Competitor comp = getCompetitorByID(dbObject); Competitor comp = getCompetitorByID(dbObject);
return new RegattaLogRegisterCompetitorEventImpl(createdAt, logicalTimePoint, author, id, comp); final RegattaLogRegisterCompetitorEvent result;
if (comp == null) {
result = null;
logger.log(Level.SEVERE, "Couldn't resolve competitor with ID "+dbObject.get(FieldNames.REGATTA_LOG_COMPETITOR_ID.name())+
" from registration event with ID "+id+". Skipping this competitor registration.");
} else {
result = new RegattaLogRegisterCompetitorEventImpl(createdAt, logicalTimePoint, author, id, comp);
}
return result;
} }
private RegattaLogCloseOpenEndedDeviceMappingEvent loadRegattaLogCloseOpenEndedDeviceMappingEvent(TimePoint createdAt, private RegattaLogCloseOpenEndedDeviceMappingEvent loadRegattaLogCloseOpenEndedDeviceMappingEvent(TimePoint createdAt,
@@ -24,6 +24,7 @@ import com.sap.sailing.domain.abstractlog.race.analyzing.impl.LastPublishedCours
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.TrackingTimesFinder; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.TrackingTimesFinder;
import com.sap.sailing.domain.abstractlog.race.impl.BaseRaceLogEventVisitor; import com.sap.sailing.domain.abstractlog.race.impl.BaseRaceLogEventVisitor;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogEndOfTrackingEventImpl;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartOfTrackingEventImpl; import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartOfTrackingEventImpl;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent; import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent; import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogStartTrackingEvent;
@@ -181,6 +182,14 @@ public class RaceLogRaceTracker implements RaceTracker, GPSFixReceivedListener {
@Override @Override
public void stop(boolean preemptive) { public void stop(boolean preemptive) {
RaceLog raceLog = params.getRaceLog();
final Pair<TimePoint, TimePoint> trackingTimes = new TrackingTimesFinder(raceLog).analyze();
if (trackingTimes == null || trackingTimes.getB() == null) {
// seems the first time tracking for this race is started; enter "now" as start of tracking
// into the race log
raceLog.add(new RaceLogEndOfTrackingEventImpl(MillisecondsTimePoint.now(), raceLogEventAuthor, /* passId */ 0));
}
// mark passing calculator is automatically stopped, when the race status is set to {@link // mark passing calculator is automatically stopped, when the race status is set to {@link
// TrackedRaceStatusEnum#FINISHED} // TrackedRaceStatusEnum#FINISHED}
trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.FINISHED, 100)); trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.FINISHED, 100));
@@ -49,4 +49,9 @@ public class FlexibleLeaderboardAsRegattaLikeIdentifier implements RegattaLikeId
public String getIdentifierType() { public String getIdentifierType() {
return FlexibleLeaderboard.class.getName(); return FlexibleLeaderboard.class.getName();
} }
@Override
public String toString() {
return getClass().getName()+": leaderboardName="+getName();
}
} }
@@ -49,4 +49,9 @@ public class RegattaAsRegattaLikeIdentifier implements RegattaLikeIdentifier {
public String getIdentifierType() { public String getIdentifierType() {
return Regatta.class.getName(); return Regatta.class.getName();
} }
@Override
public String toString() {
return getClass().getName()+": regattaName="+getName();
}
} }
@@ -57,14 +57,8 @@ public class RaceLogTrackingEventManagementRaceImagesBarCell extends ImagesBarCe
if (startEndTrackingTime == null){ if (startEndTrackingTime == null){
result.add(new ImageSpec(ACTION_START_TRACKING, stringMessages.startTracking(), makeImagePrototype(resources.startRaceLogTracking()))); result.add(new ImageSpec(ACTION_START_TRACKING, stringMessages.startTracking(), makeImagePrototype(resources.startRaceLogTracking())));
} else { } else {
if (startEndTrackingTime.getA() != null){ if (startEndTrackingTime.getB() == null){
if (startEndTrackingTime.getB() != null){ result.add(new ImageSpec(ACTION_STOP_TRACKING, stringMessages.stopTracking(), makeImagePrototype(resources.stopRaceLogTracking())));
result.add(new ImageSpec(ACTION_START_TRACKING, stringMessages.startTracking(), makeImagePrototype(resources.startRaceLogTracking())));
} else {
result.add(new ImageSpec(ACTION_STOP_TRACKING, stringMessages.stopTracking(), makeImagePrototype(resources.stopRaceLogTracking())));
}
} else {
result.add(new ImageSpec(ACTION_START_TRACKING, stringMessages.startTracking(), makeImagePrototype(resources.startRaceLogTracking())));
} }
} }
@@ -17,7 +17,6 @@ import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PushButton; import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.ToggleButton;
import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget; import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.DataEntryDialogWithBootstrap; import com.sap.sailing.gwt.ui.client.DataEntryDialogWithBootstrap;
@@ -50,7 +49,6 @@ public class SetTrackingTimesDialog extends DataEntryDialogWithBootstrap<RaceLog
private BetterDateTimeBox startTimeBox; private BetterDateTimeBox startTimeBox;
private BetterDateTimeBox endTimeBox; private BetterDateTimeBox endTimeBox;
private ToggleButton startStopButton;
private TextBox authorNameBox; private TextBox authorNameBox;
private com.sap.sse.gwt.client.controls.IntegerBox authorPriorityBox; private com.sap.sse.gwt.client.controls.IntegerBox authorPriorityBox;
@@ -90,13 +88,6 @@ public class SetTrackingTimesDialog extends DataEntryDialogWithBootstrap<RaceLog
currentEnd = result == null ? null : result.getB(); currentEnd = result == null ? null : result.getB();
updateDateTimeLabelAndTimeBoxFromDate(currentStart, currentStartLabel, startTimeBox); updateDateTimeLabelAndTimeBoxFromDate(currentStart, currentStartLabel, startTimeBox);
updateDateTimeLabelAndTimeBoxFromDate(currentEnd, currentEndLabel, endTimeBox); updateDateTimeLabelAndTimeBoxFromDate(currentEnd, currentEndLabel, endTimeBox);
if (currentStart == null){
setupStartStopButton(false);
} else if (currentStart != null && currentEnd == null){
setupStartStopButton(true);
} else {
setupStartStopButton(false);
}
} }
}); });
} }
@@ -111,10 +102,6 @@ public class SetTrackingTimesDialog extends DataEntryDialogWithBootstrap<RaceLog
} }
} }
private void setupStartStopButton(boolean startTimeSet) {
startStopButton.setDown(startTimeSet);
}
private Widget createInputPanel() { private Widget createInputPanel() {
Grid content = new Grid(4, 3); Grid content = new Grid(4, 3);
@@ -179,37 +166,6 @@ public class SetTrackingTimesDialog extends DataEntryDialogWithBootstrap<RaceLog
} }
}); });
currentPanel.add(refreshButton); currentPanel.add(refreshButton);
Image startImage = new Image(resources.startRaceLogTracking());
Image stopImage = new Image(resources.stopRaceLogTracking());
startStopButton = new ToggleButton(startImage, stopImage, new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
RaceLogSetTrackingTimesDTO trackingTimesDTO;
if (startStopButton.isDown()){
trackingTimesDTO = generateRaceLogSetTrackingTimesDTOWith(new Date(), null);
} else {
trackingTimesDTO = generateRaceLogSetTrackingTimesDTOWith(startTimeBox.getValue(), new Date());
}
service.setTrackingTimes(trackingTimesDTO, new AsyncCallback<Void>(){
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error while setting tracking times: " + caught.getMessage());
}
@Override
public void onSuccess(Void result) {
refreshTimes();
getCancelButton().click();
}
});
}
});
currentPanel.add(startStopButton);
current.add(currentPanel); current.add(currentPanel);
return current; return current;
} }
@@ -1,6 +1,7 @@
package com.sap.sailing.gwt.ui.adminconsole; package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -16,18 +17,21 @@ import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.TextColumn; import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.Window; import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CaptionPanel; import com.google.gwt.user.client.ui.CaptionPanel;
import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.ToggleButton;
import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.ListDataProvider; import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.SelectionChangeEvent; import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionChangeEvent.Handler; import com.google.gwt.view.client.SelectionChangeEvent.Handler;
import com.sap.sailing.domain.common.PassingInstruction; import com.sap.sailing.domain.common.PassingInstruction;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.TrackedRaceStatusEnum;
import com.sap.sailing.domain.common.dto.CompetitorDTO; import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.domain.common.dto.FleetDTO; import com.sap.sailing.domain.common.dto.FleetDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.domain.common.dto.RaceDTO;
import com.sap.sailing.domain.common.racelog.tracking.RaceLogTrackingState; import com.sap.sailing.domain.common.racelog.tracking.RaceLogTrackingState;
import com.sap.sailing.gwt.ui.client.LeaderboardsDisplayer; import com.sap.sailing.gwt.ui.client.LeaderboardsDisplayer;
import com.sap.sailing.gwt.ui.client.LeaderboardsRefresher; import com.sap.sailing.gwt.ui.client.LeaderboardsRefresher;
@@ -45,8 +49,8 @@ import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util; import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Pair; import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.Util.Triple; import com.sap.sse.common.Util.Triple;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
import com.sap.sse.gwt.client.dialog.DataEntryDialog; import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
@@ -54,7 +58,7 @@ import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
* Allows the user to start and stop tracking of races using the RaceLog-tracking connector. * Allows the user to start and stop tracking of races using the RaceLog-tracking connector.
*/ */
public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardConfigPanel implements LeaderboardsDisplayer { public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardConfigPanel implements LeaderboardsDisplayer {
private Button startTrackingButton; private ToggleButton startStopTrackingButton;
private TrackFileImportDeviceIdentifierTableWrapper deviceIdentifierTable; private TrackFileImportDeviceIdentifierTableWrapper deviceIdentifierTable;
private CheckBox correctWindDirectionForDeclination; private CheckBox correctWindDirectionForDeclination;
private CheckBox trackWind; private CheckBox trackWind;
@@ -77,6 +81,18 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
importPanel.add(importContent); importPanel.add(importContent);
importContent.add(importWidget); importContent.add(importWidget);
importContent.add(deviceIdentifierTable); importContent.add(deviceIdentifierTable);
trackedRacesListComposite.addTrackedRaceChangeListener(new TrackedRaceChangedListener() {
@Override
public void racesStoppedTracking(Iterable<? extends RegattaAndRaceIdentifier> regattaAndRaceIdentifiers) {
loadAndRefreshLeaderboard(getSelectedLeaderboard().name, getSelectedRaceColumnWithFleet().getA().getName());
}
@Override
public void racesRemoved(Iterable<? extends RegattaAndRaceIdentifier> regattaAndRaceIdentifiers) {
loadAndRefreshLeaderboard(getSelectedLeaderboard().name, getSelectedRaceColumnWithFleet().getA().getName());
}
});
} }
private static interface ShowWithBoatClass { private static interface ShowWithBoatClass {
@@ -184,6 +200,20 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
return race.getA().getRaceLogTrackingInfo(race.getB()).raceLogTrackingState; return race.getA().getRaceLogTrackingInfo(race.getB()).raceLogTrackingState;
} }
private boolean trackerExists(RaceColumnDTOAndFleetDTOWithNameBasedEquality race) {
return race.getA().getRaceLogTrackingInfo(race.getB()).raceLogTrackerExists;
}
private boolean isFinished(RaceColumnDTOAndFleetDTOWithNameBasedEquality race) {
RaceDTO raceDTO = race.getA().getRace(race.getB());
boolean raceFinished = false;
if (raceDTO != null){
raceFinished = raceDTO.status.status.equals(TrackedRaceStatusEnum.FINISHED);
}
return raceFinished;
}
private boolean doesTrackerExist(RaceColumnDTOAndFleetDTOWithNameBasedEquality race) { private boolean doesTrackerExist(RaceColumnDTOAndFleetDTOWithNameBasedEquality race) {
return race.getA().getRaceLogTrackingInfo(race.getB()).raceLogTrackerExists; return race.getA().getRaceLogTrackingInfo(race.getB()).raceLogTrackerExists;
} }
@@ -309,15 +339,9 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
} else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_SET_TRACKING_TIMES.equals(value)) { } else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_SET_TRACKING_TIMES.equals(value)) {
showSetTrackingTimesDialog(getSelectedRaceColumnWithFleet().getA(), getSelectedRaceColumnWithFleet().getB());; showSetTrackingTimesDialog(getSelectedRaceColumnWithFleet().getA(), getSelectedRaceColumnWithFleet().getB());;
} else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_START_TRACKING.equals(value)) { } else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_START_TRACKING.equals(value)) {
TimePoint newStart = MillisecondsTimePoint.now(); startTracking(Collections.singleton(raceColumnDTOAndFleetDTO), trackWind.getValue(), correctWindDirectionForDeclination.getValue());
RaceLogSetTrackingTimesDTO setTrackingTimesDTO = generateRaceLogSetTrackingTimesDTOWith(newStart, null);
setTrackingTimes(setTrackingTimesDTO, raceColumnName);
} else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_STOP_TRACKING.equals(value)) { } else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_STOP_TRACKING.equals(value)) {
Pair<TimePoint, TimePoint> startEndTrackingTime = getTrackingTimesFor(raceColumnDTOAndFleetDTO); stopTracking(Collections.singleton(raceColumnDTOAndFleetDTO));
TimePoint currentStart = startEndTrackingTime.getA();
TimePoint newEnd = MillisecondsTimePoint.now();
RaceLogSetTrackingTimesDTO setTrackingTimesDTO = generateRaceLogSetTrackingTimesDTOWith(currentStart, newEnd);
setTrackingTimes(setTrackingTimesDTO, raceColumnName);
} }
} }
}); });
@@ -327,46 +351,6 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
racesTable.addColumn(raceActionColumn, stringMessages.actions()); racesTable.addColumn(raceActionColumn, stringMessages.actions());
racesTable.setWidth("600px"); racesTable.setWidth("600px");
} }
private void setTrackingTimes(RaceLogSetTrackingTimesDTO trackingTimesDTO, final String raceColumnName){
sailingService.setTrackingTimes(trackingTimesDTO, new AsyncCallback<Void>(){
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error while setting tracking times: " + caught.getMessage());
}
@Override
public void onSuccess(Void result) {
loadAndRefreshLeaderboard(getSelectedLeaderboard().name, raceColumnName);
}
});
}
private RaceLogSetTrackingTimesDTO generateRaceLogSetTrackingTimesDTOWith(TimePoint startTime, TimePoint endTime) {
Pair<TimePoint, TimePoint> startEndTrackingTime = getTrackingTimesFor(getSelectedRaceColumnWithFleet());
TimePoint currentStart;
TimePoint currentEnd;
if (startEndTrackingTime == null){
currentStart = null;
currentEnd = null;
} else {
currentStart = startEndTrackingTime.getA();
currentEnd = startEndTrackingTime.getB();
}
RaceLogSetTrackingTimesDTO dto = new RaceLogSetTrackingTimesDTO();
dto.leaderboardName = getSelectedLeaderboardName();
dto.raceColumnName = getSelectedRaceColumnWithFleet().getA().getName();
dto.fleetName = getSelectedRaceColumnWithFleet().getB().getName();
dto.authorName = "Shore";
dto.authorPriority = 4;
dto.logicalTimePoint = MillisecondsTimePoint.now();
dto.newStartOfTracking = startTime;
dto.newEndOfTracking = endTime;
dto.currentStartOfTracking = currentStart;
dto.currentEndOfTracking = currentEnd;
return dto;
}
@Override @Override
protected void addLeaderboardControls(Panel controlsPanel) {} protected void addLeaderboardControls(Panel controlsPanel) {}
@@ -375,16 +359,21 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
protected void addSelectedLeaderboardRacesControls(Panel racesPanel) { protected void addSelectedLeaderboardRacesControls(Panel racesPanel) {
trackWind = new CheckBox(stringMessages.trackWind()); trackWind = new CheckBox(stringMessages.trackWind());
correctWindDirectionForDeclination = new CheckBox(stringMessages.declinationCheckbox()); correctWindDirectionForDeclination = new CheckBox(stringMessages.declinationCheckbox());
startTrackingButton = new Button(stringMessages.startTracking()); startStopTrackingButton = new ToggleButton(stringMessages.startTracking(), stringMessages.stopTracking());
startTrackingButton.ensureDebugId("StartTrackingButton"); startStopTrackingButton.ensureDebugId("StartTrackingButton");
startTrackingButton.setEnabled(false); startStopTrackingButton.setEnabled(false);
racesPanel.add(trackWind); racesPanel.add(trackWind);
racesPanel.add(correctWindDirectionForDeclination); racesPanel.add(correctWindDirectionForDeclination);
racesPanel.add(startTrackingButton); racesPanel.add(startStopTrackingButton);
startTrackingButton.addClickHandler(new ClickHandler() { startStopTrackingButton.addClickHandler(new ClickHandler() {
@Override @Override
public void onClick(ClickEvent event) { public void onClick(ClickEvent event) {
startTracking(raceColumnTableSelectionModel.getSelectedSet(), trackWind.getValue(), correctWindDirectionForDeclination.getValue()); if (startStopTrackingButton.isDown()){
startTracking(raceColumnTableSelectionModel.getSelectedSet(), trackWind.getValue(), correctWindDirectionForDeclination.getValue());
} else {
stopTracking(raceColumnTableSelectionModel.getSelectedSet());
}
refreshTrackingActionButtons();
} }
}); });
@@ -396,14 +385,72 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
}); });
} }
private void stopTracking(final Set<RaceColumnDTOAndFleetDTOWithNameBasedEquality> selectedSet) {
final List<RegattaAndRaceIdentifier> racesToStopTracking = new ArrayList<RegattaAndRaceIdentifier>();
for (RaceColumnDTOAndFleetDTOWithNameBasedEquality raceColumnDTOAndFleetDTOWithNameBasedEquality : selectedSet) {
RaceDTO race = raceColumnDTOAndFleetDTOWithNameBasedEquality.getA().getRace(raceColumnDTOAndFleetDTOWithNameBasedEquality.getB());
if (race != null && race.isTracked){
racesToStopTracking.add(race.getRaceIdentifier());
}
}
sailingService.stopTrackingRaces(racesToStopTracking, new MarkedAsyncCallback<Void>(
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Exception trying to stop tracking races " + racesToStopTracking + ": " + caught.getMessage());
}
@Override
public void onSuccess(Void result) {
trackedRacesListComposite.regattaRefresher.fillRegattas();
for (TrackedRaceChangedListener listener : trackedRacesListComposite.raceIsTrackedRaceChangeListener) {
listener.racesStoppedTracking(racesToStopTracking);
}
for (RaceColumnDTOAndFleetDTOWithNameBasedEquality raceColumndDTOAndFleet : selectedSet) {
loadAndRefreshLeaderboard(getSelectedLeaderboard().name, raceColumndDTOAndFleet.getA().getName());
}
}
}));
}
private void enableStartTrackingButtonIfAppropriateRacesSelected() { private void enableStartTrackingButtonIfAppropriateRacesSelected() {
boolean enable = raceColumnTableSelectionModel.getSelectedSet().size() > 0; boolean onlyUntrackedRacesPresent = raceColumnTableSelectionModel.getSelectedSet().size() > 0;
boolean onlyTrackedRacesPresent = raceColumnTableSelectionModel.getSelectedSet().size() > 0;
boolean onlyRacesWithNonExistentTracker = raceColumnTableSelectionModel.getSelectedSet().size() > 0;
for (RaceColumnDTOAndFleetDTOWithNameBasedEquality race : raceColumnTableSelectionModel.getSelectedSet()) { for (RaceColumnDTOAndFleetDTOWithNameBasedEquality race : raceColumnTableSelectionModel.getSelectedSet()) {
if (! getTrackingState(race).isForTracking() || doesTrackerExist(race)) { if (getTrackingState(race).isForTracking() && isFinished(race)){
enable = false; onlyUntrackedRacesPresent = false;
onlyTrackedRacesPresent = false;
}
if (! getTrackingState(race).isForTracking() || doesTrackerExist(race) || isFinished(race)) {
onlyUntrackedRacesPresent = false;
} else {
onlyTrackedRacesPresent = false;
}
if (trackerExists(race)){
onlyRacesWithNonExistentTracker = false;
} }
} }
startTrackingButton.setEnabled(enable);
if ((!onlyTrackedRacesPresent && !onlyUntrackedRacesPresent)){
startStopTrackingButton.setEnabled(false);
}
if (onlyTrackedRacesPresent){
startStopTrackingButton.setDown(true);
startStopTrackingButton.setEnabled(true);
}
if (onlyUntrackedRacesPresent || onlyRacesWithNonExistentTracker){
startStopTrackingButton.setDown(false);
startStopTrackingButton.setEnabled(true);
}
} }
@Override @Override
@@ -552,7 +599,7 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
new AsyncCallback<Void>() { new AsyncCallback<Void>() {
@Override @Override
public void onSuccess(Void result) { public void onSuccess(Void result) {
loadAndRefreshLeaderboard(leaderboard.name, raceColumn.getName()); loadAndRefreshLeaderboard(leaderboard.name, getSelectedRaceColumnWithFleet().getA().getName());
trackedRacesListComposite.regattaRefresher.fillRegattas(); trackedRacesListComposite.regattaRefresher.fillRegattas();
} }
@@ -28,7 +28,7 @@ import com.sap.sse.gwt.client.shared.components.SettingsDialog;
* the {@link AdminConsoleEntryPoint}. * the {@link AdminConsoleEntryPoint}.
*/ */
public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite { public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite {
private final Set<TrackedRaceChangedListener> raceIsTrackedRaceChangeListener; final Set<TrackedRaceChangedListener> raceIsTrackedRaceChangeListener;
private Button btnUntrack; private Button btnUntrack;
private Button btnRemoveRace; private Button btnRemoveRace;
private Button btnSetDelayToLive; private Button btnSetDelayToLive;
@@ -56,7 +56,7 @@ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite
this.raceIsTrackedRaceChangeListener.add(listener); this.raceIsTrackedRaceChangeListener.add(listener);
} }
private void stopTrackingRaces(final Iterable<RaceDTO> races) { void stopTrackingRaces(final Iterable<RaceDTO> races) {
final List<RegattaAndRaceIdentifier> racesToStopTracking = new ArrayList<RegattaAndRaceIdentifier>(); final List<RegattaAndRaceIdentifier> racesToStopTracking = new ArrayList<RegattaAndRaceIdentifier>();
for (RaceDTO race : races) { for (RaceDTO race : races) {
if (race.isTracked) { if (race.isTracked) {
@@ -277,7 +277,7 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
Map<CompetitorDTO, List<ManeuverDTO>> getManeuvers(RegattaAndRaceIdentifier raceIdentifier, Map<CompetitorDTO, List<ManeuverDTO>> getManeuvers(RegattaAndRaceIdentifier raceIdentifier,
Map<CompetitorDTO, Date> from, Map<CompetitorDTO, Date> to) throws NoWindException; Map<CompetitorDTO, Date> from, Map<CompetitorDTO, Date> to) throws NoWindException;
List<StrippedLeaderboardDTO> getLeaderboardsByRaceAndRegatta(RaceDTO race, RegattaIdentifier regattaIdentifier); List<StrippedLeaderboardDTO> getLeaderboardsByRaceAndRegatta(String raceName, RegattaIdentifier regattaIdentifier);
List<LeaderboardGroupDTO> getLeaderboardGroups(boolean withGeoLocationData); List<LeaderboardGroupDTO> getLeaderboardGroups(boolean withGeoLocationData);
@@ -228,7 +228,7 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan
void getLeaderboards(AsyncCallback<List<StrippedLeaderboardDTO>> callback); void getLeaderboards(AsyncCallback<List<StrippedLeaderboardDTO>> callback);
void getLeaderboardsByRaceAndRegatta(RaceDTO race, RegattaIdentifier regattaIdentifier, void getLeaderboardsByRaceAndRegatta(String raceName, RegattaIdentifier regattaIdentifier,
AsyncCallback<List<StrippedLeaderboardDTO>> callback); AsyncCallback<List<StrippedLeaderboardDTO>> callback);
void updateLeaderboard(String leaderboardName, String newLeaderboardName, String newLeaderboardDisplayName, void updateLeaderboard(String leaderboardName, String newLeaderboardName, String newLeaderboardDisplayName,
@@ -1112,10 +1112,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
return null; return null;
} }
} }
@Override @Override
public void stopTrackingRaces(Iterable<RegattaAndRaceIdentifier> regattaAndRaceIdentifiers) throws Exception { public void stopTrackingRaces(Iterable<RegattaAndRaceIdentifier> regattaAndRaceIdentifiers) throws Exception {
for (RegattaAndRaceIdentifier regattaAndRaceIdentifier : regattaAndRaceIdentifiers) { for (RegattaAndRaceIdentifier regattaAndRaceIdentifier : regattaAndRaceIdentifiers) {
getService().apply(new StopTrackingRace(regattaAndRaceIdentifier)); getService().apply(new StopTrackingRace(regattaAndRaceIdentifier));
} }
} }
@@ -2350,7 +2350,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
List<StrippedLeaderboardDTO> results = new ArrayList<StrippedLeaderboardDTO>(); List<StrippedLeaderboardDTO> results = new ArrayList<StrippedLeaderboardDTO>();
if (regatta != null && regatta.races != null) { if (regatta != null && regatta.races != null) {
for (RaceDTO race : regatta.races) { for (RaceDTO race : regatta.races) {
List<StrippedLeaderboardDTO> leaderboard = getLeaderboardsByRaceAndRegatta(race, regatta.getRegattaIdentifier()); List<StrippedLeaderboardDTO> leaderboard = getLeaderboardsByRaceAndRegatta(race.getName(), regatta.getRegattaIdentifier());
if (leaderboard != null && !leaderboard.isEmpty()) { if (leaderboard != null && !leaderboard.isEmpty()) {
results.addAll(leaderboard); results.addAll(leaderboard);
} }
@@ -2364,7 +2364,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
} }
@Override @Override
public List<StrippedLeaderboardDTO> getLeaderboardsByRaceAndRegatta(RaceDTO race, RegattaIdentifier regattaIdentifier) { public List<StrippedLeaderboardDTO> getLeaderboardsByRaceAndRegatta(String raceName, RegattaIdentifier regattaIdentifier) {
List<StrippedLeaderboardDTO> results = new ArrayList<StrippedLeaderboardDTO>(); List<StrippedLeaderboardDTO> results = new ArrayList<StrippedLeaderboardDTO>();
Map<String, Leaderboard> leaderboards = getService().getLeaderboards(); Map<String, Leaderboard> leaderboards = getService().getLeaderboards();
for (Leaderboard leaderboard : leaderboards.values()) { for (Leaderboard leaderboard : leaderboards.values()) {
@@ -2375,7 +2375,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
TrackedRace trackedRace = raceInLeaderboard.getTrackedRace(fleet); TrackedRace trackedRace = raceInLeaderboard.getTrackedRace(fleet);
if (trackedRace != null) { if (trackedRace != null) {
RaceDefinition trackedRaceDef = trackedRace.getRace(); RaceDefinition trackedRaceDef = trackedRace.getRace();
if (trackedRaceDef.getName().equals(race.getName())) { if (trackedRaceDef.getName().equals(raceName)) {
results.add(createStrippedLeaderboardDTO(leaderboard, false, false)); results.add(createStrippedLeaderboardDTO(leaderboard, false, false));
break; break;
} }
@@ -35,6 +35,7 @@ import com.sap.sailing.android.shared.util.UniqueDeviceUuid;
import com.sap.sailing.domain.common.racelog.tracking.DeviceMappingConstants; import com.sap.sailing.domain.common.racelog.tracking.DeviceMappingConstants;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier; import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
import com.sap.sailing.domain.racelogtracking.impl.SmartphoneUUIDIdentifierImpl; import com.sap.sailing.domain.racelogtracking.impl.SmartphoneUUIDIdentifierImpl;
import com.sap.sailing.server.gateway.serialization.impl.MarkJsonSerializerWithPosition;
public class CheckinManager { public class CheckinManager {
@@ -167,7 +168,7 @@ public class CheckinManager {
mark.setId(jsonMark.getString("id")); mark.setId(jsonMark.getString("id"));
if (jsonMark.has("position")) { if (jsonMark.has("position")) {
if (!jsonMark.get("position").equals(null)) { if (!jsonMark.get("position").equals(null)) {
JSONObject positionJson = jsonMark.getJSONObject("position"); JSONObject positionJson = jsonMark.getJSONObject(MarkJsonSerializerWithPosition.FIELD_POSITION);
MarkPingInfo ping = new MarkPingInfo(); MarkPingInfo ping = new MarkPingInfo();
ping.setLatitude(positionJson.getString("latitude")); ping.setLatitude(positionJson.getString("latitude"));
ping.setLongitude(positionJson.getString("longitude")); ping.setLongitude(positionJson.getString("longitude"));