mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-18 02:00:58 +00:00
Merge remote-tracking branch 'server/master'
This commit is contained in:
commit
1a23501402
21 files changed
+619
-171
No files matched your search
+5
-1
@@ -158,6 +158,7 @@ public class RaceStateImpl extends ReadonlyRaceStateImpl implements RaceState {
|
||||
public void forceNewDependentStartTime(TimePoint now, final Duration startTimeDifference, final SimpleRaceLogIdentifier dependentOnRace) {
|
||||
raceLog.add(new RaceLogDependentStartTimeEventImpl(now, author, raceLog.getCurrentPassId(), dependentOnRace, startTimeDifference));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setFinishingTime(TimePoint timePoint) {
|
||||
@@ -166,7 +167,10 @@ public class RaceStateImpl extends ReadonlyRaceStateImpl implements RaceState {
|
||||
|
||||
@Override
|
||||
public void setFinishedTime(TimePoint timePoint) {
|
||||
raceLog.add(new RaceLogRaceStatusEventImpl(timePoint, author, raceLog.getCurrentPassId(), RaceLogRaceStatus.FINISHED));
|
||||
raceLog.add(new RaceLogRaceStatusEventImpl(timePoint, author, raceLog.getCurrentPassId(),
|
||||
RaceLogRaceStatus.FINISHED));
|
||||
// ensure caches are synched
|
||||
forceUpdate();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
<inherits name='com.sap.sailing.gwt.ui.SourceActions'/>
|
||||
<inherits name='com.sap.sailing.gwt.ui.SourceSimulator'/>
|
||||
<inherits name="com.sap.sailing.gwt.ui.SourceAdminConsole"/>
|
||||
<!-- TODO: probably only used for flag images. Move RegattaRaceStatesFlagsResources to shared -->
|
||||
<inherits name="com.sap.sailing.gwt.regattaoverview.SourceRegattaOverview"/>
|
||||
<inherits name="com.sap.sailing.gwt.ui.SourceLeaderboard"/>
|
||||
<inherits name="com.sap.sailing.gwt.ui.SourceRaceboard"/>
|
||||
|
||||
+4
@@ -48,6 +48,10 @@ interface AdminConsoleResources extends ClientBundle {
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/clock.png")
|
||||
ImageResource clockIcon();
|
||||
|
||||
// Smaller variant of RegattaRaceStatesFlagsResources.flagBlue to solve layouting issues
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/blue_small.png")
|
||||
ImageResource blueSmall();
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/flag_blue.png")
|
||||
ImageResource flagIcon();
|
||||
|
||||
+47
-15
@@ -60,9 +60,11 @@ import com.sap.sailing.gwt.ui.client.shared.controls.SelectionCheckboxColumn;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogSetFinishingAndFinishTimeDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogSetStartTimeAndProcedureDTO;
|
||||
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.NaturalComparator;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
|
||||
@@ -473,6 +475,8 @@ TrackedRaceChangedListener, LeaderboardsDisplayer {
|
||||
refreshRaceLog(object.getA(), object.getB(), true);
|
||||
} else if (LeaderboardRaceConfigImagesBarCell.ACTION_SET_STARTTIME.equals(value)) {
|
||||
setStartTime(object.getA(), object.getB());
|
||||
} else if (LeaderboardRaceConfigImagesBarCell.ACTION_SET_FINISHING_AND_FINISH_TIME.equals(value)) {
|
||||
setEndTime(object.getA(), object.getB());
|
||||
} else if (LeaderboardRaceConfigImagesBarCell.ACTION_SHOW_RACELOG.equals(value)) {
|
||||
showRaceLog(object.getA(), object.getB());
|
||||
}
|
||||
@@ -594,28 +598,56 @@ TrackedRaceChangedListener, LeaderboardsDisplayer {
|
||||
}
|
||||
|
||||
private void setStartTime(RaceColumnDTO raceColumnDTO, FleetDTO fleetDTO) {
|
||||
new SetStartTimeDialog(sailingService, errorReporter, getSelectedLeaderboardName(), raceColumnDTO.getName(),
|
||||
new SetStartTimeDialog(sailingService, errorReporter, getSelectedLeaderboardName(), raceColumnDTO.getName(),
|
||||
fleetDTO.getName(), stringMessages, new DialogCallback<RaceLogSetStartTimeAndProcedureDTO>() {
|
||||
@Override
|
||||
public void ok(RaceLogSetStartTimeAndProcedureDTO editedObject) {
|
||||
sailingService.setStartTimeAndProcedure(editedObject, new AsyncCallback<Boolean>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError(caught.getMessage());
|
||||
public void ok(RaceLogSetStartTimeAndProcedureDTO editedObject) {
|
||||
sailingService.setStartTimeAndProcedure(editedObject, new AsyncCallback<Boolean>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError(caught.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Boolean result) {
|
||||
if (!result) {
|
||||
Window.alert(stringMessages.failedToSetNewStartTime());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Boolean result) {
|
||||
if (!result) {
|
||||
Window.alert(stringMessages.failedToSetNewStartTime());
|
||||
}
|
||||
public void cancel() {
|
||||
}
|
||||
});
|
||||
}
|
||||
}).show();
|
||||
}
|
||||
|
||||
private void setEndTime(RaceColumnDTO raceColumnDTO, FleetDTO fleetDTO) {
|
||||
new SetFinishingAndFinishedTimeDialog(sailingService, errorReporter, getSelectedLeaderboardName(), raceColumnDTO.getName(),
|
||||
fleetDTO.getName(), stringMessages, new DialogCallback<RaceLogSetFinishingAndFinishTimeDTO>() {
|
||||
@Override
|
||||
public void ok(RaceLogSetFinishingAndFinishTimeDTO editedObject) {
|
||||
sailingService.setFinishingAndEndTime(editedObject, new AsyncCallback<Pair<Boolean, Boolean>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError(caught.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel() { }
|
||||
}).show();
|
||||
@Override
|
||||
public void onSuccess(Pair<Boolean, Boolean> result) {
|
||||
if (!result.getA() || !result.getB()) {
|
||||
Window.alert(stringMessages.failedToSetNewFinishingAndFinishTime());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel() {
|
||||
}
|
||||
}).show();
|
||||
}
|
||||
|
||||
private void removeRaceColumn(final RaceColumnDTO raceColumnDTO) {
|
||||
|
||||
+2
@@ -15,6 +15,7 @@ public class LeaderboardRaceConfigImagesBarCell extends ImagesBarCell {
|
||||
public final static String ACTION_EDIT = "ACTION_EDIT";
|
||||
public final static String ACTION_REFRESH_RACELOG = "ACTION_REFRESH_RACE_LOG";
|
||||
public final static String ACTION_SET_STARTTIME = "ACTION_SET_STARTTIME";
|
||||
public final static String ACTION_SET_FINISHING_AND_FINISH_TIME = "ACTION_SET_FINISHING_AND_FINISH_TIME";
|
||||
public final static String ACTION_SHOW_RACELOG = "ACTION_SHOW_RACELOG";
|
||||
|
||||
private final StringMessages stringMessages;
|
||||
@@ -39,6 +40,7 @@ public class LeaderboardRaceConfigImagesBarCell extends ImagesBarCell {
|
||||
}
|
||||
result.add(new ImageSpec(ACTION_REFRESH_RACELOG, stringMessages.refreshRaceLog(), makeImagePrototype(resources.reloadIcon())));
|
||||
result.add(new ImageSpec(ACTION_SET_STARTTIME, stringMessages.setStartTime(), makeImagePrototype(resources.clockIcon())));
|
||||
result.add(new ImageSpec(ACTION_SET_FINISHING_AND_FINISH_TIME, stringMessages.setFinishingAndFinishTime(), makeImagePrototype(resources.blueSmall())));
|
||||
result.add(new ImageSpec(ACTION_SHOW_RACELOG, stringMessages.raceLog(), makeImagePrototype(resources.flagIcon())));
|
||||
return result;
|
||||
}
|
||||
|
||||
+2
@@ -19,6 +19,7 @@ public class RaceLogTrackingEventManagementRaceImagesBarCell extends ImagesBarCe
|
||||
public final static String ACTION_EDIT = "ACTION_EDIT";
|
||||
public final static String ACTION_REFRESH_RACELOG = "ACTION_REFRESH_RACE_LOG";
|
||||
public final static String ACTION_SET_STARTTIME = "ACTION_SET_STARTTIME";
|
||||
public final static String ACTION_SET_FINISHING_AND_FINISH_TIME = "ACTION_SET_FINISHING_AND_FINISH_TIME";
|
||||
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";
|
||||
@@ -50,6 +51,7 @@ public class RaceLogTrackingEventManagementRaceImagesBarCell extends ImagesBarCe
|
||||
result.add(new ImageSpec(ACTION_EDIT, stringMessages.actionEdit(), makeImagePrototype(resources.editIcon())));
|
||||
result.add(new ImageSpec(ACTION_REFRESH_RACELOG, stringMessages.refreshRaceLog(), makeImagePrototype(resources.reloadIcon())));
|
||||
result.add(new ImageSpec(ACTION_SET_STARTTIME, stringMessages.setStartTime(), makeImagePrototype(resources.clockIcon())));
|
||||
result.add(new ImageSpec(ACTION_SET_FINISHING_AND_FINISH_TIME, stringMessages.setFinishingAndFinishTime(), makeImagePrototype(resources.blueSmall())));
|
||||
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())));
|
||||
|
||||
|
||||
+124
@@ -0,0 +1,124 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.google.gwt.i18n.client.DateTimeFormat;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.BetterDateTimeBox;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogSetFinishingAndFinishTimeDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public class SetFinishingAndFinishedTimeDialog extends SetTimeDialog<RaceLogSetFinishingAndFinishTimeDTO> {
|
||||
private BetterDateTimeBox finishTimeBox;
|
||||
private Label currentFinishTimeLabel;
|
||||
|
||||
public SetFinishingAndFinishedTimeDialog(SailingServiceAsync service, ErrorReporter errorReporter, String leaderboardName,
|
||||
String raceColumnName, String fleetName, StringMessages stringMessages,
|
||||
DataEntryDialog.DialogCallback<RaceLogSetFinishingAndFinishTimeDTO> callback) {
|
||||
super(service, errorReporter, stringMessages.setFinishingAndFinishTime(), stringMessages.setFinishingAndFinishTimeDescription(),
|
||||
stringMessages.setFinishingAndFinishTime(), stringMessages.cancel(), leaderboardName, raceColumnName, fleetName,
|
||||
stringMessages, new EndTimeValidator(stringMessages), callback);
|
||||
this.ensureDebugId("SetFinishingAndFinishedTimeDialog");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RaceLogSetFinishingAndFinishTimeDTO getResult() {
|
||||
RaceLogSetFinishingAndFinishTimeDTO dto = new RaceLogSetFinishingAndFinishTimeDTO();
|
||||
dto.leaderboardName = leaderboardName;
|
||||
dto.raceColumnName = raceColumnName;
|
||||
dto.fleetName = fleetName;
|
||||
dto.authorName = authorNameBox.getValue();
|
||||
dto.authorPriority = authorPriorityBox.getValue();
|
||||
dto.finishTime = finishTimeBox.getValue();
|
||||
dto.finishingTime = timeBox.getValue();
|
||||
dto.passId = currentPassId;
|
||||
return dto;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void refreshCurrentTime() {
|
||||
service.getFinishingAndFinishTime(leaderboardName, raceColumnName, fleetName,
|
||||
new AsyncCallback<com.sap.sse.common.Util.Triple<Date, Date, Integer>>() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(com.sap.sse.common.Util.Triple<Date, Date, Integer> result) {
|
||||
if (result == null) {
|
||||
currentFinishTimeLabel.setText(stringMessages.notAvailable());
|
||||
currentPassIdBox.setText(stringMessages.notAvailable());
|
||||
} else {
|
||||
setDate(result.getA(), currentStartOrFinishingTimeLabel, timeBox);
|
||||
setDate(result.getB(), currentFinishTimeLabel, finishTimeBox);
|
||||
currentPassId = result.getC().intValue();
|
||||
currentPassIdBox.setText(result.getC().toString());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError(caught.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void setDate(Date date, Label currentValueLabel, BetterDateTimeBox dateTimeBox) {
|
||||
if (date == null) {
|
||||
currentValueLabel.setText(stringMessages.unknown());
|
||||
} else {
|
||||
dateTimeBox.setValue(date);
|
||||
currentValueLabel.setText(DateTimeFormat
|
||||
.getFormat(DateTimeFormat.PredefinedFormat.DATE_TIME_MEDIUM).format(date));
|
||||
}
|
||||
}
|
||||
|
||||
private static class EndTimeValidator implements Validator<RaceLogSetFinishingAndFinishTimeDTO> {
|
||||
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
public EndTimeValidator(StringMessages stringMessages) {
|
||||
this.stringMessages = stringMessages;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getErrorMessage(RaceLogSetFinishingAndFinishTimeDTO dto) {
|
||||
if (dto.authorName == null || dto.authorName.isEmpty() || dto.authorPriority == null
|
||||
|| dto.finishTime == null || dto.finishingTime == null) {
|
||||
return stringMessages.pleaseEnterAValue();
|
||||
}
|
||||
// both times are != null at this point
|
||||
if (dto.finishTime.before(dto.finishingTime)) {
|
||||
return stringMessages.finishTimeMustBeAtOrAfterFinishingTime();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTimeLabel() {
|
||||
return stringMessages.finishingTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void additionalCurrentTimeLabel(Grid content) {
|
||||
currentFinishTimeLabel = new Label("");
|
||||
content.setWidget(1, 0, createLabel(stringMessages.finishTimeString()));
|
||||
content.setWidget(1, 1, currentFinishTimeLabel);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addAdditionalInput(Grid content) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void additionalInput(Grid content) {
|
||||
finishTimeBox = createDateTimeBox(new Date());
|
||||
finishTimeBox.setFormat("dd/mm/yyyy hh:ii:ss");
|
||||
finishTimeBox.ensureDebugId("FinishTimeBox");
|
||||
content.setWidget(1, 0, createLabel(stringMessages.finishTimeString()));
|
||||
content.setWidget(1, 1, finishTimeBox);
|
||||
}
|
||||
}
|
||||
Executable → Regular
+77
-153
@@ -2,136 +2,30 @@ package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.i18n.client.DateTimeFormat;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.CaptionPanel;
|
||||
import com.google.gwt.user.client.ui.CheckBox;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Image;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.ListBox;
|
||||
import com.google.gwt.user.client.ui.PushButton;
|
||||
import com.google.gwt.user.client.ui.TextBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.gwt.ui.client.DataEntryDialogWithBootstrap;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.BetterDateTimeBox;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogSetStartTimeAndProcedureDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public class SetStartTimeDialog extends DataEntryDialogWithBootstrap<RaceLogSetStartTimeAndProcedureDTO> {
|
||||
public class SetStartTimeDialog extends SetTimeDialog<RaceLogSetStartTimeAndProcedureDTO> {
|
||||
protected ListBox racingProcedureSelection;
|
||||
protected CheckBox advancePassIdCheckbox;
|
||||
|
||||
private static AdminConsoleResources resources = GWT.create(AdminConsoleResources.class);
|
||||
|
||||
private final SailingServiceAsync service;
|
||||
private final ErrorReporter errorReporter;
|
||||
private final String leaderboardName;
|
||||
private final String raceColumnName;
|
||||
private final String fleetName;
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
private int currentPassId = -1;
|
||||
private Label currentStartTimeLabel;
|
||||
private Label currentPassIdBox;
|
||||
private BetterDateTimeBox timeBox;
|
||||
private TextBox authorNameBox;
|
||||
private com.sap.sse.gwt.client.controls.IntegerBox authorPriorityBox;
|
||||
private ListBox racingProcedureSelection;
|
||||
private CheckBox advancePassIdCheckbox;
|
||||
|
||||
public SetStartTimeDialog(SailingServiceAsync service, ErrorReporter errorReporter, String leaderboardName,
|
||||
String raceColumnName, String fleetName, StringMessages stringMessages,
|
||||
public SetStartTimeDialog(SailingServiceAsync service, ErrorReporter errorReporter, String leaderboardName,
|
||||
String raceColumnName, String fleetName, StringMessages stringMessages,
|
||||
DataEntryDialog.DialogCallback<RaceLogSetStartTimeAndProcedureDTO> callback) {
|
||||
super(stringMessages.setStartTime(), stringMessages.setStartTimeDescription(), stringMessages.setStartTime(),
|
||||
stringMessages.cancel(), new StartTimeValidator(stringMessages), callback);
|
||||
this.service = service;
|
||||
this.errorReporter = errorReporter;
|
||||
this.stringMessages = stringMessages;
|
||||
this.leaderboardName = leaderboardName;
|
||||
this.raceColumnName = raceColumnName;
|
||||
this.fleetName = fleetName;
|
||||
super(service, errorReporter, stringMessages.setStartTime(), stringMessages.setStartTimeDescription(),
|
||||
stringMessages.setStartTime(), stringMessages.cancel(), leaderboardName, raceColumnName, fleetName,
|
||||
stringMessages, new StartTimeValidator(stringMessages), callback);
|
||||
this.ensureDebugId("SetStartTimeDialog");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
VerticalPanel content = new VerticalPanel();
|
||||
content.add(createCurrentPanel());
|
||||
content.add(createInputPanel());
|
||||
refreshCurrentStartTime();
|
||||
return content;
|
||||
}
|
||||
|
||||
private Widget createCurrentPanel() {
|
||||
CaptionPanel current = new CaptionPanel(stringMessages.liveData());
|
||||
HorizontalPanel currentPanel = new HorizontalPanel();
|
||||
currentPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
|
||||
Grid grid = new Grid(2,2);
|
||||
currentStartTimeLabel = new Label("");
|
||||
grid.setWidget(0, 0, createLabel(stringMessages.startTime()));
|
||||
grid.setWidget(0, 1, currentStartTimeLabel);
|
||||
|
||||
currentPassIdBox = new Label("");
|
||||
grid.setWidget(1, 0, createLabel(stringMessages.currentPass()));
|
||||
grid.setWidget(1, 1, currentPassIdBox);
|
||||
currentPanel.add(grid);
|
||||
|
||||
PushButton refreshButton = new PushButton(new Image(resources.reloadIcon()));
|
||||
refreshButton.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
refreshCurrentStartTime();
|
||||
}
|
||||
});
|
||||
currentPanel.add(refreshButton);
|
||||
|
||||
current.add(currentPanel);
|
||||
return current;
|
||||
}
|
||||
|
||||
private Widget createInputPanel() {
|
||||
Grid content = new Grid(5, 2);
|
||||
timeBox = createDateTimeBox(new Date());
|
||||
timeBox.setFormat("dd/mm/yyyy hh:ii:ss");
|
||||
timeBox.ensureDebugId("StartTimeTimeBox");
|
||||
content.setWidget(0, 0, createLabel(stringMessages.startTime()));
|
||||
content.setWidget(0, 1, timeBox);
|
||||
|
||||
|
||||
authorNameBox = createTextBox("Shore");
|
||||
authorNameBox.ensureDebugId("AuthorNameTextBox");
|
||||
content.setWidget(1, 0, createLabel(stringMessages.authorName()));
|
||||
content.setWidget(1, 1, authorNameBox);
|
||||
authorPriorityBox = createIntegerBox(4, 2);
|
||||
authorPriorityBox.ensureDebugId("AuthorPriorityIntegerBox");
|
||||
content.setWidget(2, 0, createLabel(stringMessages.authorPriority()));
|
||||
content.setWidget(2, 1, authorPriorityBox);
|
||||
|
||||
racingProcedureSelection = createListBox(false);
|
||||
ListBoxUtils.setupRacingProcedureTypeListBox(racingProcedureSelection, RacingProcedureType.RRS26, stringMessages.no());
|
||||
int racingCounter = 0;
|
||||
for (RacingProcedureType racingType : RacingProcedureType.values()) {
|
||||
racingProcedureSelection.setValue(racingCounter++, racingType.name());
|
||||
}
|
||||
racingProcedureSelection.ensureDebugId("RacingProcedureListBox");
|
||||
content.setWidget(3, 0, createLabel(stringMessages.racingProcedure()));
|
||||
content.setWidget(3, 1, racingProcedureSelection);
|
||||
|
||||
advancePassIdCheckbox = createCheckbox(stringMessages.advancePassId());
|
||||
advancePassIdCheckbox.setValue(false);
|
||||
advancePassIdCheckbox.ensureDebugId("AnvancePassIdCheckBox");
|
||||
content.setWidget(4, 1, advancePassIdCheckbox);
|
||||
return content;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RaceLogSetStartTimeAndProcedureDTO getResult() {
|
||||
@@ -143,64 +37,94 @@ public class SetStartTimeDialog extends DataEntryDialogWithBootstrap<RaceLogSetS
|
||||
dto.authorPriority = authorPriorityBox.getValue();
|
||||
dto.logicalTimePoint = new Date();
|
||||
dto.startTime = timeBox.getValue();
|
||||
dto.passId = advancePassIdCheckbox.getValue() ? currentPassId+1 : currentPassId;
|
||||
dto.passId = advancePassIdCheckbox.getValue() ? currentPassId + 1 : currentPassId;
|
||||
dto.racingProcedure = RacingProcedureType.values()[racingProcedureSelection.getSelectedIndex()];
|
||||
return dto;
|
||||
}
|
||||
|
||||
private void refreshCurrentStartTime() {
|
||||
service.getStartTimeAndProcedure(leaderboardName, raceColumnName, fleetName, new AsyncCallback<com.sap.sse.common.Util.Triple<Date,Integer, RacingProcedureType>>() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(com.sap.sse.common.Util.Triple<Date, Integer, RacingProcedureType> result) {
|
||||
if (result == null) {
|
||||
currentStartTimeLabel.setText(stringMessages.notAvailable());
|
||||
currentPassIdBox.setText(stringMessages.notAvailable());
|
||||
} else {
|
||||
Date startTime = result.getA();
|
||||
if (startTime == null) {
|
||||
currentStartTimeLabel.setText(stringMessages.unknown());
|
||||
} else {
|
||||
currentStartTimeLabel.setText(DateTimeFormat.getFormat(
|
||||
DateTimeFormat.PredefinedFormat.DATE_TIME_MEDIUM).format(startTime));
|
||||
}
|
||||
currentPassId = result.getB().intValue();
|
||||
currentPassIdBox.setText(result.getB().toString());
|
||||
int racingProcedureIndex = 0;
|
||||
for (RacingProcedureType racingProcedureSelect : RacingProcedureType.values()) {
|
||||
if (racingProcedureSelect.equals(result.getC())) {
|
||||
break;
|
||||
@Override
|
||||
protected void refreshCurrentTime() {
|
||||
service.getStartTimeAndProcedure(leaderboardName, raceColumnName, fleetName,
|
||||
new AsyncCallback<com.sap.sse.common.Util.Triple<Date, Integer, RacingProcedureType>>() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(com.sap.sse.common.Util.Triple<Date, Integer, RacingProcedureType> result) {
|
||||
if (result == null) {
|
||||
currentStartOrFinishingTimeLabel.setText(stringMessages.notAvailable());
|
||||
currentPassIdBox.setText(stringMessages.notAvailable());
|
||||
} else {
|
||||
Date startTime = result.getA();
|
||||
if (startTime == null) {
|
||||
currentStartOrFinishingTimeLabel.setText(stringMessages.unknown());
|
||||
} else {
|
||||
currentStartOrFinishingTimeLabel.setText(DateTimeFormat
|
||||
.getFormat(DateTimeFormat.PredefinedFormat.DATE_TIME_MEDIUM).format(startTime));
|
||||
}
|
||||
currentPassId = result.getB().intValue();
|
||||
currentPassIdBox.setText(result.getB().toString());
|
||||
int racingProcedureIndex = 0;
|
||||
for (RacingProcedureType racingProcedureSelect : RacingProcedureType.values()) {
|
||||
if (racingProcedureSelect.equals(result.getC())) {
|
||||
break;
|
||||
}
|
||||
racingProcedureIndex++;
|
||||
}
|
||||
racingProcedureSelection.setSelectedIndex(racingProcedureIndex);
|
||||
}
|
||||
racingProcedureIndex++;
|
||||
}
|
||||
racingProcedureSelection.setSelectedIndex(racingProcedureIndex);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError(caught.getMessage());
|
||||
}
|
||||
});
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError(caught.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private static class StartTimeValidator implements Validator<RaceLogSetStartTimeAndProcedureDTO> {
|
||||
|
||||
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
|
||||
public StartTimeValidator(StringMessages stringMessages) {
|
||||
this.stringMessages = stringMessages;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getErrorMessage(RaceLogSetStartTimeAndProcedureDTO dto) {
|
||||
if (dto.authorName == null || dto.authorName.isEmpty() ||
|
||||
dto.authorPriority == null || dto.startTime == null) {
|
||||
if (dto.authorName == null || dto.authorName.isEmpty() || dto.authorPriority == null
|
||||
|| dto.startTime == null) {
|
||||
return stringMessages.pleaseEnterAValue();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTimeLabel() {
|
||||
return stringMessages.startTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addAdditionalInput(Grid content) {
|
||||
racingProcedureSelection = createListBox(false);
|
||||
ListBoxUtils.setupRacingProcedureTypeListBox(racingProcedureSelection, RacingProcedureType.RRS26,
|
||||
stringMessages.no());
|
||||
int racingCounter = 0;
|
||||
for (RacingProcedureType racingType : RacingProcedureType.values()) {
|
||||
racingProcedureSelection.setValue(racingCounter++, racingType.name());
|
||||
}
|
||||
racingProcedureSelection.ensureDebugId("RacingProcedureListBox");
|
||||
content.setWidget(4, 0, createLabel(stringMessages.racingProcedure()));
|
||||
content.setWidget(4, 1, racingProcedureSelection);
|
||||
|
||||
advancePassIdCheckbox = createCheckbox(stringMessages.advancePassId());
|
||||
advancePassIdCheckbox.setValue(false);
|
||||
advancePassIdCheckbox.ensureDebugId("AnvancePassIdCheckBox");
|
||||
content.setWidget(5, 0, advancePassIdCheckbox);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void additionalInput(Grid content) {
|
||||
}
|
||||
|
||||
}
|
||||
Executable
+135
@@ -0,0 +1,135 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.user.client.ui.CaptionPanel;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Image;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.PushButton;
|
||||
import com.google.gwt.user.client.ui.TextBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.gwt.ui.client.DataEntryDialogWithBootstrap;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.BetterDateTimeBox;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public abstract class SetTimeDialog<T> extends DataEntryDialogWithBootstrap<T> {
|
||||
|
||||
private static AdminConsoleResources resources = GWT.create(AdminConsoleResources.class);
|
||||
|
||||
protected final SailingServiceAsync service;
|
||||
protected final ErrorReporter errorReporter;
|
||||
protected final String leaderboardName;
|
||||
protected final String raceColumnName;
|
||||
protected final String fleetName;
|
||||
protected final StringMessages stringMessages;
|
||||
|
||||
protected int currentPassId = -1;
|
||||
protected Label currentStartOrFinishingTimeLabel;
|
||||
protected Label currentPassIdBox;
|
||||
protected BetterDateTimeBox timeBox;
|
||||
protected TextBox authorNameBox;
|
||||
protected com.sap.sse.gwt.client.controls.IntegerBox authorPriorityBox;
|
||||
|
||||
public SetTimeDialog(SailingServiceAsync service, ErrorReporter errorReporter, String title, String message,
|
||||
String okButtonName, String cancelButtonName, String leaderboardName, String raceColumnName,
|
||||
String fleetName, StringMessages stringMessages,
|
||||
com.sap.sse.gwt.client.dialog.DataEntryDialog.Validator<T> validator,
|
||||
DataEntryDialog.DialogCallback<T> callback) {
|
||||
super(title, message, okButtonName, cancelButtonName, validator, callback);
|
||||
this.service = service;
|
||||
this.errorReporter = errorReporter;
|
||||
this.stringMessages = stringMessages;
|
||||
this.leaderboardName = leaderboardName;
|
||||
this.raceColumnName = raceColumnName;
|
||||
this.fleetName = fleetName;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
VerticalPanel content = new VerticalPanel();
|
||||
content.add(createCurrentPanel());
|
||||
content.add(createInputPanel());
|
||||
refreshCurrentTime();
|
||||
return content;
|
||||
}
|
||||
|
||||
private Widget createCurrentPanel() {
|
||||
CaptionPanel current = new CaptionPanel(stringMessages.liveData());
|
||||
HorizontalPanel currentPanel = new HorizontalPanel();
|
||||
currentPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
|
||||
Grid grid = new Grid(3, 2);
|
||||
currentStartOrFinishingTimeLabel = new Label("");
|
||||
grid.setWidget(0, 0, createLabel(getTimeLabel()));
|
||||
grid.setWidget(0, 1, currentStartOrFinishingTimeLabel);
|
||||
|
||||
grid.setText(1, 0, "");
|
||||
grid.setText(1, 1, "");
|
||||
|
||||
additionalCurrentTimeLabel(grid);
|
||||
|
||||
currentPassIdBox = new Label("");
|
||||
grid.setWidget(2, 0, createLabel(stringMessages.currentPass()));
|
||||
grid.setWidget(2, 1, currentPassIdBox);
|
||||
currentPanel.add(grid);
|
||||
|
||||
PushButton refreshButton = new PushButton(new Image(resources.reloadIcon()));
|
||||
refreshButton.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
refreshCurrentTime();
|
||||
}
|
||||
});
|
||||
currentPanel.add(refreshButton);
|
||||
|
||||
current.add(currentPanel);
|
||||
return current;
|
||||
}
|
||||
|
||||
protected abstract String getTimeLabel();
|
||||
|
||||
private Widget createInputPanel() {
|
||||
Grid content = new Grid(7, 2);
|
||||
timeBox = createDateTimeBox(new Date());
|
||||
timeBox.setFormat("dd/mm/yyyy hh:ii:ss");
|
||||
timeBox.ensureDebugId("StartTimeTimeBox");
|
||||
content.setWidget(0, 0, createLabel(getTimeLabel()));
|
||||
content.setWidget(0, 1, timeBox);
|
||||
|
||||
content.setText(1, 0, "");
|
||||
content.setText(1, 1, "");
|
||||
|
||||
additionalInput(content);
|
||||
|
||||
authorNameBox = createTextBox("Shore");
|
||||
authorNameBox.ensureDebugId("AuthorNameTextBox");
|
||||
content.setWidget(2, 0, createLabel(stringMessages.authorName()));
|
||||
content.setWidget(2, 1, authorNameBox);
|
||||
content.setWidget(3, 0, createLabel(stringMessages.authorPriority()));
|
||||
authorPriorityBox = createIntegerBox(4, 2);
|
||||
authorPriorityBox.ensureDebugId("AuthorPriorityIntegerBox");
|
||||
content.setWidget(3, 1, authorPriorityBox);
|
||||
|
||||
addAdditionalInput(content);
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
protected void additionalCurrentTimeLabel(Grid content) {
|
||||
}
|
||||
|
||||
protected abstract void additionalInput(Grid content);
|
||||
|
||||
protected abstract void addAdditionalInput(Grid content);
|
||||
|
||||
protected abstract void refreshCurrentTime();
|
||||
}
|
||||
+31
@@ -55,6 +55,7 @@ import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings;
|
||||
import com.sap.sailing.gwt.ui.shared.ControlPointDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.DeviceConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogSetFinishingAndFinishTimeDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogSetStartTimeAndProcedureDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
|
||||
@@ -380,6 +381,8 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
|
||||
refreshRaceLog(raceColumnDTOAndFleetDTO.getA(), raceColumnDTOAndFleetDTO.getB(), true);
|
||||
} else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_SET_STARTTIME.equals(value)) {
|
||||
setStartTime(getSelectedRaceColumnWithFleet().getA(), getSelectedRaceColumnWithFleet().getB());
|
||||
} else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_SET_FINISHING_AND_FINISH_TIME.equals(value)) {
|
||||
setEndTime(getSelectedRaceColumnWithFleet().getA(), getSelectedRaceColumnWithFleet().getB());
|
||||
} else if (LeaderboardRaceConfigImagesBarCell.ACTION_SHOW_RACELOG.equals(value)) {
|
||||
showRaceLog(raceColumnDTOAndFleetDTO.getA(), raceColumnDTOAndFleetDTO.getB());
|
||||
} else if (RaceLogTrackingEventManagementRaceImagesBarCell.ACTION_SET_TRACKING_TIMES.equals(value)) {
|
||||
@@ -756,6 +759,34 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
|
||||
}).show();
|
||||
}
|
||||
|
||||
private void setEndTime(RaceColumnDTO raceColumnDTO, FleetDTO fleetDTO) {
|
||||
new SetFinishingAndFinishedTimeDialog(sailingService, errorReporter, getSelectedLeaderboardName(), raceColumnDTO.getName(),
|
||||
fleetDTO.getName(), stringMessages, new DialogCallback<RaceLogSetFinishingAndFinishTimeDTO>() {
|
||||
@Override
|
||||
public void ok(RaceLogSetFinishingAndFinishTimeDTO editedObject) {
|
||||
sailingService.setFinishingAndEndTime(editedObject, new AsyncCallback<Pair<Boolean, Boolean>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError(caught.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Pair<Boolean, Boolean> result) {
|
||||
if (!result.getA() || !result.getB()) {
|
||||
Window.alert(stringMessages.failedToSetNewFinishingAndFinishTime());
|
||||
} else {
|
||||
trackedRacesListComposite.regattaRefresher.fillRegattas();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel() {
|
||||
}
|
||||
}).show();
|
||||
}
|
||||
|
||||
private void refreshTrackingActionButtons(){
|
||||
leaderboardSelectionChanged();
|
||||
}
|
||||
|
||||
+5
@@ -74,6 +74,7 @@ import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceCourseDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceGroupDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogSetFinishingAndFinishTimeDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogSetStartTimeAndProcedureDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceboardDataDTO;
|
||||
@@ -452,7 +453,11 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
|
||||
|
||||
boolean setStartTimeAndProcedure(RaceLogSetStartTimeAndProcedureDTO dto);
|
||||
|
||||
Pair<Boolean, Boolean> setFinishingAndEndTime(RaceLogSetFinishingAndFinishTimeDTO dto);
|
||||
|
||||
Util.Triple<Date, Integer, RacingProcedureType> getStartTimeAndProcedure(String leaderboardName, String raceColumnName, String fleetName);
|
||||
|
||||
Util.Triple<Date, Date, Integer> getFinishingAndFinishTime(String leaderboardName, String raceColumnName, String fleetName);
|
||||
|
||||
Iterable<String> getAllIgtimiAccountEmailAddresses();
|
||||
|
||||
|
||||
+17
@@ -63,6 +63,7 @@ import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceCourseDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceGroupDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogSetFinishingAndFinishTimeDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogSetStartTimeAndProcedureDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceboardDataDTO;
|
||||
@@ -619,6 +620,15 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan
|
||||
*/
|
||||
void setStartTimeAndProcedure(RaceLogSetStartTimeAndProcedureDTO dto, AsyncCallback<Boolean> callback);
|
||||
|
||||
/**
|
||||
* Sets the a new finishing and end time.
|
||||
*
|
||||
* @param dto
|
||||
* {@link RaceLogSetFinishingAndFinishTimeDTO} identifying the race and the new finishing and
|
||||
* end time.
|
||||
*/
|
||||
void setFinishingAndEndTime(RaceLogSetFinishingAndFinishTimeDTO editedObject, AsyncCallback<Pair<Boolean, Boolean>> asyncCallback);
|
||||
|
||||
/**
|
||||
* Gets the race's current start time, current pass identifier and racing procedure. If no start time is set, the
|
||||
* pass identifier will still be returned, but the start time field will be <code>null</code>.
|
||||
@@ -626,6 +636,13 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan
|
||||
void getStartTimeAndProcedure(String leaderboardName, String raceColumnName, String fleetName,
|
||||
AsyncCallback<Util.Triple<Date, Integer, RacingProcedureType>> callback);
|
||||
|
||||
/**
|
||||
* Gets the race's current finishing and finish times as well as the current pass identifier. If no finishing or finish time is set, the
|
||||
* pass identifier will still be returned, but the finishing/finish time field will be <code>null</code>.
|
||||
*/
|
||||
void getFinishingAndFinishTime(String leaderboardName, String raceColumnName, String fleetName,
|
||||
AsyncCallback<Util.Triple<Date, Date, Integer>> asyncCallback);
|
||||
|
||||
void getAllIgtimiAccountEmailAddresses(AsyncCallback<Iterable<String>> callback);
|
||||
|
||||
void getIgtimiAuthorizationUrl(String redirectProtocol, String redirectHostname, String redirectPort, AsyncCallback<String> callback);
|
||||
|
||||
+6
@@ -1022,8 +1022,12 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
|
||||
String overwriteRacingProceduresConfigurationHelpText();
|
||||
|
||||
String setStartTime();
|
||||
String finishTimeString();
|
||||
String setFinishingAndFinishTime();
|
||||
String finishTimeMustBeAtOrAfterFinishingTime();
|
||||
String currentPass();
|
||||
String setStartTimeDescription();
|
||||
String setFinishingAndFinishTimeDescription();
|
||||
String setTrackingTimesDescription();
|
||||
String hasAdditionalGolfDownTime();
|
||||
String additionalGolfDownTimeHelpText();
|
||||
@@ -1049,6 +1053,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
|
||||
String doYouReallyWantToRemoveLeaderboard(String name);
|
||||
String metaLeaderboardCannotBeChanged();
|
||||
String failedToSetNewStartTime();
|
||||
String failedToSetNewFinishingAndFinishTime();
|
||||
String doYouReallyWantToRemoveIgtimiAccount(String accountEmail);
|
||||
String igtimiWindImport();
|
||||
String seeIgtimiTabForAccountSettings();
|
||||
@@ -1933,6 +1938,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
|
||||
String currentStbdRudderRakeTooltip();
|
||||
String currentMastRotationInDegree();
|
||||
String currentMastRotationInDegreeTooltip();
|
||||
String finishingTime();
|
||||
String boatNameMustNotBeEmpty();
|
||||
String errorUpdatingExpeditionDeviceConfiguration(String name, String message);
|
||||
String doYouReallyWantToRemoveExpeditionDeviceConfiguration(String name);
|
||||
|
||||
+6
@@ -995,6 +995,7 @@ overwriteRacingProceduresConfiguration=Activate regatta configuration
|
||||
overwriteRacingProceduresConfigurationHelpText=Enabling this option will provide a base regatta configuration for all options unconfigured in the regatta-specific configuration.
|
||||
setStartTime=Set start time
|
||||
currentPass=Current pass
|
||||
setFinishingAndFinishTimeDescription=Select new finishing and finish times for the race.
|
||||
setStartTimeDescription=Select a new start time for the race. If you want to set the start time to a timepoint in the past then you have to enable the checkbox to update the pass count. Please be aware of the fact that changing the pass count will have you lose all information from the previous pass (like flag events).
|
||||
setTrackingTimesDescription=Set the start and end of tracking for the race.
|
||||
hasAdditionalGolfDownTime=Activate additional golf down time
|
||||
@@ -1023,6 +1024,7 @@ searchTag=Search tag
|
||||
doYouReallyWantToRemoveLeaderboard=Do you really want to remove the leaderboard: ''{0}''?
|
||||
metaLeaderboardCannotBeChanged=This is a meta leaderboard. It can''t be changed here.
|
||||
failedToSetNewStartTime=Failed to set new start time. This can happen when the same start time is already present in the race log or someone has added a start time that is newer (in terms of a pass id and logical time) than the one that you just added.
|
||||
failedToSetNewFinishingAndFinishTime=Failed to set new finishing and finished time.
|
||||
doYouReallyWantToRemoveIgtimiAccount=Do you really want to remove Igtimi account granting access to data of user {0}?
|
||||
igtimiWindImport=Import Wind from Igtimi
|
||||
seeIgtimiTabForAccountSettings=See the ''Igtimi'' tab for account settings determining which data from Igtimi will be considered.
|
||||
@@ -1918,6 +1920,10 @@ currentStbdRudderRake=Stbd rudder rake
|
||||
currentStbdRudderRakeTooltip=The current starboard rudder rake
|
||||
currentMastRotationInDegree=Mast rotation
|
||||
currentMastRotationInDegreeTooltip=The current mast rotation in degrees
|
||||
finishingTime=Finishing time
|
||||
finishTimeString=Finish time
|
||||
setFinishingAndFinishTime=Set finishing and finish time
|
||||
finishTimeMustBeAtOrAfterFinishingTime=Finish time must be at or after finishing time
|
||||
boatNameMustNotBeEmpty=Please provide a non-empty boat name
|
||||
errorUpdatingExpeditionDeviceConfiguration=Error updating Expedition device configuration "{0}": {1}
|
||||
doYouReallyWantToRemoveExpeditionDeviceConfiguration=Do you really want to remove Expedition device configuration "{0}"?
|
||||
|
||||
+8
-2
@@ -1012,6 +1012,7 @@ doYouReallyWantToRemoveTrackedRaces=Möchten Sie die getrackten Rennen wirklich
|
||||
doYouReallyWantToRemoveNonVisibleTrackedRaces=Sie entfernen auch getrackte Rennen, die während des Filterns nicht angezeigt werden. Die folgenden getrackten Rennen werden entfernt. Möchten Sie fortfahren?\n\n{0}
|
||||
metaLeaderboardCannotBeChanged=Dies ist eine Meta-Rangliste, das hier nicht geändert werden kann.
|
||||
failedToSetNewStartTime=Neue Startzeit konnte nicht gesetzt werden.
|
||||
failedToSetNewFinishingAndFinishTime=Neue Zieleinlaufzeit und Endzeit konnte nicht gesetzt werden.
|
||||
doYouReallyWantToRemoveIgtimiAccount=Möchten Sie wirklich den Zugang zu den Daten des Benutzers {0} löschen?
|
||||
igtimiWindImport=Wind von Igtimi importieren
|
||||
seeIgtimiTabForAccountSettings=Siehe den ''Igtimi'' Reiter für die Einstellungen, von welchen Igtimi-Konten Winddaten geladen werden sollen.
|
||||
@@ -1912,6 +1913,11 @@ elements={0} Elemente
|
||||
chooseDifferentDimensionTitle=Andere Dimension auswählen
|
||||
chooseDifferentDimensionMessage=Zum Gruppieren eine andere Dimension auswählen
|
||||
pleaseSelectADimension=Bitte eine Dimension auswählen
|
||||
finishingTime=Zieleinlaufzeit
|
||||
finishTimeString=Endzeitpunkt
|
||||
setFinishingAndFinishTime=Setzte Zieleinlaufzeit und Endzeitpunkt
|
||||
finishTimeMustBeAtOrAfterFinishingTime=Der Endzeitpunkt muss nach der Zieleinlaufzeit liegen oder gleich sein
|
||||
setFinishingAndFinishTimeDescription=Wähle neue Werte für Zieleinlaufzeit und Endzeitpunkt aus.
|
||||
boatNameMustNotBeEmpty=Bitte einen nicht leeren Bootsnamen angeben
|
||||
errorUpdatingExpeditionDeviceConfiguration=Fehler beim Speichern der Expedition Gerätekonfiguration "{0}": {1}
|
||||
doYouReallyWantToRemoveExpeditionDeviceConfiguration=Möchten Sie wirklich die Expedition Gerätekonfiguration "{0}" löschen?
|
||||
@@ -1957,5 +1963,5 @@ currentDistanceFoiledInMetersTooltip=Gefoilte Strecke in Metern
|
||||
currentDurationFoiledTooltip=Gefoilte Zeit
|
||||
totalDurationFoiledInSeconds=Gesamt gefoilte Zeit
|
||||
totalDistanceFoiledInMeters=Gesamt gefoilte Strecke
|
||||
totalDurationFoiledInSecondsTooltip=Insgesamt gefoilte Zeit, über die gesamte Ergebnisliste kumuliert
|
||||
totalDistanceFoiledInMetersTooltip=Insgesamt gefoilte Strecke, über die gesamte Ergebnisliste kumuliert
|
||||
totalDurationFoiledInSecondsTooltip=Insgesamt gefoilte Zeit, über die gesamte Ergebnisliste kumuliert
|
||||
totalDistanceFoiledInMetersTooltip=Insgesamt gefoilte Strecke, über die gesamte Ergebnisliste kumuliert
|
||||
+26
@@ -354,6 +354,7 @@ import com.sap.sailing.gwt.ui.shared.RaceInfoDTO.LineStartInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceInfoDTO.RaceInfoExtensionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogEventDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogSetFinishingAndFinishTimeDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceLogSetStartTimeAndProcedureDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceMapDataDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
@@ -5169,6 +5170,20 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
dto.racingProcedure);
|
||||
return new MillisecondsTimePoint(dto.startTime).equals(newStartTime);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<Boolean, Boolean> setFinishingAndEndTime(RaceLogSetFinishingAndFinishTimeDTO dto) {
|
||||
TimePoint newFinsihingTime = getService().setFinishingTime(dto.leaderboardName, dto.raceColumnName,
|
||||
dto.fleetName, dto.authorName, dto.authorPriority,
|
||||
dto.passId, new MillisecondsTimePoint(dto.finishingTime));
|
||||
|
||||
TimePoint newEndTime = getService().setEndTime(dto.leaderboardName, dto.raceColumnName,
|
||||
dto.fleetName, dto.authorName, dto.authorPriority,
|
||||
dto.passId, new MillisecondsTimePoint(dto.finishTime));
|
||||
|
||||
return new Pair<Boolean, Boolean>(new MillisecondsTimePoint(dto.finishingTime).equals(newFinsihingTime),
|
||||
new MillisecondsTimePoint(dto.finishTime).equals(newEndTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTrackingTimes(RaceLogSetTrackingTimesDTO dto) throws NotFoundException {
|
||||
@@ -5246,6 +5261,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
}
|
||||
return new com.sap.sse.common.Util.Triple<Date, Integer, RacingProcedureType>(result.getA() == null ? null : result.getA().asDate(), result.getB(), result.getC());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public com.sap.sse.common.Util.Triple<Date, Date, Integer> getFinishingAndFinishTime(String leaderboardName, String raceColumnName, String fleetName) {
|
||||
com.sap.sse.common.Util.Triple<TimePoint, TimePoint, Integer> result = getService().getFinishingAndFinishTime(leaderboardName, raceColumnName, fleetName);
|
||||
if (result == null) {
|
||||
return null;
|
||||
}
|
||||
return new com.sap.sse.common.Util.Triple<>(result.getA() == null ? null : result.getA().asDate(),
|
||||
result.getB() == null ? null : result.getB().asDate(), result.getC());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<String> getAllIgtimiAccountEmailAddresses() {
|
||||
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
|
||||
/**
|
||||
* DTO holding all information to set a new start time on a specific race.
|
||||
*/
|
||||
public class RaceLogSetFinishingAndFinishTimeDTO implements IsSerializable {
|
||||
public String leaderboardName;
|
||||
public String raceColumnName;
|
||||
public String fleetName;
|
||||
public int passId;
|
||||
public String authorName;
|
||||
public Integer authorPriority;
|
||||
public Date finishTime;
|
||||
public Date finishingTime;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "RaceLogSetEndTimeDTO [leaderboardName=" + leaderboardName + ", raceColumnName=" + raceColumnName
|
||||
+ ", fleetName=" + fleetName + ", passId=" + passId + ", authorName=" + authorName + ", authorPriority="
|
||||
+ authorPriority + ", finishTime=" + finishTime + ", endTime=" + finishingTime + "]";
|
||||
}
|
||||
}
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 160 B |
@@ -91,6 +91,7 @@ import com.sap.sse.common.TypeBasedServiceFinderFactory;
|
||||
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.common.search.KeywordQuery;
|
||||
import com.sap.sse.common.search.Result;
|
||||
import com.sap.sse.common.search.Searchable;
|
||||
@@ -550,12 +551,47 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
||||
*/
|
||||
TimePoint setStartTimeAndProcedure(String leaderboardName, String raceColumnName, String fleetName, String authorName,
|
||||
int authorPriority, int passId, TimePoint logicalTimePoint, TimePoint startTime, RacingProcedureType racingProcedure);
|
||||
|
||||
/**
|
||||
* Forces a new end time identified by the passed parameters.
|
||||
* @param leaderboardName name of the RaceLog's leaderboard.
|
||||
* @param raceColumnName name of the RaceLog's column
|
||||
* @param fleetName name of the RaceLog's fleet
|
||||
* @param authorName name of the {@link AbstractLogEventAuthor} the {@link RaceLogStartTimeEvent} will be created with
|
||||
* @param authorPriority priority of the author.
|
||||
* @param passId Pass identifier of the new start time event.
|
||||
* @param logicalTimePoint logical {@link TimePoint} of the new event.
|
||||
* @return
|
||||
*/
|
||||
TimePoint setEndTime(String leaderboardName, String raceColumnName, String fleetName, String authorName,
|
||||
int authorPriority, int passId, TimePoint logicalTimePoint);
|
||||
|
||||
/**
|
||||
* Forces a new finishing time identified by the passed parameters.
|
||||
* @param leaderboardName name of the RaceLog's leaderboard.
|
||||
* @param raceColumnName name of the RaceLog's column
|
||||
* @param fleetName name of the RaceLog's fleet
|
||||
* @param authorName name of the {@link AbstractLogEventAuthor} the {@link RaceLogStartTimeEvent} will be created with
|
||||
* @param authorPriority priority of the author.
|
||||
* @param passId Pass identifier of the new start time event.
|
||||
* @param logicalTimePoint logical {@link TimePoint} of the new event.
|
||||
* @return
|
||||
*/
|
||||
TimePoint setFinishingTime(String leaderboardName, String raceColumnName, String fleetName, String authorName,
|
||||
Integer authorPriority, int passId, MillisecondsTimePoint millisecondsTimePoint);
|
||||
|
||||
/**
|
||||
* Gets the start time, pass identifier and racing procedure for the queried race. Start time might be <code>null</code>.
|
||||
*/
|
||||
Util.Triple<TimePoint, Integer, RacingProcedureType> getStartTimeAndProcedure(String leaderboardName, String raceColumnName, String fleetName);
|
||||
|
||||
/**
|
||||
* Gets the finishing and finish times as well as the pass identifier for the queried race. The first TimePoint is the
|
||||
* finishing time, the second on is the finish time. Finishing and/or finish times might be <code>null</code>.
|
||||
*/
|
||||
com.sap.sse.common.Util.Triple<TimePoint, TimePoint, Integer> getFinishingAndFinishTime(
|
||||
String leaderboardName, String raceColumnName, String fleetName);
|
||||
|
||||
MongoObjectFactory getMongoObjectFactory();
|
||||
|
||||
DomainObjectFactory getDomainObjectFactory();
|
||||
|
||||
+53
@@ -54,7 +54,10 @@ import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
|
||||
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.FinishedTimeFinder;
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.FinishingTimeFinder;
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogRaceStatusEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.RaceState;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.ReadonlyRaceState;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateImpl;
|
||||
@@ -116,6 +119,7 @@ import com.sap.sailing.domain.common.dto.RegattaCreationParametersDTO;
|
||||
import com.sap.sailing.domain.common.dto.SeriesCreationParametersDTO;
|
||||
import com.sap.sailing.domain.common.impl.DataImportProgressImpl;
|
||||
import com.sap.sailing.domain.common.media.MediaTrack;
|
||||
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.common.tracking.GPSFix;
|
||||
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
|
||||
@@ -3480,6 +3484,38 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimePoint setEndTime(String leaderboardName, String raceColumnName, String fleetName,
|
||||
String authorName, int authorPriority, int passId, TimePoint logicalTimePoint) {
|
||||
RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName);
|
||||
Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
|
||||
final TimePoint result;
|
||||
if (leaderboard instanceof HasRegattaLike && raceLog != null) {
|
||||
LogEventAuthorImpl author = new LogEventAuthorImpl(authorName, authorPriority);
|
||||
raceLog.add(new RaceLogRaceStatusEventImpl(logicalTimePoint, author, raceLog.getCurrentPassId(), RaceLogRaceStatus.FINISHED));
|
||||
result = new FinishedTimeFinder(raceLog).analyze();
|
||||
} else {
|
||||
result = null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimePoint setFinishingTime(String leaderboardName, String raceColumnName, String fleetName,
|
||||
String authorName, Integer authorPriority, int passId, MillisecondsTimePoint logicalTimePoint) {
|
||||
RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName);
|
||||
Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
|
||||
final TimePoint result;
|
||||
if (leaderboard instanceof HasRegattaLike && raceLog != null) {
|
||||
LogEventAuthorImpl author = new LogEventAuthorImpl(authorName, authorPriority);
|
||||
raceLog.add(new RaceLogRaceStatusEventImpl(logicalTimePoint, author, raceLog.getCurrentPassId(), RaceLogRaceStatus.FINISHING));
|
||||
result = new FinishingTimeFinder(raceLog).analyze();
|
||||
} else {
|
||||
result = null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public RaceLog getRaceLog(String leaderboardName, String raceColumnName, String fleetName) {
|
||||
Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
|
||||
@@ -3508,6 +3544,22 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public com.sap.sse.common.Util.Triple<TimePoint, TimePoint, Integer> getFinishingAndFinishTime(
|
||||
String leaderboardName, String raceColumnName, String fleetName) {
|
||||
RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName);
|
||||
Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
|
||||
final Triple<TimePoint, TimePoint, Integer> result;
|
||||
if (leaderboard instanceof HasRegattaLike && raceLog != null) {
|
||||
ReadonlyRaceState state = ReadonlyRaceStateImpl.create(/* race log resolver */ this, raceLog);
|
||||
result = new com.sap.sse.common.Util.Triple<>(state.getFinishingTime(), state.getFinishedTime(),
|
||||
raceLog.getCurrentPassId());
|
||||
} else {
|
||||
result = null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private Iterable<WindTrackerFactory> getWindTrackerFactories() {
|
||||
final Set<WindTrackerFactory> result;
|
||||
@@ -4092,4 +4144,5 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
|
||||
public AnniversaryRaceDeterminator getAnniversaryRaceDeterminator() {
|
||||
return anniversaryRaceDeterminator;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -22,6 +22,14 @@
|
||||
<h2 class="releaseHeadline">Release Notes - Administration Console</h2>
|
||||
<div class="innerContent">
|
||||
|
||||
<h2 class="articleSubheadline">November 2017</h2>
|
||||
<ul class="bulletList">
|
||||
<li>In addition to the "Set start time" dialog there's now a "Set finishing and end time dialog".
|
||||
This dialog makes it possible to set the finishing as well as the end time in the RaceLog.
|
||||
It is intended to be used in cases where a race wasn't correctly finished using the race management app.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="articleSubheadline">September 2017</h2>
|
||||
<ul class="bulletList">
|
||||
<li>Authentication for Igtimi accounts is now possible with an OAuth process.
|
||||
|
||||
Reference in new issue
Block a user