diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index 677659ec..72160158 100644 --- a/src/main/java/seng302/gameServer/MainServerThread.java +++ b/src/main/java/seng302/gameServer/MainServerThread.java @@ -3,6 +3,8 @@ package seng302.gameServer; import java.io.IOException; import java.net.ServerSocket; import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.Random; import java.util.Timer; import java.util.TimerTask; @@ -13,7 +15,6 @@ import seng302.model.GeoPoint; import seng302.model.Player; import seng302.model.PolarTable; import seng302.model.ServerYacht; -import seng302.model.mark.CompoundMark; import seng302.model.stream.xml.parser.RaceXMLData; import seng302.model.stream.xml.parser.RegattaXMLData; import seng302.utilities.GeoUtility; @@ -329,39 +330,107 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate { * Initialise boats to specific spaced out geopoints behind starting line. */ private void initialiseBoatPositions() { - CompoundMark cm = GameState.getMarkOrder().getMarkOrder().get(0); - GeoPoint startMark1 = cm.getSubMark(1); - GeoPoint startMark2 = cm.getSubMark(2); +// CompoundMark cm = GameState.getMarkOrder().getMarkOrder().get(0); +// GeoPoint startMark1 = cm.getSubMark(1); +// GeoPoint startMark2 = cm.getSubMark(2); +// +// // Calculating midpoint +// Double perpendicularAngle = GeoUtility.getBearing(startMark1, startMark2); +// Double length = GeoUtility.getDistance(startMark1, startMark2); +// GeoPoint midpoint = GeoUtility.getGeoCoordinate(startMark1, perpendicularAngle, length / 2); +// +// // Setting each boats position side by side +// final double SEPARATION = 50.0; // distance apart in meters +// +// int boatIndex = 0; +// for (ServerYacht yacht : GameState.getYachts().values()) { +// int distanceApart = boatIndex / 2; +// +// if (boatIndex % 2 == 1 && boatIndex != 0) { +// distanceApart++; +// distanceApart *= -1; +// } +// +// GeoPoint spawnMark = GeoUtility +// .getGeoCoordinate(midpoint, perpendicularAngle, distanceApart * SEPARATION); +// +// if (yacht.getHeading() < perpendicularAngle) { +// spawnMark = GeoUtility +// .getGeoCoordinate(spawnMark, perpendicularAngle + 90, SEPARATION); +// } else { +// spawnMark = GeoUtility +// .getGeoCoordinate(spawnMark, perpendicularAngle + 270, SEPARATION); +// } +// +// yacht.setLocation(spawnMark); +// boatIndex++; +// } - // Calculating midpoint - Double perpendicularAngle = GeoUtility.getBearing(startMark1, startMark2); - Double length = GeoUtility.getDistance(startMark1, startMark2); - GeoPoint midpoint = GeoUtility.getGeoCoordinate(startMark1, perpendicularAngle, length / 2); + final double SEPARATION = 50.0; // distance apart in meters - // Setting each boats position side by side - double DISTANCE_FACTOR = 50.0; // distance apart in meters - int boatIndex = 0; - for (ServerYacht yacht : GameState.getYachts().values()) { - int distanceApart = boatIndex / 2; + //Reverse of the angle from start to first mark + double angleToFirstMark = 360 - GeoUtility.getBearing( + GameState.getMarkOrder().getMarkOrder().get(0).getMidPoint(), + GameState.getMarkOrder().getMarkOrder().get(1).getMidPoint() + ); - if (boatIndex % 2 == 1 && boatIndex != 0) { - distanceApart++; - distanceApart *= -1; + //Length of start line + double startLineLength = GeoUtility.getDistance( + GameState.getMarkOrder().getMarkOrder().get(0).getSubMark(1), + GameState.getMarkOrder().getMarkOrder().get(0).getSubMark(2) + ); + + //Angle of start line + double startMarkToMarkAngle = GeoUtility.getBearing( + GameState.getMarkOrder().getMarkOrder().get(0).getSubMark(1), + GameState.getMarkOrder().getMarkOrder().get(0).getSubMark(2) + ); + + //How many yachts can fit along the start line + int spacesAlongLine = (int) Math.round(startLineLength / SEPARATION); + //The free space left by the boats. + double buffer = (startLineLength % SEPARATION) / 2; + + //Randomize starting order. + List serverYachtList = new ArrayList<>(GameState.getYachts().values()); + Collections.shuffle(serverYachtList); + + //set the starting point away from start line. + GeoPoint startingPoint = GeoUtility.getGeoCoordinate( + GameState.getMarkOrder().getMarkOrder().get(0).getSubMark(1), + angleToFirstMark, SEPARATION + ); + + //Move it along the start line + startingPoint = GeoUtility.getGeoCoordinate( + startingPoint, startMarkToMarkAngle, buffer + ); + + int yachtCount = 0; + int repeats = 0; + + GeoPoint yachtLocation; + + for (ServerYacht serverYacht : serverYachtList) { + + //Move away from start line + yachtLocation = GeoUtility.getGeoCoordinate( + startingPoint, angleToFirstMark,repeats * SEPARATION + ); + //Move along start line + yachtLocation = GeoUtility.getGeoCoordinate( + yachtLocation, startMarkToMarkAngle, yachtCount * SEPARATION + ); + serverYacht.setLocation(yachtLocation); + serverYacht.setHeading(GeoUtility.getBearing( + yachtLocation, GameState.getMarkOrder().getMarkOrder().get(1).getMidPoint() + )); + //Set location for next yacht + yachtCount++; + if (yachtCount > spacesAlongLine) { + yachtCount = 0; + repeats++; } - - GeoPoint spawnMark = GeoUtility - .getGeoCoordinate(midpoint, perpendicularAngle, distanceApart * DISTANCE_FACTOR); - - if (yacht.getHeading() < perpendicularAngle) { - spawnMark = GeoUtility - .getGeoCoordinate(spawnMark, perpendicularAngle + 90, DISTANCE_FACTOR); - } else { - spawnMark = GeoUtility - .getGeoCoordinate(spawnMark, perpendicularAngle + 270, DISTANCE_FACTOR); - } - - yacht.setLocation(spawnMark); - boatIndex++; } } } diff --git a/src/main/java/seng302/gameServer/MessageFactory.java b/src/main/java/seng302/gameServer/MessageFactory.java index bd30f897..52ab54c6 100644 --- a/src/main/java/seng302/gameServer/MessageFactory.java +++ b/src/main/java/seng302/gameServer/MessageFactory.java @@ -56,7 +56,8 @@ public class MessageFactory { new ArrayList<>(), race.getMarkSequence(), race.getCourseLimit(), - new ArrayList<>(race.getCompoundMarks().values()) + new ArrayList<>(race.getCompoundMarks().values()), + GameState.getCapacity(), true ) ); String xmlStr = xmlGenerator.getRaceAsXml(); diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java index 0df0e0fc..dfd8622b 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -15,6 +15,7 @@ import java.util.zip.Checksum; import javafx.beans.property.SimpleObjectProperty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; import seng302.gameServer.messages.BoatAction; import seng302.gameServer.messages.ChatterMessage; import seng302.gameServer.messages.ClientType; @@ -196,11 +197,11 @@ public class ServerToClientThread implements Runnable { // TODO: 17/08/2017 ajm412: Send a response packet here, not really necessary until we do shapes. break; case RACE_XML: + Document document = StreamParser.extractXmlMessage(packet); raceXMLProperty.set( - XMLParser.parseRace( - StreamParser.extractXmlMessage(packet) - ) + XMLParser.parseRace(document) ); + GameState.setMaxPlayers(XMLParser.getMaxPlayers(document)); break; case REGATTA_XML: regattaXMLProperty.set( diff --git a/src/main/java/seng302/model/stream/xml/generator/RaceXMLTemplate.java b/src/main/java/seng302/model/stream/xml/generator/RaceXMLTemplate.java index aa958b03..07cb97db 100644 --- a/src/main/java/seng302/model/stream/xml/generator/RaceXMLTemplate.java +++ b/src/main/java/seng302/model/stream/xml/generator/RaceXMLTemplate.java @@ -20,15 +20,19 @@ public class RaceXMLTemplate { private List roundings; private List courseLimit; private List course; + private Integer maxPlayers; + private Boolean tokensEnabled; public RaceXMLTemplate(List yachts, List tokens, List roundings, - List limit, List course) { + List limit, List course, Integer maxPlayers, Boolean tokensEnabled) { this.yachts = yachts; this.tokens = tokens; this.roundings = roundings; this.courseLimit = limit; this.course = course; startTime = LocalDateTime.now(); + this.maxPlayers = maxPlayers; + this.tokensEnabled = tokensEnabled; } /** @@ -83,4 +87,12 @@ public class RaceXMLTemplate { public void setTokens(List tokens) { this.tokens = tokens; } + + public String getTokensEnabled() { + return tokensEnabled.toString(); + } + + public String getMaxPlayers() { + return maxPlayers.toString(); + } } diff --git a/src/main/java/seng302/utilities/XMLParser.java b/src/main/java/seng302/utilities/XMLParser.java index d9dbeef6..7b0ec10e 100644 --- a/src/main/java/seng302/utilities/XMLParser.java +++ b/src/main/java/seng302/utilities/XMLParser.java @@ -13,6 +13,7 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; @@ -35,6 +36,8 @@ import seng302.visualiser.fxObjects.assets_3D.BoatMeshType; */ public class XMLParser { + private static final int MAX_PLAYERS = 8; + /** * Returns the text content of a given child element tag, assuming it exists, as an Integer. * @@ -45,7 +48,7 @@ public class XMLParser { private static Integer getElementInt(Element ele, String tag) { NodeList tagList = ele.getElementsByTagName(tag); if (tagList.getLength() > 0) { - return Integer.parseInt(tagList.item(0).getTextContent()); + return Integer.parseInt(tagList.item(0).getTextContent().replaceAll("\\s+","")); } else { return null; } @@ -77,7 +80,7 @@ public class XMLParser { private static Double getElementDouble(Element ele, String tag) { NodeList tagList = ele.getElementsByTagName(tag); if (tagList.getLength() > 0) { - return Double.parseDouble(tagList.item(0).getTextContent()); + return Double.parseDouble(tagList.item(0).getTextContent().replaceAll("\\s+","")); } else { return null; } @@ -195,6 +198,31 @@ public class XMLParser { ); } + public static Boolean tokensEnabled(Document doc) { + Element docEle = doc.getDocumentElement(); + try { + Node tokenNode = docEle.getAttributeNode("Tokens"); + return Boolean.valueOf(XMLParser.getNodeAttributeString(tokenNode, "Enabled")); + } catch (NullPointerException npe) { + return false; + } + } + + public static Integer getMaxPlayers(Document doc) { + Element docEle = doc.getDocumentElement(); + try { + NamedNodeMap namedNodeMap = docEle.getElementsByTagName("Participants").item(0).getAttributes(); + Node node = namedNodeMap.getNamedItem("MaxPlayers"); + if (node != null) { + return Integer.parseInt(node.getNodeValue()); + } + } catch (NullPointerException npe) { + npe.printStackTrace(); + return MAX_PLAYERS; + } + return MAX_PLAYERS; + } + /** * Returns an object containing the data extracted from the given xml formatted document * @@ -350,9 +378,13 @@ public class XMLParser { * @param url the location of the race def file * @param serverName the name of the server * @param repetitions the repetitions of a segment of the race def file. + * @param maxPlayers max number of players. uses the default race max if null or greater than the actual max. + * @param tokensEnabled if tokens are enabled * @return a pair which contains regatta string, race string as key, value pair. */ - public static Pair parseRaceDef(String url, String serverName, int repetitions) { + public static Pair parseRaceDef( + String url, String serverName, Integer repetitions, Integer maxPlayers, Boolean tokensEnabled + ) { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db; Document doc = null; @@ -369,16 +401,25 @@ public class XMLParser { XMLParser.getElementDouble(docEle, "CentralLat"), XMLParser.getElementDouble(docEle, "CentralLng") ); + XMLGenerator xmlGenerator = new XMLGenerator(); xmlGenerator.setRegattaTemplate(regattaXMLTemplate); - RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(new ArrayList<>(), new ArrayList<>(), + if (maxPlayers == null) { + maxPlayers = XMLParser.getElementInt(docEle, "MaxPlayers"); + } else if (maxPlayers > XMLParser.getElementInt(docEle, "MaxPlayers")) { + maxPlayers = XMLParser.getElementInt(docEle, "MaxPlayers"); + } + + RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate( + new ArrayList<>(), new ArrayList<>(), XMLParser.extractMarkOrderRaceDef(docEle, repetitions), XMLParser.extractCourseLimitRaceDef(docEle), - XMLParser.extractCompoundMarksRaceDef(docEle) + XMLParser.extractCompoundMarksRaceDef(docEle), + maxPlayers, tokensEnabled ); xmlGenerator.setRaceTemplate(raceXMLTemplate); - return new Pair<>(xmlGenerator.getRegattaAsXml(), xmlGenerator.getRaceAsXml()); + return new Pair<>(regattaXMLTemplate, raceXMLTemplate); } private static List extractMarkOrderRaceDef(Element docEle, int repitions){ diff --git a/src/main/java/seng302/visualiser/ClientToServerThread.java b/src/main/java/seng302/visualiser/ClientToServerThread.java index f7d7695b..c8bb719c 100644 --- a/src/main/java/seng302/visualiser/ClientToServerThread.java +++ b/src/main/java/seng302/visualiser/ClientToServerThread.java @@ -30,6 +30,9 @@ import seng302.gameServer.messages.XMLMessage; import seng302.gameServer.messages.XMLMessageSubType; import seng302.model.stream.packets.PacketType; import seng302.model.stream.packets.StreamPacket; +import seng302.model.stream.xml.generator.RaceXMLTemplate; +import seng302.model.stream.xml.generator.RegattaXMLTemplate; +import seng302.utilities.XMLGenerator; import seng302.utilities.XMLParser; /** @@ -373,18 +376,23 @@ public class ClientToServerThread implements Runnable { return clientId; } - public void sendXML(String path, String serverName, int legRepeats) { - Pair regattaRace = XMLParser.parseRaceDef(path, serverName, legRepeats); - + public void sendXML(String path, String serverName, Integer legRepeats, Integer maxPlayers, Boolean tokensEnabled) { + Pair regattaRace = XMLParser.parseRaceDef( + path, serverName, legRepeats, maxPlayers, tokensEnabled + ); + XMLGenerator xmlGenerator = new XMLGenerator(); + xmlGenerator.setRegattaTemplate(regattaRace.getKey()); + xmlGenerator.setRaceTemplate(regattaRace.getValue()); + String regatta = xmlGenerator.getRegattaAsXml(); + String race = xmlGenerator.getRaceAsXml(); sendByteBuffer( new XMLMessage( - regattaRace.getKey(), XMLMessageSubType.REGATTA, regattaRace.getKey().length() + regatta, XMLMessageSubType.REGATTA, regatta.length() ).getBuffer() ); - sendByteBuffer( new XMLMessage( - regattaRace.getValue(), XMLMessageSubType.RACE, regattaRace.getValue().length() + race, XMLMessageSubType.RACE, race.length() ).getBuffer() ); } diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java index b2ade01c..20bf4553 100644 --- a/src/main/java/seng302/visualiser/GameClient.java +++ b/src/main/java/seng302/visualiser/GameClient.java @@ -122,18 +122,20 @@ public class GameClient { * @param ipAddress IP to connect to. * @param portNumber Port to connect to. */ - public ServerDescription runAsHost(String ipAddress, Integer portNumber, String serverName, Integer maxPlayers, String race, Integer numLegs) { + public ServerDescription runAsHost( + String ipAddress, Integer portNumber, String serverName, Integer maxPlayers, String race, + Integer numLegs, Boolean tokensEnabled + ) { XMLGenerator.setDefaultRaceName(serverName); server = new MainServerThread(); - GameState.setMaxPlayers(maxPlayers); try { startClientToServerThread(ipAddress, 4942); } catch (IOException e) { showConnectionError("Cannot connect to server as host"); } - socketThread.sendXML(race, serverName, numLegs); + socketThread.sendXML(race, serverName, numLegs, maxPlayers, tokensEnabled); while (regattaData == null){ try { Thread.sleep(100); diff --git a/src/main/java/seng302/visualiser/MapMaker.java b/src/main/java/seng302/visualiser/MapMaker.java index f0796886..9425bf0a 100644 --- a/src/main/java/seng302/visualiser/MapMaker.java +++ b/src/main/java/seng302/visualiser/MapMaker.java @@ -13,8 +13,11 @@ import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.xml.sax.InputSource; import org.xml.sax.SAXException; +import seng302.model.stream.xml.generator.RaceXMLTemplate; +import seng302.model.stream.xml.generator.RegattaXMLTemplate; import seng302.model.stream.xml.parser.RaceXMLData; import seng302.model.stream.xml.parser.RegattaXMLData; +import seng302.utilities.XMLGenerator; import seng302.utilities.XMLParser; /** @@ -26,8 +29,10 @@ public class MapMaker { private List races = new ArrayList<>(); private List regattas = new ArrayList<>(); private List filePaths = new ArrayList<>(); + private List maxPlayers = new ArrayList<>(); private static MapMaker instance; private int index = 0; + private XMLGenerator xmlGenerator = new XMLGenerator(); public static MapMaker getInstance() { if (instance == null) { @@ -41,32 +46,39 @@ public class MapMaker { File[] directoryListing = dir.listFiles(); if (directoryListing != null) { for (File child : directoryListing) { - Pair regattaRace = XMLParser.parseRaceDef( - child.getAbsolutePath(), "", 1 + Pair regattaRace = XMLParser.parseRaceDef( + child.getAbsolutePath(), "", 1, null, false ); filePaths.add(child.getAbsolutePath()); + RegattaXMLTemplate regattaTemplate = regattaRace.getKey(); + regattas.add(new RegattaXMLData( + regattaTemplate.getRegattaId(), + regattaTemplate.getName(), + regattaTemplate.getCourseName(), + regattaTemplate.getLatitude(), + regattaTemplate.getLongitude(), + regattaTemplate.getUtcOffset() + )); + + RaceXMLTemplate raceTemplate = regattaRace.getValue(); + xmlGenerator.setRaceTemplate(raceTemplate); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db; Document doc = null; try { db = dbf.newDocumentBuilder(); - doc = db.parse(new InputSource(new StringReader(regattaRace.getKey()))); - } catch (ParserConfigurationException | IOException | SAXException e) { - e.printStackTrace(); - } - regattas.add(XMLParser.parseRegatta(doc)); - try { - db = dbf.newDocumentBuilder(); - doc = db.parse(new InputSource(new StringReader(regattaRace.getValue()))); + doc = db.parse(new InputSource(new StringReader(xmlGenerator.getRaceAsXml()))); } catch (ParserConfigurationException | IOException | SAXException e) { e.printStackTrace(); } + RaceXMLData race = XMLParser.parseRace(doc); - MapPreview mapPreview = new MapPreview( + maxPlayers.add(XMLParser.getMaxPlayers(doc)); + + mapPreviews.add(new MapPreview( new ArrayList<>(race.getCompoundMarks().values()), race.getMarkSequence(), race.getCourseLimit() - ); - mapPreviews.add(mapPreview); + )); races.add(race); } } @@ -101,4 +113,8 @@ public class MapMaker { public String getCurrentRacePath() { return filePaths.get(index); } + + public Integer getMaxPlayers() { + return maxPlayers.get(index); + } } diff --git a/src/main/java/seng302/visualiser/controllers/dialogs/ServerCreationController.java b/src/main/java/seng302/visualiser/controllers/dialogs/ServerCreationController.java index a6d2f1d0..b7d0b38c 100644 --- a/src/main/java/seng302/visualiser/controllers/dialogs/ServerCreationController.java +++ b/src/main/java/seng302/visualiser/controllers/dialogs/ServerCreationController.java @@ -10,7 +10,6 @@ import java.util.ResourceBundle; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Label; -import javafx.scene.input.MouseEvent; import javafx.scene.layout.AnchorPane; import seng302.gameServer.ServerDescription; import seng302.utilities.Sounds; @@ -50,13 +49,18 @@ public class ServerCreationController implements Initializable { //---------FXML END---------// public void initialize(URL location, ResourceBundle resources) { - legsSlider.setMax(10); + maxPlayersSlider.valueProperty().addListener( (observable, oldValue, newValue) -> updateMaxPlayerLabel() ); + maxPlayersSlider.setMax(mapMaker.getMaxPlayers()); + maxPlayersSlider.setValue(mapMaker.getMaxPlayers()); + legsSlider.valueProperty().addListener( (obs, oldVal, newVal) -> updateLegSliderLabel() ); + legsSlider.setMax(10); + updateMaxPlayerLabel(); updateLegSliderLabel(); @@ -105,7 +109,7 @@ public class ServerCreationController implements Initializable { private void createServer() { ServerDescription serverDescription = ViewManager.getInstance().getGameClient() .runAsHost("localhost", 4941, serverName.getText(), (int) maxPlayersSlider - .getValue(), mapMaker.getCurrentRacePath(), (int) legsSlider.getValue()); + .getValue(), mapMaker.getCurrentRacePath(), (int) legsSlider.getValue(), pickupsCheckBox.isSelected()); ViewManager.getInstance().setProperty("serverName", serverDescription.getName()); ViewManager.getInstance().setProperty("mapName", serverDescription.getMapName()); @@ -127,20 +131,24 @@ public class ServerCreationController implements Initializable { } - public void playButtonHoverSound(MouseEvent mouseEvent) { + public void playButtonHoverSound() { Sounds.playHoverSound(); } private void nextMap() { mapMaker.next(); - mapHolder.getChildren().setAll(mapMaker.getCurrentGameView()); - mapNameLabel.setText(mapMaker.getCurrentRegatta().getCourseName()); + updateMap(); } private void lastMap() { mapMaker.previous(); - mapHolder.getChildren().setAll(mapMaker.getCurrentGameView()); - mapNameLabel.setText(mapMaker.getCurrentRegatta().getCourseName()); + updateMap(); } + private void updateMap() { + mapHolder.getChildren().setAll(mapMaker.getCurrentGameView()); + mapNameLabel.setText(mapMaker.getCurrentRegatta().getCourseName()); + maxPlayersSlider.setMax(mapMaker.getMaxPlayers()); + maxPlayersSlider.setValue(mapMaker.getMaxPlayers()); + } } diff --git a/src/main/resources/maps/default.xml b/src/main/resources/maps/default.xml index 3b91bb3b..5d3da318 100644 --- a/src/main/resources/maps/default.xml +++ b/src/main/resources/maps/default.xml @@ -6,6 +6,8 @@ 57.6679590 11.8503233 + 10 + diff --git a/src/main/resources/maps/horseshoe.xml b/src/main/resources/maps/horseshoe.xml index b917eb32..ee95efb8 100644 --- a/src/main/resources/maps/horseshoe.xml +++ b/src/main/resources/maps/horseshoe.xml @@ -6,6 +6,8 @@ -14.6457 47.612855 + 5 + diff --git a/src/main/resources/server_config/xml_templates/race.ftlh b/src/main/resources/server_config/xml_templates/race.ftlh index aa347423..c9830a9b 100644 --- a/src/main/resources/server_config/xml_templates/race.ftlh +++ b/src/main/resources/server_config/xml_templates/race.ftlh @@ -5,13 +5,13 @@ 15082901 Fleet - + <#list boats as boat> - + <#list tokens as token> diff --git a/src/test/java/seng302/models/MarkOrderTest.java b/src/test/java/seng302/models/MarkOrderTest.java index 13473604..a782d758 100644 --- a/src/test/java/seng302/models/MarkOrderTest.java +++ b/src/test/java/seng302/models/MarkOrderTest.java @@ -4,14 +4,20 @@ import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertTrue; +import java.io.IOException; +import java.io.StringReader; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -import seng302.gameServer.messages.XMLMessageSubType; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; import seng302.model.mark.CompoundMark; import seng302.model.mark.MarkOrder; -import seng302.model.stream.packets.StreamPacket; -import seng302.utilities.StreamParser; +import seng302.utilities.XMLGenerator; import seng302.utilities.XMLParser; public class MarkOrderTest { @@ -35,17 +41,22 @@ public class MarkOrderTest { ///-( \' \\ */ - markOrder = new MarkOrder( - XMLParser.parseRace( - StreamParser.extractXmlMessage( - new StreamPacket( - XMLMessageSubType.RACE.getType(), - XMLParser.parseRaceDef("/maps/default.xml", "test", 2).getValue().length(), - 0, XMLParser.parseRaceDef("/maps/default.xml", "test", 2).getValue().getBytes() - ) - ) - ) + XMLGenerator xmlGenerator = new XMLGenerator(); + xmlGenerator.setRaceTemplate( + XMLParser.parseRaceDef( + "/maps/default.xml", "test", 2, null, false + ).getValue() ); + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db; + Document doc = null; + try { + db = dbf.newDocumentBuilder(); + doc = db.parse(new InputSource(new StringReader(xmlGenerator.getRaceAsXml()))); + } catch (ParserConfigurationException | IOException | SAXException e) { + e.printStackTrace(); + } + markOrder = new MarkOrder(XMLParser.parseRace(doc)); currentSeqID = 0; }