fixing bug 3650 by using the top-level document's ClassName field for the boat class creation

Change-Id: I92a07396718db0393fe2034390eba008061be5a8
This commit is contained in:
Axel Uhl
2016-05-12 13:45:08 +02:00
parent e6ca196556
commit 4865820046
5 changed files with 29 additions and 13 deletions
@@ -2,6 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -44,6 +45,7 @@ import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.SeriesDTO;
import com.sap.sse.common.util.NaturalComparator;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator;
import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator;
@@ -226,6 +228,13 @@ public class StructureImportManagementPanel extends SimplePanel implements Regat
@Override
public void onSuccess(List<EventDTO> events) {
existingEvents = events;
Collections.sort(existingEvents, new Comparator<EventDTO>() {
private final NaturalComparator comp = new NaturalComparator();
@Override
public int compare(EventDTO o1, EventDTO o2) {
return comp.compare(o1.getName(), o2.getName());
}
});
sailingEventsListBox.addItem(stringMessages.selectSailingEvent());
for (EventDTO event : existingEvents) {
sailingEventsListBox.addItem(event.getName());
@@ -12,6 +12,8 @@
<booleanAttribute key="default_auto_start" value="true"/>
<intAttribute key="default_start_level" value="4"/>
<booleanAttribute key="includeOptional" value="true"/>
<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.pde.ui.launcher.PDESourceLookupDirector"/>
<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;sourceLookupDirector&gt;&#13;&#10;&lt;sourceContainers duplicates=&quot;false&quot;&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;classpathContainer path=&amp;quot;org.eclipse.jdt.launching.JRE_CONTAINER&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.classpathContainer&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;classpathContainer path=&amp;quot;com.google.gwt.eclipse.core.GWT_CONTAINER&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.classpathContainer&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;default/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.default&quot;/&gt;&#13;&#10;&lt;/sourceContainers&gt;&#13;&#10;&lt;/sourceLookupDirector&gt;&#13;&#10;"/>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
@@ -57,11 +57,7 @@ public class ParserImpl implements Parser {
@Override
public String getBoatClassName(Division division) {
String result = division.getIFClassID();
if (result == null || result.isEmpty()) {
result = division.getTitle();
}
return result;
return XRRParserUtil.getBoatClassName(division);
}
@Override
@@ -3,6 +3,7 @@ package com.sap.sailing.xrr.resultimport.impl;
import javax.xml.datatype.DatatypeConstants;
import javax.xml.datatype.XMLGregorianCalendar;
import com.sap.sailing.xrr.schema.Division;
import com.sap.sailing.xrr.schema.RegattaResults;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -32,4 +33,11 @@ public class XRRParserUtil {
return timePoint;
}
public static String getBoatClassName(Division division) {
String result = division.getIFClassID();
if (result == null || result.isEmpty()) {
result = division.getTitle();
}
return result;
}
}
@@ -35,6 +35,7 @@ import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.ranking.OneDesignRankingMetric;
import com.sap.sailing.xrr.resultimport.ParserFactory;
import com.sap.sailing.xrr.resultimport.impl.XRRParserUtil;
import com.sap.sailing.xrr.schema.Boat;
import com.sap.sailing.xrr.schema.Crew;
import com.sap.sailing.xrr.schema.Division;
@@ -52,6 +53,7 @@ import com.sap.sailing.xrr.structureimport.buildstructure.Series;
import com.sap.sailing.xrr.structureimport.buildstructure.SetRacenumberStrategy;
import com.sap.sse.common.Color;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.impl.AbstractColor;
import com.sapsailing.xrr.structureimport.eventimport.EventImport;
import com.sapsailing.xrr.structureimport.eventimport.RegattaJSON;
@@ -81,12 +83,12 @@ public class StructureImporter {
}
public Iterable<Regatta> getRegattas(Iterable<RegattaJSON> regattas) {
Iterable<RegattaResults> parsedRegattas = parseRegattas(regattas);
Iterable<Pair<RegattaJSON, RegattaResults>> parsedRegattas = parseRegattas(regattas);
Set<Regatta> addSpecificRegattas = new HashSet<Regatta>();
for (RegattaResults result : parsedRegattas) {
for (Pair<RegattaJSON, RegattaResults> result : parsedRegattas) {
List<Race> races = new ArrayList<Race>();
// assuming that the last element in getPersonOrBoatOrTeam is an event
Event event = (Event) result.getPersonOrBoatOrTeam().get(result.getPersonOrBoatOrTeam().size() - 1);
Event event = (Event) result.getB().getPersonOrBoatOrTeam().get(result.getB().getPersonOrBoatOrTeam().size() - 1);
Iterable<Object> raceOrDivisionOrRegattaSeriesResults = event.getRaceOrDivisionOrRegattaSeriesResult();
for (Object raceOrDivisionOrRegattaSeriesResult : raceOrDivisionOrRegattaSeriesResults) {
if (raceOrDivisionOrRegattaSeriesResult instanceof Race) {
@@ -98,23 +100,22 @@ public class StructureImporter {
final TimePoint endDate = null; // TODO can regatta end time be inferred from XRR document?
RegattaImpl regatta = new RegattaImpl(RegattaImpl.getDefaultName(event.getTitle(), ((Division) event
.getRaceOrDivisionOrRegattaSeriesResult().get(0)).getTitle()),
baseDomainFactory.getOrCreateBoatClass(((Division) event.getRaceOrDivisionOrRegattaSeriesResult()
.get(0)).getTitle()), startDate, endDate, getSeries(buildStructure), false,
baseDomainFactory.getOrCreateBoatClass(result.getA().getBoatClass()), startDate, endDate, getSeries(buildStructure), false,
this.baseDomainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), event.getEventID(), null, OneDesignRankingMetric::new);
addSpecificRegattas.add(regatta);
}
return addSpecificRegattas;
}
private Iterable<RegattaResults> parseRegattas(final Iterable<RegattaJSON> selectedRegattas) {
final Set<RegattaResults> result = Collections.synchronizedSet(new HashSet<RegattaResults>());
private Iterable<Pair<RegattaJSON, RegattaResults>> parseRegattas(final Iterable<RegattaJSON> selectedRegattas) {
final Set<Pair<RegattaJSON, RegattaResults>> result = Collections.synchronizedSet(new HashSet<Pair<RegattaJSON, RegattaResults>>());
Set<Thread> threads = new HashSet<Thread>();
for (final RegattaJSON selectedRegatta : selectedRegattas) {
Thread thread = new Thread("XRR Importer " + selectedRegatta.getName()) {
@Override
public void run() {
try {
result.add(parseRegattaXML(selectedRegatta.getXrrEntriesUrl()));
result.add(new Pair<>(selectedRegatta, parseRegattaXML(selectedRegatta.getXrrEntriesUrl())));
} catch (JAXBException | IOException e) {
logger.info("Parse error during XRR import. Ignoring document " + selectedRegatta.getName());
}