From 1c866ea8c2be9e79f2281c442f1a7b24fb60521f Mon Sep 17 00:00:00 2001 From: William Muir Date: Tue, 29 Aug 2017 16:50:31 +1200 Subject: [PATCH] GameClient now extracts Tokens client side #story[1250] --- .../java/seng302/gameServer/GameState.java | 2 ++ .../model/stream/xml/parser/RaceXMLData.java | 10 ++++++++- .../java/seng302/utilities/XMLParser.java | 22 +++++++++++++++++++ .../java/seng302/visualiser/GameClient.java | 2 ++ src/main/resources/server_config/race.xml | 2 ++ 5 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index fcd3fa7e..bec5aaed 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -29,9 +29,11 @@ import seng302.model.ServerYacht; import seng302.model.mark.CompoundMark; import seng302.model.mark.Mark; import seng302.model.mark.MarkOrder; +import seng302.model.stream.xml.generator.RaceXMLTemplate; import seng302.model.token.Token; import seng302.model.token.TokenType; import seng302.utilities.GeoUtility; +import seng302.utilities.XMLGenerator; import seng302.utilities.XMLParser; /** diff --git a/src/main/java/seng302/model/stream/xml/parser/RaceXMLData.java b/src/main/java/seng302/model/stream/xml/parser/RaceXMLData.java index 13a0bdbc..5f1935df 100644 --- a/src/main/java/seng302/model/stream/xml/parser/RaceXMLData.java +++ b/src/main/java/seng302/model/stream/xml/parser/RaceXMLData.java @@ -6,6 +6,7 @@ import java.util.Map; import seng302.model.Limit; import seng302.model.mark.CompoundMark; import seng302.model.mark.Corner; +import seng302.model.token.Token; /** * Process a Document object containing race data in XML format and stores the data. @@ -13,13 +14,16 @@ import seng302.model.mark.Corner; public class RaceXMLData { private List participants; + private List tokens; private Map compoundMarks; private List markSequence; private List courseLimit; - public RaceXMLData(List participants, List compoundMarks, + public RaceXMLData(List participants, List tokens, + List compoundMarks, List markSequence, List courseLimit) { this.participants = participants; + this.tokens = tokens; this.markSequence = markSequence; this.courseLimit = courseLimit; this.compoundMarks = new HashMap<>(); @@ -32,6 +36,10 @@ public class RaceXMLData { return participants; } + public List getTokens() { + return tokens; + } + public Map getCompoundMarks() { return compoundMarks; } diff --git a/src/main/java/seng302/utilities/XMLParser.java b/src/main/java/seng302/utilities/XMLParser.java index d7556234..a903daaf 100644 --- a/src/main/java/seng302/utilities/XMLParser.java +++ b/src/main/java/seng302/utilities/XMLParser.java @@ -16,6 +16,8 @@ import seng302.model.mark.Corner; import seng302.model.mark.Mark; import seng302.model.stream.xml.parser.RaceXMLData; import seng302.model.stream.xml.parser.RegattaXMLData; +import seng302.model.token.Token; +import seng302.model.token.TokenType; /** * Utilities for parsing XML documents @@ -182,12 +184,32 @@ public class XMLParser { Element docEle = doc.getDocumentElement(); return new RaceXMLData( extractParticpantIDs(docEle), + extractTokens(docEle), extractCompoundMarks(docEle), extractMarkOrder(docEle), extractCourseLimit(docEle) ); } + /** + * Extracts token data + */ + private static List extractTokens(Element docEle) { + List tokens = new ArrayList<>(); + NodeList tokenList = docEle.getElementsByTagName("Tokens").item(0).getChildNodes(); + for (int i = 0; i < tokenList.getLength(); i++) { + Node tokenNode = tokenList.item(i); + if (tokenNode.getNodeName().equals("Token")) { + String tokenType = getNodeAttributeString(tokenNode, "TokenType"); + Double lat = getNodeAttributeDouble(tokenNode, "TargetLat"); + Double lng = getNodeAttributeDouble(tokenNode, "TargetLng"); + tokens.add(new Token(TokenType.valueOf(tokenType), lat, lng)); + } + } + + return tokens; + } + /** * Extracts course limit data */ diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java index 63687191..e73eb43b 100644 --- a/src/main/java/seng302/visualiser/GameClient.java +++ b/src/main/java/seng302/visualiser/GameClient.java @@ -28,6 +28,7 @@ import seng302.model.stream.parser.RaceStatusData; import seng302.model.stream.parser.YachtEventData; import seng302.model.stream.xml.parser.RaceXMLData; import seng302.model.stream.xml.parser.RegattaXMLData; +import seng302.model.token.Token; import seng302.utilities.StreamParser; import seng302.utilities.XMLParser; import seng302.visualiser.controllers.FinishScreenViewController; @@ -260,6 +261,7 @@ public class GameClient { courseData = XMLParser.parseRace( StreamParser.extractXmlMessage(packet) ); + if (raceView != null) { raceView.updateRaceData(courseData); } diff --git a/src/main/resources/server_config/race.xml b/src/main/resources/server_config/race.xml index b2379fca..eb6354d7 100644 --- a/src/main/resources/server_config/race.xml +++ b/src/main/resources/server_config/race.xml @@ -12,6 +12,8 @@ + +