From 3f748bfdb6a686bd71007bf6504a887689f1a354 Mon Sep 17 00:00:00 2001 From: Erika Savell Date: Mon, 1 May 2017 15:06:56 +1200 Subject: [PATCH] Removed BoatInRace from shared model, refactored #story[778] --- mock/src/main/java/seng302/App.java | 1 - mock/src/main/java/seng302/Data/BoatData.java | 7 +- mock/src/main/java/seng302/Data/RaceData.java | 4 +- .../seng302/DataInput/RaceDataSource.java | 4 +- .../java/seng302/DataInput/RaceXMLReader.java | 8 +- mock/src/main/java/seng302/Model/Boat.java | 154 ++++++++++++++++++ mock/src/main/java/seng302/Model/Event.java | 3 + mock/src/main/java/seng302/Model/Race.java | 45 ++--- .../{BoatInRaceTest.java => BoatTest.java} | 60 +------ .../src/test/java/seng302/Model/RaceTest.java | 30 ++-- .../test/java/seng302/Model/RaceXMLTest.java | 16 +- .../java/seng302/Networking/MockOutput.java | 10 +- .../Networking/Utils/BoatLocationMessage.java | 5 +- .../seng302/Networking/VisualiserInput.java | 10 +- .../src/main/java/seng302/Model/Boat.java | 6 + 15 files changed, 223 insertions(+), 140 deletions(-) create mode 100644 mock/src/main/java/seng302/Model/Boat.java rename mock/src/test/java/seng302/Model/{BoatInRaceTest.java => BoatTest.java} (57%) diff --git a/mock/src/main/java/seng302/App.java b/mock/src/main/java/seng302/App.java index 6801dc71..3d8c47a6 100644 --- a/mock/src/main/java/seng302/App.java +++ b/mock/src/main/java/seng302/App.java @@ -29,7 +29,6 @@ public class App extends Application { @Override public void start(Stage primaryStage) { try { - RaceDataSource raceData = new RaceXMLReader("raceXML/bermuda_AC35.xml"); RegattaDataSource regattaData = new RegattaXMLReader("mockXML/regattaTest.xml"); Event raceEvent = new Event(raceData, regattaData); diff --git a/mock/src/main/java/seng302/Data/BoatData.java b/mock/src/main/java/seng302/Data/BoatData.java index 27a42503..3f4d9b98 100644 --- a/mock/src/main/java/seng302/Data/BoatData.java +++ b/mock/src/main/java/seng302/Data/BoatData.java @@ -4,7 +4,8 @@ import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import seng302.Exceptions.InvalidBoatDataException; -import SharedModel.BoatInRace; +import seng302.Model.Boat; + import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -23,10 +24,10 @@ import java.util.List; public class BoatData { Document doc; - private List boatData; + private List boatData; - public BoatData(List boatData) { + public BoatData(List boatData) { this.boatData = boatData; } diff --git a/mock/src/main/java/seng302/Data/RaceData.java b/mock/src/main/java/seng302/Data/RaceData.java index d4834d32..4c1391c9 100644 --- a/mock/src/main/java/seng302/Data/RaceData.java +++ b/mock/src/main/java/seng302/Data/RaceData.java @@ -4,9 +4,9 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import seng302.DataInput.RaceDataSource; import seng302.Exceptions.InvalidRaceDataException; -import SharedModel.BoatInRace; import SharedModel.GPSCoordinate; import SharedModel.Marker; +import seng302.Model.Boat; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -129,7 +129,7 @@ public class RaceData { private void appendParticipants() { Element participantsElement = doc.createElement("Participants"); - for (BoatInRace boat : dataSource.getBoats()) { + for (Boat boat : dataSource.getBoats()) { Element yachtElement = doc.createElement("Yacht"); yachtElement.setAttribute("SourceID", boat.getSourceID() + ""); participantsElement.appendChild(yachtElement); diff --git a/mock/src/main/java/seng302/DataInput/RaceDataSource.java b/mock/src/main/java/seng302/DataInput/RaceDataSource.java index f23a009c..115f3737 100644 --- a/mock/src/main/java/seng302/DataInput/RaceDataSource.java +++ b/mock/src/main/java/seng302/DataInput/RaceDataSource.java @@ -1,9 +1,9 @@ package seng302.DataInput; -import SharedModel.BoatInRace; import SharedModel.GPSCoordinate; import SharedModel.Leg; import SharedModel.Marker; +import seng302.Model.Boat; import java.util.List; @@ -11,7 +11,7 @@ import java.util.List; * Created by connortaylorbrown on 19/04/17. */ public interface RaceDataSource { - List getBoats(); + List getBoats(); List getLegs(); diff --git a/mock/src/main/java/seng302/DataInput/RaceXMLReader.java b/mock/src/main/java/seng302/DataInput/RaceXMLReader.java index 95ac8cac..010c1388 100644 --- a/mock/src/main/java/seng302/DataInput/RaceXMLReader.java +++ b/mock/src/main/java/seng302/DataInput/RaceXMLReader.java @@ -4,10 +4,10 @@ import javafx.scene.paint.Color; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; -import SharedModel.BoatInRace; import SharedModel.GPSCoordinate; import SharedModel.Leg; import SharedModel.Marker; +import seng302.Model.Boat; import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; @@ -20,7 +20,7 @@ import java.util.List; public class RaceXMLReader extends XMLReader implements RaceDataSource { private static double COORDINATEPADDING = 0.0005; private String raceID; - private List boats = new ArrayList<>(); + private List boats = new ArrayList<>(); private Color[] colors = {Color.BLUEVIOLET, Color.BLACK, Color.RED, Color.ORANGE, Color.DARKOLIVEGREEN, Color.LIMEGREEN};//TODO make this established in xml or come up with a better system. private List legs = new ArrayList<>(); private GPSCoordinate mark, startPt1, startPt2, finishPt1, finishPt2, leewardPt1, leewardPt2, windwardPt1, windwardPt2; @@ -87,7 +87,7 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource { String abbrev = getTextValueOfNode((Element) nBoats.item(i), "abbr"); double velo = Double.parseDouble(getTextValueOfNode((Element) nBoats.item(i), "speed")); int sourceID = Integer.parseInt(getTextValueOfNode((Element) nBoats.item(i), "sourceID")); - BoatInRace boat = new BoatInRace(name, velo, colors[i], abbrev, sourceID); + Boat boat = new Boat(name, velo, abbrev, sourceID); boat.setCurrentPosition(startPt1); if (legs.size() > 0) { boat.setCurrentLeg(legs.get(0)); @@ -301,7 +301,7 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource { return new GPSCoordinate(startLat, startLong); } - public List getBoats() { + public List getBoats() { return boats; } diff --git a/mock/src/main/java/seng302/Model/Boat.java b/mock/src/main/java/seng302/Model/Boat.java new file mode 100644 index 00000000..bc0d5300 --- /dev/null +++ b/mock/src/main/java/seng302/Model/Boat.java @@ -0,0 +1,154 @@ +package seng302.Model; + +import SharedModel.*; +import SharedModel.Leg; +import org.geotools.referencing.GeodeticCalculator; + + +/** + * Created by esa46 on 1/05/17. + */ +public class Boat { + private String name; + private double velocity; + private double scaledVelocity; + private String abbrev; + private int sourceID; + private SharedModel.Leg currentLeg; + private double distanceTravelledInLeg; + private GPSCoordinate currentPosition; + private long timeFinished = -1; + private boolean started = false; + private double heading; + + /** + * Boat initialiser which keeps all of the information of the boat. + * + * @param name Name of the Boat. + * @param velocity Speed in m/s that the boat travels at. + * @param abbrev nam abbreviation + * @param sourceID id of boat + */ + public Boat(String name, double velocity, String abbrev, int sourceID) { + this.velocity = velocity; + this.abbrev = abbrev; + this.name = name; + this.sourceID = sourceID; + } + + /** + * Calculates the azimuth of the travel via map coordinates of the raceMarkers + * + * @return the direction that the boat is heading towards in degrees (-180 to 180). + */ + public double calculateAzimuth() { + + GeodeticCalculator calc = new GeodeticCalculator(); + GPSCoordinate start = currentLeg.getStartMarker().getAverageGPSCoordinate(); + GPSCoordinate end = currentLeg.getEndMarker().getAverageGPSCoordinate(); + + calc.setStartingGeographicPoint(start.getLongitude(), start.getLatitude()); + calc.setDestinationGeographicPoint(end.getLongitude(), end.getLatitude()); + + return calc.getAzimuth(); + } + + public double calculateHeading() { + double azimuth = this.calculateAzimuth(); + + if (azimuth >= 0) { + return azimuth; + } else { + return azimuth + 360; + } + } + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getVelocity() { + return velocity; + } + + public void setVelocity(double velocity) { + this.velocity = velocity; + } + + public double getScaledVelocity() { + return scaledVelocity; + } + + public void setScaledVelocity(double scaledVelocity) { + this.scaledVelocity = scaledVelocity; + } + + public String getAbbrev() { + return abbrev; + } + + public void setAbbrev(String abbrev) { + this.abbrev = abbrev; + } + + public int getSourceID() { + return sourceID; + } + + public void setSourceID(int sourceID) { + this.sourceID = sourceID; + } + + public Leg getCurrentLeg() { + return currentLeg; + } + + public void setCurrentLeg(Leg currentLeg) { + this.currentLeg = currentLeg; + } + + public double getDistanceTravelledInLeg() { + return distanceTravelledInLeg; + } + + public void setDistanceTravelledInLeg(double distanceTravelledInLeg) { + this.distanceTravelledInLeg = distanceTravelledInLeg; + } + + public GPSCoordinate getCurrentPosition() { + return currentPosition; + } + + public void setCurrentPosition(GPSCoordinate currentPosition) { + this.currentPosition = currentPosition; + } + + public long getTimeFinished() { + return timeFinished; + } + + public void setTimeFinished(long timeFinished) { + this.timeFinished = timeFinished; + } + + public boolean isStarted() { + return started; + } + + public void setStarted(boolean started) { + this.started = started; + } + + public double getHeading() { + return heading; + } + + public void setHeading(double heading) { + this.heading = heading; + } +} diff --git a/mock/src/main/java/seng302/Model/Event.java b/mock/src/main/java/seng302/Model/Event.java index b29f51b1..4886d49a 100644 --- a/mock/src/main/java/seng302/Model/Event.java +++ b/mock/src/main/java/seng302/Model/Event.java @@ -41,8 +41,11 @@ public class Event { public void start() { + System.out.println("Sending Regatta"); sendRegattaData(); + System.out.println("Sending Race"); sendRaceData(); + System.out.println("Sending Boat"); sendBoatData(); Race newRace = new Race(raceDataSource, 15, mockOutput); diff --git a/mock/src/main/java/seng302/Model/Race.java b/mock/src/main/java/seng302/Model/Race.java index 8913dee9..d3f0165d 100644 --- a/mock/src/main/java/seng302/Model/Race.java +++ b/mock/src/main/java/seng302/Model/Race.java @@ -24,8 +24,8 @@ import java.util.Random; * Created by fwy13 on 3/03/17. */ public class Race implements Runnable { - //protected SharedModel.BoatInRace[] startingBoats; - protected ObservableList startingBoats; + //protected Boat[] startingBoats; + protected ObservableList startingBoats; protected List legs; protected int boatsFinished = 0; protected long totalTimeElapsed; @@ -44,7 +44,7 @@ public class Race implements Runnable { * @param legs Number of marks in order that the boats pass in order to complete the race. * @param scaleFactor for race */ - public Race(List boats, List legs, int scaleFactor, MockOutput mockOutput) { + public Race(List boats, List legs, int scaleFactor, MockOutput mockOutput) { this.startingBoats = FXCollections.observableArrayList(boats); this.legs = legs; @@ -142,7 +142,7 @@ public class Race implements Runnable { System.setProperty("javafx.animation.fullspeed", "true"); - for (SharedModel.BoatInRace boat : startingBoats) { + for (Boat boat : startingBoats) { boat.setStarted(true); } @@ -160,8 +160,8 @@ public class Race implements Runnable { ArrayList boatStatusMessages = new ArrayList(); //For each boat, we update it's position, and generate a BoatLocationMessage. - for (SharedModel.BoatInRace boat : startingBoats) { - if (boat != null && !boat.isFinished()) { + for (Boat boat : startingBoats) { + if (boat != null && boat.getTimeFinished() > 0) { //Update position. updatePosition(boat, Math.round(1000 / lastFPS) > 20 ? 15 : Math.round(1000 / lastFPS)); checkPosition(boat, totalTimeElapsed); @@ -179,21 +179,6 @@ public class Race implements Runnable { }.start(); } - /** - * Update position of boats in race, no position if on starting leg or DNF. - */ - protected void updatePositions() { - FXCollections.sort(startingBoats, (a, b) -> b.getCurrentLeg().getLegNumber() - a.getCurrentLeg().getLegNumber()); - for (SharedModel.BoatInRace boat : startingBoats) { - if (boat != null) { - boat.setPosition(Integer.toString(startingBoats.indexOf(boat) + 1)); - //System.out.println(boat.toString() + " " + boat.getPosition());//TEMP debug print - if (boat.getCurrentLeg().getName().equals("DNF") || boat.getCurrentLeg().getLegNumber() == 0) - boat.setPosition("-"); - } - } - //System.out.println("=====");//TEMP debug print - } public void initialiseBoats() { SharedModel.Leg officialStart = legs.get(0); @@ -202,7 +187,7 @@ public class Race implements Runnable { ArrayList startMarkers = getSpreadStartingPositions(); for (int i = 0; i < startingBoats.size(); i++) { - SharedModel.BoatInRace boat = startingBoats.get(i); + Boat boat = startingBoats.get(i); if (boat != null) { boat.setScaledVelocity(boat.getVelocity() * scaleFactor); SharedModel.Leg startLeg = new SharedModel.Leg(name, 0); @@ -271,7 +256,7 @@ public class Race implements Runnable { * @param boat to be updated * @param millisecondsElapsed since last update */ - protected void updatePosition(SharedModel.BoatInRace boat, int millisecondsElapsed) { + protected void updatePosition(Boat boat, int millisecondsElapsed) { //distanceTravelled = velocity (nm p hr) * time taken to update loop double distanceTravelled = (boat.getScaledVelocity() * millisecondsElapsed) / 3600000; @@ -289,17 +274,17 @@ public class Race implements Runnable { } } - protected void checkPosition(SharedModel.BoatInRace boat, long timeElapsed) { + protected void checkPosition(Boat boat, long timeElapsed) { if (boat.getDistanceTravelledInLeg() > boat.getCurrentLeg().getDistance()) { //boat has passed onto new leg if (boat.getCurrentLeg().getName().equals("Finish")) { //boat has finished boatsFinished++; - boat.setFinished(true); + boat.setTimeFinished(timeElapsed); boat.setTimeFinished(timeElapsed); } else if (doNotFinish()) { boatsFinished++; - boat.setFinished(true); + boat.setTimeFinished(timeElapsed); boat.setCurrentLeg(new SharedModel.Leg("DNF", -1)); boat.setVelocity(0); boat.setScaledVelocity(0); @@ -313,19 +298,17 @@ public class Race implements Runnable { //Add overshoot distance into the distance travelled for the next leg boat.setDistanceTravelledInLeg(boat.getDistanceTravelledInLeg()); } - //Update the boat display table in the GUI to reflect the leg change - updatePositions(); } } /** * Returns the boats that have started the race. * - * @return ObservableList of SharedModel.BoatInRace class that participated in the race. + * @return ObservableList of Boat class that participated in the race. * @see ObservableList - * @see SharedModel.BoatInRace + * @see Boat */ - public ObservableList getStartingBoats() { + public ObservableList getStartingBoats() { return startingBoats; } } diff --git a/mock/src/test/java/seng302/Model/BoatInRaceTest.java b/mock/src/test/java/seng302/Model/BoatTest.java similarity index 57% rename from mock/src/test/java/seng302/Model/BoatInRaceTest.java rename to mock/src/test/java/seng302/Model/BoatTest.java index e651944e..1c9ed3e8 100644 --- a/mock/src/test/java/seng302/Model/BoatInRaceTest.java +++ b/mock/src/test/java/seng302/Model/BoatTest.java @@ -9,11 +9,11 @@ import static junit.framework.TestCase.*; /** * Created by esa46 on 22/03/17. */ -public class BoatInRaceTest { +public class BoatTest { private GPSCoordinate ORIGIN_COORDS = new GPSCoordinate(0, 0); - private SharedModel.BoatInRace TEST_BOAT = new SharedModel.BoatInRace("Test", 1, Color.ALICEBLUE, "tt", 1); + private Boat TEST_BOAT = new Boat("Test", 1, "tt", 1); @Test @@ -95,61 +95,5 @@ public class BoatInRaceTest { assertEquals(TEST_BOAT.calculateHeading(), 270, 1e-8); } - @Test - public void createNewBoatCreatesInstanceOfSuperClass() { - - SharedModel.BoatInRace testBoat = new SharedModel.BoatInRace("Boat", 20, Color.ALICEBLUE, "tt", 1); - testBoat.setName("Name can change"); - assertTrue(testBoat instanceof SharedModel.Boat); - assertTrue(testBoat.getCurrentLeg() == null); - assertTrue(testBoat.getCurrentPosition() == null); - assertTrue(testBoat.toString().contains("Name can change")); - assertEquals(testBoat.getVelocity(), 20.0); - assertTrue(testBoat.getVelocityProp().toString().contains("20")); - assertTrue(testBoat.getAbbrev().equals("tt")); - assertTrue(testBoat.getColour().equals(Color.ALICEBLUE)); - assertEquals(testBoat.getSourceID(), 1); - assertFalse(testBoat.isFinished()); - } - - - @Test - public void getWakeAtProperHeading() throws Exception { - SharedModel.BoatInRace boat = new SharedModel.BoatInRace("Test", 1, Color.ALICEBLUE, "tt", 1); - - // Construct leg of 0 degrees - SharedModel.Marker startMarker = new SharedModel.Marker(ORIGIN_COORDS); - SharedModel.Marker endMarker = new SharedModel.Marker(new GPSCoordinate(50, 0)); - SharedModel.Leg leg0deg = new SharedModel.Leg("Start", startMarker, endMarker, 0); - boat.setCurrentLeg(leg0deg); - boat.setCurrentPosition(new GPSCoordinate(0, 0)); - - assertEquals(0, boat.calculateHeading(), 1e-8); - - // Construct leg from wake - heading should be 180 degrees - SharedModel.Leg leg180deg = new SharedModel.Leg("Start", startMarker, new SharedModel.Marker(boat.getWake()), 0); - boat.setCurrentLeg(leg180deg); - assertEquals(180, boat.calculateHeading(), 1e-8); - } - - - @Test - public void getWakeProportionalToVelocity() throws Exception { - SharedModel.BoatInRace boat = new SharedModel.BoatInRace("Test", 10, Color.ALICEBLUE, "tt", 1); - - // Construct leg of 0 degrees at 0 N - SharedModel.Marker startMarker = new SharedModel.Marker(ORIGIN_COORDS); - SharedModel.Marker endMarker = new SharedModel.Marker(new GPSCoordinate(50, 0)); - SharedModel.Leg leg0deg = new SharedModel.Leg("Start", startMarker, endMarker, 0); - boat.setCurrentLeg(leg0deg); - boat.setCurrentPosition(new GPSCoordinate(0, 0)); - - // Get latitude of endpoint of wake at 10 kn (longitude is 0) - double endpointAt10Kn = boat.getWake().getLatitude(); - - // Latitude of endpoint at 20 kn should be twice endpoint at 10 kn - boat.setVelocity(20); - assertEquals(2 * endpointAt10Kn, boat.getWake().getLatitude(), 1e-8); - } } diff --git a/mock/src/test/java/seng302/Model/RaceTest.java b/mock/src/test/java/seng302/Model/RaceTest.java index 273f9dc1..9111c422 100644 --- a/mock/src/test/java/seng302/Model/RaceTest.java +++ b/mock/src/test/java/seng302/Model/RaceTest.java @@ -75,9 +75,9 @@ public class RaceTest { // // @Test // public void timerCanBeDisabled() { -// SharedModel.BoatInRace boat1 = new SharedModel.BoatInRace("Test 1", 10000, Color.ALICEBLUE, "t1", 1); -// SharedModel.BoatInRace boat2 = new SharedModel.BoatInRace("Test 2", 10000, Color.BURLYWOOD, "t2", 2); -// List boats = new ArrayList<>(); +// Boat boat1 = new Boat("Test 1", 10000, Color.ALICEBLUE, "t1", 1); +// Boat boat2 = new Boat("Test 2", 10000, Color.BURLYWOOD, "t2", 2); +// List boats = new ArrayList<>(); // boats.add(boat1); // boats.add(boat2); // @@ -96,12 +96,12 @@ public class RaceTest { // @Test // public void checkPositionUpdatesNumberFinishedBoats() { // -// SharedModel.BoatInRace finishedBoat = new SharedModel.BoatInRace("Test", 1000, Color.ALICEBLUE, "tt", 1); +// Boat finishedBoat = new Boat("Test", 1000, Color.ALICEBLUE, "tt", 1); // finishedBoat.setDistanceTravelledInLeg(500); // // finishedBoat.setCurrentLeg(FINISH_LEG); // -// ArrayList boats = new ArrayList<>(); +// ArrayList boats = new ArrayList<>(); // boats.add(finishedBoat); // // ArrayList legs = new ArrayList<>(); @@ -121,12 +121,12 @@ public class RaceTest { // @Test // public void checkPositionDoesntUpdateNumberFinishedBoats() { // -// SharedModel.BoatInRace unFinishedBoat = new SharedModel.BoatInRace("Test", 10, Color.ALICEBLUE, "tt", 1); +// Boat unFinishedBoat = new Boat("Test", 10, Color.ALICEBLUE, "tt", 1); // unFinishedBoat.setDistanceTravelledInLeg(0); // // unFinishedBoat.setCurrentLeg(FINISH_LEG); // -// ArrayList boats = new ArrayList<>(); +// ArrayList boats = new ArrayList<>(); // boats.add(unFinishedBoat); // // ArrayList legs = new ArrayList<>(); @@ -144,7 +144,7 @@ public class RaceTest { // @Test // public void distanceTravelledBeforeUpdatingLegIsRetained() { // -// ArrayList boats = new ArrayList<>(); +// ArrayList boats = new ArrayList<>(); // // ArrayList legs = new ArrayList<>(); // @@ -154,7 +154,7 @@ public class RaceTest { // Race race = new Race(boats, legs, 1, mockOutput); // race.setDnfChance(0); // -// SharedModel.BoatInRace unFinishedBoat = new SharedModel.BoatInRace("Test", 10, Color.ALICEBLUE, "tt", 4); +// Boat unFinishedBoat = new Boat("Test", 10, Color.ALICEBLUE, "tt", 4); // unFinishedBoat.setDistanceTravelledInLeg(100); // unFinishedBoat.setCurrentLeg(START_LEG); // @@ -168,7 +168,7 @@ public class RaceTest { // @Test // public void timerDelaysByHalfSecond() throws InterruptedException { // -// ArrayList boats = new ArrayList<>(); +// ArrayList boats = new ArrayList<>(); // // ArrayList legs = new ArrayList<>(); // legs.add(START_LEG); @@ -194,11 +194,11 @@ public class RaceTest { // float vel2 = (float) 1.999; // float vel3 = (float) 32.5; // float vel4 = 500; -// SharedModel.BoatInRace boat1 = new SharedModel.BoatInRace("test", vel1, Color.ALICEBLUE, "tt",1); -// SharedModel.BoatInRace boat2 = new SharedModel.BoatInRace("test", vel2, Color.ALICEBLUE, "tt", 2); -// SharedModel.BoatInRace boat3 = new SharedModel.BoatInRace("test", vel3, Color.ALICEBLUE, "tt", 3); -// SharedModel.BoatInRace boat4 = new SharedModel.BoatInRace("test", vel4, Color.ALICEBLUE, "tt", 4); -// ArrayList boats = new ArrayList<>(); +// Boat boat1 = new Boat("test", vel1, Color.ALICEBLUE, "tt",1); +// Boat boat2 = new Boat("test", vel2, Color.ALICEBLUE, "tt", 2); +// Boat boat3 = new Boat("test", vel3, Color.ALICEBLUE, "tt", 3); +// Boat boat4 = new Boat("test", vel4, Color.ALICEBLUE, "tt", 4); +// ArrayList boats = new ArrayList<>(); // boats.add(boat1); // boats.add(boat2); // boats.add(boat3); diff --git a/mock/src/test/java/seng302/Model/RaceXMLTest.java b/mock/src/test/java/seng302/Model/RaceXMLTest.java index 1450860d..bb06111d 100644 --- a/mock/src/test/java/seng302/Model/RaceXMLTest.java +++ b/mock/src/test/java/seng302/Model/RaceXMLTest.java @@ -5,7 +5,7 @@ package seng302.Model;/** import org.junit.Ignore; import org.junit.Test; import seng302.DataInput.RaceXMLReader; -import SharedModel.BoatInRace; + import java.util.List; @@ -29,29 +29,29 @@ public class RaceXMLTest { try { RaceXMLReader raceXMLReader = new RaceXMLReader("raceXML/bermuda_AC35.xml", false); raceXMLReader.readBoats(); - List boats = raceXMLReader.getBoats(); + List boats = raceXMLReader.getBoats(); assertTrue(boats.size() == 6); //test boat 1 - assertEquals(boats.get(0).getName().getValue(), "ORACLE TEAM USA"); + assertEquals(boats.get(0).getName(), "ORACLE TEAM USA"); assertTrue(boats.get(0).getVelocity() == 20); //test boat 2 - assertEquals(boats.get(1).getName().getValue(), "Land Rover BAR"); + assertEquals(boats.get(1).getName(), "Land Rover BAR"); assertTrue(boats.get(1).getVelocity() == 30); assertEquals(boats.get(1).getAbbrev(), "GBR"); //test boat 3 - assertEquals(boats.get(2).getName().getValue(), "SoftBank Team Japan"); + assertEquals(boats.get(2).getName(), "SoftBank Team Japan"); assertTrue(boats.get(2).getVelocity() == 25); assertEquals(boats.get(2).getAbbrev(), "JPN"); //test boat 4 - assertEquals(boats.get(3).getName().getValue(), "Groupama Team France"); + assertEquals(boats.get(3).getName(), "Groupama Team France"); assertTrue(boats.get(3).getVelocity() == 20); assertEquals(boats.get(3).getAbbrev(), "FRA"); //test boat 5 - assertEquals(boats.get(4).getName().getValue(), "Artemis Racing"); + assertEquals(boats.get(4).getName(), "Artemis Racing"); assertTrue(boats.get(4).getVelocity() == 29); assertEquals(boats.get(4).getAbbrev(), "SWE"); //test boat 6 - assertEquals(boats.get(5).getName().getValue(), "Emirates Team New Zealand"); + assertEquals(boats.get(5).getName(), "Emirates Team New Zealand"); assertTrue(boats.get(5).getVelocity() == 62); assertEquals(boats.get(5).getAbbrev(), "NZL"); } catch (Exception e) { diff --git a/network/src/main/java/seng302/Networking/MockOutput.java b/network/src/main/java/seng302/Networking/MockOutput.java index 7dcba2d4..9f668ebc 100644 --- a/network/src/main/java/seng302/Networking/MockOutput.java +++ b/network/src/main/java/seng302/Networking/MockOutput.java @@ -1,7 +1,7 @@ package seng302.Networking; -import SharedModel.BoatInRace; -import com.sun.jmx.remote.internal.ArrayQueue; + +import seng302.Model.Boat; import seng302.Networking.MessageEncoders.RaceVisionByteEncoder; import seng302.Networking.MessageEncoders.XMLMessageEncoder; import seng302.Networking.Utils.BoatLocationMessage; @@ -10,7 +10,7 @@ import seng302.Networking.Utils.RaceStatus; import java.io.*; import java.net.*; -import java.util.ArrayList; + import java.util.concurrent.ArrayBlockingQueue; /** @@ -37,7 +37,7 @@ public class MockOutput implements Runnable public MockOutput() throws IOException { lastHeartbeatTime = System.currentTimeMillis(); - serverSocket = new ServerSocket(5003); + serverSocket = new ServerSocket(4942); } /** * calculates the time since last heartbeat @@ -78,7 +78,7 @@ public class MockOutput implements Runnable /** * Used to give the mocOutput information about boat location to be made into a message and sent */ - public synchronized void parseBoatLocation(BoatInRace boat){ + public synchronized void parseBoatLocation(Boat boat){ BoatLocationMessage boatLocationMessage = new BoatLocationMessage(boat, boatLocationSequenceNumber); //iterates the sequence number boatLocationSequenceNumber++; diff --git a/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java b/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java index 033c60fe..edb25001 100644 --- a/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java +++ b/network/src/main/java/seng302/Networking/Utils/BoatLocationMessage.java @@ -4,9 +4,8 @@ package seng302.Networking.Utils; * Created by f123 on 21-Apr-17. */ -import SharedModel.BoatInRace; import SharedModel.Constants; -import SharedModel.GPSCoordinate; +import seng302.Model.Boat; /** * Represents the information in a boat location message (AC streaming spec: 4.9). @@ -149,7 +148,7 @@ public class BoatLocationMessage extends AC35Data this.rudderAngle = rudderAngle; } - public BoatLocationMessage(BoatInRace boat, long sequenceNumber) { + public BoatLocationMessage(Boat boat, long sequenceNumber) { super(MessageType.BOATLOCATION); this.messageVersionNumber = (byte) 1; diff --git a/network/src/main/java/seng302/Networking/VisualiserInput.java b/network/src/main/java/seng302/Networking/VisualiserInput.java index 96b5a3ae..b7896655 100644 --- a/network/src/main/java/seng302/Networking/VisualiserInput.java +++ b/network/src/main/java/seng302/Networking/VisualiserInput.java @@ -1,24 +1,17 @@ package seng302.Networking; import org.xml.sax.SAXException; import seng302.Mock.*; -import seng302.Networking.BinaryMessageDecoder; -import seng302.Networking.MessageDecoders.*; import seng302.Networking.Utils.*; import javax.xml.parsers.ParserConfigurationException; 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; -import java.util.concurrent.TimeUnit; -import static seng302.Networking.Utils.ByteConverter.bytesToInt; import static seng302.Networking.Utils.ByteConverter.bytesToShort; -import static seng302.Networking.Utils.MessageType.*; /** * TCP server to act as the mock AC35 streaming interface @@ -99,6 +92,7 @@ public class VisualiserInput implements Runnable public void run(){ try{ + System.out.println("running"); //receiver loop that gets the input boolean receiverLoop = true; while(receiverLoop) { @@ -132,7 +126,7 @@ public class VisualiserInput implements Runnable //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){ diff --git a/visualiser/src/main/java/seng302/Model/Boat.java b/visualiser/src/main/java/seng302/Model/Boat.java index c1102b3b..3453a2f4 100644 --- a/visualiser/src/main/java/seng302/Model/Boat.java +++ b/visualiser/src/main/java/seng302/Model/Boat.java @@ -28,6 +28,8 @@ public class Boat { protected StringProperty position; protected boolean started = false; private double wakeScale = 1 / 50; + private int sourceID; + protected Queue track = new ConcurrentLinkedQueue<>(); protected long nextValidTime = 0; @@ -226,4 +228,8 @@ public class Boat { public StringProperty getCurrentLegName() { return currentLegName; } + + public int getSourceID() { + return this.sourceID; + } }