diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorPanel.java index c161bfec7e3..db1eeaeb14c 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorPanel.java @@ -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() { - @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(); 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 competitors) { + List serializableSingletonList = new ArrayList(); + Util.addAll(competitors, serializableSingletonList); + sailingService.allowCompetitorResetToDefaults(serializableSingletonList, new AsyncCallback() { + @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() { @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java index ec5f80dec65..962bd9320c0 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java @@ -329,5 +329,5 @@ public interface SailingService extends RemoteService { CompetitorDTO updateCompetitor(CompetitorDTO competitor); - void allowCompetitorResetToDefaults(CompetitorDTO competitor); + void allowCompetitorResetToDefaults(Iterable competitors); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java index 6a68efffe2d..b958929e18c 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java @@ -451,7 +451,7 @@ public interface SailingServiceAsync { void updateCompetitor(CompetitorDTO competitor, AsyncCallback asyncCallback); - void allowCompetitorResetToDefaults(CompetitorDTO competitor, AsyncCallback asyncCallback); + void allowCompetitorResetToDefaults(Iterable competitors, AsyncCallback asyncCallback); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java index 1748042b4be..b23bd5cb8d9 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java @@ -826,4 +826,6 @@ public interface StringMessages extends Messages { String filterCompetitors(); String editCompetitor(); String pleaseEnterASailNumber(); + String successfullyAllowedCompetitorReset(String names); + String allowReload(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties index 29978dc337b..7ad47cdeb40 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties @@ -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 \ No newline at end of file +pleaseEnterASailNumber=Please enter a sail number +successfullyAllowedCompetitorReset=Successfully allowed reload of competitor(s) {0}. +allowReload=Allow reload \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties index 6e95b60226c..4986cbf327e 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties @@ -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 \ No newline at end of file +pleaseEnterASailNumber=Bitte Segelnummer eingeben +successfullyAllowedCompetitorReset=Aktualisierung der Daten zu Teilnehmer(n) {0} erfolgreich ermöglicht. +allowReload=Aktualisierung ermöglichen \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 70591d0091b..1ee3ac38019 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -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 competitors) { + List competitorIdsAsStrings = new ArrayList(); + for (CompetitorDTO competitor : competitors) { + competitorIdsAsStrings.add(competitor.getIdAsString()); + } + getService().apply(new AllowCompetitorResetToDefaults(competitorIdsAsStrings)); } } \ No newline at end of file diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/CompetitorReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/CompetitorReplicationTest.java index c7733bc98d9..bc889ab847e 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/CompetitorReplicationTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/CompetitorReplicationTest.java @@ -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()); diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AllowCompetitorResetToDefaults.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AllowCompetitorResetToDefaults.java index 855c03849f2..4b619130b04 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AllowCompetitorResetToDefaults.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AllowCompetitorResetToDefaults.java @@ -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 { private static final long serialVersionUID = 5133140671156755328L; - private final String competitorIdAsString; + private final Iterable competitorIdsAsStrings; - public AllowCompetitorResetToDefaults(String competitorIdAsString) { + public AllowCompetitorResetToDefaults(Iterable competitorIdsAsStrings) { super(); - this.competitorIdAsString = competitorIdAsString; + final ArrayList 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; }