mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-04 03:13:49 +00:00
working implementation for importing competitors into race/regatta logs
Change-Id: I5b4b3b8dfa0b07844585fec16a02feb96800bae3
This commit is contained in:
1 parent
05ab97bc57
commit
65313c591d
7 files changed
+104
-57
No files matched your search
+61
-2
@@ -7,6 +7,7 @@ import com.google.gwt.core.client.Callback;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.CaptionPanel;
|
||||
import com.google.gwt.user.client.ui.CheckBox;
|
||||
@@ -15,16 +16,21 @@ 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.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTOImpl;
|
||||
import com.sap.sailing.gwt.ui.adminconsole.CompetitorImportProviderSelectionDialog.MatchImportedCompetitorsDialogFactory;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.BusyDisplay;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDialog<Set<CompetitorDTO>> {
|
||||
public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDialog<Set<CompetitorDTO>> implements BusyDisplay {
|
||||
protected CompetitorTableWrapper<RefreshableMultiSelectionModel<CompetitorDTO>> allCompetitorsTable;
|
||||
protected CompetitorTableWrapper<RefreshableMultiSelectionModel<CompetitorDTO>> registeredCompetitorsTable;
|
||||
protected final boolean filterByLeaderBoardInitially = false;
|
||||
@@ -40,6 +46,8 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
|
||||
private String boatClass;
|
||||
|
||||
protected String leaderboardName;
|
||||
private final BusyIndicator busyIndicator;
|
||||
private final ImportCompetitorCallback importCompetitorCallback;
|
||||
|
||||
/**
|
||||
* @param boatClass
|
||||
@@ -47,7 +55,7 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
|
||||
* <code>boatClass</code> parameter is <code>null</code>, if you want to edit a competitor or there is no
|
||||
* boat class for the new competitor.
|
||||
*/
|
||||
public AbstractCompetitorRegistrationsDialog(final SailingServiceAsync sailingService,
|
||||
protected AbstractCompetitorRegistrationsDialog(final SailingServiceAsync sailingService,
|
||||
final StringMessages stringMessages, final ErrorReporter errorReporter, boolean editable,
|
||||
DialogCallback<Set<CompetitorDTO>> callback, String leaderboardName, String boatClass,
|
||||
com.sap.sse.gwt.client.dialog.DataEntryDialog.Validator<Set<CompetitorDTO>> validator) {
|
||||
@@ -58,6 +66,8 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
|
||||
this.editable = editable;
|
||||
this.leaderboardName = leaderboardName;
|
||||
this.boatClass = boatClass;
|
||||
this.busyIndicator = new SimpleBusyIndicator();
|
||||
this.importCompetitorCallback = new RaceOrRegattaImportCompetitorCallback(this, sailingService, errorReporter, stringMessages);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -82,6 +92,29 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
|
||||
helper.inviteCompetitors(competitors, leaderboardName);
|
||||
}
|
||||
});
|
||||
final Button competitorImportButton = new Button(stringMessages.importCompetitors());
|
||||
competitorImportButton.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
sailingService.getCompetitorProviderNames(new AsyncCallback<Iterable<String>>() {
|
||||
@Override
|
||||
public void onSuccess(Iterable<String> providerNames) {
|
||||
MatchImportedCompetitorsDialogFactory matchCompetitorsDialogFactory = getMatchCompetitorsDialogFactory(
|
||||
sailingService, stringMessages, errorReporter);
|
||||
CompetitorImportProviderSelectionDialog dialog = new CompetitorImportProviderSelectionDialog(
|
||||
matchCompetitorsDialogFactory, AbstractCompetitorRegistrationsDialog.this, providerNames, sailingService,
|
||||
stringMessages, errorReporter);
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter
|
||||
.reportError(stringMessages.errorLoadingCompetitorImportProviders(caught.getMessage()));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
final HorizontalPanel competitorRegistrationPanel = new HorizontalPanel();
|
||||
final CaptionPanel allCompetitorsPanel = new CaptionPanel(stringMessages.competitorPool());
|
||||
final CaptionPanel registeredCompetitorsPanel = new CaptionPanel(stringMessages.registeredCompetitors());
|
||||
@@ -116,6 +149,8 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
|
||||
competitorRegistrationPanel.add(allCompetitorsPanel);
|
||||
buttonPanel.add(addCompetitorButton);
|
||||
buttonPanel.add(inviteCompetitorsButton);
|
||||
buttonPanel.add(competitorImportButton);
|
||||
buttonPanel.add(busyIndicator);
|
||||
mainPanel.add(buttonPanel);
|
||||
showOnlyCompetitorsOfLogCheckBox = new CheckBox(stringMessages.showOnlyCompetitorsOfLog());
|
||||
showOnlyCompetitorsOfLogCheckBox.setValue(false);
|
||||
@@ -135,6 +170,25 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
|
||||
refreshCompetitors();
|
||||
return mainPanel;
|
||||
}
|
||||
|
||||
private MatchImportedCompetitorsDialogFactory getMatchCompetitorsDialogFactory(
|
||||
final SailingServiceAsync sailingService, final StringMessages stringMessages,
|
||||
final ErrorReporter errorReporter) {
|
||||
return new MatchImportedCompetitorsDialogFactory() {
|
||||
@Override
|
||||
public MatchImportedCompetitorsDialog createMatchImportedCompetitorsDialog(
|
||||
final Iterable<CompetitorDescriptor> competitorDescriptors,
|
||||
final Iterable<CompetitorDTO> competitors) {
|
||||
return new MatchImportedCompetitorsDialog(competitorDescriptors, competitors, stringMessages,
|
||||
sailingService, errorReporter, importCompetitorCallback);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBusy(boolean isBusy) {
|
||||
busyIndicator.setBusy(isBusy);
|
||||
}
|
||||
|
||||
public abstract void addAdditionalWidgets(FlowPanel mainPanel);
|
||||
|
||||
@@ -142,6 +196,11 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
|
||||
from.getFilterField().removeAll(toMove);
|
||||
to.getFilterField().addAll(toMove);
|
||||
}
|
||||
|
||||
protected void addImportedCompetitorsToRegisteredCompetitorsTableAndRemoveFromAllCompetitorsTable(Iterable<CompetitorDTO> competitorsImported) {
|
||||
allCompetitorsTable.getFilterField().removeAll(competitorsImported);
|
||||
registeredCompetitorsTable.getFilterField().addAll(competitorsImported);
|
||||
}
|
||||
|
||||
private void moveSelected(CompetitorTableWrapper<RefreshableMultiSelectionModel<CompetitorDTO>> from,
|
||||
CompetitorTableWrapper<RefreshableMultiSelectionModel<CompetitorDTO>> to) {
|
||||
|
||||
+2
-2
@@ -54,10 +54,10 @@ public class CompetitorImportProviderSelectionDialog extends DataEntryDialog<Com
|
||||
private final LinkedHashMap<String, Pair<String, String>> eventRegattaNamesByCompetitorListItem;
|
||||
|
||||
public CompetitorImportProviderSelectionDialog(MatchImportedCompetitorsDialogFactory matchCompetitorsDialogFactory,
|
||||
BusyDisplay busynessPanel, Iterable<String> competitorProviderNames, SailingServiceAsync sailingService,
|
||||
BusyDisplay busyDisplay, Iterable<String> competitorProviderNames, SailingServiceAsync sailingService,
|
||||
StringMessages stringMessages, ErrorReporter errorReporter) {
|
||||
super(stringMessages.importCompetitors(), null, stringMessages.ok(), stringMessages.cancel(), null,
|
||||
new Callback(matchCompetitorsDialogFactory, sailingService, busynessPanel, errorReporter,
|
||||
new Callback(matchCompetitorsDialogFactory, sailingService, busyDisplay, errorReporter,
|
||||
stringMessages));
|
||||
this.sailingService = sailingService;
|
||||
this.stringMessages = stringMessages;
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ public class CompetitorPanel extends SimplePanel implements BusyDisplay {
|
||||
final StringMessages stringMessages, final ErrorReporter errorReporter) {
|
||||
super();
|
||||
this.leaderboardName = leaderboardName;
|
||||
this.competitorTable = new CompetitorTableWrapper<>(sailingService, stringMessages, errorReporter, /* multiSelection */ true, /* enablePager */ false);
|
||||
this.competitorTable = new CompetitorTableWrapper<>(sailingService, stringMessages, errorReporter, /* multiSelection */ true, /* enablePager */ true);
|
||||
this.refreshableCompetitorSelectionModel = (RefreshableMultiSelectionModel<CompetitorDTO>) competitorTable.getSelectionModel();
|
||||
|
||||
busyIndicator = new SimpleBusyIndicator(false, 0.8f);
|
||||
|
||||
+1
-1
@@ -68,7 +68,7 @@ public class ImportCompetitorCallback implements DialogCallback<Pair<Map<Competi
|
||||
}));
|
||||
registerCompetitorsAfterSaving(competitorsForRegisteringAndSearchTag.getA().entrySet().stream().filter((e->e.getValue() == null)).map(e->e.getKey()).
|
||||
collect(Collectors.toList()),
|
||||
competitorsForRegisteringAndSearchTag.getA().values(), competitorsForRegisteringAndSearchTag.getB());
|
||||
competitorsForRegisteringAndSearchTag.getA().values().stream().filter(e->e!=null).collect(Collectors.toList()), competitorsForRegisteringAndSearchTag.getB());
|
||||
}
|
||||
|
||||
private void registerCompetitorsAfterSaving(final List<CompetitorDescriptor> competitorsForSaving,
|
||||
|
||||
-38
@@ -1,38 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
|
||||
public class RaceImportCompetitorCallback extends ImportCompetitorCallback {
|
||||
private final String leaderboardName;
|
||||
private final String raceColumnName;
|
||||
private final String fleetName;
|
||||
|
||||
public RaceImportCompetitorCallback(String leaderboardName, String raceColumnName, String fleetName,
|
||||
SailingServiceAsync sailingService, ErrorReporter errorReporter, StringMessages stringMessages) {
|
||||
super(sailingService, errorReporter, stringMessages);
|
||||
this.leaderboardName = leaderboardName;
|
||||
this.raceColumnName = raceColumnName;
|
||||
this.fleetName = fleetName;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCompetitors(Set<CompetitorDTO> competitors) {
|
||||
sailingService.setCompetitorRegistrationsInRaceLog(leaderboardName, raceColumnName, fleetName, competitors,
|
||||
new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError(stringMessages.couldNotSaveCompetitorRegistrations(caught.getMessage()));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
+16
-13
@@ -130,21 +130,24 @@ public class RaceLogCompetitorRegistrationDialog extends AbstractCompetitorRegis
|
||||
});
|
||||
}
|
||||
}
|
||||
new ParallelExecutionHolder(callbacksForFleetNames.values().toArray(new ParallelExecutionCallback<?>[0])) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
// if the data was gained completely then gray out specific rows
|
||||
grayOutRows();
|
||||
}
|
||||
if (!callbacksForFleetNames.isEmpty()) {
|
||||
new ParallelExecutionHolder(callbacksForFleetNames.values().toArray(new ParallelExecutionCallback<?>[0])) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
// if the data was gained completely then gray out specific rows
|
||||
grayOutRows();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleFailure(Throwable t) {
|
||||
errorReporter.reportError(
|
||||
"Could not load already registered competitors: " + t.getMessage());
|
||||
@Override
|
||||
protected void handleFailure(Throwable t) {
|
||||
errorReporter.reportError("Could not load already registered competitors: " + t.getMessage());
|
||||
}
|
||||
};
|
||||
for (final Entry<String, ParallelExecutionCallback<Collection<CompetitorDTO>>> fleetNameAndCallback : callbacksForFleetNames
|
||||
.entrySet()) {
|
||||
sailingService.getCompetitorRegistrationsForRace(leaderboardName, raceColumnName,
|
||||
fleetNameAndCallback.getKey(), fleetNameAndCallback.getValue());
|
||||
}
|
||||
};
|
||||
for (final Entry<String, ParallelExecutionCallback<Collection<CompetitorDTO>>> fleetNameAndCallback : callbacksForFleetNames.entrySet()) {
|
||||
sailingService.getCompetitorRegistrationsForRace(leaderboardName, raceColumnName, fleetNameAndCallback.getKey(), fleetNameAndCallback.getValue());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
|
||||
public class RaceOrRegattaImportCompetitorCallback extends ImportCompetitorCallback {
|
||||
private final AbstractCompetitorRegistrationsDialog registrationsDialog;
|
||||
|
||||
public RaceOrRegattaImportCompetitorCallback(AbstractCompetitorRegistrationsDialog registrationsDialog, SailingServiceAsync sailingService, ErrorReporter errorReporter,
|
||||
StringMessages stringMessages) {
|
||||
super(sailingService, errorReporter, stringMessages);
|
||||
this.registrationsDialog = registrationsDialog;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCompetitors(Set<CompetitorDTO> competitors) {
|
||||
registrationsDialog.addImportedCompetitorsToRegisteredCompetitorsTableAndRemoveFromAllCompetitorsTable(competitors);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user