From 9e19ddb1f47c94f4516191fa4d64dfa084787dfb Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Wed, 10 May 2017 14:45:42 +1200 Subject: [PATCH 1/3] Story 49 Marks move with boat location. - Commented out blocking array as it was unecessary - Added Observable list for markers to the race canvas - Added SourceId's to Marker - Added updating Markers from the Streamed Race loop. #story[881] #pair[fwy13, jam339] --- .../seng302/Controllers/RaceController.java | 3 +- .../seng302/Mock/StreamedCourseXMLReader.java | 9 +++- .../main/java/seng302/Mock/StreamedRace.java | 22 ++++++++ .../src/main/java/seng302/Model/Marker.java | 50 +++++++++++++++---- .../src/main/java/seng302/Model/Race.java | 17 +++++-- .../seng302/Model/ResizableRaceCanvas.java | 12 +++++ .../main/java/seng302/VisualiserInput.java | 9 ++-- 7 files changed, 102 insertions(+), 20 deletions(-) diff --git a/visualiser/src/main/java/seng302/Controllers/RaceController.java b/visualiser/src/main/java/seng302/Controllers/RaceController.java index a108b592..1657a671 100644 --- a/visualiser/src/main/java/seng302/Controllers/RaceController.java +++ b/visualiser/src/main/java/seng302/Controllers/RaceController.java @@ -48,8 +48,9 @@ public class RaceController extends Controller { * @param boats boats that are to be displayed in the race * @see ResizableRaceCanvas */ - public void updateMap(ObservableList boats) { + public void updateMap(ObservableList boats, ObservableList boatMarkers) { raceMap.setBoats(boats); + raceMap.setBoatMarkers(boatMarkers); raceMap.update(); raceBoundaries.draw(); //stop if the visualiser is no longer running diff --git a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java index ae07cd18..c77c716d 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java @@ -165,8 +165,9 @@ public class StreamedCourseXMLReader extends XMLReader { Marker marker; switch(nMarks.getLength()) { - case 1: marker = new Marker(getCoordinate((Element)nMarks.item(0))); break; - case 2: marker = new Marker(getCoordinate((Element)nMarks.item(0)), getCoordinate((Element)nMarks.item(1))); break; + case 1: marker = new Marker(getCoordinate((Element)nMarks.item(0)),getSourceId((Element)nMarks.item(0))); break; + case 2: marker = new Marker(getCoordinate((Element)nMarks.item(0)), getCoordinate((Element)nMarks.item(1)), + getSourceId((Element)nMarks.item(0)), getSourceId((Element)nMarks.item(1))); break; default: throw new StreamedCourseXMLException(); } @@ -179,6 +180,10 @@ public class StreamedCourseXMLReader extends XMLReader { return new GPSCoordinate(lat,lon); } + private int getSourceId(Element mark) { + return Integer.parseInt(mark.getAttribute("SourceID")); + } + /** * Reads "compoundMarkID" attribute of CompoundMark or Corner element * @param element with "compoundMarkID" attribute diff --git a/visualiser/src/main/java/seng302/Mock/StreamedRace.java b/visualiser/src/main/java/seng302/Mock/StreamedRace.java index ed1c7bf5..a144e0aa 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedRace.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedRace.java @@ -98,6 +98,28 @@ public class StreamedRace extends Race { } } + /** + * Updates the boat's gps coordinates + * + * @param mark to be updated + */ + protected void updateMarker(Marker mark) { + int sourceID = mark.getSourceId1(); + BoatLocation boatLocation1 = visualiserInput.getBoatLocationMessage(sourceID); + if(boatLocation1 != null) { + double lat = boatLocation1.getLatitudeDouble(); + double lon = boatLocation1.getLongitudeDouble(); + mark.setCurrentPosition1(new GPSCoordinate(lat, lon)); + } + int sourceID2 = mark.getSourceId2(); + BoatLocation boatLocation2 = visualiserInput.getBoatLocationMessage(sourceID2); + if(boatLocation1 != null) { + double lat = boatLocation2.getLatitudeDouble(); + double lon = boatLocation2.getLongitudeDouble(); + mark.setCurrentPosition2(new GPSCoordinate(lat, lon)); + } + } + /** * sets the position of a boat from coordinate * @param boat the boat to set diff --git a/visualiser/src/main/java/seng302/Model/Marker.java b/visualiser/src/main/java/seng302/Model/Marker.java index 8b432d70..8816807b 100644 --- a/visualiser/src/main/java/seng302/Model/Marker.java +++ b/visualiser/src/main/java/seng302/Model/Marker.java @@ -10,25 +10,42 @@ import java.awt.geom.Point2D; */ public class Marker { private final GPSCoordinate averageGPSCoordinate; - private final GPSCoordinate mark1; - private final GPSCoordinate mark2; - - public Marker(GPSCoordinate mark1) { - - this.mark1 = mark1; - this.mark2 = mark1; - this.averageGPSCoordinate = calculateAverage(); + private GPSCoordinate mark1; + private GPSCoordinate mark2; + private final int sourceId1; + private final int sourceId2; + public Marker(GPSCoordinate mark1, int sourceId) { + this(mark1, mark1, sourceId, sourceId); } - public Marker(GPSCoordinate mark1, GPSCoordinate mark2) { + public Marker(GPSCoordinate mark1, GPSCoordinate mark2, int sourceId1, int sourceId2) { this.mark1 = mark1; this.mark2 = mark2; this.averageGPSCoordinate = calculateAverage(); + this.sourceId1 = sourceId1; + this.sourceId2 = sourceId2; } + /** + * @deprecated + * @param mark1 Mark coordinates. + */ + public Marker(GPSCoordinate mark1) { + this(mark1, mark1, 0,0); + } + + /** + * @deprecated + * @param mark1 Mark one coordinate + * @param mark2 Mark two coordinate + */ + public Marker(GPSCoordinate mark1, GPSCoordinate mark2) { + this(mark1, mark2, 0,0); + } + public GPSCoordinate getMark1() { return mark1; } @@ -66,4 +83,19 @@ public class Marker { } + public void setCurrentPosition1(GPSCoordinate gpsCoordinate){ + mark1 = gpsCoordinate; + } + + public void setCurrentPosition2(GPSCoordinate gpsCoordinate){ + mark2 = gpsCoordinate; + } + + public int getSourceId1() { + return sourceId1; + } + + public int getSourceId2() { + return sourceId2; + } } diff --git a/visualiser/src/main/java/seng302/Model/Race.java b/visualiser/src/main/java/seng302/Model/Race.java index 13e0463e..6d6ca022 100644 --- a/visualiser/src/main/java/seng302/Model/Race.java +++ b/visualiser/src/main/java/seng302/Model/Race.java @@ -17,6 +17,7 @@ import java.util.List; */ public abstract class Race implements Runnable { protected final ObservableList startingBoats; + protected final ObservableList boatMarkers; protected final List legs; private RaceController controller; protected FinishController finishController; @@ -33,9 +34,10 @@ public abstract class Race implements Runnable { * @param controller race controller * @param scaleFactor for race */ - private Race(List boats, List legs, RaceController controller, int scaleFactor) { + private Race(List boats, List boatMarkers, List legs, RaceController controller, int scaleFactor) { this.startingBoats = FXCollections.observableArrayList(boats); + this.boatMarkers = FXCollections.observableArrayList(boatMarkers); this.legs = legs; this.legs.add(new Leg("Finish", this.legs.size())); this.controller = controller; @@ -45,7 +47,7 @@ public abstract class Race implements Runnable { } protected Race(RaceDataSource raceData, RaceController controller, int scaleFactor) { - this(raceData.getBoats(), raceData.getLegs(), controller, scaleFactor); + this(raceData.getBoats(), raceData.getMarkers(), raceData.getLegs(), controller, scaleFactor); } /** @@ -56,7 +58,7 @@ public abstract class Race implements Runnable { * @param scaleFactor factor to scale by */ public Race(Boat[] startingBoats, List legs, RaceController controller, int scaleFactor) { - this(Arrays.asList(startingBoats), legs, controller, scaleFactor); + this(Arrays.asList(startingBoats), null, legs, controller, scaleFactor); } public void setController(RaceController controller) { @@ -80,6 +82,8 @@ public abstract class Race implements Runnable { */ protected abstract void checkPosition(Boat boat, long timeElapsed); + protected abstract void updateMarker(Marker mark); + /** * Updates the boat's gps coordinates * @@ -140,12 +144,17 @@ public abstract class Race implements Runnable { boatsFinished++; } } + for (Marker mark: boatMarkers){ + if (mark != null){ + updateMarker(mark); + } + } //System.out.println(boatsFinished + ":" + startingBoats.size()); } else { controller.finishRace(startingBoats); stop(); } - controller.updateMap(startingBoats); + controller.updateMap(startingBoats, boatMarkers); fps++; if ((System.currentTimeMillis() - timeCurrent) > 1000) { updateFPS(fps); diff --git a/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java b/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java index 2b793da9..83fc7312 100644 --- a/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java +++ b/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java @@ -1,6 +1,7 @@ package seng302.Model; +import javafx.collections.ObservableList; import javafx.scene.paint.Color; import javafx.scene.paint.Paint; import javafx.scene.transform.Rotate; @@ -22,6 +23,7 @@ import java.util.List; public class ResizableRaceCanvas extends ResizableCanvas { private RaceMap map; private List boats; + private List boatMarkers; private boolean raceAnno = true; private boolean annoName = true; private boolean annoAbbrev = true; @@ -56,6 +58,16 @@ public class ResizableRaceCanvas extends ResizableCanvas { this.boats = boats; } + + /** + * Sets the boat markers that are to be displayed in this race. + * + * @param boatMarkers in race + */ + public void setBoatMarkers(ObservableList boatMarkers) { + this.boatMarkers = boatMarkers; + } + /** * Sets the RaceMap that the RaceCanvas is to be displaying for. * diff --git a/visualiser/src/main/java/seng302/VisualiserInput.java b/visualiser/src/main/java/seng302/VisualiserInput.java index ffba53c3..d1fd53de 100644 --- a/visualiser/src/main/java/seng302/VisualiserInput.java +++ b/visualiser/src/main/java/seng302/VisualiserInput.java @@ -1,6 +1,7 @@ package seng302; import org.xml.sax.SAXException; import seng302.Mock.*; +import seng302.Model.Boat; import seng302.Networking.BinaryMessageDecoder; import seng302.Networking.Exceptions.InvalidMessageException; import seng302.Networking.Messages.*; @@ -13,6 +14,7 @@ import java.nio.ByteBuffer; import java.text.ParseException; import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.concurrent.ArrayBlockingQueue; @@ -219,7 +221,7 @@ public class VisualiserInput implements Runnable { //If no heartbeat has been received in more the heartbeat period //then the connection will need to be restarted. - System.out.println("time since last heartbeat: " + timeSinceHeartbeat());//TEMP REMOVE + //System.out.println("time since last heartbeat: " + timeSinceHeartbeat());//TEMP REMOVE long heartBeatPeriod = 10 * 1000; if (timeSinceHeartbeat() > heartBeatPeriod) { System.out.println("Connection has stopped, trying to reconnect."); @@ -258,10 +260,10 @@ public class VisualiserInput implements Runnable { System.err.println("Unable to read message: " + e.getMessage()); //Continue to the next loop iteration/message. continue; - } + }/* //Add it to message queue. - this.messagesReceivedQueue.add(message); + this.messagesReceivedQueue.add(message);*/ //Checks which message is being received and does what is needed for that message. @@ -379,7 +381,6 @@ public class VisualiserInput implements Runnable { //If the map _doesn't_ already contain a message for this boat, insert the message. this.boatLocationMap.put(boatLocation.getSourceID(), boatLocation); } - } //MarkRounding. else if (message instanceof MarkRounding) { From 045e69a6373714072744d0f891c33fa1f4eb16d3 Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Wed, 10 May 2017 15:51:55 +1200 Subject: [PATCH 2/3] Deleted and Fixed some redundant code - Deleted some unused functions - Fixed NullPointerException for Marks #story[881] #pair[fwy13,jam339] --- .../seng302/Mock/StreamedCourseXMLReader.java | 6 +++- .../main/java/seng302/Mock/StreamedRace.java | 2 +- .../main/java/seng302/Model/BoatInRace.java | 14 --------- .../seng302/Model/ResizableRaceCanvas.java | 30 ------------------- 4 files changed, 6 insertions(+), 46 deletions(-) diff --git a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java index c77c716d..c8410562 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java @@ -181,7 +181,11 @@ public class StreamedCourseXMLReader extends XMLReader { } private int getSourceId(Element mark) { - return Integer.parseInt(mark.getAttribute("SourceID")); + String sourceId = mark.getAttribute("SourceID"); + if (sourceId.isEmpty()){ + return 0; + } + return Integer.parseInt(sourceId); } /** diff --git a/visualiser/src/main/java/seng302/Mock/StreamedRace.java b/visualiser/src/main/java/seng302/Mock/StreamedRace.java index a144e0aa..0856cb0c 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedRace.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedRace.java @@ -113,7 +113,7 @@ public class StreamedRace extends Race { } int sourceID2 = mark.getSourceId2(); BoatLocation boatLocation2 = visualiserInput.getBoatLocationMessage(sourceID2); - if(boatLocation1 != null) { + if(boatLocation2 != null) { double lat = boatLocation2.getLatitudeDouble(); double lon = boatLocation2.getLongitudeDouble(); mark.setCurrentPosition2(new GPSCoordinate(lat, lon)); diff --git a/visualiser/src/main/java/seng302/Model/BoatInRace.java b/visualiser/src/main/java/seng302/Model/BoatInRace.java index 05c58017..274a8000 100644 --- a/visualiser/src/main/java/seng302/Model/BoatInRace.java +++ b/visualiser/src/main/java/seng302/Model/BoatInRace.java @@ -50,20 +50,6 @@ public class BoatInRace extends Boat { position = new SimpleStringProperty("-"); } - /** - * Constructor method. - * - * @param name Name of the boat. - * @param colour Colour the boat will be displayed as on the map - * @param abbrev of boat - */ - public BoatInRace(String name, Color colour, String abbrev) { - super(name, abbrev); - setColour(colour); - currentLegName = new SimpleStringProperty(""); - position = new SimpleStringProperty("-"); - } - /** * Calculates the azimuth of the travel via map coordinates of the raceMarkers * diff --git a/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java b/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java index 83fc7312..e65a45c8 100644 --- a/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java +++ b/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java @@ -31,7 +31,6 @@ public class ResizableRaceCanvas extends ResizableCanvas { private boolean annoPath = true; private List colours; private final List markers; - double[] xpoints = {}, ypoints = {}; private final RaceDataSource raceData; public ResizableRaceCanvas(RaceDataSource raceData) { @@ -77,22 +76,6 @@ public class ResizableRaceCanvas extends ResizableCanvas { this.map = map; } - /** - * Displays the mark of a race as a circle. - * - * @param graphCoordinate Latitude and Longitude in GraphCoordinate that it - * is to be displayed as. - * @param paint Colour the mark is to be coloured. - * @see GraphCoordinate - * @see Color - * @see Paint - */ - public void displayMark(GraphCoordinate graphCoordinate, Paint paint) { - double d = 25; - this.gc.setFill(paint); - gc.fillOval(graphCoordinate.getX() - (d / 2), graphCoordinate.getY() - (d / 2), d, d); - } - private void displayBoat(Boat boat, double angle, Color colour) { if (boat.getCurrentPosition() != null) { GraphCoordinate pos = this.map.convertGPS(boat.getCurrentPosition()); @@ -258,19 +241,6 @@ public class ResizableRaceCanvas extends ResizableCanvas { } } - /** - * Draws a boat at a certain GPSCoordinate - * - * @param colour Colour to colour boat. - * @param gpsCoordinates GPScoordinate that the boat is to be drawn at. - * @see GPSCoordinate - * @see Color - */ - public void drawBoat(Color colour, GPSCoordinate gpsCoordinates) { - GraphCoordinate graphCoordinate = this.map.convertGPS(gpsCoordinates); - displayPoint(graphCoordinate, colour); - } - /** * Toggle the raceAnno value */ From d294ee7994b43a4301b06d3faeee4a46284b7360 Mon Sep 17 00:00:00 2001 From: Jessica McAuslin Date: Thu, 11 May 2017 15:44:58 +1200 Subject: [PATCH 3/3] Deleted redundant and deprecated code (Visualiser) - References to deprecated objects replaced - Deprecated Constants class removed - general redundant code deleted --- .../src/main/java/seng302/Constants.java | 34 ------------------- .../seng302/Controllers/StartController.java | 9 ----- .../java/seng302/Mock/StreamedCourse.java | 8 ----- .../seng302/Mock/StreamedCourseXMLReader.java | 24 ++----------- .../main/java/seng302/Mock/StreamedRace.java | 3 +- .../main/java/seng302/Model/BoatInRace.java | 4 +-- .../src/main/java/seng302/Model/Leg.java | 5 +-- .../main/java/seng302/Model/RaceClock.java | 7 ---- .../seng302/Model/ResizableRaceCanvas.java | 1 - .../main/java/seng302/VisualiserInput.java | 5 +-- .../src/test/java/seng302/Model/LegTest.java | 10 +++--- 11 files changed, 14 insertions(+), 96 deletions(-) delete mode 100644 visualiser/src/main/java/seng302/Constants.java diff --git a/visualiser/src/main/java/seng302/Constants.java b/visualiser/src/main/java/seng302/Constants.java deleted file mode 100644 index 096e5a2b..00000000 --- a/visualiser/src/main/java/seng302/Constants.java +++ /dev/null @@ -1,34 +0,0 @@ -package seng302; - -import javafx.scene.paint.Color; -import seng302.Model.BoatInRace; - -/** - * Constants that are used throughout the program - * Created by Erika on 19-Mar-17. - * @deprecated please use XML for constant data - */ -public class Constants { - - public static final int NMToMetersConversion = 1852; // 1 nautical mile = 1852 meters - - public static final GPSCoordinate startLineMarker1 = new GPSCoordinate(32.296577, -64.854304); - public static final GPSCoordinate startLineMarker2 = new GPSCoordinate(32.293771, -64.855242); - public static final GPSCoordinate mark1 = new GPSCoordinate(32.293039, -64.843983); - public static final GPSCoordinate windwardGate1 = new GPSCoordinate(32.284680, -64.850045); - public static final GPSCoordinate windwardGate2 = new GPSCoordinate(32.280164, -64.847591); - public static final GPSCoordinate leewardGate1 = new GPSCoordinate(32.309693, -64.835249); - public static final GPSCoordinate leewardGate2 = new GPSCoordinate(32.308046, -64.831785); - public static final GPSCoordinate finishLineMarker1 = new GPSCoordinate(32.317379, -64.839291); - public static final GPSCoordinate finishLineMarker2 = new GPSCoordinate(32.317257, -64.836260); - - public static final double wakeScale = 10; - - public static final BoatInRace[] OFFICIAL_AC35_COMPETITORS = new BoatInRace[] - {new BoatInRace("Oracle Team USA", 30.0, Color.BLUEVIOLET, "Oracle"), - new BoatInRace("Land Rover BAR", 23.0, Color.BLACK, "BGR"), - new BoatInRace("SoftBank Team Japan", 27.0, Color.RED, "JPN"), - new BoatInRace("Groupama Team France", 25.0, Color.ORANGE, "FRA"), - new BoatInRace("Artemis Racing", 22.5, Color.DARKOLIVEGREEN, "SWE"), - new BoatInRace("Emirates Team New Zealand", 62, Color.LIMEGREEN, "ETNZ")}; -} diff --git a/visualiser/src/main/java/seng302/Controllers/StartController.java b/visualiser/src/main/java/seng302/Controllers/StartController.java index f264cded..aaf6ae2a 100644 --- a/visualiser/src/main/java/seng302/Controllers/StartController.java +++ b/visualiser/src/main/java/seng302/Controllers/StartController.java @@ -19,7 +19,6 @@ import seng302.VisualiserInput; import java.io.IOException; import java.net.Socket; import java.net.URL; -import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Observable; @@ -43,8 +42,6 @@ public class StartController extends Controller implements Observer { @FXML private Label timer; @FXML private Label raceStatusLabel; - private ZonedDateTime startingTime; - //@FXML Button fifteenMinButton; private RaceClock raceClock; @@ -61,17 +58,11 @@ public class StartController extends Controller implements Observer { * Begins the race with a scale factor of 1 */ private void startRaceNoScaling() { - //startRace(1); while(visualiserInput.getRaceStatus() == null);//TODO probably remove this. countdownTimer(); } - private void startRace(int raceScale){ - //fifteenMinButton.setDisable(true); - //countdownTimer(raceScale); - } - @Override public void initialize(URL location, ResourceBundle resources){ raceData = new StreamedCourse(); diff --git a/visualiser/src/main/java/seng302/Mock/StreamedCourse.java b/visualiser/src/main/java/seng302/Mock/StreamedCourse.java index 04c89cfc..bcb4a90c 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedCourse.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedCourse.java @@ -21,14 +21,6 @@ public class StreamedCourse extends Observable implements RaceDataSource { public StreamedCourse() {} - public StreamedCourse(StreamedCourseXMLReader streamedCourseXMLReader) { - this.streamedCourseXMLReader = streamedCourseXMLReader; - } - - public StreamedCourse(BoatXMLReader boatXMLReader) { - this.boatXMLReader = boatXMLReader; - } - public void setBoatXMLReader(BoatXMLReader boatXMLReader) { this.boatXMLReader = boatXMLReader; if (streamedCourseXMLReader != null && boatXMLReader != null) { diff --git a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java index c8410562..d2cac2ad 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedCourseXMLReader.java @@ -13,7 +13,6 @@ import seng302.XMLReader; import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; import java.io.InputStream; -import java.text.ParseException; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @@ -35,19 +34,6 @@ public class StreamedCourseXMLReader extends XMLReader { private String raceType; private boolean postpone; - /** - * Constructor for Streamed Race XML - * @param filePath path of the file - * @throws IOException error - * @throws SAXException error - * @throws ParserConfigurationException error - * @throws ParseException error - * @throws StreamedCourseXMLException error - */ - public StreamedCourseXMLReader(String filePath) throws IOException, SAXException, ParserConfigurationException, ParseException, StreamedCourseXMLException { - this(filePath, true); - } - /** * Constructor for Streamed Race XML * @param filePath file path to read @@ -55,10 +41,9 @@ public class StreamedCourseXMLReader extends XMLReader { * @throws IOException error * @throws SAXException error * @throws ParserConfigurationException error - * @throws ParseException error * @throws StreamedCourseXMLException error */ - public StreamedCourseXMLReader(String filePath, boolean read) throws IOException, SAXException, ParserConfigurationException, ParseException, StreamedCourseXMLException { + public StreamedCourseXMLReader(String filePath, boolean read) throws IOException, SAXException, ParserConfigurationException, StreamedCourseXMLException { super(filePath); if (read) { read(); @@ -71,10 +56,9 @@ public class StreamedCourseXMLReader extends XMLReader { * @throws IOException error * @throws SAXException error * @throws ParserConfigurationException error - * @throws ParseException error * @throws StreamedCourseXMLException error */ - public StreamedCourseXMLReader(InputStream xmlString) throws IOException, SAXException, ParserConfigurationException, ParseException, StreamedCourseXMLException { + public StreamedCourseXMLReader(InputStream xmlString) throws IOException, SAXException, ParserConfigurationException, StreamedCourseXMLException { super(xmlString); read(); } @@ -268,10 +252,6 @@ public class StreamedCourseXMLReader extends XMLReader { return COORDINATEPADDING; } - public ZonedDateTime getCreationTimeDate() { - return creationTimeDate; - } - public ZonedDateTime getRaceStartTime() { return raceStartTime; } diff --git a/visualiser/src/main/java/seng302/Mock/StreamedRace.java b/visualiser/src/main/java/seng302/Mock/StreamedRace.java index 0856cb0c..5c06ddc1 100644 --- a/visualiser/src/main/java/seng302/Mock/StreamedRace.java +++ b/visualiser/src/main/java/seng302/Mock/StreamedRace.java @@ -27,8 +27,7 @@ public class StreamedRace extends Race { String name = officialStart.getName(); Marker endMarker = officialStart.getEndMarker(); - for (int i = 0; i < startingBoats.size(); i++) { - Boat boat = startingBoats.get(i); + for (Boat boat : startingBoats) { if (boat != null) { Leg startLeg = new Leg(name, 0); startLeg.setEndMarker(endMarker); diff --git a/visualiser/src/main/java/seng302/Model/BoatInRace.java b/visualiser/src/main/java/seng302/Model/BoatInRace.java index 274a8000..39087177 100644 --- a/visualiser/src/main/java/seng302/Model/BoatInRace.java +++ b/visualiser/src/main/java/seng302/Model/BoatInRace.java @@ -4,7 +4,6 @@ import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.scene.paint.Color; import org.geotools.referencing.GeodeticCalculator; -import seng302.Constants; import seng302.GPSCoordinate; import java.awt.geom.Point2D; @@ -28,6 +27,7 @@ public class BoatInRace extends Boat { private boolean started = false; private final StringProperty position; private double heading; + private static final double WAKE_SCALE = 10; private final Queue track = new ConcurrentLinkedQueue<>(); private long nextValidTime = 0; @@ -108,7 +108,7 @@ public class BoatInRace extends Boat { */ public GPSCoordinate getWake() { double reverseHeading = getHeading() - 180; - double distance = Constants.wakeScale * getVelocity(); + double distance = WAKE_SCALE * getVelocity(); GeodeticCalculator calc = new GeodeticCalculator(); calc.setStartingGeographicPoint( diff --git a/visualiser/src/main/java/seng302/Model/Leg.java b/visualiser/src/main/java/seng302/Model/Leg.java index fd596704..3b394fd1 100644 --- a/visualiser/src/main/java/seng302/Model/Leg.java +++ b/visualiser/src/main/java/seng302/Model/Leg.java @@ -1,7 +1,6 @@ package seng302.Model; import org.geotools.referencing.GeodeticCalculator; -import seng302.Constants; import seng302.GPSCoordinate; /** @@ -13,6 +12,8 @@ public class Leg { private Marker startMarker; private Marker endMarker; private final int legNumber; + // 1 nautical mile = 1852 meters + public static final int NM_TO_METERS = 1852; /** * Leg Initializer @@ -97,7 +98,7 @@ public class Leg { GPSCoordinate endMarker = this.endMarker.getAverageGPSCoordinate(); calc.setStartingGeographicPoint(startMarker.getLongitude(), startMarker.getLatitude()); calc.setDestinationGeographicPoint(endMarker.getLongitude(), endMarker.getLatitude()); - this.distance = calc.getOrthodromicDistance() / Constants.NMToMetersConversion; + this.distance = calc.getOrthodromicDistance() / NM_TO_METERS; } diff --git a/visualiser/src/main/java/seng302/Model/RaceClock.java b/visualiser/src/main/java/seng302/Model/RaceClock.java index bef6c206..f17b9e12 100644 --- a/visualiser/src/main/java/seng302/Model/RaceClock.java +++ b/visualiser/src/main/java/seng302/Model/RaceClock.java @@ -34,13 +34,6 @@ public class RaceClock implements Runnable { setTime(time); } - public RaceClock(long utcTime, ZoneId zoneId) { - this.zoneId = zoneId; - this.timeString = new SimpleStringProperty(); - this.time = (new Date(utcTime)).toInstant().atZone(zoneId); - setTime(time); - } - public static ZonedDateTime getCurrentZonedDateTime(GPSCoordinate gpsCoordinate) { TimeZoneLookup timeZoneLookup = new TimeZoneLookup(); TimeZoneResult timeZoneResult = timeZoneLookup.getTimeZone(gpsCoordinate.getLatitude(), gpsCoordinate.getLongitude()); diff --git a/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java b/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java index e65a45c8..b4815d22 100644 --- a/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java +++ b/visualiser/src/main/java/seng302/Model/ResizableRaceCanvas.java @@ -5,7 +5,6 @@ import javafx.collections.ObservableList; import javafx.scene.paint.Color; import javafx.scene.paint.Paint; import javafx.scene.transform.Rotate; -import seng302.GPSCoordinate; import seng302.GraphCoordinate; import seng302.Mock.StreamedCourse; import seng302.RaceDataSource; diff --git a/visualiser/src/main/java/seng302/VisualiserInput.java b/visualiser/src/main/java/seng302/VisualiserInput.java index d1fd53de..4f2b3ce9 100644 --- a/visualiser/src/main/java/seng302/VisualiserInput.java +++ b/visualiser/src/main/java/seng302/VisualiserInput.java @@ -1,7 +1,6 @@ package seng302; import org.xml.sax.SAXException; import seng302.Mock.*; -import seng302.Model.Boat; import seng302.Networking.BinaryMessageDecoder; import seng302.Networking.Exceptions.InvalidMessageException; import seng302.Networking.Messages.*; @@ -11,10 +10,8 @@ import java.io.DataInputStream; import java.io.IOException; import java.net.Socket; import java.nio.ByteBuffer; -import java.text.ParseException; import java.util.Arrays; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.concurrent.ArrayBlockingQueue; @@ -317,7 +314,7 @@ public class VisualiserInput implements Runnable { course.setStreamedCourseXMLReader(new StreamedCourseXMLReader(xmlMessage.getXmlMessage())); } //TODO REFACTOR should put all of these exceptions behind a StreamedCourseXMLReaderException. - catch (IOException | SAXException | ParserConfigurationException | ParseException | StreamedCourseXMLException e) { + catch (IOException | SAXException | ParserConfigurationException | StreamedCourseXMLException e) { System.err.println("Error creating StreamedCourseXMLReader: " + e.getMessage()); //Continue to the next loop iteration/message. } diff --git a/visualiser/src/test/java/seng302/Model/LegTest.java b/visualiser/src/test/java/seng302/Model/LegTest.java index 470d3168..30a68a64 100644 --- a/visualiser/src/test/java/seng302/Model/LegTest.java +++ b/visualiser/src/test/java/seng302/Model/LegTest.java @@ -2,12 +2,12 @@ package seng302.Model; import org.geotools.referencing.GeodeticCalculator; import org.junit.Test; -import seng302.Constants; import seng302.GPSCoordinate; import java.awt.geom.Point2D; import static junit.framework.TestCase.assertEquals; +import static seng302.Model.Leg.NM_TO_METERS; /** * Created by esa46 on 22/03/17. @@ -20,7 +20,7 @@ public class LegTest { public void calculateDistanceHandles5nmNorth() { GeodeticCalculator calc = new GeodeticCalculator(); calc.setStartingGeographicPoint(0, 0); - calc.setDirection(0, 5 * Constants.NMToMetersConversion); + calc.setDirection(0, 5 * NM_TO_METERS); Marker endMarker = getEndMarker(calc.getDestinationGeographicPoint()); Leg test = new Leg("Test", ORIGIN_MARKER, endMarker, 0); @@ -31,7 +31,7 @@ public class LegTest { public void calculateDistanceHandles12nmEast() { GeodeticCalculator calc = new GeodeticCalculator(); calc.setStartingGeographicPoint(0, 0); - calc.setDirection(90, 12 * Constants.NMToMetersConversion); + calc.setDirection(90, 12 * NM_TO_METERS); Marker endMarker = getEndMarker(calc.getDestinationGeographicPoint()); Leg test = new Leg("Test", ORIGIN_MARKER, endMarker, 0); @@ -42,7 +42,7 @@ public class LegTest { public void calculateDistanceHandlesHalfnmSouth() { GeodeticCalculator calc = new GeodeticCalculator(); calc.setStartingGeographicPoint(0, 0); - calc.setDirection(180, 0.5 * Constants.NMToMetersConversion); + calc.setDirection(180, 0.5 * NM_TO_METERS); Marker endMarker = getEndMarker(calc.getDestinationGeographicPoint()); Leg test = new Leg("Test", ORIGIN_MARKER, endMarker, 0); @@ -53,7 +53,7 @@ public class LegTest { public void calculateDistanceHandlesPoint1nmWest() { GeodeticCalculator calc = new GeodeticCalculator(); calc.setStartingGeographicPoint(0, 0); - calc.setDirection(-90, 0.1 * Constants.NMToMetersConversion); + calc.setDirection(-90, 0.1 * NM_TO_METERS); Marker endMarker = getEndMarker(calc.getDestinationGeographicPoint()); Leg test = new Leg("Test", ORIGIN_MARKER, endMarker, 0);