mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-29 08:56:43 +00:00
aligned synchronous and asynchronous code paths when adding new fixes
Bug 4551
This commit is contained in:
+33
-8
@@ -5,9 +5,11 @@ import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.SortedMap;
|
||||
import java.util.TreeMap;
|
||||
|
||||
@@ -132,6 +134,8 @@ public class EditMarkPositionPanel extends AbstractRaceChart<AbstractSettings> i
|
||||
private final RaceIdentifierToLeaderboardRaceColumnAndFleetMapper raceIdentifierToLeaderboardRaceColumnAndFleetMapper;
|
||||
protected boolean nonTrackingWarningWasDisplayed;
|
||||
|
||||
private final Set<MarkDTO> marksCurrentlyRequestedViaRemoteCall = new HashSet<>();
|
||||
|
||||
public EditMarkPositionPanel(Component<?> parent, ComponentContext<?> context, final RaceMap raceMap,
|
||||
final SingleRaceLeaderboardPanel leaderboardPanel,
|
||||
RegattaAndRaceIdentifier selectedRaceIdentifier, String leaderboardName, final StringMessages stringMessages,
|
||||
@@ -859,11 +863,13 @@ public class EditMarkPositionPanel extends AbstractRaceChart<AbstractSettings> i
|
||||
}
|
||||
|
||||
private void selectMark(MarkDTO mark) {
|
||||
selectedMark = mark;
|
||||
if (currentFixPositionChooser != null) {
|
||||
currentFixPositionChooser.cancel();
|
||||
currentFixPositionChooser = null;
|
||||
if (selectedMark != mark) {
|
||||
if (currentFixPositionChooser != null) {
|
||||
currentFixPositionChooser.cancel();
|
||||
currentFixPositionChooser = null;
|
||||
}
|
||||
}
|
||||
selectedMark = mark;
|
||||
if (selectedMark != null) {
|
||||
if (marksFromToTimes.get(selectedMark) != null) {
|
||||
// For some reason the time slider does not change with this method only if you comment out line 430 and 432 in TimePanel it works
|
||||
@@ -905,24 +911,43 @@ public class EditMarkPositionPanel extends AbstractRaceChart<AbstractSettings> i
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
final MarkDTO mark = marksPanel.getSelectedMark();
|
||||
retrieveAndSelectMarkIfNecessary(mark, null);
|
||||
}
|
||||
|
||||
protected void retrieveAndSelectMarkIfNecessary(final MarkDTO mark, final Runnable callback) {
|
||||
if (mark != null && (marks.get(mark) == null || marks.get(mark).isEmpty())) {
|
||||
if (mark != null) {
|
||||
markPositionService.getMarkTrack(raceIdentifierToLeaderboardRaceColumnAndFleetMapper.getLeaderboardNameAndRaceColumnNameAndFleetName(selectedRaceIdentifier),
|
||||
|
||||
if (marksCurrentlyRequestedViaRemoteCall.add(mark)) {
|
||||
markPositionService.getMarkTrack(
|
||||
raceIdentifierToLeaderboardRaceColumnAndFleetMapper
|
||||
.getLeaderboardNameAndRaceColumnNameAndFleetName(selectedRaceIdentifier),
|
||||
mark.getIdAsString(), new AsyncCallback<MarkTrackDTO>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError(stringMessages.errorCommunicatingWithServer()+": "+caught.getMessage());
|
||||
marksCurrentlyRequestedViaRemoteCall.remove(mark);
|
||||
errorReporter.reportError(
|
||||
stringMessages.errorCommunicatingWithServer() + ": " + caught.getMessage());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onSuccess(MarkTrackDTO result) {
|
||||
marksCurrentlyRequestedViaRemoteCall.remove(mark);
|
||||
createMarkTrackUi(mark, result.getFixes());
|
||||
selectMark(mark);
|
||||
if (callback != null) {
|
||||
callback.run();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
// remote call of the same mark already in progress -> ignore this request
|
||||
}
|
||||
} else {
|
||||
selectMark(mark);
|
||||
if (callback != null) {
|
||||
callback.run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+20
-15
@@ -85,22 +85,27 @@ public class MarksPanel extends AbstractCompositeComponent<AbstractSettings> {
|
||||
@Override
|
||||
public void update(int index, final MarkDTO mark, String value) {
|
||||
final Date timePoint = parent.timer.getTime();
|
||||
select(mark);
|
||||
if (parent.hasFixAtTimePoint(mark, timePoint)) {
|
||||
parent.showNotification(stringMessages.pleaseSelectOtherTimepoint(), NotificationType.ERROR);
|
||||
} else {
|
||||
parent.createFixPositionChooserToAddFixToMark(mark, new Callback<Position, Exception>() {
|
||||
@Override
|
||||
public void onFailure(Exception reason) {
|
||||
parent.resetCurrentFixPositionChooser();
|
||||
parent.retrieveAndSelectMarkIfNecessary(mark, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (parent.hasFixAtTimePoint(mark, timePoint)) {
|
||||
parent.showNotification(stringMessages.pleaseSelectOtherTimepoint(), NotificationType.ERROR);
|
||||
} else {
|
||||
parent.createFixPositionChooserToAddFixToMark(mark, new Callback<Position, Exception>() {
|
||||
@Override
|
||||
public void onFailure(final Exception reason) {
|
||||
parent.resetCurrentFixPositionChooser();
|
||||
}
|
||||
@Override
|
||||
public void onSuccess(Position result) {
|
||||
parent.addMarkFix(mark, timePoint, result);
|
||||
parent.resetCurrentFixPositionChooser();
|
||||
}
|
||||
});
|
||||
}
|
||||
@Override
|
||||
public void onSuccess(Position result) {
|
||||
parent.addMarkFix(mark, timePoint, result);
|
||||
parent.resetCurrentFixPositionChooser();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
markTable.addColumn(addFixColumn);
|
||||
|
||||
Reference in New Issue
Block a user