From 8c7f775b116e161f81f08207beedc7bed62da1f6 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Tue, 19 Jan 2021 12:09:20 +0100 Subject: [PATCH 1/3] bug5201: Abstracted duplicated CompetitorProvider code --- ...ractManage2SailResultDocumentProvider.java | 4 +- .../Manage2SailCompetitorProvider.java | 56 ++++++ .../impl/CompetitorResolver.java} | 79 ++++----- .../YachtScoringCompetitorProvider.java | 161 +----------------- 4 files changed, 99 insertions(+), 201 deletions(-) create mode 100644 java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/Manage2SailCompetitorProvider.java rename java/{com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/CompetitorImporter.java => com.sap.sailing.xrr.resultimport/src/com/sap/sailing/xrr/resultimport/impl/CompetitorResolver.java} (82%) diff --git a/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/AbstractManage2SailResultDocumentProvider.java b/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/AbstractManage2SailResultDocumentProvider.java index b04bf9ae3ba..fe7a28e39d0 100644 --- a/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/AbstractManage2SailResultDocumentProvider.java +++ b/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/AbstractManage2SailResultDocumentProvider.java @@ -12,17 +12,19 @@ import com.sap.sailing.manage2sail.EventResultDescriptor; import com.sap.sailing.manage2sail.Manage2SailEventResultsParserImpl; import com.sap.sailing.manage2sail.RegattaResultDescriptor; import com.sap.sailing.resultimport.ResultDocumentDescriptor; +import com.sap.sailing.resultimport.ResultDocumentProvider; import com.sap.sailing.resultimport.impl.ResultDocumentDescriptorImpl; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.util.HttpUrlConnectionHelper; -public abstract class AbstractManage2SailResultDocumentProvider { +public abstract class AbstractManage2SailResultDocumentProvider implements ResultDocumentProvider{ private final ResultUrlProvider resultUrlProvider; public AbstractManage2SailResultDocumentProvider(final ResultUrlProvider resultUrlProvider) { this.resultUrlProvider = resultUrlProvider; } + @Override public Iterable getResultDocumentDescriptors() throws IOException { List result = new ArrayList<>(); Manage2SailEventResultsParserImpl parser = new Manage2SailEventResultsParserImpl(); diff --git a/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/Manage2SailCompetitorProvider.java b/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/Manage2SailCompetitorProvider.java new file mode 100644 index 00000000000..2578ad4fdd6 --- /dev/null +++ b/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/Manage2SailCompetitorProvider.java @@ -0,0 +1,56 @@ +package com.sap.sailing.manage2sail.resultimport; + +import java.io.IOException; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +import javax.xml.bind.JAXBException; + +import com.sap.sailing.competitorimport.CompetitorProvider; +import com.sap.sailing.domain.common.CompetitorDescriptor; +import com.sap.sailing.resultimport.ResultUrlRegistry; +import com.sap.sailing.xrr.resultimport.ParserFactory; +import com.sap.sailing.xrr.resultimport.impl.CompetitorResolver; +import com.sap.sse.i18n.ResourceBundleStringMessages; +import com.sap.sse.i18n.impl.ResourceBundleStringMessagesImpl; + +public class CompetitorImporter extends AbstractManage2SailProvider implements CompetitorProvider { + private static final long serialVersionUID = 7389956404604333931L; + private final static String STRING_MESSAGES_BASE_NAME = "stringmessages/StringMessages"; + private final static String ID_PREFIX = "Manage2Sail"; + private final CompetitorDocumentProvider documentProvider; + private final ResourceBundleStringMessages stringMessages; + private final CompetitorResolver competitorResolver; + + public CompetitorImporter(ParserFactory parserFactory, ResultUrlRegistry resultUrlRegistry) { + super(parserFactory, resultUrlRegistry); + documentProvider = new CompetitorDocumentProvider(this); + competitorResolver = new CompetitorResolver(documentProvider, parserFactory, ID_PREFIX); + stringMessages = new ResourceBundleStringMessagesImpl(STRING_MESSAGES_BASE_NAME, getClass().getClassLoader()); + } + + @Override + public Map> getHasCompetitorsForRegattasInEvent() throws IOException { + return competitorResolver.getHasCompetitorsForRegattasInEvent(); + } + + @Override + public String getName() { + return NAME; + } + + @Override + public Iterable getCompetitorDescriptors(String eventName, String regattaName) throws JAXBException, IOException { + return competitorResolver.getCompetitorDescriptors(eventName, regattaName); + } + + protected CompetitorDocumentProvider getDocumentProvider() { + return documentProvider; + } + + @Override + public String getHint(Locale locale) { + return stringMessages.get(locale, "CompetitorImporterHint"); + } +} diff --git a/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/CompetitorImporter.java b/java/com.sap.sailing.xrr.resultimport/src/com/sap/sailing/xrr/resultimport/impl/CompetitorResolver.java similarity index 82% rename from java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/CompetitorImporter.java rename to java/com.sap.sailing.xrr.resultimport/src/com/sap/sailing/xrr/resultimport/impl/CompetitorResolver.java index 2cca77a15b4..9e3cd4600e8 100644 --- a/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/CompetitorImporter.java +++ b/java/com.sap.sailing.xrr.resultimport/src/com/sap/sailing/xrr/resultimport/impl/CompetitorResolver.java @@ -1,11 +1,11 @@ -package com.sap.sailing.manage2sail.resultimport; +package com.sap.sailing.xrr.resultimport.impl; import java.io.IOException; +import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.UUID; @@ -15,13 +15,12 @@ import java.util.stream.Collectors; import javax.xml.bind.JAXBException; -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.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.resultimport.ResultDocumentProvider; import com.sap.sailing.xrr.resultimport.Parser; import com.sap.sailing.xrr.resultimport.ParserFactory; import com.sap.sailing.xrr.schema.Boat; @@ -33,26 +32,27 @@ import com.sap.sailing.xrr.schema.RaceResult; import com.sap.sailing.xrr.schema.RegattaResults; import com.sap.sailing.xrr.schema.SeriesResult; import com.sap.sailing.xrr.schema.Team; -import com.sap.sse.i18n.ResourceBundleStringMessages; -import com.sap.sse.i18n.impl.ResourceBundleStringMessagesImpl; -public class CompetitorImporter extends AbstractManage2SailProvider implements CompetitorProvider { - private static final long serialVersionUID = 7389956404604333931L; - private static final Logger logger = Logger.getLogger(CompetitorImporter.class.getName()); - private final static String STRING_MESSAGES_BASE_NAME = "stringmessages/StringMessages"; - private final CompetitorDocumentProvider documentProvider; - private final ResourceBundleStringMessages stringMessages; +public class CompetitorResolver { + + private static final Logger logger = Logger.getLogger(CompetitorResolver.class.getName()); - public CompetitorImporter(ParserFactory parserFactory, ResultUrlRegistry resultUrlRegistry) { - super(parserFactory, resultUrlRegistry); - documentProvider = new CompetitorDocumentProvider(this); - stringMessages = new ResourceBundleStringMessagesImpl(STRING_MESSAGES_BASE_NAME, getClass().getClassLoader()); + private static final String ID_CONNECTOR_SYMBOL = "-"; + + private final ResultDocumentProvider documentProvider; + private final ParserFactory parserFactory; + + private final String idPrefix; + + public CompetitorResolver(ResultDocumentProvider documentProvider, ParserFactory parserFactory, String idPrefix) { + this.documentProvider = documentProvider; + this.parserFactory = parserFactory; + this.idPrefix = idPrefix; } - @Override public Map> getHasCompetitorsForRegattasInEvent() throws IOException { Map> result = new HashMap<>(); - for (ResultDocumentDescriptor resultDocDescr : getDocumentProvider().getResultDocumentDescriptors()) { + for (ResultDocumentDescriptor resultDocDescr : documentProvider.getResultDocumentDescriptors()) { final String eventName = resultDocDescr.getEventName(); final String regattaName = resultDocDescr.getRegattaName(); Set set = result.get(eventName); @@ -64,21 +64,15 @@ public class CompetitorImporter extends AbstractManage2SailProvider implements C } return result; } - - @Override - public String getName() { - return NAME; - } - - @Override + public Iterable getCompetitorDescriptors(String eventName, String regattaName) throws JAXBException, IOException { final List result = new ArrayList<>(); final Map resultsByTeamID = new HashMap<>(); final Map teamsWithoutRaceAssignments = new HashMap<>(); // keys are the teamID - for (ResultDocumentDescriptor resultDocDescr : getDocumentProvider().getResultDocumentDescriptors()) { + for (ResultDocumentDescriptor resultDocDescr : documentProvider.getResultDocumentDescriptors()) { if (resultDocDescr.getEventName().equals(eventName) && (regattaName == null || regattaName.equals(resultDocDescr.getRegattaName()))) { - final Parser parser = getParserFactory().createParser(resultDocDescr.getInputStream(), resultDocDescr.getEventName()); + final Parser parser = parserFactory.createParser(resultDocDescr.getInputStream(), resultDocDescr.getEventName()); try { final RegattaResults regattaResults = parser.parse(); // If teams are found outside of a Division context then no boat class would be assigned to the @@ -149,7 +143,7 @@ public class CompetitorImporter extends AbstractManage2SailProvider implements C } return result; } - + private CompetitorDescriptor createCompetitorDescriptor(Team team, final Parser parser, Event event, Division division, String raceID) { final Boat boat = parser.getBoat(team.getBoatID()); @@ -159,9 +153,11 @@ public class CompetitorImporter extends AbstractManage2SailProvider implements C // use that of team; if not defined for team, use first nationality of a team member that has one defined team.getNOC() == null ? null : new NationalityImpl(team.getNOC().name()) }; - String boatClassName = parser.getBoatClassName(division); + final String boatClassName; if(division != null) { boatClassName = parser.getBoatClassName(division); + }else { + boatClassName = null; } List persons = team.getCrew().stream().sorted((c1, c2) -> -c1.getPosition().name().compareTo(c2.getPosition().name())).map((crew)->{ Person xrrPerson = parser.getPerson(crew.getPersonID()); @@ -180,36 +176,27 @@ public class CompetitorImporter extends AbstractManage2SailProvider implements C nationality==null?null:nationality.getCountryCode().getThreeLetterIOCCode()); return person; }).collect(Collectors.toList()); - UUID competitorUUID; + Serializable competitorId; try { - competitorUUID = UUID.fromString(team.getTeamID()); + competitorId = UUID.fromString(team.getTeamID()); } catch (IllegalArgumentException e) { - competitorUUID = null; + competitorId = idPrefix + ID_CONNECTOR_SYMBOL + team.getTeamID(); } - UUID boatUUID; + Serializable boatId; try { - boatUUID = UUID.fromString(boat.getBoatID()); + boatId = UUID.fromString(boat.getBoatID()); } catch (IllegalArgumentException e) { - boatUUID = null; + boatId = idPrefix + ID_CONNECTOR_SYMBOL + boat.getBoatID(); } final CompetitorDescriptor competitorDescriptor = new CompetitorDescriptor( event == null ? null : event.getTitle(), division == null ? null : (division.getTitle() + (division.getGender() == null ? "" : division.getGender().name())), - race != null ? race.getRaceName() : null, /* fleetName */ null, competitorUUID, + race != null ? race.getRaceName() : null, /* fleetName */ null, competitorId, /* name */ team.getTeamName(), /* short name */ null, /* team name */ team.getTeamName(), persons, teamNationality[0] == null ? null : teamNationality[0].getCountryCode(), /* timeOnTimeFactor */ null, - /* timeOnDistanceAllowancePerNauticalMile */ null, boatUUID, boat.getBoatName(), boatClassName, + /* timeOnDistanceAllowancePerNauticalMile */ null, boatId, boat.getBoatName(), boatClassName, sailNumber); return competitorDescriptor; } - - protected CompetitorDocumentProvider getDocumentProvider() { - return documentProvider; - } - - @Override - public String getHint(Locale locale) { - return stringMessages.get(locale, "CompetitorImporterHint"); - } } diff --git a/java/com.sap.sailing.yachtscoring.resultimport/src/com/sap/sailing/yachtscoring/resultimport/YachtScoringCompetitorProvider.java b/java/com.sap.sailing.yachtscoring.resultimport/src/com/sap/sailing/yachtscoring/resultimport/YachtScoringCompetitorProvider.java index 41816be0572..31eb216935c 100644 --- a/java/com.sap.sailing.yachtscoring.resultimport/src/com/sap/sailing/yachtscoring/resultimport/YachtScoringCompetitorProvider.java +++ b/java/com.sap.sailing.yachtscoring.resultimport/src/com/sap/sailing/yachtscoring/resultimport/YachtScoringCompetitorProvider.java @@ -1,201 +1,54 @@ package com.sap.sailing.yachtscoring.resultimport; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; import javax.xml.bind.JAXBException; 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.common.CompetitorDescriptor; -import com.sap.sailing.domain.common.dto.PersonDTO; -import com.sap.sailing.resultimport.ResultDocumentDescriptor; import com.sap.sailing.resultimport.ResultDocumentProvider; import com.sap.sailing.resultimport.ResultUrlRegistry; -import com.sap.sailing.xrr.resultimport.Parser; import com.sap.sailing.xrr.resultimport.ParserFactory; -import com.sap.sailing.xrr.schema.Boat; -import com.sap.sailing.xrr.schema.Division; -import com.sap.sailing.xrr.schema.Event; -import com.sap.sailing.xrr.schema.Person; -import com.sap.sailing.xrr.schema.Race; -import com.sap.sailing.xrr.schema.RaceResult; -import com.sap.sailing.xrr.schema.RegattaResults; -import com.sap.sailing.xrr.schema.SeriesResult; -import com.sap.sailing.xrr.schema.Team; +import com.sap.sailing.xrr.resultimport.impl.CompetitorResolver; import com.sap.sse.i18n.ResourceBundleStringMessages; import com.sap.sse.i18n.impl.ResourceBundleStringMessagesImpl; public class YachtScoringCompetitorProvider extends AbstractYachtScoringProvider implements CompetitorProvider { private static final long serialVersionUID = 7389956404604333931L; - private static final Logger logger = Logger.getLogger(YachtScoringCompetitorProvider.class.getName()); private final static String STRING_MESSAGES_BASE_NAME = "stringmessages/StringMessages"; + private final static String ID_PREFIX = "YachtScoring"; private final ResultDocumentProvider documentProvider; private final ResourceBundleStringMessages stringMessages; + private final CompetitorResolver competitorResolver; // Constructor for Testing public YachtScoringCompetitorProvider(ParserFactory parserFactory, ResultUrlRegistry resultUrlRegistry, ResultDocumentProvider documentProvider) { super(parserFactory, resultUrlRegistry); this.documentProvider = documentProvider; + competitorResolver = new CompetitorResolver(documentProvider, parserFactory, ID_PREFIX); stringMessages = new ResourceBundleStringMessagesImpl(STRING_MESSAGES_BASE_NAME, getClass().getClassLoader()); } public YachtScoringCompetitorProvider(ParserFactory parserFactory, ResultUrlRegistry resultUrlRegistry) { super(parserFactory, resultUrlRegistry); documentProvider = new YachtscoringResultDocumentProvider(this, parserFactory); + competitorResolver = new CompetitorResolver(documentProvider, parserFactory, ID_PREFIX); stringMessages = new ResourceBundleStringMessagesImpl(STRING_MESSAGES_BASE_NAME, getClass().getClassLoader()); } @Override public Map> getHasCompetitorsForRegattasInEvent() throws IOException { - Map> result = new HashMap<>(); - for (ResultDocumentDescriptor resultDocDescr : getDocumentProvider().getResultDocumentDescriptors()) { - final String eventName = resultDocDescr.getEventName(); - final String regattaName = resultDocDescr.getRegattaName(); - Set set = result.get(eventName); - if (set == null) { - set = new HashSet<>(); - result.put(eventName, set); - } - set.add(regattaName); - } - return result; - } - - @Override - public String getName() { - return NAME; + return competitorResolver.getHasCompetitorsForRegattasInEvent(); } @Override public Iterable getCompetitorDescriptors(String eventName, String regattaName) throws JAXBException, IOException { - final List result = new ArrayList<>(); - final Map resultsByTeamID = new HashMap<>(); - final Map teamsWithoutRaceAssignments = new HashMap<>(); // keys are the teamID - for (ResultDocumentDescriptor resultDocDescr : getDocumentProvider().getResultDocumentDescriptors()) { - if (resultDocDescr.getEventName().equals(eventName) && - (regattaName == null || regattaName.equals(resultDocDescr.getRegattaName()))) { - final Parser parser = parserFactory.createParser(resultDocDescr.getInputStream(), resultDocDescr.getEventName()); - try { - final RegattaResults regattaResults = parser.parse(); - // If teams are found outside of a Division context then no boat class would be assigned to the - // competitor. However, if only one Division exists it can be used as default and the boat class - // can therefore be derived from it. This, however, is not clear until the document has been fully - // consumed. So we keep track of the teams found outside of Divisions, and if exactly one division - // is found we create the CompetitorDescriptors as if they were part of that Division; otherwise - // we need to come up with a default boat class instead. - final Set teamsOutsideOfDivision = new HashSet<>(); - Map divisions = new HashMap<>(); - for (Object o : regattaResults.getPersonOrBoatOrTeam()) { - if (o instanceof Team) { - final Team team = (Team) o; - teamsOutsideOfDivision.add(team); - } else if (o instanceof Event) { - Event event = (Event) o; - for (Object eventO : event.getRaceOrDivisionOrRegattaSeriesResult()) { - if (eventO instanceof Division) { - Division division = (Division) eventO; - divisions.put(division, event); - if (regattaName == null || regattaName.equals(division.getTitle())) { - for (Object divisionO : division.getSeriesResultOrRaceResultOrTRResult()) { - String raceID = null; - Team team = null; - if (divisionO instanceof RaceResult) { - RaceResult raceResult = (RaceResult) divisionO; - raceID = raceResult.getRaceID(); - team = parser.getTeam(raceResult.getTeamID()); - } else if (divisionO instanceof SeriesResult) { - SeriesResult seriesResult = (SeriesResult) divisionO; - team = parser.getTeam(seriesResult.getTeamID()); - } - if (team != null) { - final CompetitorDescriptor competitorDescriptor = createCompetitorDescriptor( - team, parser, event, division, raceID); - resultsByTeamID.put(team.getTeamID(), competitorDescriptor); - result.add(competitorDescriptor); - } - } - } - } - } - } - } - for (final Team teamOutsideOfDivision : teamsOutsideOfDivision) { - if (divisions.size() == 1) { // exactly one Division; use as default for teams outside of division that were not assigned to a division later - if (!resultsByTeamID.containsKey(teamOutsideOfDivision.getTeamID())) { - final CompetitorDescriptor competitorDescriptor = createCompetitorDescriptor( - teamOutsideOfDivision, parser, divisions.values().iterator().next(), divisions.keySet().iterator().next(), /* raceID */ null); - resultsByTeamID.put(teamOutsideOfDivision.getTeamID(), competitorDescriptor); - result.add(competitorDescriptor); - } - } else { - teamsWithoutRaceAssignments.put(teamOutsideOfDivision.getTeamID(), - createCompetitorDescriptor(teamOutsideOfDivision, parser, /* event */ null, /* division */ null, /* raceID */ null)); - } - } - } catch (JAXBException e) { - logger.log(Level.WARNING, "Exception trying to read competitors for event "+resultDocDescr.getEventName()+ - ", regatta "+resultDocDescr.getRegattaName()+" from document "+resultDocDescr.getDocumentName(), e); - } - } - } - for (final Map.Entry tid : teamsWithoutRaceAssignments.entrySet()) { - if (!resultsByTeamID.containsKey(tid.getKey())) { - result.add(tid.getValue()); - } - } - return result; + return competitorResolver.getCompetitorDescriptors(eventName, regattaName); } - private CompetitorDescriptor createCompetitorDescriptor(Team team, final Parser parser, Event event, - Division division, String raceID) { - final Boat boat = parser.getBoat(team.getBoatID()); - final String sailNumber = boat.getSailNumber(); - final Race race = parser.getRace(raceID); - final Nationality[] teamNationality = new Nationality[] { - // use that of team; if not defined for team, use first nationality of a team member that has one defined - team.getNOC() == null ? null : new NationalityImpl(team.getNOC().name()) - }; - String boatClassName = null; - if(division != null) { - boatClassName = parser.getBoatClassName(division); - } - List 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; - if (xrrPerson.getNOC() == null) { - nationality = null; - } else { - nationality = new NationalityImpl(xrrPerson.getNOC().name()); - if (teamNationality[0] == null) { - teamNationality[0] = nationality; - } - } - PersonDTO person = new PersonDTO( - name, /* dateOfBirth */ null, /* description */ xrrPerson.getGender()==null?null:xrrPerson.getGender().name(), - nationality==null?null: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())), - race != null ? race.getRaceName() : null, /* fleetName */ null, team.getTeamID(), /* name */ team.getTeamName(), - /* short name */ null, /* team name */ team.getTeamName(), persons, - teamNationality[0] == null ? null : teamNationality[0].getCountryCode(), /* timeOnTimeFactor */ null, - /* timeOnDistanceAllowancePerNauticalMile */ null, boat.getBoatID(), boat.getBoatName(), boatClassName, sailNumber); - return competitorDescriptor; - } protected ResultDocumentProvider getDocumentProvider() { return documentProvider; From aac9d37059cdacb604e5e8c2939397c1fa78c77e Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Tue, 19 Jan 2021 12:09:41 +0100 Subject: [PATCH 2/3] bug5201: Renamed CompetitorImporter to Manage2SailCompetitorProvider --- .../resultimport/test/CompetitorImportTest.java | 8 ++++---- .../sap/sailing/manage2sail/resultimport/Activator.java | 2 +- .../resultimport/Manage2SailCompetitorProvider.java | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/java/com.sap.sailing.manage2sail.resultimport.test/src/com/sap/sailing/manage2sail/resultimport/test/CompetitorImportTest.java b/java/com.sap.sailing.manage2sail.resultimport.test/src/com/sap/sailing/manage2sail/resultimport/test/CompetitorImportTest.java index 4cbbc098d80..9ebcdc24265 100644 --- a/java/com.sap.sailing.manage2sail.resultimport.test/src/com/sap/sailing/manage2sail/resultimport/test/CompetitorImportTest.java +++ b/java/com.sap.sailing.manage2sail.resultimport.test/src/com/sap/sailing/manage2sail/resultimport/test/CompetitorImportTest.java @@ -20,7 +20,7 @@ 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; -import com.sap.sailing.manage2sail.resultimport.CompetitorImporter; +import com.sap.sailing.manage2sail.resultimport.Manage2SailCompetitorProvider; import com.sap.sailing.resultimport.ResultUrlRegistry; import com.sap.sailing.xrr.resultimport.ParserFactory; import com.sap.sse.common.Util; @@ -41,7 +41,7 @@ public class CompetitorImportTest extends AbstractEventResultJsonServiceTest { public void simpleCompetitorImportTest() throws FileNotFoundException, IOException, JAXBException { ResultUrlRegistry resultUrlRegistry = mock(ResultUrlRegistry.class); when(resultUrlRegistry.getReadableResultUrls(AbstractManage2SailProvider.NAME)).thenReturn(Arrays.asList(getClass().getClassLoader().getResource(EVENT_RESULTS_JSON+".txt"))); - final CompetitorImporter competitorImporter = new CompetitorImporter(ParserFactory.INSTANCE, resultUrlRegistry); + final Manage2SailCompetitorProvider competitorImporter = new Manage2SailCompetitorProvider(ParserFactory.INSTANCE, resultUrlRegistry); assertTrue(competitorImporter.getHasCompetitorsForRegattasInEvent().containsKey("YES - Young Europeans Sailing 2013")); assertTrue(competitorImporter.getHasCompetitorsForRegattasInEvent().get("YES - Young Europeans Sailing 2013").contains("29er")); final Iterable competitorDescriptors = competitorImporter.getCompetitorDescriptors("YES - Young Europeans Sailing 2013", null); // get competitors for all regattas in event @@ -56,7 +56,7 @@ public class CompetitorImportTest extends AbstractEventResultJsonServiceTest { public void simpleCompetitorImportTestNoResultsYet() throws FileNotFoundException, IOException, JAXBException { ResultUrlRegistry resultUrlRegistry = mock(ResultUrlRegistry.class); when(resultUrlRegistry.getReadableResultUrls(AbstractManage2SailProvider.NAME)).thenReturn(Arrays.asList(getClass().getClassLoader().getResource("VSaW_420_Test.json.txt"))); - final CompetitorProvider competitorImporter = new CompetitorImporter(ParserFactory.INSTANCE, resultUrlRegistry) { + final CompetitorProvider competitorImporter = new Manage2SailCompetitorProvider(ParserFactory.INSTANCE, resultUrlRegistry) { private static final long serialVersionUID = 6450491595924905L; @Override @@ -80,7 +80,7 @@ public class CompetitorImportTest extends AbstractEventResultJsonServiceTest { public void simpleCompetitorImportTestNoResultsYetAndDivisionEmpty() throws FileNotFoundException, IOException, JAXBException { ResultUrlRegistry resultUrlRegistry = mock(ResultUrlRegistry.class); when(resultUrlRegistry.getReadableResultUrls(AbstractManage2SailProvider.NAME)).thenReturn(Arrays.asList(getClass().getClassLoader().getResource("VSaW_420_Test_EmptyDivision.json.txt"))); - final CompetitorProvider competitorImporter = new CompetitorImporter(ParserFactory.INSTANCE, resultUrlRegistry) { + final CompetitorProvider competitorImporter = new Manage2SailCompetitorProvider(ParserFactory.INSTANCE, resultUrlRegistry) { private static final long serialVersionUID = -7647297718831584969L; @Override diff --git a/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/Activator.java b/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/Activator.java index fb3b5649320..89c45f12e45 100755 --- a/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/Activator.java +++ b/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/Activator.java @@ -35,7 +35,7 @@ public class Activator implements BundleActivator { } @Override protected CompetitorProvider configureCompetitorProvider(ResultUrlRegistry resultUrlRegistry) { - final CompetitorProvider service = new CompetitorImporter(ParserFactory.INSTANCE, + final CompetitorProvider service = new Manage2SailCompetitorProvider(ParserFactory.INSTANCE, resultUrlRegistry); return service; } diff --git a/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/Manage2SailCompetitorProvider.java b/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/Manage2SailCompetitorProvider.java index 2578ad4fdd6..34ca5c53dab 100644 --- a/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/Manage2SailCompetitorProvider.java +++ b/java/com.sap.sailing.manage2sail.resultimport/src/com/sap/sailing/manage2sail/resultimport/Manage2SailCompetitorProvider.java @@ -15,7 +15,7 @@ import com.sap.sailing.xrr.resultimport.impl.CompetitorResolver; import com.sap.sse.i18n.ResourceBundleStringMessages; import com.sap.sse.i18n.impl.ResourceBundleStringMessagesImpl; -public class CompetitorImporter extends AbstractManage2SailProvider implements CompetitorProvider { +public class Manage2SailCompetitorProvider extends AbstractManage2SailProvider implements CompetitorProvider { private static final long serialVersionUID = 7389956404604333931L; private final static String STRING_MESSAGES_BASE_NAME = "stringmessages/StringMessages"; private final static String ID_PREFIX = "Manage2Sail"; @@ -23,7 +23,7 @@ public class CompetitorImporter extends AbstractManage2SailProvider implements C private final ResourceBundleStringMessages stringMessages; private final CompetitorResolver competitorResolver; - public CompetitorImporter(ParserFactory parserFactory, ResultUrlRegistry resultUrlRegistry) { + public Manage2SailCompetitorProvider(ParserFactory parserFactory, ResultUrlRegistry resultUrlRegistry) { super(parserFactory, resultUrlRegistry); documentProvider = new CompetitorDocumentProvider(this); competitorResolver = new CompetitorResolver(documentProvider, parserFactory, ID_PREFIX); From 92f83d8c14faa36bb1ba1b1b2e7b1999ffa65c90 Mon Sep 17 00:00:00 2001 From: Dennis Aulenbacher Date: Tue, 19 Jan 2021 15:05:04 +0100 Subject: [PATCH 3/3] bug5201: Infering Nationality from sail number. --- .../xrr/resultimport/impl/CompetitorResolver.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/java/com.sap.sailing.xrr.resultimport/src/com/sap/sailing/xrr/resultimport/impl/CompetitorResolver.java b/java/com.sap.sailing.xrr.resultimport/src/com/sap/sailing/xrr/resultimport/impl/CompetitorResolver.java index 9e3cd4600e8..06744595499 100644 --- a/java/com.sap.sailing.xrr.resultimport/src/com/sap/sailing/xrr/resultimport/impl/CompetitorResolver.java +++ b/java/com.sap.sailing.xrr.resultimport/src/com/sap/sailing/xrr/resultimport/impl/CompetitorResolver.java @@ -26,6 +26,7 @@ import com.sap.sailing.xrr.resultimport.ParserFactory; import com.sap.sailing.xrr.schema.Boat; import com.sap.sailing.xrr.schema.Division; import com.sap.sailing.xrr.schema.Event; +import com.sap.sailing.xrr.schema.IFNationCode; import com.sap.sailing.xrr.schema.Person; import com.sap.sailing.xrr.schema.Race; import com.sap.sailing.xrr.schema.RaceResult; @@ -176,6 +177,17 @@ public class CompetitorResolver { nationality==null?null:nationality.getCountryCode().getThreeLetterIOCCode()); return person; }).collect(Collectors.toList()); + if(teamNationality[0] == null && sailNumber!= null && sailNumber.length() > 3) { + // if the team nationality could not directly be inferred, try to extract it from the sail number. + try { + final String substring = sailNumber.substring(0, 3); + final IFNationCode nationalityCode = IFNationCode.fromValue(substring); + teamNationality[0] = new NationalityImpl(nationalityCode.name()); + System.out.println("hit with: " + sailNumber); + }catch (Exception e) { + logger.log(Level.WARNING, "Could not infer team nationality from sail number: " + sailNumber + ". Nationality will be nulled"); + } + } Serializable competitorId; try { competitorId = UUID.fromString(team.getTeamID());