From e222136cf069449f7024015e2ef7f2832c342abf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bro=C3=9F?= Date: Tue, 22 Mar 2016 13:34:11 +0100 Subject: [PATCH] Initial draft of start/stop action column --- .../domain/common/dto/RaceColumnDTO.java | 18 +++++++ ...ckingEventManagementRaceImagesBarCell.java | 24 +++++++++ ...martphoneTrackingEventManagementPanel.java | 51 +++++++++++++++++-- 3 files changed, 90 insertions(+), 3 deletions(-) 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() {