working implementation for importing competitors into race/regatta logs

Change-Id: I5b4b3b8dfa0b07844585fec16a02feb96800bae3
This commit is contained in:
Axel Uhl committed 2016-12-19 18:29:25 +01:00
1 parent 05ab97bc57
commit 65313c591d
7 files changed
+104 -57

No files matched your search

@@ -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) {
@@ -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;
@@ -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);
@@ -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,
@@ -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()));
}
});
}
}
@@ -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;
}
@@ -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);
}
}