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..ead68b09 100644 --- a/mock/src/main/java/seng302/MockOutput.java +++ b/mock/src/main/java/seng302/MockOutput.java @@ -36,10 +36,15 @@ 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(); - serverSocket = new ServerSocket(4942); + serverSocket = new ServerSocket(4945); } /** * calculates the time since last heartbeat @@ -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(raceXml, XMLMessage.XMLTypeRace); + parseXMLString(regattaXml, XMLMessage.XMLTypeRegatta); + parseXMLString(boatsXml, XMLMessage.XMLTypeBoat); /*******************************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/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/Controllers/StartController.java b/visualiser/src/main/java/seng302/Controllers/StartController.java index 4d9c88de..257d83fc 100644 --- a/visualiser/src/main/java/seng302/Controllers/StartController.java +++ b/visualiser/src/main/java/seng302/Controllers/StartController.java @@ -193,8 +193,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..7effcbda 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,25 +72,28 @@ 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()); } 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); @@ -157,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 58472acd..967cb05e 100644 --- a/visualiser/src/main/java/seng302/VisualiserInput.java +++ b/visualiser/src/main/java/seng302/VisualiserInput.java @@ -37,6 +37,11 @@ public class VisualiserInput implements Runnable private Map boatLocation; + private RaceStatus raceStatus; + + private Map boatStatus; + + public VisualiserInput(StreamedCourse course) throws IOException{ public VisualiserInput(Socket socket, StreamedCourse course) throws IOException{ this.connectionSocket = socket; @@ -44,6 +49,7 @@ public class VisualiserInput implements Runnable this.course = course; this.boatLocation = new HashMap<>(); + this.boatStatus = new HashMap<>(); //start Time @@ -77,6 +83,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 @@ -128,14 +158,18 @@ public class VisualiserInput implements Runnable // System.out.println("HeartBeat Message! " + heartbeatSeqNum); break; case RACESTATUS: -// System.out.println("Race Status Message"); + 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"); //no decoder for this. break; case XMLMESSAGE: -// System.out.println("XML Message!"); + System.out.println("XML Message!"); XMLMessage xml = (XMLMessage) data; try { if (xml.getXmlMsgSubType() == xml.XMLTypeRegatta){ @@ -159,7 +193,7 @@ public class VisualiserInput implements Runnable } break; case RACESTARTSTATUS: - System.out.println("Race Start Status Message"); + //System.out.println("Race Start Status Message"); break; case YACHTEVENTCODE: // System.out.println("Yacht Action Code!"); 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); } + }