diff --git a/mock/src/main/java/seng302/Data/RaceData.java b/mock/src/main/java/seng302/Data/RaceData.java index 1d2cd064..d31f9be2 100644 --- a/mock/src/main/java/seng302/Data/RaceData.java +++ b/mock/src/main/java/seng302/Data/RaceData.java @@ -32,7 +32,7 @@ public class RaceData { private OffsetDateTime creationTimeDate; private OffsetDateTime raceStartTime; private List participants; - private List course; + private List course; private List courseLimit; public RaceData(RaceDataSource dataSource) { @@ -42,7 +42,7 @@ public class RaceData { creationTimeDate = OffsetDateTime.now(); raceStartTime = OffsetDateTime.now().plusMinutes(3); participants = dataSource.getBoats(); - course = dataSource.getLegs(); + course = dataSource.getMarkers(); courseLimit = dataSource.getBoundary(); } @@ -55,29 +55,82 @@ public class RaceData { // root elements Document doc = docBuilder.newDocument(); - Element rootElement = doc.createElement("Race"); - doc.appendChild(rootElement); - - // shorten way - // staff.setAttribute("id", "1"); + Element raceElement = doc.createElement("Race"); + doc.appendChild(raceElement); Element raceIdElement = doc.createElement("RaceID"); raceIdElement.appendChild(doc.createTextNode(raceID)); - rootElement.appendChild(raceIdElement); + raceElement.appendChild(raceIdElement); Element raceTypeElement = doc.createElement("RaceType"); raceTypeElement.appendChild(doc.createTextNode(raceType)); - rootElement.appendChild(raceTypeElement); + raceElement.appendChild(raceTypeElement); Element creationTimeElement = doc.createElement("CreationTimeDate"); creationTimeElement.appendChild(doc.createTextNode(creationTimeDate.toString())); - rootElement.appendChild(creationTimeElement); + raceElement.appendChild(creationTimeElement); Element startTimeElement = doc.createElement("RaceStartTime"); startTimeElement.setAttribute("Time", raceStartTime.toString()); startTimeElement.setAttribute("Postpone", "false"); - rootElement.appendChild(startTimeElement); + raceElement.appendChild(startTimeElement); + + //PARTICIPANTS + + Element courseElement = doc.createElement("Course"); + Element compoundMarkSeqElement = doc.createElement("CompoundMarkSequence"); + + int i = 1; + for (Marker marker : course) { + Element compoundMarkElement = doc.createElement("CompoundMark"); + compoundMarkElement.setAttribute("CompoundMarkId", i + ""); + compoundMarkElement.setAttribute("Name", marker.getName()); + + Element mark1 = doc.createElement("Mark"); + mark1.setAttribute("TargetLat", marker.getMark1().getLatitude() + ""); + mark1.setAttribute("TargetLng", marker.getMark1().getLongitude() + ""); + + compoundMarkElement.appendChild(mark1); + + if (!(marker.getMark1().equals(marker.getMark2()))) { + Element mark2 = doc.createElement("Mark"); + mark2.setAttribute("TargetLat", marker.getMark2().getLatitude() + ""); + mark2.setAttribute("TargetLng", marker.getMark2().getLongitude() + ""); + compoundMarkElement.appendChild(mark2); + } + + courseElement.appendChild(compoundMarkElement); + + + Element cornerElement = doc.createElement("Corner"); + cornerElement.setAttribute("SeqID", i + ""); + cornerElement.setAttribute("CompoundMarkID", i + ""); + + compoundMarkSeqElement.appendChild(cornerElement); + + i++; + } + + raceElement.appendChild(compoundMarkSeqElement); + raceElement.appendChild(courseElement); + + + int j = 1; + + Element courseLimitElement = doc.createElement("CourseLimit"); + for (GPSCoordinate coordinate : courseLimit) { + Element limitElement = doc.createElement("Limit"); + limitElement.setAttribute("SeqID", j + ""); + + limitElement.setAttribute("Lat", coordinate.getLatitude() + ""); + limitElement.setAttribute("Lon", coordinate.getLongitude() + ""); + + courseLimitElement.appendChild(limitElement); + + j++; + } + raceElement.appendChild(courseLimitElement); // write the content into xml file diff --git a/mock/src/main/java/seng302/GPSCoordinate.java b/mock/src/main/java/seng302/GPSCoordinate.java index 9ece540f..44249833 100644 --- a/mock/src/main/java/seng302/GPSCoordinate.java +++ b/mock/src/main/java/seng302/GPSCoordinate.java @@ -54,8 +54,8 @@ public class GPSCoordinate { GPSCoordinate that = (GPSCoordinate) o; - if (Math.abs(this.latitude - latitude) > 1e-6) return false; - return (Math.abs(this.longitude - longitude) < 1e-6); + if (Math.abs(this.latitude - that.latitude) > 1e-7) return false; + return (Math.abs(this.longitude - that.longitude) < 1e-7); } @Override diff --git a/mock/src/main/java/seng302/Model/Marker.java b/mock/src/main/java/seng302/Model/Marker.java index 2b7cafbe..17f9ebe2 100644 --- a/mock/src/main/java/seng302/Model/Marker.java +++ b/mock/src/main/java/seng302/Model/Marker.java @@ -13,6 +13,8 @@ public class Marker { private GPSCoordinate averageGPSCoordinate; private GPSCoordinate mark1; private GPSCoordinate mark2; + private String name; + private boolean doubleMarker = false; public Marker(GPSCoordinate mark1) { @@ -30,6 +32,15 @@ public class Marker { } + public Marker(String name, GPSCoordinate mark1, GPSCoordinate mark2) { + + this.name = name; + this.mark1 = mark1; + this.mark2 = mark2; + this.averageGPSCoordinate = calculateAverage(); + + } + public GPSCoordinate getMark1() { return mark1; } @@ -42,6 +53,9 @@ public class Marker { return averageGPSCoordinate; } + public String getName() { + return name; + } private GPSCoordinate calculateAverage() { diff --git a/mock/src/main/java/seng302/Model/RaceClock.java b/mock/src/main/java/seng302/Model/RaceClock.java index 6ea62bd3..25bac06a 100644 --- a/mock/src/main/java/seng302/Model/RaceClock.java +++ b/mock/src/main/java/seng302/Model/RaceClock.java @@ -27,7 +27,6 @@ public class RaceClock { LocalDateTime localDateTime = LocalDateTime.now(zoneId); ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId); dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM HH:mm:ss z"); - // System.out.println(dateTimeFormatter.format(zonedDateTime)); time = new SimpleStringProperty(dateTimeFormatter.format(zonedDateTime)); DateTimeFormatter timeZoneFormatter = DateTimeFormatter.ofPattern("z"); timeZone = timeZoneFormatter.format(zonedDateTime); diff --git a/mock/src/main/java/seng302/RaceDataSource.java b/mock/src/main/java/seng302/RaceDataSource.java index 40319513..e80d6a3f 100644 --- a/mock/src/main/java/seng302/RaceDataSource.java +++ b/mock/src/main/java/seng302/RaceDataSource.java @@ -2,6 +2,7 @@ package seng302; import seng302.Model.BoatInRace; import seng302.Model.Leg; +import seng302.Model.Marker; import java.util.List; @@ -12,6 +13,7 @@ public interface RaceDataSource { List getBoats(); List getLegs(); List getBoundary(); + List getMarkers(); String getRaceId(); diff --git a/mock/src/main/java/seng302/RaceXMLReader.java b/mock/src/main/java/seng302/RaceXMLReader.java index 4dd2e925..fac132a9 100644 --- a/mock/src/main/java/seng302/RaceXMLReader.java +++ b/mock/src/main/java/seng302/RaceXMLReader.java @@ -25,6 +25,7 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource { private GPSCoordinate mapTopLeft, mapBottomRight; private List boundary = new ArrayList<>(); private static double COORDINATEPADDING = 0.0005; + private List markers = new ArrayList<>(); /** * Constractor for Race XML @@ -59,13 +60,13 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource { readID(); readCourse(); readLegs(); + readMarkers(); readBoats(); } public void readID() { NodeList race = doc.getElementsByTagName("race"); - System.out.println(race.getLength()); raceID = getTextValueOfNode((Element) race.item(0), "raceId"); } @@ -90,6 +91,21 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource { } } + + + /** + * Read all the boats in the XML file + */ + public void readMarkers() { + //get all boats + NodeList nMarkers = doc.getElementsByTagName("marker"); + + for (int i = 0; i < nMarkers.getLength(); i++) { + Marker marker = getMarker((Element) nMarkers.item(i)); + if (marker.getName() != null) markers.add(marker); + } + } + /** * Read all the legs in the XML file */ @@ -225,8 +241,8 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource { } else { side2 = side1; } - return new Marker(side1, side2); - + NodeList name = markerNode.getElementsByTagName("name"); + return name.getLength() == 1 ? new Marker(getTextValueOfNode((Element) markerNode, "name"), side1, side2) : new Marker(side1, side2); } /** @@ -331,4 +347,6 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource { } public String getRaceId() { return raceID; } + + public List getMarkers() { return markers; } }