mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-06 12:23:55 +00:00
bug3246: added saving competitors and callback for registering to race
Change-Id: Ib391411f41c1bf68c45be57401189e216c89a74a
This commit is contained in:
1 parent
e7d1c8b60f
commit
a4dfe4fc38
14 files changed
+189
-16
No files matched your search
+2
@@ -125,6 +125,8 @@ public interface MongoObjectFactory {
|
||||
*/
|
||||
void storeCompetitor(Competitor competitor);
|
||||
|
||||
void storeCompetitors(Iterable<Competitor> competitor);
|
||||
|
||||
void removeAllCompetitors();
|
||||
|
||||
void removeCompetitor(Competitor competitor);
|
||||
|
||||
+13
@@ -2,6 +2,7 @@ package com.sap.sailing.domain.persistence.impl;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
@@ -1244,6 +1245,18 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
collection.update(query, entry, /* upsrt */true, /* multi */false, WriteConcern.SAFE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void storeCompetitors(Iterable<Competitor> competitors) {
|
||||
DBCollection collection = database.getCollection(CollectionNames.COMPETITORS.name());
|
||||
List<DBObject> competitorsDB = new ArrayList<>();
|
||||
for (Competitor competitor: competitors){
|
||||
JSONObject json = competitorSerializer.serialize(competitor);
|
||||
DBObject entry = (DBObject) JSON.parse(json.toString());
|
||||
competitorsDB.add(entry);
|
||||
}
|
||||
collection.insert(competitorsDB);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeAllCompetitors() {
|
||||
logger.info("Removing all persistent competitor info");
|
||||
|
||||
+2
@@ -68,6 +68,8 @@ public interface CompetitorStore extends CompetitorFactory {
|
||||
String newSailId, Nationality newNationality, URI newTeamImageUri, URI newFlagImageUri,
|
||||
Double timeOnTimeFactor, Duration timeOnDistanceAllowancePerNauticalMile, String searchTag);
|
||||
|
||||
void addCompetitors(Iterable<Competitor> competitors);
|
||||
|
||||
CompetitorDTO convertToCompetitorDTO(Competitor c);
|
||||
|
||||
/**
|
||||
|
||||
+13
@@ -274,4 +274,17 @@ public class TransientCompetitorStoreImpl implements CompetitorStore, Serializab
|
||||
LockUtil.unlockAfterWrite(lock);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCompetitors(Iterable<Competitor> competitors) {
|
||||
LockUtil.lockForWrite(lock);
|
||||
try {
|
||||
for (Competitor competitor: competitors) {
|
||||
competitorCache.put(competitor.getId(), competitor);
|
||||
competitorsByIdAsString.put(competitor.getId().toString(), competitor);
|
||||
}
|
||||
} finally {
|
||||
LockUtil.unlockAfterWrite(lock);
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
@@ -205,6 +205,8 @@ public class CompetitorImportProviderSelectionDialog extends DataEntryDialog<Com
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
busynessPanel.setBusy(false);
|
||||
errorReporter.reportError(
|
||||
stringMessages.errorMessageLoadingData());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+38
-13
@@ -1,7 +1,10 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
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;
|
||||
@@ -9,15 +12,16 @@ import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback;
|
||||
|
||||
/**
|
||||
* Ñallback is responsible for saving competitors in store and registering them if necessary.
|
||||
* Logic for registering should be implemented in child's classes.
|
||||
* Ñallback is responsible for saving competitors in store and registering them if necessary. Logic for registering
|
||||
* should be implemented in child's classes.
|
||||
*
|
||||
* @author Alexander_Tatarinovich
|
||||
*
|
||||
*/
|
||||
public class ImportCompetitorCallback implements DialogCallback<Set<CompetitorDTO>> {
|
||||
private final SailingServiceAsync sailingService;
|
||||
private final ErrorReporter errorReporter;
|
||||
private final StringMessages stringMessages;
|
||||
protected final SailingServiceAsync sailingService;
|
||||
protected final ErrorReporter errorReporter;
|
||||
protected final StringMessages stringMessages;
|
||||
|
||||
public ImportCompetitorCallback(SailingServiceAsync sailingService, ErrorReporter errorReporter,
|
||||
StringMessages stringMessages) {
|
||||
@@ -26,20 +30,41 @@ public class ImportCompetitorCallback implements DialogCallback<Set<CompetitorDT
|
||||
this.stringMessages = stringMessages;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void ok(Set<CompetitorDTO> competitorDTOs) {
|
||||
saveCompetitors(competitorDTOs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel() {
|
||||
}
|
||||
|
||||
private void saveCompetitors(Set<CompetitorDTO> competitorDTOs) {
|
||||
// TODO: implement logic for saving competitors
|
||||
@Override
|
||||
public void ok(final Set<CompetitorDTO> competitorsForRegistering) {
|
||||
List<CompetitorDTO> competitorsForSaving = prepareCompetitorsForSaving(competitorsForRegistering);
|
||||
registerCompetitorsAfterSaving(competitorsForSaving, competitorsForRegistering);
|
||||
}
|
||||
|
||||
protected List<CompetitorDTO> prepareCompetitorsForSaving(Set<CompetitorDTO> competitors) {
|
||||
List<CompetitorDTO> competitorsForSaving = new ArrayList<>();
|
||||
for (CompetitorDTO competitor : competitors) {
|
||||
if (competitor.getIdAsString() == null) {
|
||||
competitorsForSaving.add(competitor);
|
||||
}
|
||||
}
|
||||
return competitorsForSaving;
|
||||
}
|
||||
|
||||
private void registerCompetitorsAfterSaving(final List<CompetitorDTO> competitorsForSaving,
|
||||
final Set<CompetitorDTO> competitorsForRegistration) {
|
||||
sailingService.addCompetitors(competitorsForSaving, new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
registerCompetitors(competitorsForRegistration);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected void registerCompetitors(Set<CompetitorDTO> competitorDTOs) {
|
||||
|
||||
// Don't register by default
|
||||
}
|
||||
}
|
||||
+5
-2
@@ -12,10 +12,12 @@ import com.google.gwt.user.client.ui.ScrollPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.sap.sailing.domain.common.dto.BoatClassDTO;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTOImpl;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDescriptorDTO;
|
||||
import com.sap.sailing.domain.common.impl.MeterDistance;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
@@ -155,9 +157,10 @@ public class MatchImportedCompetitorsDialog extends DataEntryDialog<Set<Competit
|
||||
}
|
||||
|
||||
private CompetitorDTO convertCompetitorDescriptorToCompetitorDTO(CompetitorDescriptorDTO competitorDescriptor) {
|
||||
BoatDTO boat = new BoatDTO(null, competitorDescriptor.getSailNumber());
|
||||
BoatDTO defaultBoat = new BoatDTO(null, competitorDescriptor.getSailNumber());
|
||||
BoatClassDTO defaultBoatClass = new BoatClassDTO(BoatClassDTO.DEFAULT_NAME, /* hull length */ new MeterDistance(5));
|
||||
return new CompetitorDTOImpl(competitorDescriptor.getName(), null, null,
|
||||
competitorDescriptor.getTwoLetterIsoCountryCode(), competitorDescriptor.getThreeLetterIocCountryCode(),
|
||||
competitorDescriptor.getCountryName(), null, null, null, boat, null, null, null, null);
|
||||
competitorDescriptor.getCountryName(), null, null, null, defaultBoat, defaultBoatClass, null, null, null);
|
||||
}
|
||||
}
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sap.sailing.domain.common.BoatClassMasterdata;
|
||||
import com.sap.sailing.domain.common.dto.BoatClassDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTOImpl;
|
||||
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;
|
||||
private final String boatClassName;
|
||||
|
||||
public RaceImportCompetitorCallback(String leaderboardName, String raceColumnName, String fleetName,
|
||||
String boatClassName, SailingServiceAsync sailingService, ErrorReporter errorReporter,
|
||||
StringMessages stringMessages) {
|
||||
super(sailingService, errorReporter, stringMessages);
|
||||
this.leaderboardName = leaderboardName;
|
||||
this.raceColumnName = raceColumnName;
|
||||
this.fleetName = fleetName;
|
||||
this.boatClassName = boatClassName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CompetitorDTO> prepareCompetitorsForSaving(Set<CompetitorDTO> competitors) {
|
||||
List<CompetitorDTO> competitorsForSaving = super.prepareCompetitorsForSaving(competitors);
|
||||
return getCompetitorsWithNewBoatClass(competitorsForSaving);
|
||||
}
|
||||
|
||||
private List<CompetitorDTO> getCompetitorsWithNewBoatClass(List<CompetitorDTO> competitors) {
|
||||
List<CompetitorDTO> newCompetitors = new ArrayList<>();
|
||||
for (CompetitorDTO competitor : competitors) {
|
||||
final BoatClassMasterdata boatClassMasterdata = BoatClassMasterdata.resolveBoatClass(boatClassName);
|
||||
if (boatClassMasterdata == null) {
|
||||
return competitors;
|
||||
}
|
||||
|
||||
BoatClassDTO boatClass = new BoatClassDTO(boatClassMasterdata.getDisplayName(),
|
||||
boatClassMasterdata.getHullLength());
|
||||
CompetitorDTO newCompetitor = new CompetitorDTOImpl(competitor.getName(), competitor.getColor(),
|
||||
competitor.getEmail(), competitor.getTwoLetterIsoCountryCode(),
|
||||
competitor.getThreeLetterIocCountryCode(), competitor.getCountryName(), competitor.getIdAsString(),
|
||||
competitor.getImageURL(), competitor.getFlagImageURL(), competitor.getBoat(), boatClass,
|
||||
competitor.getTimeOnTimeFactor(), competitor.getTimeOnDistanceAllowancePerNauticalMile(),
|
||||
competitor.getSailID());
|
||||
newCompetitors.add(newCompetitor);
|
||||
}
|
||||
return newCompetitors;
|
||||
}
|
||||
|
||||
@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()));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
+2
@@ -445,6 +445,8 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
|
||||
|
||||
CompetitorDTO addOrUpdateCompetitor(CompetitorDTO competitor) throws Exception;
|
||||
|
||||
void addCompetitors(Iterable<CompetitorDTO> competitorDTOs) throws Exception;
|
||||
|
||||
void allowCompetitorResetToDefaults(Iterable<CompetitorDTO> competitors);
|
||||
|
||||
List<DeviceConfigurationMatcherDTO> getDeviceConfigurationMatchers();
|
||||
|
||||
+2
@@ -597,6 +597,8 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan
|
||||
|
||||
void addOrUpdateCompetitor(CompetitorDTO competitor, AsyncCallback<CompetitorDTO> asyncCallback);
|
||||
|
||||
void addCompetitors(Iterable<CompetitorDTO> competitorDTOs, AsyncCallback<Void> asyncCallback);
|
||||
|
||||
void allowCompetitorResetToDefaults(Iterable<CompetitorDTO> competitors, AsyncCallback<Void> asyncCallback);
|
||||
|
||||
void getDeviceConfigurationMatchers(AsyncCallback<List<DeviceConfigurationMatcherDTO>> asyncCallback);
|
||||
|
||||
+1
@@ -1749,4 +1749,5 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
|
||||
String filterImportedCompetitorsByNameSailRaceFleet();
|
||||
String errorLoadingCompetitorImportProviders(String message);
|
||||
String errorLoadingCompetitorImportDescriptors(String message);
|
||||
String couldNotSaveCompetitorRegistrations(String message);
|
||||
}
|
||||
+2
-1
@@ -1720,4 +1720,5 @@ importedCompetitors=Imported Competitors
|
||||
hasMatches=Has matches
|
||||
filterImportedCompetitorsByNameSailRaceFleet=Filter imported competitors by name, sail number, race or fleet
|
||||
errorLoadingCompetitorImportProviders=Error loading competitor import providers: {0}
|
||||
errorLoadingCompetitorImportDescriptors=Error loading competitor import descriptors: {0}
|
||||
errorLoadingCompetitorImportDescriptors=Error loading competitor import descriptors: {0}
|
||||
couldNotSaveCompetitorRegistrations=Could not save competitor registrations: {0}
|
||||
+28
@@ -131,6 +131,7 @@ import com.sap.sailing.domain.base.configuration.impl.RRS26ConfigurationImpl;
|
||||
import com.sap.sailing.domain.base.configuration.impl.RacingProcedureConfigurationImpl;
|
||||
import com.sap.sailing.domain.base.configuration.impl.RegattaConfigurationImpl;
|
||||
import com.sap.sailing.domain.base.impl.BoatImpl;
|
||||
import com.sap.sailing.domain.base.impl.CompetitorImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseDataImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseImpl;
|
||||
import com.sap.sailing.domain.base.impl.DynamicBoat;
|
||||
@@ -4853,6 +4854,33 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCompetitors(Iterable<CompetitorDTO> competitorDTOs) throws URISyntaxException {
|
||||
List<Competitor> competitorsForSaving = new ArrayList<>();
|
||||
for (CompetitorDTO competitorDTO : competitorDTOs) {
|
||||
Competitor competitor = convertCompetitorDTOToCompetitor(competitorDTO);
|
||||
competitorsForSaving.add(competitor);
|
||||
}
|
||||
getBaseDomainFactory().getCompetitorStore().addCompetitors(competitorsForSaving);
|
||||
}
|
||||
|
||||
private Competitor convertCompetitorDTOToCompetitor(CompetitorDTO competitorDTO) throws URISyntaxException {
|
||||
Nationality nationality = (competitorDTO.getThreeLetterIocCountryCode() == null
|
||||
|| competitorDTO.getThreeLetterIocCountryCode().isEmpty()) ? null
|
||||
: getBaseDomainFactory()
|
||||
.getOrCreateNationality(competitorDTO.getThreeLetterIocCountryCode());
|
||||
BoatClass boatClass = getBaseDomainFactory().getOrCreateBoatClass(competitorDTO.getBoatClass().getName());
|
||||
DynamicPerson sailor = new PersonImpl(competitorDTO.getName(), nationality, null, null);
|
||||
DynamicTeam team = new TeamImpl(competitorDTO.getName() + " team", Collections.singleton(sailor), null);
|
||||
DynamicBoat boat = new BoatImpl(competitorDTO.getName() + " boat", boatClass, competitorDTO.getSailID());
|
||||
Competitor competitor = new CompetitorImpl(UUID.randomUUID(), competitorDTO.getName(),
|
||||
competitorDTO.getColor(), competitorDTO.getEmail(),
|
||||
competitorDTO.getFlagImageURL() == null ? null : new URI(competitorDTO.getFlagImageURL()), team,
|
||||
boat, competitorDTO.getTimeOnTimeFactor(),
|
||||
competitorDTO.getTimeOnDistanceAllowancePerNauticalMile(), competitorDTO.getSearchTag());
|
||||
return competitor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void allowCompetitorResetToDefaults(Iterable<CompetitorDTO> competitors) {
|
||||
List<String> competitorIdsAsStrings = new ArrayList<String>();
|
||||
|
||||
+6
@@ -107,4 +107,10 @@ public class PersistentCompetitorStore extends TransientCompetitorStoreImpl impl
|
||||
storeTo.storeCompetitor(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCompetitors(Iterable<Competitor> competitors) {
|
||||
storeTo.storeCompetitors(competitors);
|
||||
super.addCompetitors(competitors);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user