From 58bac5939d0b9545c2b0ac447194eb5895f33e99 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Fri, 8 Jun 2012 23:01:18 +0200 Subject: [PATCH 1/3] simplifications of Kieler Woche result model; working towards alignment with our Leaderboard structures --- .../kiworesultimport/test/ParserTest.java | 36 +++++---- .../kiworesultimport/test/ZipStreamTest.java | 14 ++++ .../sap/sailing/kiworesultimport/Boat.java | 10 ++- .../kiworesultimport/ParserFactory.java | 2 +- .../sap/sailing/kiworesultimport/Race.java | 2 +- .../sailing/kiworesultimport/RaceSummary.java | 23 ++++++ .../sap/sailing/kiworesultimport/Races.java | 7 -- .../kiworesultimport/RegattaSummary.java | 20 +++++ .../sailing/kiworesultimport/ResultList.java | 2 + .../kiworesultimport/ResultListParser.java | 2 +- .../sap/sailing/kiworesultimport/Start.java | 12 +-- .../sailing/kiworesultimport/StartReport.java | 23 ++++++ .../kiworesultimport/StartReportParser.java | 12 +++ .../kiworesultimport/Startbericht.java | 21 ----- .../kiworesultimport/StartberichtParser.java | 7 -- .../sap/sailing/kiworesultimport/ZipFile.java | 2 +- .../kiworesultimport/ZipFileParser.java | 7 +- .../kiworesultimport/impl/BoatImpl.java | 35 +++++++-- .../impl/ParserFactoryImpl.java | 8 +- .../kiworesultimport/impl/RaceImpl.java | 2 +- .../kiworesultimport/impl/RacesImpl.java | 34 -------- .../kiworesultimport/impl/ResultListImpl.java | 10 ++- .../impl/ResultListParserImpl.java | 4 +- .../kiworesultimport/impl/StartImpl.java | 34 ++++---- .../impl/StartReportImpl.java | 78 +++++++++++++++++++ .../impl/StartReportParserImpl.java | 28 +++++++ .../impl/StartberichtImpl.java | 66 ---------------- .../impl/StartberichtParserImpl.java | 16 ---- .../kiworesultimport/impl/ZipFileImpl.java | 36 ++++----- .../impl/ZipFileParserImpl.java | 51 +++++++++++- 30 files changed, 371 insertions(+), 233 deletions(-) create mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RaceSummary.java delete mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Races.java create mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RegattaSummary.java create mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/StartReport.java create mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/StartReportParser.java delete mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Startbericht.java delete mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/StartberichtParser.java delete mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/RacesImpl.java create mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/StartReportImpl.java create mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/StartReportParserImpl.java delete mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/StartberichtImpl.java delete mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/StartberichtParserImpl.java diff --git a/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ParserTest.java b/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ParserTest.java index b118d69fcbd..b2b5561c30d 100755 --- a/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ParserTest.java +++ b/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ParserTest.java @@ -29,12 +29,12 @@ import com.sap.sailing.kiworesultimport.Boat; import com.sap.sailing.kiworesultimport.Crewmember; import com.sap.sailing.kiworesultimport.ParserFactory; import com.sap.sailing.kiworesultimport.Race; -import com.sap.sailing.kiworesultimport.Races; import com.sap.sailing.kiworesultimport.ResultList; import com.sap.sailing.kiworesultimport.ResultListParser; import com.sap.sailing.kiworesultimport.Skipper; public class ParserTest { + private static final String SAMPLE_INPUT_NAME = "2011-06-18_49er_Wettfahrt_2_Extra.xml"; private static final String RESOURCES = "resources/"; private InputStream getInputStream(String filename) throws FileNotFoundException, IOException { @@ -55,13 +55,13 @@ public class ParserTest { } private InputStream getSampleInputStream() throws FileNotFoundException, IOException { - return getInputStream("2011-06-18_49er_Wettfahrt_2_Extra.xml"); + return getInputStream(SAMPLE_INPUT_NAME); } @Test public void testEmptyIsafID() throws FileNotFoundException, SAXException, IOException, ParserConfigurationException { ResultListParser parser = ParserFactory.INSTANCE.createResultListParser(); - ResultList resultList = parser.parse(getSampleInputStream()); + ResultList resultList = parser.parse(getSampleInputStream(), SAMPLE_INPUT_NAME); assertNotNull(resultList); assertNull(resultList.getBoatBySailID("SWE 1196").getCrew().getSkipper().getIsaf()); } @@ -69,27 +69,31 @@ public class ParserTest { @Test public void testEmptyStatus() throws FileNotFoundException, SAXException, IOException, ParserConfigurationException { ResultListParser parser = ParserFactory.INSTANCE.createResultListParser(); - ResultList resultList = parser.parse(getSampleInputStream()); + ResultList resultList = parser.parse(getSampleInputStream(), SAMPLE_INPUT_NAME); assertNotNull(resultList); - assertNull(resultList.getBoatBySailID("SWE 1196").getRaces().getRaces().iterator().next().getStatus()); - assertEquals(MaxPointsReason.NONE, resultList.getBoatBySailID("SWE 1196").getRaces().getRaces() + assertNull(resultList.getBoatBySailID("SWE 1196").getRaces().iterator().next().getStatus()); + assertEquals(MaxPointsReason.NONE, resultList.getBoatBySailID("SWE 1196").getRaces() .iterator().next().getMaxPointsReason()); } @Test public void testNonEmptyStatus() throws FileNotFoundException, SAXException, IOException, ParserConfigurationException { ResultListParser parser = ParserFactory.INSTANCE.createResultListParser(); - ResultList resultList = parser.parse(getSampleInputStream()); + ResultList resultList = parser.parse(getSampleInputStream(), SAMPLE_INPUT_NAME); assertNotNull(resultList); - assertEquals("DNC", resultList.getBoatBySailID("GER 1199").getRaces().getRaces().iterator().next().getStatus()); - assertEquals(MaxPointsReason.DNC, resultList.getBoatBySailID("GER 1199").getRaces().getRaces() + final Boat GER1199 = resultList.getBoatBySailID("GER 1199"); + assertEquals("DNC", GER1199.getRaces().iterator().next().getStatus()); + assertEquals(MaxPointsReason.DNC, GER1199.getRaces() .iterator().next().getMaxPointsReason()); + assertEquals(47, (int) GER1199.getRank()); + assertEquals(25.00, GER1199.getRace(1).getPoints(), 0.00000001); + assertEquals(25.00, GER1199.getRace(2).getPoints(), 0.00000001); } @Test public void testObtainingResultList() throws FileNotFoundException, SAXException, IOException, ParserConfigurationException { ResultListParser parser = ParserFactory.INSTANCE.createResultListParser(); - ResultList resultList = parser.parse(getSampleInputStream()); + ResultList resultList = parser.parse(getSampleInputStream(), SAMPLE_INPUT_NAME); assertNotNull(resultList); assertEquals("D:\\Programme\\KWSailing\\eventlogos\\KielerWoche_Ergebnislistenkopf_2011.jpg", resultList.getImagePfad()); assertEquals(new String(new byte[] { (byte) 160 /* non-breaking space */}), resultList.getLegende()); @@ -98,7 +102,7 @@ public class ParserTest { assertEquals(48, Util.size(boats)); Boat DEN9 = resultList.getBoatBySailID("DEN 9"); assertNotNull(DEN9); - assertEquals(7, (int) DEN9.getPosition()); + assertEquals(7, (int) DEN9.getRank()); Skipper DEN9Skipper = DEN9.getCrew().getSkipper(); assertEquals("Norregaard, Allan (1981) Kolding", DEN9Skipper.getName()); assertEquals(new URL("http://www.sailing.org/biog.php?id=DENAN1"), DEN9Skipper.getIsaf()); @@ -106,16 +110,16 @@ public class ParserTest { assertEquals(1, Util.size(DEN9Crewmembers)); Crewmember DEN9Crewmember = DEN9Crewmembers.iterator().next(); assertEquals("Lang, Peter (1989) Kolding Sejlklub", DEN9Crewmember.getName()); - Races DEN9Races = DEN9.getRaces(); + Iterable DEN9Races = DEN9.getRaces(); assertNotNull(DEN9Races); - assertEquals(2, Util.size(DEN9Races.getRaces())); - Iterator i = DEN9Races.getRaces().iterator(); + assertEquals(2, Util.size(DEN9Races)); + Iterator i = DEN9Races.iterator(); Race r1 = i.next(); assertEquals(9.00, r1.getPoints(), 0.0000000001); - assertEquals(1, (int) r1.getNumber()); + assertEquals(1, (int) r1.getRaceNumber()); Race r2 = i.next(); assertEquals(1.00, r2.getPoints(), 0.0000000001); - assertEquals(2, (int) r2.getNumber()); + assertEquals(2, (int) r2.getRaceNumber()); assertEquals(new MillisecondsTimePoint(new GregorianCalendar(2011, 05, 18, 16, 26).getTime()), resultList.getTimePoint()); } } diff --git a/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ZipStreamTest.java b/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ZipStreamTest.java index 56149fc0556..37104afbe39 100755 --- a/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ZipStreamTest.java +++ b/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ZipStreamTest.java @@ -1,13 +1,21 @@ package com.sap.sailing.kiworesultimport.test; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; +import javax.xml.parsers.ParserConfigurationException; + import org.junit.Test; +import org.xml.sax.SAXException; + +import com.sap.sailing.kiworesultimport.ParserFactory; +import com.sap.sailing.kiworesultimport.ZipFile; public class ZipStreamTest { private final static String ZIP_EXAMPLE_FILE = "resources/Kieler_Woche_2011_Export.zip"; @@ -26,4 +34,10 @@ public class ZipStreamTest { zis.close(); assertTrue(foundStartberichteDir); } + + @Test + public void testZipParser() throws FileNotFoundException, IOException, SAXException, ParserConfigurationException { + ZipFile zipFile = ParserFactory.INSTANCE.createZipFileParser().parse(new FileInputStream(ZIP_EXAMPLE_FILE)); + assertNotNull(zipFile); + } } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Boat.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Boat.java index 77a0003c532..6814a44a2dd 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Boat.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Boat.java @@ -3,11 +3,15 @@ package com.sap.sailing.kiworesultimport; public interface Boat extends Named { String getSailingNumber(); - Integer getPosition(); + Integer getRank(); - String getPreis(); + String getPrice(); Crew getCrew(); - Races getRaces(); + Iterable getRaces(); + + Race getRace(int raceNumberOneBased); + + Double getTotalPoints(); } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ParserFactory.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ParserFactory.java index 7ab55729597..a15b8968c6a 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ParserFactory.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ParserFactory.java @@ -7,7 +7,7 @@ public interface ParserFactory { ResultListParser createResultListParser(); - StartberichtParser createStartberichtParser(); + StartReportParser createStartReportParser(); ZipFileParser createZipFileParser(); } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Race.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Race.java index c016e757ea4..76d54522ea8 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Race.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Race.java @@ -7,7 +7,7 @@ public interface Race { Double getPoints(); - Integer getNumber(); + Integer getRaceNumber(); MaxPointsReason getMaxPointsReason(); } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RaceSummary.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RaceSummary.java new file mode 100755 index 00000000000..0a69e2cb3e2 --- /dev/null +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RaceSummary.java @@ -0,0 +1,23 @@ +package com.sap.sailing.kiworesultimport; + +/** + * Derived object, providing a view onto the data parsed from the result ZIP + * + * @author Axel Uhl (D043530) + * + */ +public interface RaceSummary { + String getBoatClassName(); + + Integer getRaceNumber(); + + /** + * The {@link Boat} objects + */ + Iterable getBoats(); + + /** + * Retrieves the {@link Race} data that boat achieved in the race summarized by this object + */ + Race getRace(Boat boat); +} diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Races.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Races.java deleted file mode 100755 index e185c6b2ce1..00000000000 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Races.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.sap.sailing.kiworesultimport; - -public interface Races { - Double getTotalPoints(); - - Iterable getRaces(); -} diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RegattaSummary.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RegattaSummary.java new file mode 100755 index 00000000000..b5ca37caa0c --- /dev/null +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RegattaSummary.java @@ -0,0 +1,20 @@ +package com.sap.sailing.kiworesultimport; + +/** + * Derived object, providing a view onto the data parsed from the result ZIP + * + * @author Axel Uhl (D043530) + * + */ +public interface RegattaSummary { + String getBoatClassName(); + + Iterable getRaces(); + + RaceSummary getRace(int raceNumberOneBased); + + /** + * All {@link Boat} objects that participated in this regatta + */ + Iterable getBoats(); +} diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ResultList.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ResultList.java index 2cc306ceff9..c1a1f8821f2 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ResultList.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ResultList.java @@ -30,4 +30,6 @@ public interface ResultList { * @return null if no such {@link Boat} is found in {@link #getBoats}, or the boat found otherwise. */ Boat getBoatBySailID(String sailID); + + String getSourceName(); } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ResultListParser.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ResultListParser.java index bbd5822e59b..4b3b9f24e0e 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ResultListParser.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ResultListParser.java @@ -8,5 +8,5 @@ import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; public interface ResultListParser { - ResultList parse(InputStream inputStream) throws SAXException, IOException, ParserConfigurationException; + ResultList parse(InputStream inputStream, String sourceName) throws SAXException, IOException, ParserConfigurationException; } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Start.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Start.java index e9fa23cc4c1..6a32cde9e63 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Start.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Start.java @@ -11,17 +11,17 @@ public interface Start { String getFleetName(); - String getKurs(); + String getCourseName(); - String getStartzeit(); + String getStartTimeAsString(); TimePoint getTimePoint() throws ParseException; - String getStartflagge(); + String getStartFlag(); - String getBemerkung(); + String getComment(); - Boolean getDoppelteWertung(); + Boolean isDoubleScore(); - Boolean getStreichbar(); + Boolean isDiscardable(); } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/StartReport.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/StartReport.java new file mode 100755 index 00000000000..a5ae79b5677 --- /dev/null +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/StartReport.java @@ -0,0 +1,23 @@ +package com.sap.sailing.kiworesultimport; + +import java.text.ParseException; + +import com.sap.sailing.domain.common.TimePoint; + +public interface StartReport { + String getDateAsString(); + + TimePoint getTimePoint() throws ParseException; + + String getCourseAreaName(); + + String getStartBearingAsString(); + + String getWindSpeedAsString(); + + String getWindDirectionAsString(); + + Iterable getStarts(); + + String getSourceName(); +} diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/StartReportParser.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/StartReportParser.java new file mode 100755 index 00000000000..44cb0fb00da --- /dev/null +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/StartReportParser.java @@ -0,0 +1,12 @@ +package com.sap.sailing.kiworesultimport; + +import java.io.IOException; +import java.io.InputStream; + +import javax.xml.parsers.ParserConfigurationException; + +import org.xml.sax.SAXException; + +public interface StartReportParser { + StartReport parse(InputStream inputStream, String sourceName) throws SAXException, IOException, ParserConfigurationException; +} diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Startbericht.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Startbericht.java deleted file mode 100755 index 5af7e07b701..00000000000 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Startbericht.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.sap.sailing.kiworesultimport; - -import java.text.ParseException; - -import com.sap.sailing.domain.common.TimePoint; - -public interface Startbericht { - String getDatum(); - - TimePoint getTimePoint() throws ParseException; - - String getRegattabahn(); - - String getKompasskurs(); - - String getWindstaerke(); - - String getWindrichtung(); - - Iterable getStarts(); -} diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/StartberichtParser.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/StartberichtParser.java deleted file mode 100755 index 8261c5ce67f..00000000000 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/StartberichtParser.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.sap.sailing.kiworesultimport; - -import java.io.InputStream; - -public interface StartberichtParser { - Startbericht parse(InputStream inputStream); -} diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ZipFile.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ZipFile.java index 27da93f9e0d..4a3777f0d6e 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ZipFile.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ZipFile.java @@ -1,7 +1,7 @@ package com.sap.sailing.kiworesultimport; public interface ZipFile { - Iterable getStartberichte(); + Iterable getStartReports(); Iterable getResultLists(); } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ZipFileParser.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ZipFileParser.java index 95410e98162..a0b08d3b8d9 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ZipFileParser.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ZipFileParser.java @@ -1,7 +1,12 @@ package com.sap.sailing.kiworesultimport; +import java.io.IOException; import java.io.InputStream; +import javax.xml.parsers.ParserConfigurationException; + +import org.xml.sax.SAXException; + public interface ZipFileParser { - ZipFile parse(InputStream inputStream); + ZipFile parse(InputStream inputStream) throws IOException, SAXException, ParserConfigurationException; } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/BoatImpl.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/BoatImpl.java index a9d40135fdf..6b6332f049b 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/BoatImpl.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/BoatImpl.java @@ -1,12 +1,15 @@ package com.sap.sailing.kiworesultimport.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.kiworesultimport.Boat; import com.sap.sailing.kiworesultimport.Crew; -import com.sap.sailing.kiworesultimport.Races; +import com.sap.sailing.kiworesultimport.Race; public class BoatImpl extends NamedImpl implements Boat { @@ -20,12 +23,12 @@ public class BoatImpl extends NamedImpl implements Boat { } @Override - public Integer getPosition() { + public Integer getRank() { return Integer.valueOf(getNode().getAttributes().getNamedItem("position").getNodeValue()); } @Override - public String getPreis() { + public String getPrice() { return getNode().getAttributes().getNamedItem("preis").getNodeValue(); } @@ -34,11 +37,31 @@ public class BoatImpl extends NamedImpl implements Boat { final NodeList crew = ((Element) getNode()).getElementsByTagName("Crew"); return new CrewImpl(crew.item(0)); } + + @Override + public Double getTotalPoints() { + return Double.valueOf(((Element) getNode()).getElementsByTagName("Races").item(0).getAttributes() + .getNamedItem("totalpoints").getNodeValue().replace(',', '.')); + } @Override - public Races getRaces() { - final NodeList races = ((Element) getNode()).getElementsByTagName("Races"); - return new RacesImpl(races.item(0)); + public Iterable getRaces() { + List result = new ArrayList(); + final NodeList races = ((Element) ((Element) getNode()).getElementsByTagName("Races").item(0)).getElementsByTagName("Race"); + for (int i=0; i getRaces() { - List result = new ArrayList(); - final NodeList races = ((Element) getNode()).getElementsByTagName("Race"); - for (int i=0; i getStarts() { + List result = new ArrayList(); + final NodeList starts = ((Element) getNode()).getElementsByTagName("start"); + for (int i=0; i getStarts() { - List result = new ArrayList(); - final NodeList starts = ((Element) getNode()).getElementsByTagName("start"); - for (int i=0; i startberichte; - private final Map, Start> startsByBoatclassAndWettfahrtAndFleet; - private final List resultLists; - private final Map>> fleetsPerBoatClassAndRace; + private final Iterable startReports; + private final Map, Start> startsByBoatclassAndRaceNumberAndFleetName; + private final Iterable resultLists; + private final Map>> fleetsPerBoatClassAndRaceNumber; - public ZipFileImpl(Iterable startberichte, Iterable resultLists) { - this.fleetsPerBoatClassAndRace = new HashMap>>(); - this.startberichte = new ArrayList(); - this.startsByBoatclassAndWettfahrtAndFleet = new HashMap, Start>(); - this.resultLists = new ArrayList(); - for (Startbericht startbericht : startberichte) { - for (Start start : startbericht.getStarts()) { - startsByBoatclassAndWettfahrtAndFleet.put( + public ZipFileImpl(Iterable startReports, Iterable resultLists) { + this.fleetsPerBoatClassAndRaceNumber = new HashMap>>(); + this.startReports = startReports; + this.startsByBoatclassAndRaceNumberAndFleetName = new HashMap, Start>(); + this.resultLists = resultLists; + for (StartReport startReport : startReports) { + for (Start start : startReport.getStarts()) { + startsByBoatclassAndRaceNumberAndFleetName.put( new Triple(start.getBoatClass(), start.getRaceNumber(), start .getFleetName()), start); - Map> fleetsForBoatClass = fleetsPerBoatClassAndRace.get(start.getBoatClass()); + Map> fleetsForBoatClass = fleetsPerBoatClassAndRaceNumber.get(start.getBoatClass()); if (fleetsForBoatClass == null) { fleetsForBoatClass = new HashMap>(); - fleetsPerBoatClassAndRace.put(start.getBoatClass(), fleetsForBoatClass); + fleetsPerBoatClassAndRaceNumber.put(start.getBoatClass(), fleetsForBoatClass); } Set fleetsForTheBoatClassAndRace = fleetsForBoatClass.get(start.getRaceNumber()); if (fleetsForTheBoatClassAndRace == null) { @@ -45,8 +43,8 @@ public class ZipFileImpl implements ZipFile { } @Override - public Iterable getStartberichte() { - return startberichte; + public Iterable getStartReports() { + return startReports; } @Override diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/ZipFileParserImpl.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/ZipFileParserImpl.java index feb4da0b6eb..498c27cb200 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/ZipFileParserImpl.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/ZipFileParserImpl.java @@ -1,16 +1,61 @@ package com.sap.sailing.kiworesultimport.impl; +import java.io.FilterInputStream; +import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import javax.xml.parsers.ParserConfigurationException; + +import org.xml.sax.SAXException; + +import com.sap.sailing.kiworesultimport.ParserFactory; +import com.sap.sailing.kiworesultimport.ResultList; +import com.sap.sailing.kiworesultimport.StartReport; import com.sap.sailing.kiworesultimport.ZipFile; import com.sap.sailing.kiworesultimport.ZipFileParser; public class ZipFileParserImpl implements ZipFileParser { + private final ParserFactory parserFactory; + + public ZipFileParserImpl(ParserFactory parserFactory) { + super(); + this.parserFactory = parserFactory; + } @Override - public ZipFile parse(InputStream inputStream) { - // TODO Auto-generated method stub - return null; + public ZipFile parse(InputStream inputStream) throws IOException, SAXException, ParserConfigurationException { + ZipInputStream zis = new ZipInputStream(inputStream); + List startReports = new ArrayList(); + List resultLists = new ArrayList(); + ZipEntry entry = zis.getNextEntry(); + while (entry != null) { + if (isStartReport(entry)) { + startReports.add(parserFactory.createStartReportParser().parse(getNonClosableInputStream(zis), entry.getName())); + } else if (isResultList(entry)) { + resultLists.add(parserFactory.createResultListParser().parse(getNonClosableInputStream(zis), entry.getName())); + } + entry = zis.getNextEntry(); + } + return new ZipFileImpl(startReports, resultLists); + } + + private InputStream getNonClosableInputStream(ZipInputStream zis) { + return new FilterInputStream(zis) { + @Override + public void close() { } + }; + } + + private boolean isResultList(ZipEntry entry) { + return entry.getName().endsWith("_Extra.xml"); + } + + private boolean isStartReport(ZipEntry entry) { + return entry.getName().startsWith("Startberichte\\"); } } From 3bce3616e0ba4a390599db17d89e48abf0fd9c3a Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sat, 9 Jun 2012 00:23:24 +0200 Subject: [PATCH 2/3] added summary views on top of Kieler Woche b+m result system import --- .../kiworesultimport/test/ParserTest.java | 28 +++++----- .../kiworesultimport/test/ZipStreamTest.java | 6 ++ .../sap/sailing/kiworesultimport/Boat.java | 4 +- .../{Race.java => BoatResultInRace.java} | 4 +- .../sailing/kiworesultimport/RaceSummary.java | 8 ++- .../kiworesultimport/RegattaSummary.java | 4 ++ .../sailing/kiworesultimport/ResultList.java | 10 ++-- .../sap/sailing/kiworesultimport/ZipFile.java | 6 ++ .../kiworesultimport/impl/BoatImpl.java | 16 ++++-- .../impl/BoatResultsInRaceImpl.java | 55 +++++++++++++++++++ .../kiworesultimport/impl/NamedImpl.java | 4 ++ .../kiworesultimport/impl/RaceImpl.java | 41 -------------- .../impl/RaceSummaryImpl.java | 47 ++++++++++++++++ .../impl/RegattaSummaryImpl.java | 52 ++++++++++++++++++ .../kiworesultimport/impl/ResultListImpl.java | 21 +++++-- .../kiworesultimport/impl/ZipFileImpl.java | 53 ++++++++++++++++-- 16 files changed, 280 insertions(+), 79 deletions(-) rename java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/{Race.java => BoatResultInRace.java} (74%) create mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/BoatResultsInRaceImpl.java delete mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/RaceImpl.java create mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/RaceSummaryImpl.java create mode 100755 java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/RegattaSummaryImpl.java diff --git a/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ParserTest.java b/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ParserTest.java index b2b5561c30d..78e21d545b6 100755 --- a/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ParserTest.java +++ b/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ParserTest.java @@ -28,7 +28,7 @@ import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.kiworesultimport.Boat; import com.sap.sailing.kiworesultimport.Crewmember; import com.sap.sailing.kiworesultimport.ParserFactory; -import com.sap.sailing.kiworesultimport.Race; +import com.sap.sailing.kiworesultimport.BoatResultInRace; import com.sap.sailing.kiworesultimport.ResultList; import com.sap.sailing.kiworesultimport.ResultListParser; import com.sap.sailing.kiworesultimport.Skipper; @@ -71,8 +71,8 @@ public class ParserTest { ResultListParser parser = ParserFactory.INSTANCE.createResultListParser(); ResultList resultList = parser.parse(getSampleInputStream(), SAMPLE_INPUT_NAME); assertNotNull(resultList); - assertNull(resultList.getBoatBySailID("SWE 1196").getRaces().iterator().next().getStatus()); - assertEquals(MaxPointsReason.NONE, resultList.getBoatBySailID("SWE 1196").getRaces() + assertNull(resultList.getBoatBySailID("SWE 1196").getResultsInRaces().iterator().next().getStatus()); + assertEquals(MaxPointsReason.NONE, resultList.getBoatBySailID("SWE 1196").getResultsInRaces() .iterator().next().getMaxPointsReason()); } @@ -82,12 +82,12 @@ public class ParserTest { ResultList resultList = parser.parse(getSampleInputStream(), SAMPLE_INPUT_NAME); assertNotNull(resultList); final Boat GER1199 = resultList.getBoatBySailID("GER 1199"); - assertEquals("DNC", GER1199.getRaces().iterator().next().getStatus()); - assertEquals(MaxPointsReason.DNC, GER1199.getRaces() + assertEquals("DNC", GER1199.getResultsInRaces().iterator().next().getStatus()); + assertEquals(MaxPointsReason.DNC, GER1199.getResultsInRaces() .iterator().next().getMaxPointsReason()); assertEquals(47, (int) GER1199.getRank()); - assertEquals(25.00, GER1199.getRace(1).getPoints(), 0.00000001); - assertEquals(25.00, GER1199.getRace(2).getPoints(), 0.00000001); + assertEquals(25.00, GER1199.getResultsInRace(1).getPoints(), 0.00000001); + assertEquals(25.00, GER1199.getResultsInRace(2).getPoints(), 0.00000001); } @Test @@ -95,8 +95,8 @@ public class ParserTest { ResultListParser parser = ParserFactory.INSTANCE.createResultListParser(); ResultList resultList = parser.parse(getSampleInputStream(), SAMPLE_INPUT_NAME); assertNotNull(resultList); - assertEquals("D:\\Programme\\KWSailing\\eventlogos\\KielerWoche_Ergebnislistenkopf_2011.jpg", resultList.getImagePfad()); - assertEquals(new String(new byte[] { (byte) 160 /* non-breaking space */}), resultList.getLegende()); + assertEquals("D:\\Programme\\KWSailing\\eventlogos\\KielerWoche_Ergebnislistenkopf_2011.jpg", resultList.getImagePath()); + assertEquals(new String(new byte[] { (byte) 160 /* non-breaking space */}), resultList.getLegend()); Iterable boats = resultList.getBoats(); assertFalse(Util.isEmpty(boats)); assertEquals(48, Util.size(boats)); @@ -110,16 +110,16 @@ public class ParserTest { assertEquals(1, Util.size(DEN9Crewmembers)); Crewmember DEN9Crewmember = DEN9Crewmembers.iterator().next(); assertEquals("Lang, Peter (1989) Kolding Sejlklub", DEN9Crewmember.getName()); - Iterable DEN9Races = DEN9.getRaces(); + Iterable DEN9Races = DEN9.getResultsInRaces(); assertNotNull(DEN9Races); assertEquals(2, Util.size(DEN9Races)); - Iterator i = DEN9Races.iterator(); - Race r1 = i.next(); + Iterator i = DEN9Races.iterator(); + BoatResultInRace r1 = i.next(); assertEquals(9.00, r1.getPoints(), 0.0000000001); assertEquals(1, (int) r1.getRaceNumber()); - Race r2 = i.next(); + BoatResultInRace r2 = i.next(); assertEquals(1.00, r2.getPoints(), 0.0000000001); assertEquals(2, (int) r2.getRaceNumber()); - assertEquals(new MillisecondsTimePoint(new GregorianCalendar(2011, 05, 18, 16, 26).getTime()), resultList.getTimePoint()); + assertEquals(new MillisecondsTimePoint(new GregorianCalendar(2011, 05, 18, 16, 26).getTime()), resultList.getTimePointPublished()); } } diff --git a/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ZipStreamTest.java b/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ZipStreamTest.java index 37104afbe39..e2807315c23 100755 --- a/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ZipStreamTest.java +++ b/java/com.sap.sailing.kiworesultimport.test/src/com/sap/sailing/kiworesultimport/test/ZipStreamTest.java @@ -1,5 +1,6 @@ package com.sap.sailing.kiworesultimport.test; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -14,7 +15,9 @@ import javax.xml.parsers.ParserConfigurationException; import org.junit.Test; import org.xml.sax.SAXException; +import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.kiworesultimport.ParserFactory; +import com.sap.sailing.kiworesultimport.RegattaSummary; import com.sap.sailing.kiworesultimport.ZipFile; public class ZipStreamTest { @@ -39,5 +42,8 @@ public class ZipStreamTest { public void testZipParser() throws FileNotFoundException, IOException, SAXException, ParserConfigurationException { ZipFile zipFile = ParserFactory.INSTANCE.createZipFileParser().parse(new FileInputStream(ZIP_EXAMPLE_FILE)); assertNotNull(zipFile); + Util.contains(zipFile.getBoatClassNames(), "Laser"); + RegattaSummary laser = zipFile.getRegattaSummary("Laser"); + assertEquals(9, Util.size(laser.getRaces())); } } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Boat.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Boat.java index 6814a44a2dd..55c469cd4d8 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Boat.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Boat.java @@ -9,9 +9,9 @@ public interface Boat extends Named { Crew getCrew(); - Iterable getRaces(); + Iterable getResultsInRaces(); - Race getRace(int raceNumberOneBased); + BoatResultInRace getResultsInRace(int raceNumberOneBased); Double getTotalPoints(); } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Race.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/BoatResultInRace.java similarity index 74% rename from java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Race.java rename to java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/BoatResultInRace.java index 76d54522ea8..874e518fd3c 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/Race.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/BoatResultInRace.java @@ -2,7 +2,7 @@ package com.sap.sailing.kiworesultimport; import com.sap.sailing.domain.common.MaxPointsReason; -public interface Race { +public interface BoatResultInRace { String getStatus(); Double getPoints(); @@ -10,4 +10,6 @@ public interface Race { Integer getRaceNumber(); MaxPointsReason getMaxPointsReason(); + + boolean isDiscarded(); } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RaceSummary.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RaceSummary.java index 0a69e2cb3e2..4fcd03cce8b 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RaceSummary.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RaceSummary.java @@ -9,7 +9,9 @@ package com.sap.sailing.kiworesultimport; public interface RaceSummary { String getBoatClassName(); - Integer getRaceNumber(); + int getRaceNumber(); + + Iterable getFleetNames(); /** * The {@link Boat} objects @@ -17,7 +19,7 @@ public interface RaceSummary { Iterable getBoats(); /** - * Retrieves the {@link Race} data that boat achieved in the race summarized by this object + * Retrieves the {@link BoatResultInRace} data that boat achieved in the race summarized by this object */ - Race getRace(Boat boat); + BoatResultInRace getBoatResults(Boat boat); } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RegattaSummary.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RegattaSummary.java index b5ca37caa0c..1bc468a2b87 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RegattaSummary.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/RegattaSummary.java @@ -1,5 +1,7 @@ package com.sap.sailing.kiworesultimport; +import com.sap.sailing.domain.common.TimePoint; + /** * Derived object, providing a view onto the data parsed from the result ZIP * @@ -7,6 +9,8 @@ package com.sap.sailing.kiworesultimport; * */ public interface RegattaSummary { + TimePoint getTimePointPublished(); + String getBoatClassName(); Iterable getRaces(); diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ResultList.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ResultList.java index c1a1f8821f2..18c06c1ca7f 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ResultList.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ResultList.java @@ -3,13 +3,13 @@ package com.sap.sailing.kiworesultimport; import com.sap.sailing.domain.common.TimePoint; public interface ResultList { - String getLegende(); + String getLegend(); - String getImagePfad(); + String getImagePath(); String getStatus(); - String getBoatClass(); + String getBoatClassName(); String getEvent(); @@ -20,7 +20,7 @@ public interface ResultList { /** * Point in time when this result list was published */ - TimePoint getTimePoint(); + TimePoint getTimePointPublished(); Iterable getBoats(); @@ -32,4 +32,6 @@ public interface ResultList { Boat getBoatBySailID(String sailID); String getSourceName(); + + Iterable getRaceNumbers(); } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ZipFile.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ZipFile.java index 4a3777f0d6e..0aae44da2cd 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ZipFile.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/ZipFile.java @@ -4,4 +4,10 @@ public interface ZipFile { Iterable getStartReports(); Iterable getResultLists(); + + RegattaSummary getRegattaSummary(String boatClassName); + + Iterable getBoatClassNames(); + + Iterable getRegattaSummaries(); } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/BoatImpl.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/BoatImpl.java index 6b6332f049b..69e194a8f94 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/BoatImpl.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/BoatImpl.java @@ -9,7 +9,7 @@ import org.w3c.dom.NodeList; import com.sap.sailing.kiworesultimport.Boat; import com.sap.sailing.kiworesultimport.Crew; -import com.sap.sailing.kiworesultimport.Race; +import com.sap.sailing.kiworesultimport.BoatResultInRace; public class BoatImpl extends NamedImpl implements Boat { @@ -45,18 +45,18 @@ public class BoatImpl extends NamedImpl implements Boat { } @Override - public Iterable getRaces() { - List result = new ArrayList(); + public Iterable getResultsInRaces() { + List result = new ArrayList(); final NodeList races = ((Element) ((Element) getNode()).getElementsByTagName("Races").item(0)).getElementsByTagName("Race"); for (int i=0; i boatResults; + private final Iterable fleetNames; + private final int raceNumber; + + public RaceSummaryImpl(String boatClassName, Map boatResults, Iterable fleetNames, int raceNumber) { + super(); + this.boatClassName = boatClassName; + this.boatResults = boatResults; + this.raceNumber = raceNumber; + this.fleetNames = fleetNames; + } + + @Override + public String getBoatClassName() { + return boatClassName; + } + + @Override + public int getRaceNumber() { + return raceNumber; + } + + @Override + public Iterable getBoats() { + return boatResults.keySet(); + } + + @Override + public BoatResultInRace getBoatResults(Boat boat) { + return boatResults.get(boat); + } + + @Override + public Iterable getFleetNames() { + return fleetNames; + } +} diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/RegattaSummaryImpl.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/RegattaSummaryImpl.java new file mode 100755 index 00000000000..51da904f5d6 --- /dev/null +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/RegattaSummaryImpl.java @@ -0,0 +1,52 @@ +package com.sap.sailing.kiworesultimport.impl; + +import com.sap.sailing.domain.common.TimePoint; +import com.sap.sailing.kiworesultimport.Boat; +import com.sap.sailing.kiworesultimport.RaceSummary; +import com.sap.sailing.kiworesultimport.RegattaSummary; + +public class RegattaSummaryImpl implements RegattaSummary { + private final Iterable races; + private final String boatClassName; + private final Iterable boats; + private final TimePoint timePointPublished; + + public RegattaSummaryImpl(Iterable races, String boatClassName, Iterable boats, TimePoint timePointPublished) { + super(); + 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 getRaces() { + return races; + } + + @Override + public RaceSummary getRace(int raceNumberOneBased) { + for (RaceSummary race : getRaces()) { + if (race.getRaceNumber() == raceNumberOneBased) { + return race; + } + } + return null; + } + + @Override + public Iterable getBoats() { + return boats; + } + +} diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/ResultListImpl.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/ResultListImpl.java index b053f4ecec5..1b75ac70642 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/ResultListImpl.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/ResultListImpl.java @@ -4,6 +4,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; import java.util.logging.Logger; @@ -15,6 +16,7 @@ import org.w3c.dom.NodeList; import com.sap.sailing.domain.base.impl.MillisecondsTimePoint; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.kiworesultimport.Boat; +import com.sap.sailing.kiworesultimport.BoatResultInRace; import com.sap.sailing.kiworesultimport.ResultList; public class ResultListImpl extends AbstractNodeWrapper implements ResultList { @@ -35,12 +37,12 @@ public class ResultListImpl extends AbstractNodeWrapper implements ResultList { } @Override - public String getLegende() { + public String getLegend() { return getNode().getAttributes().getNamedItem("legende").getNodeValue(); } @Override - public String getImagePfad() { + public String getImagePath() { return getNode().getAttributes().getNamedItem("imagePfad").getNodeValue(); } @@ -50,7 +52,7 @@ public class ResultListImpl extends AbstractNodeWrapper implements ResultList { } @Override - public String getBoatClass() { + public String getBoatClassName() { return getNode().getAttributes().getNamedItem("class").getNodeValue(); } @@ -70,7 +72,7 @@ public class ResultListImpl extends AbstractNodeWrapper implements ResultList { } @Override - public TimePoint getTimePoint() { + public TimePoint getTimePointPublished() { TimePoint result = null; String dateTime = getDate()+" "+getTime(); try { @@ -101,4 +103,15 @@ public class ResultListImpl extends AbstractNodeWrapper implements ResultList { } return null; } + + @Override + public Iterable getRaceNumbers() { + LinkedHashSet result = new LinkedHashSet(); + for (Boat boat : getBoats()) { + for (BoatResultInRace results : boat.getResultsInRaces()) { + result.add(results.getRaceNumber()); + } + } + return result; + } } diff --git a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/ZipFileImpl.java b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/ZipFileImpl.java index 7fed6e6cbfa..0c13ffd9029 100755 --- a/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/ZipFileImpl.java +++ b/java/com.sap.sailing.kiworesultimport/src/com/sap/sailing/kiworesultimport/impl/ZipFileImpl.java @@ -1,11 +1,17 @@ package com.sap.sailing.kiworesultimport.impl; +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 com.sap.sailing.domain.common.impl.Util.Triple; +import com.sap.sailing.kiworesultimport.Boat; +import com.sap.sailing.kiworesultimport.BoatResultInRace; +import com.sap.sailing.kiworesultimport.RaceSummary; +import com.sap.sailing.kiworesultimport.RegattaSummary; import com.sap.sailing.kiworesultimport.ResultList; import com.sap.sailing.kiworesultimport.Start; import com.sap.sailing.kiworesultimport.StartReport; @@ -15,10 +21,12 @@ public class ZipFileImpl implements ZipFile { private final Iterable startReports; private final Map, Start> startsByBoatclassAndRaceNumberAndFleetName; private final Iterable resultLists; - private final Map>> fleetsPerBoatClassAndRaceNumber; + private final Map regattaSummaryByBoatClass; public ZipFileImpl(Iterable startReports, Iterable resultLists) { - this.fleetsPerBoatClassAndRaceNumber = new HashMap>>(); + this.regattaSummaryByBoatClass = new HashMap<>(); + Map latestResultListForBoatClass = new HashMap<>(); + HashMap>> fleetNamesPerBoatClassAndRaceNumber = new HashMap>>(); this.startReports = startReports; this.startsByBoatclassAndRaceNumberAndFleetName = new HashMap, Start>(); this.resultLists = resultLists; @@ -27,10 +35,10 @@ public class ZipFileImpl implements ZipFile { startsByBoatclassAndRaceNumberAndFleetName.put( new Triple(start.getBoatClass(), start.getRaceNumber(), start .getFleetName()), start); - Map> fleetsForBoatClass = fleetsPerBoatClassAndRaceNumber.get(start.getBoatClass()); + Map> fleetsForBoatClass = fleetNamesPerBoatClassAndRaceNumber.get(start.getBoatClass()); if (fleetsForBoatClass == null) { fleetsForBoatClass = new HashMap>(); - fleetsPerBoatClassAndRaceNumber.put(start.getBoatClass(), fleetsForBoatClass); + fleetNamesPerBoatClassAndRaceNumber.put(start.getBoatClass(), fleetsForBoatClass); } Set fleetsForTheBoatClassAndRace = fleetsForBoatClass.get(start.getRaceNumber()); if (fleetsForTheBoatClassAndRace == null) { @@ -40,6 +48,28 @@ public class ZipFileImpl implements ZipFile { fleetsForTheBoatClassAndRace.add(start.getFleetName()); } } + // use the latest result lists per boat class only to construct RegattaSummary objects + for (ResultList resultList : resultLists) { + ResultList latestSoFar = latestResultListForBoatClass.get(resultList.getBoatClassName()); + if (latestSoFar == null || latestSoFar.getTimePointPublished().compareTo(resultList.getTimePointPublished()) < 0) { + latestResultListForBoatClass.put(resultList.getBoatClassName(), resultList); + } + } + for (Map.Entry boatClassNameAndLatestResultList : latestResultListForBoatClass.entrySet()) { + ResultList resultList = boatClassNameAndLatestResultList.getValue(); + List raceSummaries = new ArrayList(); + for (Integer raceNumber : resultList.getRaceNumbers()) { + Map resultsPerBoat = new HashMap<>(); + for (Boat boat : resultList.getBoats()) { + resultsPerBoat.put(boat, boat.getResultsInRace(raceNumber)); + } + raceSummaries.add(new RaceSummaryImpl(boatClassNameAndLatestResultList.getKey(), resultsPerBoat, + fleetNamesPerBoatClassAndRaceNumber.get(boatClassNameAndLatestResultList.getKey()).get(raceNumber), raceNumber)); + } + RegattaSummary regattaSummary = new RegattaSummaryImpl(raceSummaries, boatClassNameAndLatestResultList.getKey(), resultList.getBoats(), + resultList.getTimePointPublished()); + regattaSummaryByBoatClass.put(regattaSummary.getBoatClassName(), regattaSummary); + } } @Override @@ -51,5 +81,20 @@ public class ZipFileImpl implements ZipFile { public Iterable getResultLists() { return resultLists; } + + @Override + public RegattaSummary getRegattaSummary(String boatClassName) { + return regattaSummaryByBoatClass.get(boatClassName); + } + @Override + public Iterable getBoatClassNames() { + return regattaSummaryByBoatClass.keySet(); + } + + @Override + public Iterable getRegattaSummaries() { + return regattaSummaryByBoatClass.values(); + } + } From 834fc5ef9c17b2f2ad0ae6cf0989c4e7eeaf7e08 Mon Sep 17 00:00:00 2001 From: fmittag Date: Sat, 9 Jun 2012 18:25:21 +0200 Subject: [PATCH 3/3] created an action column for the regatta table for the regatta administration --- .../EventStructureManagementPanel.java | 22 +++++++ .../gwt/ui/adminconsole/ImagesBarCell.java | 7 +++ .../LeaderboardConfigImagesBarCell.java | 6 -- .../LeaderboardGroupConfigImagesBarCell.java | 6 -- .../LeaderboardRaceConfigImagesBarCell.java | 6 -- .../RegattaConfigImagesBarCell.java | 57 +++++++++++++++++++ 6 files changed, 86 insertions(+), 18 deletions(-) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaConfigImagesBarCell.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventStructureManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventStructureManagementPanel.java index 59b14f4d574..ec3cfb87bdb 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventStructureManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventStructureManagementPanel.java @@ -7,6 +7,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import com.google.gwt.cell.client.FieldUpdater; import com.google.gwt.cell.client.SafeHtmlCell; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ChangeEvent; @@ -18,6 +19,7 @@ import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.cellview.client.Column; import com.google.gwt.user.cellview.client.TextColumn; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CaptionPanel; @@ -215,12 +217,28 @@ public class EventStructureManagementPanel extends SimplePanel implements Regatt } }; + ImagesBarColumn regattaActionColumn = new ImagesBarColumn( + new RegattaConfigImagesBarCell(stringMessages)); + regattaActionColumn.setFieldUpdater(new FieldUpdater() { + @Override + public void update(int index, RegattaDTO regatta, String value) { + if ("ACTION_REMOVE".equals(value)) { + if (Window.confirm("Do you really want to remove the regatta: '" + regatta.name + "' ?")) { + removeRegatta(regatta); + } + } else if ("ACTION_EDIT".equals(value)) { + } else if ("ACTION_EDIT_RACES".equals(value)) { + } + } + }); + regattaTable = new CellTable(200, tableRes); regattaTable.setWidth("100%"); regattaTable.addColumn(regattaNameColumn, stringMessages.regattaName()); regattaTable.addColumn(regattaBoatClassColumn, stringMessages.boatClass()); regattaTable.addColumn(regattaSeriesColumn, stringMessages.series()); regattaTable.addColumn(regattaFleetsColumn, stringMessages.fleets()); + regattaTable.addColumn(regattaActionColumn, stringMessages.actions()); regattaSelectionModel = new SingleSelectionModel(); regattaSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { @@ -236,6 +254,10 @@ public class EventStructureManagementPanel extends SimplePanel implements Regatt parentPanel.add(regattaTable); } + private void removeRegatta(RegattaDTO regatta) { + + } + private void onEventSelectionChanged() { int selIndex = eventsComboBox.getSelectedIndex(); String selItemText = eventsComboBox.getItemText(selIndex); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImagesBarCell.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImagesBarCell.java index 3665c2fd5be..ca52bfbd3eb 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImagesBarCell.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ImagesBarCell.java @@ -6,6 +6,8 @@ import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.EventTarget; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.safecss.shared.SafeStyles; +import com.google.gwt.safehtml.client.SafeHtmlTemplates; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.text.shared.SafeHtmlRenderer; import com.google.gwt.text.shared.SimpleSafeHtmlRenderer; @@ -13,6 +15,11 @@ import com.google.gwt.user.client.ui.AbstractImagePrototype; public abstract class ImagesBarCell extends AbstractSafeHtmlCell { + interface ImagesBarTemplates extends SafeHtmlTemplates { + @SafeHtmlTemplates.Template("
{3}
") + SafeHtml cell(String name, SafeStyles styles, String title, SafeHtml value); + } + public ImagesBarCell() { super(SimpleSafeHtmlRenderer.getInstance(), "click", "keydown"); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigImagesBarCell.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigImagesBarCell.java index c7e8c1fe9a6..4b116a4a423 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigImagesBarCell.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigImagesBarCell.java @@ -3,7 +3,6 @@ package com.sap.sailing.gwt.ui.adminconsole; import com.google.gwt.core.client.GWT; import com.google.gwt.safecss.shared.SafeStyles; import com.google.gwt.safecss.shared.SafeStylesUtils; -import com.google.gwt.safehtml.client.SafeHtmlTemplates; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.text.shared.SafeHtmlRenderer; @@ -11,11 +10,6 @@ import com.sap.sailing.gwt.ui.client.StringMessages; public class LeaderboardConfigImagesBarCell extends ImagesBarCell { - interface ImagesBarTemplates extends SafeHtmlTemplates { - @SafeHtmlTemplates.Template("
{3}
") - SafeHtml cell(String name, SafeStyles styles, String title, SafeHtml value); - } - public LeaderboardConfigImagesBarCell(StringMessages stringConstants) { super(); this.stringConstants = stringConstants; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardGroupConfigImagesBarCell.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardGroupConfigImagesBarCell.java index 22f23e188c5..fb980fdccdf 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardGroupConfigImagesBarCell.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardGroupConfigImagesBarCell.java @@ -3,7 +3,6 @@ package com.sap.sailing.gwt.ui.adminconsole; import com.google.gwt.core.client.GWT; import com.google.gwt.safecss.shared.SafeStyles; import com.google.gwt.safecss.shared.SafeStylesUtils; -import com.google.gwt.safehtml.client.SafeHtmlTemplates; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.text.shared.SafeHtmlRenderer; @@ -11,11 +10,6 @@ import com.sap.sailing.gwt.ui.client.StringMessages; public class LeaderboardGroupConfigImagesBarCell extends ImagesBarCell { - interface ImagesBarTemplates extends SafeHtmlTemplates { - @SafeHtmlTemplates.Template("
{3}
") - SafeHtml cell(String name, SafeStyles styles, String title, SafeHtml value); - } - public LeaderboardGroupConfigImagesBarCell(StringMessages stringConstants) { super(); this.stringConstants = stringConstants; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardRaceConfigImagesBarCell.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardRaceConfigImagesBarCell.java index 8ef7ed015a5..0d5304880ab 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardRaceConfigImagesBarCell.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardRaceConfigImagesBarCell.java @@ -3,7 +3,6 @@ package com.sap.sailing.gwt.ui.adminconsole; import com.google.gwt.core.client.GWT; import com.google.gwt.safecss.shared.SafeStyles; import com.google.gwt.safecss.shared.SafeStylesUtils; -import com.google.gwt.safehtml.client.SafeHtmlTemplates; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.text.shared.SafeHtmlRenderer; @@ -13,11 +12,6 @@ public class LeaderboardRaceConfigImagesBarCell extends ImagesBarCell { private StringMessages stringConstants; - interface ImagesBarTemplates extends SafeHtmlTemplates { - @SafeHtmlTemplates.Template("
{3}
") - SafeHtml cell(String name, SafeStyles styles, String title, SafeHtml value); - } - public LeaderboardRaceConfigImagesBarCell(StringMessages stringConstants) { super(); this.stringConstants = stringConstants; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaConfigImagesBarCell.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaConfigImagesBarCell.java new file mode 100644 index 00000000000..c65ee3668ea --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaConfigImagesBarCell.java @@ -0,0 +1,57 @@ +package com.sap.sailing.gwt.ui.adminconsole; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.safecss.shared.SafeStyles; +import com.google.gwt.safecss.shared.SafeStylesUtils; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.text.shared.SafeHtmlRenderer; +import com.sap.sailing.gwt.ui.client.StringMessages; + +public class RegattaConfigImagesBarCell extends ImagesBarCell { + + public RegattaConfigImagesBarCell(StringMessages stringConstants) { + super(); + this.stringConstants = stringConstants; + } + + public RegattaConfigImagesBarCell(SafeHtmlRenderer renderer, StringMessages stringConstants) { + super(); + this.stringConstants = stringConstants; + } + + private static ImagesBarTemplates templates = GWT.create(ImagesBarTemplates.class); + + private static AdminConsoleResources resources = GWT.create(AdminConsoleResources.class); + + private static final SafeHtml ICON_EDIT = makeImage(resources.editIcon()); + + private static final SafeHtml ICON_REMOVE = makeImage(resources.removeIcon()); + + private static final SafeHtml ICON_EDIT_RACES = makeImage(resources.linkIcon()); + + private StringMessages stringConstants; + + @Override + protected void render(com.google.gwt.cell.client.Cell.Context context, SafeHtml data, SafeHtmlBuilder sb) { + /* + * Always do a null check on the value. Cell widgets can pass null to + * cells if the underlying data contains a null, or if the data arrives + * out of order. + */ + if (data == null) { + return; + } + + SafeStyles imgStyle = SafeStylesUtils.fromTrustedString("float:left;cursor:hand;cursor:pointer;padding-right:5px;"); + + SafeHtml rendered = templates.cell("ACTION_EDIT", imgStyle, stringConstants.actionEdit(), ICON_EDIT); + sb.append(rendered); + + rendered = templates.cell("ACTION_EDIT_RACES", imgStyle, stringConstants.actionRaceEdit(), ICON_EDIT_RACES); + sb.append(rendered); + + rendered = templates.cell("ACTION_REMOVE", imgStyle, stringConstants.actionRemove(), ICON_REMOVE); + sb.append(rendered); + } +} \ No newline at end of file