mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-04 03:13:49 +00:00
updating existing competitors' search tag during import
Change-Id: Ifd29082673f148d742fd5de4a3e318e3c1ba956d
This commit is contained in:
1 parent
2074d43e06
commit
de7baff50f
8 files changed
+86
-41
No files matched your search
+6
-1
@@ -20,6 +20,11 @@ public interface CompetitorDTO extends Serializable, MappableToDevice {
|
||||
|
||||
String getSearchTag();
|
||||
|
||||
/**
|
||||
* If the {@code searchTag} is not contained in {@link #getSearchTag()}, appends it to the search tag, separated by a space character
|
||||
*/
|
||||
void addToSearchTag(String searchTag);
|
||||
|
||||
BoatDTO getBoat();
|
||||
|
||||
BoatClassDTO getBoatClass();
|
||||
@@ -45,5 +50,5 @@ public interface CompetitorDTO extends Serializable, MappableToDevice {
|
||||
Double getTimeOnTimeFactor();
|
||||
|
||||
Duration getTimeOnDistanceAllowancePerNauticalMile();
|
||||
|
||||
|
||||
}
|
||||
+12
-4
@@ -181,22 +181,30 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color getColor() {
|
||||
return color;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSearchTag() {
|
||||
return searchTag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addToSearchTag(String searchTag) {
|
||||
if (this.searchTag == null) {
|
||||
this.searchTag = searchTag;
|
||||
} else if (!this.searchTag.contains(searchTag)) {
|
||||
this.searchTag += " "+searchTag;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public String email(){
|
||||
return email;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasEmail() {
|
||||
return email != null && !email.isEmpty();
|
||||
|
||||
+6
@@ -112,6 +112,12 @@ public class PreviousCompetitorDTOImpl implements CompetitorDTO {
|
||||
" need to be replaced by an object of "+CompetitorDTOImpl.class.getName()+" after deserialization");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addToSearchTag(String searchTag) {
|
||||
throw new RuntimeException("Internal error. Objects of type "+PreviousCompetitorDTOImpl.class.getName()+
|
||||
" need to be replaced by an object of "+CompetitorDTOImpl.class.getName()+" after deserialization");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImageURL() {
|
||||
throw new RuntimeException("Internal error. Objects of type "+PreviousCompetitorDTOImpl.class.getName()+
|
||||
|
||||
+7
-4
@@ -333,23 +333,26 @@ public class CompetitorTableWrapper<S extends RefreshableSelectionModel<Competit
|
||||
final CompetitorEditDialog dialog = new CompetitorEditDialog(stringMessages, originalCompetitor, new DialogCallback<CompetitorDTO>() {
|
||||
@Override
|
||||
public void ok(final CompetitorDTO competitor) {
|
||||
sailingService.addOrUpdateCompetitor(competitor, new AsyncCallback<CompetitorDTO>() {
|
||||
final List<CompetitorDTO> competitors = new ArrayList<>();
|
||||
competitors.add(competitor);
|
||||
sailingService.addOrUpdateCompetitor(competitors, new AsyncCallback<List<CompetitorDTO>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Error trying to update competitor: " + caught.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(CompetitorDTO updatedCompetitor) {
|
||||
public void onSuccess(List<CompetitorDTO> updatedCompetitor) {
|
||||
assert updatedCompetitor.size() == 1;
|
||||
//only reload selected competitors reloading with refreshCompetitorList(leaderboardName)
|
||||
//would not work in case the list is not based on a leaderboard e.g. AbstractCompetitorRegistrationDialog
|
||||
int editedCompetitorIndex = getFilterField().indexOf(originalCompetitor);
|
||||
getFilterField().remove(originalCompetitor);
|
||||
if (editedCompetitorIndex >= 0){
|
||||
getFilterField().add(editedCompetitorIndex, updatedCompetitor);
|
||||
getFilterField().add(editedCompetitorIndex, updatedCompetitor.iterator().next());
|
||||
} else {
|
||||
//in case competitor was not present --> not edit, but create
|
||||
getFilterField().add(updatedCompetitor);
|
||||
getFilterField().add(updatedCompetitor.iterator().next());
|
||||
}
|
||||
getDataProvider().refresh();
|
||||
}
|
||||
|
||||
+20
-2
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -14,6 +15,7 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
|
||||
|
||||
/**
|
||||
@@ -46,6 +48,24 @@ public class ImportCompetitorCallback implements DialogCallback<Pair<Map<Competi
|
||||
|
||||
@Override
|
||||
public void ok(final Pair<Map<CompetitorDescriptor, CompetitorDTO>, String> competitorsForRegisteringAndSearchTag) {
|
||||
final Set<CompetitorDTO> existingCompetitorsSelected = new HashSet<>();
|
||||
for (final CompetitorDTO existingCompetitor : competitorsForRegisteringAndSearchTag.getA().values()) {
|
||||
if (existingCompetitor != null) {
|
||||
existingCompetitor.addToSearchTag(competitorsForRegisteringAndSearchTag.getB());
|
||||
existingCompetitorsSelected.add(existingCompetitor);
|
||||
}
|
||||
}
|
||||
sailingService.addOrUpdateCompetitor(new ArrayList<>(existingCompetitorsSelected), new MarkedAsyncCallback<>(
|
||||
new AsyncCallback<List<CompetitorDTO>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError(caught.getMessage());
|
||||
}
|
||||
@Override
|
||||
public void onSuccess(List<CompetitorDTO> result) {
|
||||
// TODO trigger an update of any client-side competitor display
|
||||
}
|
||||
}));
|
||||
registerCompetitorsAfterSaving(competitorsForRegisteringAndSearchTag.getA().entrySet().stream().filter((e->e.getValue() == null)).map(e->e.getKey()).
|
||||
collect(Collectors.toList()),
|
||||
competitorsForRegisteringAndSearchTag.getA().values(), competitorsForRegisteringAndSearchTag.getB());
|
||||
@@ -53,8 +73,6 @@ public class ImportCompetitorCallback implements DialogCallback<Pair<Map<Competi
|
||||
|
||||
private void registerCompetitorsAfterSaving(final List<CompetitorDescriptor> competitorsForSaving,
|
||||
final Iterable<CompetitorDTO> competitorsForRegistration, String searchTag) {
|
||||
// TODO for those competitors that already exist, update their search tag accordingly, using
|
||||
// sailingService.addOrUpdateCompetitor(competitor, asyncCallback);
|
||||
sailingService.addCompetitors(competitorsForSaving, searchTag, new AsyncCallback<List<CompetitorDTO>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
|
||||
+1
-1
@@ -445,7 +445,7 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
|
||||
|
||||
Iterable<CompetitorDTO> getCompetitorsOfLeaderboard(String leaderboardName);
|
||||
|
||||
CompetitorDTO addOrUpdateCompetitor(CompetitorDTO competitor) throws Exception;
|
||||
List<CompetitorDTO> addOrUpdateCompetitor(List<CompetitorDTO> competitors) throws Exception;
|
||||
|
||||
List<CompetitorDTO> addCompetitors(List<CompetitorDescriptor> competitorsForSaving, String searchTag) throws Exception;
|
||||
|
||||
|
||||
+1
-1
@@ -596,7 +596,7 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan
|
||||
|
||||
void getCompetitorsOfLeaderboard(String leaderboardName, AsyncCallback<Iterable<CompetitorDTO>> asyncCallback);
|
||||
|
||||
void addOrUpdateCompetitor(CompetitorDTO competitor, AsyncCallback<CompetitorDTO> asyncCallback);
|
||||
void addOrUpdateCompetitor(List<CompetitorDTO> competitors, AsyncCallback<List<CompetitorDTO>> asyncCallback);
|
||||
|
||||
void addCompetitors(List<CompetitorDescriptor> competitorsForSaving, String searchTag,
|
||||
AsyncCallback<List<CompetitorDTO>> asyncCallback);
|
||||
|
||||
+33
-28
@@ -4802,35 +4802,40 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompetitorDTO addOrUpdateCompetitor(CompetitorDTO competitor) throws URISyntaxException {
|
||||
Competitor existingCompetitor = getService().getCompetitorStore().getExistingCompetitorByIdAsString(competitor.getIdAsString());
|
||||
Nationality nationality = (competitor.getThreeLetterIocCountryCode() == null || competitor.getThreeLetterIocCountryCode().isEmpty()) ? null :
|
||||
getBaseDomainFactory().getOrCreateNationality(competitor.getThreeLetterIocCountryCode());
|
||||
final CompetitorDTO result;
|
||||
// new competitor
|
||||
if (competitor.getIdAsString() == null || competitor.getIdAsString().isEmpty() || existingCompetitor == null) {
|
||||
BoatClass boatClass = getBaseDomainFactory().getOrCreateBoatClass(competitor.getBoatClass().getName());
|
||||
DynamicPerson sailor = new PersonImpl(competitor.getName(), nationality, null, null);
|
||||
DynamicTeam team = new TeamImpl(competitor.getName() + " team", Collections.singleton(sailor), null);
|
||||
DynamicBoat boat = new BoatImpl(competitor.getName() + " boat", boatClass, competitor.getSailID());
|
||||
result = getBaseDomainFactory().convertToCompetitorDTO(
|
||||
getBaseDomainFactory().getOrCreateCompetitor(UUID.randomUUID(), competitor.getName(),
|
||||
competitor.getColor(), competitor.getEmail(),
|
||||
competitor.getFlagImageURL() == null ? null : new URI(competitor.getFlagImageURL()), team, boat,
|
||||
competitor.getTimeOnTimeFactor(),
|
||||
competitor.getTimeOnDistanceAllowancePerNauticalMile(), competitor.getSearchTag()));
|
||||
} else {
|
||||
result = getBaseDomainFactory().convertToCompetitorDTO(
|
||||
getService().apply(
|
||||
new UpdateCompetitor(competitor.getIdAsString(), competitor.getName(), competitor
|
||||
.getColor(), competitor.getEmail(), competitor.getSailID(), nationality,
|
||||
competitor.getImageURL() == null ? null : new URI(competitor.getImageURL()),
|
||||
competitor.getFlagImageURL() == null ? null : new URI(competitor.getFlagImageURL()),
|
||||
competitor.getTimeOnTimeFactor(),
|
||||
competitor.getTimeOnDistanceAllowancePerNauticalMile(),
|
||||
competitor.getSearchTag())));
|
||||
public List<CompetitorDTO> addOrUpdateCompetitor(List<CompetitorDTO> competitors) throws URISyntaxException {
|
||||
final List<CompetitorDTO> results = new ArrayList<>();
|
||||
for (final CompetitorDTO competitor : competitors) {
|
||||
Competitor existingCompetitor = getService().getCompetitorStore().getExistingCompetitorByIdAsString(competitor.getIdAsString());
|
||||
Nationality nationality = (competitor.getThreeLetterIocCountryCode() == null
|
||||
|| competitor.getThreeLetterIocCountryCode().isEmpty()) ? null
|
||||
: getBaseDomainFactory().getOrCreateNationality(competitor.getThreeLetterIocCountryCode());
|
||||
final CompetitorDTO result;
|
||||
// new competitor
|
||||
if (competitor.getIdAsString() == null || competitor.getIdAsString().isEmpty() || existingCompetitor == null) {
|
||||
BoatClass boatClass = getBaseDomainFactory().getOrCreateBoatClass(competitor.getBoatClass().getName());
|
||||
DynamicPerson sailor = new PersonImpl(competitor.getName(), nationality, null, null);
|
||||
DynamicTeam team = new TeamImpl(competitor.getName() + " team", Collections.singleton(sailor), null);
|
||||
DynamicBoat boat = new BoatImpl(competitor.getName() + " boat", boatClass, competitor.getSailID());
|
||||
result = getBaseDomainFactory().convertToCompetitorDTO(
|
||||
getBaseDomainFactory().getOrCreateCompetitor(UUID.randomUUID(), competitor.getName(),
|
||||
competitor.getColor(), competitor.getEmail(),
|
||||
competitor.getFlagImageURL() == null ? null : new URI(competitor.getFlagImageURL()), team, boat,
|
||||
competitor.getTimeOnTimeFactor(),
|
||||
competitor.getTimeOnDistanceAllowancePerNauticalMile(), competitor.getSearchTag()));
|
||||
} else {
|
||||
result = getBaseDomainFactory().convertToCompetitorDTO(
|
||||
getService().apply(
|
||||
new UpdateCompetitor(competitor.getIdAsString(), competitor.getName(), competitor
|
||||
.getColor(), competitor.getEmail(), competitor.getSailID(), nationality,
|
||||
competitor.getImageURL() == null ? null : new URI(competitor.getImageURL()),
|
||||
competitor.getFlagImageURL() == null ? null : new URI(competitor.getFlagImageURL()),
|
||||
competitor.getTimeOnTimeFactor(),
|
||||
competitor.getTimeOnDistanceAllowancePerNauticalMile(),
|
||||
competitor.getSearchTag())));
|
||||
}
|
||||
results.add(result);
|
||||
}
|
||||
return result;
|
||||
return results;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in new issue
Block a user