From 68a8f64fd39e23d1eb4c89fd42362c69ccf29a3c Mon Sep 17 00:00:00 2001 From: Connor Taylor-Brown Date: Fri, 28 Apr 2017 20:29:03 +1200 Subject: [PATCH] Generate StreamedCourse from VisualiserInput #story[782] --- .../seng302/Networking/VisualiserInput.java | 59 ++++++++++++------- .../main/java/seng302/Mock/BoatXMLReader.java | 6 ++ .../java/seng302/Mock/RegattaXMLReader.java | 5 ++ .../java/seng302/Mock/StreamedCourse.java | 14 +++-- .../seng302/Mock/StreamedCourseXMLReader.java | 5 ++ .../src/main/java/seng302/XMLReader.java | 7 +++ 6 files changed, 70 insertions(+), 26 deletions(-) diff --git a/network/src/main/java/seng302/Networking/VisualiserInput.java b/network/src/main/java/seng302/Networking/VisualiserInput.java index a8d82956..7d6628dd 100644 --- a/network/src/main/java/seng302/Networking/VisualiserInput.java +++ b/network/src/main/java/seng302/Networking/VisualiserInput.java @@ -1,8 +1,6 @@ package seng302.Networking; import org.xml.sax.SAXException; -import seng302.Mock.BoatXMLReader; -import seng302.Mock.RegattaXMLReader; -import seng302.Mock.StreamedCourseXMLReader; +import seng302.Mock.*; import seng302.Networking.BinaryMessageDecoder; import seng302.Networking.MessageDecoders.*; import seng302.Networking.Utils.*; @@ -12,6 +10,7 @@ import java.io.*; import java.net.*; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.text.ParseException; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -34,23 +33,39 @@ public class VisualiserInput implements Runnable long heartbeatSeqNum; - private Map boatLocation; - private BoatXMLReader boatXMLReader; - private StreamedCourseXMLReader streamedCourseXMLReader; - private RegattaXMLReader regattaXMLReader; + private StreamedCourse course = null; + private Map boatLocation; - VisualiserInput() throws IOException{ + public VisualiserInput(Socket connectionSocket) throws IOException{ // connectionSocket = new Socket(InetAddress.getLocalHost(), 4942); - boatLocation = new HashMap<>(); - //this is the test data that streams form the AC35 website - connectionSocket = new Socket("livedata.americascup.com",4941); + this.course = new StreamedCourse(); + this.boatLocation = new HashMap<>(); + this.connectionSocket = connectionSocket; //start Time - lastHeartbeatTime = System.currentTimeMillis(); + this.lastHeartbeatTime = System.currentTimeMillis(); + } + + /** + * Provides StreamedCourse container for fixed course data + * @return course for current VisualiserInput instance + * @see seng302.Mock.StreamedCourse + */ + public StreamedCourse getCourse() { + return course; + } + + /** + * Returns the last boat location message associated with the given boat source ID. + * @param sourceID unique global identifier for boat + * @return most recent location message + */ + public BoatLocationMessage getBoatLocationMessage(int sourceID) { + return boatLocation.get(sourceID); } /** @@ -118,21 +133,23 @@ public class VisualiserInput implements Runnable break; case XMLMESSAGE: // System.out.println("XML Message!"); - XMLMessage xml = (XMLMessage) data;/* + XMLMessage xml = (XMLMessage) data; try { if (xml.getXmlMsgSubType() == xml.XMLTypeRegatta){ - regattaXMLReader = new RegattaXMLReader(xml.getXmlMessage()); + System.out.println("Setting Regatta"); + course.setRegattaXMLReader(new RegattaXMLReader(xml.getXmlMessage())); } else if (xml.getXmlMsgSubType() == xml.XMLTypeRace){ - streamedCourseXMLReader = new StreamedCourseXMLReader(xml.getXmlMessage()); + System.out.println("Setting Course"); + course.setStreamedCourseXMLReader(new StreamedCourseXMLReader(xml.getXmlMessage())); } else if (xml.getXmlMsgSubType() == xml.XMLTypeBoat){ - boatXMLReader = new BoatXMLReader(xml.getXmlMessage()); + System.out.println("Setting Boats"); + course.setBoatXMLReader(new BoatXMLReader(xml.getXmlMessage())); } } catch (SAXException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); - }*/ - System.out.println(((XMLMessage)data).getXmlMessage()); + } break; case RACESTARTSTATUS: // System.out.println("Race Start Status Message"); @@ -188,8 +205,10 @@ public class VisualiserInput implements Runnable public static void main(String argv[]) throws Exception { - VisualiserInput reciever = new VisualiserInput(); - reciever.run(); + //this is the test data that streams form the AC35 website + Socket socket = new Socket("livedata.americascup.com",4941); + VisualiserInput receiver = new VisualiserInput(socket); + receiver.run(); } } diff --git a/visualiser/src/main/java/seng302/Mock/BoatXMLReader.java b/visualiser/src/main/java/seng302/Mock/BoatXMLReader.java index 9a614faa..069092fb 100644 --- a/visualiser/src/main/java/seng302/Mock/BoatXMLReader.java +++ b/visualiser/src/main/java/seng302/Mock/BoatXMLReader.java @@ -1,9 +1,11 @@ package seng302.Mock; import javafx.scene.paint.Color; +import jdk.internal.util.xml.impl.Input; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; import org.xml.sax.SAXException; import seng302.Model.Boat; import seng302.XMLReader; @@ -47,6 +49,10 @@ public class BoatXMLReader extends XMLReader { } } + public BoatXMLReader(InputSource xmlString) throws IOException, SAXException, ParserConfigurationException { + super(xmlString); + } + public void read() { readSettings(); readShapes(); diff --git a/visualiser/src/main/java/seng302/Mock/RegattaXMLReader.java b/visualiser/src/main/java/seng302/Mock/RegattaXMLReader.java index d670c499..2203a36e 100644 --- a/visualiser/src/main/java/seng302/Mock/RegattaXMLReader.java +++ b/visualiser/src/main/java/seng302/Mock/RegattaXMLReader.java @@ -2,6 +2,7 @@ package seng302.Mock; import org.w3c.dom.Element; import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; import org.xml.sax.SAXException; import seng302.XMLReader; @@ -42,6 +43,10 @@ public class RegattaXMLReader extends XMLReader { } } + public RegattaXMLReader(InputSource xmlString) throws IOException, SAXException, ParserConfigurationException { + super(xmlString); + } + /** * Read the XML */ diff --git a/visualiser/src/main/java/seng302/Mock/StreamedCourse.java b/visualiser/src/main/java/seng302/Mock/StreamedCourse.java index 2b66df3d..e34d8aa1 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedCourse.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedCourse.java @@ -15,6 +15,8 @@ public class StreamedCourse implements RaceDataSource { BoatXMLReader boatXMLReader = null; RegattaXMLReader regattaXMLReader = null; + public StreamedCourse() {} + public StreamedCourse(StreamedCourseXMLReader streamedCourseXMLReader) { this.streamedCourseXMLReader = streamedCourseXMLReader; } @@ -25,15 +27,19 @@ public class StreamedCourse implements RaceDataSource { public void setBoatXMLReader(BoatXMLReader boatXMLReader) { this.boatXMLReader = boatXMLReader; - if (streamedCourseXMLReader != null) { + if (streamedCourseXMLReader != null && boatXMLReader != null) { boatXMLReader.setParticipants(streamedCourseXMLReader.getParticipants()); boatXMLReader.read(); } } + public StreamedCourseXMLReader getStreamedCourseXMLReader() { + return streamedCourseXMLReader; + } + public void setStreamedCourseXMLReader(StreamedCourseXMLReader streamedCourseXMLReader) { this.streamedCourseXMLReader = streamedCourseXMLReader; - if (streamedCourseXMLReader != null) { + if (streamedCourseXMLReader != null && boatXMLReader != null) { boatXMLReader.setParticipants(streamedCourseXMLReader.getParticipants()); boatXMLReader.read(); } @@ -43,10 +49,6 @@ public class StreamedCourse implements RaceDataSource { this.regattaXMLReader = regattaXMLReader; } - public RegattaXMLReader getRegattaXMLReader() { - return regattaXMLReader; - } - public List getBoats() { return boatXMLReader.getBoats(); } diff --git a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java index 43cd9f44..a39253ec 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java @@ -5,6 +5,7 @@ import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; import org.xml.sax.SAXException; import seng302.GPSCoordinate; import seng302.Model.Leg; @@ -63,6 +64,10 @@ public class StreamedCourseXMLReader extends XMLReader { } } + public StreamedCourseXMLReader(InputSource xmlString) throws IOException, SAXException, ParserConfigurationException { + super(xmlString); + } + private void read() throws ParseException, StreamedCourseXMLException { readRace(); readParticipants(); diff --git a/visualiser/src/main/java/seng302/XMLReader.java b/visualiser/src/main/java/seng302/XMLReader.java index 62aaea2b..1d8aeaf3 100644 --- a/visualiser/src/main/java/seng302/XMLReader.java +++ b/visualiser/src/main/java/seng302/XMLReader.java @@ -3,6 +3,7 @@ package seng302; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; +import org.xml.sax.InputSource; import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; @@ -26,6 +27,12 @@ public abstract class XMLReader { doc.getDocumentElement().normalize(); } + public XMLReader(InputSource xmlInput) throws ParserConfigurationException, IOException, SAXException { + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + doc = dBuilder.parse(xmlInput); + } + public Document getDocument() { return doc; }