From 3f748bfdb6a686bd71007bf6504a887689f1a354 Mon Sep 17 00:00:00 2001 From: Erika Savell Date: Mon, 1 May 2017 15:06:56 +1200 Subject: [PATCH 1/2] 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; + } } From 9acd519d7b428ed8fa5f73a05387e2014addab86 Mon Sep 17 00:00:00 2001 From: Erika Savell Date: Mon, 1 May 2017 15:49:07 +1200 Subject: [PATCH 2/2] Removed the rest of the shared model classes needed by mock #story[778] --- mock/pom.xml | 6 - mock/src/main/java/seng302/Constants.java | 16 + mock/src/main/java/seng302/Data/RaceData.java | 4 +- .../seng302/DataInput/RaceDataSource.java | 7 +- .../java/seng302/DataInput/RaceXMLReader.java | 7 +- .../seng302/DataInput/RegattaDataSource.java | 3 +- .../seng302/DataInput/RegattaXMLReader.java | 3 +- mock/src/main/java/seng302/Model/Boat.java | 4 +- .../java/seng302/Model}/GPSCoordinate.java | 2 +- .../src/main/java/seng302/Model}/Leg.java | 3 +- .../src/main/java/seng302/Model}/Marker.java | 3 +- mock/src/main/java/seng302/Model/Race.java | 44 +-- .../main/java/seng302/Model/RaceClock.java | 2 +- mock/src/main/java/seng302/Model/Regatta.java | 99 ++++++ .../seng302/DataInput/RegattaXMLTest.java | 2 +- .../src/test/java/seng302/Model/BoatTest.java | 53 ++-- mock/src/test/java/seng302/Model/LegTest.java | 6 +- .../test/java/seng302/Model/MarkerTest.java | 2 - .../src/test/java/seng302/Model/RaceTest.java | 18 +- .../seng302/Networking/VisualiserInput.java | 7 +- .../src/main/java/SharedModel/Boat.java | 93 ------ .../src/main/java/SharedModel/BoatInRace.java | 296 ------------------ 22 files changed, 202 insertions(+), 478 deletions(-) create mode 100644 mock/src/main/java/seng302/Constants.java rename {sharedModel/src/main/java/SharedModel => mock/src/main/java/seng302/Model}/GPSCoordinate.java (98%) rename {sharedModel/src/main/java/SharedModel => mock/src/main/java/seng302/Model}/Leg.java (98%) rename {sharedModel/src/main/java/SharedModel => mock/src/main/java/seng302/Model}/Marker.java (98%) create mode 100644 mock/src/main/java/seng302/Model/Regatta.java delete mode 100644 sharedModel/src/main/java/SharedModel/Boat.java delete mode 100644 sharedModel/src/main/java/SharedModel/BoatInRace.java diff --git a/mock/pom.xml b/mock/pom.xml index 3ccd5249..a81f8ac5 100644 --- a/mock/pom.xml +++ b/mock/pom.xml @@ -52,12 +52,6 @@ 1.0-SNAPSHOT - - seng302 - sharedModel - 1.0-SNAPSHOT - - diff --git a/mock/src/main/java/seng302/Constants.java b/mock/src/main/java/seng302/Constants.java new file mode 100644 index 00000000..a33399e8 --- /dev/null +++ b/mock/src/main/java/seng302/Constants.java @@ -0,0 +1,16 @@ +package seng302; + +/** + * Constants that are used throughout the program + * Created by Erika on 19-Mar-17. + */ +public class Constants { + + public static final int NMToMetersConversion = 1852; // 1 nautical mile = 1852 meters + + //Knots x this = meters per second. + public static final double KnotsToMetersPerSecondConversionFactor = 0.514444; + + public static final double wakeScale = 10; + +} diff --git a/mock/src/main/java/seng302/Data/RaceData.java b/mock/src/main/java/seng302/Data/RaceData.java index 4c1391c9..f286fad0 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.GPSCoordinate; -import SharedModel.Marker; import seng302.Model.Boat; +import seng302.Model.GPSCoordinate; +import seng302.Model.Marker; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; diff --git a/mock/src/main/java/seng302/DataInput/RaceDataSource.java b/mock/src/main/java/seng302/DataInput/RaceDataSource.java index 115f3737..52e2fd7d 100644 --- a/mock/src/main/java/seng302/DataInput/RaceDataSource.java +++ b/mock/src/main/java/seng302/DataInput/RaceDataSource.java @@ -1,9 +1,10 @@ package seng302.DataInput; -import SharedModel.GPSCoordinate; -import SharedModel.Leg; -import SharedModel.Marker; +; import seng302.Model.Boat; +import seng302.Model.GPSCoordinate; +import seng302.Model.Leg; +import seng302.Model.Marker; import java.util.List; diff --git a/mock/src/main/java/seng302/DataInput/RaceXMLReader.java b/mock/src/main/java/seng302/DataInput/RaceXMLReader.java index 010c1388..6a56891d 100644 --- a/mock/src/main/java/seng302/DataInput/RaceXMLReader.java +++ b/mock/src/main/java/seng302/DataInput/RaceXMLReader.java @@ -4,10 +4,11 @@ import javafx.scene.paint.Color; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; -import SharedModel.GPSCoordinate; -import SharedModel.Leg; -import SharedModel.Marker; + import seng302.Model.Boat; +import seng302.Model.GPSCoordinate; +import seng302.Model.Leg; +import seng302.Model.Marker; import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; diff --git a/mock/src/main/java/seng302/DataInput/RegattaDataSource.java b/mock/src/main/java/seng302/DataInput/RegattaDataSource.java index 98b3900c..69a04822 100644 --- a/mock/src/main/java/seng302/DataInput/RegattaDataSource.java +++ b/mock/src/main/java/seng302/DataInput/RegattaDataSource.java @@ -1,6 +1,7 @@ package seng302.DataInput; -import SharedModel.Regatta; + +import seng302.Model.Regatta; /** * Created by zwu18 on 25/04/17. diff --git a/mock/src/main/java/seng302/DataInput/RegattaXMLReader.java b/mock/src/main/java/seng302/DataInput/RegattaXMLReader.java index 17238c76..dfa9a41b 100644 --- a/mock/src/main/java/seng302/DataInput/RegattaXMLReader.java +++ b/mock/src/main/java/seng302/DataInput/RegattaXMLReader.java @@ -3,7 +3,8 @@ package seng302.DataInput; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; -import SharedModel.Regatta; +import seng302.Model.Regatta; + import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; diff --git a/mock/src/main/java/seng302/Model/Boat.java b/mock/src/main/java/seng302/Model/Boat.java index bc0d5300..2709897a 100644 --- a/mock/src/main/java/seng302/Model/Boat.java +++ b/mock/src/main/java/seng302/Model/Boat.java @@ -1,7 +1,5 @@ package seng302.Model; -import SharedModel.*; -import SharedModel.Leg; import org.geotools.referencing.GeodeticCalculator; @@ -14,7 +12,7 @@ public class Boat { private double scaledVelocity; private String abbrev; private int sourceID; - private SharedModel.Leg currentLeg; + private Leg currentLeg; private double distanceTravelledInLeg; private GPSCoordinate currentPosition; private long timeFinished = -1; diff --git a/sharedModel/src/main/java/SharedModel/GPSCoordinate.java b/mock/src/main/java/seng302/Model/GPSCoordinate.java similarity index 98% rename from sharedModel/src/main/java/SharedModel/GPSCoordinate.java rename to mock/src/main/java/seng302/Model/GPSCoordinate.java index 9eefbb0d..020ac0dd 100644 --- a/sharedModel/src/main/java/SharedModel/GPSCoordinate.java +++ b/mock/src/main/java/seng302/Model/GPSCoordinate.java @@ -1,4 +1,4 @@ -package SharedModel; +package seng302.Model; /** * GPS Coordinate for the world map. diff --git a/sharedModel/src/main/java/SharedModel/Leg.java b/mock/src/main/java/seng302/Model/Leg.java similarity index 98% rename from sharedModel/src/main/java/SharedModel/Leg.java rename to mock/src/main/java/seng302/Model/Leg.java index b3915ce5..7a7b9b0e 100644 --- a/sharedModel/src/main/java/SharedModel/Leg.java +++ b/mock/src/main/java/seng302/Model/Leg.java @@ -1,6 +1,7 @@ -package SharedModel; +package seng302.Model; import org.geotools.referencing.GeodeticCalculator; +import seng302.Constants; /** diff --git a/sharedModel/src/main/java/SharedModel/Marker.java b/mock/src/main/java/seng302/Model/Marker.java similarity index 98% rename from sharedModel/src/main/java/SharedModel/Marker.java rename to mock/src/main/java/seng302/Model/Marker.java index c194725d..a5854449 100644 --- a/sharedModel/src/main/java/SharedModel/Marker.java +++ b/mock/src/main/java/seng302/Model/Marker.java @@ -1,7 +1,6 @@ -package SharedModel; +package seng302.Model; import org.geotools.referencing.GeodeticCalculator; - import java.awt.geom.Point2D; /** diff --git a/mock/src/main/java/seng302/Model/Race.java b/mock/src/main/java/seng302/Model/Race.java index d3f0165d..0dc76bd5 100644 --- a/mock/src/main/java/seng302/Model/Race.java +++ b/mock/src/main/java/seng302/Model/Race.java @@ -7,6 +7,7 @@ import javafx.collections.ObservableList; import org.geotools.referencing.GeodeticCalculator; +import seng302.Constants; import seng302.DataInput.RaceDataSource; import seng302.Networking.MockOutput; import seng302.Networking.Utils.BoatStatusMessage; @@ -26,7 +27,7 @@ import java.util.Random; public class Race implements Runnable { //protected Boat[] startingBoats; protected ObservableList startingBoats; - protected List legs; + protected List legs; protected int boatsFinished = 0; protected long totalTimeElapsed; protected int scaleFactor; @@ -44,11 +45,11 @@ 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; - this.legs.add(new SharedModel.Leg("Finish", this.legs.size())); + this.legs.add(new Leg("Finish", this.legs.size())); this.scaleFactor = scaleFactor; this.mockOutput = mockOutput; @@ -68,14 +69,14 @@ public class Race implements Runnable { this.raceId = raceId; } /** - * Calculates the boats next SharedModel.GPS position based on its distance travelled and heading + * Calculates the boats next GPS position based on its distance travelled and heading * - * @param oldCoordinates SharedModel.GPS coordinates of the boat's starting position + * @param oldCoordinates GPS coordinates of the boat's starting position * @param distanceTravelled distance in nautical miles * @param azimuth boat's current direction. Value between -180 and 180 * @return The boat's new coordinate */ - public static SharedModel.GPSCoordinate calculatePosition(SharedModel.GPSCoordinate oldCoordinates, double distanceTravelled, double azimuth) { + public static GPSCoordinate calculatePosition(GPSCoordinate oldCoordinates, double distanceTravelled, double azimuth) { //Find new coordinate using current heading and distance @@ -84,11 +85,11 @@ public class Race implements Runnable { Point2D startPoint = new Point2D.Double(oldCoordinates.getLongitude(), oldCoordinates.getLatitude()); geodeticCalculator.setStartingGeographicPoint(startPoint); //load direction and distance tranvelled into calculator - geodeticCalculator.setDirection(azimuth, distanceTravelled * SharedModel.Constants.NMToMetersConversion); + geodeticCalculator.setDirection(azimuth, distanceTravelled * Constants.NMToMetersConversion); //get new point Point2D endPoint = geodeticCalculator.getDestinationGeographicPoint(); - return new SharedModel.GPSCoordinate(endPoint.getY(), endPoint.getX()); + return new GPSCoordinate(endPoint.getY(), endPoint.getX()); } /** @@ -96,6 +97,8 @@ public class Race implements Runnable { */ public void run() { initialiseBoats(); + + System.out.println("Beginning"); countdownTimer(); } @@ -118,6 +121,7 @@ public class Race implements Runnable { @Override public void handle(long arg0) { timeLeft = startTime - currentTime; + System.out.println(timeLeft); if (timeLeft <= 0) { stop(); simulateRace(); @@ -140,6 +144,7 @@ public class Race implements Runnable { */ private void simulateRace() { + System.out.println("Running"); System.setProperty("javafx.animation.fullspeed", "true"); for (Boat boat : startingBoats) { @@ -161,11 +166,12 @@ public class Race implements Runnable { //For each boat, we update it's position, and generate a BoatLocationMessage. for (Boat boat : startingBoats) { - if (boat != null && boat.getTimeFinished() > 0) { + if (boat != null && boat.getTimeFinished() < 0) { //Update position. updatePosition(boat, Math.round(1000 / lastFPS) > 20 ? 15 : Math.round(1000 / lastFPS)); checkPosition(boat, totalTimeElapsed); mockOutput.parseBoatLocation(boat); + System.out.println("Sending boat status"); boatStatusMessages.add(new BoatStatusMessage(boat.getSourceID(), boat.getCurrentLeg().getLegNumber() >= 0 ? BoatStatus.RACING : BoatStatus.DNF, boat.getCurrentLeg().getLegNumber())); } else { @@ -181,16 +187,16 @@ public class Race implements Runnable { public void initialiseBoats() { - SharedModel.Leg officialStart = legs.get(0); + Leg officialStart = legs.get(0); String name = officialStart.getName(); - SharedModel.Marker endMarker = officialStart.getEndMarker(); + Marker endMarker = officialStart.getEndMarker(); - ArrayList startMarkers = getSpreadStartingPositions(); + ArrayList startMarkers = getSpreadStartingPositions(); for (int i = 0; i < startingBoats.size(); i++) { Boat boat = startingBoats.get(i); if (boat != null) { boat.setScaledVelocity(boat.getVelocity() * scaleFactor); - SharedModel.Leg startLeg = new SharedModel.Leg(name, 0); + Leg startLeg = new Leg(name, 0); boat.setCurrentPosition(startMarkers.get(i).getAverageGPSCoordinate()); startLeg.setStartMarker(startMarkers.get(i)); startLeg.setEndMarker(endMarker); @@ -206,10 +212,10 @@ public class Race implements Runnable { * * @return list of starting positions */ - public ArrayList getSpreadStartingPositions() { + public ArrayList getSpreadStartingPositions() { int nBoats = startingBoats.size(); - SharedModel.Marker marker = legs.get(0).getStartMarker(); + Marker marker = legs.get(0).getStartMarker(); GeodeticCalculator initialCalc = new GeodeticCalculator(); initialCalc.setStartingGeographicPoint(marker.getMark1().getLongitude(), marker.getMark1().getLatitude()); @@ -221,12 +227,12 @@ public class Race implements Runnable { GeodeticCalculator positionCalc = new GeodeticCalculator(); positionCalc.setStartingGeographicPoint(marker.getMark1().getLongitude(), marker.getMark1().getLatitude()); - ArrayList positions = new ArrayList<>(); + ArrayList positions = new ArrayList<>(); for (int i = 0; i < nBoats; i++) { positionCalc.setDirection(azimuth, distanceBetweenBoats); Point2D position = positionCalc.getDestinationGeographicPoint(); - positions.add(new SharedModel.Marker(new SharedModel.GPSCoordinate(position.getY(), position.getX()))); + positions.add(new Marker(new GPSCoordinate(position.getY(), position.getX()))); positionCalc = new GeodeticCalculator(); positionCalc.setStartingGeographicPoint(position); @@ -285,14 +291,14 @@ public class Race implements Runnable { } else if (doNotFinish()) { boatsFinished++; boat.setTimeFinished(timeElapsed); - boat.setCurrentLeg(new SharedModel.Leg("DNF", -1)); + boat.setCurrentLeg(new Leg("DNF", -1)); boat.setVelocity(0); boat.setScaledVelocity(0); } else { //Calculate how much the boat overshot the marker by boat.setDistanceTravelledInLeg(boat.getDistanceTravelledInLeg() - boat.getCurrentLeg().getDistance()); //Move boat on to next leg - SharedModel.Leg nextLeg = legs.get(boat.getCurrentLeg().getLegNumber() + 1); + Leg nextLeg = legs.get(boat.getCurrentLeg().getLegNumber() + 1); boat.setCurrentLeg(nextLeg); //Add overshoot distance into the distance travelled for the next leg diff --git a/mock/src/main/java/seng302/Model/RaceClock.java b/mock/src/main/java/seng302/Model/RaceClock.java index 98ce31bf..0be11147 100644 --- a/mock/src/main/java/seng302/Model/RaceClock.java +++ b/mock/src/main/java/seng302/Model/RaceClock.java @@ -4,7 +4,7 @@ import com.github.bfsmith.geotimezone.TimeZoneLookup; import com.github.bfsmith.geotimezone.TimeZoneResult; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; -import SharedModel.GPSCoordinate; + import java.time.LocalDateTime; import java.time.ZoneId; diff --git a/mock/src/main/java/seng302/Model/Regatta.java b/mock/src/main/java/seng302/Model/Regatta.java new file mode 100644 index 00000000..0060f2c4 --- /dev/null +++ b/mock/src/main/java/seng302/Model/Regatta.java @@ -0,0 +1,99 @@ +package seng302.Model; + +/** + * Created by jjg64 on 19/04/17. + */ +public class Regatta { + int regattaID; + String RegattaName; + int raceID = 0; + String courseName; + double centralLatitude; + double centralLongitude; + double centralAltitude; + float utcOffset; + float magneticVariation; + + public Regatta(int regattaID, String regattaName, String courseName, double centralLatitude, double centralLongitude, double centralAltitude, float utcOffset, float magneticVariation) { + this.regattaID = regattaID; + this.RegattaName = regattaName; + this.courseName = courseName; + this.centralLatitude = centralLatitude; + this.centralLongitude = centralLongitude; + this.centralAltitude = centralAltitude; + this.utcOffset = utcOffset; + this.magneticVariation = magneticVariation; + } + + public int getRegattaID() { + return regattaID; + } + + public void setRegattaID(int ID) { + this.regattaID = ID; + } + + public String getRegattaName() { + return RegattaName; + } + + public void setRegattaName(String regattaName) { + RegattaName = regattaName; + } + + public int getRaceID() { + return raceID; + } + + public void setRaceID(int raceID) { + this.raceID = raceID; + } + + public String getCourseName() { + return courseName; + } + + public void setCourseName(String courseName) { + this.courseName = courseName; + } + + public double getCentralLatitude() { + return centralLatitude; + } + + public void setCentralLatitude(double centralLatitude) { + this.centralLatitude = centralLatitude; + } + + public double getCentralLongitude() { + return centralLongitude; + } + + public void setCentralLongitude(double centralLongitude) { + this.centralLongitude = centralLongitude; + } + + public double getCentralAltitude() { + return centralAltitude; + } + + public void setCentralAltitude(double centralAltitude) { + this.centralAltitude = centralAltitude; + } + + public float getUtcOffset() { + return utcOffset; + } + + public void setUtcOffset(float utcOffset) { + this.utcOffset = utcOffset; + } + + public float getMagneticVariation() { + return magneticVariation; + } + + public void setMagneticVariation(float magneticVariation) { + this.magneticVariation = magneticVariation; + } +} diff --git a/mock/src/test/java/seng302/DataInput/RegattaXMLTest.java b/mock/src/test/java/seng302/DataInput/RegattaXMLTest.java index dd751e16..44b7f1c5 100644 --- a/mock/src/test/java/seng302/DataInput/RegattaXMLTest.java +++ b/mock/src/test/java/seng302/DataInput/RegattaXMLTest.java @@ -2,7 +2,7 @@ package seng302.DataInput; import org.junit.Before; import org.junit.Test; -import SharedModel.Regatta; +import seng302.Model.Regatta; import static org.junit.Assert.*; diff --git a/mock/src/test/java/seng302/Model/BoatTest.java b/mock/src/test/java/seng302/Model/BoatTest.java index 1c9ed3e8..47cc5e73 100644 --- a/mock/src/test/java/seng302/Model/BoatTest.java +++ b/mock/src/test/java/seng302/Model/BoatTest.java @@ -1,8 +1,8 @@ package seng302.Model; -import javafx.scene.paint.Color; + import org.junit.Test; -import SharedModel.*; + import static junit.framework.TestCase.*; @@ -15,22 +15,21 @@ public class BoatTest { private GPSCoordinate ORIGIN_COORDS = new GPSCoordinate(0, 0); private Boat TEST_BOAT = new Boat("Test", 1, "tt", 1); - @Test public void calculateDueNorthAzimuthReturns0() { - SharedModel.Marker startMarker = new SharedModel.Marker(ORIGIN_COORDS); - SharedModel.Marker endMarker = new SharedModel.Marker(new GPSCoordinate(50, 0)); - SharedModel.Leg start = new SharedModel.Leg("Start", startMarker, endMarker, 0); + Marker startMarker = new Marker(ORIGIN_COORDS); + Marker endMarker = new Marker(new GPSCoordinate(50, 0)); + Leg start = new Leg("Start", startMarker, endMarker, 0); TEST_BOAT.setCurrentLeg(start); assertEquals(TEST_BOAT.calculateAzimuth(), 0, 1e-8); } @Test public void calculateDueSouthAzimuthReturns180() { - SharedModel.Marker startMarker = new SharedModel.Marker(ORIGIN_COORDS); - SharedModel.Marker endMarker = new SharedModel.Marker(new GPSCoordinate(-50, 0)); - SharedModel.Leg start = new SharedModel.Leg("Start", startMarker, endMarker, 0); + Marker startMarker = new Marker(ORIGIN_COORDS); + Marker endMarker = new Marker(new GPSCoordinate(-50, 0)); + Leg start = new Leg("Start", startMarker, endMarker, 0); TEST_BOAT.setCurrentLeg(start); assertEquals(TEST_BOAT.calculateAzimuth(), 180, 1e-8); } @@ -39,9 +38,9 @@ public class BoatTest { @Test public void calculateDueEastAzimuthReturns90() { - SharedModel.Marker startMarker = new SharedModel.Marker(ORIGIN_COORDS); - SharedModel.Marker endMarker = new SharedModel.Marker(new GPSCoordinate(0, 50)); - SharedModel.Leg start = new SharedModel.Leg("Start", startMarker, endMarker, 0); + Marker startMarker = new Marker(ORIGIN_COORDS); + Marker endMarker = new Marker(new GPSCoordinate(0, 50)); + Leg start = new Leg("Start", startMarker, endMarker, 0); TEST_BOAT.setCurrentLeg(start); assertEquals(TEST_BOAT.calculateAzimuth(), 90, 1e-8); } @@ -49,9 +48,9 @@ public class BoatTest { @Test public void calculateDueWestAzimuthReturnsNegative90() { - SharedModel.Marker startMarker = new SharedModel.Marker(ORIGIN_COORDS); - SharedModel.Marker endMarker = new SharedModel.Marker(new GPSCoordinate(0, -50)); - SharedModel.Leg start = new SharedModel.Leg("Start", startMarker, endMarker, 0); + Marker startMarker = new Marker(ORIGIN_COORDS); + Marker endMarker = new Marker(new GPSCoordinate(0, -50)); + Leg start = new Leg("Start", startMarker, endMarker, 0); TEST_BOAT.setCurrentLeg(start); assertEquals(TEST_BOAT.calculateAzimuth(), -90, 1e-8); @@ -60,9 +59,9 @@ public class BoatTest { @Test public void calculateDueNorthHeadingReturns0() { - SharedModel.Marker startMarker = new SharedModel.Marker(ORIGIN_COORDS); - SharedModel.Marker endMarker = new SharedModel.Marker(new GPSCoordinate(50, 0)); - SharedModel.Leg start = new SharedModel.Leg("Start", startMarker, endMarker, 0); + Marker startMarker = new Marker(ORIGIN_COORDS); + Marker endMarker = new Marker(new GPSCoordinate(50, 0)); + Leg start = new Leg("Start", startMarker, endMarker, 0); TEST_BOAT.setCurrentLeg(start); assertEquals(TEST_BOAT.calculateHeading(), 0, 1e-8); } @@ -70,27 +69,27 @@ public class BoatTest { @Test public void calculateDueEastHeadingReturns90() { - SharedModel.Marker startMarker = new SharedModel.Marker(ORIGIN_COORDS); - SharedModel.Marker endMarker = new SharedModel.Marker(new GPSCoordinate(0, 50)); - SharedModel.Leg start = new SharedModel.Leg("Start", startMarker, endMarker, 0); + Marker startMarker = new Marker(ORIGIN_COORDS); + Marker endMarker = new Marker(new GPSCoordinate(0, 50)); + Leg start = new Leg("Start", startMarker, endMarker, 0); TEST_BOAT.setCurrentLeg(start); assertEquals(TEST_BOAT.calculateHeading(), 90, 1e-8); } @Test public void calculateDueSouthHeadingReturns180() { - SharedModel.Marker startMarker = new SharedModel.Marker(ORIGIN_COORDS); - SharedModel.Marker endMarker = new SharedModel.Marker(new GPSCoordinate(-50, 0)); - SharedModel.Leg start = new SharedModel.Leg("Start", startMarker, endMarker, 0); + Marker startMarker = new Marker(ORIGIN_COORDS); + Marker endMarker = new Marker(new GPSCoordinate(-50, 0)); + Leg start = new Leg("Start", startMarker, endMarker, 0); TEST_BOAT.setCurrentLeg(start); assertEquals(TEST_BOAT.calculateHeading(), 180, 1e-8); } @Test public void calculateDueWestHeadingReturns270() { - SharedModel.Marker startMarker = new SharedModel.Marker(ORIGIN_COORDS); - SharedModel.Marker endMarker = new SharedModel.Marker(new GPSCoordinate(0, -50)); - SharedModel.Leg start = new SharedModel.Leg("Start", startMarker, endMarker, 0); + Marker startMarker = new Marker(ORIGIN_COORDS); + Marker endMarker = new Marker(new GPSCoordinate(0, -50)); + Leg start = new Leg("Start", startMarker, endMarker, 0); TEST_BOAT.setCurrentLeg(start); assertEquals(TEST_BOAT.calculateHeading(), 270, 1e-8); } diff --git a/mock/src/test/java/seng302/Model/LegTest.java b/mock/src/test/java/seng302/Model/LegTest.java index d86b439e..b9d2e6bf 100644 --- a/mock/src/test/java/seng302/Model/LegTest.java +++ b/mock/src/test/java/seng302/Model/LegTest.java @@ -2,10 +2,8 @@ package seng302.Model; import org.geotools.referencing.GeodeticCalculator; import org.junit.Test; -import SharedModel.Constants; -import SharedModel.GPSCoordinate; -import SharedModel.Leg; -import SharedModel.Marker; +import seng302.Constants; + import java.awt.geom.Point2D; diff --git a/mock/src/test/java/seng302/Model/MarkerTest.java b/mock/src/test/java/seng302/Model/MarkerTest.java index 2331ae57..168c222c 100644 --- a/mock/src/test/java/seng302/Model/MarkerTest.java +++ b/mock/src/test/java/seng302/Model/MarkerTest.java @@ -2,8 +2,6 @@ package seng302.Model; import org.junit.Ignore; import org.junit.Test; -import SharedModel.GPSCoordinate; -import SharedModel.Marker; import static org.junit.Assert.assertTrue; diff --git a/mock/src/test/java/seng302/Model/RaceTest.java b/mock/src/test/java/seng302/Model/RaceTest.java index 9111c422..09107ded 100644 --- a/mock/src/test/java/seng302/Model/RaceTest.java +++ b/mock/src/test/java/seng302/Model/RaceTest.java @@ -1,6 +1,6 @@ package seng302.Model; -import SharedModel.*; + import javafx.scene.paint.Color; import org.junit.BeforeClass; import org.junit.Ignore; @@ -33,8 +33,8 @@ import static org.mockito.Mockito.verify; public class RaceTest { // // private static MockOutput mockOutput; -// SharedModel.Leg START_LEG = new SharedModel.Leg("Start", new SharedModel.Marker(new SharedModel.GPSCoordinate(0, 0)), new SharedModel.Marker(new SharedModel.GPSCoordinate(1, 1)), 0); -// SharedModel.Leg FINISH_LEG = new SharedModel.Leg("Finish", new SharedModel.Marker(new SharedModel.GPSCoordinate(1, 1)), new SharedModel.Marker(new SharedModel.GPSCoordinate(2, 2)), 0); +// Leg START_LEG = new Leg("Start", new Marker(new GPSCoordinate(0, 0)), new Marker(new GPSCoordinate(1, 1)), 0); +// Leg FINISH_LEG = new Leg("Finish", new Marker(new GPSCoordinate(1, 1)), new Marker(new GPSCoordinate(2, 2)), 0); // // @BeforeClass // public static void setUp() { @@ -81,7 +81,7 @@ public class RaceTest { // boats.add(boat1); // boats.add(boat2); // -// ArrayList legs = new ArrayList<>(); +// ArrayList<.Leg> legs = new ArrayList<>(); // legs.add(START_LEG); // legs.add(FINISH_LEG); // @@ -104,7 +104,7 @@ public class RaceTest { // ArrayList boats = new ArrayList<>(); // boats.add(finishedBoat); // -// ArrayList legs = new ArrayList<>(); +// ArrayList<.Leg> legs = new ArrayList<>(); // legs.add(FINISH_LEG); // // Race race = new Race(boats, legs, 5, mockOutput); @@ -129,7 +129,7 @@ public class RaceTest { // ArrayList boats = new ArrayList<>(); // boats.add(unFinishedBoat); // -// ArrayList legs = new ArrayList<>(); +// ArrayList<.Leg> legs = new ArrayList<>(); // legs.add(FINISH_LEG); // // @@ -146,7 +146,7 @@ public class RaceTest { // // ArrayList boats = new ArrayList<>(); // -// ArrayList legs = new ArrayList<>(); +// ArrayList<.Leg> legs = new ArrayList<>(); // // legs.add(START_LEG); // legs.add(FINISH_LEG); @@ -170,7 +170,7 @@ public class RaceTest { // // ArrayList boats = new ArrayList<>(); // -// ArrayList legs = new ArrayList<>(); +// ArrayList<.Leg> legs = new ArrayList<>(); // legs.add(START_LEG); // // Race race = new Race(boats, legs, 1, mockOutput); @@ -204,7 +204,7 @@ public class RaceTest { // boats.add(boat3); // boats.add(boat4); // -// ArrayList legs = new ArrayList<>(); +// ArrayList<.Leg> legs = new ArrayList<>(); // legs.add(START_LEG); // // diff --git a/network/src/main/java/seng302/Networking/VisualiserInput.java b/network/src/main/java/seng302/Networking/VisualiserInput.java index c0040cb3..7515fb6f 100644 --- a/network/src/main/java/seng302/Networking/VisualiserInput.java +++ b/network/src/main/java/seng302/Networking/VisualiserInput.java @@ -32,7 +32,6 @@ public class VisualiserInput implements Runnable public VisualiserInput(Socket connectionSocket) throws IOException{ - //connectionSocket = new Socket(InetAddress.getLocalHost(), 4942); this.connectionSocket = connectionSocket; this.course = new StreamedCourse(); @@ -173,7 +172,7 @@ public class VisualiserInput implements Runnable }else{ boatLocation.put(msg.getSourceID(), msg); } -// System.out.println("Boat Location Message!"); + System.out.println("Boat Location Message!"); break; case MARKROUNDING: // System.out.println("Mark Rounding Message!"); @@ -204,7 +203,9 @@ public class VisualiserInput implements Runnable public static void main(String argv[]) throws Exception { //this is the test data that streams form the AC35 website - Socket socket = new Socket("livedata.americascup.com",4941); + + Socket socket = new Socket(InetAddress.getLocalHost(), 4942); +// Socket socket = new Socket("livedata.americascup.com",4941); VisualiserInput receiver = new VisualiserInput(socket); receiver.run(); } diff --git a/sharedModel/src/main/java/SharedModel/Boat.java b/sharedModel/src/main/java/SharedModel/Boat.java deleted file mode 100644 index 2222750e..00000000 --- a/sharedModel/src/main/java/SharedModel/Boat.java +++ /dev/null @@ -1,93 +0,0 @@ -package SharedModel; - -import javafx.beans.property.SimpleStringProperty; -import javafx.beans.property.StringProperty; - -/** - * Created by fwy13 on 3/03/17. - */ -public class Boat { - - private StringProperty name; - private double velocity; - private StringProperty velocityProp; - private String abbrev; - private int sourceID; - - /** - * 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.velocityProp = new SimpleStringProperty(String.valueOf(Math.round(velocity))); - this.abbrev = abbrev; - this.name = new SimpleStringProperty(name); - this.sourceID = sourceID; - } - - /** - * @return Name of the boat - */ - public StringProperty getName() { - return name; - } - - /** - * Sets the boat name - * - * @param name of boat - */ - public void setName(String name) { - this.name.setValue(name); - } - - /** - * @return Speed of the boat. - */ - public double getVelocity() { - return velocity; - } - - /** - * Sets the speed of the boat in knots. - * - * @param velocity speed in knots - */ - public void setVelocity(double velocity) { - this.velocity = velocity; - this.velocityProp.setValue(String.valueOf(Math.round(velocity))); - } - - public int getSourceID() { - return sourceID; - } - - /** - * Print method prints the name of the boat - * - * @return Name of the boat. - */ - public String toString() { - return getName().getValue(); - } - - /** - * @return Velocity String Property of the boat - */ - public StringProperty getVelocityProp() { - return velocityProp; - } - - /** - * @return Abbreviation of the boat - */ - public String getAbbrev() { - return abbrev; - } - -} diff --git a/sharedModel/src/main/java/SharedModel/BoatInRace.java b/sharedModel/src/main/java/SharedModel/BoatInRace.java deleted file mode 100644 index f09db16d..00000000 --- a/sharedModel/src/main/java/SharedModel/BoatInRace.java +++ /dev/null @@ -1,296 +0,0 @@ -package SharedModel; - -import javafx.beans.property.SimpleStringProperty; -import javafx.beans.property.StringProperty; -import javafx.scene.paint.Color; -import org.geotools.referencing.GeodeticCalculator; - - -import java.awt.geom.Point2D; - -/** - * Boat in the Race extends Boat. - * Created by esa46 on 15/03/17. - */ -public class BoatInRace extends Boat { - - private Leg currentLeg; - private double scaledVelocity; - private double distanceTravelledInLeg; - private GPSCoordinate currentPosition; - private long timeFinished; - private Color colour; - private boolean finished = false; - private StringProperty currentLegName; - private boolean started = false; - private StringProperty position; - private double heading; - private int sourceID; - - - - ///While generating BoatLocationMessages, each one needs a sequence number relating to each boat. - private long sequenceNumber = 0; - - private boolean trackVisible = true; - - /** - * Constructor method. - * - * @param name Name of the boat. - * @param velocity Speed that the boat travels. - * @param colour Colour the boat will be displayed as on the map - * @param abbrev of boat - * @param sourceID id of boat - */ - public BoatInRace(String name, double velocity, Color colour, String abbrev, int sourceID) { - super(name, velocity, abbrev, sourceID); - setColour(colour); - currentLegName = new SimpleStringProperty(""); - position = new SimpleStringProperty("-"); - this.sourceID = sourceID; - } - - - - /** - * Converts an azimuth to a bearing - * - * @param azimuth azimuth value to be converted - * @return the bearings in degrees (0 to 360). - */ - public static double calculateHeading(double azimuth) { - if (azimuth >= 0) { - return azimuth; - } else { - return azimuth + 360; - } - } - - /** - * 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 getHeading() { - return heading; - } - - public void setHeading(double heading) { - this.heading = heading; - } - - /** - * Calculates the bearing of the travel via map coordinates of the raceMarkers - * - * @return the direction that the boat is heading towards in degrees (0 to 360). - */ - public double calculateHeading() { - double azimuth = this.calculateAzimuth(); - return calculateHeading(azimuth); - } - - /** - * Returns the position of the end of the boat's wake, which is 180 degrees - * from the boat's heading, and whose length is proportional to the boat's - * speed. - * - * @return GPSCoordinate of wake endpoint. - */ - public GPSCoordinate getWake() { - double reverseHeading = getHeading() - 180; - double distance = Constants.wakeScale * getVelocity(); - - GeodeticCalculator calc = new GeodeticCalculator(); - calc.setStartingGeographicPoint( - new Point2D.Double(getCurrentPosition().getLongitude(), getCurrentPosition().getLatitude()) - ); - calc.setDirection(reverseHeading, distance); - Point2D endpoint = calc.getDestinationGeographicPoint(); - return new GPSCoordinate(endpoint.getY(), endpoint.getX()); - } - - /** - * @return Scaled velocity of the boat - */ - public double getScaledVelocity() { - return scaledVelocity; - } - - /** - * Sets the boat's scaled velocity - * - * @param velocity of boat - */ - public void setScaledVelocity(double velocity) { - this.scaledVelocity = velocity; - } - - /** - * @return Returns the current position of the boat in a GPSCoordinate Class. - * @see GPSCoordinate - */ - public GPSCoordinate getCurrentPosition() { - return currentPosition; - } - - /** - * Sets the current position on the GPS that the boat. - * - * @param position GPSCoordinate of the position that the boat is currently on. - * @see GPSCoordinate - */ - public void setCurrentPosition(GPSCoordinate position) { - this.currentPosition = position; - } - - /** - * @return Returns the time that the boat finished the race. - */ - public long getTimeFinished() { - return timeFinished; - } - - /** - * Sets the time that the boat finished the race. - * - * @param timeFinished Time the boat finished the race. - */ - public void setTimeFinished(long timeFinished) { - this.timeFinished = timeFinished; - } - - /** - * @return Returns the colour of the boat. - */ - public Color getColour() { - return colour; - } - - /** - * Sets the colour that boat will be shown as when drawn on the ResizableRaceCanvas. - * - * @param colour Colour that the boat is to be set to. - */ - public void setColour(Color colour) { - this.colour = colour; - } - - /** - * Gets the current leg that the boat is on. - * - * @return returns the leg the boat is on in a Leg class - * @see Leg - */ - public Leg getCurrentLeg() { - return currentLeg; - } - - /** - * Sets the boat's current leg. - * - * @param currentLeg Leg class that the boat is currently on. - * @see Leg - */ - public void setCurrentLeg(Leg currentLeg) { - this.currentLeg = currentLeg; - this.currentLegName.setValue(currentLeg.getName()); - } - - /** - * @return Name of boat's current leg - */ - public StringProperty getCurrentLegName() { - return currentLegName; - } - - /** - * Gets the distance travelled by the boat in the leg. - * - * @return Returns the value in nautical miles (1.852km) that the boat has traversed. - */ - public double getDistanceTravelledInLeg() { - return distanceTravelledInLeg; - } - - /** - * Sets the distance travelled by the boat in the leg in nautical miles (1.852km) - * - * @param distanceTravelledInLeg Distance travelled by the boat in nautical miles. - */ - public void setDistanceTravelledInLeg(double distanceTravelledInLeg) { - this.distanceTravelledInLeg = distanceTravelledInLeg; - } - - /** - * @return true if boat has finished, false if not - */ - public boolean isFinished() { - return this.finished; - } - - /** - * Sets whether boat is finished or not - * - * @param bool is finished value - */ - public void setFinished(boolean bool) { - this.finished = bool; - } - - public boolean isStarted() { - return started; - } - - public void setStarted(boolean started) { - this.started = started; - } - - public String getPosition() { - return position.get(); - } - - public void setPosition(String position) { - this.position.set(position); - } - - public StringProperty positionProperty() { - return position; - } - - @Override - public int getSourceID() { - return sourceID; - } - - public void setSourceID(int sourceID) { - this.sourceID = sourceID; - } - - /** - * Returns the current sequence number, and increments the internal value, such that that next call will return a value 1 larger than the current call. - * - * @return Current sequence number. - */ - public long getNextSequenceNumber() { - //Make a copy of current value. - long oldNumber = this.sequenceNumber; - //Increment. - this.sequenceNumber += 1; - //Return the previous value. - return oldNumber; - } - -}