allow resetting many competitors at once

This commit is contained in:
Axel Uhl
2013-11-07 22:04:42 +01:00
parent b20e674a52
commit 025f288a3b
9 changed files with 66 additions and 21 deletions
@@ -1,6 +1,7 @@
package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@@ -18,6 +19,7 @@ import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.TextColumn;
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.HorizontalPanel;
@@ -28,7 +30,10 @@ import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.MultiSelectionModel;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.gwt.ui.client.DataEntryDialog.DialogCallback;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.FlagImageResolver;
@@ -76,6 +81,14 @@ public class CompetitorPanel extends SimplePanel {
}
});
buttonPanel.add(refreshButton);
final Button allowReloadButton = new Button(stringMessages.allowReload());
allowReloadButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
allowUpdate(competitorSelectionModel.getSelectedSet());
}
});
buttonPanel.add(allowReloadButton);
competitorsPanel.add(buttonPanel);
// sailing events table
@@ -143,15 +156,10 @@ public class CompetitorPanel extends SimplePanel {
if (CompetitorConfigImagesBarCell.ACTION_EDIT.equals(value)) {
openEditCompetitorDialog(competitor);
} else if (CompetitorConfigImagesBarCell.ACTION_REFRESH.equals(value)) {
sailingService.allowCompetitorResetToDefaults(competitor, new AsyncCallback<Void>() {
@Override public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to allow resetting competitor "+competitor.getName()
+" to defaults: "+caught.getMessage());
}
@Override public void onSuccess(Void result) {}
});
allowUpdate(Collections.singleton(competitor));
}
}
});
HorizontalPanel filterBoxWithLabel = new HorizontalPanel();
@@ -176,9 +184,29 @@ public class CompetitorPanel extends SimplePanel {
competitorSelectionModel = new MultiSelectionModel<CompetitorDTO>();
competitorTable.setSelectionModel(competitorSelectionModel);
mainPanel.add(competitorTable);
competitorSelectionModel.addSelectionChangeHandler(new Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
allowReloadButton.setEnabled(!competitorSelectionModel.getSelectedSet().isEmpty());
}
});
allowReloadButton.setEnabled(!competitorSelectionModel.getSelectedSet().isEmpty());
}
private void allowUpdate(final Iterable<CompetitorDTO> competitors) {
List<CompetitorDTO> serializableSingletonList = new ArrayList<CompetitorDTO>();
Util.addAll(competitors, serializableSingletonList);
sailingService.allowCompetitorResetToDefaults(serializableSingletonList, new AsyncCallback<Void>() {
@Override public void onFailure(Throwable caught) {
errorReporter.reportError("Error trying to allow resetting competitors "+competitors
+" to defaults: "+caught.getMessage());
}
@Override public void onSuccess(Void result) {
Window.alert(stringMessages.successfullyAllowedCompetitorReset(competitors.toString()));
}
});
}
private void openEditCompetitorDialog(CompetitorDTO competitor) {
new CompetitorEditDialog(stringMessages, competitor, new DialogCallback<CompetitorDTO>() {
@Override
@@ -329,5 +329,5 @@ public interface SailingService extends RemoteService {
CompetitorDTO updateCompetitor(CompetitorDTO competitor);
void allowCompetitorResetToDefaults(CompetitorDTO competitor);
void allowCompetitorResetToDefaults(Iterable<CompetitorDTO> competitors);
}
@@ -451,7 +451,7 @@ public interface SailingServiceAsync {
void updateCompetitor(CompetitorDTO competitor, AsyncCallback<CompetitorDTO> asyncCallback);
void allowCompetitorResetToDefaults(CompetitorDTO competitor, AsyncCallback<Void> asyncCallback);
void allowCompetitorResetToDefaults(Iterable<CompetitorDTO> competitors, AsyncCallback<Void> asyncCallback);
}
@@ -826,4 +826,6 @@ public interface StringMessages extends Messages {
String filterCompetitors();
String editCompetitor();
String pleaseEnterASailNumber();
String successfullyAllowedCompetitorReset(String names);
String allowReload();
}
@@ -818,4 +818,6 @@ doYouReallyWantToRemoveCompetitors=Do you really want to remove the selected com
doYouReallyWantToRemoveCompetitor=Do you really want to remove competitor {0}?
filterCompetitors=Filter competitors by name, boat class or sail number
editCompetitor=Edit Competitor
pleaseEnterASailNumber=Please enter a sail number
pleaseEnterASailNumber=Please enter a sail number
successfullyAllowedCompetitorReset=Successfully allowed reload of competitor(s) {0}.
allowReload=Allow reload
@@ -814,4 +814,6 @@ doYouReallyWantToRemoveCompetitors=Möchten Sie wirlich die ausgewählten Teilne
doYouReallyWantToRemoveCompetitor=Möchten Sie wirklicn den Teilnehmer {0} entfernen?
filterCompetitors=Filtere Teilnehmer nach Name, Bootsklasse oder Segelnummer
editCompetitor=Teilnehmer bearbeiten
pleaseEnterASailNumber=Bitte Segelnummer eingeben
pleaseEnterASailNumber=Bitte Segelnummer eingeben
successfullyAllowedCompetitorReset=Aktualisierung der Daten zu Teilnehmer(n) {0} erfolgreich ermöglicht.
allowReload=Aktualisierung ermöglichen
@@ -3274,8 +3274,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
}
@Override
public void allowCompetitorResetToDefaults(CompetitorDTO competitor) {
getService().apply(new AllowCompetitorResetToDefaults(competitor.getIdAsString()));
public void allowCompetitorResetToDefaults(Iterable<CompetitorDTO> competitors) {
List<String> competitorIdsAsStrings = new ArrayList<String>();
for (CompetitorDTO competitor : competitors) {
competitorIdsAsStrings.add(competitor.getIdAsString());
}
getService().apply(new AllowCompetitorResetToDefaults(competitorIdsAsStrings));
}
}
@@ -106,7 +106,7 @@ public class CompetitorReplicationTest extends AbstractServerReplicationTest {
assertEquals(newCompetitorName, replicatedCompetitor.getName()); // expect in-place update of existing competitor in replica
// now allow for resetting to default through some event, such as receiving a GPS position
master.apply(new AllowCompetitorResetToDefaults(competitor.getId().toString()));
master.apply(new AllowCompetitorResetToDefaults(Collections.singleton(competitor.getId().toString())));
// modify the competitor on the master "from below" without an UpdateCompetitor operation, only locally:
master.getBaseDomainFactory().getCompetitorStore().updateCompetitor(competitor.getId().toString(), competitorName,
competitor.getBoat().getSailID(), competitor.getTeam().getNationality());
@@ -1,25 +1,32 @@
package com.sap.sailing.server.operationaltransformation;
import java.util.ArrayList;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorStore;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.RacingEventServiceOperation;
public class AllowCompetitorResetToDefaults extends AbstractRacingEventServiceOperation<Void> {
private static final long serialVersionUID = 5133140671156755328L;
private final String competitorIdAsString;
private final Iterable<String> competitorIdsAsStrings;
public AllowCompetitorResetToDefaults(String competitorIdAsString) {
public AllowCompetitorResetToDefaults(Iterable<String> competitorIdsAsStrings) {
super();
this.competitorIdAsString = competitorIdAsString;
final ArrayList<String> arrayList = new ArrayList<>(); // to guarantee serializability, even if an unmodifiable or singleton is passed
this.competitorIdsAsStrings = arrayList;
Util.addAll(competitorIdsAsStrings, arrayList);
}
@Override
public Void internalApplyTo(RacingEventService toState) throws Exception {
final CompetitorStore competitorStore = toState.getBaseDomainFactory().getCompetitorStore();
Competitor competitor = competitorStore.getExistingCompetitorByIdAsString(competitorIdAsString);
if (competitor != null) {
competitorStore.allowCompetitorResetToDefaults(competitor);
for (String competitorIdAsString : competitorIdsAsStrings) {
Competitor competitor = competitorStore.getExistingCompetitorByIdAsString(competitorIdAsString);
if (competitor != null) {
competitorStore.allowCompetitorResetToDefaults(competitor);
}
}
return null;
}