diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/RaceColumnDTO.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/RaceColumnDTO.java
index 771e95856e8..f0ecf9d7a05 100755
--- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/RaceColumnDTO.java
+++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/dto/RaceColumnDTO.java
@@ -129,6 +129,24 @@ public class RaceColumnDTO extends NamedDTO implements Serializable {
return start;
}
+ public Date getStartOfTracking(FleetDTO fleet){
+ Date start = null;
+ RaceDTO raceDTO = racesPerFleet.get(fleet);
+ if (raceDTO != null && raceDTO.isTracked) {
+ start = raceDTO.trackedRace.startOfTracking;
+ }
+ return start;
+ }
+
+ public Date getEndOfTracking(FleetDTO fleet){
+ Date start = null;
+ RaceDTO raceDTO = racesPerFleet.get(fleet);
+ if (raceDTO != null && raceDTO.isTracked) {
+ start = raceDTO.trackedRace.endOfTracking;
+ }
+ return start;
+ }
+
/**
* @return The {@link PlacemarkOrderDTO places} or null, if no places are available
*/
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementRaceImagesBarCell.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementRaceImagesBarCell.java
index 8e5a28b8b71..a7e28d7ea19 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementRaceImagesBarCell.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementRaceImagesBarCell.java
@@ -1,9 +1,12 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import com.google.gwt.core.client.GWT;
+import com.sap.sailing.domain.common.dto.FleetDTO;
+import com.sap.sailing.domain.common.dto.RaceColumnDTO;
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.controls.ImagesBarCell;
@@ -19,6 +22,8 @@ public class RaceLogTrackingEventManagementRaceImagesBarCell extends ImagesBarCe
public final static String ACTION_SET_STARTTIME = "ACTION_SET_STARTTIME";
public final static String ACTION_SHOW_RACELOG = "ACTION_SHOW_RACELOG";
public final static String ACTION_SET_TRACKING_TIMES = "ACTION_SET_TRACKING_TIMES";
+ public final static String ACTION_STOP_TRACKING = "ACTION_STOP_TRACKING";
+ public final static String ACTION_START_TRACKING = "ACTION_START_TRACKING";
private final StringMessages stringMessages;
@@ -46,6 +51,25 @@ public class RaceLogTrackingEventManagementRaceImagesBarCell extends ImagesBarCe
result.add(new ImageSpec(ACTION_SET_STARTTIME, stringMessages.setStartTime(), makeImagePrototype(resources.clockIcon())));
result.add(new ImageSpec(ACTION_SHOW_RACELOG, stringMessages.raceLog(), makeImagePrototype(resources.flagIcon())));
result.add(new ImageSpec(ACTION_SET_TRACKING_TIMES, stringMessages.setTrackingTimes(), makeImagePrototype(resources.setTrackingTimes())));
+
+ if (startTimeSet(object.getA(), object.getB())){
+ if (!endTimeSet(object.getA(), object.getB())){
+ 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())));
+ }
+
return result;
}
+
+ private boolean startTimeSet(RaceColumnDTO raceColumn, FleetDTO fleet) {
+ Date startTime = raceColumn.getStartOfTracking(fleet);
+ return startTime != null;
+ }
+
+ private boolean endTimeSet(RaceColumnDTO raceColumn, FleetDTO fleet) {
+ Date endTime = raceColumn.getEndOfTracking(fleet);
+ return endTime != null;
+ }
}
\ No newline at end of file
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SmartphoneTrackingEventManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SmartphoneTrackingEventManagementPanel.java
index 192d29f6167..639937bc302 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SmartphoneTrackingEventManagementPanel.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SmartphoneTrackingEventManagementPanel.java
@@ -1,6 +1,7 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import java.util.Set;
@@ -42,6 +43,7 @@ import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Pair;
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.dialog.DataEntryDialog;
import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
@@ -54,6 +56,7 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
private TrackFileImportDeviceIdentifierTableWrapper deviceIdentifierTable;
private CheckBox correctWindDirectionForDeclination;
private CheckBox trackWind;
+ private ImagesBarColumn raceActionColumn;
protected boolean regattaHasCompetitors = false;
@@ -205,7 +208,7 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
}
};
- ImagesBarColumn raceActionColumn =
+ raceActionColumn =
new ImagesBarColumn(
new RaceLogTrackingEventManagementRaceImagesBarCell(stringMessages));
raceActionColumn.setFieldUpdater(new FieldUpdater() {
@@ -302,7 +305,17 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
} else if (LeaderboardRaceConfigImagesBarCell.ACTION_SHOW_RACELOG.equals(value)) {
showRaceLog(raceColumnDTOAndFleetDTO.getA(), raceColumnDTOAndFleetDTO.getB());
} else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_SET_TRACKING_TIMES.equals(value)) {
- setTrackingTimes(getSelectedRaceColumnWithFleet().getA(), getSelectedRaceColumnWithFleet().getB());;
+ showSetTrackingTimesDialog(getSelectedRaceColumnWithFleet().getA(), getSelectedRaceColumnWithFleet().getB());;
+ } else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_START_TRACKING.equals(value)) {
+ Date newStart = MillisecondsTimePoint.now().asDate();
+ RaceLogSetTrackingTimesDTO setTrackingTimesDTO = generateRaceLogSetTrackingTimesDTOWith(newStart, null);
+ setTrackingTimes(setTrackingTimesDTO, raceColumnName);
+ } else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_STOP_TRACKING.equals(value)) {
+ FleetDTO fleet = getSelectedRaceColumnWithFleet().getB();
+ Date currentStart = getSelectedRaceColumnWithFleet().getA().getStartOfTracking(fleet);
+ Date newEnd = MillisecondsTimePoint.now().asDate();
+ RaceLogSetTrackingTimesDTO setTrackingTimesDTO = generateRaceLogSetTrackingTimesDTOWith(currentStart, newEnd);
+ setTrackingTimes(setTrackingTimesDTO, raceColumnName);
}
}
});
@@ -313,6 +326,38 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
racesTable.setWidth("600px");
}
+ private void setTrackingTimes(RaceLogSetTrackingTimesDTO trackingTimesDTO, final String raceColumnName){
+ sailingService.setTrackingTimes(trackingTimesDTO, new AsyncCallback(){
+ @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(Date startTime, Date endTime) {
+ FleetDTO fleet = getSelectedRaceColumnWithFleet().getB();
+ Date currentStart = getSelectedRaceColumnWithFleet().getA().getStartOfTracking(fleet);
+ Date currentEnd = getSelectedRaceColumnWithFleet().getA().getEndOfTracking(fleet);
+ 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 == null ? null : new MillisecondsTimePoint(startTime);
+ dto.newEndOfTracking = endTime == null ? null : new MillisecondsTimePoint(endTime);
+ dto.currentStartOfTracking = new MillisecondsTimePoint(currentStart);
+ dto.currentEndOfTracking = new MillisecondsTimePoint(currentEnd);
+ return dto;
+ }
+
@Override
protected void addLeaderboardControls(Panel controlsPanel) {}
@@ -511,7 +556,7 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
}).show();
}
- private void setTrackingTimes(RaceColumnDTO raceColumn, FleetDTO fleet) {
+ private void showSetTrackingTimesDialog(RaceColumnDTO raceColumn, FleetDTO fleet) {
new SetTrackingTimesDialog(sailingService, errorReporter, getSelectedLeaderboardName(), raceColumn.getName(),
fleet.getName(), stringMessages, new DataEntryDialog.DialogCallback() {