# Conflicts:
#	src/test/java/seng302/models/BoatGroupTest.java
This commit is contained in:
Calum
2017-05-04 14:00:24 +12:00
20 changed files with 434 additions and 475 deletions
+6 -3
View File
@@ -19,8 +19,10 @@ public class App extends Application
primaryStage.setMaximized(true); primaryStage.setMaximized(true);
primaryStage.show(); primaryStage.show();
primaryStage.setOnCloseRequest(e -> { primaryStage.setOnCloseRequest(e -> {
StreamParser.appClose();
StreamReceiver.noMoreBytes();
System.out.println("[CLIENT] Exiting program");
System.exit(0); System.exit(0);
}); });
@@ -39,8 +41,7 @@ public class App extends Application
if (args.length == 3 && args[0].equals("-server")){ if (args.length == 3 && args[0].equals("-server")){
sr = new StreamReceiver(args[1], Integer.valueOf(args[2]), "RaceStream"); sr = new StreamReceiver(args[1], Integer.valueOf(args[2]), "RaceStream");
} } else if(args.length == 2 && args[0].equals("-server")){
else if(args.length == 2 && args[0].equals("-server")){
switch (args[1]) { switch (args[1]) {
case "internal": case "internal":
sr = new StreamReceiver("localhost", 8085, "RaceStream"); sr = new StreamReceiver("localhost", 8085, "RaceStream");
@@ -56,6 +57,8 @@ public class App extends Application
//Change the StreamReceiver in this else block to change the default data source. //Change the StreamReceiver in this else block to change the default data source.
else{ else{
sr = new StreamReceiver("localhost", 8085, "RaceStream"); sr = new StreamReceiver("localhost", 8085, "RaceStream");
// sr = new StreamReceiver("livedata.americascup.com", 4941, "RaceStream");
// sr = new StreamReceiver("csse-s302staff.canterbury.ac.nz", 4941, "RaceStream");
} }
sr.start(); sr.start();
@@ -11,12 +11,10 @@ import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.AnchorPane; import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
import javafx.scene.text.Font; import javafx.scene.text.Font;
import javafx.stage.Stage; import javafx.stage.Stage;
import seng302.models.Boat; import seng302.models.*;
import seng302.models.BoatGroup;
import seng302.models.Colors;
import seng302.models.RaceObject;
import seng302.models.mark.*; import seng302.models.mark.*;
import seng302.models.parsers.StreamParser; import seng302.models.parsers.StreamParser;
import seng302.models.parsers.packets.BoatPositionPacket; import seng302.models.parsers.packets.BoatPositionPacket;
@@ -151,9 +149,10 @@ public class CanvasController {
private void addRaceBorder() { private void addRaceBorder() {
XMLParser.RaceXMLObject raceXMLObject = StreamParser.getXmlObject().getRaceXML(); XMLParser.RaceXMLObject raceXMLObject = StreamParser.getXmlObject().getRaceXML();
ArrayList<Limit> courseLimits = raceXMLObject.getCourseLimit(); ArrayList<Limit> courseLimits = raceXMLObject.getCourseLimit();
gc.setStroke(Color.DARKRED); gc.setStroke(Color.DARKBLUE);
gc.setLineWidth(3); gc.setLineWidth(3);
double[] xBoundaryPoints = new double[courseLimits.size()];
double[] yBoundaryPoints = new double[courseLimits.size()];
for (int i = 0; i < courseLimits.size() - 1; i++) { for (int i = 0; i < courseLimits.size() - 1; i++) {
Limit thisPoint1 = courseLimits.get(i); Limit thisPoint1 = courseLimits.get(i);
SingleMark thisMark1 = new SingleMark("", thisPoint1.getLat(), thisPoint1.getLng(), thisPoint1.getSeqID()); SingleMark thisMark1 = new SingleMark("", thisPoint1.getLat(), thisPoint1.getLng(), thisPoint1.getSeqID());
@@ -163,18 +162,21 @@ public class CanvasController {
Point2D borderPoint2 = findScaledXY(thisMark2); Point2D borderPoint2 = findScaledXY(thisMark2);
gc.strokeLine(borderPoint1.getX(), borderPoint1.getY(), gc.strokeLine(borderPoint1.getX(), borderPoint1.getY(),
borderPoint2.getX(), borderPoint2.getY()); borderPoint2.getX(), borderPoint2.getY());
xBoundaryPoints[i] = borderPoint1.getX();
yBoundaryPoints[i] = borderPoint1.getY();
} }
Limit thisPoint1 = courseLimits.get(courseLimits.size()-1); Limit thisPoint1 = courseLimits.get(courseLimits.size()-1);
SingleMark thisMark1 = new SingleMark("", thisPoint1.getLat(), thisPoint1.getLng(), thisPoint1.getSeqID()); SingleMark thisMark1 = new SingleMark("", thisPoint1.getLat(), thisPoint1.getLng(), thisPoint1.getSeqID());
Limit thisPoint2 = courseLimits.get(0); Limit thisPoint2 = courseLimits.get(0);
SingleMark thisMark2 = new SingleMark("", thisPoint2.getLat(), thisPoint2.getLng(), thisPoint2.getSeqID()); SingleMark thisMark2 = new SingleMark("", thisPoint2.getLat(), thisPoint2.getLng(), thisPoint2.getSeqID());
Point2D borderPoint1 = findScaledXY(thisMark1); Point2D borderPoint1 = findScaledXY(thisMark1);
Point2D borderPoint2 = findScaledXY(thisMark2); Point2D borderPoint2 = findScaledXY(thisMark2);
gc.strokeLine(borderPoint1.getX(), borderPoint1.getY(), gc.strokeLine(borderPoint1.getX(), borderPoint1.getY(),
borderPoint2.getX(), borderPoint2.getY()); borderPoint2.getX(), borderPoint2.getY());
xBoundaryPoints[courseLimits.size()-1] = borderPoint1.getX();
yBoundaryPoints[courseLimits.size()-1] = borderPoint1.getY();
gc.setFill(Color.LIGHTBLUE);
gc.fillPolygon(xBoundaryPoints,yBoundaryPoints,yBoundaryPoints.length);
} }
@@ -321,13 +323,16 @@ public class CanvasController {
*/ */
private void drawBoats() { private void drawBoats() {
// Map<Boat, TimelineInfo> timelineInfos = raceViewController.getTimelineInfos(); // Map<Boat, TimelineInfo> timelineInfos = raceViewController.getTimelineInfos();
List<Boat> boats = raceViewController.getStartingBoats(); // List<Boat> boats = raceViewController.getStartingBoats();
Map<Integer, Yacht> boats = StreamParser.getBoats();
Double startingX = raceObjects.get(0).getLayoutX(); Double startingX = raceObjects.get(0).getLayoutX();
Double startingY = raceObjects.get(0).getLayoutY(); Double startingY = raceObjects.get(0).getLayoutY();
Group boatAnnotations = new Group(); Group boatAnnotations = new Group();
for (Boat boat : boats) { for (Yacht boat : boats.values()) {
BoatGroup boatGroup = new BoatGroup(boat, Colors.getColor()); // for (Boat boat : boats) {
boat.setColour(Colors.getColor());
BoatGroup boatGroup = new BoatGroup(boat, boat.getColour());
boatGroup.moveTo(startingX, startingY, 0d); boatGroup.moveTo(startingX, startingY, 0d);
//boatGroup.setStage(raceViewController.getStage()); //boatGroup.setStage(raceViewController.getStage());
raceObjects.add(boatGroup); raceObjects.add(boatGroup);
@@ -65,9 +65,7 @@ public class Controller implements Initializable {
@Override @Override
public void initialize(URL location, ResourceBundle resources) { public void initialize(URL location, ResourceBundle resources) {
DateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
realTime.setText(format.format(System.currentTimeMillis()));
} }
/** /**
@@ -144,14 +142,14 @@ public class Controller implements Initializable {
posCol.setCellValueFactory( posCol.setCellValueFactory(
new PropertyValueFactory<>("position") new PropertyValueFactory<>("position")
); );
if (StreamParser.isRaceStarted()) { // if (StreamParser.isRaceStarted()) {
data.addAll(StreamParser.getBoatsPos().values()); data.addAll(StreamParser.getBoatsPos().values());
} else { // } else {
for (Yacht boat : StreamParser.getBoats().values()) { // for (Yacht boat : StreamParser.getBoats().values()) {
boat.setPosition("-"); // boat.setPosition("-");
data.add(boat); // data.add(boat);
} // }
} // }
teamList.refresh(); teamList.refresh();
// posCol.setSortType(TableColumn.SortType.ASCENDING); // posCol.setSortType(TableColumn.SortType.ASCENDING);
@@ -1,15 +1,15 @@
package seng302.controllers; package seng302.controllers;
import seng302.models.Boat;
import seng302.models.Race; import seng302.models.Race;
import seng302.models.Yacht;
import seng302.models.parsers.ConfigParser; import seng302.models.parsers.ConfigParser;
import seng302.models.parsers.CourseParser; import seng302.models.parsers.CourseParser;
import seng302.models.parsers.StreamParser; import seng302.models.parsers.StreamParser;
import seng302.models.parsers.TeamsParser;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Map;
import java.util.Random; import java.util.Random;
/** /**
@@ -41,23 +41,24 @@ public class RaceController {
Race race = new Race(); Race race = new Race();
// StreamParser.xmlObject // StreamParser.xmlObject
// Read team names from file // Read team names from file
TeamsParser tp = new TeamsParser(teamsConfigFile); // TeamsParser tp = new TeamsParser(teamsConfigFile);
// Read course from file // Read course from file
ConfigParser config = new ConfigParser(configFile); // ConfigParser config = new ConfigParser(configFile);
ArrayList<String> boatNames = new ArrayList<>(); ArrayList<String> boatNames = new ArrayList<>();
ArrayList<Boat> teams = tp.getBoats(); // ArrayList<Boat> teams = tp.getBoats();
Map<Long, Yacht> teams = StreamParser.getBoatsPos();
//get race size //get race size
int numberOfBoats = teams.size(); int numberOfBoats = teams.size();
//get time scale //get time scale
double timeScale = config.getTimeScale(); // double timeScale = config.getTimeScale();
race.setTimeScale(timeScale); // race.setTimeScale(timeScale);
for (Boat boat : teams) { for (Yacht boat : teams.values()) {
boatNames.add(boat.getTeamName()); boatNames.add(boat.getBoatName());
race.addBoat(boat); race.addBoat(boat);
} }
@@ -27,7 +27,7 @@ public class RaceResultController implements Initializable{
int boatPosition = this.race.getFinishedBoats().length; int boatPosition = this.race.getFinishedBoats().length;
for (int i = this.race.getFinishedBoats().length - 1; i >= 0; i--){ for (int i = this.race.getFinishedBoats().length - 1; i >= 0; i--){
resultsVBox.getChildren().add(0, new Text(boatPosition + ": " + this.race.getFinishedBoats()[i].getTeamName())); resultsVBox.getChildren().add(0, new Text(boatPosition + ": " + this.race.getFinishedBoats()[i].getBoatName()));
boatPosition--; boatPosition--;
} }
@@ -1,5 +1,6 @@
package seng302.controllers; package seng302.controllers;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import javafx.animation.Animation; import javafx.animation.Animation;
import javafx.animation.KeyFrame; import javafx.animation.KeyFrame;
import javafx.animation.Timeline; import javafx.animation.Timeline;
@@ -44,11 +45,11 @@ public class RaceViewController extends Thread{
@FXML @FXML
private CanvasController includedCanvasController; private CanvasController includedCanvasController;
private ArrayList<Boat> startingBoats = new ArrayList<>(); private ArrayList<Yacht> startingBoats = new ArrayList<>();
private boolean displayFps; private boolean displayFps;
private Timeline timerTimeline; private Timeline timerTimeline;
private Map<Boat, TimelineInfo> timelineInfos = new HashMap<>(); private Map<Yacht, TimelineInfo> timelineInfos = new HashMap<>();
private ArrayList<Boat> boatOrder = new ArrayList<>(); private ArrayList<Yacht> boatOrder = new ArrayList<>();
private Race race; private Race race;
private Stage stage; private Stage stage;
@@ -57,7 +58,7 @@ public class RaceViewController extends Thread{
RaceController raceController = new RaceController(); RaceController raceController = new RaceController();
raceController.initializeRace(); raceController.initializeRace();
race = raceController.getRace(); race = raceController.getRace();
for (Boat boat : race.getBoats()) { for (Yacht boat : race.getBoats()) {
startingBoats.add(boat); startingBoats.add(boat);
} }
// try{ // try{
@@ -72,6 +73,7 @@ public class RaceViewController extends Thread{
initializeTimer(); initializeTimer();
initializeSettings(); initializeSettings();
initialiseWindDirection(); initialiseWindDirection();
initialisePositionVBox();
//set wind direction!!!!!!! can't find another place to put my code --haoming //set wind direction!!!!!!! can't find another place to put my code --haoming
// double windDirection = new ConfigParser("/config/config.xml").getWindDirection(); // double windDirection = new ConfigParser("/config/config.xml").getWindDirection();
// windDirectionText.setText(String.format("%.1f°", windDirection)); // windDirectionText.setText(String.format("%.1f°", windDirection));
@@ -160,12 +162,26 @@ public class RaceViewController extends Thread{
windDirTimeline.playFromStart(); windDirTimeline.playFromStart();
} }
private void initialisePositionVBox() {
Timeline posVBoxTimeline = new Timeline();
posVBoxTimeline.setCycleCount(Timeline.INDEFINITE);
posVBoxTimeline.getKeyFrames().add(
new KeyFrame(Duration.seconds(1),
event -> {
showOrder();
})
);
posVBoxTimeline.playFromStart();
}
/** /**
* Generates time line for each boat, and stores time time into timelineInfos hash map * Generates time line for each boat, and stores time time into timelineInfos hash map
*/ */
private void initializeTimelines() { private void initializeTimelines() {
HashMap<Boat, List> boat_events = race.getEvents(); HashMap<Yacht, List> boat_events = race.getEvents();
for (Boat boat : boat_events.keySet()) { for (Yacht boat : boat_events.keySet()) {
startingBoats.add(boat); startingBoats.add(boat);
// // x, y are the real time coordinates // // x, y are the real time coordinates
// DoubleProperty x = new SimpleDoubleProperty(); // DoubleProperty x = new SimpleDoubleProperty();
@@ -271,13 +287,13 @@ public class RaceViewController extends Thread{
} }
public void handleEvent(Event event) { public void handleEvent(Event event) {
Boat boat = event.getBoat(); Yacht boat = event.getBoat();
boatOrder.remove(boat); boatOrder.remove(boat);
boat.setMarkLastPast(event.getMarkPosInRace()); boat.setMarkLastPast(event.getMarkPosInRace());
boatOrder.add(boat); boatOrder.add(boat);
boatOrder.sort(new Comparator<Boat>() { boatOrder.sort(new Comparator<Yacht>() {
@Override @Override
public int compare(Boat b1, Boat b2) { public int compare(Yacht b1, Yacht b2) {
return b2.getMarkLastPast() - b1.getMarkLastPast(); return b2.getMarkLastPast() - b1.getMarkLastPast();
} }
}); });
@@ -288,8 +304,20 @@ public class RaceViewController extends Thread{
positionVbox.getChildren().clear(); positionVbox.getChildren().clear();
positionVbox.getChildren().removeAll(); positionVbox.getChildren().removeAll();
for (Boat boat : boatOrder) { // for (Boat boat : boatOrder) {
positionVbox.getChildren().add(new Text(boat.getShortName() + " " + boat.getSpeedInKnots() + " Knots")); // positionVbox.getChildren().add(new Text(boat.getShortName() + " " + boat.getSpeedInKnots() + " Knots"));
// }
for (Yacht boat : StreamParser.getBoatsPos().values()) {
System.out.println(boat.getBoatStatus());
if (boat.getBoatStatus() == 3) { // 3 is finish status
positionVbox.getChildren().add(new Text(boat.getPosition() + ". " +
boat.getShortName() + " (Finished)"));
} else {
positionVbox.getChildren().add(new Text(boat.getPosition() + ". " +
boat.getShortName() + " "));
}
} }
} }
@@ -341,11 +369,11 @@ public class RaceViewController extends Thread{
return race; return race;
} }
public Map<Boat, TimelineInfo> getTimelineInfos() { public Map<Yacht, TimelineInfo> getTimelineInfos() {
return timelineInfos; return timelineInfos;
} }
public ArrayList<Boat> getStartingBoats(){ public ArrayList<Yacht> getStartingBoats(){
return startingBoats; return startingBoats;
} }
-147
View File
@@ -1,147 +0,0 @@
package seng302.models;
import javafx.geometry.Point2D;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
import javafx.scene.text.Text;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate;
import javafx.util.Pair;
/**
* Represents a boat in the race.
*/
public class Boat {
private String teamName;
private double velocity;
private double lat;
private double lon;
private double heading;
private int markLastPast;
private String shortName;
private int id;
/**
* For testing only.
* @param teamName Boat team name.
*/
public Boat(String teamName) {
this.teamName = teamName;
this.velocity = 10; // Default velocity
this.lat = 0.0;
this.lon = 0.0;
this.shortName = "";
}
/**
* Represents a boat in the race.
*
* @param teamName The name of the team sailing the boat
* @param boatVelocity The speed of the boat in meters/second
* @param shortName A shorter version of the teams name
*/
public Boat(String teamName, double boatVelocity, String shortName, int id) {
this.teamName = teamName;
this.velocity = boatVelocity;
this.shortName = shortName;
this.id = id;
}
/**
* Returns the name of the team sailing the boat
*
* @return The name of the team
*/
public String getTeamName() {
return this.teamName;
}
/**
* Sets the name of the team sailing the boat
*
* @param teamName The name of the team
*/
public void setTeamName(String teamName) {
this.teamName = teamName;
}
/**
* Gets velocity of the boat
*
* @return a float number of the boat velocity
*/
public double getVelocity() {
return this.velocity;
}
/**
* Sets velocity of the boat
*
* @param velocity The velocity of boat
*/
public void setVelocity(double velocity) {
this.velocity = velocity;
}
/**
* Sets the boats location
*
* @param lat, the boats latitude
* @param lon, the boats longitude
*/
public void setLocation(double lat, double lon) {
this.lat = lat;
this.lon = lon;
}
public Pair<Double, Double> getLocation ()
{
return new Pair<>(this.lat, this.lon);
}
public double getLatitude(){
return this.lat;
}
public double getLongitude(){
return this.lon;
}
public void setLatitude (double latitude) {
this.lat = latitude;
}
public void setlongitude (double longitude) {
this.lon =longitude;
}
public double getSpeedInKnots(){
return Math.round((this.velocity * 1.94384) * 100d) / 100d;
}
public void setMarkLastPast(int markLastPast) {
this.markLastPast = markLastPast;
}
public int getMarkLastPast() {
return markLastPast;
}
public double getHeading(){
return this.heading;
}
public void setHeading(double heading) {
this.heading = heading;
}
public String getShortName(){
return this.shortName;
}
public int getId() {
return id;
}
}
+6 -6
View File
@@ -33,7 +33,7 @@ public class BoatGroup extends RaceObject{
private int wakeGenerationDelay = 10; private int wakeGenerationDelay = 10;
private double distanceTravelled; private double distanceTravelled;
//Graphical objects //Graphical objects
private Boat boat; private Yacht boat;
private Group lineGroup = new Group(); private Group lineGroup = new Group();
private Polygon boatPoly; private Polygon boatPoly;
private Text teamNameObject; private Text teamNameObject;
@@ -54,7 +54,7 @@ public class BoatGroup extends RaceObject{
* BoatGroup to update. * BoatGroup to update.
* @param color The colour of the boat polygon and the trailing line. * @param color The colour of the boat polygon and the trailing line.
*/ */
public BoatGroup (Boat boat, Color color){ public BoatGroup (Yacht boat, Color color){
this.boat = boat; this.boat = boat;
initChildren(color); initChildren(color);
} }
@@ -66,7 +66,7 @@ public class BoatGroup extends RaceObject{
* @param color The colour of the boat polygon and the trailing line. * @param color The colour of the boat polygon and the trailing line.
* @param points An array of co-ordinates x1,y1,x2,y2,x3,y3... that will make up the boat polygon. * @param points An array of co-ordinates x1,y1,x2,y2,x3,y3... that will make up the boat polygon.
*/ */
public BoatGroup (Boat boat, Color color, double... points) public BoatGroup (Yacht boat, Color color, double... points)
{ {
this.boat = boat; this.boat = boat;
initChildren(color, points); initChildren(color, points);
@@ -295,7 +295,7 @@ public class BoatGroup extends RaceObject{
wake.setVisible(visible); wake.setVisible(visible);
} }
public Boat getBoat() { public Yacht getBoat() {
return boat; return boat;
} }
@@ -307,7 +307,7 @@ public class BoatGroup extends RaceObject{
*/ */
public boolean hasRaceId (int... raceIds) { public boolean hasRaceId (int... raceIds) {
for (int id : raceIds) { for (int id : raceIds) {
if (id == boat.getId()) if (id == boat.getSourceID())
return true; return true;
} }
return false; return false;
@@ -319,7 +319,7 @@ public class BoatGroup extends RaceObject{
* @return An array containing all ID's associated with this RaceObject. * @return An array containing all ID's associated with this RaceObject.
*/ */
public int[] getRaceIds () { public int[] getRaceIds () {
return new int[] {boat.getId()}; return new int[] {boat.getSourceID()};
} }
/** /**
+7 -7
View File
@@ -11,7 +11,7 @@ import java.util.Date;
*/ */
public class Event { public class Event {
private Double time; // Time the event occurs private Double time; // Time the event occurs
private Boat boat; private Yacht boat;
private boolean isFinishingEvent = false; // This event occurs when a boat finishes the race private boolean isFinishingEvent = false; // This event occurs when a boat finishes the race
private Mark mark1; // This mark private Mark mark1; // This mark
private Mark mark2; // Next mark private Mark mark2; // Next mark
@@ -28,7 +28,7 @@ public class Event {
* @param eventTime, what time the event happens * @param eventTime, what time the event happens
* @param eventBoat, the boat that the event belongs to * @param eventBoat, the boat that the event belongs to
*/ */
public Event(Double eventTime, Boat eventBoat, Mark mark1, Mark mark2, int markPosInRace) { public Event(Double eventTime, Yacht eventBoat, Mark mark1, Mark mark2, int markPosInRace) {
this.time = eventTime; this.time = eventTime;
this.boat = eventBoat; this.boat = eventBoat;
this.mark1 = mark1; this.mark1 = mark1;
@@ -45,7 +45,7 @@ public class Event {
* @param eventTime, what time the event happens * @param eventTime, what time the event happens
* @param eventBoat, the boat that the event belongs to * @param eventBoat, the boat that the event belongs to
*/ */
public Event(Double eventTime, Boat eventBoat, Mark mark1, int markPosInRace) { public Event(Double eventTime, Yacht eventBoat, Mark mark1, int markPosInRace) {
this.time = eventTime; this.time = eventTime;
this.boat = eventBoat; this.boat = eventBoat;
this.mark1 = mark1; this.mark1 = mark1;
@@ -70,11 +70,11 @@ public class Event {
return (new SimpleDateFormat("mm:ss:SSS")).format(new Date(time.longValue())); return (new SimpleDateFormat("mm:ss:SSS")).format(new Date(time.longValue()));
} }
public Boat getBoat() { public Yacht getBoat() {
return this.boat; return this.boat;
} }
public void setBoat(Boat eventBoat) { public void setBoat(Yacht eventBoat) {
this.boat = eventBoat; this.boat = eventBoat;
} }
@@ -90,10 +90,10 @@ public class Event {
public String getEventString() { public String getEventString() {
// This event is a boat finishing the race // This event is a boat finishing the race
if (this.isFinishingEvent) { if (this.isFinishingEvent) {
return (this.getTimeString() + ", " + this.getBoat().getTeamName() + " finished the race"); return (this.getTimeString() + ", " + this.getBoat().getBoatName() + " finished the race");
} }
// System.out.println(this.getDistanceBetweenMarks()); // System.out.println(this.getDistanceBetweenMarks());
return (this.getTimeString() + ", " + this.getBoat().getTeamName() + " passed " + this.mark1.getName() + " going heading " + this.getBoatHeading() + "°"); return (this.getTimeString() + ", " + this.getBoat().getBoatName() + " passed " + this.mark1.getName() + " going heading " + this.getBoatHeading() + "°");
} }
/** /**
+13 -13
View File
@@ -10,9 +10,9 @@ import java.util.*;
*/ */
public class Race { public class Race {
private ArrayList<Boat> boats; // The boats in the race private ArrayList<Yacht> boats; // The boats in the race
private ArrayList<Boat> finishingOrder; // The order in which the boats finish the race private ArrayList<Yacht> finishingOrder; // The order in which the boats finish the race
private HashMap<Boat, List> events = new HashMap<>(); // The events that occur in the race private HashMap<Yacht, List> events = new HashMap<>(); // The events that occur in the race
private List<Mark> course; // Marks in the race private List<Mark> course; // Marks in the race
private long startTime = 0; private long startTime = 0;
private double timeScale = 1; private double timeScale = 1;
@@ -33,7 +33,7 @@ public class Race {
* *
* @param boat, the boat to add * @param boat, the boat to add
*/ */
public void addBoat(Boat boat) { public void addBoat(Yacht boat) {
boats.add(boat); boats.add(boat);
} }
@@ -42,12 +42,12 @@ public class Race {
* *
* @return a list of boats * @return a list of boats
*/ */
public Boat[] getShuffledBoats() { public Yacht[] getShuffledBoats() {
// Shuffle the list of boats // Shuffle the list of boats
long seed = System.nanoTime(); long seed = System.nanoTime();
Collections.shuffle(this.boats, new Random(seed)); Collections.shuffle(this.boats, new Random(seed));
return boats.toArray(new Boat[boats.size()]); return boats.toArray(new Yacht[boats.size()]);
} }
/** /**
@@ -56,8 +56,8 @@ public class Race {
* *
* @return a list of boats * @return a list of boats
*/ */
public Boat[] getFinishedBoats() { public Yacht[] getFinishedBoats() {
return this.finishingOrder.toArray(new Boat[this.finishingOrder.size()]); return this.finishingOrder.toArray(new Yacht[this.finishingOrder.size()]);
} }
@@ -66,8 +66,8 @@ public class Race {
* *
* @return a list of the boats competing in the race * @return a list of the boats competing in the race
*/ */
public Boat[] getBoats() { public Yacht[] getBoats() {
return boats.toArray(new Boat[boats.size()]); return boats.toArray(new Yacht[boats.size()]);
} }
/** /**
@@ -84,7 +84,7 @@ public class Race {
*/ */
private void generateEvents() { private void generateEvents() {
for (Boat boat : this.boats) { for (Yacht boat : this.boats) {
double totalDistance = 0; double totalDistance = 0;
int numberOfMarks = this.course.size(); int numberOfMarks = this.course.size();
@@ -146,7 +146,7 @@ public class Race {
* Get a map of the events in the race * Get a map of the events in the race
* @return * @return
*/ */
public HashMap<Boat, List> getEvents() { public HashMap<Yacht, List> getEvents() {
return events; return events;
} }
@@ -154,7 +154,7 @@ public class Race {
* Set a boat as finished * Set a boat as finished
* @param boat The boat that has finished the race/home/cosc/student/wmu16 * @param boat The boat that has finished the race/home/cosc/student/wmu16
*/ */
public void setBoatFinished(Boat boat){ public void setBoatFinished(Yacht boat){
this.finishingOrder.add(boat); this.finishingOrder.add(boat);
} }
+53
View File
@@ -1,5 +1,7 @@
package seng302.models; package seng302.models;
import javafx.scene.paint.Color;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@@ -10,6 +12,10 @@ import java.text.SimpleDateFormat;
* also done outside Boat class because some old variables are not used anymore. * also done outside Boat class because some old variables are not used anymore.
*/ */
public class Yacht { public class Yacht {
private Color colour;
private double velocity;
private Integer markLastPast;
private String boatType; private String boatType;
private Integer sourceID; private Integer sourceID;
private String hullID; //matches HullNum in the XML spec. private String hullID; //matches HullNum in the XML spec.
@@ -25,6 +31,29 @@ public class Yacht {
private Long estimateTimeAtFinish; private Long estimateTimeAtFinish;
private String position; private String position;
/**
* Used in EventTest and RaceTest.
*
* @param boatName Create a yacht object with name.
*/
public Yacht (String boatName) {
this.boatName = boatName;
}
/**
* Used in BoatGroupTest.
*
* @param boatName The name of the team sailing the boat
* @param boatVelocity The speed of the boat in meters/second
* @param shortName A shorter version of the teams name
*/
public Yacht(String boatName, double boatVelocity, String shortName, int id) {
this.boatName = boatName;
this.velocity = boatVelocity;
this.shortName = shortName;
this.sourceID = id;
}
public Yacht(String boatType, Integer sourceID, String hullID, String shortName, String boatName, String country) { public Yacht(String boatType, Integer sourceID, String hullID, String shortName, String boatName, String country) {
this.boatType = boatType; this.boatType = boatType;
this.sourceID = sourceID; this.sourceID = sourceID;
@@ -111,4 +140,28 @@ public class Yacht {
public void setPosition(String position) { public void setPosition(String position) {
this.position = position; this.position = position;
} }
public Color getColour() {
return colour;
}
public void setColour(Color colour) {
this.colour = colour;
}
public double getVelocity() {
return velocity;
}
public void setVelocity(double velocity) {
this.velocity = velocity;
}
public Integer getMarkLastPast() {
return markLastPast;
}
public void setMarkLastPast(Integer markLastPast) {
this.markLastPast = markLastPast;
}
} }
@@ -32,7 +32,7 @@ public class StreamParser extends Thread{
private String threadName; private String threadName;
private Thread t; private Thread t;
private static boolean raceStarted = false; private static boolean raceStarted = false;
public static XMLParser xmlObject; private static XMLParser xmlObject;
private static boolean raceFinished = false; private static boolean raceFinished = false;
private static boolean streamStatus = false; private static boolean streamStatus = false;
private static long timeSinceStart = -1; private static long timeSinceStart = -1;
@@ -40,6 +40,7 @@ public class StreamParser extends Thread{
private static Map<Long, Yacht> boatsPos = new TreeMap<>(); private static Map<Long, Yacht> boatsPos = new TreeMap<>();
private static double windDirection = 0; private static double windDirection = 0;
private static String currentTimeString; private static String currentTimeString;
private static boolean appRunning;
/** /**
* Used to initialise the thread name and stream parser object so a thread can be executed * Used to initialise the thread name and stream parser object so a thread can be executed
@@ -56,6 +57,7 @@ public class StreamParser extends Thread{
* *
*/ */
public void run(){ public void run(){
appRunning = true;
try { try {
System.out.println("[CLIENT] Start of stream"); System.out.println("[CLIENT] Start of stream");
streamStatus = true; streamStatus = true;
@@ -63,7 +65,7 @@ public class StreamParser extends Thread{
while (StreamReceiver.packetBuffer == null || StreamReceiver.packetBuffer.size() < 1) { while (StreamReceiver.packetBuffer == null || StreamReceiver.packetBuffer.size() < 1) {
Thread.sleep(1); Thread.sleep(1);
} }
while (true){ while (appRunning){
StreamPacket packet = StreamReceiver.packetBuffer.peek(); StreamPacket packet = StreamReceiver.packetBuffer.peek();
//this code adds a delay to reading from the packetBuffer so //this code adds a delay to reading from the packetBuffer so
//out of order packets have time to order themselves in the queue //out of order packets have time to order themselves in the queue
@@ -105,7 +107,7 @@ public class StreamParser extends Thread{
* Looks at the type of the packet then sends it to the appropriate parser to extract the * Looks at the type of the packet then sends it to the appropriate parser to extract the
* specific data associated with that packet type * specific data associated with that packet type
* *
* @param packet the packet to be looked at * @param packet the packet to be looked at and processed
*/ */
private static void parsePacket(StreamPacket packet) { private static void parsePacket(StreamPacket packet) {
try{ try{
@@ -229,10 +231,16 @@ public class StreamParser extends Thread{
// boatStatus += "\nEstTimeAtFinish: " + bytesToLong(Arrays.copyOfRange(payload,37 + (i * 20),43+ (i * 20))); // boatStatus += "\nEstTimeAtFinish: " + bytesToLong(Arrays.copyOfRange(payload,37 + (i * 20),43+ (i * 20)));
// boatStatuses.add(boatStatus); // boatStatuses.add(boatStatus);
} }
int pos = 1; if (isRaceStarted()) {
for (Yacht yacht : boatsPos.values()) { int pos = 1;
yacht.setPosition(String.valueOf(pos)); for (Yacht yacht : boatsPos.values()) {
pos++; yacht.setPosition(String.valueOf(pos));
pos++;
}
} else {
for (Yacht yacht : boatsPos.values()) {
yacht.setPosition("-");
}
} }
} }
@@ -370,6 +378,7 @@ public class StreamParser extends Thread{
//type 1 is a racing yacht and type 3 is a mark, needed for updating positions of the mark and boat //type 1 is a racing yacht and type 3 is a mark, needed for updating positions of the mark and boat
if (deviceType == 1 || deviceType == 3){ if (deviceType == 1 || deviceType == 3){
BoatPositionPacket boatPacket = new BoatPositionPacket(boatId, timeValid, lat, lon, heading, groundSpeed); BoatPositionPacket boatPacket = new BoatPositionPacket(boatId, timeValid, lat, lon, heading, groundSpeed);
//add a new priority que to the boatPositions HashMap //add a new priority que to the boatPositions HashMap
if (!boatPositions.containsKey(boatId)){ if (!boatPositions.containsKey(boatId)){
boatPositions.put(boatId, new PriorityBlockingQueue<BoatPositionPacket>(256, new Comparator<BoatPositionPacket>() { boatPositions.put(boatId, new PriorityBlockingQueue<BoatPositionPacket>(256, new Comparator<BoatPositionPacket>() {
@@ -379,6 +388,7 @@ public class StreamParser extends Thread{
} }
})); }));
} }
//Adding the boatPacket to the priority que
boatPositions.get(boatId).put(boatPacket); boatPositions.get(boatId).put(boatPacket);
} }
} }
@@ -543,5 +553,10 @@ public class StreamParser extends Thread{
public static Map<Long, Yacht> getBoatsPos() { public static Map<Long, Yacht> getBoatsPos() {
return boatsPos; return boatsPos;
} }
public static void appClose(){
appRunning = false;
System.out.println("[CLIENT] Shutting down stream parser");
}
} }
@@ -21,6 +21,7 @@ public class StreamReceiver extends Thread {
private Thread t; private Thread t;
private String threadName; private String threadName;
public static PriorityBlockingQueue<StreamPacket> packetBuffer; public static PriorityBlockingQueue<StreamPacket> packetBuffer;
private static boolean moreBytes;
public StreamReceiver(String hostAddress, int hostPort, String threadName) { public StreamReceiver(String hostAddress, int hostPort, String threadName) {
this.threadName = threadName; this.threadName = threadName;
@@ -69,7 +70,7 @@ public class StreamReceiver extends Thread {
int sync1; int sync1;
int sync2; int sync2;
boolean moreBytes = true; moreBytes = true;
while(moreBytes) { while(moreBytes) {
try { try {
crcBuffer = new ByteArrayOutputStream(); crcBuffer = new ByteArrayOutputStream();
@@ -121,7 +122,6 @@ public class StreamReceiver extends Thread {
return bytes; return bytes;
} }
private void skipBytes(long n) throws Exception{ private void skipBytes(long n) throws Exception{
for (int i=0; i < n; i++){ for (int i=0; i < n; i++){
readByte(); readByte();
@@ -147,7 +147,6 @@ public class StreamReceiver extends Thread {
return partialLong; return partialLong;
} }
public static void main(String[] args) { public static void main(String[] args) {
StreamReceiver sr = new StreamReceiver("csse-s302staff.canterbury.ac.nz", 4941,"TestThread1"); StreamReceiver sr = new StreamReceiver("csse-s302staff.canterbury.ac.nz", 4941,"TestThread1");
@@ -155,4 +154,9 @@ public class StreamReceiver extends Thread {
sr.start(); sr.start();
} }
public static void noMoreBytes(){
moreBytes = false;
System.out.println("[CLIENT] Shutting down stream receiver");
}
} }
@@ -1,64 +1,64 @@
package seng302.models.parsers; //package seng302.models.parsers;
//
import org.w3c.dom.*; //import org.w3c.dom.*;
import seng302.models.Boat; //import seng302.models.Yacht;
//
import java.util.ArrayList; //import java.util.ArrayList;
import java.util.NoSuchElementException; //import java.util.NoSuchElementException;
//
public class TeamsParser extends FileParser { //public class TeamsParser extends FileParser {
//
private Document doc; // private Document doc;
//
public TeamsParser(String path) { // public TeamsParser(String path) {
super(path); // super(path);
this.doc = this.parseFile(); // this.doc = this.parseFile();
} // }
//
/** // /**
* Create a boat instance by a given team node // * Create a boat instance by a given team node
* @param node a boat node containing name, alias and velocity // * @param node a boat node containing name, alias and velocity
* @return an instance of Boat // * @return an instance of Boat
*/ // */
private Boat parseBoat(Node node) { // private Yacht parseBoat(Node node) {
try { // try {
if (node.getNodeType() == Node.ELEMENT_NODE) { // if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node; // Element element = (Element) node;
String name = element.getElementsByTagName("name").item(0).getTextContent(); // String name = element.getElementsByTagName("name").item(0).getTextContent();
String alias = element.getElementsByTagName("alias").item(0).getTextContent(); // String alias = element.getElementsByTagName("alias").item(0).getTextContent();
double velocity = Double.valueOf(element.getElementsByTagName("velocity").item(0).getTextContent()); // double velocity = Double.valueOf(element.getElementsByTagName("velocity").item(0).getTextContent());
int id = Integer.valueOf(element.getElementsByTagName("id").item(0).getTextContent()); // int id = Integer.valueOf(element.getElementsByTagName("id").item(0).getTextContent());
Boat boat = new Boat(name, velocity, alias, id); // Yacht boat = new Yacht(name, velocity, alias, id);
return boat; // return boat;
} else { // } else {
throw new NoSuchElementException("Cannot generate a boat by given node"); // throw new NoSuchElementException("Cannot generate a boat by given node");
} // }
} catch (Exception e) { // } catch (Exception e) {
e.printStackTrace(); // e.printStackTrace();
return null; // return null;
} // }
} // }
//
/** // /**
* Create an arraylist of boats instance. // * Create an arraylist of boats instance.
* @return an arraylist of boats in teams file // * @return an arraylist of boats in teams file
*/ // */
public ArrayList<Boat> getBoats() { // public ArrayList<Yacht> getBoats() {
ArrayList<Boat> boats = new ArrayList<>(); // ArrayList<Yacht> boats = new ArrayList<>();
//
try { // try {
NodeList nodes = this.doc.getElementsByTagName("team"); // NodeList nodes = this.doc.getElementsByTagName("team");
for (int i = 0; i < nodes.getLength(); i++) { // for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i); // Node node = nodes.item(i);
boats.add(parseBoat(node)); // boats.add(parseBoat(node));
} // }
return boats; // return boats;
} catch (Exception e) { // } catch (Exception e) {
e.printStackTrace(); // e.printStackTrace();
return null; // return null;
} // }
} // }
//
//
} //}
//
@@ -120,6 +120,6 @@ public class Boat {
} }
public long getEstimatedTimeTillFinish(){ public long getEstimatedTimeTillFinish(){
return (long) (getSpeed()) + System.currentTimeMillis(); return (long) (-getSpeed()) + System.currentTimeMillis();
} }
} }
+35 -35
View File
@@ -1,35 +1,35 @@
package seng302; //package seng302;
//
import org.junit.Test; //import org.junit.Test;
import seng302.models.Boat; //import seng302.models.Boat;
//
import static org.junit.Assert.assertEquals; //import static org.junit.Assert.assertEquals;
//
/** ///**
* Unit test for the Team class. // * Unit test for the Team class.
*/ // */
public class BoatTest { //public class BoatTest {
//
@Test // @Test
public void testBoatCreation() { // public void testBoatCreation() {
Boat boat1 = new Boat("Team 1"); // Boat boat1 = new Boat("Team 1");
assertEquals(boat1.getTeamName(), "Team 1"); // assertEquals(boat1.getTeamName(), "Team 1");
assertEquals(boat1.getVelocity(), (double) 10.0, 1e-15); // assertEquals(boat1.getVelocity(), (double) 10.0, 1e-15);
} // }
//
@Test // @Test
public void testChangeTeamName() { // public void testChangeTeamName() {
Boat boat1 = new Boat("Team 1"); // Boat boat1 = new Boat("Team 1");
boat1.setTeamName("Team 2"); // boat1.setTeamName("Team 2");
assertEquals(boat1.getTeamName(), "Team 2"); // assertEquals(boat1.getTeamName(), "Team 2");
} // }
//
@Test // @Test
public void testSetVelocity() { // public void testSetVelocity() {
Boat boat1 = new Boat("Team 1", 29.0, "", 100); // Boat boat1 = new Boat("Team 1", 29.0, "", 100);
assertEquals(boat1.getVelocity(), (double) 29.0, 1e-15); // assertEquals(boat1.getVelocity(), (double) 29.0, 1e-15);
//
boat1.setVelocity(12.0); // boat1.setVelocity(12.0);
assertEquals(boat1.getVelocity(), (double)12.0, 1e-15); // assertEquals(boat1.getVelocity(), (double)12.0, 1e-15);
} // }
} //}
+4 -4
View File
@@ -1,8 +1,8 @@
package seng302; package seng302;
import org.junit.Test; import org.junit.Test;
import seng302.models.Boat;
import seng302.models.Event; import seng302.models.Event;
import seng302.models.Yacht;
import seng302.models.mark.SingleMark; import seng302.models.mark.SingleMark;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
@@ -15,14 +15,14 @@ public class EventTest {
@Test @Test
public void getTimeString() throws Exception { public void getTimeString() throws Exception {
Boat boat = new Boat("testBoat"); Yacht boat = new Yacht("testBoat");
Event event = new Event(1231242.2, boat, new SingleMark("mark1"), new SingleMark("mark2"), 0); Event event = new Event(1231242.2, boat, new SingleMark("mark1"), new SingleMark("mark2"), 0);
assertEquals("20:31:242", event.getTimeString()); assertEquals("20:31:242", event.getTimeString());
} }
@Test @Test
public void testBoatHeading() throws Exception { public void testBoatHeading() throws Exception {
Boat boat = new Boat("testBoat"); Yacht boat = new Yacht("testBoat");
Event event = new Event(1231242.2, boat, new SingleMark("mark1", 142.5, 122.1, 1), new SingleMark("mark2", 121.9,99.2, 2), 0); Event event = new Event(1231242.2, boat, new SingleMark("mark1", 142.5, 122.1, 1), new SingleMark("mark2", 121.9,99.2, 2), 0);
assertEquals(event.getBoatHeading(), 228.0266137055349, 1e-15); assertEquals(event.getBoatHeading(), 228.0266137055349, 1e-15);
@@ -30,7 +30,7 @@ public class EventTest {
@Test @Test
public void testDistanceBetweenMarks() throws Exception { public void testDistanceBetweenMarks() throws Exception {
Boat boat = new Boat("testBoat"); Yacht boat = new Yacht("testBoat");
Event event = new Event(1231242.2, boat, new SingleMark("mark1", 142.5, 122.1, 1), new SingleMark("mark2", 121.9,99.2, 2), 0); Event event = new Event(1231242.2, boat, new SingleMark("mark1", 142.5, 122.1, 1), new SingleMark("mark2", 121.9,99.2, 2), 0);
assertEquals(event.getDistanceBetweenMarks(), 339059.653830461, 1e-15); assertEquals(event.getDistanceBetweenMarks(), 339059.653830461, 1e-15);
+5 -5
View File
@@ -1,8 +1,8 @@
package seng302; package seng302;
import org.junit.Test; import org.junit.Test;
import seng302.models.Boat;
import seng302.models.Race; import seng302.models.Race;
import seng302.models.Yacht;
import java.lang.reflect.Array; import java.lang.reflect.Array;
@@ -17,8 +17,8 @@ public class RaceTest {
*/ */
@Test @Test
public void testAddingBoatsToRace() { public void testAddingBoatsToRace() {
Boat boat1 = new Boat("Team 1"); Yacht boat1 = new Yacht("Team 1");
Boat boat2 = new Boat("Team 2"); Yacht boat2 = new Yacht("Team 2");
Race race = new Race(); Race race = new Race();
race.addBoat(boat1); race.addBoat(boat1);
@@ -29,8 +29,8 @@ public class RaceTest {
@Test @Test
public void testGetShuffledBoats(){ public void testGetShuffledBoats(){
Boat boat1 = new Boat("Team 1"); Yacht boat1 = new Yacht("Team 1");
Boat boat2 = new Boat("Team 2"); Yacht boat2 = new Yacht("Team 2");
Race race = new Race(); Race race = new Race();
race.addBoat(boat1); race.addBoat(boat1);
+97 -99
View File
@@ -1,100 +1,98 @@
// TODO: 4/05/17 cir27 - Find out why this test is causing build failures package seng302.models;
import seng302.*;
import javafx.scene.paint.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Transform;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
//package seng302.models; /**
//import seng302.*; * Created by cir27 on 4/05/17.
//import javafx.scene.paint.*; */
//import javafx.scene.paint.Color; public class BoatGroupTest {
//import javafx.scene.shape.Polygon; BoatGroup boatGroup;
//import javafx.scene.transform.Rotate; @Before
//import javafx.scene.transform.Transform; public void setUp () {
//import org.junit.Assert; Boat b = new Boat("TEST", 0.0, "T" ,0);
//import org.junit.Before; boatGroup = new BoatGroup(b, Color.BLACK);
//import org.junit.Test; }
//
///** @Test
// * Created by cir27 on 4/05/17. public void setDestinationFirstUseForcesLocationUpdate () {
// */ boatGroup.setDestination(10, 10, 90, 0);
//public class BoatGroupTest { Polygon bp = (Polygon) boatGroup.getChildren().get(2);
// BoatGroup boatGroup; Assert.assertTrue(10 == bp.getLayoutX());
// @Before Assert.assertTrue(10 == bp.getLayoutY());
// public void setUp () { }
// Boat b = new Boat("TEST", 0.0, "T" ,0);
// boatGroup = new BoatGroup(b, Color.BLACK); @Test
// } public void setDestinationFutureUseDoesntForce () {
// for (int i = 0; i < 60; i++) {
// @Test boatGroup.setDestination(200, 200, 90, 0);
// public void setDestinationFirstUseForcesLocationUpdate () { }
// boatGroup.setDestination(10, 10, 90, 0); boatGroup.setDestination(210, 210, 90, 0);
// Polygon bp = (Polygon) boatGroup.getChildren().get(2); Polygon bp = (Polygon) boatGroup.getChildren().get(2);
// Assert.assertTrue(10 == bp.getLayoutX()); Assert.assertTrue(200 == bp.getLayoutX());
// Assert.assertTrue(10 == bp.getLayoutY()); Assert.assertTrue(200 == bp.getLayoutY());
// } }
//
// @Test @Test
// public void setDestinationFutureUseDoesntForce () { public void setDestinationUnrealisticMovementForceUpdate () {
// for (int i = 0; i < 60; i++) { Polygon bp = (Polygon) boatGroup.getChildren().get(2);
// boatGroup.setDestination(200, 200, 90, 0); double xLocation = bp.getLayoutX();
// } double yLocation = bp.getLayoutY();
// boatGroup.setDestination(210, 210, 90, 0); boatGroup.setDestination(xLocation + 500, yLocation + 500, 90, 0);
// Polygon bp = (Polygon) boatGroup.getChildren().get(2); Assert.assertTrue(xLocation + 500 == bp.getLayoutX());
// Assert.assertTrue(200 == bp.getLayoutX()); Assert.assertTrue(yLocation + 500 == bp.getLayoutY());
// Assert.assertTrue(200 == bp.getLayoutY()); }
// }
// @Test
// @Test public void setDestinationUnrealisticNegativeForceUpdate () {
// public void setDestinationUnrealisticMovementForceUpdate () { Polygon bp = (Polygon) boatGroup.getChildren().get(2);
// Polygon bp = (Polygon) boatGroup.getChildren().get(2); double xLocation = bp.getLayoutX();
// double xLocation = bp.getLayoutX(); double yLocation = bp.getLayoutY();
// double yLocation = bp.getLayoutY(); boatGroup.setDestination(xLocation - 500, yLocation - 500, 90, 0);
// boatGroup.setDestination(xLocation + 500, yLocation + 500, 90, 0); Assert.assertTrue(xLocation - 500 == bp.getLayoutX());
// Assert.assertTrue(xLocation + 500 == bp.getLayoutX()); Assert.assertTrue(yLocation - 500 == bp.getLayoutY());
// Assert.assertTrue(yLocation + 500 == bp.getLayoutY()); }
// }
// @Test
// @Test public void updatePositionGeneratesExpectedMovement () {
// public void setDestinationUnrealisticNegativeForceUpdate () { Polygon bp = (Polygon) boatGroup.getChildren().get(2);
// Polygon bp = (Polygon) boatGroup.getChildren().get(2); double xLocation = bp.getLayoutX();
// double xLocation = bp.getLayoutX(); double yLocation = bp.getLayoutY();
// double yLocation = bp.getLayoutY(); int movement = 10;
// boatGroup.setDestination(xLocation - 500, yLocation - 500, 90, 0); double delay = RaceObject.getExpectedUpdateInterval();
// Assert.assertTrue(xLocation - 500 == bp.getLayoutX()); double defaultTimePeriod = 1000 / 60;
// Assert.assertTrue(yLocation - 500 == bp.getLayoutY()); double expectedMovement = movement / delay * defaultTimePeriod;
// } for (int i = 0; i < 60; i++) {
// boatGroup.setDestination(xLocation, yLocation, 90, 0);
// @Test }
// public void updatePositionGeneratesExpectedMovement () { boatGroup.setDestination(xLocation + 10, yLocation + 10, 90, 0);
// Polygon bp = (Polygon) boatGroup.getChildren().get(2); boatGroup.updatePosition(1000/60);
// double xLocation = bp.getLayoutX(); Assert.assertEquals(expectedMovement, bp.getLayoutX() - xLocation, 0.0);
// double yLocation = bp.getLayoutY(); }
// int movement = 10;
// double delay = RaceObject.getExpectedUpdateInterval(); @Test
// double defaultTimePeriod = 1000 / 60; public void correctRaceID () {
// double expectedMovement = movement / delay * defaultTimePeriod; Assert.assertTrue(boatGroup.hasRaceId(0));
// for (int i = 0; i < 60; i++) { }
// boatGroup.setDestination(xLocation, yLocation, 90, 0);
// } @Test
// boatGroup.setDestination(xLocation + 10, yLocation + 10, 90, 0); public void incorrectRaceID () {
// boatGroup.updatePosition(1000/60); Assert.assertTrue(!boatGroup.hasRaceId(2));
// Assert.assertEquals(expectedMovement, bp.getLayoutX() - xLocation, 0.0); }
// }
// @Test
// @Test public void nothingOnWrongId () {
// public void correctRaceID () { Polygon bp = (Polygon) boatGroup.getChildren().get(2);
// Assert.assertTrue(boatGroup.hasRaceId(0)); double originalX = bp.getLayoutX();
// } double originalY = bp.getLayoutY();
// boatGroup.setDestination(10, 10, 90, 12);
// @Test Assert.assertTrue(originalX == bp.getLayoutX());
// public void incorrectRaceID () { Assert.assertTrue(originalY == bp.getLayoutY());
// Assert.assertTrue(!boatGroup.hasRaceId(2)); }
// } }
//
// @Test
// public void nothingOnWrongId () {
// Polygon bp = (Polygon) boatGroup.getChildren().get(2);
// double originalX = bp.getLayoutX();
// double originalY = bp.getLayoutY();
// boatGroup.setDestination(10, 10, 90, 12);
// Assert.assertTrue(originalX == bp.getLayoutX());
// Assert.assertTrue(originalY == bp.getLayoutY());
// }
//}
@@ -1,35 +1,36 @@
package seng302.models.parsers; //package seng302.models.parsers;
//
import org.junit.Before; //import org.junit.Before;
import org.junit.Test; //import org.junit.Test;
import seng302.models.Boat; //import seng302.models.Boat;
//import seng302.models.Yacht;
import java.util.ArrayList; //
//import java.util.ArrayList;
import static org.junit.Assert.*; //
//import static org.junit.Assert.*;
/** //
* Created by Haoming on 18/03/17. ///**
*/ // * Created by Haoming on 18/03/17.
public class TeamsParserTest { // */
//public class TeamsParserTest {
private TeamsParser tp; //
@Before // private TeamsParser tp;
public void readFile() { // @Before
tp = new TeamsParser("/config/teams.xml"); // public void readFile() {
} // tp = new TeamsParser("/config/teams.xml");
// }
@Test //
public void getBoats() throws Exception { // @Test
ArrayList<Boat> boats = tp.getBoats(); // public void getBoats() throws Exception {
// ArrayList<Yacht> boats = tp.getBoats();
assertEquals(6, boats.size(), 1e-10); //
// assertEquals(6, boats.size(), 1e-10);
assertEquals("Oracle Team USA", boats.get(0).getTeamName()); //
//assertEquals(30.9, boats.get(0).getVelocity(), 1e-10); // assertEquals("Oracle Team USA", boats.get(0).getBoatName());
// //assertEquals(30.9, boats.get(0).getVelocity(), 1e-10);
assertEquals("Groupama Team France", boats.get(5).getTeamName()); //
//assertEquals(45.6, boats.get(5).getVelocity(), 1e-10); // assertEquals("Groupama Team France", boats.get(5).getBoatName());
} // //assertEquals(45.6, boats.get(5).getVelocity(), 1e-10);
// }
} //
//}