From 6d7697a0ebe51b358b0501edc694f1b789244d69 Mon Sep 17 00:00:00 2001 From: Peter Galloway Date: Wed, 10 May 2017 13:58:10 +1200 Subject: [PATCH 1/6] commented out the problematic buffering functionality #story[923] --- .../seng302/controllers/CanvasController.java | 41 ++++++++++--------- .../seng302/models/parsers/StreamParser.java | 24 +++++------ 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/src/main/java/seng302/controllers/CanvasController.java b/src/main/java/seng302/controllers/CanvasController.java index 8fc7ed54..21f89ca3 100644 --- a/src/main/java/seng302/controllers/CanvasController.java +++ b/src/main/java/seng302/controllers/CanvasController.java @@ -69,6 +69,7 @@ public class CanvasController { private int frameTimeIndex = 0; private boolean arrayFilled = false; private DecimalFormat decimalFormat2dp = new DecimalFormat("0.00"); + private double lastPacketTime = 0; public AnimationTimer timer; @@ -245,27 +246,27 @@ public class CanvasController { private void move(long id, RaceObject raceObject){ PriorityBlockingQueue movementQueue = StreamParser.boatPositions.get(id); if (movementQueue.size() > 0){ - BoatPositionPacket positionPacket = movementQueue.peek(); - - //this code adds a delay to reading from the movementQueue - //in case things being put into the movement queue are slightly - //out of order - int delayTime = 1000; - int loopTime = delayTime * 10; - long timeDiff = (System.currentTimeMillis()%loopTime - positionPacket.getTimeValid()%loopTime); - if (timeDiff < 0){ - timeDiff = loopTime + timeDiff; - } - if (timeDiff > delayTime) { - try { - positionPacket = movementQueue.take(); - Point2D p2d = latLonToXY(positionPacket.getLat(), positionPacket.getLon()); - double heading = 360.0 / 0xffff * positionPacket.getHeading(); - raceObject.setDestination(p2d.getX(), p2d.getY(), heading, positionPacket.getGroundSpeed(), (int) id); - } catch (InterruptedException e){ - e.printStackTrace(); - } +// BoatPositionPacket positionPacket = movementQueue.peek(); +// +// //this code adds a delay to reading from the movementQueue +// //in case things being put into the movement queue are slightly +// //out of order +// int delayTime = 1000; +// int loopTime = delayTime * 10; +// long timeDiff = (System.currentTimeMillis()%loopTime - positionPacket.getTimeValid()%loopTime); +// if (timeDiff < 0){ +// timeDiff = loopTime + timeDiff; +// } +// if (timeDiff > delayTime) { + try { + BoatPositionPacket positionPacket = movementQueue.take(); + Point2D p2d = latLonToXY(positionPacket.getLat(), positionPacket.getLon()); + double heading = 360.0 / 0xffff * positionPacket.getHeading(); + raceObject.setDestination(p2d.getX(), p2d.getY(), heading, positionPacket.getGroundSpeed(), (int) id); + } catch (InterruptedException e){ + e.printStackTrace(); } +// } } } diff --git a/src/main/java/seng302/models/parsers/StreamParser.java b/src/main/java/seng302/models/parsers/StreamParser.java index deea3184..dce7e172 100644 --- a/src/main/java/seng302/models/parsers/StreamParser.java +++ b/src/main/java/seng302/models/parsers/StreamParser.java @@ -69,21 +69,21 @@ public class StreamParser extends Thread{ StreamPacket packet = StreamReceiver.packetBuffer.peek(); //this code adds a delay to reading from the packetBuffer so //out of order packets have time to order themselves in the queue - int delayTime = 1000; - int loopTime = delayTime * 10; - long transitTime = (System.currentTimeMillis()%loopTime - packet.getTimeStamp()%loopTime); - if (transitTime < 0){ - transitTime = loopTime + transitTime; - } - if (transitTime < delayTime) { - long sleepTime = delayTime - (transitTime); - Thread.sleep(sleepTime); - } +// int delayTime = 1000; +// int loopTime = delayTime * 10; +// long transitTime = (System.currentTimeMillis()%loopTime - packet.getTimeStamp()%loopTime); +// if (transitTime < 0){ +// transitTime = loopTime + transitTime; +// } +// if (transitTime < delayTime) { +// long sleepTime = delayTime - (transitTime); +// Thread.sleep(sleepTime); +// } packet = StreamReceiver.packetBuffer.take(); parsePacket(packet); - Thread.sleep(1); +// Thread.sleep(1); while (StreamReceiver.packetBuffer.peek() == null) { - Thread.sleep(1); +// Thread.sleep(1); } } } catch (Exception e){ From 03ca60f2e123002a6bb5cdfde250ecd7d9e9579b Mon Sep 17 00:00:00 2001 From: Peter Galloway Date: Sun, 14 May 2017 20:12:35 +1200 Subject: [PATCH 2/6] deleted a whole bunch of legacy code, primarily the old controllers and old parsers #story[923] --- src/main/java/seng302/App.java | 2 +- .../seng302/controllers/CanvasController.java | 128 ++--------- .../java/seng302/controllers/Controller.java | 20 +- .../seng302/controllers/RaceController.java | 82 -------- .../controllers/RaceResultController.java | 37 ---- .../controllers/RaceViewController.java | 185 ---------------- src/main/java/seng302/models/Race.java | 198 ------------------ .../java/seng302/models/mark/MarkGroup.java | 4 +- .../seng302/models/parsers/ConfigParser.java | 78 ------- .../seng302/models/parsers/CourseParser.java | 145 ------------- .../seng302/models/parsers/FileParser.java | 54 ----- .../seng302/models/parsers/TeamsParser.java | 64 ------ .../seng302/models/parsers/XMLParser.java | 8 + src/main/resources/views/RaceView.fxml | 12 -- src/test/java/seng302/RaceTest.java | 41 ---- .../models/parsers/ConfigParserTest.java | 42 ---- .../models/parsers/CourseParserTest.java | 59 ------ 17 files changed, 36 insertions(+), 1123 deletions(-) delete mode 100644 src/main/java/seng302/controllers/RaceController.java delete mode 100644 src/main/java/seng302/controllers/RaceResultController.java delete mode 100644 src/main/java/seng302/models/Race.java delete mode 100644 src/main/java/seng302/models/parsers/ConfigParser.java delete mode 100644 src/main/java/seng302/models/parsers/CourseParser.java delete mode 100644 src/main/java/seng302/models/parsers/FileParser.java delete mode 100644 src/main/java/seng302/models/parsers/TeamsParser.java delete mode 100644 src/test/java/seng302/RaceTest.java delete mode 100644 src/test/java/seng302/models/parsers/ConfigParserTest.java delete mode 100644 src/test/java/seng302/models/parsers/CourseParserTest.java diff --git a/src/main/java/seng302/App.java b/src/main/java/seng302/App.java index 1a400afd..19a30595 100644 --- a/src/main/java/seng302/App.java +++ b/src/main/java/seng302/App.java @@ -62,7 +62,7 @@ public class App extends Application } //Change the StreamReceiver in this else block to change the default data source. else{ - sr = new StreamReceiver("localhost", 4949, "RaceStream"); + sr = new StreamReceiver("livedata.americascup.com", 4941, "RaceStream"); } sr.start(); diff --git a/src/main/java/seng302/controllers/CanvasController.java b/src/main/java/seng302/controllers/CanvasController.java index 21f89ca3..d477734d 100644 --- a/src/main/java/seng302/controllers/CanvasController.java +++ b/src/main/java/seng302/controllers/CanvasController.java @@ -59,7 +59,6 @@ public class CanvasController { private Mark maxLonPoint; private double referencePointX; private double referencePointY; - private double metersToPixels; private List raceObjects = new ArrayList<>(); private List raceMarks = new ArrayList<>(); @@ -179,57 +178,6 @@ public class CanvasController { gc.fillPolygon(xBoundaryPoints,yBoundaryPoints,yBoundaryPoints.length); } - - /** - * Adds the course marks to the canvas, taken from the XMl file - * - * NOTE: This is quite confusing as objects are grabbed from the XMLParser such as Mark and CompoundMark which are - * named the same as those in the model package but are, however not the same, so they do not have things such as - * a type and must be derived from the number of marks in a compound mark etc.. - */ - private void addCourseMarks() { - XMLParser.RaceXMLObject raceXMLObject = StreamParser.getXmlObject().getRaceXML(); - ArrayList compoundMarks = raceXMLObject.getCompoundMarks(); - RaceObject markGroup; - - for (CompoundMark compoundMark : compoundMarks) { - - //If the compound mark has 2 marks then its a gate mark - if (compoundMark.getMarks().size() == 2) { - CompoundMark.Mark mark1 = compoundMark.getMarks().get(0); - CompoundMark.Mark mark2 = compoundMark.getMarks().get(1); - SingleMark singleMark1 = new SingleMark(mark1.getMarkName(), mark1.getTargetLat(), mark1.getTargetLng(), mark1.getSourceID()); - SingleMark singleMark2 = new SingleMark(mark1.getMarkName(), mark2.getTargetLat(), mark2.getTargetLng(), mark2.getSourceID()); - GateMark thisGateMark = new GateMark(compoundMark.getcMarkName(), - (compoundMark.getMarkID().equals(1)) ? MarkType.OPEN_GATE : MarkType.CLOSED_GATE, - singleMark1, - singleMark2, - singleMark1.getLatitude(), - singleMark1.getLongitude()); - - markGroup = new MarkGroup(thisGateMark, - findScaledXY(thisGateMark.getSingleMark1()), - findScaledXY(thisGateMark.getSingleMark2())); - - raceObjects.add(markGroup); - raceMarks.add(thisGateMark); - - //Otherwise its a single mark - } else { - CompoundMark.Mark singleMark = compoundMark.getMarks().get(0); - Mark thisSingleMark = new SingleMark(singleMark.getMarkName(), - singleMark.getTargetLat(), - singleMark.getTargetLng(), - singleMark.getSourceID()); - - markGroup = new MarkGroup(thisSingleMark, findScaledXY(thisSingleMark)); - raceObjects.add(markGroup); - raceMarks.add(thisSingleMark); - - } - } - } - private void updateRaceObjects(){ for (RaceObject raceObject : raceObjects) { raceObject.updatePosition(1000 / 60); @@ -325,15 +273,15 @@ public class CanvasController { // Map timelineInfos = raceViewController.getTimelineInfos(); // List boats = raceViewController.getStartingBoats(); Map boats = StreamParser.getBoats(); - Double startingX = raceObjects.get(0).getLayoutX(); - Double startingY = raceObjects.get(0).getLayoutY(); +// Double startingX = raceObjects.get(0).getLayoutX(); +// Double startingY = raceObjects.get(0).getLayoutY(); Group boatAnnotations = new Group(); for (Yacht boat : boats.values()) { // 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()); raceObjects.add(boatGroup); boatAnnotations.getChildren().add(boatGroup.getLowPriorityAnnotations()); @@ -349,9 +297,8 @@ public class CanvasController { findMinMaxPoint(); double minLonToMaxLon = scaleRaceExtremities(); calculateReferencePointLocation(minLonToMaxLon); - givePointsXY(); + //givePointsXY(); addRaceBorder(); - findMetersToPixels(); } @@ -448,25 +395,25 @@ public class CanvasController { * Give all markers in the course an x,y location relative to a given reference with a known x,y location. Distances * are scaled according to the distanceScaleFactor variable. */ - private void givePointsXY() { - List allPoints = new ArrayList<>(raceViewController.getRace().getCourse()); - List processed = new ArrayList<>(); - RaceObject markGroup; - - for (Mark mark : allPoints) { - if (!processed.contains(mark)) { - if (mark.getMarkType() != MarkType.SINGLE_MARK) { - GateMark gateMark = (GateMark) mark; - markGroup = new MarkGroup(mark, findScaledXY(gateMark.getSingleMark1()), findScaledXY(gateMark.getSingleMark2())); - raceObjects.add(markGroup); - } else { - markGroup = new MarkGroup(mark, findScaledXY(mark)); - raceObjects.add(markGroup); - } - processed.add(mark); - } - } - } +// private void givePointsXY() { +// List allPoints = new ArrayList<>(raceViewController.getRace().getCourse()); +// List processed = new ArrayList<>(); +// RaceObject markGroup; +// +// for (Mark mark : allPoints) { +// if (!processed.contains(mark)) { +// if (mark.getMarkType() != MarkType.SINGLE_MARK) { +// GateMark gateMark = (GateMark) mark; +// markGroup = new MarkGroup(mark, findScaledXY(gateMark.getSingleMark1()), findScaledXY(gateMark.getSingleMark2())); +// raceObjects.add(markGroup); +// } else { +// markGroup = new MarkGroup(mark, findScaledXY(mark)); +// raceObjects.add(markGroup); +// } +// processed.add(mark); +// } +// } +// } private Point2D findScaledXY (Mark unscaled) { return findScaledXY (minLatPoint.getLatitude(), minLatPoint.getLongitude(), @@ -501,35 +448,6 @@ public class CanvasController { } - - /** - * Find the number of meters per pixel. - */ - private void findMetersToPixels () { - Double angularDistance; - Double angle; - Double straightLineDistance; - if (scaleDirection == ScaleDirection.HORIZONTAL) { - angularDistance = Mark.calculateDistance(minLonPoint, maxLonPoint); - angle = Mark.calculateHeadingRad(minLonPoint, maxLonPoint); - if (angle > Math.PI / 2) { - straightLineDistance = Math.cos(angle - Math.PI) * angularDistance; - } else { - straightLineDistance = Math.cos(angle) * angularDistance; - } - metersToPixels = (CANVAS_WIDTH - RHS_BUFFER - LHS_BUFFER) / straightLineDistance; - } else { - angularDistance = Mark.calculateDistance(minLatPoint, maxLatPoint); - angle = Mark.calculateHeadingRad(minLatPoint, maxLatPoint); - if (angle < Math.PI / 2) { - straightLineDistance = Math.cos(angle) * angularDistance; - } else { - straightLineDistance = Math.cos(-angle + Math.PI * 2) * angularDistance; - } - metersToPixels = (CANVAS_HEIGHT - TOP_BUFFER - BOT_BUFFER) / straightLineDistance; - } - } - private Point2D latLonToXY (double latitude, double longitude) { return findScaledXY(minLatPoint.getLatitude(), minLatPoint.getLongitude(), latitude, longitude); } diff --git a/src/main/java/seng302/controllers/Controller.java b/src/main/java/seng302/controllers/Controller.java index 7d45d39b..eeae57cc 100644 --- a/src/main/java/seng302/controllers/Controller.java +++ b/src/main/java/seng302/controllers/Controller.java @@ -28,7 +28,7 @@ import java.util.ResourceBundle; import java.util.Timer; import java.util.TimerTask; -public class Controller implements Initializable { +public class Controller { @FXML private AnchorPane contentPane; @FXML @@ -66,13 +66,6 @@ public class Controller implements Initializable { } } - @Override - public void initialize(URL location, ResourceBundle resources) { - //DateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); - //format.setTimeZone(TimeZone.getTimeZone("GMT-8")); - //realTime.setText(format.format(new Date())); - } - /** * Running a timer to update the livestream status on welcome screen. Update interval is 1 second. */ @@ -147,18 +140,9 @@ public class Controller implements Initializable { posCol.setCellValueFactory( new PropertyValueFactory<>("position") ); -// if (StreamParser.isRaceStarted()) { data.addAll(StreamParser.getBoatsPos().values()); -// } else { -// for (Yacht boat : StreamParser.getBoats().values()) { -// boat.setPosition("-"); -// data.add(boat); -// } -// } + teamList.refresh(); -// posCol.setSortType(TableColumn.SortType.ASCENDING); -// teamList.getSortOrder().add(posCol); -// posCol.setSortable(false); } } diff --git a/src/main/java/seng302/controllers/RaceController.java b/src/main/java/seng302/controllers/RaceController.java deleted file mode 100644 index d0ea0d42..00000000 --- a/src/main/java/seng302/controllers/RaceController.java +++ /dev/null @@ -1,82 +0,0 @@ -package seng302.controllers; - -import seng302.models.Race; -import seng302.models.Yacht; -import seng302.models.parsers.ConfigParser; -import seng302.models.parsers.CourseParser; -import seng302.models.parsers.StreamParser; - -import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Map; -import java.util.Random; - -/** - * Created by zyt10 on 17/03/17. - * run before CanvasController to initialize race events - * the CanvasController then uses the event data to make the animations - */ -public class RaceController { - Race race = null; - - public void initializeRace() { - String raceConfigFile = "/config/config.xml"; - String teamsConfigFile = "/config/teams.xml"; - - try { - race = createRace(raceConfigFile, teamsConfigFile); - } catch (Exception e) { - System.out.println("There was an error creating the race."); - } - - if (race != null) { - race.startRace(); - } else { - System.out.println("There was an error creating the race. Exiting."); - } - } - - public Race createRace(String configFile, String teamsConfigFile) throws Exception { - Race race = new Race(); -// StreamParser.xmlObject - // Read team names from file -// TeamsParser tp = new TeamsParser(teamsConfigFile); - - // Read course from file -// ConfigParser config = new ConfigParser(configFile); - - ArrayList boatNames = new ArrayList<>(); -// ArrayList teams = tp.getBoats(); - Map teams = StreamParser.getBoatsPos(); - - //get race size - int numberOfBoats = teams.size(); - - //get time scale -// double timeScale = config.getTimeScale(); -// race.setTimeScale(timeScale); - - for (Yacht boat : teams.values()) { - boatNames.add(boat.getBoatName()); - race.addBoat(boat); - } - - // Shuffle team names - long seed = System.nanoTime(); - Collections.shuffle(boatNames, new Random(seed)); - - if (numberOfBoats > Array.getLength(boatNames.toArray())) { - return null; - } - - CourseParser course = new CourseParser("/config/course.xml"); - race.addCourse(course.getCourse()); - - return race; - } - - public Race getRace() { - return race; - } -} diff --git a/src/main/java/seng302/controllers/RaceResultController.java b/src/main/java/seng302/controllers/RaceResultController.java deleted file mode 100644 index bff697ed..00000000 --- a/src/main/java/seng302/controllers/RaceResultController.java +++ /dev/null @@ -1,37 +0,0 @@ -package seng302.controllers; - -import javafx.fxml.FXML; -import javafx.fxml.Initializable; -import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.VBox; -import javafx.scene.text.Text; -import seng302.models.Race; - -import java.net.URL; -import java.util.ResourceBundle; - -/** - * Created by ptg19 on 20/03/17. - */ -public class RaceResultController implements Initializable{ - @FXML private AnchorPane window; - @FXML private VBox resultsVBox; - private Race race; - - RaceResultController(Race race){ - this.race = race; - } - - @Override - public void initialize(URL location, ResourceBundle resources) { - int boatPosition = this.race.getFinishedBoats().length; - - for (int i = this.race.getFinishedBoats().length - 1; i >= 0; i--){ - resultsVBox.getChildren().add(0, new Text(boatPosition + ": " + this.race.getFinishedBoats()[i].getBoatName())); - boatPosition--; - } - - - - } -} diff --git a/src/main/java/seng302/controllers/RaceViewController.java b/src/main/java/seng302/controllers/RaceViewController.java index a4cc2ece..f8eed705 100644 --- a/src/main/java/seng302/controllers/RaceViewController.java +++ b/src/main/java/seng302/controllers/RaceViewController.java @@ -1,12 +1,9 @@ package seng302.controllers; -import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer; -import javafx.animation.Animation; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; -import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.control.CheckBox; @@ -16,11 +13,9 @@ import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.text.Text; -import javafx.stage.Stage; import javafx.util.Duration; import javafx.util.StringConverter; import seng302.models.*; -import seng302.models.parsers.ConfigParser; import seng302.models.parsers.StreamParser; import java.io.IOException; @@ -48,36 +43,16 @@ public class RaceViewController extends Thread{ private ArrayList startingBoats = new ArrayList<>(); private boolean displayFps; private Timeline timerTimeline; - private Map timelineInfos = new HashMap<>(); private ArrayList boatOrder = new ArrayList<>(); - private Race race; - private Stage stage; public void initialize() { - RaceController raceController = new RaceController(); - raceController.initializeRace(); - race = raceController.getRace(); - for (Yacht boat : race.getBoats()) { - startingBoats.add(boat); - } -// try{ -// initializeTimelines(); -// } -// catch (Exception e){ -// e.printStackTrace(); -// } - includedCanvasController.setup(this); includedCanvasController.initializeCanvas(); initializeTimer(); initializeSettings(); initialiseWindDirection(); initialisePositionVBox(); - //set wind direction!!!!!!! can't find another place to put my code --haoming -// double windDirection = new ConfigParser("/config/config.xml").getWindDirection(); -// windDirectionText.setText(String.format("%.1f°", windDirection)); -// windArrowText.setRotate(windDirection); includedCanvasController.timer.start(); } @@ -163,7 +138,6 @@ public class RaceViewController extends Thread{ } private void initialisePositionVBox() { - Timeline posVBoxTimeline = new Timeline(); posVBoxTimeline.setCycleCount(Timeline.INDEFINITE); posVBoxTimeline.getKeyFrames().add( @@ -173,143 +147,12 @@ public class RaceViewController extends Thread{ }) ); posVBoxTimeline.playFromStart(); - - } - - /** - * Generates time line for each boat, and stores time time into timelineInfos hash map - */ - private void initializeTimelines() { - HashMap boat_events = race.getEvents(); - for (Yacht boat : boat_events.keySet()) { - startingBoats.add(boat); -// // x, y are the real time coordinates -// DoubleProperty x = new SimpleDoubleProperty(); -// DoubleProperty y = new SimpleDoubleProperty(); -// -// List keyFrames = new ArrayList<>(); -// List events = boat_events.get(boat); -// -// // iterates all events and convert each event to keyFrame, then add them into a list -// for (Event event : events) { -// if (event.getIsFinishingEvent()) { -// keyFrames.add( -// new KeyFrame(Duration.seconds(event.getTime()), -// onFinished -> {race.setBoatFinished(boat); handleEvent(event);}, -// new KeyValue(x, event.getThisMark().getLatitude()), -// new KeyValue(y, event.getThisMark().getLongitude()) -// ) -// ); -// } else { -// keyFrames.add( -// new KeyFrame(Duration.seconds(event.getTime()), -// onFinished ->{ -// handleEvent(event); -// boat.setHeading(event.getBoatHeading()); -// }, -// new KeyValue(x, event.getThisMark().getLatitude()), -// new KeyValue(y, event.getThisMark().getLongitude()) -// ) -// ); -// } -// } -// timelineInfos.put(boat, new TimelineInfo(new Timeline(keyFrames.toArray(new KeyFrame[keyFrames.size()])), x, y)); - } - setRaceDuration(); - } - - private void setRaceDuration(){ - Double maxDuration = 0.0; - Timeline maxTimeline = null; - - for (TimelineInfo timelineInfo : timelineInfos.values()) { - - Timeline timeline = timelineInfo.getTimeline(); - if (timeline.getTotalDuration().toMillis() >= maxDuration) { - maxDuration = timeline.getTotalDuration().toMillis(); - maxTimeline = timeline; - } - - // Timelines are paused by default - timeline.play(); - timeline.pause(); - } - - maxTimeline.setOnFinished(event -> { - race.setRaceFinished(); - loadRaceResultView(); - }); - } - - /** - * Play each boats timerTimeline - */ - public void playTimelines(){ - for (TimelineInfo timelineInfo : timelineInfos.values()){ - Timeline timeline = timelineInfo.getTimeline(); - - if (timeline.getStatus() == Animation.Status.PAUSED){ - timeline.play(); - } - } - } - - /** - * Pause each boats timerTimeline - */ - public void pauseTimelines(){ - for (TimelineInfo timelineInfo : timelineInfos.values()){ - Timeline timeline = timelineInfo.getTimeline(); - - if (timeline.getStatus() == Animation.Status.RUNNING){ - timeline.pause(); - } - } - } - - /** - * Display the list of boats in the order they finished the race - */ - private void loadRaceResultView() { - FXMLLoader loader = new FXMLLoader(getClass().getResource("/views/FinishView.fxml")); - loader.setController(new RaceResultController(race)); - - try { - contentAnchorPane.getChildren().removeAll(); - contentAnchorPane.getChildren().clear(); - contentAnchorPane.getChildren().addAll((Pane) loader.load()); - - } catch (javafx.fxml.LoadException e) { - System.err.println(e.getCause()); - } catch (IOException e) { - System.err.println(e); - } - } - - public void handleEvent(Event event) { - Yacht boat = event.getBoat(); - boatOrder.remove(boat); - boat.setMarkLastPast(event.getMarkPosInRace()); - boatOrder.add(boat); - boatOrder.sort(new Comparator() { - @Override - public int compare(Yacht b1, Yacht b2) { - return b2.getMarkLastPast() - b1.getMarkLastPast(); - } - }); - showOrder(); } private void showOrder() { positionVbox.getChildren().clear(); positionVbox.getChildren().removeAll(); - -// for (Boat boat : boatOrder) { -// 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)")); @@ -354,30 +197,10 @@ public class RaceViewController extends Thread{ return timerString; } - public void stopTimer() { - timerTimeline.stop(); - } - public void startTimer() { - timerTimeline.play(); - } - public boolean isDisplayFps() { return displayFps; } - public Race getRace() { - return race; - } - - public Map getTimelineInfos() { - return timelineInfos; - } - - public ArrayList getStartingBoats(){ - return startingBoats; - } - - private void setAnnotations(Integer annotationLevel) { switch (annotationLevel) { case 0: @@ -426,12 +249,4 @@ public class RaceViewController extends Thread{ break; } } - - void setStage (Stage stage) { - this.stage = stage; - } - - Stage getStage () { - return stage; - } } \ No newline at end of file diff --git a/src/main/java/seng302/models/Race.java b/src/main/java/seng302/models/Race.java deleted file mode 100644 index e78b602a..00000000 --- a/src/main/java/seng302/models/Race.java +++ /dev/null @@ -1,198 +0,0 @@ -package seng302.models; - -import seng302.models.mark.Mark; - -import java.util.*; - -/** - * Race class containing the boats and legs in the race - * Created by mra106 on 8/3/2017. - */ -public class Race { - - private ArrayList boats; // The boats in the race - private ArrayList finishingOrder; // The order in which the boats finish the race - private HashMap events = new HashMap<>(); // The events that occur in the race - private List course; // Marks in the race - private long startTime = 0; - private double timeScale = 1; - private boolean raceFinished = false; // Race is finished - private int raceTime = -2; // Current time in the race - - /** - * Race class containing the boats and legs in the race - */ - public Race() { - this.boats = new ArrayList<>(); - this.finishingOrder = new ArrayList<>(); - this.course = new ArrayList<>(); - } - - /** - * Add a boat to the race - * - * @param boat, the boat to add - */ - public void addBoat(Yacht boat) { - boats.add(boat); - } - - /** - * Returns a list of boats in a random order - * - * @return a list of boats - */ - public Yacht[] getShuffledBoats() { - // Shuffle the list of boats - long seed = System.nanoTime(); - Collections.shuffle(this.boats, new Random(seed)); - - return boats.toArray(new Yacht[boats.size()]); - } - - /** - * Returns a list of boats in the order that they - * finished the race (position 0 is first place) - * - * @return a list of boats - */ - public Yacht[] getFinishedBoats() { - return this.finishingOrder.toArray(new Yacht[this.finishingOrder.size()]); - } - - - /** - * Returns a list of boats in the race - * - * @return a list of the boats competing in the race - */ - public Yacht[] getBoats() { - return boats.toArray(new Yacht[boats.size()]); - } - - /** - * Sets time scale - * - * @param timeScale - */ - public void setTimeScale(double timeScale) { - this.timeScale = timeScale; - } - - /** - * Generate all events that will happen during the race. - */ - private void generateEvents() { - - for (Yacht boat : this.boats) { - double totalDistance = 0; - int numberOfMarks = this.course.size(); - - for (int i = 0; i < numberOfMarks; i++) { - Double time = (totalDistance / boat.getVelocity() / timeScale); - - // If there are singleMarks after this event - if (i < numberOfMarks - 1) { - Event event = new Event(time, boat, course.get(i), course.get(i + 1), i); - - try { - events.get(boat).add(event); - - } catch (NullPointerException e) { - events.put(boat, new ArrayList<>(Arrays.asList(event))); - } - totalDistance += event.getDistanceBetweenMarks(); - //System.out.println(totalDistance); - //System.out.println(boat.getVelocity()); - } - - // There are no more marks after this event - - else{ - Event event = new Event(time, boat, course.get(i), i); - events.get(boat).add(event); - } - } - } - } - - - /** - * Starts a race and generates all events for the race. - */ - public void startRace() { - // record start time. - this.startTime = System.currentTimeMillis(); - generateEvents(); - } - - /** - * Set the race course - * @param course a list of marks in the course - */ - public void addCourse(List course) { - this.course = course; - } - - /** - * Get a list of marks in the course - * @return - */ - public List getCourse() { - return course; - } - - /** - * Get a map of the events in the race - * @return - */ - public HashMap getEvents() { - return events; - } - - /** - * Set a boat as finished - * @param boat The boat that has finished the race/home/cosc/student/wmu16 - */ - public void setBoatFinished(Yacht boat){ - this.finishingOrder.add(boat); - } - - /** - * Set the race as finished - */ - public void setRaceFinished(){ - this.raceFinished = true; - } - - /** - * Return whether or not the race is finished - * @return true if the race is finished - */ - public boolean isRaceFinished(){ - return this.raceFinished; - } - - /** - * Set the race time - * @param raceTime the race time in seconds - */ - public void setRaceTime(int raceTime){ - this.raceTime = raceTime; - } - - /** - * Return the race time - * @return the race time in seconds - */ - public int getRaceTime(){ - return this.raceTime; - } - - /** - * Increment the race time by one second - */ - public void incrementRaceTime(){ - this.raceTime += this.timeScale; - } -} \ No newline at end of file diff --git a/src/main/java/seng302/models/mark/MarkGroup.java b/src/main/java/seng302/models/mark/MarkGroup.java index 29931e01..78a97d58 100644 --- a/src/main/java/seng302/models/mark/MarkGroup.java +++ b/src/main/java/seng302/models/mark/MarkGroup.java @@ -53,8 +53,8 @@ public class MarkGroup extends RaceObject { }; super.getChildren().add(markCircle); } else { - marks.add(((GateMark) mark).getSingleMark1()); - marks.add(((GateMark) mark).getSingleMark2()); +// marks.add(((GateMark) mark).getSingleMark1()); +// marks.add(((GateMark) mark).getSingleMark2()); nodePixelVelocitiesX = new double[]{0d,0d}; nodePixelVelocitiesY = new double[]{0d,0d}; nodeDestinations = new Point2D[2]; diff --git a/src/main/java/seng302/models/parsers/ConfigParser.java b/src/main/java/seng302/models/parsers/ConfigParser.java deleted file mode 100644 index 1d870c67..00000000 --- a/src/main/java/seng302/models/parsers/ConfigParser.java +++ /dev/null @@ -1,78 +0,0 @@ -package seng302.models.parsers; - - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import java.util.DoubleSummaryStatistics; - -public class ConfigParser extends FileParser { - - private Document doc; - - public ConfigParser(String path) { - super(path); - this.doc = this.parseFile(); - } - - /** - * Gets wind direction from config file. - * - * @return a double type degree, or 0 if no value or invalid value is found - */ - public double getWindDirection() { - return getDoubleByTagName("wind-direction", 0.0); - } - - /** - * Gets a non negative time scale for the race - * - * @return a double type scale, or 0 if no scale or invalid scale is found - */ - public double getTimeScale() { - return getDoubleByTagName("time-scale", 1.0); - } - - /** - * Gets a double type number by given tag name found in xml file - * - * @param tagName a string of tag name - * @param defaultVal value returned if no value or invalid value is found - * @return value found - */ - public double getDoubleByTagName(String tagName, double defaultVal) { - double val = defaultVal; - try { - Node node = this.doc.getElementsByTagName(tagName).item(0); - if (node.getNodeType() == Node.ELEMENT_NODE) { - Element element = (Element) node; - val = Double.valueOf(element.getTextContent()); - } - } catch (Exception e) { - } finally { - return val; - } - } - - /** - * Gets a string by given tag name found in xml file - * - * @param tagName a string of tag name - * @param defaultVal a string returned if no value or invalid value is found - * @return string found - */ - public String getStringByTagName(String tagName, String defaultVal) { - String string = defaultVal; - try { - Node node = this.doc.getElementsByTagName(tagName).item(0); - if (node.getNodeType() == Node.ELEMENT_NODE) { - Element element = (Element) node; - string = element.getTextContent(); - } - } catch (Exception e) { - } finally { - return string; - } - } -} diff --git a/src/main/java/seng302/models/parsers/CourseParser.java b/src/main/java/seng302/models/parsers/CourseParser.java deleted file mode 100644 index ae7f7856..00000000 --- a/src/main/java/seng302/models/parsers/CourseParser.java +++ /dev/null @@ -1,145 +0,0 @@ -package seng302.models.parsers; - -import org.w3c.dom.*; -import seng302.models.mark.*; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.NoSuchElementException; - -/** - * parse a course xml file - * Created by Haoming Yin (hyi25) on 16/3/2017 - */ -public class CourseParser extends FileParser { - - private Document doc; - private HashMap marks = new HashMap<>(); - - public CourseParser(String path) { - super(path); - this.doc = this.parseFile(); - } - - /** - * create a mark by given node - * - * @param node - * @return a mark, or null if fails to create a mark - */ - private SingleMark generateSingleMark(Node node) { - try { - if (node.getNodeType() == Node.ELEMENT_NODE) { - Element element = (Element) node; - String name = element.getElementsByTagName("name").item(0).getTextContent(); - double lat = Double.valueOf(element.getElementsByTagName("latitude").item(0).getTextContent()); - double lon = Double.valueOf(element.getElementsByTagName("longitude").item(0).getTextContent()); - int id = Integer.valueOf(element.getElementsByTagName("id").item(0).getTextContent()); - SingleMark singleMark = new SingleMark(name, lat, lon, id); - return singleMark; - } else { - throw new NoSuchElementException("Cannot generate a mark by given node."); - } - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - /** - * generate an arrayList of gates - * - * @return an arrayList of gates, or null if no gate has been found. - */ - private void generateGateMarks() { - ArrayList gateMarks = new ArrayList<>(); - - try { - NodeList nodes = doc.getElementsByTagName("gate"); - - for (int i = 0; i < nodes.getLength(); i++) { - Node node = nodes.item(i); - - if (node.getNodeType() == Node.ELEMENT_NODE) { - Element element = (Element) node; - String name = element.getElementsByTagName("name").item(0).getTextContent(); - SingleMark mark1 = generateSingleMark(element.getElementsByTagName("mark").item(0)); - SingleMark mark2 = generateSingleMark(element.getElementsByTagName("mark").item(1)); - GateMark gateMark; - if (name.equals("Start") || name.equals("Finish")) - gateMark = new GateMark(name, MarkType.CLOSED_GATE, mark1, mark2, mark1.getLatitude(), mark1.getLongitude()); - else - gateMark = new GateMark(name, MarkType.OPEN_GATE, mark1, mark2, mark1.getLatitude(), mark1.getLongitude()); - marks.put(name, gateMark); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * generate an arrayList of marks - * - * @return an arrayList of marks, or null if no gate has been found. - */ - private void generateSingleMarks() { - ArrayList singleMarks = new ArrayList<>(); - - try { - // find the "marks" tag - Node node = doc.getElementsByTagName("marks").item(0); - // iterate all "marks"'s children - for (Node n = node.getFirstChild(); n != null; n = n.getNextSibling()) { - // if node's tag name is "mark" - if (n.getNodeType() == Node.ELEMENT_NODE) { - Element element = (Element) n; - if (element.getNodeName() == "mark") { - Mark mark = generateSingleMark(n); - marks.put(mark.getName(), mark); - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * return the order of all the marks along a course - * - * @return an arrayList of the names of ordered course marks - */ - private ArrayList getOrder() { - ArrayList markOrder = new ArrayList<>(); - - try { - Node orderNode = doc.getElementsByTagName("order").item(0); - for (Node node = orderNode.getFirstChild(); node != null; node = node.getNextSibling()) { - if (node.getNodeType() == Node.ELEMENT_NODE) { - Element element = (Element) node; - String name = element.getTextContent(); - markOrder.add(name); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return markOrder; - } - - public ArrayList getCourse() { - generateSingleMarks(); - generateGateMarks(); - ArrayList course = new ArrayList<>(); - try { - for (String mark : getOrder()) { - course.add(marks.get(mark)); - } - } catch (Exception e) { - e.printStackTrace(); - } - return course; - } -} diff --git a/src/main/java/seng302/models/parsers/FileParser.java b/src/main/java/seng302/models/parsers/FileParser.java deleted file mode 100644 index be162b9e..00000000 --- a/src/main/java/seng302/models/parsers/FileParser.java +++ /dev/null @@ -1,54 +0,0 @@ -package seng302.models.parsers; - -import org.w3c.dom.Document; -import org.xml.sax.InputSource; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.StringReader; - -/** - * Created by Haoming Yin (hyi25) on 16/3/2017 - */ -public abstract class FileParser { - - private String filePath; - - public FileParser() {} - - public FileParser(String path) { - this.filePath = path; - } - - protected Document parseFile() { - try { - InputStream is = getClass().getResourceAsStream(this.filePath); - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.parse(is); - // optional, in order to recover info from broken line. - doc.getDocumentElement().normalize(); - return doc; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - protected Document parseFile(String xmlString) { - try { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.parse(new InputSource(new StringReader(xmlString))); - // optional, in order to recover info from broken line. - doc.getDocumentElement().normalize(); - return doc; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } -} diff --git a/src/main/java/seng302/models/parsers/TeamsParser.java b/src/main/java/seng302/models/parsers/TeamsParser.java deleted file mode 100644 index fae0a743..00000000 --- a/src/main/java/seng302/models/parsers/TeamsParser.java +++ /dev/null @@ -1,64 +0,0 @@ -//package seng302.models.parsers; -// -//import org.w3c.dom.*; -//import seng302.models.Yacht; -// -//import java.util.ArrayList; -//import java.util.NoSuchElementException; -// -//public class TeamsParser extends FileParser { -// -// private Document doc; -// -// public TeamsParser(String path) { -// super(path); -// this.doc = this.parseFile(); -// } -// -// /** -// * Create a boat instance by a given team node -// * @param node a boat node containing name, alias and velocity -// * @return an instance of Boat -// */ -// private Yacht parseBoat(Node node) { -// try { -// if (node.getNodeType() == Node.ELEMENT_NODE) { -// Element element = (Element) node; -// String name = element.getElementsByTagName("name").item(0).getTextContent(); -// String alias = element.getElementsByTagName("alias").item(0).getTextContent(); -// double velocity = Double.valueOf(element.getElementsByTagName("velocity").item(0).getTextContent()); -// int id = Integer.valueOf(element.getElementsByTagName("id").item(0).getTextContent()); -// Yacht boat = new Yacht(name, velocity, alias, id); -// return boat; -// } else { -// throw new NoSuchElementException("Cannot generate a boat by given node"); -// } -// } catch (Exception e) { -// e.printStackTrace(); -// return null; -// } -// } -// -// /** -// * Create an arraylist of boats instance. -// * @return an arraylist of boats in teams file -// */ -// public ArrayList getBoats() { -// ArrayList boats = new ArrayList<>(); -// -// try { -// NodeList nodes = this.doc.getElementsByTagName("team"); -// for (int i = 0; i < nodes.getLength(); i++) { -// Node node = nodes.item(i); -// boats.add(parseBoat(node)); -// } -// return boats; -// } catch (Exception e) { -// e.printStackTrace(); -// return null; -// } -// } -// -// -//} -// diff --git a/src/main/java/seng302/models/parsers/XMLParser.java b/src/main/java/seng302/models/parsers/XMLParser.java index f8d30460..51c7f69f 100644 --- a/src/main/java/seng302/models/parsers/XMLParser.java +++ b/src/main/java/seng302/models/parsers/XMLParser.java @@ -5,6 +5,7 @@ import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import seng302.models.Yacht; +import seng302.models.mark.MarkType; import java.util.ArrayList; import java.util.HashMap; @@ -301,6 +302,7 @@ public class XMLParser { public class CompoundMark { private Integer markID; private String cMarkName; + private MarkType markType; private ArrayList marks; CompoundMark(Node compoundMark) { @@ -308,6 +310,12 @@ public class XMLParser { this.markID = getNodeAttributeInt(compoundMark, "CompoundMarkID"); this.cMarkName = getNodeAttributeString(compoundMark, "Name"); NodeList childMarks = compoundMark.getChildNodes(); + if (childMarks.getLength() > 1){ + markType = MarkType.OPEN_GATE; + } else { + markType = MarkType.SINGLE_MARK; + } + for (int i = 0; i < childMarks.getLength(); i++) { Node markNode = childMarks.item(i); if (markNode.getNodeName().equals("Mark")) { diff --git a/src/main/resources/views/RaceView.fxml b/src/main/resources/views/RaceView.fxml index 3c148485..0eca8639 100644 --- a/src/main/resources/views/RaceView.fxml +++ b/src/main/resources/views/RaceView.fxml @@ -1,21 +1,9 @@ - - - - - - - - - - - - diff --git a/src/test/java/seng302/RaceTest.java b/src/test/java/seng302/RaceTest.java deleted file mode 100644 index 2784cd47..00000000 --- a/src/test/java/seng302/RaceTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package seng302; - -import org.junit.Test; -import seng302.models.Race; -import seng302.models.Yacht; - -import java.lang.reflect.Array; - -import static org.junit.Assert.assertEquals; - -/** - * Unit test for the Race class. - */ -public class RaceTest { - /** - * Test that all boats were added to the race - */ - @Test - public void testAddingBoatsToRace() { - Yacht boat1 = new Yacht("Team 1"); - Yacht boat2 = new Yacht("Team 2"); - - Race race = new Race(); - race.addBoat(boat1); - race.addBoat(boat2); - - assertEquals(Array.getLength(race.getBoats()), 2); - } - - @Test - public void testGetShuffledBoats(){ - Yacht boat1 = new Yacht("Team 1"); - Yacht boat2 = new Yacht("Team 2"); - - Race race = new Race(); - race.addBoat(boat1); - race.addBoat(boat2); - - assertEquals(Array.getLength(race.getShuffledBoats()), 2); - } -} diff --git a/src/test/java/seng302/models/parsers/ConfigParserTest.java b/src/test/java/seng302/models/parsers/ConfigParserTest.java deleted file mode 100644 index 8a0c0c8c..00000000 --- a/src/test/java/seng302/models/parsers/ConfigParserTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package seng302.models.parsers; - -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * Created by Haoming on 23/03/17. - */ -public class ConfigParserTest { - - private ConfigParser cp; - - @Before - public void initializeParser() throws Exception { - cp = new ConfigParser("/config/config.xml"); - } - - @Test - public void getWindDirection() throws Exception { - assertEquals(135, cp.getWindDirection(), 1e-10); - } - - @Test - public void getTimeScale() throws Exception { - assertEquals(10.0, cp.getTimeScale(), 1e-10); - } - - @Test - public void getDoubleByTagName() throws Exception { - assertEquals(6, cp.getDoubleByTagName("race-size", 0), 1e-10); - assertEquals(100, cp.getDoubleByTagName("noTag", 100), 1e-10); - } - - @Test - public void getStringByTagName() throws Exception { - assertEquals("AC35", cp.getStringByTagName("race-name", "11")); - assertEquals("oops", cp.getStringByTagName("noTag", "oops")); - } - -} \ No newline at end of file diff --git a/src/test/java/seng302/models/parsers/CourseParserTest.java b/src/test/java/seng302/models/parsers/CourseParserTest.java deleted file mode 100644 index 48bf9d92..00000000 --- a/src/test/java/seng302/models/parsers/CourseParserTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package seng302.models.parsers; - -import org.junit.Before; -import org.junit.Test; -import seng302.models.mark.*; - -import java.util.ArrayList; - -import static org.junit.Assert.*; - -/** - * To test if course parser works as expected. - * Created by Haoming on 17/03/17. - */ -public class CourseParserTest { - - private CourseParser cp; - - @Before - public void initializeParser() throws Exception { - cp = new CourseParser("/config/course.xml"); - } - - @Test - public void getGates() throws Exception { - ArrayList course = cp.getCourse(); - - - GateMark gateMark1 = (GateMark) course.get(0); - assertEquals(57.670633, gateMark1.getSingleMark2().getLatitude(), 0.00000001); - assertEquals(11.8281330, gateMark1.getSingleMark2().getLongitude(), 0.00000001); - - GateMark gateMark2 = (GateMark) course.get(5); - - assertEquals("Finish1", gateMark2.getSingleMark1().getName()); - assertEquals("Finish2", gateMark2.getSingleMark2().getName()); - assertEquals(57.671824, gateMark2.getSingleMark2().getLatitude(), 0.00000001); - assertEquals(11.844795, gateMark2.getSingleMark2().getLongitude(), 0.00000001); - } - - @Test - public void getMarks() throws Exception { - ArrayList course = cp.getCourse(); - assertEquals("Mid Mark", course.get(1).getName()); - } - - @Test - public void getOrder() { - ArrayList course = cp.getCourse(); - assertEquals(6, course.size()); - assertEquals("Start", course.get(0).getName()); - assertEquals("Mid Mark", course.get(1).getName()); - assertEquals("Leeward Gate", course.get(2).getName()); - assertEquals("Windward Gate", course.get(3).getName()); - assertEquals("Leeward Gate", course.get(4).getName()); - assertEquals("Finish", course.get(5).getName()); - } - -} \ No newline at end of file From 63514cfafbee35873d1236988aa9e68b6f79ce8e Mon Sep 17 00:00:00 2001 From: Peter Galloway Date: Sun, 14 May 2017 20:20:14 +1200 Subject: [PATCH 3/6] deleted duplicated packet type class #story[923] --- .../seng302/models/parsers/PacketType.java | 53 ------------------- .../seng302/models/parsers/StreamPacket.java | 2 + .../models/parsers/packets/PacketType.java | 2 - 3 files changed, 2 insertions(+), 55 deletions(-) delete mode 100644 src/main/java/seng302/models/parsers/PacketType.java diff --git a/src/main/java/seng302/models/parsers/PacketType.java b/src/main/java/seng302/models/parsers/PacketType.java deleted file mode 100644 index 66b86207..00000000 --- a/src/main/java/seng302/models/parsers/PacketType.java +++ /dev/null @@ -1,53 +0,0 @@ -package seng302.models.parsers; - -/** - * Created by Kusal on 4/24/2017. - */ -public enum PacketType { - HEARTBEAT, - RACE_STATUS, - DISPLAY_TEXT_MESSAGE, - XML_MESSAGE, - RACE_START_STATUS, - YACHT_EVENT_CODE, - YACHT_ACTION_CODE, - CHATTER_TEXT, - BOAT_LOCATION, - MARK_ROUNDING, - COURSE_WIND, - AVG_WIND, - OTHER; - - static PacketType assignPacketType(int packetType){ - switch(packetType){ - case 1: - return HEARTBEAT; - case 12: - return RACE_STATUS; - case 20: - return DISPLAY_TEXT_MESSAGE; - case 26: - return XML_MESSAGE; - case 27: - return RACE_START_STATUS; - case 29: - return YACHT_EVENT_CODE; - case 31: - return YACHT_ACTION_CODE; - case 36: - return CHATTER_TEXT; - case 37: - return BOAT_LOCATION; - case 38: - return MARK_ROUNDING; - case 44: - return COURSE_WIND; - case 47: - return AVG_WIND; - default: - } - return OTHER; - } - - -} diff --git a/src/main/java/seng302/models/parsers/StreamPacket.java b/src/main/java/seng302/models/parsers/StreamPacket.java index 5c2c0706..f4ba3b81 100644 --- a/src/main/java/seng302/models/parsers/StreamPacket.java +++ b/src/main/java/seng302/models/parsers/StreamPacket.java @@ -1,5 +1,7 @@ package seng302.models.parsers; +import seng302.models.parsers.packets.PacketType; + /** * Created by kre39 on 23/04/17. */ diff --git a/src/main/java/seng302/models/parsers/packets/PacketType.java b/src/main/java/seng302/models/parsers/packets/PacketType.java index f522dec9..4367ca90 100644 --- a/src/main/java/seng302/models/parsers/packets/PacketType.java +++ b/src/main/java/seng302/models/parsers/packets/PacketType.java @@ -48,6 +48,4 @@ public enum PacketType { } return OTHER; } - - } From ae5678482b7d940e9eea22fdc81dba536839cc20 Mon Sep 17 00:00:00 2001 From: Peter Galloway Date: Sun, 14 May 2017 20:26:49 +1200 Subject: [PATCH 4/6] changed package "parsers" to be called "stream" #story[923] --- src/main/java/seng302/App.java | 4 ++-- .../java/seng302/controllers/CanvasController.java | 14 ++++---------- src/main/java/seng302/controllers/Controller.java | 10 ++-------- .../seng302/controllers/RaceViewController.java | 5 +---- .../models/{parsers => stream}/StreamPacket.java | 4 ++-- .../models/{parsers => stream}/StreamParser.java | 6 +++--- .../models/{parsers => stream}/StreamReceiver.java | 6 ++---- .../models/{parsers => stream}/XMLParser.java | 3 +-- .../packets/BoatPositionPacket.java | 2 +- .../{parsers => stream}/packets/PacketType.java | 2 +- .../{parsers => stream}/packets/StreamPacket.java | 2 +- .../{parsers => stream}/StreamReceiverTest.java | 2 +- .../{parsers => stream}/TeamsParserTest.java | 0 13 files changed, 21 insertions(+), 39 deletions(-) rename src/main/java/seng302/models/{parsers => stream}/StreamPacket.java (93%) rename src/main/java/seng302/models/{parsers => stream}/StreamParser.java (99%) rename src/main/java/seng302/models/{parsers => stream}/StreamReceiver.java (97%) rename src/main/java/seng302/models/{parsers => stream}/XMLParser.java (99%) rename src/main/java/seng302/models/{parsers => stream}/packets/BoatPositionPacket.java (95%) rename src/main/java/seng302/models/{parsers => stream}/packets/PacketType.java (96%) rename src/main/java/seng302/models/{parsers => stream}/packets/StreamPacket.java (95%) rename src/test/java/seng302/models/{parsers => stream}/StreamReceiverTest.java (99%) rename src/test/java/seng302/models/{parsers => stream}/TeamsParserTest.java (100%) diff --git a/src/main/java/seng302/App.java b/src/main/java/seng302/App.java index 19a30595..92aab87a 100644 --- a/src/main/java/seng302/App.java +++ b/src/main/java/seng302/App.java @@ -5,8 +5,8 @@ import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; -import seng302.models.parsers.StreamParser; -import seng302.models.parsers.StreamReceiver; +import seng302.models.stream.StreamParser; +import seng302.models.stream.StreamReceiver; import seng302.server.ServerThread; public class App extends Application diff --git a/src/main/java/seng302/controllers/CanvasController.java b/src/main/java/seng302/controllers/CanvasController.java index d477734d..a7ed44ad 100644 --- a/src/main/java/seng302/controllers/CanvasController.java +++ b/src/main/java/seng302/controllers/CanvasController.java @@ -5,23 +5,17 @@ import javafx.beans.property.SimpleDoubleProperty; import javafx.fxml.FXML; import javafx.geometry.Point2D; import javafx.scene.Group; -import javafx.scene.Node; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.Pane; import javafx.scene.paint.Color; -import javafx.scene.shape.Polygon; import javafx.scene.text.Font; -import javafx.stage.Stage; import seng302.models.*; import seng302.models.mark.*; -import seng302.models.parsers.StreamParser; -import seng302.models.parsers.StreamReceiver; -import seng302.models.parsers.packets.BoatPositionPacket; -import seng302.models.parsers.XMLParser; -import seng302.models.parsers.XMLParser.RaceXMLObject.CompoundMark; -import seng302.models.parsers.XMLParser.RaceXMLObject.Limit; +import seng302.models.stream.StreamParser; +import seng302.models.stream.packets.BoatPositionPacket; +import seng302.models.stream.XMLParser; +import seng302.models.stream.XMLParser.RaceXMLObject.Limit; import seng302.models.mark.Mark; import java.text.DecimalFormat; diff --git a/src/main/java/seng302/controllers/Controller.java b/src/main/java/seng302/controllers/Controller.java index eeae57cc..8eb2eee2 100644 --- a/src/main/java/seng302/controllers/Controller.java +++ b/src/main/java/seng302/controllers/Controller.java @@ -5,7 +5,6 @@ import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; -import javafx.fxml.Initializable; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TableColumn; @@ -15,16 +14,11 @@ import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import seng302.models.Yacht; -import seng302.models.parsers.StreamParser; -import seng302.models.parsers.XMLParser; +import seng302.models.stream.StreamParser; +import seng302.models.stream.XMLParser; import java.io.IOException; -import java.net.URL; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.ResourceBundle; import java.util.Timer; import java.util.TimerTask; diff --git a/src/main/java/seng302/controllers/RaceViewController.java b/src/main/java/seng302/controllers/RaceViewController.java index f8eed705..a1bb9651 100644 --- a/src/main/java/seng302/controllers/RaceViewController.java +++ b/src/main/java/seng302/controllers/RaceViewController.java @@ -5,20 +5,17 @@ import javafx.animation.Timeline; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; import javafx.scene.control.CheckBox; import javafx.scene.control.Slider; import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.text.Text; import javafx.util.Duration; import javafx.util.StringConverter; import seng302.models.*; -import seng302.models.parsers.StreamParser; +import seng302.models.stream.StreamParser; -import java.io.IOException; import java.util.*; /** diff --git a/src/main/java/seng302/models/parsers/StreamPacket.java b/src/main/java/seng302/models/stream/StreamPacket.java similarity index 93% rename from src/main/java/seng302/models/parsers/StreamPacket.java rename to src/main/java/seng302/models/stream/StreamPacket.java index f4ba3b81..1cb35bb5 100644 --- a/src/main/java/seng302/models/parsers/StreamPacket.java +++ b/src/main/java/seng302/models/stream/StreamPacket.java @@ -1,6 +1,6 @@ -package seng302.models.parsers; +package seng302.models.stream; -import seng302.models.parsers.packets.PacketType; +import seng302.models.stream.packets.PacketType; /** * Created by kre39 on 23/04/17. diff --git a/src/main/java/seng302/models/parsers/StreamParser.java b/src/main/java/seng302/models/stream/StreamParser.java similarity index 99% rename from src/main/java/seng302/models/parsers/StreamParser.java rename to src/main/java/seng302/models/stream/StreamParser.java index dce7e172..fb6e1d1e 100644 --- a/src/main/java/seng302/models/parsers/StreamParser.java +++ b/src/main/java/seng302/models/stream/StreamParser.java @@ -1,12 +1,12 @@ -package seng302.models.parsers; +package seng302.models.stream; import org.w3c.dom.Document; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import seng302.models.Yacht; -import seng302.models.parsers.packets.BoatPositionPacket; -import seng302.models.parsers.packets.StreamPacket; +import seng302.models.stream.packets.BoatPositionPacket; +import seng302.models.stream.packets.StreamPacket; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; diff --git a/src/main/java/seng302/models/parsers/StreamReceiver.java b/src/main/java/seng302/models/stream/StreamReceiver.java similarity index 97% rename from src/main/java/seng302/models/parsers/StreamReceiver.java rename to src/main/java/seng302/models/stream/StreamReceiver.java index 65d7c525..b3303806 100644 --- a/src/main/java/seng302/models/parsers/StreamReceiver.java +++ b/src/main/java/seng302/models/stream/StreamReceiver.java @@ -1,13 +1,11 @@ -package seng302.models.parsers; +package seng302.models.stream; -import seng302.models.parsers.packets.StreamPacket; +import seng302.models.stream.packets.StreamPacket; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.Socket; -import java.util.ArrayList; -import java.util.Collection; import java.util.Comparator; import java.util.concurrent.PriorityBlockingQueue; import java.util.zip.CRC32; diff --git a/src/main/java/seng302/models/parsers/XMLParser.java b/src/main/java/seng302/models/stream/XMLParser.java similarity index 99% rename from src/main/java/seng302/models/parsers/XMLParser.java rename to src/main/java/seng302/models/stream/XMLParser.java index 51c7f69f..6349d07f 100644 --- a/src/main/java/seng302/models/parsers/XMLParser.java +++ b/src/main/java/seng302/models/stream/XMLParser.java @@ -1,4 +1,4 @@ -package seng302.models.parsers; +package seng302.models.stream; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -9,7 +9,6 @@ import seng302.models.mark.MarkType; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; /** diff --git a/src/main/java/seng302/models/parsers/packets/BoatPositionPacket.java b/src/main/java/seng302/models/stream/packets/BoatPositionPacket.java similarity index 95% rename from src/main/java/seng302/models/parsers/packets/BoatPositionPacket.java rename to src/main/java/seng302/models/stream/packets/BoatPositionPacket.java index d6f0700d..859223e0 100644 --- a/src/main/java/seng302/models/parsers/packets/BoatPositionPacket.java +++ b/src/main/java/seng302/models/stream/packets/BoatPositionPacket.java @@ -1,4 +1,4 @@ -package seng302.models.parsers.packets; +package seng302.models.stream.packets; public class BoatPositionPacket { private long boatId; diff --git a/src/main/java/seng302/models/parsers/packets/PacketType.java b/src/main/java/seng302/models/stream/packets/PacketType.java similarity index 96% rename from src/main/java/seng302/models/parsers/packets/PacketType.java rename to src/main/java/seng302/models/stream/packets/PacketType.java index 4367ca90..0fd0be84 100644 --- a/src/main/java/seng302/models/parsers/packets/PacketType.java +++ b/src/main/java/seng302/models/stream/packets/PacketType.java @@ -1,4 +1,4 @@ -package seng302.models.parsers.packets; +package seng302.models.stream.packets; /** * Created by Kusal on 4/24/2017. diff --git a/src/main/java/seng302/models/parsers/packets/StreamPacket.java b/src/main/java/seng302/models/stream/packets/StreamPacket.java similarity index 95% rename from src/main/java/seng302/models/parsers/packets/StreamPacket.java rename to src/main/java/seng302/models/stream/packets/StreamPacket.java index 4f10008c..22f2fe56 100644 --- a/src/main/java/seng302/models/parsers/packets/StreamPacket.java +++ b/src/main/java/seng302/models/stream/packets/StreamPacket.java @@ -1,4 +1,4 @@ -package seng302.models.parsers.packets; +package seng302.models.stream.packets; /** * Created by kre39 on 23/04/17. diff --git a/src/test/java/seng302/models/parsers/StreamReceiverTest.java b/src/test/java/seng302/models/stream/StreamReceiverTest.java similarity index 99% rename from src/test/java/seng302/models/parsers/StreamReceiverTest.java rename to src/test/java/seng302/models/stream/StreamReceiverTest.java index c7951e3b..ff9755bb 100644 --- a/src/test/java/seng302/models/parsers/StreamReceiverTest.java +++ b/src/test/java/seng302/models/stream/StreamReceiverTest.java @@ -1,4 +1,4 @@ -package seng302.models.parsers; +package seng302.models.stream; import org.junit.Before; import org.junit.Test; diff --git a/src/test/java/seng302/models/parsers/TeamsParserTest.java b/src/test/java/seng302/models/stream/TeamsParserTest.java similarity index 100% rename from src/test/java/seng302/models/parsers/TeamsParserTest.java rename to src/test/java/seng302/models/stream/TeamsParserTest.java From 256ec046fc7cad53378e8a1d48d682eb25f2804b Mon Sep 17 00:00:00 2001 From: Peter Galloway Date: Sun, 14 May 2017 22:12:16 +1200 Subject: [PATCH 5/6] adjusted givePointsXY to try and use the marks from the XML parser, stopped partway as the marks from the XML parser and the standard marks need to be merged before this can be fixed properly #story[923] --- .../seng302/controllers/CanvasController.java | 37 +++++++++---------- .../java/seng302/models/stream/XMLParser.java | 1 + 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/main/java/seng302/controllers/CanvasController.java b/src/main/java/seng302/controllers/CanvasController.java index a7ed44ad..b5642755 100644 --- a/src/main/java/seng302/controllers/CanvasController.java +++ b/src/main/java/seng302/controllers/CanvasController.java @@ -389,25 +389,24 @@ public class CanvasController { * Give all markers in the course an x,y location relative to a given reference with a known x,y location. Distances * are scaled according to the distanceScaleFactor variable. */ -// private void givePointsXY() { -// List allPoints = new ArrayList<>(raceViewController.getRace().getCourse()); -// List processed = new ArrayList<>(); -// RaceObject markGroup; -// -// for (Mark mark : allPoints) { -// if (!processed.contains(mark)) { -// if (mark.getMarkType() != MarkType.SINGLE_MARK) { -// GateMark gateMark = (GateMark) mark; -// markGroup = new MarkGroup(mark, findScaledXY(gateMark.getSingleMark1()), findScaledXY(gateMark.getSingleMark2())); -// raceObjects.add(markGroup); -// } else { -// markGroup = new MarkGroup(mark, findScaledXY(mark)); -// raceObjects.add(markGroup); -// } -// processed.add(mark); -// } -// } -// } + private void givePointsXY() { + List allPoints = StreamParser.getXmlObject().getRaceXML().getCompoundMarks(); + List processed = new ArrayList<>(); + RaceObject markGroup; + + for (XMLParser.RaceXMLObject.CompoundMark mark : allPoints) { + if (!processed.contains(mark)) { + if (mark.getMarkType() != MarkType.SINGLE_MARK) { + markGroup = new MarkGroup(mark, findScaledXY(mark.getMarks().get(0)), findScaledXY(mark.getMarks().get(1))); + raceObjects.add(markGroup); + } else { + markGroup = new MarkGroup(mark, findScaledXY(mark.getMarks().get(0))); + raceObjects.add(markGroup); + } + processed.add(mark); + } + } + } private Point2D findScaledXY (Mark unscaled) { return findScaledXY (minLatPoint.getLatitude(), minLatPoint.getLongitude(), diff --git a/src/main/java/seng302/models/stream/XMLParser.java b/src/main/java/seng302/models/stream/XMLParser.java index 6349d07f..181c1e2f 100644 --- a/src/main/java/seng302/models/stream/XMLParser.java +++ b/src/main/java/seng302/models/stream/XMLParser.java @@ -326,6 +326,7 @@ public class XMLParser { public Integer getMarkID() { return markID; } public String getcMarkName() { return cMarkName; } + public MarkType getMarkType() { return markType; } public ArrayList getMarks() { return marks; } public class Mark { From ccda5f2a2ebee419158b66d8623b6bd8d161017b Mon Sep 17 00:00:00 2001 From: Peter Galloway Date: Mon, 15 May 2017 12:40:11 +1200 Subject: [PATCH 6/6] changing branch name #story[923] --- src/main/java/seng302/controllers/CanvasController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/seng302/controllers/CanvasController.java b/src/main/java/seng302/controllers/CanvasController.java index b5642755..53582740 100644 --- a/src/main/java/seng302/controllers/CanvasController.java +++ b/src/main/java/seng302/controllers/CanvasController.java @@ -357,6 +357,7 @@ public class CanvasController { } } + /** * Finds the scale factor necessary to fit all race markers within the onscreen map and assigns it to distanceScaleFactor * Returns the max horizontal distance of the map.