mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-04 03:13:49 +00:00
added missing properties to CompetitorDescriptor, removed CompetitorDescriptorDTO and pass along searchTag for competitor creation;
introduced CustomFieldSerializers for CountryCodeImpl and CompetitorDescriptor to allow for final fields Change-Id: Idcec2cce798464a125f9d8c7ef1cd70fc800e106
This commit is contained in:
1 parent
aa4f72731d
commit
306ef48a5d
22 files changed
+413
-428
No files matched your search
@@ -7,4 +7,5 @@ Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Export-Package: com.sap.sailing.competitorimport
|
||||
Require-Bundle: com.sap.sse.common,
|
||||
com.sap.sailing.domain.shared.android
|
||||
com.sap.sailing.domain.shared.android,
|
||||
com.sap.sailing.domain.common
|
||||
-73
@@ -1,73 +0,0 @@
|
||||
package com.sap.sailing.competitorimport;
|
||||
|
||||
import com.sap.sailing.domain.base.Person;
|
||||
import com.sap.sse.common.CountryCode;
|
||||
|
||||
|
||||
public class CompetitorDescriptor {
|
||||
private final String eventName;
|
||||
private final String regattaName;
|
||||
private final String boatClassName;
|
||||
private final String raceName;
|
||||
private final String fleetName;
|
||||
private final String sailNumber;
|
||||
private final String competitorName;
|
||||
private final CountryCode countryCode;
|
||||
private final Iterable<Person> persons;
|
||||
|
||||
public CompetitorDescriptor(String eventName, String regattaName, String boatClassName, String raceName,
|
||||
String fleetName, String sailNumber, String competitorName, CountryCode countryCode, Iterable<Person> persons) {
|
||||
super();
|
||||
this.eventName = eventName;
|
||||
this.regattaName = regattaName;
|
||||
this.boatClassName = boatClassName;
|
||||
this.raceName = raceName;
|
||||
this.fleetName = fleetName;
|
||||
this.sailNumber = sailNumber;
|
||||
this.competitorName = competitorName;
|
||||
this.countryCode = countryCode;
|
||||
this.persons = persons;
|
||||
}
|
||||
|
||||
public String getEventName() {
|
||||
return eventName;
|
||||
}
|
||||
|
||||
public String getRegattaName() {
|
||||
return regattaName;
|
||||
}
|
||||
|
||||
public String getBoatClassName() {
|
||||
return boatClassName;
|
||||
}
|
||||
|
||||
public String getRaceName() {
|
||||
return raceName;
|
||||
}
|
||||
|
||||
public String getFleetName() {
|
||||
return fleetName;
|
||||
}
|
||||
|
||||
public String getSailNumber() {
|
||||
return sailNumber;
|
||||
}
|
||||
|
||||
public String getCompetitorName() {
|
||||
return competitorName;
|
||||
}
|
||||
|
||||
public CountryCode getCountryCode() {
|
||||
return countryCode;
|
||||
}
|
||||
|
||||
public Iterable<Person> getPersons() {
|
||||
return persons;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return ""+countryCode+" "+sailNumber+" "+getCompetitorName()+" at event: "+eventName+", regatta: "+regattaName+
|
||||
", boat class: "+boatClassName+", race: "+raceName+", fleet: "+fleetName+", "+persons;
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -5,7 +5,8 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.xml.bind.JAXBException;
|
||||
import com.sap.sailing.competitorimport.CompetitorDescriptor;
|
||||
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
import com.sap.sse.common.Named;
|
||||
|
||||
/**
|
||||
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
package com.sap.sailing.domain.common;
|
||||
|
||||
import com.sap.sailing.domain.common.dto.PersonDTO;
|
||||
import com.sap.sse.common.CountryCode;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.Named;
|
||||
import com.sap.sse.common.impl.NamedImpl;
|
||||
|
||||
|
||||
public class CompetitorDescriptor extends NamedImpl implements Named {
|
||||
private static final long serialVersionUID = -6645726854552711646L;
|
||||
|
||||
private final String eventName;
|
||||
private final String regattaName;
|
||||
private final String boatClassName;
|
||||
private final String boatName;
|
||||
private final String teamName;
|
||||
private final String raceName;
|
||||
private final String fleetName;
|
||||
private final String sailNumber;
|
||||
private final String name;
|
||||
private final CountryCode countryCode;
|
||||
private final Iterable<PersonDTO> persons;
|
||||
private final Double timeOnTimeFactor;
|
||||
private final Duration timeOnDistanceAllowancePerNauticalMile;
|
||||
|
||||
public CompetitorDescriptor(String eventName, String regattaName, String boatClassName, String raceName,
|
||||
String fleetName, String sailNumber, String name, String teamName, String boatName, CountryCode countryCode,
|
||||
Iterable<PersonDTO> persons, Double timeOnTimeFactor, Duration timeOnDistanceAllowancePerNauticalMile) {
|
||||
super(name);
|
||||
this.eventName = eventName;
|
||||
this.regattaName = regattaName;
|
||||
this.boatClassName = boatClassName;
|
||||
this.boatName = boatName;
|
||||
this.raceName = raceName;
|
||||
this.fleetName = fleetName;
|
||||
this.sailNumber = sailNumber;
|
||||
this.name = name;
|
||||
this.teamName = teamName;
|
||||
this.countryCode = countryCode;
|
||||
this.persons = persons;
|
||||
this.timeOnTimeFactor = timeOnTimeFactor;
|
||||
this.timeOnDistanceAllowancePerNauticalMile = timeOnDistanceAllowancePerNauticalMile;
|
||||
}
|
||||
|
||||
public String getEventName() {
|
||||
return eventName;
|
||||
}
|
||||
|
||||
public String getRegattaName() {
|
||||
return regattaName;
|
||||
}
|
||||
|
||||
public String getBoatClassName() {
|
||||
return boatClassName;
|
||||
}
|
||||
|
||||
public String getRaceName() {
|
||||
return raceName;
|
||||
}
|
||||
|
||||
public String getFleetName() {
|
||||
return fleetName;
|
||||
}
|
||||
|
||||
public String getSailNumber() {
|
||||
return sailNumber;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public CountryCode getCountryCode() {
|
||||
return countryCode;
|
||||
}
|
||||
|
||||
public Iterable<PersonDTO> getPersons() {
|
||||
return persons;
|
||||
}
|
||||
|
||||
public Double getTimeOnTimeFactor() {
|
||||
return timeOnTimeFactor;
|
||||
}
|
||||
|
||||
public String getBoatName() {
|
||||
return boatName;
|
||||
}
|
||||
|
||||
public String getTeamName() {
|
||||
return teamName;
|
||||
}
|
||||
|
||||
public Duration getTimeOnDistanceAllowancePerNauticalMile() {
|
||||
return timeOnDistanceAllowancePerNauticalMile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CompetitorDescriptor [eventName=" + eventName + ", regattaName=" + regattaName + ", boatClassName="
|
||||
+ boatClassName + ", boatName=" + boatName + ", teamName=" + teamName + ", raceName=" + raceName
|
||||
+ ", fleetName=" + fleetName + ", sailNumber=" + sailNumber + ", name=" + name + ", countryCode="
|
||||
+ countryCode + ", persons=" + persons + ", timeOnTimeFactor=" + timeOnTimeFactor
|
||||
+ ", timeOnDistanceAllowancePerNauticalMile=" + timeOnDistanceAllowancePerNauticalMile + "]";
|
||||
}
|
||||
}
|
||||
-108
@@ -1,108 +0,0 @@
|
||||
package com.sap.sailing.domain.common.dto;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
public class CompetitorDescriptorDTO extends NamedDTO {
|
||||
private static final long serialVersionUID = 4855053239521181610L;
|
||||
private String eventName;
|
||||
private String regattaName;
|
||||
private String boatClassName;
|
||||
private String raceName;
|
||||
private String fleetName;
|
||||
private String sailNumber;
|
||||
|
||||
private String countryName;
|
||||
private String twoLetterIsoCountryCode;
|
||||
private String threeLetterIocCountryCode;
|
||||
|
||||
private Set<PersonDTO> persons;
|
||||
|
||||
CompetitorDescriptorDTO() {} // for GWT de-serialization only
|
||||
|
||||
public CompetitorDescriptorDTO(String eventName, String regattaName, String boatClassName, String raceName,
|
||||
String fleetName, String sailNumber, String competitorName, String countryName,
|
||||
String twoLetterIsoCountryCode, String threeLetterIocCountryCode, Set<PersonDTO> persons) {
|
||||
super(competitorName);
|
||||
this.eventName = eventName;
|
||||
this.regattaName = regattaName;
|
||||
this.boatClassName = boatClassName;
|
||||
this.raceName = raceName;
|
||||
this.fleetName = fleetName;
|
||||
this.sailNumber = sailNumber;
|
||||
this.countryName = countryName;
|
||||
this.twoLetterIsoCountryCode = twoLetterIsoCountryCode;
|
||||
this.threeLetterIocCountryCode = threeLetterIocCountryCode;
|
||||
this.persons = persons;
|
||||
}
|
||||
|
||||
public String getEventName() {
|
||||
return eventName;
|
||||
}
|
||||
|
||||
public String getRegattaName() {
|
||||
return regattaName;
|
||||
}
|
||||
|
||||
public String getBoatClassName() {
|
||||
return boatClassName;
|
||||
}
|
||||
|
||||
public String getRaceName() {
|
||||
return raceName;
|
||||
}
|
||||
|
||||
public String getFleetName() {
|
||||
return fleetName;
|
||||
}
|
||||
|
||||
public String getSailNumber() {
|
||||
return sailNumber;
|
||||
}
|
||||
|
||||
public Iterable<PersonDTO> getPersons() {
|
||||
return persons;
|
||||
}
|
||||
|
||||
public String getCountryName() {
|
||||
return countryName;
|
||||
}
|
||||
|
||||
public String getTwoLetterIsoCountryCode() {
|
||||
return twoLetterIsoCountryCode;
|
||||
}
|
||||
|
||||
public String getThreeLetterIocCountryCode() {
|
||||
return threeLetterIocCountryCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + Objects.hash(eventName, regattaName, boatClassName, raceName, fleetName, sailNumber, persons,
|
||||
countryName, twoLetterIsoCountryCode, threeLetterIocCountryCode);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
if (!super.equals(obj)) {
|
||||
return false;
|
||||
}
|
||||
CompetitorDescriptorDTO other = (CompetitorDescriptorDTO) obj;
|
||||
return Objects.equals(countryName, other.countryName) && Objects.equals(eventName, other.eventName)
|
||||
&& Objects.equals(fleetName, other.fleetName) && Objects.deepEquals(persons, other.persons)
|
||||
&& Objects.equals(boatClassName, other.boatClassName)
|
||||
&& Objects.equals(raceName, other.raceName) && Objects.equals(regattaName, other.regattaName)
|
||||
&& Objects.equals(sailNumber, other.sailNumber)
|
||||
&& Objects.equals(threeLetterIocCountryCode, other.threeLetterIocCountryCode)
|
||||
&& Objects.equals(twoLetterIsoCountryCode, other.twoLetterIsoCountryCode);
|
||||
}
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
package com.google.gwt.user.client.rpc.core.com.sap.sailing.domain.common;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.user.client.rpc.CustomFieldSerializer;
|
||||
import com.google.gwt.user.client.rpc.SerializationException;
|
||||
import com.google.gwt.user.client.rpc.SerializationStreamReader;
|
||||
import com.google.gwt.user.client.rpc.SerializationStreamWriter;
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
import com.sap.sailing.domain.common.dto.PersonDTO;
|
||||
import com.sap.sse.common.CountryCode;
|
||||
import com.sap.sse.common.Duration;
|
||||
|
||||
public class CompetitorDescriptor_CustomFieldSerializer extends CustomFieldSerializer<CompetitorDescriptor> {
|
||||
|
||||
@Override
|
||||
public void serializeInstance(SerializationStreamWriter streamWriter, CompetitorDescriptor instance)
|
||||
throws SerializationException {
|
||||
serialize(streamWriter, instance);
|
||||
}
|
||||
|
||||
public static void serialize(SerializationStreamWriter streamWriter, CompetitorDescriptor instance)
|
||||
throws SerializationException {
|
||||
streamWriter.writeObject(instance.getPersons());
|
||||
streamWriter.writeString(instance.getEventName());
|
||||
streamWriter.writeString(instance.getRegattaName());
|
||||
streamWriter.writeString(instance.getBoatClassName());
|
||||
streamWriter.writeString(instance.getRaceName());
|
||||
streamWriter.writeString(instance.getFleetName());
|
||||
streamWriter.writeString(instance.getSailNumber());
|
||||
streamWriter.writeString(instance.getName());
|
||||
streamWriter.writeString(instance.getTeamName());
|
||||
streamWriter.writeString(instance.getBoatName());
|
||||
streamWriter.writeObject(instance.getCountryCode());
|
||||
streamWriter.writeDouble(instance.getTimeOnTimeFactor());
|
||||
streamWriter.writeObject(instance.getTimeOnDistanceAllowancePerNauticalMile());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCustomInstantiateInstance() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompetitorDescriptor instantiateInstance(SerializationStreamReader streamReader)
|
||||
throws SerializationException {
|
||||
return instantiate(streamReader);
|
||||
}
|
||||
|
||||
public static CompetitorDescriptor instantiate(SerializationStreamReader streamReader)
|
||||
throws SerializationException {
|
||||
@SuppressWarnings("unchecked")
|
||||
final List<PersonDTO> persons = (List<PersonDTO>) streamReader.readObject();
|
||||
return new CompetitorDescriptor(streamReader.readString(), streamReader.readString(),
|
||||
streamReader.readString(), streamReader.readString(), streamReader.readString(),
|
||||
streamReader.readString(), streamReader.readString(), streamReader.readString(),
|
||||
streamReader.readString(), (CountryCode) streamReader.readObject(),
|
||||
persons, streamReader.readDouble(), (Duration) streamReader.readObject());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserializeInstance(SerializationStreamReader streamReader, CompetitorDescriptor instance)
|
||||
throws SerializationException {
|
||||
deserialize(streamReader, instance);
|
||||
}
|
||||
|
||||
public static void deserialize(SerializationStreamReader streamReader, CompetitorDescriptor instance) {
|
||||
// Done by instantiateInstance
|
||||
}
|
||||
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
package com.google.gwt.user.client.rpc.core.com.sap.sse.common;
|
||||
|
||||
import com.google.gwt.user.client.rpc.CustomFieldSerializer;
|
||||
import com.google.gwt.user.client.rpc.SerializationException;
|
||||
import com.google.gwt.user.client.rpc.SerializationStreamReader;
|
||||
import com.google.gwt.user.client.rpc.SerializationStreamWriter;
|
||||
import com.sap.sse.common.impl.CountryCodeImpl;
|
||||
|
||||
public class CountryCodeImpl_CustomFieldSerializer extends CustomFieldSerializer<CountryCodeImpl> {
|
||||
|
||||
@Override
|
||||
public void serializeInstance(SerializationStreamWriter streamWriter, CountryCodeImpl instance)
|
||||
throws SerializationException {
|
||||
serialize(streamWriter, instance);
|
||||
}
|
||||
|
||||
public static void serialize(SerializationStreamWriter streamWriter, CountryCodeImpl instance)
|
||||
throws SerializationException {
|
||||
streamWriter.writeString(instance.getName());
|
||||
streamWriter.writeString(instance.getTwoLetterISOCode());
|
||||
streamWriter.writeString(instance.getThreeLetterISOCode());
|
||||
streamWriter.writeString(instance.getIANAInternet());
|
||||
streamWriter.writeString(instance.getUNVehicle());
|
||||
streamWriter.writeString(instance.getThreeLetterIOCCode());
|
||||
streamWriter.writeString(instance.getUNISONumeric());
|
||||
streamWriter.writeString(instance.getITUCallPrefix());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCustomInstantiateInstance() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CountryCodeImpl instantiateInstance(SerializationStreamReader streamReader)
|
||||
throws SerializationException {
|
||||
return instantiate(streamReader);
|
||||
}
|
||||
|
||||
public static CountryCodeImpl instantiate(SerializationStreamReader streamReader)
|
||||
throws SerializationException {
|
||||
return new CountryCodeImpl(streamReader.readString(), streamReader.readString(),
|
||||
streamReader.readString(), streamReader.readString(), streamReader.readString(), streamReader.readString(),
|
||||
streamReader.readString(), streamReader.readString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserializeInstance(SerializationStreamReader streamReader, CountryCodeImpl instance)
|
||||
throws SerializationException {
|
||||
deserialize(streamReader, instance);
|
||||
}
|
||||
|
||||
public static void deserialize(SerializationStreamReader streamReader, CountryCodeImpl instance) {
|
||||
// Done by instantiateInstance
|
||||
}
|
||||
|
||||
}
|
||||
+39
-40
@@ -16,8 +16,8 @@ import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
|
||||
import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.user.client.ui.ImageResourceRenderer;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDescriptorDTO;
|
||||
import com.sap.sailing.gwt.ui.client.FlagImageResolver;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
@@ -28,10 +28,10 @@ import com.sap.sse.gwt.client.celltable.EntityIdentityComparator;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSelectionModel;
|
||||
import com.sap.sse.gwt.client.panels.LabeledAbstractFilterablePanel;
|
||||
|
||||
public class CompetitorDescriptorTableWrapper<S extends RefreshableSelectionModel<CompetitorDescriptorDTO>>
|
||||
extends TableWrapper<CompetitorDescriptorDTO, S> {
|
||||
public class CompetitorDescriptorTableWrapper<S extends RefreshableSelectionModel<CompetitorDescriptor>>
|
||||
extends TableWrapper<CompetitorDescriptor, S> {
|
||||
|
||||
private final LabeledAbstractFilterablePanel<CompetitorDescriptorDTO> filterablePanelCompetitorDescriptor;
|
||||
private final LabeledAbstractFilterablePanel<CompetitorDescriptor> filterablePanelCompetitorDescriptor;
|
||||
|
||||
private final CompetitorImportMatcher competitorImportMatcher;
|
||||
|
||||
@@ -77,31 +77,31 @@ public class CompetitorDescriptorTableWrapper<S extends RefreshableSelectionMode
|
||||
*
|
||||
*/
|
||||
public static interface CompetitorsToImportToExistingLinking {
|
||||
void unlinkCompetitor(CompetitorDescriptorDTO competitor);
|
||||
CompetitorDTO getExistingCompetitorToUseInsteadOf(CompetitorDescriptorDTO competitor);
|
||||
void unlinkCompetitor(CompetitorDescriptor competitor);
|
||||
CompetitorDTO getExistingCompetitorToUseInsteadOf(CompetitorDescriptor competitor);
|
||||
}
|
||||
|
||||
public CompetitorDescriptorTableWrapper(CompetitorImportMatcher competitorImportMatcherParam,
|
||||
SailingServiceAsync sailingService, final StringMessages stringMessages, ErrorReporter errorReporter,
|
||||
boolean multiSelection, boolean enablePager, final CompetitorsToImportToExistingLinking unlinkCallback) {
|
||||
super(sailingService, stringMessages, errorReporter, multiSelection, enablePager,
|
||||
new EntityIdentityComparator<CompetitorDescriptorDTO>() {
|
||||
new EntityIdentityComparator<CompetitorDescriptor>() {
|
||||
@Override
|
||||
public boolean representSameEntity(CompetitorDescriptorDTO dto1, CompetitorDescriptorDTO dto2) {
|
||||
public boolean representSameEntity(CompetitorDescriptor dto1, CompetitorDescriptor dto2) {
|
||||
return dto1.equals(dto2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode(CompetitorDescriptorDTO dto) {
|
||||
public int hashCode(CompetitorDescriptor dto) {
|
||||
return dto.hashCode();
|
||||
}
|
||||
});
|
||||
this.competitorImportMatcher = competitorImportMatcherParam;
|
||||
filterablePanelCompetitorDescriptor = new LabeledAbstractFilterablePanel<CompetitorDescriptorDTO>(
|
||||
filterablePanelCompetitorDescriptor = new LabeledAbstractFilterablePanel<CompetitorDescriptor>(
|
||||
new Label(stringMessages.filterImportedCompetitorsByNameSailRaceFleet()),
|
||||
new ArrayList<CompetitorDescriptorDTO>(), table, dataProvider) {
|
||||
new ArrayList<CompetitorDescriptor>(), table, dataProvider) {
|
||||
@Override
|
||||
public Iterable<String> getSearchableStrings(CompetitorDescriptorDTO competitorDescriptor) {
|
||||
public Iterable<String> getSearchableStrings(CompetitorDescriptor competitorDescriptor) {
|
||||
List<String> string = new ArrayList<String>();
|
||||
string.add(competitorDescriptor.getName());
|
||||
string.add(competitorDescriptor.getSailNumber());
|
||||
@@ -113,22 +113,21 @@ public class CompetitorDescriptorTableWrapper<S extends RefreshableSelectionMode
|
||||
};
|
||||
registerSelectionModelOnNewDataProvider(filterablePanelCompetitorDescriptor.getAllListDataProvider());
|
||||
|
||||
TextColumn<CompetitorDescriptorDTO> competitorNameColumn = new TextColumn<CompetitorDescriptorDTO>() {
|
||||
TextColumn<CompetitorDescriptor> competitorNameColumn = new TextColumn<CompetitorDescriptor>() {
|
||||
@Override
|
||||
public String getValue(CompetitorDescriptorDTO competitor) {
|
||||
public String getValue(CompetitorDescriptor competitor) {
|
||||
return competitor.getName();
|
||||
}
|
||||
};
|
||||
competitorNameColumn.setSortable(true);
|
||||
|
||||
Column<CompetitorDescriptorDTO, SafeHtml> sailIdColumn = new Column<CompetitorDescriptorDTO, SafeHtml>(
|
||||
Column<CompetitorDescriptor, SafeHtml> sailIdColumn = new Column<CompetitorDescriptor, SafeHtml>(
|
||||
new SafeHtmlCell()) {
|
||||
@Override
|
||||
public SafeHtml getValue(CompetitorDescriptorDTO competitor) {
|
||||
public SafeHtml getValue(CompetitorDescriptor competitor) {
|
||||
SafeHtmlBuilder sb = new SafeHtmlBuilder();
|
||||
ImageResourceRenderer renderer = new ImageResourceRenderer();
|
||||
final String twoLetterIsoCountryCode = competitor.getTwoLetterIsoCountryCode();
|
||||
|
||||
final String twoLetterIsoCountryCode = competitor.getCountryCode().getTwoLetterISOCode();
|
||||
final ImageResource flagImageResource;
|
||||
if (twoLetterIsoCountryCode == null || twoLetterIsoCountryCode.isEmpty()) {
|
||||
flagImageResource = FlagImageResolver.getEmptyFlagImageResource();
|
||||
@@ -146,49 +145,49 @@ public class CompetitorDescriptorTableWrapper<S extends RefreshableSelectionMode
|
||||
};
|
||||
sailIdColumn.setSortable(true);
|
||||
|
||||
TextColumn<CompetitorDescriptorDTO> boatClassNameColumn = new TextColumn<CompetitorDescriptorDTO>() {
|
||||
TextColumn<CompetitorDescriptor> boatClassNameColumn = new TextColumn<CompetitorDescriptor>() {
|
||||
@Override
|
||||
public String getValue(CompetitorDescriptorDTO competitorDescriptor) {
|
||||
public String getValue(CompetitorDescriptor competitorDescriptor) {
|
||||
return competitorDescriptor.getBoatClassName();
|
||||
}
|
||||
};
|
||||
boatClassNameColumn.setSortable(true);
|
||||
|
||||
TextColumn<CompetitorDescriptorDTO> raceNameColumn = new TextColumn<CompetitorDescriptorDTO>() {
|
||||
TextColumn<CompetitorDescriptor> raceNameColumn = new TextColumn<CompetitorDescriptor>() {
|
||||
@Override
|
||||
public String getValue(CompetitorDescriptorDTO competitorDescriptor) {
|
||||
public String getValue(CompetitorDescriptor competitorDescriptor) {
|
||||
return competitorDescriptor.getRaceName();
|
||||
}
|
||||
};
|
||||
raceNameColumn.setSortable(true);
|
||||
|
||||
TextColumn<CompetitorDescriptorDTO> fleetNameColumn = new TextColumn<CompetitorDescriptorDTO>() {
|
||||
TextColumn<CompetitorDescriptor> fleetNameColumn = new TextColumn<CompetitorDescriptor>() {
|
||||
@Override
|
||||
public String getValue(CompetitorDescriptorDTO competitorDescriptor) {
|
||||
public String getValue(CompetitorDescriptor competitorDescriptor) {
|
||||
return competitorDescriptor.getFleetName();
|
||||
}
|
||||
};
|
||||
fleetNameColumn.setSortable(true);
|
||||
|
||||
TextColumn<CompetitorDescriptorDTO> isHasMatchesColumn = new TextColumn<CompetitorDescriptorDTO>() {
|
||||
TextColumn<CompetitorDescriptor> isHasMatchesColumn = new TextColumn<CompetitorDescriptor>() {
|
||||
@Override
|
||||
public String getValue(CompetitorDescriptorDTO competitorDescriptor) {
|
||||
public String getValue(CompetitorDescriptor competitorDescriptor) {
|
||||
return competitorImportMatcher.getMatchesCompetitors(competitorDescriptor).isEmpty()
|
||||
? stringMessages.no() : stringMessages.yes();
|
||||
}
|
||||
};
|
||||
isHasMatchesColumn.setSortable(true);
|
||||
// alters the getValue method such that it returns an empty string if the competitor to import is not linked to an existing one, non-null otherwise
|
||||
ImagesBarColumn<CompetitorDescriptorDTO, CompetitorImportTableActionIcons> unlinkColumn =
|
||||
new ImagesBarColumn<CompetitorDescriptorDTO, CompetitorDescriptorTableWrapper.CompetitorImportTableActionIcons>(new CompetitorImportTableActionIcons(stringMessages)) {
|
||||
ImagesBarColumn<CompetitorDescriptor, CompetitorImportTableActionIcons> unlinkColumn =
|
||||
new ImagesBarColumn<CompetitorDescriptor, CompetitorDescriptorTableWrapper.CompetitorImportTableActionIcons>(new CompetitorImportTableActionIcons(stringMessages)) {
|
||||
@Override
|
||||
public String getValue(CompetitorDescriptorDTO competitor) {
|
||||
public String getValue(CompetitorDescriptor competitor) {
|
||||
return unlinkCallback.getExistingCompetitorToUseInsteadOf(competitor)==null?"":"linked";
|
||||
}
|
||||
};
|
||||
unlinkColumn.setFieldUpdater(new FieldUpdater<CompetitorDescriptorDTO, String>() {
|
||||
unlinkColumn.setFieldUpdater(new FieldUpdater<CompetitorDescriptor, String>() {
|
||||
@Override
|
||||
public void update(int index, final CompetitorDescriptorDTO competitor, String value) {
|
||||
public void update(int index, final CompetitorDescriptor competitor, String value) {
|
||||
if (CompetitorImportTableActionIcons.ACTION_UNLINK.equals(value)) {
|
||||
if (unlinkCallback != null) {
|
||||
unlinkCallback.unlinkCompetitor(competitor);
|
||||
@@ -209,13 +208,13 @@ public class CompetitorDescriptorTableWrapper<S extends RefreshableSelectionMode
|
||||
sailIdColumn, raceNameColumn, fleetNameColumn, isHasMatchesColumn, unlinkColumn, unlinkCallback));
|
||||
}
|
||||
|
||||
private ListHandler<CompetitorDescriptorDTO> getCompetitorDescriptorTableColumnListSortHandler(
|
||||
TextColumn<CompetitorDescriptorDTO> competitorNameColumn,
|
||||
TextColumn<CompetitorDescriptorDTO> boatClassNameColumn, Column<CompetitorDescriptorDTO, SafeHtml> sailIdColumn,
|
||||
TextColumn<CompetitorDescriptorDTO> raceNameColumn,
|
||||
TextColumn<CompetitorDescriptorDTO> fleetNameColumn, TextColumn<CompetitorDescriptorDTO> isHasMatchesColumn,
|
||||
ImagesBarColumn<CompetitorDescriptorDTO, CompetitorImportTableActionIcons> unlinkColumn, CompetitorsToImportToExistingLinking unlinkCallback) {
|
||||
ListHandler<CompetitorDescriptorDTO> competitorColumnListHandler = getColumnSortHandler();
|
||||
private ListHandler<CompetitorDescriptor> getCompetitorDescriptorTableColumnListSortHandler(
|
||||
TextColumn<CompetitorDescriptor> competitorNameColumn,
|
||||
TextColumn<CompetitorDescriptor> boatClassNameColumn, Column<CompetitorDescriptor, SafeHtml> sailIdColumn,
|
||||
TextColumn<CompetitorDescriptor> raceNameColumn,
|
||||
TextColumn<CompetitorDescriptor> fleetNameColumn, TextColumn<CompetitorDescriptor> isHasMatchesColumn,
|
||||
ImagesBarColumn<CompetitorDescriptor, CompetitorImportTableActionIcons> unlinkColumn, CompetitorsToImportToExistingLinking unlinkCallback) {
|
||||
ListHandler<CompetitorDescriptor> competitorColumnListHandler = getColumnSortHandler();
|
||||
final NaturalComparator caseInsensitiveNaturalComparator = new NaturalComparator(/* case sensitive */ false);
|
||||
final Comparator<CompetitorDTO> nullFirstComparator = Comparator.nullsFirst(/* real comparator */ null);
|
||||
competitorColumnListHandler.setComparator(competitorNameColumn, (cd1, cd2)->caseInsensitiveNaturalComparator.compare(cd1.getName(), cd2.getName()));
|
||||
@@ -230,11 +229,11 @@ public class CompetitorDescriptorTableWrapper<S extends RefreshableSelectionMode
|
||||
return competitorColumnListHandler;
|
||||
}
|
||||
|
||||
public Iterable<CompetitorDescriptorDTO> getAllCompetitorDescriptors() {
|
||||
public Iterable<CompetitorDescriptor> getAllCompetitorDescriptors() {
|
||||
return filterablePanelCompetitorDescriptor.getAll();
|
||||
}
|
||||
|
||||
public void refreshCompetitorDescriptorList(Iterable<CompetitorDescriptorDTO> competitors) {
|
||||
public void refreshCompetitorDescriptorList(Iterable<CompetitorDescriptor> competitors) {
|
||||
filterablePanelCompetitorDescriptor.updateAll(competitors);
|
||||
}
|
||||
|
||||
|
||||
+6
-9
@@ -3,8 +3,8 @@ package com.sap.sailing.gwt.ui.adminconsole;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDescriptorDTO;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
/**
|
||||
@@ -22,7 +22,7 @@ public class CompetitorImportMatcher {
|
||||
this.existingCompetitorDTOs = existingCompetitors;
|
||||
}
|
||||
|
||||
public Set<CompetitorDTO> getMatchesCompetitors(CompetitorDescriptorDTO competitorDescriptor) {
|
||||
public Set<CompetitorDTO> getMatchesCompetitors(CompetitorDescriptor competitorDescriptor) {
|
||||
Set<CompetitorDTO> matchesCompetitor = new HashSet<>();
|
||||
if (competitorDescriptor == null) {
|
||||
return matchesCompetitor;
|
||||
@@ -35,7 +35,7 @@ public class CompetitorImportMatcher {
|
||||
return matchesCompetitor;
|
||||
}
|
||||
|
||||
private boolean isEqual(CompetitorDescriptorDTO competitorDescriptor, CompetitorDTO existingCompetitor) {
|
||||
private boolean isEqual(CompetitorDescriptor competitorDescriptor, CompetitorDTO existingCompetitor) {
|
||||
return Util.equalsWithNull(competitorDescriptor.getName(), existingCompetitor.getName(), /* ignoreCase */ true)
|
||||
&& Util.equalsWithNull(removeSpaces(competitorDescriptor.getSailNumber()), removeSpaces(existingCompetitor.getSailID()), /* ignoreCase */ true)
|
||||
&& compareCountryCode(competitorDescriptor, existingCompetitor);
|
||||
@@ -45,11 +45,8 @@ public class CompetitorImportMatcher {
|
||||
return s==null?null:s.replace(" ", "").replace("\t", "");
|
||||
}
|
||||
|
||||
private boolean compareCountryCode(CompetitorDescriptorDTO competitorDescriptor, CompetitorDTO existingCompetitor) {
|
||||
return Util.equalsWithNull(competitorDescriptor.getCountryName(), existingCompetitor.getCountryName(), /* ignoreCase */ true)
|
||||
&& Util.equalsWithNull(competitorDescriptor.getThreeLetterIocCountryCode(),
|
||||
existingCompetitor.getThreeLetterIocCountryCode(), /* ignoreCase */ true)
|
||||
&& Util.equalsWithNull(competitorDescriptor.getTwoLetterIsoCountryCode(),
|
||||
existingCompetitor.getTwoLetterIsoCountryCode(), /* ignoreCase */ true);
|
||||
private boolean compareCountryCode(CompetitorDescriptor competitorDescriptor, CompetitorDTO existingCompetitor) {
|
||||
return Util.equalsWithNull(competitorDescriptor.getCountryCode().getThreeLetterIOCCode(),
|
||||
existingCompetitor.getThreeLetterIocCountryCode(), /* ignoreCase */ true);
|
||||
}
|
||||
}
|
||||
+9
-9
@@ -4,8 +4,8 @@ import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.gwt.event.dom.client.ChangeEvent;
|
||||
import com.google.gwt.event.dom.client.ChangeHandler;
|
||||
@@ -15,8 +15,8 @@ import com.google.gwt.user.client.ui.ListBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.base.CompetitorStore;
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDescriptorDTO;
|
||||
import com.sap.sailing.gwt.ui.client.ParallelExecutionCallback;
|
||||
import com.sap.sailing.gwt.ui.client.ParallelExecutionHolder;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
@@ -25,8 +25,8 @@ import com.sap.sailing.gwt.ui.shared.CompetitorProviderDTO;
|
||||
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.controls.busyindicator.BusyIndicator;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.BusyDisplay;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
@@ -186,13 +186,13 @@ public class CompetitorImportProviderSelectionDialog extends DataEntryDialog<Com
|
||||
final String regattaName = competitorImportDialogResult.getRegattaName();
|
||||
busyDisplay.setBusy(true);
|
||||
@SuppressWarnings("unchecked")
|
||||
final Iterable<CompetitorDescriptorDTO>[] competitorDescriptors = (Iterable<CompetitorDescriptorDTO>[]) new Iterable<?>[1];
|
||||
final Iterable<CompetitorDescriptor>[] competitorDescriptors = (Iterable<CompetitorDescriptor>[]) new Iterable<?>[1];
|
||||
@SuppressWarnings("unchecked")
|
||||
final Iterable<CompetitorDTO>[] competitors = (Iterable<CompetitorDTO>[]) new Iterable<?>[1];
|
||||
final ParallelExecutionCallback<Iterable<CompetitorDescriptorDTO>> getCompetitorDescriptorsCallback =
|
||||
new ParallelExecutionCallback<Iterable<CompetitorDescriptorDTO>>() {
|
||||
final ParallelExecutionCallback<Iterable<CompetitorDescriptor>> getCompetitorDescriptorsCallback =
|
||||
new ParallelExecutionCallback<Iterable<CompetitorDescriptor>>() {
|
||||
@Override
|
||||
public void onSuccess(Iterable<CompetitorDescriptorDTO> myCompetitorDescriptors) {
|
||||
public void onSuccess(Iterable<CompetitorDescriptor> myCompetitorDescriptors) {
|
||||
competitorDescriptors[0] = myCompetitorDescriptors;
|
||||
super.onSuccess(myCompetitorDescriptors);
|
||||
}
|
||||
@@ -232,7 +232,7 @@ public class CompetitorImportProviderSelectionDialog extends DataEntryDialog<Com
|
||||
* competitors.
|
||||
*
|
||||
* @param competitorDescriptors
|
||||
* imported competitor descriptors {@link CompetitorDescriptorDTO}
|
||||
* imported competitor descriptors {@link CompetitorDescriptor}
|
||||
* @param competitors
|
||||
* existing competitors from {@link CompetitorStore}
|
||||
* @author Alexander Tatarinovich
|
||||
@@ -240,7 +240,7 @@ public class CompetitorImportProviderSelectionDialog extends DataEntryDialog<Com
|
||||
*/
|
||||
public interface MatchImportedCompetitorsDialogFactory {
|
||||
MatchImportedCompetitorsDialog createMatchImportedCompetitorsDialog(
|
||||
Iterable<CompetitorDescriptorDTO> competitorDescriptors, Iterable<CompetitorDTO> competitors);
|
||||
Iterable<CompetitorDescriptor> competitorDescriptors, Iterable<CompetitorDTO> competitors);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-3
@@ -11,16 +11,16 @@ import com.google.gwt.user.client.ui.SimplePanel;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
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.gwt.ui.adminconsole.CompetitorImportProviderSelectionDialog.MatchImportedCompetitorsDialogFactory;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.BusyDisplay;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator;
|
||||
|
||||
/**
|
||||
@@ -158,7 +158,7 @@ public class CompetitorPanel extends SimplePanel implements BusyDisplay {
|
||||
return new MatchImportedCompetitorsDialogFactory() {
|
||||
@Override
|
||||
public MatchImportedCompetitorsDialog createMatchImportedCompetitorsDialog(
|
||||
final Iterable<CompetitorDescriptorDTO> competitorDescriptors,
|
||||
final Iterable<CompetitorDescriptor> competitorDescriptors,
|
||||
final Iterable<CompetitorDTO> competitors) {
|
||||
ImportCompetitorCallback importCompetitorCallback = new ImportCompetitorCallback(sailingService,
|
||||
errorReporter, stringMessages);
|
||||
|
||||
+24
-23
@@ -1,27 +1,34 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
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.dialog.DataEntryDialog.DialogCallback;
|
||||
|
||||
/**
|
||||
* Callback is responsible for saving competitors that have a {@code null} {@link CompetitorDTO#getIdAsString() ID} to
|
||||
* the competitor store using {@link SailingServiceAsync#addCompetitors(Iterable, AsyncCallback)} and registering them
|
||||
* if necessary. Logic for registering should be implemented in subclasses by overriding the {@link #registerCompetitors(Set)}
|
||||
* method which does nothing in this class.
|
||||
* Callback is responsible for creation competitors for which no {@link CompetitorDTO} that represents an
|
||||
* already existing competitor has been provided, and save those newly created competitors to
|
||||
* the competitor store using {@link SailingServiceAsync#addCompetitors(Iterable, AsyncCallback)}. The combined
|
||||
* set of competitors as represented by the {@link CompetitorDTO}s provided as values representing the existing
|
||||
* competitors to use, plus those {@link CompetitorDTO}s returned from the service representing the newly
|
||||
* created competitors (those actually "imported") are then passed to {@link #registerCompetitors(Set)} which
|
||||
* in this class does nothing but may be overridden by subclasses.
|
||||
*
|
||||
* @author Alexander Tatarinovich
|
||||
*
|
||||
*/
|
||||
public class ImportCompetitorCallback implements DialogCallback<Set<CompetitorDTO>> {
|
||||
public class ImportCompetitorCallback implements DialogCallback<Pair<Map<CompetitorDescriptor, CompetitorDTO>, String>> {
|
||||
protected final SailingServiceAsync sailingService;
|
||||
protected final ErrorReporter errorReporter;
|
||||
protected final StringMessages stringMessages;
|
||||
@@ -38,24 +45,17 @@ public class ImportCompetitorCallback implements DialogCallback<Set<CompetitorDT
|
||||
}
|
||||
|
||||
@Override
|
||||
public void ok(final Set<CompetitorDTO> competitorsForRegistering) {
|
||||
List<CompetitorDTO> competitorsForSaving = prepareCompetitorsForSaving(competitorsForRegistering);
|
||||
registerCompetitorsAfterSaving(competitorsForSaving, competitorsForRegistering);
|
||||
public void ok(final Pair<Map<CompetitorDescriptor, CompetitorDTO>, String> competitorsForRegisteringAndSearchTag) {
|
||||
registerCompetitorsAfterSaving(competitorsForRegisteringAndSearchTag.getA().entrySet().stream().filter((e->e.getValue() != null)).map(e->e.getKey()).
|
||||
collect(Collectors.toList()),
|
||||
competitorsForRegisteringAndSearchTag.getA().values(), competitorsForRegisteringAndSearchTag.getB());
|
||||
}
|
||||
|
||||
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<List<CompetitorDTO>>() {
|
||||
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) {
|
||||
errorReporter.reportError(caught.getMessage());
|
||||
@@ -63,7 +63,8 @@ public class ImportCompetitorCallback implements DialogCallback<Set<CompetitorDT
|
||||
|
||||
@Override
|
||||
public void onSuccess(List<CompetitorDTO> result) {
|
||||
final Set<CompetitorDTO> competitorsToAddWithNewOnesReplacedBySavedOnesWithId = new HashSet<>(competitorsForRegistration);
|
||||
final Set<CompetitorDTO> competitorsToAddWithNewOnesReplacedBySavedOnesWithId = new HashSet<>();
|
||||
Util.addAll(competitorsForRegistration, competitorsToAddWithNewOnesReplacedBySavedOnesWithId);
|
||||
// remove the locally constructed CompetitorDTOs that had null as their ID...
|
||||
competitorsToAddWithNewOnesReplacedBySavedOnesWithId.removeAll(competitorsForSaving);
|
||||
// ...and replace by those returned by the server after saving to the competitor store where they received an ID:
|
||||
|
||||
+43
-48
@@ -1,7 +1,6 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@@ -9,20 +8,19 @@ import java.util.Set;
|
||||
import com.google.gwt.user.client.ui.CaptionPanel;
|
||||
import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.ScrollPanel;
|
||||
import com.google.gwt.user.client.ui.TextBox;
|
||||
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.CompetitorDescriptor;
|
||||
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.adminconsole.CompetitorDescriptorTableWrapper.CompetitorsToImportToExistingLinking;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
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.celltable.RefreshableMultiSelectionModel;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSingleSelectionModel;
|
||||
@@ -41,6 +39,11 @@ import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
* {@link CompetitorDTO#getIdAsString() ID}.
|
||||
* <p>
|
||||
*
|
||||
* The result is a {@link Map} whose keys are all competitors selected for import and whose values are {@code null}
|
||||
* in case the competitor shall really be imported and hence be created anew, or a valid {@link CompetitorDTO} with
|
||||
* a valid {@link CompetitorDTO#getIdAsString() ID}, representing an already existing competitor that shall be used
|
||||
* instead of the key competitor descriptor.<p>
|
||||
*
|
||||
* Use an {@link ImportCompetitorCallback} or subclass thereof as the {@link DialogCallback} passed to the constructor
|
||||
* for conveniently saving imported competitors to the store using
|
||||
* {@link SailingServiceAsync#addCompetitors(Iterable, com.google.gwt.user.client.rpc.AsyncCallback)}. Define a subclass
|
||||
@@ -50,35 +53,37 @@ import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
* @author Alexander Tatarinovich
|
||||
*
|
||||
*/
|
||||
public class MatchImportedCompetitorsDialog extends DataEntryDialog<Set<CompetitorDTO>> {
|
||||
public class MatchImportedCompetitorsDialog extends DataEntryDialog<Pair<Map<CompetitorDescriptor, CompetitorDTO>, String>> {
|
||||
|
||||
private CompetitorDescriptorTableWrapper<RefreshableMultiSelectionModel<CompetitorDescriptorDTO>> importedCompetitorsTable;
|
||||
private CompetitorDescriptorTableWrapper<RefreshableMultiSelectionModel<CompetitorDescriptor>> importedCompetitorsTable;
|
||||
private CompetitorTableWrapper<RefreshableSingleSelectionModel<CompetitorDTO>> existingCompetitorsTable;
|
||||
|
||||
private TextBox searchTagField;
|
||||
|
||||
private final StringMessages stringMessages;
|
||||
private final SailingServiceAsync sailingService;
|
||||
private final ErrorReporter errorReporter;
|
||||
|
||||
private final Iterable<CompetitorDescriptorDTO> competitorDescriptorDTOs;
|
||||
private final Iterable<CompetitorDescriptor> CompetitorDescriptors;
|
||||
private final CompetitorImportMatcher competitorImportMatcher;
|
||||
|
||||
private final Map<CompetitorDescriptorDTO, CompetitorDTO> existingCompetitorsByImported = new HashMap<>();
|
||||
private final Map<CompetitorDescriptor, CompetitorDTO> existingCompetitorsByImported = new HashMap<>();
|
||||
|
||||
public MatchImportedCompetitorsDialog(final Iterable<CompetitorDescriptorDTO> competitorDescriptorDTOs,
|
||||
public MatchImportedCompetitorsDialog(final Iterable<CompetitorDescriptor> CompetitorDescriptors,
|
||||
final Iterable<CompetitorDTO> existingCompetitor, StringMessages stringMessages,
|
||||
SailingServiceAsync sailingService, ErrorReporter errorReporter,
|
||||
DialogCallback<Set<CompetitorDTO>> callback) {
|
||||
DialogCallback<Pair<Map<CompetitorDescriptor, CompetitorDTO>, String>> callback) {
|
||||
super(stringMessages.importCompetitors(), stringMessages.chooseWhichCompetitorsShouldBeImported(),
|
||||
stringMessages.ok(), stringMessages.cancel(), null, callback);
|
||||
stringMessages.ok(), stringMessages.cancel(), /* validator */ null, callback);
|
||||
this.stringMessages = stringMessages;
|
||||
this.sailingService = sailingService;
|
||||
this.errorReporter = errorReporter;
|
||||
this.competitorDescriptorDTOs = competitorDescriptorDTOs;
|
||||
this.CompetitorDescriptors = CompetitorDescriptors;
|
||||
competitorImportMatcher = new CompetitorImportMatcher(existingCompetitor);
|
||||
}
|
||||
|
||||
protected void refreshInImportTable(CompetitorDescriptorDTO competitor) {
|
||||
final List<CompetitorDescriptorDTO> importedCompetitors = importedCompetitorsTable.getDataProvider().getList();
|
||||
protected void refreshInImportTable(CompetitorDescriptor competitor) {
|
||||
final List<CompetitorDescriptor> importedCompetitors = importedCompetitorsTable.getDataProvider().getList();
|
||||
importedCompetitors.set(importedCompetitors.indexOf(competitor), competitor); // force refresh of line item in table, showing new linkage state
|
||||
}
|
||||
|
||||
@@ -89,7 +94,7 @@ public class MatchImportedCompetitorsDialog extends DataEntryDialog<Set<Competit
|
||||
false, /* enablePager */true);
|
||||
final CompetitorsToImportToExistingLinking linker = new CompetitorsToImportToExistingLinking() {
|
||||
@Override
|
||||
public void unlinkCompetitor(CompetitorDescriptorDTO competitor) {
|
||||
public void unlinkCompetitor(CompetitorDescriptor competitor) {
|
||||
final CompetitorDTO existingCompetitor = existingCompetitorsByImported.remove(competitor);
|
||||
if (existingCompetitor != null) {
|
||||
existingCompetitorsTable.getSelectionModel().setSelected(existingCompetitor, false);
|
||||
@@ -98,15 +103,15 @@ public class MatchImportedCompetitorsDialog extends DataEntryDialog<Set<Competit
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompetitorDTO getExistingCompetitorToUseInsteadOf(CompetitorDescriptorDTO competitor) {
|
||||
public CompetitorDTO getExistingCompetitorToUseInsteadOf(CompetitorDescriptor competitor) {
|
||||
return existingCompetitorsByImported.get(competitor);
|
||||
}
|
||||
};
|
||||
importedCompetitorsTable = new CompetitorDescriptorTableWrapper<>(competitorImportMatcher, sailingService,
|
||||
stringMessages, errorReporter, /* multiSelection */ true, /* enablePager */false, /* unlinkCallback */ linker);
|
||||
importedCompetitorsTable.refreshCompetitorDescriptorList(competitorDescriptorDTOs);
|
||||
importedCompetitorsTable.refreshCompetitorDescriptorList(CompetitorDescriptors);
|
||||
|
||||
final RefreshableMultiSelectionModel<CompetitorDescriptorDTO> importedCompetitorSelectionModel = importedCompetitorsTable
|
||||
final RefreshableMultiSelectionModel<CompetitorDescriptor> importedCompetitorSelectionModel = importedCompetitorsTable
|
||||
.getSelectionModel();
|
||||
importedCompetitorSelectionModel
|
||||
.addSelectionChangeHandler(getHandlerForImportedCompetitorsModel(importedCompetitorSelectionModel));
|
||||
@@ -120,7 +125,6 @@ public class MatchImportedCompetitorsDialog extends DataEntryDialog<Set<Competit
|
||||
final HorizontalPanel competitorImportPanel = new HorizontalPanel();
|
||||
final CaptionPanel existingCompetitorsPanel = new CaptionPanel(stringMessages.existingCompetitors());
|
||||
final CaptionPanel importedCompetitorsPanel = new CaptionPanel(stringMessages.importedCompetitors());
|
||||
|
||||
existingCompetitorsPanel.add(existingCompetitorsTable);
|
||||
importedCompetitorsPanel.add(importedCompetitorsTable);
|
||||
|
||||
@@ -130,21 +134,27 @@ public class MatchImportedCompetitorsDialog extends DataEntryDialog<Set<Competit
|
||||
scrollCompetitorRegistrationPanel.setSize("100%", "500px");
|
||||
competitorImportPanel.add(scrollCompetitorRegistrationPanel);
|
||||
competitorImportPanel.add(scrollExistingCompetitorRegistrationPanel);
|
||||
|
||||
searchTagField = createTextBox("", 40);
|
||||
searchTagField.getElement().setPropertyString("placeholder", stringMessages.searchTagForImportedCompetitorPlaceholder());
|
||||
final Label searchTagLabel = new Label(stringMessages.searchTag());
|
||||
final HorizontalPanel searchTagPanel = new HorizontalPanel();
|
||||
searchTagPanel.add(searchTagLabel);
|
||||
searchTagPanel.add(searchTagField);
|
||||
mainPanel.add(searchTagPanel);
|
||||
mainPanel.add(competitorImportPanel);
|
||||
return mainPanel;
|
||||
}
|
||||
|
||||
private Handler getHandlerForExistingCompetitorsModel(
|
||||
final RefreshableMultiSelectionModel<CompetitorDescriptorDTO> importedCompetitorSelectionModel,
|
||||
final RefreshableMultiSelectionModel<CompetitorDescriptor> importedCompetitorSelectionModel,
|
||||
final RefreshableSingleSelectionModel<CompetitorDTO> existingCompetitorSelectionModel) {
|
||||
return new Handler() {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
Set<CompetitorDescriptorDTO> competitorDescriptors = importedCompetitorSelectionModel.getSelectedSet();
|
||||
Set<CompetitorDescriptor> competitorDescriptors = importedCompetitorSelectionModel.getSelectedSet();
|
||||
if (competitorDescriptors.size() == 1) {
|
||||
final CompetitorDTO selectedCompetitor = existingCompetitorSelectionModel.getSelectedObject();
|
||||
final CompetitorDescriptorDTO competitorFromImport = competitorDescriptors.iterator().next();
|
||||
final CompetitorDescriptor competitorFromImport = competitorDescriptors.iterator().next();
|
||||
final boolean changed;
|
||||
if (selectedCompetitor == null) {
|
||||
changed = existingCompetitorsByImported.remove(competitorFromImport) != null;
|
||||
@@ -161,18 +171,18 @@ public class MatchImportedCompetitorsDialog extends DataEntryDialog<Set<Competit
|
||||
}
|
||||
|
||||
private Handler getHandlerForImportedCompetitorsModel(
|
||||
final RefreshableMultiSelectionModel<CompetitorDescriptorDTO> importedCompetitorSelectionModel) {
|
||||
final RefreshableMultiSelectionModel<CompetitorDescriptor> importedCompetitorSelectionModel) {
|
||||
return new Handler() {
|
||||
private boolean refreshing = false;
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
if (!refreshing) {
|
||||
Set<CompetitorDescriptorDTO> selectedCompetitorDescriptors = importedCompetitorSelectionModel.getSelectedSet();
|
||||
Set<CompetitorDescriptor> selectedCompetitorDescriptors = importedCompetitorSelectionModel.getSelectedSet();
|
||||
if (selectedCompetitorDescriptors.size() > 1) {
|
||||
existingCompetitorsTable.getFilterField().removeAll();
|
||||
return;
|
||||
}
|
||||
CompetitorDescriptorDTO selectedCompetitorDescriptor = selectedCompetitorDescriptors.isEmpty() ? null
|
||||
CompetitorDescriptor selectedCompetitorDescriptor = selectedCompetitorDescriptors.isEmpty() ? null
|
||||
: importedCompetitorSelectionModel.getSelectedSet().iterator().next();
|
||||
refreshing = true;
|
||||
try {
|
||||
@@ -191,26 +201,11 @@ public class MatchImportedCompetitorsDialog extends DataEntryDialog<Set<Competit
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Set<CompetitorDTO> getResult() {
|
||||
final Set<CompetitorDTO> competitorsForSave = new HashSet<>();
|
||||
for (CompetitorDescriptorDTO competitorDescriptor : importedCompetitorsTable.getSelectionModel().getSelectedSet()) {
|
||||
CompetitorDTO existingCompetitor = existingCompetitorsByImported.get(competitorDescriptor);
|
||||
if (existingCompetitor != null) {
|
||||
competitorsForSave.add(existingCompetitor);
|
||||
} else {
|
||||
competitorsForSave.add(convertCompetitorDescriptorToCompetitorDTO(competitorDescriptor));
|
||||
}
|
||||
protected Pair<Map<CompetitorDescriptor, CompetitorDTO>, String> getResult() {
|
||||
final Map<CompetitorDescriptor, CompetitorDTO> result = new HashMap<>();
|
||||
for (CompetitorDescriptor competitorDescriptor : importedCompetitorsTable.getSelectionModel().getSelectedSet()) {
|
||||
result.put(competitorDescriptor, existingCompetitorsByImported.get(competitorDescriptor));
|
||||
}
|
||||
return competitorsForSave;
|
||||
}
|
||||
|
||||
private CompetitorDTO convertCompetitorDescriptorToCompetitorDTO(CompetitorDescriptorDTO competitorDescriptor) {
|
||||
BoatDTO defaultBoat = new BoatDTO(null, competitorDescriptor.getSailNumber());
|
||||
BoatClassDTO defaultBoatClass = new BoatClassDTO(competitorDescriptor.getBoatClassName() == null
|
||||
? BoatClassDTO.DEFAULT_NAME : competitorDescriptor.getBoatClassName(),
|
||||
/* some default hull length; not used if boat class name can be resolved on the server */ new MeterDistance(5));
|
||||
return new CompetitorDTOImpl(competitorDescriptor.getName(), null, null,
|
||||
competitorDescriptor.getTwoLetterIsoCountryCode(), competitorDescriptor.getThreeLetterIocCountryCode(),
|
||||
competitorDescriptor.getCountryName(), null, null, null, defaultBoat, defaultBoatClass, null, null, null);
|
||||
return new Pair<>(result, searchTagField.getText());
|
||||
}
|
||||
}
|
||||
+1
-36
@@ -1,14 +1,9 @@
|
||||
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;
|
||||
@@ -17,43 +12,13 @@ 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) {
|
||||
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
|
||||
|
||||
+3
-3
@@ -11,6 +11,7 @@ import java.util.UUID;
|
||||
import com.google.gwt.user.client.rpc.RemoteService;
|
||||
import com.sap.sailing.domain.abstractlog.Revokable;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
import com.sap.sailing.domain.common.DataImportProgress;
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.domain.common.LeaderboardType;
|
||||
@@ -32,7 +33,6 @@ import com.sap.sailing.domain.common.abstractlog.NotRevokableException;
|
||||
import com.sap.sailing.domain.common.abstractlog.TimePointSpecificationFoundInLog;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDescriptorDTO;
|
||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
import com.sap.sailing.domain.common.dto.IncrementalOrFullLeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
@@ -348,7 +348,7 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
|
||||
|
||||
CompetitorProviderDTO getCompetitorProviderDTOByName(String providerName) throws Exception;
|
||||
|
||||
Iterable<CompetitorDescriptorDTO> getCompetitorDescriptors(String competitorProviderName, String eventName,
|
||||
Iterable<CompetitorDescriptor> getCompetitorDescriptors(String competitorProviderName, String eventName,
|
||||
String regattaName) throws Exception;
|
||||
|
||||
WindInfoForRaceDTO getWindSourcesInfo(RegattaAndRaceIdentifier raceIdentifier);
|
||||
@@ -445,7 +445,7 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
|
||||
|
||||
CompetitorDTO addOrUpdateCompetitor(CompetitorDTO competitor) throws Exception;
|
||||
|
||||
List<CompetitorDTO> addCompetitors(Iterable<CompetitorDTO> competitorDTOs) throws Exception;
|
||||
List<CompetitorDTO> addCompetitors(Iterable<CompetitorDescriptor> competitorsForSaving, String searchTag) throws Exception;
|
||||
|
||||
void allowCompetitorResetToDefaults(Iterable<CompetitorDTO> competitors);
|
||||
|
||||
|
||||
+8
-4
@@ -9,6 +9,7 @@ import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
import com.sap.sailing.domain.common.DataImportProgress;
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.domain.common.LeaderboardType;
|
||||
@@ -27,7 +28,6 @@ import com.sap.sailing.domain.common.WindSource;
|
||||
import com.sap.sailing.domain.common.abstractlog.TimePointSpecificationFoundInLog;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDescriptorDTO;
|
||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
import com.sap.sailing.domain.common.dto.IncrementalOrFullLeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
@@ -469,8 +469,7 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan
|
||||
|
||||
void getCompetitorProviderDTOByName(String providerName, AsyncCallback<CompetitorProviderDTO> callback);
|
||||
|
||||
void getCompetitorDescriptors(String competitorProviderName, String eventName, String regattaName,
|
||||
AsyncCallback<Iterable<CompetitorDescriptorDTO>> callback);
|
||||
void getCompetitorDescriptors(String competitorProviderName, String eventName, String regattaName, AsyncCallback<Iterable<CompetitorDescriptor>> callback);
|
||||
|
||||
void getWindSourcesInfo(RegattaAndRaceIdentifier raceIdentifier, AsyncCallback<WindInfoForRaceDTO> callback);
|
||||
|
||||
@@ -597,7 +596,12 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan
|
||||
|
||||
void addOrUpdateCompetitor(CompetitorDTO competitor, AsyncCallback<CompetitorDTO> asyncCallback);
|
||||
|
||||
void addCompetitors(Iterable<CompetitorDTO> competitorDTOs, AsyncCallback<List<CompetitorDTO>> asyncCallback);
|
||||
/**
|
||||
* @param searchTag
|
||||
* set as the {@code searchTag} property on all new competitors created and therefore returned in the
|
||||
* {@link CompetitorDTO#getSearchTag()} properties
|
||||
*/
|
||||
void addCompetitors(Iterable<CompetitorDescriptor> competitorsForSaving, String searchTag, AsyncCallback<List<CompetitorDTO>> asyncCallback);
|
||||
|
||||
void allowCompetitorResetToDefaults(Iterable<CompetitorDTO> competitors, AsyncCallback<Void> asyncCallback);
|
||||
|
||||
|
||||
+1
@@ -1759,4 +1759,5 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
|
||||
String errorLoadingCompetitorImportProviders(String message);
|
||||
String errorLoadingCompetitorImportDescriptors(String message);
|
||||
String couldNotSaveCompetitorRegistrations(String message);
|
||||
String searchTagForImportedCompetitorPlaceholder();
|
||||
}
|
||||
+2
-1
@@ -1730,4 +1730,5 @@ hasMatches=Has matches
|
||||
filterImportedCompetitorsByNameSailRaceFleet=Filter competitors to import by name, sail number, race or fleet
|
||||
errorLoadingCompetitorImportProviders=Error loading competitor import providers: {0}
|
||||
errorLoadingCompetitorImportDescriptors=Error loading competitor import descriptors: {0}
|
||||
couldNotSaveCompetitorRegistrations=Could not save competitor registrations: {0}
|
||||
couldNotSaveCompetitorRegistrations=Could not save competitor registrations: {0}
|
||||
searchTagForImportedCompetitorPlaceholder=Use, e.g., the race+fleet name
|
||||
+2
-1
@@ -1715,4 +1715,5 @@ hasMatches=ähnliche vorhanden
|
||||
filterImportedCompetitorsByNameSailRaceFleet=Zu importierende Teilnehmer filtern nach Name, Segelnummer, Wettfahrt oder Gruppe
|
||||
errorLoadingCompetitorImportProviders=Fehler beim Laden der Quellen für den Teilnehmerdaten-Import: {0}
|
||||
errorLoadingCompetitorImportDescriptors=Fehler beim Laden der zu importierenden Teilnehmerdaten: {0}
|
||||
couldNotSaveCompetitorRegistrations=Teilnehmerregistrierung konnte nicht gespeichert werden: {0}
|
||||
couldNotSaveCompetitorRegistrations=Teilnehmerregistrierung konnte nicht gespeichert werden: {0}
|
||||
searchTagForImportedCompetitorPlaceholder=Z.B. Renn- und Gruppenname
|
||||
+24
-62
@@ -55,7 +55,6 @@ import org.osgi.framework.InvalidSyntaxException;
|
||||
import org.osgi.framework.ServiceReference;
|
||||
import org.osgi.util.tracker.ServiceTracker;
|
||||
|
||||
import com.sap.sailing.competitorimport.CompetitorDescriptor;
|
||||
import com.sap.sailing.competitorimport.CompetitorProvider;
|
||||
import com.sap.sailing.domain.abstractlog.AbstractLog;
|
||||
import com.sap.sailing.domain.abstractlog.AbstractLogEvent;
|
||||
@@ -108,7 +107,6 @@ import com.sap.sailing.domain.base.LeaderboardGroupBase;
|
||||
import com.sap.sailing.domain.base.Leg;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.Nationality;
|
||||
import com.sap.sailing.domain.base.Person;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.base.RaceColumnInSeries;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
@@ -148,6 +146,7 @@ import com.sap.sailing.domain.base.impl.SailingServerConfigurationImpl;
|
||||
import com.sap.sailing.domain.base.impl.SeriesImpl;
|
||||
import com.sap.sailing.domain.base.impl.TeamImpl;
|
||||
import com.sap.sailing.domain.common.Bearing;
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.DataImportProgress;
|
||||
import com.sap.sailing.domain.common.DataImportSubProgress;
|
||||
@@ -190,13 +189,11 @@ import com.sap.sailing.domain.common.abstractlog.TimePointSpecificationFoundInLo
|
||||
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.CompetitorDescriptorDTO;
|
||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
import com.sap.sailing.domain.common.dto.FullLeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.IncrementalLeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.IncrementalOrFullLeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.PersonDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTOFactory;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnInSeriesDTO;
|
||||
@@ -728,52 +725,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<CompetitorDescriptorDTO> getCompetitorDescriptors(String competitorProviderName, String eventName,
|
||||
public Iterable<CompetitorDescriptor> getCompetitorDescriptors(String competitorProviderName, String eventName,
|
||||
String regattaName) throws Exception {
|
||||
for (CompetitorProvider cp : getAllCompetitorProviders()) {
|
||||
if (cp.getName().equals(competitorProviderName)) {
|
||||
Iterable<CompetitorDescriptor> competitorDescriptors = cp.getCompetitorDescriptors(eventName, regattaName);
|
||||
Set<CompetitorDescriptorDTO> competitorDescriptorDTOs = getCompetitorProviderDTOs(competitorDescriptors);
|
||||
return competitorDescriptorDTOs;
|
||||
return cp.getCompetitorDescriptors(eventName, regattaName);
|
||||
}
|
||||
}
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
private Set<CompetitorDescriptorDTO> getCompetitorProviderDTOs(
|
||||
Iterable<CompetitorDescriptor> competitorDescriptors) {
|
||||
Set<CompetitorDescriptorDTO> competitorDescriptorDTOs = new HashSet<>();
|
||||
for (CompetitorDescriptor cd : competitorDescriptors) {
|
||||
CompetitorDescriptorDTO cdDTO = convertToCompetitorDescriptorDTO(cd);
|
||||
competitorDescriptorDTOs.add(cdDTO);
|
||||
}
|
||||
return competitorDescriptorDTOs;
|
||||
}
|
||||
|
||||
private CompetitorDescriptorDTO convertToCompetitorDescriptorDTO(CompetitorDescriptor competitorDescriptor) {
|
||||
Set<PersonDTO> persons = new HashSet<>();
|
||||
for (Person person : competitorDescriptor.getPersons()) {
|
||||
String nationalityThreeLetterIOCAcronym = person.getNationality() != null
|
||||
? person.getNationality().getThreeLetterIOCAcronym() : null;
|
||||
PersonDTO personDTO = new PersonDTO(person.getName(), person.getDateOfBirth(), person.getDescription(),
|
||||
nationalityThreeLetterIOCAcronym);
|
||||
persons.add(personDTO);
|
||||
}
|
||||
|
||||
CountryCode countryCode = competitorDescriptor.getCountryCode();
|
||||
String countryName = countryCode == null ? null : countryCode.getName();
|
||||
String twoLetterIsoCountryCode = countryCode == null ? null : countryCode.getTwoLetterISOCode();
|
||||
String threeLetterIocCountryCode = countryCode == null ? null : countryCode.getThreeLetterIOCCode();
|
||||
|
||||
CompetitorDescriptorDTO competitorDescriptorDTO = new CompetitorDescriptorDTO(
|
||||
competitorDescriptor.getEventName(), competitorDescriptor.getRegattaName(),
|
||||
competitorDescriptor.getBoatClassName(), competitorDescriptor.getRaceName(),
|
||||
competitorDescriptor.getFleetName(), competitorDescriptor.getSailNumber(), competitorDescriptor.getCompetitorName(),
|
||||
countryName, twoLetterIsoCountryCode, threeLetterIocCountryCode, persons);
|
||||
|
||||
return competitorDescriptorDTO;
|
||||
}
|
||||
|
||||
/**
|
||||
* If <code>date</code> is <code>null</code>, the {@link LiveLeaderboardUpdater} for the
|
||||
* <code>leaderboardName</code> requested is obtained or created if it doesn't exist yet. The request is then passed
|
||||
@@ -4867,10 +4828,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CompetitorDTO> addCompetitors(Iterable<CompetitorDTO> competitorDTOs) throws URISyntaxException {
|
||||
public List<CompetitorDTO> addCompetitors(Iterable<CompetitorDescriptor> competitorDescriptors, String searchTag) throws URISyntaxException {
|
||||
List<Competitor> competitorsForSaving = new ArrayList<>();
|
||||
for (CompetitorDTO competitorDTO : competitorDTOs) {
|
||||
Competitor competitor = convertCompetitorDTOToCompetitor(competitorDTO);
|
||||
for (final CompetitorDescriptor competitorDescriptor : competitorDescriptors) {
|
||||
Competitor competitor = convertCompetitorDescriptorToCompetitor(competitorDescriptor, searchTag);
|
||||
competitorsForSaving.add(competitor);
|
||||
}
|
||||
getBaseDomainFactory().getCompetitorStore().addCompetitors(competitorsForSaving);
|
||||
@@ -4878,24 +4839,25 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link Competitor} object from a {@link CompetitorDTO}, assuming that the DTO does not have
|
||||
* a valid {@link CompetitorDTO#getIdAsString() ID} set.
|
||||
* Creates a new {@link Competitor} object from a {@link CompetitorDescriptor} with a new random {@link UUID}.
|
||||
*
|
||||
* @param searchTag
|
||||
* set as the {@link Competitor#getSearchTag() searchTag} property of all new competitors
|
||||
*/
|
||||
private Competitor convertCompetitorDTOToCompetitor(CompetitorDTO competitorDTO) throws URISyntaxException {
|
||||
assert competitorDTO.getIdAsString() == null;
|
||||
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(), Collections.singleton(sailor), null);
|
||||
DynamicBoat boat = new BoatImpl(competitorDTO.getSailID(), 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());
|
||||
private Competitor convertCompetitorDescriptorToCompetitor(CompetitorDescriptor competitorDescriptor, String searchTag) throws URISyntaxException {
|
||||
Nationality nationality = (competitorDescriptor.getCountryCode() == null
|
||||
|| competitorDescriptor.getCountryCode().getThreeLetterIOCCode() == null
|
||||
|| competitorDescriptor.getCountryCode().getThreeLetterIOCCode().isEmpty()) ? null
|
||||
: getBaseDomainFactory().getOrCreateNationality(competitorDescriptor.getCountryCode().getThreeLetterIOCCode());
|
||||
BoatClass boatClass = getBaseDomainFactory().getOrCreateBoatClass(competitorDescriptor.getBoatClassName());
|
||||
DynamicPerson sailor = new PersonImpl(competitorDescriptor.getName(), nationality, null, null);
|
||||
DynamicTeam team = new TeamImpl(competitorDescriptor.getName(), Collections.singleton(sailor), null);
|
||||
DynamicBoat boat = new BoatImpl(competitorDescriptor.getSailNumber(), boatClass, competitorDescriptor.getSailNumber());
|
||||
Competitor competitor = new CompetitorImpl(UUID.randomUUID(), competitorDescriptor.getName(),
|
||||
/* color */ null, /* eMail */ null,
|
||||
/* flag image */ null, team,
|
||||
boat, competitorDescriptor.getTimeOnTimeFactor(),
|
||||
competitorDescriptor.getTimeOnDistanceAllowancePerNauticalMile(), searchTag);
|
||||
return competitor;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -15,8 +15,8 @@ import javax.xml.bind.JAXBException;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.competitorimport.CompetitorDescriptor;
|
||||
import com.sap.sailing.competitorimport.CompetitorProvider;
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
import com.sap.sailing.manage2sail.RegattaResultDescriptor;
|
||||
import com.sap.sailing.manage2sail.resultimport.AbstractManage2SailProvider;
|
||||
import com.sap.sailing.manage2sail.resultimport.CompetitorDocumentProvider;
|
||||
|
||||
+9
-5
@@ -13,11 +13,11 @@ import java.util.stream.Collectors;
|
||||
|
||||
import javax.xml.bind.JAXBException;
|
||||
|
||||
import com.sap.sailing.competitorimport.CompetitorDescriptor;
|
||||
import com.sap.sailing.competitorimport.CompetitorProvider;
|
||||
import com.sap.sailing.domain.base.Nationality;
|
||||
import com.sap.sailing.domain.base.impl.NationalityImpl;
|
||||
import com.sap.sailing.domain.base.impl.PersonImpl;
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
import com.sap.sailing.domain.common.dto.PersonDTO;
|
||||
import com.sap.sailing.resultimport.ResultDocumentDescriptor;
|
||||
import com.sap.sailing.resultimport.ResultUrlRegistry;
|
||||
import com.sap.sailing.xrr.resultimport.Parser;
|
||||
@@ -153,7 +153,7 @@ public class CompetitorImporter extends AbstractManage2SailProvider implements C
|
||||
team.getNOC() == null ? null : new NationalityImpl(team.getNOC().name())
|
||||
};
|
||||
final String boatClassName = parser.getBoatClassName(division);
|
||||
List<com.sap.sailing.domain.base.Person> persons = team.getCrew().stream().sorted((c1, c2) -> -c1.getPosition().name().compareTo(c2.getPosition().name())).map((crew)->{
|
||||
List<PersonDTO> persons = team.getCrew().stream().sorted((c1, c2) -> -c1.getPosition().name().compareTo(c2.getPosition().name())).map((crew)->{
|
||||
Person xrrPerson = parser.getPerson(crew.getPersonID());
|
||||
String name = xrrPerson.getGivenName()+" "+xrrPerson.getFamilyName();
|
||||
final Nationality nationality;
|
||||
@@ -165,14 +165,18 @@ public class CompetitorImporter extends AbstractManage2SailProvider implements C
|
||||
teamNationality[0] = nationality;
|
||||
}
|
||||
}
|
||||
com.sap.sailing.domain.base.Person person = new PersonImpl(name, nationality, /* date of birth */ null, /* description */ xrrPerson.getGender()==null?null:xrrPerson.getGender().name());
|
||||
PersonDTO person = new PersonDTO(
|
||||
name, /* dateOfBirth */ null, /* description */ xrrPerson.getGender()==null?null:xrrPerson.getGender().name(),
|
||||
nationality.getCountryCode().getThreeLetterIOCCode());
|
||||
return person;
|
||||
}).collect(Collectors.toList());
|
||||
final CompetitorDescriptor competitorDescriptor = new CompetitorDescriptor(
|
||||
event==null?null:event.getTitle(),
|
||||
division==null?null:(division.getTitle() + (division.getGender() == null ? "" : division.getGender().name())),
|
||||
boatClassName, race != null ? race.getRaceName() : null, /* fleetName */ null, sailNumber,
|
||||
team.getTeamName(), teamNationality[0] == null ? null : teamNationality[0].getCountryCode(), persons);
|
||||
team.getTeamName(), team.getTeamName(), boat.getBoatName(),
|
||||
teamNationality[0] == null ? null : teamNationality[0].getCountryCode(),
|
||||
persons, /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null);
|
||||
return competitorDescriptor;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user