mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-05 03:43:52 +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();
|
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();
|
BoatDTO getBoat();
|
||||||
|
|
||||||
BoatClassDTO getBoatClass();
|
BoatClassDTO getBoatClass();
|
||||||
@@ -45,5 +50,5 @@ public interface CompetitorDTO extends Serializable, MappableToDevice {
|
|||||||
Double getTimeOnTimeFactor();
|
Double getTimeOnTimeFactor();
|
||||||
|
|
||||||
Duration getTimeOnDistanceAllowancePerNauticalMile();
|
Duration getTimeOnDistanceAllowancePerNauticalMile();
|
||||||
|
|
||||||
}
|
}
|
||||||
+12
-4
@@ -181,22 +181,30 @@ public class CompetitorDTOImpl extends NamedDTO implements CompetitorDTO, Serial
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Color getColor() {
|
public Color getColor() {
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getSearchTag() {
|
public String getSearchTag() {
|
||||||
return searchTag;
|
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() {
|
public String getEmail() {
|
||||||
return email;
|
return email;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String email(){
|
|
||||||
return email;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasEmail() {
|
public boolean hasEmail() {
|
||||||
return email != null && !email.isEmpty();
|
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");
|
" 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
|
@Override
|
||||||
public String getImageURL() {
|
public String getImageURL() {
|
||||||
throw new RuntimeException("Internal error. Objects of type "+PreviousCompetitorDTOImpl.class.getName()+
|
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>() {
|
final CompetitorEditDialog dialog = new CompetitorEditDialog(stringMessages, originalCompetitor, new DialogCallback<CompetitorDTO>() {
|
||||||
@Override
|
@Override
|
||||||
public void ok(final CompetitorDTO competitor) {
|
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
|
@Override
|
||||||
public void onFailure(Throwable caught) {
|
public void onFailure(Throwable caught) {
|
||||||
errorReporter.reportError("Error trying to update competitor: " + caught.getMessage());
|
errorReporter.reportError("Error trying to update competitor: " + caught.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(CompetitorDTO updatedCompetitor) {
|
public void onSuccess(List<CompetitorDTO> updatedCompetitor) {
|
||||||
|
assert updatedCompetitor.size() == 1;
|
||||||
//only reload selected competitors reloading with refreshCompetitorList(leaderboardName)
|
//only reload selected competitors reloading with refreshCompetitorList(leaderboardName)
|
||||||
//would not work in case the list is not based on a leaderboard e.g. AbstractCompetitorRegistrationDialog
|
//would not work in case the list is not based on a leaderboard e.g. AbstractCompetitorRegistrationDialog
|
||||||
int editedCompetitorIndex = getFilterField().indexOf(originalCompetitor);
|
int editedCompetitorIndex = getFilterField().indexOf(originalCompetitor);
|
||||||
getFilterField().remove(originalCompetitor);
|
getFilterField().remove(originalCompetitor);
|
||||||
if (editedCompetitorIndex >= 0){
|
if (editedCompetitorIndex >= 0){
|
||||||
getFilterField().add(editedCompetitorIndex, updatedCompetitor);
|
getFilterField().add(editedCompetitorIndex, updatedCompetitor.iterator().next());
|
||||||
} else {
|
} else {
|
||||||
//in case competitor was not present --> not edit, but create
|
//in case competitor was not present --> not edit, but create
|
||||||
getFilterField().add(updatedCompetitor);
|
getFilterField().add(updatedCompetitor.iterator().next());
|
||||||
}
|
}
|
||||||
getDataProvider().refresh();
|
getDataProvider().refresh();
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-2
@@ -1,5 +1,6 @@
|
|||||||
package com.sap.sailing.gwt.ui.adminconsole;
|
package com.sap.sailing.gwt.ui.adminconsole;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
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;
|
||||||
import com.sap.sse.common.Util.Pair;
|
import com.sap.sse.common.Util.Pair;
|
||||||
import com.sap.sse.gwt.client.ErrorReporter;
|
import com.sap.sse.gwt.client.ErrorReporter;
|
||||||
|
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
|
||||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
|
import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -46,6 +48,24 @@ public class ImportCompetitorCallback implements DialogCallback<Pair<Map<Competi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void ok(final Pair<Map<CompetitorDescriptor, CompetitorDTO>, String> competitorsForRegisteringAndSearchTag) {
|
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()).
|
registerCompetitorsAfterSaving(competitorsForRegisteringAndSearchTag.getA().entrySet().stream().filter((e->e.getValue() == null)).map(e->e.getKey()).
|
||||||
collect(Collectors.toList()),
|
collect(Collectors.toList()),
|
||||||
competitorsForRegisteringAndSearchTag.getA().values(), competitorsForRegisteringAndSearchTag.getB());
|
competitorsForRegisteringAndSearchTag.getA().values(), competitorsForRegisteringAndSearchTag.getB());
|
||||||
@@ -53,8 +73,6 @@ public class ImportCompetitorCallback implements DialogCallback<Pair<Map<Competi
|
|||||||
|
|
||||||
private void registerCompetitorsAfterSaving(final List<CompetitorDescriptor> competitorsForSaving,
|
private void registerCompetitorsAfterSaving(final List<CompetitorDescriptor> competitorsForSaving,
|
||||||
final Iterable<CompetitorDTO> competitorsForRegistration, String searchTag) {
|
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>>() {
|
sailingService.addCompetitors(competitorsForSaving, searchTag, new AsyncCallback<List<CompetitorDTO>>() {
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Throwable caught) {
|
public void onFailure(Throwable caught) {
|
||||||
|
|||||||
+1
-1
@@ -445,7 +445,7 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
|
|||||||
|
|
||||||
Iterable<CompetitorDTO> getCompetitorsOfLeaderboard(String leaderboardName);
|
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;
|
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 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,
|
void addCompetitors(List<CompetitorDescriptor> competitorsForSaving, String searchTag,
|
||||||
AsyncCallback<List<CompetitorDTO>> asyncCallback);
|
AsyncCallback<List<CompetitorDTO>> asyncCallback);
|
||||||
|
|||||||
+33
-28
@@ -4802,35 +4802,40 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompetitorDTO addOrUpdateCompetitor(CompetitorDTO competitor) throws URISyntaxException {
|
public List<CompetitorDTO> addOrUpdateCompetitor(List<CompetitorDTO> competitors) throws URISyntaxException {
|
||||||
Competitor existingCompetitor = getService().getCompetitorStore().getExistingCompetitorByIdAsString(competitor.getIdAsString());
|
final List<CompetitorDTO> results = new ArrayList<>();
|
||||||
Nationality nationality = (competitor.getThreeLetterIocCountryCode() == null || competitor.getThreeLetterIocCountryCode().isEmpty()) ? null :
|
for (final CompetitorDTO competitor : competitors) {
|
||||||
getBaseDomainFactory().getOrCreateNationality(competitor.getThreeLetterIocCountryCode());
|
Competitor existingCompetitor = getService().getCompetitorStore().getExistingCompetitorByIdAsString(competitor.getIdAsString());
|
||||||
final CompetitorDTO result;
|
Nationality nationality = (competitor.getThreeLetterIocCountryCode() == null
|
||||||
// new competitor
|
|| competitor.getThreeLetterIocCountryCode().isEmpty()) ? null
|
||||||
if (competitor.getIdAsString() == null || competitor.getIdAsString().isEmpty() || existingCompetitor == null) {
|
: getBaseDomainFactory().getOrCreateNationality(competitor.getThreeLetterIocCountryCode());
|
||||||
BoatClass boatClass = getBaseDomainFactory().getOrCreateBoatClass(competitor.getBoatClass().getName());
|
final CompetitorDTO result;
|
||||||
DynamicPerson sailor = new PersonImpl(competitor.getName(), nationality, null, null);
|
// new competitor
|
||||||
DynamicTeam team = new TeamImpl(competitor.getName() + " team", Collections.singleton(sailor), null);
|
if (competitor.getIdAsString() == null || competitor.getIdAsString().isEmpty() || existingCompetitor == null) {
|
||||||
DynamicBoat boat = new BoatImpl(competitor.getName() + " boat", boatClass, competitor.getSailID());
|
BoatClass boatClass = getBaseDomainFactory().getOrCreateBoatClass(competitor.getBoatClass().getName());
|
||||||
result = getBaseDomainFactory().convertToCompetitorDTO(
|
DynamicPerson sailor = new PersonImpl(competitor.getName(), nationality, null, null);
|
||||||
getBaseDomainFactory().getOrCreateCompetitor(UUID.randomUUID(), competitor.getName(),
|
DynamicTeam team = new TeamImpl(competitor.getName() + " team", Collections.singleton(sailor), null);
|
||||||
competitor.getColor(), competitor.getEmail(),
|
DynamicBoat boat = new BoatImpl(competitor.getName() + " boat", boatClass, competitor.getSailID());
|
||||||
competitor.getFlagImageURL() == null ? null : new URI(competitor.getFlagImageURL()), team, boat,
|
result = getBaseDomainFactory().convertToCompetitorDTO(
|
||||||
competitor.getTimeOnTimeFactor(),
|
getBaseDomainFactory().getOrCreateCompetitor(UUID.randomUUID(), competitor.getName(),
|
||||||
competitor.getTimeOnDistanceAllowancePerNauticalMile(), competitor.getSearchTag()));
|
competitor.getColor(), competitor.getEmail(),
|
||||||
} else {
|
competitor.getFlagImageURL() == null ? null : new URI(competitor.getFlagImageURL()), team, boat,
|
||||||
result = getBaseDomainFactory().convertToCompetitorDTO(
|
competitor.getTimeOnTimeFactor(),
|
||||||
getService().apply(
|
competitor.getTimeOnDistanceAllowancePerNauticalMile(), competitor.getSearchTag()));
|
||||||
new UpdateCompetitor(competitor.getIdAsString(), competitor.getName(), competitor
|
} else {
|
||||||
.getColor(), competitor.getEmail(), competitor.getSailID(), nationality,
|
result = getBaseDomainFactory().convertToCompetitorDTO(
|
||||||
competitor.getImageURL() == null ? null : new URI(competitor.getImageURL()),
|
getService().apply(
|
||||||
competitor.getFlagImageURL() == null ? null : new URI(competitor.getFlagImageURL()),
|
new UpdateCompetitor(competitor.getIdAsString(), competitor.getName(), competitor
|
||||||
competitor.getTimeOnTimeFactor(),
|
.getColor(), competitor.getEmail(), competitor.getSailID(), nationality,
|
||||||
competitor.getTimeOnDistanceAllowancePerNauticalMile(),
|
competitor.getImageURL() == null ? null : new URI(competitor.getImageURL()),
|
||||||
competitor.getSearchTag())));
|
competitor.getFlagImageURL() == null ? null : new URI(competitor.getFlagImageURL()),
|
||||||
|
competitor.getTimeOnTimeFactor(),
|
||||||
|
competitor.getTimeOnDistanceAllowancePerNauticalMile(),
|
||||||
|
competitor.getSearchTag())));
|
||||||
|
}
|
||||||
|
results.add(result);
|
||||||
}
|
}
|
||||||
return result;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in new issue
Block a user