removed SwissTiming OVR import, deprecated by XRR import; preparing for a consolidation of file-based result imports

This commit is contained in:
Axel Uhl committed 2013-04-16 22:48:27 +02:00
1 parent 524b67dacd
commit 4dfb8dabc1
71 files changed
+151 -9110

No files matched your search

@@ -8,7 +8,8 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Require-Bundle: com.sap.sailing.server,
com.sap.sailing.domain.common,
com.sap.sailing.domain
com.sap.sailing.domain,
com.sap.sailing.resultimport
Export-Package: com.sap.sailing.kiworesultimport
Bundle-Activator: com.sap.sailing.kiworesultimport.impl.Activator
Import-Package: org.osgi.framework
@@ -1,33 +1,22 @@
package com.sap.sailing.kiworesultimport.impl;
import java.io.File;
import java.util.logging.Logger;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.resultimport.impl.AbstractFileBasedScoreCorrectionProviderActivator;
public class Activator implements BundleActivator {
private static final Logger logger = Logger.getLogger(Activator.class.getName());
public class Activator extends AbstractFileBasedScoreCorrectionProviderActivator {
private static final String SCAN_DIR_PATH_PROPERTY_NAME = "kiwo.results";
private static final String DEFAULT_SCAN_DIR = "kiworesults";
@Override
public void start(BundleContext context) throws Exception {
String scanDirPath = context.getProperty(SCAN_DIR_PATH_PROPERTY_NAME);
if (scanDirPath == null) {
scanDirPath = System.getProperty(SCAN_DIR_PATH_PROPERTY_NAME, DEFAULT_SCAN_DIR);
}
final ScoreCorrectionProviderImpl service = new ScoreCorrectionProviderImpl(new File(scanDirPath));
context.registerService(ScoreCorrectionProvider.class,
service, /* properties */ null);
logger.info("Scanning "+scanDirPath+" for official result lists of "+service.getName());
public Activator() {
super(SCAN_DIR_PATH_PROPERTY_NAME, DEFAULT_SCAN_DIR);
}
@Override
public void stop(BundleContext context) throws Exception {
protected ScoreCorrectionProvider create(File scanDir) {
return new ScoreCorrectionProviderImpl(scanDir);
}
}
@@ -1,8 +1,8 @@
package com.sap.sailing.kiworesultimport.impl;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -15,34 +15,21 @@ import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import com.sap.sailing.domain.common.RegattaScoreCorrections;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.kiworesultimport.ParserFactory;
import com.sap.sailing.kiworesultimport.RegattaSummary;
import com.sap.sailing.kiworesultimport.ZipFile;
import com.sap.sailing.kiworesultimport.ZipFileParser;
import com.sap.sailing.resultimport.impl.AbstractFileBasedScoreCorrectionProvider;
public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider {
public class ScoreCorrectionProviderImpl extends AbstractFileBasedScoreCorrectionProvider {
private static final long serialVersionUID = -4596215011753860781L;
private static final String name = "Kieler Woche Official Results by b+m";
/**
* The directory that will be scanned for <code>.zip</code> files which will then be passed to
* {@link ZipFileParser} for analysis.
*/
private final File scanDir;
public ScoreCorrectionProviderImpl(File scanDir) {
super();
if (!scanDir.exists()) {
scanDir.mkdirs();
}
if (!scanDir.isDirectory()) {
throw new IllegalArgumentException("scanDir "+scanDir+" must be a directory");
}
this.scanDir = scanDir;
super(scanDir);
}
@Override
@@ -70,9 +57,9 @@ public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider {
private Iterable<RegattaSummary> getAllRegattaSummaries() throws IOException, SAXException, ParserConfigurationException {
List<RegattaSummary> result = new ArrayList<RegattaSummary>();
ZipFileParser zipFileParser = ParserFactory.INSTANCE.createZipFileParser();
for (File file : scanDir.listFiles()) {
if (file.getName().toLowerCase().endsWith(".zip")) {
ZipFile zipFile = zipFileParser.parse(new FileInputStream(file));
for (Pair<InputStream, String> streamAndName : getResultDocumentProvider().getDocumentsAndNames()) {
if (streamAndName.getB().toLowerCase().endsWith(".zip")) {
ZipFile zipFile = zipFileParser.parse(streamAndName.getA());
for (RegattaSummary regattaSummary : zipFile.getRegattaSummaries()) {
result.add(regattaSummary);
}
@@ -80,7 +67,7 @@ public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider {
}
return result;
}
@Override
public RegattaScoreCorrections getScoreCorrections(String eventName, String boatClassName,
TimePoint timePointPublished) throws IOException, SAXException, ParserConfigurationException {
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="resources"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.sap.sailing.odf.resultimport.test</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -1,7 +0,0 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7
@@ -1,3 +0,0 @@
eclipse.preferences.version=1
pluginProject.extensions=false
resolve.requirebundle=false
@@ -1,9 +0,0 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Test
Bundle-SymbolicName: com.sap.sailing.odf.resultimport.test
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: SAP
Fragment-Host: com.sap.sailing.odf.resultimport
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: org.junit4;bundle-version="4.8.2"
@@ -1,5 +0,0 @@
source.. = src/,\
resources/
output.. = bin/
bin.includes = META-INF/,\
.
@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>root</artifactId>
<groupId>com.sap.sailing</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>com.sap.sailing.odf.resultimport.test</artifactId>
<packaging>eclipse-test-plugin</packaging>
</project>
@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<OdfBody DocumentCode="SA0000000" DocumentType="DT_SCHEDULE_UPDATE" Version="0" FeedFlag="P" Date="20130205" Time="162033007" LogicalDate="20130205" Venue="WAP">
<Competition Code="PG2012">
<Discipline Code="SA">
<Gender Code="M">
<Event Code="004">
<Phase Code="9" Type="3">
<Unit Code="10" StartDate="2012-08-04T14:30:00+02:00" EstimatedStartDate="true" EndDate="2012-08-04T15:30:00+02:00" EstimatedEndDate="false" Status="7" Medal="0" Venue="WAP" Location="SA3" ModificationIndicator="U">
<EstimatedStartText Language="ENG" Value="Followed by" />
</Unit>
</Phase>
</Event>
</Gender>
</Discipline>
</Competition>
</OdfBody>
@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<OdfBody DocumentCode="SA0000000" DocumentType="DT_SCHEDULE_UPDATE" Version="0" FeedFlag="P" Date="20130205" Time="162041012" LogicalDate="20130205" Venue="WAP">
<Competition Code="PG2012">
<Discipline Code="SA">
<Gender Code="M">
<Event Code="007">
<Phase Code="9" Type="3">
<Unit Code="10" StartDate="2012-08-03T14:50:00+02:00" EstimatedStartDate="true" EndDate="2012-08-03T16:05:00+02:00" EstimatedEndDate="false" Status="7" Medal="0" Venue="WAP" Location="SA4" ModificationIndicator="U">
<EstimatedStartText Language="ENG" Value="Followed by" />
</Unit>
</Phase>
</Event>
</Gender>
</Discipline>
</Competition>
</OdfBody>
File diff suppressed because it is too large. Load diff
@@ -1,635 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<OdfBody DocumentCode="SAM004910" DocumentType="DT_START_LIST" Version="0" FeedFlag="P" Date="20130205" Time="162030198" LogicalDate="20130205" Venue="WAP">
<Competition Code="PG2012">
<UnitInfos>
<UnitDateTime StartDate="2012-08-04T14:30:00+02:00" />
<UnitInfo Type="UI_SA" Code="SA_COURSE_SAILED" Value="O2" />
<UnitInfo Type="UI_SA" Code="SA_COURSE_DESC" Value="Outer Trapezoid (O2)" />
<UnitInfo Type="UI_SA" Code="SA_MARK" Pos="1" Value="0">
<Extensions>
<Extension Type="UI_SA" Code="SA_SEQ_NUM" Value="0" />
</Extensions>
</UnitInfo>
<UnitInfo Type="UI_SA" Code="SA_MARK" Pos="2" Value="1">
<Extensions>
<Extension Type="UI_SA" Code="SA_SEQ_NUM" Value="1" />
</Extensions>
</UnitInfo>
<UnitInfo Type="UI_SA" Code="SA_MARK" Pos="3" Value="2">
<Extensions>
<Extension Type="UI_SA" Code="SA_SEQ_NUM" Value="2" />
</Extensions>
</UnitInfo>
<UnitInfo Type="UI_SA" Code="SA_MARK" Pos="4" Value="3">
<Extensions>
<Extension Type="UI_SA" Code="SA_SEQ_NUM" Value="3" />
</Extensions>
</UnitInfo>
<UnitInfo Type="UI_SA" Code="SA_MARK" Pos="5" Value="2">
<Extensions>
<Extension Type="UI_SA" Code="SA_SEQ_NUM" Value="4" />
</Extensions>
</UnitInfo>
<UnitInfo Type="UI_SA" Code="SA_MARK" Pos="6" Value="3">
<Extensions>
<Extension Type="UI_SA" Code="SA_SEQ_NUM" Value="5" />
</Extensions>
</UnitInfo>
<UnitInfo Type="UI_SA" Code="SA_MARK" Pos="7" Value="10">
<Extensions>
<Extension Type="UI_SA" Code="SA_SEQ_NUM" Value="6" />
</Extensions>
</UnitInfo>
<UnitInfo Type="UI_SA" Code="SA_NUM_MARKS" Value="5" />
<UnitInfo Type="UI_SA" Code="SA_NUM_LEGS" Value="6" />
</UnitInfos>
<Start SortOrder="1">
<Competitor Code="1107624" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="ARG" />
<Composition>
<Athlete Code="1107624" Order="1" Bib="ARG">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="ALSOGARAY Julio" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="2">
<Competitor Code="1094919" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="AUS" />
<Composition>
<Athlete Code="1094919" Order="1" Bib="AUS">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="SLINGSBY Tom" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="3">
<Competitor Code="1122218" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="AUT" />
<Composition>
<Athlete Code="1122218" Order="1" Bib="AUT">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="GERITZER Andreas" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="4">
<Competitor Code="1128999" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="BEL" />
<Composition>
<Athlete Code="1128999" Order="1" Bib="BEL">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="Van LAER Wannes" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="5">
<Competitor Code="1086898" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="BRA" />
<Composition>
<Athlete Code="1086898" Order="1" Bib="BRA">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="FONTES Bruno" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="6">
<Competitor Code="1076910" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="CAN" />
<Composition>
<Athlete Code="1076910" Order="1" Bib="CAN">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="WRIGHT David" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="7">
<Competitor Code="1078063" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="CHI" />
<Composition>
<Athlete Code="1078063" Order="1" Bib="CHI">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="del SOLAR Matias" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="8">
<Competitor Code="1067110" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="CHN" />
<Composition>
<Athlete Code="1067110" Order="1" Bib="CHN">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="SHI Jian" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="9">
<Competitor Code="1105954" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="COL" />
<Composition>
<Athlete Code="1105954" Order="1" Bib="COL">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="QUINTERO Andrey" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="10">
<Competitor Code="1062315" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="CRO" />
<Composition>
<Athlete Code="1062315" Order="1" Bib="CRO">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="STIPANOVIC Tonci" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="11">
<Competitor Code="1087452" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="CYP" />
<Composition>
<Athlete Code="1087452" Order="1" Bib="CYP">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="KONTIDES Pavlos" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="12">
<Competitor Code="1109397" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="CZE" />
<Composition>
<Athlete Code="1109397" Order="1" Bib="CZE">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="TEPLY Viktor" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="13">
<Competitor Code="1081804" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="DEN" />
<Composition>
<Athlete Code="1081804" Order="1" Bib="DEN">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="SCHIERUP Thorbjorn" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="14">
<Competitor Code="1107276" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="ESP" />
<Composition>
<Athlete Code="1107276" Order="1" Bib="ESP">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="HERNANDEZ CEBRIAN Javier" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="15">
<Competitor Code="1072644" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="EST" />
<Composition>
<Athlete Code="1072644" Order="1" Bib="EST">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="RAMMO Karl-Martin" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="16">
<Competitor Code="250804" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="FIN" />
<Composition>
<Athlete Code="250804" Order="1" Bib="FIN">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="LINDFORS Mattias" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="17">
<Competitor Code="1079607" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="FRA" />
<Composition>
<Athlete Code="1079607" Order="1" Bib="FRA">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="BERNAZ Jean Baptiste" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="18">
<Competitor Code="1085473" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="GBR" />
<Composition>
<Athlete Code="1085473" Order="1" Bib="GBR">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="GOODISON Paul" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="19">
<Competitor Code="1109194" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="GER" />
<Composition>
<Athlete Code="1109194" Order="1" Bib="GER">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="GROTELUSCHEN Simon" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="20">
<Competitor Code="1105298" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="GRE" />
<Composition>
<Athlete Code="1105298" Order="1" Bib="GRE">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="HIMONAS Vagelis" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="21">
<Competitor Code="1083279" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="GUA" />
<Composition>
<Athlete Code="1083279" Order="1" Bib="GUA">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="MAEGLI AGUERO Juan Ignacio" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="22">
<Competitor Code="1120663" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="HUN" />
<Composition>
<Athlete Code="1120663" Order="1" Bib="HUN">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="BERECZ Zsombor" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="23">
<Competitor Code="1063800" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="IRL" />
<Composition>
<Athlete Code="1063800" Order="1" Bib="IRL">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="ESPEY James" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="24">
<Competitor Code="1020432" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="ISV" />
<Composition>
<Athlete Code="1020432" Order="1" Bib="ISV">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="THOMPSON Cy" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="25">
<Competitor Code="1087938" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="ITA" />
<Composition>
<Athlete Code="1087938" Order="1" Bib="ITA">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="REGOLO Michele" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="26">
<Competitor Code="262797" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="KGZ" />
<Composition>
<Athlete Code="262797" Order="1" Bib="KGZ">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="IGNATEV Ilia" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="27">
<Competitor Code="1087268" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="KOR" />
<Composition>
<Athlete Code="1087268" Order="1" Bib="KOR">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="HA Jeemin" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="28">
<Competitor Code="1085839" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="LTU" />
<Composition>
<Athlete Code="1085839" Order="1" Bib="LTU">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="MILEVICIUS Rokas" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="29">
<Competitor Code="1115858" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="MAS" />
<Composition>
<Athlete Code="1115858" Order="1" Bib="MAS">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="MOHD AFENDY Khairulnizam" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="30">
<Competitor Code="1076540" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="MEX" />
<Composition>
<Athlete Code="1076540" Order="1" Bib="MEX">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="MONTEMAYOR Ricardo" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="31">
<Competitor Code="1031967" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="MNE" />
<Composition>
<Athlete Code="1031967" Order="1" Bib="MNE">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="DUKIC Milivoj" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="32">
<Competitor Code="1110630" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="MON" />
<Composition>
<Athlete Code="1110630" Order="1" Bib="MON">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="DESPRAT Damien" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="33">
<Competitor Code="1104959" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="NED" />
<Composition>
<Athlete Code="1104959" Order="1" Bib="NED">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="van SCHAARDENBURG Rutger" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="34">
<Competitor Code="1052366" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="NOR" />
<Composition>
<Athlete Code="1052366" Order="1" Bib="NOR">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="RUTH Kristian" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="35">
<Competitor Code="1124975" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="NZL" />
<Composition>
<Athlete Code="1124975" Order="1" Bib="NZL">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="MURDOCH Andrew" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="36">
<Competitor Code="1039736" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="POL" />
<Composition>
<Athlete Code="1039736" Order="1" Bib="POL">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="ZIEMINSKI Kacper" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="37">
<Competitor Code="1102034" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="POR" />
<Composition>
<Athlete Code="1102034" Order="1" Bib="POR">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="LIMA Gustavo" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="38">
<Competitor Code="1016539" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="RUS" />
<Composition>
<Athlete Code="1016539" Order="1" Bib="RUS">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="LISOVENKO Igor" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="39">
<Competitor Code="1054093" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="SIN" />
<Composition>
<Athlete Code="1054093" Order="1" Bib="SIN">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="CHENG Colin" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="40">
<Competitor Code="1119655" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="SLO" />
<Composition>
<Athlete Code="1119655" Order="1" Bib="SLO">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="HMELJAK Karlo" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="41">
<Competitor Code="1100786" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="SWE" />
<Composition>
<Athlete Code="1100786" Order="1" Bib="SWE">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="MYRGREN Rasmus" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="42">
<Competitor Code="1060133" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="THA" />
<Composition>
<Athlete Code="1060133" Order="1" Bib="THA">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="BUALONG Keerati" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="43">
<Competitor Code="1029018" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="TRI" />
<Composition>
<Athlete Code="1029018" Order="1" Bib="TRI">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="LEWIS Andrew" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="44">
<Competitor Code="1072016" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="TUN" />
<Composition>
<Athlete Code="1072016" Order="1" Bib="TUN">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="AKROUT Youssef" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="45">
<Competitor Code="1073504" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="TUR" />
<Composition>
<Athlete Code="1073504" Order="1" Bib="TUR">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="CAKIR Mustafa" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="46">
<Competitor Code="1071554" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="UKR" />
<Composition>
<Athlete Code="1071554" Order="1" Bib="UKR">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="KUDRYASHOV Valeriy" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="47">
<Competitor Code="1078229" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="URU" />
<Composition>
<Athlete Code="1078229" Order="1" Bib="URU">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="FOGLIA COSTA Alejandro" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="48">
<Competitor Code="1135083" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="USA" />
<Composition>
<Athlete Code="1135083" Order="1" Bib="USA">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="CRANE Rob" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="49">
<Competitor Code="1105340" Type="A">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="VEN" />
<Composition>
<Athlete Code="1105340" Order="1" Bib="VEN">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="RUIZ DURANGO Jose" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
</Competition>
</OdfBody>
@@ -1,725 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<OdfBody DocumentCode="SAM007000" DocumentType="DT_CUMULATIVE_RESULT" DocumentSubtype="SAM007000" ResultStatus="OFFICIAL" Version="0" FeedFlag="P" Date="20130205" Time="162041067" LogicalDate="20130205" Venue="WAP">
<Competition Code="PG2012">
<CumulativeResult Rank="1" ResultType="POINTS" Result="32" SortOrder="1">
<Competitor Code="SAM007SWE01" Type="T" Bib="SWE">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="42" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="SWE" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_MEDAL_RACE" Value="2" />
</ExtendedResults>
<Composition>
<Athlete Code="1099794" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="LOOF Fredrik" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1051806" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="SALMINEN Max" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="2" ResultType="POINTS" Result="34" SortOrder="2">
<Competitor Code="SAM007GBR01" Type="T" Bib="GBR">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="45" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="GBR" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_MEDAL_RACE" Value="16" />
</ExtendedResults>
<Composition>
<Athlete Code="1085481" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="PERCY Iain" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1085487" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="SIMPSON Andrew" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="3" ResultType="POINTS" Result="40" SortOrder="3">
<Competitor Code="SAM007BRA01" Type="T" Bib="BRA">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="49" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="BRA" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_MEDAL_RACE" Value="14" />
</ExtendedResults>
<Composition>
<Athlete Code="1089813" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="SCHEIDT Robert" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1089809" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="PRADA Bruno" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="4" ResultType="POINTS" Result="63" SortOrder="4">
<Competitor Code="SAM007NOR01" Type="T" Bib="NOR">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="79" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="NOR" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_MEDAL_RACE" Value="10" />
</ExtendedResults>
<Composition>
<Athlete Code="1044883" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="MELLEBY Eivind" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1044886" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="PEDERSEN Petter Morland" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="5" ResultType="POINTS" Result="70" SortOrder="5">
<Competitor Code="SAM007NZL01" Type="T" Bib="NZL">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="85" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="NZL" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_MEDAL_RACE" Value="4" />
</ExtendedResults>
<Composition>
<Athlete Code="1124976" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="PEPPER Hamish" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1124984" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="TURNER Jim" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="6" ResultType="POINTS" Result="70" SortOrder="6">
<Competitor Code="SAM007GER01" Type="T" Bib="GER">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="87" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="GER" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="17" />
<ExtendedResult Type="ER_SA" Code="SA_IRM_STATUS_IN_RACE" Pos="7" Value="BFD" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_MEDAL_RACE" Value="6" />
</ExtendedResults>
<Composition>
<Athlete Code="1109211" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="STANJEK Robert" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1109199" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="KLEEN Frithjof" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="7" ResultType="POINTS" Result="71" SortOrder="7">
<Competitor Code="SAM007USA01" Type="T" Bib="USA">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="85" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="USA" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_MEDAL_RACE" Value="12" />
</ExtendedResults>
<Composition>
<Athlete Code="1124697" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="MENDELBLATT Mark" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1124773" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="FATIH Brian" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="8" ResultType="POINTS" Result="72" SortOrder="8">
<Competitor Code="SAM007POL01" Type="T" Bib="POL">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="85" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="POL" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="4" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_MEDAL_RACE" Value="18" />
</ExtendedResults>
<Composition>
<Athlete Code="1039001" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="KUSZNIEREWICZ Mateusz" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1039791" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="ZYCKI Dominik" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="9" ResultType="POINTS" Result="86" SortOrder="9">
<Competitor Code="SAM007FRA01" Type="T" Bib="FRA">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="100" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="FRA" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="1" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_MEDAL_RACE" Value="8" />
</ExtendedResults>
<Composition>
<Athlete Code="1079621" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="ROHART Xavier" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1079622" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="PONSOT Pierre-Alexis" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="10" ResultType="POINTS" Result="95" SortOrder="10">
<Competitor Code="SAM007IRL01" Type="T" Bib="IRL">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="112" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="IRL" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="2" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="17" />
<ExtendedResult Type="ER_SA" Code="SA_IRM_STATUS_IN_RACE" Pos="7" Value="DSQ" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_MEDAL_RACE" Value="20" />
</ExtendedResults>
<Composition>
<Athlete Code="1063796" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="O'LEARY Peter" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1063792" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="BURROWS David" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="11" ResultType="POINTS" Result="89" SortOrder="11">
<Competitor Code="SAM007DEN01" Type="T" Bib="DEN">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="103" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="DEN" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="11" />
</ExtendedResults>
<Composition>
<Athlete Code="1081511" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="HESTBAEK Michael" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1081799" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="OLESEN Claus" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="12" ResultType="POINTS" Result="93" SortOrder="12">
<Competitor Code="SAM007CAN01" Type="T" Bib="CAN">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="110" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="CAN" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="6" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="17" />
<ExtendedResult Type="ER_SA" Code="SA_IRM_STATUS_IN_RACE" Pos="6" Value="OCS" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="12" />
</ExtendedResults>
<Composition>
<Athlete Code="1076767" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="CLARKE Richard" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1124488" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="BJORN Tyler" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="13" ResultType="POINTS" Result="102" SortOrder="13">
<Competitor Code="SAM007SUI01" Type="T" Bib="SUI">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="118" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="SUI" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="13" />
</ExtendedResults>
<Composition>
<Athlete Code="1126342" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="MARAZZI Flavio" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1126334" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="de MARIA Enrico" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="14" ResultType="POINTS" Result="106" SortOrder="14">
<Competitor Code="SAM007GRE01" Type="T" Bib="GRE">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="123" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="GRE" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="3" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="17" />
<ExtendedResult Type="ER_SA" Code="SA_IRM_STATUS_IN_RACE" Pos="7" Value="BFD" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="17" />
<ExtendedResult Type="ER_SA" Code="SA_IRM_STATUS_IN_RACE" Pos="8" Value="DSQ" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="17" />
<ExtendedResult Type="ER_SA" Code="SA_IRM_STATUS_IN_RACE" Pos="9" Value="OCS" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="14" />
</ExtendedResults>
<Composition>
<Athlete Code="1118703" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="PAPATHANASIOU Emilios" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1118705" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="TSOTRAS Adonis" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="15" ResultType="POINTS" Result="108" SortOrder="15">
<Competitor Code="SAM007POR01" Type="T" Bib="POR">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="124" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="POR" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="9" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="7" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="10" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="15" />
</ExtendedResults>
<Composition>
<Athlete Code="1102061" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="DOMINGOS Afonso" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1102037" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="MELO Frederico" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
<CumulativeResult Rank="16" ResultType="POINTS" Result="116" SortOrder="16">
<Competitor Code="SAM007CRO01" Type="T" Bib="CRO">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_TOTAL_POINTS" Value="132" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="CRO" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="1" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="1" Value="8" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="2" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="2" Value="11" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="3" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="3" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="4" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="4" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="5" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="5" Value="14" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="6" Value="13" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="6" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="7" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="7" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="8" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="8" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="9" Value="12" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="9" Value="16" />
<ExtendedResult Type="ER_SA" Code="SA_POINTS_IN_RACE" Pos="10" Value="15" />
<ExtendedResult Type="ER_SA" Code="SA_RANK_AFTER_RACE" Pos="10" Value="16" />
</ExtendedResults>
<Composition>
<Athlete Code="1062299" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="LOVROVIC Marin" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1062307" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="LOVROVIC Dan" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</CumulativeResult>
</Competition>
</OdfBody>
@@ -1,865 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<OdfBody DocumentCode="SAM007910" DocumentType="DT_RESULT" ResultStatus="OFFICIAL" Version="0" FeedFlag="P" Date="20130205" Time="162041015" LogicalDate="20130205" Venue="WAP">
<Competition Code="PG2012">
<UnitInfos>
<UnitDateTime StartDate="2012-08-03T14:16:00+02:00" />
<UnitInfo Type="UI_SA" Code="SA_WIND_SPEED" Pos="1" Value="16" />
<UnitInfo Type="UI_SA" Code="SA_WIND_SPEED" Pos="2" Value="14" />
<UnitInfo Type="UI_SA" Code="SA_WIND_SPEED" Pos="3" Value="14" />
<UnitInfo Type="UI_SA" Code="SA_WIND_SPEED" Pos="4" Value="15" />
<UnitInfo Type="UI_SA" Code="SA_WIND_SPEED" Pos="5" Value="15" />
<UnitInfo Type="UI_SA" Code="SA_WIND_DIRECTION" Pos="1" Value="210" />
<UnitInfo Type="UI_SA" Code="SA_WIND_DIRECTION" Pos="2" Value="210" />
<UnitInfo Type="UI_SA" Code="SA_WIND_DIRECTION" Pos="3" Value="210" />
<UnitInfo Type="UI_SA" Code="SA_WIND_DIRECTION" Pos="4" Value="205" />
<UnitInfo Type="UI_SA" Code="SA_WIND_DIRECTION" Pos="5" Value="205" />
<UnitInfo Type="UI_SA" Code="SA_ELAPSED_TIME" Pos="2" Value="19:46" />
<UnitInfo Type="UI_SA" Code="SA_ELAPSED_TIME" Pos="3" Value="35:30" />
<UnitInfo Type="UI_SA" Code="SA_ELAPSED_TIME" Pos="4" Value="56:27" />
<UnitInfo Type="UI_SA" Code="SA_ELAPSED_TIME" Pos="5" Value="1:13:51" />
<UnitInfo Type="UI_SA" Code="SA_RACE_STATUS" Value="FSHD" />
<UnitInfo Type="UI_SA" Code="SA_MARK_ROUNDED" Pos="2" Value="Y" />
<UnitInfo Type="UI_SA" Code="SA_MARK_ROUNDED" Pos="3" Value="Y" />
<UnitInfo Type="UI_SA" Code="SA_MARK_ROUNDED" Pos="4" Value="Y" />
<UnitInfo Type="UI_SA" Code="SA_MARK_ROUNDED" Pos="5" Value="Y" />
<UnitInfo Type="UI_SA" Code="SA_NUM_OCS" Value="0" />
<UnitInfo Type="UI_SA" Code="SA_CURRENT_LEG" Value="-" />
</UnitInfos>
<Result Rank="1" ResultType="POINTS" Result="1" SortOrder="1">
<Competitor Code="SAM007GBR01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="1">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:00" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="19:46" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="1" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="1">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:00" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="35:30" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="1" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="1">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:00" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="56:27" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="1" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="1">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:00" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:13:51" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="1" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="GBR" />
</ExtendedResults>
<Composition>
<Athlete Code="1085481" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="PERCY Iain" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1085487" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="SIMPSON Andrew" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="2" ResultType="POINTS" Result="2" SortOrder="2">
<Competitor Code="SAM007POL01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="2">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:05" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="19:51" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="2" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="3">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:29" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="35:59" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="3" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="2">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:28" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="56:55" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="2" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="2">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:33" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:14:24" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="2" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="POL" />
</ExtendedResults>
<Composition>
<Athlete Code="1039001" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="KUSZNIEREWICZ Mateusz" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1039791" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="ZYCKI Dominik" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="3" ResultType="POINTS" Result="3" SortOrder="3">
<Competitor Code="SAM007BRA01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="7">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:25" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="20:11" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="7" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="4">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:34" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="36:04" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="4" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="4">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:52" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="57:19" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="4" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="3">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:48" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:14:39" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="3" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="BRA" />
</ExtendedResults>
<Composition>
<Athlete Code="1089813" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="SCHEIDT Robert" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1089809" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="PRADA Bruno" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="4" ResultType="POINTS" Result="4" SortOrder="4">
<Competitor Code="SAM007GER01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="10">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:34" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="20:20" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="10" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="2">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:19" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="35:49" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="2" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="3">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:37" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="57:04" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="3" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="4">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:53" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:14:44" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="4" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="GER" />
</ExtendedResults>
<Composition>
<Athlete Code="1109211" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="STANJEK Robert" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1109199" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="KLEEN Frithjof" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="5" ResultType="POINTS" Result="5" SortOrder="5">
<Competitor Code="SAM007NOR01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="12">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:41" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="20:27" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="12" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="12">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:01" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="36:31" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="12" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="8">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:14" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="57:41" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="8" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="5">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:56" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:14:47" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="5" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="NOR" />
</ExtendedResults>
<Composition>
<Athlete Code="1044883" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="MELLEBY Eivind" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1044886" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="PEDERSEN Petter Morland" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="6" ResultType="POINTS" Result="6" SortOrder="6">
<Competitor Code="SAM007SWE01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="5">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:17" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="20:03" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="5" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="6">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:36" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="36:06" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="6" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="5">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:04" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="57:31" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="5" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="6">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:23" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:15:14" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="6" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="SWE" />
</ExtendedResults>
<Composition>
<Athlete Code="1099794" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="LOOF Fredrik" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1051806" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="SALMINEN Max" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="7" ResultType="POINTS" Result="7" SortOrder="7">
<Competitor Code="SAM007IRL01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="11">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:37" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="20:23" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="11" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="5">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:35" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="36:05" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="5" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="6">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:07" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="57:34" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="6" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="7">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:26" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:15:17" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="7" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="IRL" />
</ExtendedResults>
<Composition>
<Athlete Code="1063796" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="O'LEARY Peter" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1063792" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="BURROWS David" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="8" ResultType="POINTS" Result="8" SortOrder="8">
<Competitor Code="SAM007FRA01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="15">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:53" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="20:39" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="15" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="10">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:52" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="36:22" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="10" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="11">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:27" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="57:54" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="11" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="8">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:37" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:15:28" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="8" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="FRA" />
</ExtendedResults>
<Composition>
<Athlete Code="1079621" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="ROHART Xavier" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1079622" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="PONSOT Pierre-Alexis" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="9" ResultType="POINTS" Result="9" SortOrder="9">
<Competitor Code="SAM007NZL01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="8">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:31" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="20:17" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="8" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="8">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:42" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="36:12" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="8" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="9">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:18" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="57:45" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="9" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="9">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:39" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:15:30" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="9" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="NZL" />
</ExtendedResults>
<Composition>
<Athlete Code="1124976" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="PEPPER Hamish" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1124984" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="TURNER Jim" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="10" ResultType="POINTS" Result="10" SortOrder="10">
<Competitor Code="SAM007DEN01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="4">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:15" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="20:01" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="4" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="7">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:41" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="36:11" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="7" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="10">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:22" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="57:49" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="10" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="10">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:40" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:15:31" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="10" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="DEN" />
</ExtendedResults>
<Composition>
<Athlete Code="1081511" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="HESTBAEK Michael" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1081799" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="OLESEN Claus" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="11" ResultType="POINTS" Result="11" SortOrder="11">
<Competitor Code="SAM007USA01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="6">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:18" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="20:04" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="6" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="9">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:48" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="36:18" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="9" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="7">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:11" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="57:38" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="7" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="11">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:42" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:15:33" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="11" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="USA" />
</ExtendedResults>
<Composition>
<Athlete Code="1124697" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="MENDELBLATT Mark" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1124773" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="FATIH Brian" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="12" ResultType="POINTS" Result="12" SortOrder="12">
<Competitor Code="SAM007GRE01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="13">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:46" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="20:32" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="13" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="15">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:13" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="36:43" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="15" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="14">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:45" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="58:12" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="14" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="12">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:46" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:15:37" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="12" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="GRE" />
</ExtendedResults>
<Composition>
<Athlete Code="1118703" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="PAPATHANASIOU Emilios" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1118705" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="TSOTRAS Adonis" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="13" ResultType="POINTS" Result="13" SortOrder="13">
<Competitor Code="SAM007CAN01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="14">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:52" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="20:38" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="14" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="14">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:10" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="36:40" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="14" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="13">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:36" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="58:03" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="13" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="13">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:54" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:15:45" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="13" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="CAN" />
</ExtendedResults>
<Composition>
<Athlete Code="1076767" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="CLARKE Richard" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1124488" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="BJORN Tyler" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="14" ResultType="POINTS" Result="14" SortOrder="14">
<Competitor Code="SAM007POR01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="9">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:32" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="20:18" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="9" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="11">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:57" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="36:27" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="11" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="12">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:35" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="58:02" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="12" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="14">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:56" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:15:47" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="14" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="POR" />
</ExtendedResults>
<Composition>
<Athlete Code="1102061" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="DOMINGOS Afonso" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1102037" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="MELO Frederico" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="15" ResultType="POINTS" Result="15" SortOrder="15">
<Competitor Code="SAM007CRO01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="16">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:25" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="21:11" />
<Extension Type="SA_MARK" Code="SA_LAST_COMP" Value="Y" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="16" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="16">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:14" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="36:44" />
<Extension Type="SA_MARK" Code="SA_LAST_COMP" Value="Y" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="16" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="16">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="2:02" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="58:29" />
<Extension Type="SA_MARK" Code="SA_LAST_COMP" Value="Y" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="16" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="15">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="2:11" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:16:02" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="15" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="CRO" />
</ExtendedResults>
<Composition>
<Athlete Code="1062299" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="LOVROVIC Marin" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1062307" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="LOVROVIC Dan" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
<Result Rank="16" ResultType="POINTS" Result="16" SortOrder="16">
<Competitor Code="SAM007SUI01" Type="T">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="2" Value="3">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="0:11" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="19:57" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="3" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="3" Value="13">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:07" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="36:37" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="13" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="4" Value="15">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="1:50" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="58:17" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="15" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_MARK" Pos="5" Value="16">
<Extensions>
<Extension Type="SA_MARK" Code="SA_TIME_BEHIND" Value="2:23" />
<Extension Type="SA_MARK" Code="SA_TIME" Value="1:16:14" />
<Extension Type="SA_MARK" Code="SA_LAST_COMP" Value="Y" />
<Extension Type="SA_MARK" Code="SA_SORT_ORDER" Value="16" />
</Extensions>
</ExtendedResult>
<ExtendedResult Type="ER_SA" Code="SA_LAST_MARK" Value="5" />
<ExtendedResult Type="ER_SA" Code="SA_COUNTRY" Value="SUI" />
</ExtendedResults>
<Composition>
<Athlete Code="1126342" Order="1">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="MARAZZI Flavio" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
<Athlete Code="1126334" Order="2">
<ExtendedResults>
<ExtendedResult Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<ExtendedResult Type="ER_SA" Code="SA_NAME" Value="de MARIA Enrico" />
<ExtendedResult Type="ER_SA" Code="SA_GENDER" Value="M" />
</ExtendedResults>
</Athlete>
</Composition>
</Competitor>
</Result>
</Competition>
</OdfBody>
@@ -1,309 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<OdfBody DocumentCode="SAM007910" DocumentType="DT_START_LIST" Version="0" FeedFlag="P" Date="20130205" Time="162038313" LogicalDate="20130205" Venue="WAP">
<Competition Code="PG2012">
<UnitInfos>
<UnitDateTime StartDate="2012-08-03T14:50:00+02:00" />
<UnitInfo Type="UI_SA" Code="SA_COURSE_SAILED" Value="L2" />
<UnitInfo Type="UI_SA" Code="SA_COURSE_DESC" Value="Windward/Leeward (L2)" />
<UnitInfo Type="UI_SA" Code="SA_MARK" Pos="1" Value="0">
<Extensions>
<Extension Type="UI_SA" Code="SA_SEQ_NUM" Value="0" />
</Extensions>
</UnitInfo>
<UnitInfo Type="UI_SA" Code="SA_MARK" Pos="2" Value="1">
<Extensions>
<Extension Type="UI_SA" Code="SA_SEQ_NUM" Value="1" />
</Extensions>
</UnitInfo>
<UnitInfo Type="UI_SA" Code="SA_MARK" Pos="3" Value="4">
<Extensions>
<Extension Type="UI_SA" Code="SA_SEQ_NUM" Value="2" />
</Extensions>
</UnitInfo>
<UnitInfo Type="UI_SA" Code="SA_MARK" Pos="4" Value="1">
<Extensions>
<Extension Type="UI_SA" Code="SA_SEQ_NUM" Value="3" />
</Extensions>
</UnitInfo>
<UnitInfo Type="UI_SA" Code="SA_MARK" Pos="5" Value="10">
<Extensions>
<Extension Type="UI_SA" Code="SA_SEQ_NUM" Value="4" />
</Extensions>
</UnitInfo>
<UnitInfo Type="UI_SA" Code="SA_NUM_MARKS" Value="3" />
<UnitInfo Type="UI_SA" Code="SA_NUM_LEGS" Value="4" />
</UnitInfos>
<Start SortOrder="1">
<Competitor Code="SAM007BRA01" Type="T" Bib="BRA">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="BRA" />
<Composition>
<Athlete Code="1089813" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="SCHEIDT Robert" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1089809" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="PRADA Bruno" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="2">
<Competitor Code="SAM007CAN01" Type="T" Bib="CAN">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="CAN" />
<Composition>
<Athlete Code="1076767" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="CLARKE Richard" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1124488" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="BJORN Tyler" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="3">
<Competitor Code="SAM007CRO01" Type="T" Bib="CRO">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="CRO" />
<Composition>
<Athlete Code="1062299" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="LOVROVIC Marin" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1062307" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="LOVROVIC Dan" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="4">
<Competitor Code="SAM007DEN01" Type="T" Bib="DEN">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="DEN" />
<Composition>
<Athlete Code="1081511" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="HESTBAEK Michael" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1081799" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="OLESEN Claus" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="5">
<Competitor Code="SAM007FRA01" Type="T" Bib="FRA">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="FRA" />
<Composition>
<Athlete Code="1079621" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="ROHART Xavier" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1079622" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="PONSOT Pierre-Alexis" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="6">
<Competitor Code="SAM007GBR01" Type="T" Bib="GBR">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="GBR" />
<Composition>
<Athlete Code="1085481" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="PERCY Iain" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1085487" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="SIMPSON Andrew" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="7">
<Competitor Code="SAM007GER01" Type="T" Bib="GER">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="GER" />
<Composition>
<Athlete Code="1109211" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="STANJEK Robert" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1109199" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="KLEEN Frithjof" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="8">
<Competitor Code="SAM007GRE01" Type="T" Bib="GRE">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="GRE" />
<Composition>
<Athlete Code="1118703" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="PAPATHANASIOU Emilios" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1118705" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="TSOTRAS Adonis" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="9">
<Competitor Code="SAM007IRL01" Type="T" Bib="IRL">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="IRL" />
<Composition>
<Athlete Code="1063796" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="O'LEARY Peter" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1063792" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="BURROWS David" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="10">
<Competitor Code="SAM007NOR01" Type="T" Bib="NOR">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="NOR" />
<Composition>
<Athlete Code="1044883" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="MELLEBY Eivind" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1044886" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="PEDERSEN Petter Morland" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="11">
<Competitor Code="SAM007NZL01" Type="T" Bib="NZL">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="NZL" />
<Composition>
<Athlete Code="1124976" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="PEPPER Hamish" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1124984" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="TURNER Jim" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="12">
<Competitor Code="SAM007POL01" Type="T" Bib="POL">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="POL" />
<Composition>
<Athlete Code="1039001" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="KUSZNIEREWICZ Mateusz" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1039791" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="ZYCKI Dominik" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="13">
<Competitor Code="SAM007POR01" Type="T" Bib="POR">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="POR" />
<Composition>
<Athlete Code="1102061" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="DOMINGOS Afonso" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1102037" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="MELO Frederico" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="14">
<Competitor Code="SAM007SUI01" Type="T" Bib="SUI">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="SUI" />
<Composition>
<Athlete Code="1126342" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="MARAZZI Flavio" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1126334" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="de MARIA Enrico" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="15">
<Competitor Code="SAM007SWE01" Type="T" Bib="SWE">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="SWE" />
<Composition>
<Athlete Code="1099794" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="LOOF Fredrik" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1051806" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="SALMINEN Max" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
<Start SortOrder="16">
<Competitor Code="SAM007USA01" Type="T" Bib="USA">
<EventUnitEntry Type="ER_SA" Code="SA_COUNTRY" Value="USA" />
<Composition>
<Athlete Code="1124697" Order="1">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Skipper" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="MENDELBLATT Mark" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
<Athlete Code="1124773" Order="2">
<EventUnitEntry Type="ER_SA" Code="SA_POSITION" Value="Crew" />
<EventUnitEntry Type="ER_SA" Code="SA_NAME" Value="FATIH Brian" />
<EventUnitEntry Type="ER_SA" Code="SA_GENDER" Value="M" />
</Athlete>
</Composition>
</Competitor>
</Start>
</Competition>
</OdfBody>
@@ -1,218 +0,0 @@
package com.sap.sailing.odf.resultimport.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
import com.sap.sailing.domain.common.CountryCodeFactory;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.RegattaScoreCorrections;
import com.sap.sailing.domain.common.RegattaScoreCorrections.ScoreCorrectionsForRace;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.odf.resultimport.Athlete.Gender;
import com.sap.sailing.odf.resultimport.Competition;
import com.sap.sailing.odf.resultimport.CumulativeResult;
import com.sap.sailing.odf.resultimport.CumulativeResultDocumentProvider;
import com.sap.sailing.odf.resultimport.OdfBody;
import com.sap.sailing.odf.resultimport.OdfBodyParser;
import com.sap.sailing.odf.resultimport.ParserFactory;
import com.sap.sailing.odf.resultimport.PointsResult;
import com.sap.sailing.odf.resultimport.Skipper;
import com.sap.sailing.odf.resultimport.impl.ScoreCorrectionProviderImpl;
public class ParserTest {
private static final String SAMPLE_INPUT_NAME_LASER = "SAM004000_DT_CUMULATIVE_RESULT_SAM004000_1.0.xml";
private static final String SAMPLE_INPUT_NAME_STAR = "SAM007000_DT_CUMULATIVE_RESULT_SAM007000_1.0.xml";
private static final String RESOURCES = "resources/";
private InputStream getInputStream(String filename) throws FileNotFoundException, IOException {
return new FileInputStream(getFile(filename));
}
private File getFile(String filename) {
return new File(RESOURCES + filename);
}
private CumulativeResultDocumentProvider getTestDocumentProvider() {
return new CumulativeResultDocumentProvider() {
@Override
public Iterable<InputStream> getAllAvailableCumulativeResultDocuments() {
try {
return Arrays.asList(new InputStream[] { getInputStream(SAMPLE_INPUT_NAME_LASER), getInputStream(SAMPLE_INPUT_NAME_STAR) });
} catch (IOException e) {
throw new RuntimeException(e);
}
}
};
}
@Test
public void testLoadingSampleXML() throws SAXException, IOException, ParserConfigurationException {
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder()
.parse(getSampleInputStream());
assertNotNull(doc);
Node resultList = doc.getElementsByTagName("OdfBody").item(0);
assertNotNull(resultList);
}
private InputStream getSampleInputStream() throws FileNotFoundException, IOException {
return getInputStream(SAMPLE_INPUT_NAME_LASER);
}
@Test
public void testParserForLaserRegatta() throws FileNotFoundException, SAXException, IOException, ParserConfigurationException {
OdfBodyParser parser = ParserFactory.INSTANCE.createOdfBodyParser();
OdfBody body = parser.parse(getInputStream(SAMPLE_INPUT_NAME_LASER), SAMPLE_INPUT_NAME_LASER);
assertNotNull(body);
Iterable<Competition> competitions = body.getCompetitions();
final Map<String, CumulativeResult> results = new HashMap<>();
for (Competition competition : competitions) {
for (CumulativeResult cumulativeResult : competition.getCumulativeResults()) {
results.put(cumulativeResult.getCompetitorCode(), cumulativeResult);
}
}
{
assertTrue(results.containsKey("1094919"));
CumulativeResult resultsFor1094919 = results.get("1094919");
assertEquals(1, Util.size(resultsFor1094919.getAthletes()));
assertEquals("SLINGSBY Tom", resultsFor1094919.getAthletes().iterator().next().getName());
assertEquals(Gender.M, resultsFor1094919.getAthletes().iterator().next().getGender());
assertTrue(resultsFor1094919.getAthletes().iterator().next() instanceof Skipper);
assertEquals(18, resultsFor1094919.getPointsInMedalRace(), 0.00000001);
assertSame(CountryCodeFactory.INSTANCE.getFromThreeLetterIOCName("AUS"), resultsFor1094919.getCountryCode());
assertEquals(57, resultsFor1094919.getTotalPoints(), 0.00000001);
assertEquals(43, ((PointsResult) resultsFor1094919.getResult()).getPoints(), 0.00000001);
}
{
assertTrue(results.containsKey("262797"));
CumulativeResult resultsFor262797 = results.get("262797");
assertEquals(1, Util.size(resultsFor262797.getAthletes()));
assertEquals("IGNATEV Ilia", resultsFor262797.getAthletes().iterator().next().getName());
assertEquals(Gender.M, resultsFor262797.getAthletes().iterator().next().getGender());
assertNull(resultsFor262797.getPointsInMedalRace());
assertSame(CountryCodeFactory.INSTANCE.getFromThreeLetterIOCName("KGZ"), resultsFor262797.getCountryCode());
assertEquals(471, resultsFor262797.getTotalPoints(), 0.00000001);
assertEquals(422, ((PointsResult) resultsFor262797.getResult()).getPoints(), 0.00000001);
}
{
assertTrue(results.containsKey("1060133"));
CumulativeResult resultsFor1060133 = results.get("1060133");
assertSame(MaxPointsReason.DSQ, Util.get(resultsFor1060133.getPointsAndRanksAfterEachRace(), 6).getC());
assertEquals(50, Util.get(resultsFor1060133.getPointsAndRanksAfterEachRace(), 6).getA(), 0.0000001);
assertEquals(Integer.valueOf(48), Util.get(resultsFor1060133.getPointsAndRanksAfterEachRace(), 6).getB());
}
}
@Test
public void testParserForStarRegatta() throws FileNotFoundException, SAXException, IOException, ParserConfigurationException {
OdfBodyParser parser = ParserFactory.INSTANCE.createOdfBodyParser();
OdfBody body = parser.parse(getInputStream(SAMPLE_INPUT_NAME_STAR), SAMPLE_INPUT_NAME_STAR);
assertNotNull(body);
Iterable<Competition> competitions = body.getCompetitions();
final Map<String, CumulativeResult> results = new HashMap<>();
for (Competition competition : competitions) {
for (CumulativeResult cumulativeResult : competition.getCumulativeResults()) {
results.put(cumulativeResult.getCompetitorCode(), cumulativeResult);
}
}
{
assertTrue(results.containsKey("SAM007SWE01"));
CumulativeResult resultsForSAM007SWE01 = results.get("SAM007SWE01");
assertEquals(2, Util.size(resultsForSAM007SWE01.getAthletes()));
assertEquals("LOOF Fredrik", resultsForSAM007SWE01.getAthletes().iterator().next().getName());
assertEquals(Gender.M, resultsForSAM007SWE01.getAthletes().iterator().next().getGender());
assertTrue(resultsForSAM007SWE01.getAthletes().iterator().next() instanceof Skipper);
assertEquals(2, resultsForSAM007SWE01.getPointsInMedalRace(), 0.00000001);
assertSame(CountryCodeFactory.INSTANCE.getFromThreeLetterIOCName("SWE"), resultsForSAM007SWE01.getCountryCode());
assertEquals(42, resultsForSAM007SWE01.getTotalPoints(), 0.00000001);
assertEquals(32, ((PointsResult) resultsForSAM007SWE01.getResult()).getPoints(), 0.00000001);
}
{
assertTrue(results.containsKey("SAM007CRO01"));
CumulativeResult resultsForSAM007CRO01 = results.get("SAM007CRO01");
assertEquals(2, Util.size(resultsForSAM007CRO01.getAthletes()));
assertEquals("LOVROVIC Marin", resultsForSAM007CRO01.getAthletes().iterator().next().getName());
assertEquals(Gender.M, resultsForSAM007CRO01.getAthletes().iterator().next().getGender());
assertNull(resultsForSAM007CRO01.getPointsInMedalRace());
assertSame(CountryCodeFactory.INSTANCE.getFromThreeLetterIOCName("CRO"), resultsForSAM007CRO01.getCountryCode());
assertEquals(132, resultsForSAM007CRO01.getTotalPoints(), 0.00000001);
assertEquals(116, ((PointsResult) resultsForSAM007CRO01.getResult()).getPoints(), 0.00000001);
}
{
assertTrue(results.containsKey("SAM007GRE01"));
CumulativeResult resultsFor1060133 = results.get("SAM007GRE01");
assertSame(MaxPointsReason.OCS, Util.get(resultsFor1060133.getPointsAndRanksAfterEachRace(), 8).getC());
assertEquals(17, Util.get(resultsFor1060133.getPointsAndRanksAfterEachRace(), 8).getA(), 0.0000001);
assertEquals(Integer.valueOf(14), Util.get(resultsFor1060133.getPointsAndRanksAfterEachRace(), 8).getB());
}
}
@Test
public void testScoreCorrectionProviderFeedingAndHasResults() throws IOException, SAXException,
ParserConfigurationException {
ScoreCorrectionProviderImpl scoreCorrectionProvider = new ScoreCorrectionProviderImpl(getTestDocumentProvider(),
ParserFactory.INSTANCE);
Map<String, Set<Pair<String, TimePoint>>> hasResultsFor = scoreCorrectionProvider.getHasResultsForBoatClassFromDateByEventName();
assertTrue(hasResultsFor.containsKey("Star"));
assertTrue(hasResultsFor.containsKey("Laser"));
}
@Test
public void testScoreCorrectionProvider() throws IOException, SAXException,
ParserConfigurationException {
ScoreCorrectionProviderImpl scoreCorrectionProvider = new ScoreCorrectionProviderImpl(getTestDocumentProvider(),
ParserFactory.INSTANCE);
Map<String, Set<Pair<String, TimePoint>>> hasResultsFor = scoreCorrectionProvider.getHasResultsForBoatClassFromDateByEventName();
RegattaScoreCorrections starResult = scoreCorrectionProvider.getScoreCorrections("SAM007000@WAP", "Star", hasResultsFor.get("Star").iterator().next().getB());
assertNotNull(starResult);
Iterable<ScoreCorrectionsForRace> scoreCorrectionsForRaces = starResult.getScoreCorrectionsForRaces();
assertNotNull(scoreCorrectionsForRaces);
assertEquals(11, Util.size(scoreCorrectionsForRaces)); // 10 regular races, one medal race
{
final ScoreCorrectionsForRace resultsForR6 = Util.get(scoreCorrectionsForRaces, 5);
assertEquals(11, resultsForR6.getScoreCorrectionForCompetitor("SAM007NOR01").getPoints(), 0.00000001);
assertSame(MaxPointsReason.NONE, resultsForR6.getScoreCorrectionForCompetitor("SAM007NOR01")
.getMaxPointsReason());
assertEquals("MELLEBY Eivind + PEDERSEN Petter Morland",
resultsForR6.getScoreCorrectionForCompetitor("SAM007NOR01").getCompetitorName());
}
{
final ScoreCorrectionsForRace resultsForM1 = Util.get(scoreCorrectionsForRaces, 10);
assertEquals(10, resultsForM1.getScoreCorrectionForCompetitor("SAM007NOR01").getPoints(), 0.00000001);
assertSame(MaxPointsReason.NONE, resultsForM1.getScoreCorrectionForCompetitor("SAM007NOR01")
.getMaxPointsReason());
assertEquals("MELLEBY Eivind + PEDERSEN Petter Morland",
resultsForM1.getScoreCorrectionForCompetitor("SAM007NOR01").getCompetitorName());
}
{
final ScoreCorrectionsForRace resultsForR7 = Util.get(scoreCorrectionsForRaces, 6);
assertEquals(17, resultsForR7.getScoreCorrectionForCompetitor("SAM007IRL01").getPoints(), 0.00000001);
assertSame(MaxPointsReason.DSQ, resultsForR7.getScoreCorrectionForCompetitor("SAM007IRL01")
.getMaxPointsReason());
assertEquals("O'LEARY Peter + BURROWS David",
resultsForR7.getScoreCorrectionForCompetitor("SAM007IRL01").getCompetitorName());
}
}
}
@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.sap.sailing.odf.resultimport</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -1,7 +0,0 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7
@@ -1,3 +0,0 @@
eclipse.preferences.version=1
pluginProject.extensions=false
resolve.requirebundle=false
@@ -1,13 +0,0 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Resultimport
Bundle-SymbolicName: com.sap.sailing.odf.resultimport
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: org.osgi.framework;version="1.6.0",
org.w3c.dom
Require-Bundle: com.sap.sailing.domain.common,
com.sap.sailing.domain,
com.sap.sailing.domain.swisstimingadapter
Bundle-Activator: com.sap.sailing.odf.resultimport.impl.Activator
@@ -1,4 +0,0 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.
@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>root</artifactId>
<groupId>com.sap.sailing</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>com.sap.sailing.odf.resultimport</artifactId>
<packaging>eclipse-plugin</packaging>
</project>
@@ -1,7 +0,0 @@
package com.sap.sailing.odf.resultimport;
public interface Athlete extends Named {
public static enum Gender { M, F };
Gender getGender();
}
@@ -1,17 +0,0 @@
package com.sap.sailing.odf.resultimport;
public interface Boat extends Named {
String getSailingNumber();
Integer getRank();
String getPrice();
Crew getCrew();
Iterable<BoatResultInRace> getResultsInRaces();
BoatResultInRace getResultsInRace(int raceNumberOneBased);
Double getTotalPoints();
}
@@ -1,15 +0,0 @@
package com.sap.sailing.odf.resultimport;
import com.sap.sailing.domain.common.MaxPointsReason;
public interface BoatResultInRace {
String getStatus();
Double getPoints();
Integer getRaceNumber();
MaxPointsReason getMaxPointsReason();
boolean isDiscarded();
}
@@ -1,5 +0,0 @@
package com.sap.sailing.odf.resultimport;
public interface Competition {
Iterable<CumulativeResult> getCumulativeResults();
}
@@ -1,23 +0,0 @@
package com.sap.sailing.odf.resultimport;
import com.sap.sailing.domain.common.CountryCode;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.odf.resultimport.CumulativeResult.CompetitorType;
public interface Competitor {
CompetitorType getCompetitorType();
CountryCode getCountryCode();
Double getPointsInMedalRace();
Iterable<Triple<Double, Integer, MaxPointsReason>> getPointsAndRanksAndMaxPointsAfterEachRace();
/**
* Somewhat like the sail number, however prefixed by the competition ID, e.g., "SAM007CRO01" meaning
* "Sailing, boat class 007 (Star), country code CRO, boat 01"
*/
String getCode();
}
@@ -1,7 +0,0 @@
package com.sap.sailing.odf.resultimport;
public interface Crew {
Skipper getSkipper();
Iterable<Crewmember> getCrewmembers();
}
@@ -1,5 +0,0 @@
package com.sap.sailing.odf.resultimport;
public interface Crewmember extends Athlete {
}
@@ -1,43 +0,0 @@
package com.sap.sailing.odf.resultimport;
import com.sap.sailing.domain.common.CountryCode;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.impl.Util.Triple;
public interface CumulativeResult {
public static enum CompetitorType { A /* athlete */ , T /* team */ };
int getRank();
/**
* Net result, after applying discards
*/
Result getResult();
int getSortOrder();
CompetitorType getCompetitorType();
/**
* Somewhat like the sail number, however prefixed by the competition ID, e.g., "SAM007CRO01" meaning
* "Sailing, boat class 007 (Star), country code CRO, boat 01"
*/
String getCompetitorCode();
CountryCode getCountryCode();
Iterable<Triple<Double, Integer, MaxPointsReason>> getPointsAndRanksAfterEachRace();
Double getPointsInMedalRace();
/**
* Can be expected to return a single person in case the {@link #getCompetitorType() competitor type} is {@link CompetitorType#A}, or a list
* with a {@link Skipper} and {@link Crewmember}s otherwise.
*/
Iterable<Athlete> getAthletes();
/**
* Total points, before applying discards
*/
Double getTotalPoints();
}
@@ -1,7 +0,0 @@
package com.sap.sailing.odf.resultimport;
import java.io.InputStream;
public interface CumulativeResultDocumentProvider {
Iterable<InputStream> getAllAvailableCumulativeResultDocuments();
}
@@ -1,5 +0,0 @@
package com.sap.sailing.odf.resultimport;
public interface Named {
String getName();
}
@@ -1,23 +0,0 @@
package com.sap.sailing.odf.resultimport;
import com.sap.sailing.domain.common.TimePoint;
public interface OdfBody {
Iterable<Competition> getCompetitions();
String getDocumentSubtype();
String getResultStatus();
String getVersion();
String getFeedFlag();
TimePoint getTimePoint();
String getVenue();
String getEventName();
String getBoatClassName();
}
@@ -1,12 +0,0 @@
package com.sap.sailing.odf.resultimport;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
public interface OdfBodyParser {
OdfBody parse(InputStream inputStream, String sourceName) throws SAXException, IOException, ParserConfigurationException;
}
@@ -1,10 +0,0 @@
package com.sap.sailing.odf.resultimport;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
import com.sap.sailing.odf.resultimport.impl.ParserFactoryImpl;
public interface ParserFactory {
ParserFactory INSTANCE = new ParserFactoryImpl(DomainFactory.INSTANCE);
OdfBodyParser createOdfBodyParser();
}
@@ -1,5 +0,0 @@
package com.sap.sailing.odf.resultimport;
public interface PointsResult extends Result {
double getPoints();
}
@@ -1,27 +0,0 @@
package com.sap.sailing.odf.resultimport;
/**
* Derived object, providing a view onto the data parsed from the result ZIP
*
* @author Axel Uhl (D043530)
*
*/
public interface RaceSummary {
String getBoatClassName();
int getRaceNumber();
Iterable<String> getFleetNames();
/**
* The {@link Boat} objects
*/
Iterable<Boat> getBoats();
/**
* Retrieves the {@link BoatResultInRace} data that <code>boat</code> achieved in the race summarized by this object
*/
BoatResultInRace getBoatResults(Boat boat);
Boat getBoat(String sailingNumber);
}
@@ -1,29 +0,0 @@
package com.sap.sailing.odf.resultimport;
import com.sap.sailing.domain.common.TimePoint;
/**
* Derived object, providing a view onto the data parsed from the result ZIP
*
* @author Axel Uhl (D043530)
*
*/
public interface RegattaSummary {
TimePoint getTimePointPublished();
String getBoatClassName();
/**
* Returns the races in ascending race number order
*/
Iterable<RaceSummary> getRaces();
RaceSummary getRace(int raceNumberOneBased);
/**
* All {@link Boat} objects that participated in this regatta
*/
Iterable<Boat> getBoats();
String getEventName();
}
@@ -1,5 +0,0 @@
package com.sap.sailing.odf.resultimport;
public interface Result {
}
@@ -1,5 +0,0 @@
package com.sap.sailing.odf.resultimport;
public interface Skipper extends Athlete {
}
@@ -1,61 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import java.util.Map;
import java.util.TreeMap;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class AbstractNodeWrapper {
private final Node node;
public AbstractNodeWrapper(Node node) {
super();
this.node = node;
}
protected Node getNode() {
return node;
}
/**
* Obtains the node's <code>ExtendedResults</code> element and reads the <code>ExtendedResult</code> elements inside
* whose <code>Type</code> attribute equals <code>type</code>. The result is a map whose keys are the
* <code>Code</code> and whose values are iterables containing the one or more <code>Value</code> fields of the
* <code>ExtendedResult</code> elements with the key code. If there is a <code>Pos</code> field set, the iteration
* order will be in incrementing order of the <code>Pos</code> attribute value.
*/
protected Map<String, TreeMap<Integer, String>> getExtendedResults(String type) {
Map<String, TreeMap<Integer, String>> orderedMap = new TreeMap<>();
Element element = (Element) getNode();
NodeList extendedResultsNodes = element.getElementsByTagName("ExtendedResults");
int defaultPos = 0;
for (int i=0; i<extendedResultsNodes.getLength(); i++) {
Node extendedResultsNode = extendedResultsNodes.item(i);
NodeList extendedResults = ((Element) extendedResultsNode).getElementsByTagName("ExtendedResult");
for (int j = 0; j < extendedResults.getLength(); j++) {
Node extendedResult = extendedResults.item(j);
final NamedNodeMap attributes = extendedResult.getAttributes();
final int pos;
Node nodeType = attributes.getNamedItem("Type");
if (nodeType == null || type.equals(nodeType.getNodeValue())) {
if (attributes.getNamedItem("Pos") != null) {
pos = Integer.valueOf(attributes.getNamedItem("Pos").getNodeValue());
} else {
pos = defaultPos++;
}
final String key = attributes.getNamedItem("Code").getNodeValue();
TreeMap<Integer, String> entry = orderedMap.get(key);
if (entry == null) {
entry = new TreeMap<>();
orderedMap.put(key, entry);
}
entry.put(pos, attributes.getNamedItem("Value").getNodeValue());
}
}
}
return orderedMap;
}
}
@@ -1,41 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import java.io.InputStream;
import java.util.logging.Logger;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.odf.resultimport.CumulativeResultDocumentProvider;
import com.sap.sailing.odf.resultimport.ParserFactory;
public class Activator implements BundleActivator {
private static final Logger logger = Logger.getLogger(Activator.class.getName());
private static final String SCAN_DIR_PATH_PROPERTY_NAME = "kiwo.results";
private static final String DEFAULT_SCAN_DIR = "kiworesults";
@Override
public void start(BundleContext context) throws Exception {
String scanDirPath = context.getProperty(SCAN_DIR_PATH_PROPERTY_NAME);
if (scanDirPath == null) {
scanDirPath = System.getProperty(SCAN_DIR_PATH_PROPERTY_NAME, DEFAULT_SCAN_DIR);
}
final ScoreCorrectionProviderImpl service = new ScoreCorrectionProviderImpl(new CumulativeResultDocumentProvider() {
@Override
public Iterable<InputStream> getAllAvailableCumulativeResultDocuments() {
// TODO Auto-generated method stub
return null;
}
}, ParserFactory.INSTANCE);
context.registerService(ScoreCorrectionProvider.class,
service, /* properties */ null);
logger.info("Scanning "+scanDirPath+" for official result lists of "+service.getName());
}
@Override
public void stop(BundleContext context) throws Exception {
}
}
@@ -1,22 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import org.w3c.dom.Node;
import com.sap.sailing.odf.resultimport.Athlete;
public class AthleteImpl extends NamedImpl implements Athlete {
public AthleteImpl(Node node) {
super(node);
}
@Override
public Gender getGender() {
return Gender.valueOf(getExtendedResults("ER_SA").get("SA_GENDER").firstEntry().getValue());
}
@Override
public String toString() {
return getName()+" ("+getGender()+")";
}
}
@@ -1,30 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import java.util.ArrayList;
import java.util.List;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.sap.sailing.odf.resultimport.Competition;
import com.sap.sailing.odf.resultimport.CumulativeResult;
public class CompetitionImpl extends AbstractNodeWrapper implements Competition {
public CompetitionImpl(Node node) {
super(node);
}
@Override
public Iterable<CumulativeResult> getCumulativeResults() {
List<CumulativeResult> result = new ArrayList<>();
Element element = (Element) getNode();
NodeList cumulativeResults = element.getElementsByTagName("CumulativeResult");
for (int i=0; i<cumulativeResults.getLength(); i++) {
result.add(new CumulativeResultImpl(cumulativeResults.item(i)));
}
return result;
}
}
@@ -1,67 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.TreeMap;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import com.sap.sailing.domain.common.CountryCode;
import com.sap.sailing.domain.common.CountryCodeFactory;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.odf.resultimport.Competitor;
import com.sap.sailing.odf.resultimport.CumulativeResult.CompetitorType;
public class CompetitorImpl extends AbstractNodeWrapper implements Competitor {
public CompetitorImpl(Node node) {
super(node);
}
@Override
public CompetitorType getCompetitorType() {
return CompetitorType.valueOf(((Element) getNode()).getAttribute("Type"));
}
@Override
public String getCode() {
return ((Element) getNode()).getAttribute("Code");
}
@Override
public CountryCode getCountryCode() {
return CountryCodeFactory.INSTANCE.getFromThreeLetterIOCName((((Element) getNode()).getAttribute("Bib")));
}
@Override
public Double getPointsInMedalRace() {
final TreeMap<Integer, String> pointsInMedalRace = getExtendedResults("ER_SA").get("SA_POINTS_IN_MEDAL_RACE");
String medalPoints = pointsInMedalRace == null ? null : pointsInMedalRace.firstEntry().getValue();
return medalPoints == null ? null : Double.valueOf(medalPoints);
}
@Override
public Iterable<Triple<Double, Integer, MaxPointsReason>> getPointsAndRanksAndMaxPointsAfterEachRace() {
List<Triple<Double, Integer, MaxPointsReason>> result = new ArrayList<>();
TreeMap<Integer, String> points = getExtendedResults("ER_SA").get("SA_POINTS_IN_RACE");
TreeMap<Integer, String> ranks = getExtendedResults("ER_SA").get("SA_RANK_AFTER_RACE");
TreeMap<Integer, String> irmStatus = getExtendedResults("ER_SA").get("SA_IRM_STATUS_IN_RACE");
Iterator<Entry<Integer, String>> pointsIter = points.entrySet().iterator();
Iterator<Entry<Integer, String>> ranksIter = ranks.entrySet().iterator();
while (pointsIter.hasNext() && ranksIter.hasNext()) {
final Entry<Integer, String> pointsEntry = pointsIter.next();
final Entry<Integer, String> ranksEntry = ranksIter.next();
final String maxPointsReasonAsString = irmStatus == null ? null : irmStatus.get(pointsEntry.getKey());
final MaxPointsReason maxPointsReason = maxPointsReasonAsString == null ? MaxPointsReason.NONE :
MaxPointsReason.valueOf(maxPointsReasonAsString);
result.add(new Triple<Double, Integer, MaxPointsReason>(
Double.valueOf(pointsEntry.getValue()), Integer.valueOf(ranksEntry.getValue()),
maxPointsReason));
}
return result;
}
}
@@ -1,35 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import java.util.ArrayList;
import java.util.List;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.sap.sailing.odf.resultimport.Crew;
import com.sap.sailing.odf.resultimport.Crewmember;
import com.sap.sailing.odf.resultimport.Skipper;
public class CrewImpl extends AbstractNodeWrapper implements Crew {
public CrewImpl(Node node) {
super(node);
}
@Override
public Skipper getSkipper() {
return new SkipperImpl(((Element) getNode()).getElementsByTagName("Skipper").item(0));
}
@Override
public Iterable<Crewmember> getCrewmembers() {
List<Crewmember> result = new ArrayList<Crewmember>();
final NodeList crewmembers = ((Element) getNode()).getElementsByTagName("Crewmember");
for (int i=0; i<crewmembers.getLength(); i++) {
result.add(new CrewmemberImpl(crewmembers.item(i)));
}
return result;
}
}
@@ -1,18 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import org.w3c.dom.Node;
import com.sap.sailing.odf.resultimport.Crewmember;
public class CrewmemberImpl extends AthleteImpl implements Crewmember {
public CrewmemberImpl(Node node) {
super(node);
}
@Override
public String toString() {
return super.toString()+" (Crew)";
}
}
@@ -1,108 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.sap.sailing.domain.common.CountryCode;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.odf.resultimport.Athlete;
import com.sap.sailing.odf.resultimport.Competitor;
import com.sap.sailing.odf.resultimport.CumulativeResult;
import com.sap.sailing.odf.resultimport.Result;
public class CumulativeResultImpl extends AbstractNodeWrapper implements CumulativeResult {
private final Competitor competitor;
public CumulativeResultImpl(Node node) {
super(node);
this.competitor = new CompetitorImpl(((Element) getNode()).getElementsByTagName("Competitor").item(0));
}
@Override
public int getRank() {
return Integer.valueOf(getNode().getAttributes().getNamedItem("Rank").getNodeValue());
}
@Override
public Result getResult() {
final String resultType = getNode().getAttributes().getNamedItem("ResultType").getNodeValue();
if ("POINTS".equals(resultType)) {
return new PointsResultImpl(Double.valueOf(getNode().getAttributes().getNamedItem("Result").getNodeValue()));
} else {
throw new IllegalArgumentException("Don't know yet how to deal with result type "+resultType);
}
}
@Override
public int getSortOrder() {
return Integer.valueOf(getNode().getAttributes().getNamedItem("SortOrder").getNodeValue());
}
@Override
public CompetitorType getCompetitorType() {
return competitor.getCompetitorType();
}
@Override
public String getCompetitorCode() {
return competitor.getCode();
}
@Override
public CountryCode getCountryCode() {
return competitor.getCountryCode();
}
@Override
public Iterable<Triple<Double, Integer, MaxPointsReason>> getPointsAndRanksAfterEachRace() {
return competitor.getPointsAndRanksAndMaxPointsAfterEachRace();
}
@Override
public Double getPointsInMedalRace() {
return competitor.getPointsInMedalRace();
}
@Override
public Iterable<Athlete> getAthletes() {
List<Athlete> result = new ArrayList<>();
Node composition = ((Element) getNode()).getElementsByTagName("Composition").item(0);
NodeList athletes = ((Element) composition).getElementsByTagName("Athlete");
for (int i=0; i<athletes.getLength(); i++) {
final Node athleteNode = athletes.item(i);
AthleteImpl athlete = new AthleteImpl(athleteNode);
if ("Skipper".equals(athlete.getExtendedResults("ER_SA").get("SA_POSITION").firstEntry().getValue())) {
result.add(new SkipperImpl(athleteNode));
} else {
result.add(new CrewmemberImpl(athleteNode));
}
}
return result;
}
@Override
public String toString() {
return "Cumulative Results for competitor "+getCompetitorCode()+" ("+getCountryCode()+") "+getAthletes()+": Rank: "+getRank()+", Result: "+getResult()+", sort order "+getSortOrder()
+", race results: "+getPointsAndRanksAfterEachRace()+", medal race results: "+getPointsInMedalRace();
}
@Override
public Double getTotalPoints() {
TreeMap<Integer, String> totalPoints = getExtendedResults("ER_SA").get("SA_TOTAL_POINTS");
final Double result;
if (totalPoints == null) {
result = null;
} else {
result = Double.valueOf(totalPoints.firstEntry().getValue());
}
return result;
}
}
@@ -1,22 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import org.w3c.dom.Node;
import com.sap.sailing.odf.resultimport.Named;
public class NamedImpl extends AbstractNodeWrapper implements Named {
public NamedImpl(Node node) {
super(node);
}
@Override
public String getName() {
return getExtendedResults("ER_SA").get("SA_NAME").firstEntry().getValue();
}
@Override
public String toString() {
return getName();
}
}
@@ -1,222 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.RegattaScoreCorrections;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.odf.resultimport.Athlete;
import com.sap.sailing.odf.resultimport.Competition;
import com.sap.sailing.odf.resultimport.CumulativeResult;
import com.sap.sailing.odf.resultimport.OdfBody;
public class OdfBodyAsScoreCorrections implements RegattaScoreCorrections {
private final OdfBody body;
private final ScoreCorrectionProvider provider;
public OdfBodyAsScoreCorrections(OdfBody body, ScoreCorrectionProvider provider) {
super();
this.body = body;
this.provider = provider;
}
@Override
public String getRegattaName() {
return body.getEventName()+" ("+body.getBoatClassName()+")";
}
@Override
public ScoreCorrectionProvider getProvider() {
return provider;
}
@Override
public Iterable<ScoreCorrectionsForRace> getScoreCorrectionsForRaces() {
List<ScoreCorrectionsForRace> result = new ArrayList<ScoreCorrectionsForRace>();
for (Competition competition : body.getCompetitions()) {
// find out the number of races, including a medal race
int maxNumberOfRegularRaces = 0;
int numberOfMedalRaces = 0;
for (CumulativeResult cumulativeResult : competition.getCumulativeResults()) {
final int numberOfRegularRaces = Util.size(cumulativeResult.getPointsAndRanksAfterEachRace());
maxNumberOfRegularRaces = Math.max(maxNumberOfRegularRaces, numberOfRegularRaces);
if (cumulativeResult.getPointsInMedalRace() != null) {
numberOfMedalRaces = 1;
}
}
for (int i=0; i<maxNumberOfRegularRaces; i++) {
result.add(new ScoreCorrectionForRegularRace(competition, i));
}
for (int i=0; i<numberOfMedalRaces; i++) {
result.add(new ScoreCorrectionForMedalRace(competition, i));
}
}
return result;
}
private class ScoreCorrectionForRegularRace implements ScoreCorrectionsForRace {
private final Competition competition;
private final int raceNumberStartingWithZero;
public ScoreCorrectionForRegularRace(Competition competition, int raceNumberStartingWithZero) {
this.competition= competition;
this.raceNumberStartingWithZero = raceNumberStartingWithZero;
}
@Override
public String getRaceNameOrNumber() {
return "R"+(raceNumberStartingWithZero+1);
}
@Override
public Set<String> getSailIDs() {
Set<String> result = new HashSet<>();
for (CumulativeResult cumulativeResult : competition.getCumulativeResults()) {
result.add(cumulativeResult.getCompetitorCode());
}
return result;
}
@Override
public ScoreCorrectionForCompetitorInRace getScoreCorrectionForCompetitor(String sailID) {
ScoreCorrectionForCompetitorInRace result = null;
for (CumulativeResult cumulativeResult : competition.getCumulativeResults()) {
if (sailID.equals(cumulativeResult.getCompetitorCode())) {
result = new RegularRaceFromCumulativeResultAsScoreCorrectionForCompetitorInRace(
raceNumberStartingWithZero, cumulativeResult, sailID);
}
}
return result;
}
}
private class ScoreCorrectionForMedalRace implements ScoreCorrectionsForRace {
private final Competition competition;
private final int medalRaceNumberStartingWithZero;
public ScoreCorrectionForMedalRace(Competition competition, int medalRaceNumberStartingWithZero) {
this.competition = competition;
this.medalRaceNumberStartingWithZero = medalRaceNumberStartingWithZero;
}
@Override
public String getRaceNameOrNumber() {
return "M"+(medalRaceNumberStartingWithZero+1);
}
@Override
public Set<String> getSailIDs() {
Set<String> result = new HashSet<>();
for (CumulativeResult cumulativeResult : competition.getCumulativeResults()) {
if (cumulativeResult.getPointsInMedalRace() != null) {
result.add(cumulativeResult.getCompetitorCode());
}
}
return result;
}
@Override
public ScoreCorrectionForCompetitorInRace getScoreCorrectionForCompetitor(String sailID) {
ScoreCorrectionForCompetitorInRace result = null;
for (CumulativeResult cumulativeResult : competition.getCumulativeResults()) {
if (sailID.equals(cumulativeResult.getCompetitorCode())) {
result = new MedalRaceFromCumulativeResultAsScoreCorrectionForCompetitorInRace(
medalRaceNumberStartingWithZero, cumulativeResult, sailID);
}
}
return result;
}
}
private abstract class RaceFromCumulativeResultAsScoreCorrectionForCompetitorInRace implements ScoreCorrectionForCompetitorInRace {
private final int raceNumberStartingFromZero;
private final CumulativeResult cumulativeResult;
private final String competitorCode;
public RaceFromCumulativeResultAsScoreCorrectionForCompetitorInRace(int raceNumberStartingFromZero,
CumulativeResult cumulativeResult, String competitorCode) {
this.raceNumberStartingFromZero = raceNumberStartingFromZero;
this.cumulativeResult = cumulativeResult;
this.competitorCode = competitorCode;
}
protected CumulativeResult getCumulativeResult() {
return cumulativeResult;
}
@Override
public String getSailID() {
return competitorCode;
}
@Override
public String getCompetitorName() {
StringBuilder result = new StringBuilder();
for (Iterator<Athlete> i=getCumulativeResult().getAthletes().iterator(); i.hasNext(); ) {
Athlete athlete = i.next();
result.append(athlete.getName());
if (i.hasNext()) {
result.append(" + ");
}
}
return result.toString();
}
protected int getRaceNumberStartingFromZero() {
return raceNumberStartingFromZero;
}
}
private class RegularRaceFromCumulativeResultAsScoreCorrectionForCompetitorInRace extends RaceFromCumulativeResultAsScoreCorrectionForCompetitorInRace {
public RegularRaceFromCumulativeResultAsScoreCorrectionForCompetitorInRace(int raceNumberStartingFromZero,
CumulativeResult cumulativeResult, String competitorCode) {
super(raceNumberStartingFromZero, cumulativeResult, competitorCode);
}
@Override
public Double getPoints() {
return Util.get(getCumulativeResult().getPointsAndRanksAfterEachRace(), getRaceNumberStartingFromZero()).getA();
}
@Override
public MaxPointsReason getMaxPointsReason() {
return Util.get(getCumulativeResult().getPointsAndRanksAfterEachRace(), getRaceNumberStartingFromZero()).getC();
}
@Override
public Boolean isDiscarded() {
// we don't know from the format; if there are two discards, it's a bad puzzle to solve; let the leaderboard do it
return null;
}
}
private class MedalRaceFromCumulativeResultAsScoreCorrectionForCompetitorInRace extends RaceFromCumulativeResultAsScoreCorrectionForCompetitorInRace {
public MedalRaceFromCumulativeResultAsScoreCorrectionForCompetitorInRace(int raceNumberStartingFromZero,
CumulativeResult cumulativeResult, String competitorCode) {
super(raceNumberStartingFromZero, cumulativeResult, competitorCode);
}
@Override
public Double getPoints() {
return getCumulativeResult().getPointsInMedalRace();
}
@Override
public MaxPointsReason getMaxPointsReason() {
return MaxPointsReason.NONE;
}
/**
* We assume that a medal race cannot be discarded
*/
@Override
public Boolean isDiscarded() {
return false;
}
}
}
@@ -1,97 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
import com.sap.sailing.odf.resultimport.Competition;
import com.sap.sailing.odf.resultimport.OdfBody;
public class OdfBodyImpl extends AbstractNodeWrapper implements OdfBody {
private static final Logger logger = Logger.getLogger(OdfBodyImpl.class.getName());
private final DomainFactory swissTimingDomainFactory;
private static final DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
public OdfBodyImpl(Node node, DomainFactory swissTimingDomainFactory) {
super(node);
this.swissTimingDomainFactory = swissTimingDomainFactory;
}
@Override
public Iterable<Competition> getCompetitions() {
List<Competition> result = new ArrayList<>();
Element element = (Element) getNode();
NodeList cumulativeResults = element.getElementsByTagName("Competition");
for (int i=0; i<cumulativeResults.getLength(); i++) {
result.add(new CompetitionImpl(cumulativeResults.item(i)));
}
return result;
}
@Override
public String getDocumentSubtype() {
return getNode().getAttributes().getNamedItem("DocumentSubtype").getNodeValue();
}
@Override
public String getResultStatus() {
return getNode().getAttributes().getNamedItem("ResultStatus").getNodeValue();
}
@Override
public String getVersion() {
return getNode().getAttributes().getNamedItem("Version").getNodeValue();
}
@Override
public String getFeedFlag() {
return getNode().getAttributes().getNamedItem("FeedFlag").getNodeValue();
}
@Override
public TimePoint getTimePoint() {
TimePoint result;
String timeString = getNode().getAttributes().getNamedItem("Time").getNodeValue();
String dateString = getNode().getAttributes().getNamedItem("Date").getNodeValue();
try {
result = new MillisecondsTimePoint(dateFormat.parse(dateString+timeString));
} catch (ParseException e) {
logger.throwing(OdfBodyImpl.class.getName(), "getTimePoint", e);
result = null;
}
return result;
}
@Override
public String getVenue() {
return getNode().getAttributes().getNamedItem("Venue").getNodeValue();
}
@Override
public String getEventName() {
return getDocumentSubtype()+"@"+getVenue();
}
@Override
public String getBoatClassName() {
return swissTimingDomainFactory.getOrCreateBoatClassFromRaceID(getDocumentSubtype()).getName();
}
@Override
public String toString() {
return "OdfBody for event "+getEventName()+", result status "+getResultStatus()+
"@"+getTimePoint()+", version "+getVersion()+" for boat class "+getBoatClassName()+
". Competitions: "+getCompetitions();
}
}
@@ -1,35 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
import com.sap.sailing.odf.resultimport.OdfBodyParser;
import com.sap.sailing.odf.resultimport.OdfBody;
public class OdfBodyParserImpl implements OdfBodyParser {
private final DomainFactory swissTimingDomainFactory;
public OdfBodyParserImpl(DomainFactory swissTimingDomainFactory) {
this.swissTimingDomainFactory = swissTimingDomainFactory;
}
private Document parseDocument(InputStream inputStream) throws SAXException, IOException, ParserConfigurationException {
return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(inputStream);
}
@Override
public OdfBody parse(InputStream inputStream, String sourceName) throws SAXException, IOException, ParserConfigurationException {
Document doc = parseDocument(inputStream);
OdfBody result = new OdfBodyImpl(doc.getElementsByTagName("OdfBody").item(0), swissTimingDomainFactory);
return result;
}
}
@@ -1,19 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import com.sap.sailing.domain.swisstimingadapter.DomainFactory;
import com.sap.sailing.odf.resultimport.OdfBodyParser;
import com.sap.sailing.odf.resultimport.ParserFactory;
public class ParserFactoryImpl implements ParserFactory {
private final DomainFactory swissTimingDomainFactory;
public ParserFactoryImpl(DomainFactory swissTimingDomainFactory) {
super();
this.swissTimingDomainFactory = swissTimingDomainFactory;
}
@Override
public OdfBodyParser createOdfBodyParser() {
return new OdfBodyParserImpl(swissTimingDomainFactory);
}
}
@@ -1,52 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import com.sap.sailing.odf.resultimport.PointsResult;
/**
* A point result is a net result, after applying discards. Two points results are euqal if their points are equal.
*
* @author Axel Uhl (D043530)
*
*/
public class PointsResultImpl implements PointsResult {
private final double points;
public PointsResultImpl(double points) {
super();
this.points = points;
}
@Override
public double getPoints() {
return points;
}
@Override
public String toString() {
return ""+getPoints()+" points";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
long temp;
temp = Double.doubleToLongBits(points);
result = prime * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
PointsResultImpl other = (PointsResultImpl) obj;
if (Double.doubleToLongBits(points) != Double.doubleToLongBits(other.points))
return false;
return true;
}
}
@@ -1,58 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import java.util.HashMap;
import java.util.Map;
import com.sap.sailing.odf.resultimport.Boat;
import com.sap.sailing.odf.resultimport.BoatResultInRace;
import com.sap.sailing.odf.resultimport.RaceSummary;
public class RaceSummaryImpl implements RaceSummary {
private final String boatClassName;
private final Map<Boat, BoatResultInRace> boatResults;
private final Map<String, Boat> sailingNumberToBoat;
private final Iterable<String> fleetNames;
private final int raceNumber;
public RaceSummaryImpl(String boatClassName, Map<Boat, BoatResultInRace> boatResults, Iterable<String> fleetNames, int raceNumber) {
super();
this.boatClassName = boatClassName;
this.boatResults = boatResults;
this.raceNumber = raceNumber;
this.fleetNames = fleetNames;
this.sailingNumberToBoat = new HashMap<String, Boat>();
for (Boat boat : boatResults.keySet()) {
sailingNumberToBoat.put(boat.getSailingNumber(), boat);
}
}
@Override
public String getBoatClassName() {
return boatClassName;
}
@Override
public int getRaceNumber() {
return raceNumber;
}
@Override
public Iterable<Boat> getBoats() {
return boatResults.keySet();
}
@Override
public BoatResultInRace getBoatResults(Boat boat) {
return boatResults.get(boat);
}
@Override
public Boat getBoat(String sailingNumber) {
return sailingNumberToBoat.get(sailingNumber);
}
@Override
public Iterable<String> getFleetNames() {
return fleetNames;
}
}
@@ -1,75 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.odf.resultimport.Boat;
import com.sap.sailing.odf.resultimport.RaceSummary;
import com.sap.sailing.odf.resultimport.RegattaSummary;
public class RegattaSummaryImpl implements RegattaSummary {
private final Iterable<RaceSummary> races;
private final String boatClassName;
private final Iterable<Boat> boats;
private final TimePoint timePointPublished;
private final String event;
public RegattaSummaryImpl(String event, Iterable<RaceSummary> races, String boatClassName, Iterable<Boat> boats,
TimePoint timePointPublished) {
super();
this.event = event;
this.races = races;
this.boatClassName = boatClassName;
this.boats = boats;
this.timePointPublished = timePointPublished;
}
@Override
public TimePoint getTimePointPublished() {
return timePointPublished;
}
@Override
public String getBoatClassName() {
return boatClassName;
}
@Override
public Iterable<RaceSummary> getRaces() {
List<RaceSummary> result = new ArrayList<RaceSummary>();
for (RaceSummary race : races) {
result.add(race);
}
Collections.sort(result, new Comparator<RaceSummary>() {
@Override
public int compare(RaceSummary o1, RaceSummary o2) {
return o1.getRaceNumber() - o2.getRaceNumber();
}
});
return result;
}
@Override
public RaceSummary getRace(int raceNumberOneBased) {
for (RaceSummary race : getRaces()) {
if (race.getRaceNumber() == raceNumberOneBased) {
return race;
}
}
return null;
}
@Override
public Iterable<Boat> getBoats() {
return boats;
}
@Override
public String getEventName() {
return event;
}
}
@@ -1,86 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import com.sap.sailing.domain.common.RegattaScoreCorrections;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.odf.resultimport.CumulativeResultDocumentProvider;
import com.sap.sailing.odf.resultimport.OdfBody;
import com.sap.sailing.odf.resultimport.OdfBodyParser;
import com.sap.sailing.odf.resultimport.ParserFactory;
public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider {
private static final long serialVersionUID = -4596215011753860781L;
private static final String name = "SwissTiming On Venue Result System";
/**
* The directory that will be scanned for <code>.zip</code> files which will then be passed to
* {@link ZipFileParser} for analysis.
*/
private final CumulativeResultDocumentProvider documentProvider;
private final ParserFactory parserFactory;
public ScoreCorrectionProviderImpl(CumulativeResultDocumentProvider documentProvider, ParserFactory parserFactory) {
this.documentProvider = documentProvider;
this.parserFactory = parserFactory;
}
@Override
public String getName() {
return name;
}
@Override
public Map<String, Set<Pair<String, TimePoint>>> getHasResultsForBoatClassFromDateByEventName()
throws IOException, SAXException, ParserConfigurationException {
Map<String, Set<Pair<String, TimePoint>>> result = new HashMap<String, Set<Pair<String, TimePoint>>>();
for (OdfBody body : getAllOdfBodies()) {
String boatClassName = body.getBoatClassName();
Set<Pair<String, TimePoint>> set = result.get(boatClassName);
if (set == null) {
set = new HashSet<>();
result.put(boatClassName, set);
}
set.add(new Pair<String, TimePoint>(body.getEventName(), body.getTimePoint()));
}
return result;
}
@Override
public RegattaScoreCorrections getScoreCorrections(String eventName, String boatClassName,
TimePoint timePointPublished) throws IOException, SAXException, ParserConfigurationException {
for (OdfBody body : getAllOdfBodies()) {
if (body.getEventName().equals(eventName) && body.getBoatClassName().equals(boatClassName) &&
body.getTimePoint().equals(timePointPublished)) {
return new OdfBodyAsScoreCorrections(body, this);
}
}
return null;
}
private Iterable<OdfBody> getAllOdfBodies() throws SAXException, IOException, ParserConfigurationException {
List<OdfBody> result = new ArrayList<>();
for (InputStream is : documentProvider.getAllAvailableCumulativeResultDocuments()) {
OdfBodyParser parser = parserFactory.createOdfBodyParser();
OdfBody body = parser.parse(is, getName());
result.add(body);
}
return result;
}
}
@@ -1,16 +0,0 @@
package com.sap.sailing.odf.resultimport.impl;
import org.w3c.dom.Node;
import com.sap.sailing.odf.resultimport.Skipper;
public class SkipperImpl extends AthleteImpl implements Skipper {
public SkipperImpl(Node node) {
super(node);
}
@Override
public String toString() {
return super.toString()+" (Skipper)";
}
}
@@ -10,3 +10,4 @@ Export-Package: com.sap.sailing.resultimport,
com.sap.sailing.resultimport.impl
Import-Package: com.sap.sailing.domain.common,
com.sap.sailing.domain.common.impl
Require-Bundle: org.eclipse.osgi;bundle-version="3.7.1"
@@ -1,10 +1,10 @@
package com.sap.sailing.xrr.resultimport;
import java.io.FileNotFoundException;
import java.io.InputStream;
import com.sap.sailing.domain.common.impl.Util.Pair;
public interface XRRDocumentProvider {
Iterable<Pair<InputStream, String>> getDocumentsAndNames() throws FileNotFoundException;
}
package com.sap.sailing.resultimport;
import java.io.FileNotFoundException;
import java.io.InputStream;
import com.sap.sailing.domain.common.impl.Util.Pair;
public interface ResultDocumentProvider {
Iterable<Pair<InputStream, String>> getDocumentsAndNames() throws FileNotFoundException;
}
@@ -0,0 +1,31 @@
package com.sap.sailing.resultimport.impl;
import java.io.File;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.resultimport.ResultDocumentProvider;
public abstract class AbstractFileBasedScoreCorrectionProvider implements ScoreCorrectionProvider {
private static final long serialVersionUID = -4596215011753860781L;
private final ResultDocumentProvider resultDocumentProvider;
public AbstractFileBasedScoreCorrectionProvider(File scanDir) {
super();
if (!scanDir.exists()) {
scanDir.mkdirs();
}
if (!scanDir.isDirectory()) {
throw new IllegalArgumentException("scanDir " + scanDir + " must be a directory");
}
this.resultDocumentProvider = new FileBasedResultDocumentProvider(scanDir);
}
public AbstractFileBasedScoreCorrectionProvider(ResultDocumentProvider resultDocumentProvider) {
this.resultDocumentProvider = resultDocumentProvider;
}
protected ResultDocumentProvider getResultDocumentProvider() {
return resultDocumentProvider;
}
}
@@ -0,0 +1,40 @@
package com.sap.sailing.resultimport.impl;
import java.io.File;
import java.util.logging.Logger;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
public abstract class AbstractFileBasedScoreCorrectionProviderActivator implements BundleActivator {
private static final Logger logger = Logger.getLogger(AbstractFileBasedScoreCorrectionProviderActivator.class.getName());
private final String scanDirPathPropertyName;
private final String defaultScanDir;
protected abstract ScoreCorrectionProvider create(File scanDir);
public AbstractFileBasedScoreCorrectionProviderActivator(String scanDirPathPropertyName, String defaultScanDir) {
super();
this.scanDirPathPropertyName = scanDirPathPropertyName;
this.defaultScanDir = defaultScanDir;
}
@Override
public void start(BundleContext context) throws Exception {
String scanDirPath = context.getProperty(scanDirPathPropertyName);
if (scanDirPath == null) {
scanDirPath = System.getProperty(scanDirPathPropertyName, defaultScanDir);
}
final ScoreCorrectionProvider service = create(new File(scanDirPath));
context.registerService(ScoreCorrectionProvider.class, service, /* properties */ null);
logger.info("Scanning "+scanDirPath+" for official result lists of "+service.getName());
}
@Override
public void stop(BundleContext context) throws Exception {
}
}
@@ -0,0 +1,37 @@
package com.sap.sailing.resultimport.impl;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.resultimport.ResultDocumentProvider;
public class FileBasedResultDocumentProvider implements ResultDocumentProvider {
private static final Logger logger = Logger.getLogger(FileBasedResultDocumentProvider.class.getName());
private final File scanDir;
public FileBasedResultDocumentProvider(File scanDir) {
this.scanDir = scanDir;
}
@Override
public Iterable<Pair<InputStream, String>> getDocumentsAndNames() throws FileNotFoundException {
List<Pair<InputStream, String>> result = new ArrayList<>();
final File[] fileList = scanDir.listFiles();
if (fileList != null) {
for (File file : fileList) {
if (file.isFile()) {
logger.fine("adding " + file + " to result import list");
result.add(new Pair<InputStream, String>(new FileInputStream(file), file.toString()));
}
}
}
return result;
}
}
@@ -33,8 +33,8 @@ import com.sap.sailing.domain.common.RegattaScoreCorrections.ScoreCorrectionsFor
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.resultimport.ResultDocumentProvider;
import com.sap.sailing.xrr.resultimport.ParserFactory;
import com.sap.sailing.xrr.resultimport.XRRDocumentProvider;
import com.sap.sailing.xrr.resultimport.impl.ScoreCorrectionProviderImpl;
import com.sap.sailing.xrr.resultimport.schema.RegattaResults;
@@ -53,8 +53,8 @@ public class ParserTest {
return new File(RESOURCES + filename);
}
private XRRDocumentProvider getTestDocumentProvider() {
return new XRRDocumentProvider() {
private ResultDocumentProvider getTestDocumentProvider() {
return new ResultDocumentProvider() {
@Override
public Iterable<Pair<InputStream, String>> getDocumentsAndNames() throws FileNotFoundException {
try {
@@ -10,5 +10,6 @@ Export-Package: com.sap.sailing.xrr.resultimport,
com.sap.sailing.xrr.resultimport.schema
Import-Package: org.osgi.framework;version="1.6.0"
Require-Bundle: com.sap.sailing.domain,
com.sap.sailing.domain.common
com.sap.sailing.domain.common,
com.sap.sailing.resultimport
Bundle-Activator: com.sap.sailing.xrr.resultimport.impl.Activator
@@ -1,20 +1,14 @@
package com.sap.sailing.xrr.resultimport.impl;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.resultimport.impl.FileBasedResultDocumentProvider;
import com.sap.sailing.xrr.resultimport.ParserFactory;
import com.sap.sailing.xrr.resultimport.XRRDocumentProvider;
public class Activator implements BundleActivator {
private static final Logger logger = Logger.getLogger(Activator.class.getName());
@@ -30,22 +24,9 @@ public class Activator implements BundleActivator {
} else {
scanDirPath = context.getProperty(SCAN_DIR_PATH_PROPERTY_NAME);
}
final ScoreCorrectionProviderImpl service = new ScoreCorrectionProviderImpl(new XRRDocumentProvider() {
@Override
public Iterable<Pair<InputStream, String>> getDocumentsAndNames() throws FileNotFoundException {
List<Pair<InputStream, String>> result = new ArrayList<>();
final File[] fileList = new File(scanDirPath).listFiles();
if (fileList != null) {
for (File file : fileList) {
if (file.isFile()) {
logger.fine("adding " + file + " to XRR import list");
result.add(new Pair<InputStream, String>(new FileInputStream(file), file.toString()));
}
}
}
return result;
}
}, ParserFactory.INSTANCE);
final ScoreCorrectionProviderImpl service = new ScoreCorrectionProviderImpl(new FileBasedResultDocumentProvider(
new File(scanDirPath)),
ParserFactory.INSTANCE);
context.registerService(ScoreCorrectionProvider.class,
service, /* properties */ null);
logger.info("Scanning "+scanDirPath+" for official XRR result lists of "+service.getName());
@@ -18,32 +18,26 @@ import org.xml.sax.SAXException;
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.common.RegattaScoreCorrections;
import com.sap.sailing.domain.common.ScoreCorrectionProvider;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.resultimport.ResultDocumentProvider;
import com.sap.sailing.resultimport.impl.AbstractFileBasedScoreCorrectionProvider;
import com.sap.sailing.xrr.resultimport.Parser;
import com.sap.sailing.xrr.resultimport.ParserFactory;
import com.sap.sailing.xrr.resultimport.XRRDocumentProvider;
import com.sap.sailing.xrr.resultimport.schema.Division;
import com.sap.sailing.xrr.resultimport.schema.Event;
import com.sap.sailing.xrr.resultimport.schema.RegattaResults;
public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider {
public class ScoreCorrectionProviderImpl extends AbstractFileBasedScoreCorrectionProvider {
private static final Logger logger = Logger.getLogger(ScoreCorrectionProviderImpl.class.getName());
private static final long serialVersionUID = -4596215011753860781L;
private static final String name = "ISAF XML Regatta Result (XRR) Importer";
/**
* The directory that will be scanned for <code>.zip</code> files which will then be passed to
* {@link ZipFileParser} for analysis.
*/
private final XRRDocumentProvider documentProvider;
private final ParserFactory parserFactory;
public ScoreCorrectionProviderImpl(XRRDocumentProvider documentProvider, ParserFactory parserFactory) {
this.documentProvider = documentProvider;
public ScoreCorrectionProviderImpl(ResultDocumentProvider documentProvider, ParserFactory parserFactory) {
super(documentProvider);
this.parserFactory = parserFactory;
}
@@ -134,7 +128,7 @@ public class ScoreCorrectionProviderImpl implements ScoreCorrectionProvider {
private Iterable<Parser> getAllRegattaResults() throws SAXException, IOException,
ParserConfigurationException {
List<Parser> result = new ArrayList<>();
for (Pair<InputStream, String> is : documentProvider.getDocumentsAndNames()) {
for (Pair<InputStream, String> is : getResultDocumentProvider().getDocumentsAndNames()) {
Parser parser = parserFactory.createParser(is.getA(), is.getB());
result.add(parser);
}