diff --git a/src/main/java/seng302/controllers/CanvasController.java b/src/main/java/seng302/controllers/CanvasController.java index 8a9f86ec..69ee51b4 100644 --- a/src/main/java/seng302/controllers/CanvasController.java +++ b/src/main/java/seng302/controllers/CanvasController.java @@ -320,7 +320,7 @@ public class CanvasController { } for (Yacht boat : boats.values()) { - if (participantIDs.contains(boat.getSourceID())) { + if (participantIDs.contains(boat.getSourceId())) { boat.setColour(Colors.getColor()); BoatGroup boatGroup = new BoatGroup(boat, boat.getColour()); boatGroups.add(boatGroup); diff --git a/src/main/java/seng302/controllers/FinishScreenViewController.java b/src/main/java/seng302/controllers/FinishScreenViewController.java index a2d79f36..e15e6f2e 100644 --- a/src/main/java/seng302/controllers/FinishScreenViewController.java +++ b/src/main/java/seng302/controllers/FinishScreenViewController.java @@ -68,7 +68,7 @@ public class FinishScreenViewController implements Initializable { // add data to table for (Yacht boat : StreamParser.getBoatsPos().values()) { - if (participantIDs.contains(boat.getSourceID())) { + if (participantIDs.contains(boat.getSourceId())) { data.add(boat); } } diff --git a/src/main/java/seng302/controllers/RaceViewController.java b/src/main/java/seng302/controllers/RaceViewController.java index 8eb336e7..c22ebf1a 100644 --- a/src/main/java/seng302/controllers/RaceViewController.java +++ b/src/main/java/seng302/controllers/RaceViewController.java @@ -201,7 +201,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel */ void updateSparkLine(){ // Collect the racing boats that aren't already in the chart - ArrayList sparkLineCandidates = startingBoats.stream().filter(yacht -> !sparkLineData.containsKey(yacht.getSourceID()) + ArrayList sparkLineCandidates = startingBoats.stream().filter(yacht -> !sparkLineData.containsKey(yacht.getSourceId()) && yacht.getPosition() != null & yacht.getPosition() != "-").collect(Collectors.toCollection(ArrayList::new)); // Obtain the qualifying boats to set the max on the Y axis @@ -214,7 +214,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel Series yachtData = new Series<>(); yachtData.setName(yacht.getBoatName()); yachtData.getData().add(new XYChart.Data<>(Integer.toString(yacht.getLegNumber()), 1 + racingBoats.size() - Double.parseDouble(yacht.getPosition()))); - sparkLineData.put(yacht.getSourceID(), yachtData); + sparkLineData.put(yacht.getSourceId(), yachtData); }); // Lambda function to sort the series in order of leg (later legs shown more to the right) @@ -244,7 +244,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel * @param legNumber the leg number that the position will be assigned to */ public static void updateYachtPositionSparkline(Yacht yacht, Integer legNumber){ - XYChart.Series positionData = sparkLineData.get(yacht.getSourceID()); + XYChart.Series positionData = sparkLineData.get(yacht.getSourceId()); positionData.getData().add(new XYChart.Data<>(Integer.toString(legNumber), 1 + racingBoats.size() - Double.parseDouble(yacht.getPosition()))); } @@ -381,7 +381,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel if (StreamParser.isRaceStarted()) { for (Yacht boat : StreamParser.getBoatsPos().values()) { - if (participantIDs.contains(boat.getSourceID())) { // check if the boat is racing + if (participantIDs.contains(boat.getSourceId())) { // check if the boat is racing if (boat.getBoatStatus() == 3) { // 3 is finish status Text textToAdd = new Text(boat.getPosition() + ". " + boat.getShortName() + " (Finished)"); @@ -399,7 +399,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel } } else { for (Yacht boat : StreamParser.getBoats().values()) { - if (participantIDs.contains(boat.getSourceID())) { // check if the boat is racing + if (participantIDs.contains(boat.getSourceId())) { // check if the boat is racing Text textToAdd = new Text(boat.getPosition() + ". " + boat.getShortName() + " "); textToAdd.setFill(Paint.valueOf("#d3d3d3")); @@ -613,7 +613,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel for (BoatGroup bg : includedCanvasController.getBoatGroups()) { //We need to iterate over all race groups to get the matching boat group belonging to this boat if we //are to toggle its annotations, there is no other backwards knowledge of a yacht to its boatgroup. - if (bg.getBoat().getHullID().equals(yacht.getHullID())) { + if (bg.getBoat().getHullId().equals(yacht.getHullId())) { updateLaylines(bg); bg.setIsSelected(true); selectedBoat = yacht; diff --git a/src/main/java/seng302/fxObjects/BoatGroup.java b/src/main/java/seng302/fxObjects/BoatGroup.java index 12d23ee8..b87c8fb6 100644 --- a/src/main/java/seng302/fxObjects/BoatGroup.java +++ b/src/main/java/seng302/fxObjects/BoatGroup.java @@ -316,7 +316,7 @@ public class BoatGroup extends Group { * @return An array containing all ID's associated with this RaceObject. */ public long getRaceId() { - return boat.getSourceID(); + return boat.getSourceId(); } public Group getWake () { diff --git a/src/main/java/seng302/gameServer/GameServerThread.java b/src/main/java/seng302/gameServer/GameServerThread.java index 342b6e65..aafb6c0b 100644 --- a/src/main/java/seng302/gameServer/GameServerThread.java +++ b/src/main/java/seng302/gameServer/GameServerThread.java @@ -96,7 +96,7 @@ public class GameServerThread implements Runnable, Observer, ClientConnectionDel thereAreBoatsNotFinished = true; } - BoatSubMessage m = new BoatSubMessage(y.getSourceID(), boatStatus, y.getLastMarkRounded().getId(), 0, 0, 1234l, 1234l); + BoatSubMessage m = new BoatSubMessage(y.getSourceId(), boatStatus, y.getLastMarkRounded().getId(), 0, 0, 1234l, 1234l); boatSubMessages.add(m); } diff --git a/src/main/java/seng302/gameServerWithThreading/MainServerThread.java b/src/main/java/seng302/gameServerWithThreading/MainServerThread.java index c0168aa6..e643738b 100644 --- a/src/main/java/seng302/gameServerWithThreading/MainServerThread.java +++ b/src/main/java/seng302/gameServerWithThreading/MainServerThread.java @@ -2,11 +2,15 @@ package seng302.gameServerWithThreading; import seng302.gameServer.GameStages; import seng302.gameServer.GameState; +import seng302.models.Yacht; import seng302.models.mark.Mark; import seng302.models.mark.MarkType; +import seng302.models.mark.SingleMark; import seng302.models.stream.PacketBufferDelegate; import seng302.models.stream.StreamParser; import seng302.models.stream.packets.StreamPacket; +import seng302.models.xml.Boats; +import seng302.models.xml.Race; import seng302.models.xml.Regatta; import seng302.models.xml.XMLGenerator; @@ -53,8 +57,19 @@ public class MainServerThread extends Thread implements PacketBufferDelegate{ g.setRegatta(r); + Race b = new Race(); + b.addBoat(new Yacht("SomeType", 123, "hid", "NZL", + "Emirates Team New Zealand", "NZL")); + + g.setRace(b); + + System.out.println("g.getBoatsAsXml() = " + g.getBoatsAsXml()); + g.getBoatsAsXml(); + System.out.println("g.getRegattaAsXml() = " + g.getRegattaAsXml()); + System.out.println("g.ragce() = " + g.getRaceAsXml()); + //You should handle interrupts in some way, so that the thread won't keep on forever if you exit the app. while (!isInterrupted()) { try { diff --git a/src/main/java/seng302/models/Yacht.java b/src/main/java/seng302/models/Yacht.java index 7ea7e97e..47617bfd 100644 --- a/src/main/java/seng302/models/Yacht.java +++ b/src/main/java/seng302/models/Yacht.java @@ -85,11 +85,11 @@ public class Yacht { return boatType; } - public Integer getSourceID() { + public Integer getSourceId() { return sourceID; } - public String getHullID() { + public String getHullId() { return hullID; } @@ -207,6 +207,7 @@ public class Yacht { } public Double getLat() { + if (lat == null) return 0d; return lat; } @@ -215,6 +216,8 @@ public class Yacht { } public Double getLon() { + + if (lon == null) return 0d; return lon; } diff --git a/src/main/java/seng302/models/stream/XMLParser.java b/src/main/java/seng302/models/stream/XMLParser.java index 99ce72c8..733bcb54 100644 --- a/src/main/java/seng302/models/stream/XMLParser.java +++ b/src/main/java/seng302/models/stream/XMLParser.java @@ -558,7 +558,7 @@ public class XMLParser { getNodeAttributeString(currentBoat, "Country")); this.boats.add(boat); if (boat.getBoatType().equals("Yacht")) { - competingBoats.put(boat.getSourceID(), boat); + competingBoats.put(boat.getSourceId(), boat); } } } diff --git a/src/main/java/seng302/models/xml/Boats.java b/src/main/java/seng302/models/xml/Boats.java index 1257e5be..ed913873 100644 --- a/src/main/java/seng302/models/xml/Boats.java +++ b/src/main/java/seng302/models/xml/Boats.java @@ -1,22 +1,11 @@ package seng302.models.xml; -import seng302.models.mark.Mark; +import seng302.models.Yacht; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class Boats { - private List marks; - public Boats(){ - marks = new ArrayList<>(); - } - - public void addMark(Mark m){ - marks.add(m); - } - - public List getMarks(){ - return this.marks; - } } diff --git a/src/main/java/seng302/models/xml/Race.java b/src/main/java/seng302/models/xml/Race.java index a0e8dc32..b5047071 100644 --- a/src/main/java/seng302/models/xml/Race.java +++ b/src/main/java/seng302/models/xml/Race.java @@ -1,5 +1,23 @@ package seng302.models.xml; -public class Race { +import seng302.models.Yacht; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class Race { + private List yachts; + + public Race(){ + yachts = new ArrayList<>(); + } + + public void addBoat(Yacht yacht){ + yachts.add(yacht); + } + + public List getBoats(){ + return Collections.unmodifiableList(yachts); + } } diff --git a/src/main/java/seng302/models/xml/XMLGenerator.java b/src/main/java/seng302/models/xml/XMLGenerator.java index 09ee9924..918748e3 100644 --- a/src/main/java/seng302/models/xml/XMLGenerator.java +++ b/src/main/java/seng302/models/xml/XMLGenerator.java @@ -11,8 +11,11 @@ import java.net.URISyntaxException; public class XMLGenerator { private static final String XML_TEMPLATE_DIR = "/server_config/xml_templates"; private static final String REGATTA_TEMPLATE_NAME = "regatta.ftlh"; + private static final String BOATS_TEMPLATE_NAME = "boats.ftlh"; + private static final String RACE_TEMPLATE_NAME = "race.ftlh"; private Configuration configuration; private Regatta regatta; + private Race race; /** * Set up a configuration instance for Apache Freemake @@ -38,6 +41,10 @@ public class XMLGenerator { public void setRegatta(Regatta regatta){ this.regatta = regatta; } + + public void setRace(Race race){ + this.race = race; + } private String parseToXmlString(String templateName, XMLMessageSubType type) throws IOException, TemplateException { Template template; @@ -52,11 +59,11 @@ public class XMLGenerator { break; case BOAT: - template.process(regatta, writer); + template.process(race, writer); break; case RACE: - template.process(regatta, writer); + template.process(race, writer); break; default: @@ -88,5 +95,35 @@ public class XMLGenerator { } + public String getBoatsAsXml() { + String result = null; + if (race == null) return null; + + try { + result = parseToXmlString(BOATS_TEMPLATE_NAME, XMLMessageSubType.BOAT); + } catch (TemplateException e) { + System.out.println("[FATAL] Error parsing boats"); + } catch (IOException e) { + System.out.println("[FATAL] Error reading boats"); + } + + return result; + } + + public String getRaceAsXml() { + String result = null; + + if (race == null) return null; + + try { + result = parseToXmlString(RACE_TEMPLATE_NAME, XMLMessageSubType.RACE); + } catch (TemplateException e) { + System.out.println("[FATAL] Error parsing race"); + } catch (IOException e) { + System.out.println("[FATAL] Error reading race"); + } + + return result; + } } \ No newline at end of file diff --git a/src/main/resources/server_config/xml_templates/boats.ftlh b/src/main/resources/server_config/xml_templates/boats.ftlh index b2d6f3bb..2dc61eee 100644 --- a/src/main/resources/server_config/xml_templates/boats.ftlh +++ b/src/main/resources/server_config/xml_templates/boats.ftlh @@ -16,20 +16,12 @@ - <#list marks as mark> - - - - - - <#list boats as boat> - - - + + diff --git a/src/main/resources/server_config/xml_templates/race.ftlh b/src/main/resources/server_config/xml_templates/race.ftlh new file mode 100644 index 00000000..2a091262 --- /dev/null +++ b/src/main/resources/server_config/xml_templates/race.ftlh @@ -0,0 +1,86 @@ + + + 2015-08-29T11:27:15+02:00 + + 15082901 + Fleet + + + <#list boats as boat> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file