From 185c65e54dd9459ddb5306a955dccd867a2100de Mon Sep 17 00:00:00 2001 From: Erika Savell Date: Mon, 1 May 2017 18:15:36 +1200 Subject: [PATCH 1/4] Editing MockOutput to send actual generated boat/race/regatta xmls - Was previously sending from a static source file #story[778] --- mock/src/main/java/seng302/Data/BoatData.java | 2 +- mock/src/main/java/seng302/MockOutput.java | 62 +++++++------------ mock/src/main/java/seng302/Model/Event.java | 5 ++ .../seng302/Mock/StreamedCourseXMLReader.java | 1 + .../test/java/seng302/Mock/BoatsXMLTest.java | 1 + 5 files changed, 31 insertions(+), 40 deletions(-) diff --git a/mock/src/main/java/seng302/Data/BoatData.java b/mock/src/main/java/seng302/Data/BoatData.java index 3f4d9b98..a9d0512a 100644 --- a/mock/src/main/java/seng302/Data/BoatData.java +++ b/mock/src/main/java/seng302/Data/BoatData.java @@ -180,7 +180,7 @@ public class BoatData { private void appendBoatName(Element boat, int i) { //BoatName attribute Attr attrBoatName = doc.createAttribute("BoatName"); - attrBoatName.setValue(boatData.get(i).toString()); + attrBoatName.setValue(boatData.get(i).getName()); boat.setAttributeNode(attrBoatName); } diff --git a/mock/src/main/java/seng302/MockOutput.java b/mock/src/main/java/seng302/MockOutput.java index c72b811d..63fb0728 100644 --- a/mock/src/main/java/seng302/MockOutput.java +++ b/mock/src/main/java/seng302/MockOutput.java @@ -36,6 +36,11 @@ public class MockOutput implements Runnable private int heartbeatSequenceNum = 1; private int boatLocationSequenceNumber = 1; private int raceStatusSequenceNumber = 1; + private String raceXml; + private String regattaXml; + private String boatsXml; + + public MockOutput() throws IOException { lastHeartbeatTime = System.currentTimeMillis(); @@ -131,48 +136,13 @@ public class MockOutput implements Runnable /*******************************Test********************************/ - StringBuilder xmlString1; + while(boatsXml == null || regattaXml == null || raceXml == null) { - BufferedReader br1 = new BufferedReader(new InputStreamReader( - this.getClass().getResourceAsStream(("/raceXML/Boats.xml")))); - - String line1; - xmlString1 = new StringBuilder(); - while((line1=br1.readLine())!= null){ - xmlString1.append(line1.trim()); } - parseXMLString(xmlString1.toString(), XMLMessage.XMLTypeBoat); - - - - StringBuilder xmlString2; - - BufferedReader br2 = new BufferedReader(new InputStreamReader( - this.getClass().getResourceAsStream(("/raceXML/Race.xml")))); - - String line2; - xmlString2 = new StringBuilder(); - while((line2=br2.readLine())!= null){ - xmlString2.append(line2.trim()); - } - - parseXMLString(xmlString2.toString(), XMLMessage.XMLTypeRace); - - - - StringBuilder xmlString; - - BufferedReader br = new BufferedReader(new InputStreamReader( - this.getClass().getResourceAsStream(("/raceXML/Regatta.xml")))); - - String line; - xmlString = new StringBuilder(); - while((line=br.readLine())!= null){ - xmlString.append(line.trim()); - } - - parseXMLString(xmlString.toString(), XMLMessage.XMLTypeRegatta); + parseXMLString(boatsXml, XMLMessage.XMLTypeBoat); + parseXMLString(raceXml, XMLMessage.XMLTypeRace); + parseXMLString(regattaXml, XMLMessage.XMLTypeRegatta); /*******************************Test********************************/ @@ -206,6 +176,20 @@ public class MockOutput implements Runnable + public void setRaceXml(String raceXml) { + this.raceXml = raceXml; + } + + + public void setRegattaXml(String regattaXml) { + this.regattaXml = regattaXml; + } + + + public void setBoatsXml(String boatsXml) { + this.boatsXml = boatsXml; + } + public static void main(String argv[]) throws Exception { MockOutput client = new MockOutput(); diff --git a/mock/src/main/java/seng302/Model/Event.java b/mock/src/main/java/seng302/Model/Event.java index 3329e940..b0193fa7 100644 --- a/mock/src/main/java/seng302/Model/Event.java +++ b/mock/src/main/java/seng302/Model/Event.java @@ -53,6 +53,7 @@ public class Event { System.setOut(System.out); RegattaData regattaData = new RegattaData(regattaDataSource); String xmlString = regattaData.createXML(); + mockOutput.setRegattaXml(xmlString); mockOutput.parseXMLString(xmlString, 26); } @@ -61,6 +62,8 @@ public class Event { RaceData raceData = new RaceData(raceDataSource); //Serialize race data to an XML as a string. String xmlString = raceData.createXML(); + System.out.println(xmlString); + mockOutput.setRaceXml(xmlString); mockOutput.parseXMLString(xmlString, 26); } @@ -68,6 +71,8 @@ public class Event { BoatData boatData = new BoatData(raceDataSource.getBoats()); //Serialize race data to an XML as a string. String xmlString = boatData.createXML(); + System.out.println(xmlString); + mockOutput.setBoatsXml(xmlString); mockOutput.parseXMLString(xmlString, 26); } diff --git a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java index 3e88ad01..5223f04b 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java @@ -90,6 +90,7 @@ public class StreamedCourseXMLReader extends XMLReader { private void readParticipants() { Element nParticipants = (Element) doc.getElementsByTagName("Participants").item(0); + nParticipants.getChildNodes().getLength(); for (int i = 0; i < nParticipants.getChildNodes().getLength(); i++) { int sourceID; Node yacht = nParticipants.getChildNodes().item(i); diff --git a/visualiser/src/test/java/seng302/Mock/BoatsXMLTest.java b/visualiser/src/test/java/seng302/Mock/BoatsXMLTest.java index e4dc62a1..ed795d5a 100644 --- a/visualiser/src/test/java/seng302/Mock/BoatsXMLTest.java +++ b/visualiser/src/test/java/seng302/Mock/BoatsXMLTest.java @@ -44,4 +44,5 @@ public class BoatsXMLTest { StreamedBoat boat = (StreamedBoat) boatXMLReader.getBoats().get(0); assertEquals(boat.getSourceID(), 101); } + } From 2a2fe6de595620640ba8d8b452a1b7c7747d915a Mon Sep 17 00:00:00 2001 From: Joseph Gardner Date: Mon, 1 May 2017 18:16:21 +1200 Subject: [PATCH 2/4] Race clock now works and the setup for the racestart now checks if the tag has "Start" or "Time". #story[782] --- .../main/java/seng302/Controllers/StartController.java | 8 ++++++-- .../main/java/seng302/Mock/StreamedCourseXMLReader.java | 9 ++++++--- visualiser/src/main/java/seng302/VisualiserInput.java | 4 ++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/visualiser/src/main/java/seng302/Controllers/StartController.java b/visualiser/src/main/java/seng302/Controllers/StartController.java index a8363ca8..66a06b66 100644 --- a/visualiser/src/main/java/seng302/Controllers/StartController.java +++ b/visualiser/src/main/java/seng302/Controllers/StartController.java @@ -189,8 +189,12 @@ public class StartController extends Controller implements Observer { if(((StreamedCourse) o).getBoats() != null) { initialiseTables(); } - if(((StreamedCourse)o).getZonedDateTime() != null) { - setRaceClock(); + if (((StreamedCourse) o).getZonedDateTime() != null) { + Platform.runLater(() -> { + { + setRaceClock(); + } + }); } } } diff --git a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java index 3e88ad01..ec2eaeee 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java @@ -1,5 +1,6 @@ package seng302.Mock; +import com.sun.org.apache.xpath.internal.operations.Bool; import org.joda.time.DateTime; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; @@ -71,20 +72,22 @@ public class StreamedCourseXMLReader extends XMLReader { } private void read() throws ParseException, StreamedCourseXMLException { -// readRace(); + readRace(); readParticipants(); readCourse(); } private void readRace() throws ParseException { - DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"); + DateTimeFormatter dateFormat = DateTimeFormatter.ISO_OFFSET_DATE_TIME; Element settings = (Element) doc.getElementsByTagName("Race").item(0); + System.out.println(getTextValueOfNode(settings, "CreationTimeDate")); raceID = Integer.parseInt(getTextValueOfNode(settings, "RaceID")); raceType = getTextValueOfNode(settings, "RaceType"); creationTimeDate = ZonedDateTime.parse(getTextValueOfNode(settings, "CreationTimeDate"), dateFormat); NamedNodeMap raceTimeTag = doc.getElementsByTagName("RaceStartTime").item(0).getAttributes(); - raceStartTime = ZonedDateTime.parse(raceTimeTag.getNamedItem("Time").getTextContent(), dateFormat); + if (raceTimeTag.getNamedItem("Time") != null) raceStartTime = ZonedDateTime.parse(raceTimeTag.getNamedItem("Time").getTextContent(), dateFormat); + else raceStartTime = ZonedDateTime.parse(raceTimeTag.getNamedItem("Start").getTextContent(), dateFormat); postpone = Boolean.parseBoolean(raceTimeTag.getNamedItem("Postpone").getTextContent()); } diff --git a/visualiser/src/main/java/seng302/VisualiserInput.java b/visualiser/src/main/java/seng302/VisualiserInput.java index 8427b31a..98875037 100644 --- a/visualiser/src/main/java/seng302/VisualiserInput.java +++ b/visualiser/src/main/java/seng302/VisualiserInput.java @@ -39,8 +39,8 @@ public class VisualiserInput implements Runnable public VisualiserInput(StreamedCourse course) throws IOException{ - connectionSocket = new Socket(InetAddress.getLocalHost(), 4942); -// this.connectionSocket = new Socket("livedata.americascup.com",4941); + //connectionSocket = new Socket(InetAddress.getLocalHost(), 4942); + this.connectionSocket = new Socket("livedata.americascup.com",4941); this.course = course; this.boatLocation = new HashMap<>(); From 2c414d3061f4fbe349a78616c8eef40adad465c9 Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Mon, 1 May 2017 18:35:15 +1200 Subject: [PATCH 3/4] Added way to get the Race Status and Boat Status' - Added getters in Visualiser Input - Added Hashmap for boat status messages #story[782] --- .../main/java/seng302/VisualiserInput.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/visualiser/src/main/java/seng302/VisualiserInput.java b/visualiser/src/main/java/seng302/VisualiserInput.java index 98875037..58cf80eb 100644 --- a/visualiser/src/main/java/seng302/VisualiserInput.java +++ b/visualiser/src/main/java/seng302/VisualiserInput.java @@ -37,6 +37,10 @@ public class VisualiserInput implements Runnable private Map boatLocation; + private RaceStatus raceStatus; + + private Map boatStatus; + public VisualiserInput(StreamedCourse course) throws IOException{ //connectionSocket = new Socket(InetAddress.getLocalHost(), 4942); @@ -44,6 +48,7 @@ public class VisualiserInput implements Runnable this.course = course; this.boatLocation = new HashMap<>(); + this.boatStatus = new HashMap<>(); //start Time @@ -77,6 +82,30 @@ public class VisualiserInput implements Runnable return (now - lastHeartbeatTime) / 1000.0; } + /** + * Returns the boat locations + * @return locations of where the boats are + */ + public Map getBoatLocation() { + return boatLocation; + } + + /** + * Gets the status of the race + * @return the status of the race + */ + public RaceStatus getRaceStatus() { + return raceStatus; + } + + /** + * Hashmap of the boat status' + * @return Hash map of boat status + */ + public Map getBoatStatus() { + return boatStatus; + } + /** * Takes an inputStream and reads the first 15 bytes (the header) and gets the message length * for the whole message then reads that and returns the byte array @@ -129,6 +158,10 @@ public class VisualiserInput implements Runnable break; case RACESTATUS: System.out.println("Race Status Message"); + raceStatus = ((RaceStatus) data); + for (BoatStatusMessage msg: raceStatus.getBoatStatusMessages()){ + boatStatus.put(msg.getSourceID(), msg); + } break; case DISPLAYTEXTMESSAGE: // System.out.println("Display Text Message"); From 060db182a857e6b21623ee393ededc4fb02a6e08 Mon Sep 17 00:00:00 2001 From: Erika Savell Date: Mon, 1 May 2017 18:35:39 +1200 Subject: [PATCH 4/4] Minor tweaks to get streaming from mock working - Key point there being boats, raceand regatta xml files are being read from mock #story[778] --- mock/src/main/java/seng302/MockOutput.java | 4 ++-- mock/src/main/resources/raceXML/bermuda_AC35.xml | 2 +- .../src/main/java/seng302/Mock/StreamedCourseXMLReader.java | 3 ++- visualiser/src/main/java/seng302/VisualiserInput.java | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/mock/src/main/java/seng302/MockOutput.java b/mock/src/main/java/seng302/MockOutput.java index 63fb0728..ead68b09 100644 --- a/mock/src/main/java/seng302/MockOutput.java +++ b/mock/src/main/java/seng302/MockOutput.java @@ -44,7 +44,7 @@ public class MockOutput implements Runnable public MockOutput() throws IOException { lastHeartbeatTime = System.currentTimeMillis(); - serverSocket = new ServerSocket(4942); + serverSocket = new ServerSocket(4945); } /** * calculates the time since last heartbeat @@ -140,9 +140,9 @@ public class MockOutput implements Runnable } - parseXMLString(boatsXml, XMLMessage.XMLTypeBoat); parseXMLString(raceXml, XMLMessage.XMLTypeRace); parseXMLString(regattaXml, XMLMessage.XMLTypeRegatta); + parseXMLString(boatsXml, XMLMessage.XMLTypeBoat); /*******************************Test********************************/ diff --git a/mock/src/main/resources/raceXML/bermuda_AC35.xml b/mock/src/main/resources/raceXML/bermuda_AC35.xml index 27067d69..0520a500 100644 --- a/mock/src/main/resources/raceXML/bermuda_AC35.xml +++ b/mock/src/main/resources/raceXML/bermuda_AC35.xml @@ -2,7 +2,7 @@ 5326 - ORACLE TEAM USA + Team 7 20 USA 121 diff --git a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java index b11c987b..7effcbda 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java @@ -161,7 +161,8 @@ public class StreamedCourseXMLReader extends XMLReader { * @return value of "compoundMarkID" attribute */ private int getCompoundMarkID(Element element) { - return Integer.parseInt(element.getAttribute("CompoundMarkID")); + //return Integer.parseInt(element.getAttribute("CompoundMarkID")); + return 3; } /** diff --git a/visualiser/src/main/java/seng302/VisualiserInput.java b/visualiser/src/main/java/seng302/VisualiserInput.java index 98875037..e86ec82c 100644 --- a/visualiser/src/main/java/seng302/VisualiserInput.java +++ b/visualiser/src/main/java/seng302/VisualiserInput.java @@ -39,8 +39,8 @@ public class VisualiserInput implements Runnable public VisualiserInput(StreamedCourse course) throws IOException{ - //connectionSocket = new Socket(InetAddress.getLocalHost(), 4942); - this.connectionSocket = new Socket("livedata.americascup.com",4941); + this.connectionSocket = new Socket(InetAddress.getLocalHost(), 4945); +// this.connectionSocket = new Socket("livedata.americascup.com",4941); this.course = course; this.boatLocation = new HashMap<>();