mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-24 14:38:45 +00:00
bug5419: fixed sync between boats and competitors (with boat) after edit boat entry.
This commit is contained in:
+2
-1
@@ -123,7 +123,8 @@ public class BoatDTO extends NamedSecuredObjectDTO implements WithID, Serializab
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getName() == null ? (getBoatClass().getName() + " / " + getSailId()) : getName();
|
||||
return "BoatDTO [idAsString=" + idAsString + ", boatClass=" + boatClass + ", sailId=" + sailId + ", color="
|
||||
+ color + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+7
-6
@@ -45,9 +45,9 @@ public class AbstractRegattaLogFixesAddMappingsDialog extends DataEntryDialog<Co
|
||||
private BoatDTO boatToSelect;
|
||||
private boolean inInstableTransitionState = false;
|
||||
|
||||
public AbstractRegattaLogFixesAddMappingsDialog(SailingServiceWriteAsync sailingServiceWrite, UserService userService,
|
||||
final ErrorReporter errorReporter, final StringMessages stringMessages, String leaderboardName,
|
||||
DialogCallback<Collection<DeviceMappingDTO>> callback) {
|
||||
public AbstractRegattaLogFixesAddMappingsDialog(SailingServiceWriteAsync sailingServiceWrite,
|
||||
UserService userService, final ErrorReporter errorReporter, final StringMessages stringMessages,
|
||||
String leaderboardName, DialogCallback<Collection<DeviceMappingDTO>> callback) {
|
||||
super(stringMessages.add(stringMessages.deviceMappings()), stringMessages.add(stringMessages.deviceMappings()),
|
||||
stringMessages.add(), stringMessages.cancel(),
|
||||
new DataEntryDialog.Validator<Collection<DeviceMappingDTO>>() {
|
||||
@@ -70,11 +70,12 @@ public class AbstractRegattaLogFixesAddMappingsDialog extends DataEntryDialog<Co
|
||||
/* boatsRefresher not needed; fetching competitors from registrations */ null, stringMessages,
|
||||
errorReporter, /* multiSelection */ false, /* enable pager */ true,
|
||||
/* filterCompetitorWithBoat */ false, /* filterCompetitorsWithoutBoat */ false);
|
||||
markTable = new MarkTableWrapper<RefreshableSingleSelectionModel<MarkDTO>>(
|
||||
/* multiSelection */ false, sailingServiceWrite, stringMessages, errorReporter);
|
||||
markTable = new MarkTableWrapper<RefreshableSingleSelectionModel<MarkDTO>>(/* multiSelection */ false,
|
||||
sailingServiceWrite, stringMessages, errorReporter);
|
||||
boatTable = new BoatTableWrapper<RefreshableSingleSelectionModel<BoatDTO>>(sailingServiceWrite, userService,
|
||||
/* boatsRefresher not needed; registered boats taken from regatta log */ null,
|
||||
stringMessages, errorReporter, /* multiSelection */ false, /* enable Pager */ true, /* allowActions */ false);
|
||||
/* competitorsRefresher not neede */ null, stringMessages, errorReporter, /* multiSelection */ false,
|
||||
/* enable Pager */ true, /* allowActions */ false);
|
||||
|
||||
registerSelectionChangeHandler(competitorTable.getSelectionModel(), this::mappedToSelectionChanged);
|
||||
registerSelectionChangeHandler(markTable.getSelectionModel(), this::mappedToSelectionChanged);
|
||||
|
||||
+1
@@ -60,6 +60,7 @@ public abstract class AbstractRegattaLogSensorDataAddMappingsDialog extends Data
|
||||
event -> deviceSelectionChanged(deviceIdTable.getSelectionModel().getSelectedObject()));
|
||||
boatTable = new BoatTableWrapper<RefreshableSingleSelectionModel<BoatDTO>>(sailingServiceWrite, userService,
|
||||
/* boatsRefresher not needed; registrations are fetched for the leaderboard specifically */ null,
|
||||
/* competitorsRefresher not neede */ null,
|
||||
stringMessages, errorReporter, /* multiSelection */ false, /* enable Pager */ true, /* allowActions */ false);
|
||||
competitorTable = new CompetitorTableWrapper<>(sailingServiceWrite, userService,
|
||||
/* competitorsRefresher not needed; registrations are fetched for the leaderboard specifically */ null,
|
||||
|
||||
+2
-2
@@ -33,8 +33,8 @@ public class BoatPanel extends SimplePanel implements FilterablePanelProvider<Bo
|
||||
super();
|
||||
this.boatsDisplayer = result->refreshBoatList();
|
||||
this.boatTable = new BoatTableWrapper<>(presenter.getSailingService(), presenter.getUserService(),
|
||||
presenter.getBoatsRefresher(), stringMessages, presenter.getErrorReporter(), /* multiSelection */ true,
|
||||
/* enablePager */ true, 100, true);
|
||||
presenter.getBoatsRefresher(), presenter.getCompetitorsRefresher(), stringMessages,
|
||||
presenter.getErrorReporter(), /* multiSelection */ true, /* enablePager */ true, 100, true);
|
||||
this.refreshableBoatSelectionModel = (RefreshableMultiSelectionModel<BoatDTO>) boatTable.getSelectionModel();
|
||||
VerticalPanel mainPanel = new VerticalPanel();
|
||||
this.setWidget(mainPanel);
|
||||
|
||||
+9
-7
@@ -19,6 +19,7 @@ import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.ui.client.Refresher;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceWriteAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
@@ -68,9 +69,9 @@ public class BoatRegistrationsPanel extends FlowPanel implements BusyDisplay {
|
||||
* to all boats in the server's boat store
|
||||
*/
|
||||
protected BoatRegistrationsPanel(final SailingServiceWriteAsync sailingServiceWrite, final UserService userService,
|
||||
Refresher<BoatDTO> boatsRefresher, final StringMessages stringMessages, final ErrorReporter errorReporter,
|
||||
boolean editable, String leaderboardName, boolean canBoatsOfCompetitorsChangePerRace, String boatClass,
|
||||
Runnable validator,
|
||||
Refresher<BoatDTO> boatsRefresher, Refresher<CompetitorDTO> competitorsRefresher,
|
||||
final StringMessages stringMessages, final ErrorReporter errorReporter, boolean editable,
|
||||
String leaderboardName, boolean canBoatsOfCompetitorsChangePerRace, String boatClass, Runnable validator,
|
||||
Consumer<AsyncCallback<Collection<BoatDTO>>> registeredBoatsRetriever, boolean restrictPoolToLeaderboard) {
|
||||
this.errorReporter = errorReporter;
|
||||
this.validator = validator;
|
||||
@@ -89,12 +90,13 @@ public class BoatRegistrationsPanel extends FlowPanel implements BusyDisplay {
|
||||
final HorizontalPanel boatRegistrationPanel = new HorizontalPanel();
|
||||
final CaptionPanel allBoatsPanel = new CaptionPanel(stringMessages.boatPool());
|
||||
final CaptionPanel registeredBoatsPanel = new CaptionPanel(stringMessages.registeredBoats());
|
||||
allBoatsTable = new BoatTableWrapper<>(sailingServiceWrite, userService, boatsRefresher, stringMessages, /* multiSelection */
|
||||
allBoatsTable = new BoatTableWrapper<>(sailingServiceWrite, userService, boatsRefresher, competitorsRefresher,
|
||||
stringMessages, /* multiSelection */
|
||||
errorReporter, true, /* enablePager */true, 20, false);
|
||||
registeredBoatsTable = new BoatTableWrapper<>(sailingServiceWrite, userService,
|
||||
/* boatsRefresher not needed; boats fetched for registrations */ null, stringMessages,
|
||||
errorReporter, /* multiSelection */ true, /* enablePager */ false, /* paging size */ 20,
|
||||
/* allowActions */ false);
|
||||
/* boatsRefresher not needed; boats fetched for registrations */ null,
|
||||
/* competiorsRefresher not needed */ null, stringMessages, errorReporter, /* multiSelection */ true,
|
||||
/* enablePager */ false, /* paging size */ 20, /* allowActions */ false);
|
||||
allBoatsPanel.add(allBoatsTable);
|
||||
registeredBoatsPanel.add(registeredBoatsTable);
|
||||
VerticalPanel movePanel = new VerticalPanel();
|
||||
|
||||
+18
-8
@@ -19,6 +19,7 @@ import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.security.SecuredDomainType;
|
||||
import com.sap.sailing.gwt.ui.adminconsole.ColorColumn.ColorRetriever;
|
||||
import com.sap.sailing.gwt.ui.client.Refresher;
|
||||
@@ -47,17 +48,20 @@ public class BoatTableWrapper<S extends RefreshableSelectionModel<BoatDTO>> exte
|
||||
private final LabeledAbstractFilterablePanel<BoatDTO> filterField;
|
||||
private final SailingServiceWriteAsync sailingServiceWrite;
|
||||
private final Refresher<BoatDTO> boatsRefresher;
|
||||
private final Refresher<CompetitorDTO> competitorsRefresher;
|
||||
|
||||
public BoatTableWrapper(SailingServiceWriteAsync sailingServiceWrite, final UserService userService,
|
||||
Refresher<BoatDTO> boatsRefresher, StringMessages stringMessages, ErrorReporter errorReporter,
|
||||
boolean multiSelection, boolean enablePager, boolean allowActions) {
|
||||
this(sailingServiceWrite, userService, boatsRefresher, stringMessages, errorReporter, multiSelection,
|
||||
enablePager, DEFAULT_PAGING_SIZE, allowActions);
|
||||
Refresher<BoatDTO> boatsRefresher, Refresher<CompetitorDTO> competitorsRefresher,
|
||||
StringMessages stringMessages, ErrorReporter errorReporter, boolean multiSelection, boolean enablePager,
|
||||
boolean allowActions) {
|
||||
this(sailingServiceWrite, userService, boatsRefresher, competitorsRefresher, stringMessages, errorReporter,
|
||||
multiSelection, enablePager, DEFAULT_PAGING_SIZE, allowActions);
|
||||
}
|
||||
|
||||
public BoatTableWrapper(SailingServiceWriteAsync sailingServiceWrite, final UserService userService,
|
||||
Refresher<BoatDTO> boatsRefresher, StringMessages stringMessages, ErrorReporter errorReporter,
|
||||
boolean multiSelection, boolean enablePager, int pagingSize, boolean allowActions) {
|
||||
Refresher<BoatDTO> boatsRefresher, Refresher<CompetitorDTO> competitorsRefresher,
|
||||
StringMessages stringMessages, ErrorReporter errorReporter, boolean multiSelection, boolean enablePager,
|
||||
int pagingSize, boolean allowActions) {
|
||||
super(sailingServiceWrite, stringMessages, errorReporter, multiSelection, enablePager, pagingSize,
|
||||
new EntityIdentityComparator<BoatDTO>() {
|
||||
@Override
|
||||
@@ -70,6 +74,7 @@ public class BoatTableWrapper<S extends RefreshableSelectionModel<BoatDTO>> exte
|
||||
}
|
||||
});
|
||||
this.boatsRefresher = boatsRefresher;
|
||||
this.competitorsRefresher = competitorsRefresher;
|
||||
this.sailingServiceWrite = sailingServiceWrite;
|
||||
ListHandler<BoatDTO> boatColumnListHandler = getColumnSortHandler();
|
||||
// boats table
|
||||
@@ -235,7 +240,7 @@ public class BoatTableWrapper<S extends RefreshableSelectionModel<BoatDTO>> exte
|
||||
if (boatsRefresher != null) {
|
||||
// Don't fetch from server but ask our unified data model to deliver the boats without forcing server
|
||||
// round-trip unless the boats haven't been loaded at all so far
|
||||
boatsRefresher.callFillAndReloadInitially(boats->{
|
||||
boatsRefresher.callFillAndReloadInitially(boats -> {
|
||||
getFilteredBoats(boats);
|
||||
filterBoats(boats);
|
||||
if (callback != null) {
|
||||
@@ -281,7 +286,12 @@ public class BoatTableWrapper<S extends RefreshableSelectionModel<BoatDTO>> exte
|
||||
|
||||
@Override
|
||||
public void onSuccess(BoatDTO updatedBoat) {
|
||||
boatsRefresher.addIfNotContainedElseReplace(updatedBoat);
|
||||
if (boatsRefresher != null) {
|
||||
boatsRefresher.addIfNotContainedElseReplace(originalBoat, updatedBoat);
|
||||
}
|
||||
if (competitorsRefresher != null) {
|
||||
competitorsRefresher.reloadAndCallFillAll();
|
||||
}
|
||||
int editedBoatIndex = getFilterField().indexOf(originalBoat);
|
||||
getFilterField().remove(originalBoat);
|
||||
if (editedBoatIndex >= 0){
|
||||
|
||||
+11
-7
@@ -138,7 +138,10 @@ public class CompetitorTableWrapper<S extends RefreshableSelectionModel<Competit
|
||||
TextColumn<CompetitorDTO> boatClassColumn = new TextColumn<CompetitorDTO>() {
|
||||
@Override
|
||||
public String getValue(CompetitorDTO competitor) {
|
||||
return competitor.hasBoat() && ((CompetitorWithBoatDTO) competitor).getBoatClass() != null ? ((CompetitorWithBoatDTO) competitor).getBoatClass().getName() : "";
|
||||
return competitor.hasBoat()
|
||||
&& ((CompetitorWithBoatDTO) competitor).getBoatClass() != null
|
||||
? ((CompetitorWithBoatDTO) competitor).getBoatClass().getName()
|
||||
: "";
|
||||
}
|
||||
};
|
||||
boatClassColumn.setSortable(true);
|
||||
@@ -459,11 +462,12 @@ public class CompetitorTableWrapper<S extends RefreshableSelectionModel<Competit
|
||||
|
||||
@Override
|
||||
public void onSuccess(CompetitorWithBoatDTO updatedCompetitor) {
|
||||
GWT.log("OK 002");
|
||||
if (competitorsRefresher != null) {
|
||||
competitorsRefresher.addIfNotContainedElseReplace(updatedCompetitor);
|
||||
if (updatedCompetitor.getBoat() != null) {
|
||||
boatsRefresher.addIfNotContainedElseReplace(updatedCompetitor.getBoat());
|
||||
competitorsRefresher.addIfNotContainedElseReplace(originalCompetitor, updatedCompetitor);
|
||||
competitorsRefresher.callAllFill();
|
||||
if (boatsRefresher != null) {
|
||||
boatsRefresher.addIfNotContainedElseReplace(originalCompetitor.getBoat(), updatedCompetitor.getBoat());
|
||||
boatsRefresher.callAllFill();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -523,7 +527,7 @@ public class CompetitorTableWrapper<S extends RefreshableSelectionModel<Competit
|
||||
@Override
|
||||
public void onSuccess(CompetitorDTO updatedCompetitor) {
|
||||
if (competitorsRefresher != null) {
|
||||
competitorsRefresher.addIfNotContainedElseReplace(updatedCompetitor);
|
||||
competitorsRefresher.addIfNotContainedElseReplace(originalCompetitor, updatedCompetitor);
|
||||
}
|
||||
//only reload selected competitors reloading with refreshCompetitorList(leaderboardName)
|
||||
//would not work in case the list is not based on a leaderboard e.g. AbstractCompetitorRegistrationDialog
|
||||
@@ -599,7 +603,7 @@ public class CompetitorTableWrapper<S extends RefreshableSelectionModel<Competit
|
||||
@Override
|
||||
public void onSuccess(T addedCompetitor) {
|
||||
if (competitorsRefresher != null) {
|
||||
competitorsRefresher.addIfNotContainedElseReplace(addedCompetitor);
|
||||
competitorsRefresher.add(addedCompetitor);
|
||||
}
|
||||
getFilterField().add(addedCompetitor);
|
||||
getDataProvider().refresh();
|
||||
|
||||
+3
-2
@@ -13,6 +13,7 @@ import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.sap.sailing.domain.common.dto.BoatClassDTO;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorWithBoatDTO;
|
||||
import com.sap.sailing.gwt.ui.client.Refresher;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceWriteAsync;
|
||||
@@ -44,7 +45,7 @@ public class CompetitorWithBoatCreateDialog extends AbstractCompetitorWithBoatDi
|
||||
* already initialized or you don't want a default boat class.
|
||||
*/
|
||||
public CompetitorWithBoatCreateDialog(SailingServiceWriteAsync sailingServiceWrite, final UserService userService,
|
||||
Refresher<BoatDTO> boatsRefresher, StringMessages stringMessages, ErrorReporter errorReporter,
|
||||
Refresher<BoatDTO> boatsRefresher, Refresher<CompetitorDTO> competitorsRefresher, StringMessages stringMessages, ErrorReporter errorReporter,
|
||||
CompetitorWithBoatDTO competitorToEdit, DialogCallback<CompetitorWithBoatDTO> callback, String boatClass) {
|
||||
super("Add competitor with boat", stringMessages, competitorToEdit, callback, boatClass);
|
||||
this.ensureDebugId("CompetitorWithBoatCreateDialog");
|
||||
@@ -65,7 +66,7 @@ public class CompetitorWithBoatCreateDialog extends AbstractCompetitorWithBoatDi
|
||||
});
|
||||
newBoatPanel = new VerticalPanel();
|
||||
existingBoatPanel = new VerticalPanel();
|
||||
this.existingBoatsTable = new BoatTableWrapper<>(sailingServiceWrite, userService, boatsRefresher, stringMessages, errorReporter,
|
||||
this.existingBoatsTable = new BoatTableWrapper<>(sailingServiceWrite, userService, boatsRefresher, competitorsRefresher, stringMessages, errorReporter,
|
||||
/* multiSelection */ false, /* enablePager */ true, /* pagingSize*/ 10, false);
|
||||
existingBoatsTable.refreshBoatList(/* loadOnlyStandaloneBoats */ true, /* callback */ null);
|
||||
this.existingBoatsTable.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
|
||||
+21
-16
@@ -87,19 +87,19 @@ public class ExpeditionAllInOneAfterImportHandler {
|
||||
@Override
|
||||
public void onSuccess(EventDTO result) {
|
||||
event = result;
|
||||
eventsRefresher.addIfNotContainedElseReplace(result);
|
||||
eventsRefresher.addIfNotContained(result);
|
||||
sailingServiceWrite.getRegattaByName(regattaName, new DataLoadingCallback<RegattaDTO>() {
|
||||
@Override
|
||||
public void onSuccess(RegattaDTO result) {
|
||||
regatta = result;
|
||||
regattasRefresher.addIfNotContainedElseReplace(result);
|
||||
regattasRefresher.addIfNotContained(result);
|
||||
regattasRefresher.callFillAndReloadInitially(regattaOracleToRefresh);
|
||||
sailingServiceWrite.getLeaderboardWithSecurity(leaderboardName,
|
||||
new DataLoadingCallback<StrippedLeaderboardDTOWithSecurity>() {
|
||||
@Override
|
||||
public void onSuccess(StrippedLeaderboardDTOWithSecurity result) {
|
||||
leaderboard = result;
|
||||
leaderboardsRefresher.addIfNotContainedElseReplace(result);
|
||||
leaderboardsRefresher.addIfNotContained(result);
|
||||
sailingServiceWrite.getTrackFileImportDeviceIds(gpsDeviceIds,
|
||||
new DataLoadingCallback<List<TrackFileImportDeviceIdentifierDTO>>() {
|
||||
@Override
|
||||
@@ -124,20 +124,25 @@ public class ExpeditionAllInOneAfterImportHandler {
|
||||
}
|
||||
|
||||
private class RegattaLogCompetitorRegistrationAndSelectionDialog extends RegattaLogCompetitorRegistrationDialog {
|
||||
public RegattaLogCompetitorRegistrationAndSelectionDialog(String boatClass, SailingServiceWriteAsync sailingServiceWrite, final UserService userService,
|
||||
Refresher<CompetitorDTO> competitorsRefresher, Refresher<BoatDTO> boatsRefresher, StringMessages stringMessages, ErrorReporter errorReporter, boolean editable,
|
||||
String leaderboardName, boolean canBoatsOfCompetitorsChangePerRace) {
|
||||
this(boatClass, sailingServiceWrite, userService, competitorsRefresher, boatsRefresher, stringMessages, errorReporter, editable,
|
||||
leaderboardName, canBoatsOfCompetitorsChangePerRace,
|
||||
new ValidatorForCompetitorRegistrationDialog(stringMessages), new CallbackForCompetitorRegistrationDialog());
|
||||
public RegattaLogCompetitorRegistrationAndSelectionDialog(String boatClass,
|
||||
SailingServiceWriteAsync sailingServiceWrite, final UserService userService,
|
||||
Refresher<CompetitorDTO> competitorsRefresher, Refresher<BoatDTO> boatsRefresher,
|
||||
StringMessages stringMessages, ErrorReporter errorReporter, boolean editable, String leaderboardName,
|
||||
boolean canBoatsOfCompetitorsChangePerRace) {
|
||||
this(boatClass, sailingServiceWrite, userService, competitorsRefresher, boatsRefresher, stringMessages,
|
||||
errorReporter, editable, leaderboardName, canBoatsOfCompetitorsChangePerRace,
|
||||
new ValidatorForCompetitorRegistrationDialog(stringMessages),
|
||||
new CallbackForCompetitorRegistrationDialog());
|
||||
}
|
||||
|
||||
public RegattaLogCompetitorRegistrationAndSelectionDialog(String boatClass, SailingServiceWriteAsync sailingServiceWrite, final UserService userService,
|
||||
Refresher<CompetitorDTO> competitorsRefresher, Refresher<BoatDTO> boatsRefresher, StringMessages stringMessages, ErrorReporter errorReporter, boolean editable,
|
||||
String leaderboardName, boolean canBoatsOfCompetitorsChangePerRace,
|
||||
ValidatorForCompetitorRegistrationDialog validator, CallbackForCompetitorRegistrationDialog callback) {
|
||||
super(boatClass, sailingServiceWrite, userService, competitorsRefresher, boatsRefresher, stringMessages, errorReporter, editable,
|
||||
leaderboardName, canBoatsOfCompetitorsChangePerRace, validator, callback);
|
||||
|
||||
public RegattaLogCompetitorRegistrationAndSelectionDialog(String boatClass,
|
||||
SailingServiceWriteAsync sailingServiceWrite, final UserService userService,
|
||||
Refresher<CompetitorDTO> competitorsRefresher, Refresher<BoatDTO> boatsRefresher,
|
||||
StringMessages stringMessages, ErrorReporter errorReporter, boolean editable, String leaderboardName,
|
||||
boolean canBoatsOfCompetitorsChangePerRace, ValidatorForCompetitorRegistrationDialog validator,
|
||||
CallbackForCompetitorRegistrationDialog callback) {
|
||||
super(boatClass, sailingServiceWrite, userService, competitorsRefresher, boatsRefresher, stringMessages,
|
||||
errorReporter, editable, leaderboardName, canBoatsOfCompetitorsChangePerRace, validator, callback);
|
||||
validator.setCompetitorRegistrationsPanel(competitorRegistrationsPanel);
|
||||
callback.setCompetitorRegistrationsPanel(competitorRegistrationsPanel);
|
||||
}
|
||||
|
||||
+4
-2
@@ -34,8 +34,9 @@ public class ItemToMapToDeviceSelectionPanel implements IsWidget {
|
||||
void onSelectionChange(MarkDTO mark);
|
||||
}
|
||||
|
||||
public ItemToMapToDeviceSelectionPanel(SailingServiceWriteAsync sailingServiceWrite, final UserService userService, StringMessages stringMessages,
|
||||
ErrorReporter errorReporter, final SelectionChangedHandler handler, MappableToDevice selected) {
|
||||
public ItemToMapToDeviceSelectionPanel(SailingServiceWriteAsync sailingServiceWrite, final UserService userService,
|
||||
StringMessages stringMessages, ErrorReporter errorReporter, final SelectionChangedHandler handler,
|
||||
MappableToDevice selected) {
|
||||
this.selected = selected;
|
||||
this.errorReporter = errorReporter;
|
||||
competitorTable = new CompetitorTableWrapper<>(sailingServiceWrite, userService,
|
||||
@@ -44,6 +45,7 @@ public class ItemToMapToDeviceSelectionPanel implements IsWidget {
|
||||
/* enablePager */ true, /* filterCompetitorWithBoat */ false, /* filterCompetitorsWithoutBoat */ false);
|
||||
boatTable = new BoatTableWrapper<>(sailingServiceWrite, userService,
|
||||
/* boatsRefresher not needed; boats are obtained from the regatta log registrations */ null,
|
||||
/* competitorsRefresher not needed */ null,
|
||||
stringMessages, errorReporter, /* multiSelection */ false, /* enablePager */ true,
|
||||
/* allowActions */ false);
|
||||
markTable = new MarkTableWrapper<RefreshableSingleSelectionModel<MarkDTO>>(/* multiSelection */ false, sailingServiceWrite,
|
||||
|
||||
+10
-5
@@ -7,6 +7,7 @@ import java.util.function.Consumer;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.ui.client.Refresher;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceWriteAsync;
|
||||
@@ -23,9 +24,11 @@ public class RegattaLogBoatRegistrationDialog extends DataEntryDialog<Set<BoatDT
|
||||
protected final boolean canBoatsOfCompetitorsChangePerRace;
|
||||
protected final BoatRegistrationsPanel boatRegistrationsPanel;
|
||||
|
||||
public RegattaLogBoatRegistrationDialog(String boatClass, SailingServiceWriteAsync sailingServiceWrite, final UserService userService,
|
||||
Refresher<BoatDTO> boatsRefresher, StringMessages stringMessages, ErrorReporter errorReporter, boolean editable, String leaderboardName,
|
||||
boolean canBoatsOfCompetitorsChangePerRace, com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback<Set<BoatDTO>> callback) {
|
||||
public RegattaLogBoatRegistrationDialog(String boatClass, SailingServiceWriteAsync sailingServiceWrite,
|
||||
final UserService userService, Refresher<BoatDTO> boatsRefresher,
|
||||
Refresher<CompetitorDTO> competitorsRefresher, StringMessages stringMessages, ErrorReporter errorReporter,
|
||||
boolean editable, String leaderboardName, boolean canBoatsOfCompetitorsChangePerRace,
|
||||
com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback<Set<BoatDTO>> callback) {
|
||||
super(stringMessages.registerBoats(), /* messsage */null, stringMessages.save(), stringMessages.cancel(),
|
||||
/* validator */ null, callback);
|
||||
this.errorReporter = errorReporter;
|
||||
@@ -33,8 +36,10 @@ public class RegattaLogBoatRegistrationDialog extends DataEntryDialog<Set<BoatDT
|
||||
this.sailingService = sailingServiceWrite;
|
||||
this.leaderboardName = leaderboardName;
|
||||
this.canBoatsOfCompetitorsChangePerRace = canBoatsOfCompetitorsChangePerRace;
|
||||
this.boatRegistrationsPanel = new BoatRegistrationsPanel(sailingServiceWrite, userService, boatsRefresher, stringMessages, errorReporter, editable,
|
||||
leaderboardName, canBoatsOfCompetitorsChangePerRace, boatClass, ()->validateAndUpdate(), getRegisteredBoatsRetriever(), /* restrictPoolToLeaderboard */ false);
|
||||
this.boatRegistrationsPanel = new BoatRegistrationsPanel(sailingServiceWrite, userService, boatsRefresher,
|
||||
competitorsRefresher, stringMessages, errorReporter, editable, leaderboardName,
|
||||
canBoatsOfCompetitorsChangePerRace, boatClass, () -> validateAndUpdate(), getRegisteredBoatsRetriever(),
|
||||
/* restrictPoolToLeaderboard */ false);
|
||||
}
|
||||
|
||||
protected Consumer<AsyncCallback<Collection<BoatDTO>>> getRegisteredBoatsRetriever() {
|
||||
|
||||
+1
-1
@@ -1003,7 +1003,7 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
|
||||
String boatClassName = regatta.boatClass.getName();
|
||||
|
||||
new RegattaLogBoatRegistrationDialog(boatClassName, sailingServiceWrite, userService, boatsRefresher,
|
||||
stringMessages, errorReporter, /* editable */true, t.getName(),
|
||||
competitorsRefresher, stringMessages, errorReporter, /* editable */true, t.getName(),
|
||||
t.canBoatsOfCompetitorsChangePerRace, new DialogCallback<Set<BoatDTO>>() {
|
||||
@Override
|
||||
public void ok(Set<BoatDTO> registeredBoats) {
|
||||
|
||||
+24
-6
@@ -121,7 +121,7 @@ public abstract class AbstractRefresher<T> implements Refresher<T> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addIfNotContainedElseReplace(T dto) {
|
||||
public void addIfNotContained(T dto) {
|
||||
if (dto != null && dtos != null) {
|
||||
final int index = dtos.indexOf(dto);
|
||||
if (index != -1) {
|
||||
@@ -132,6 +132,22 @@ public abstract class AbstractRefresher<T> implements Refresher<T> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addIfNotContainedElseReplace(T oldDto, T newDto) {
|
||||
if (dtos != null) {
|
||||
final int index = dtos.indexOf(oldDto);
|
||||
if (index != -1) {
|
||||
if (newDto == null) {
|
||||
dtos.remove(index);
|
||||
} else {
|
||||
dtos.set(index, newDto);
|
||||
}
|
||||
} else {
|
||||
add(newDto);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(T dto) {
|
||||
if (dto != null && dtos != null) {
|
||||
@@ -141,17 +157,19 @@ public abstract class AbstractRefresher<T> implements Refresher<T> {
|
||||
|
||||
@Override
|
||||
public void remove(T dto) {
|
||||
if (dto != null) {
|
||||
if (dto != null && dtos != null) {
|
||||
dtos.remove(dto);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeAll(Predicate<T> filter) {
|
||||
for (final Iterator<T> i=dtos.iterator(); i.hasNext(); ) {
|
||||
final T dto = i.next();
|
||||
if (filter.test(dto)) {
|
||||
i.remove();
|
||||
if (dtos != null) {
|
||||
for (final Iterator<T> i=dtos.iterator(); i.hasNext(); ) {
|
||||
final T dto = i.next();
|
||||
if (filter.test(dto)) {
|
||||
i.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+9
-2
@@ -82,11 +82,18 @@ public interface Refresher<T> {
|
||||
void remove(T dto);
|
||||
|
||||
/**
|
||||
* Like {@link #add(Object)}, but an {@link Object#equals(Object) equal} DTO will be replaced by {@code dto} if
|
||||
* Like {@link #add(Object)}, but an {@link Object#equals(Object) equal} original DTO will be replaced by {@code newDto} if
|
||||
* found in the list of DTOs known to this refresher. This will only take place if the DTO list already exists,
|
||||
* indicating that it has been requested before.
|
||||
*/
|
||||
void addIfNotContainedElseReplace(T dto);
|
||||
void addIfNotContainedElseReplace(T oldDto, T newDto);
|
||||
|
||||
/**
|
||||
* Like {@link #add(Object)}, but an {@link Object#equals(Object) equal} DTO will be ignored if
|
||||
* found in the list of DTOs known to this refresher. This will only take place if the DTO list already exists,
|
||||
* indicating that it has been requested before.
|
||||
*/
|
||||
void addIfNotContained(T dto);
|
||||
|
||||
/**
|
||||
* {@link #remove(Object) Removes} all objects from this refresher that {@link Predicate#test(Object) are matched) by the
|
||||
|
||||
Reference in New Issue
Block a user