Added course limit, course and marker seq field to xml fiule of race info
#story[778]
This commit is contained in:
@@ -32,7 +32,7 @@ public class RaceData {
|
|||||||
private OffsetDateTime creationTimeDate;
|
private OffsetDateTime creationTimeDate;
|
||||||
private OffsetDateTime raceStartTime;
|
private OffsetDateTime raceStartTime;
|
||||||
private List<BoatInRace> participants;
|
private List<BoatInRace> participants;
|
||||||
private List<Leg> course;
|
private List<Marker> course;
|
||||||
private List<GPSCoordinate> courseLimit;
|
private List<GPSCoordinate> courseLimit;
|
||||||
|
|
||||||
public RaceData(RaceDataSource dataSource) {
|
public RaceData(RaceDataSource dataSource) {
|
||||||
@@ -42,7 +42,7 @@ public class RaceData {
|
|||||||
creationTimeDate = OffsetDateTime.now();
|
creationTimeDate = OffsetDateTime.now();
|
||||||
raceStartTime = OffsetDateTime.now().plusMinutes(3);
|
raceStartTime = OffsetDateTime.now().plusMinutes(3);
|
||||||
participants = dataSource.getBoats();
|
participants = dataSource.getBoats();
|
||||||
course = dataSource.getLegs();
|
course = dataSource.getMarkers();
|
||||||
courseLimit = dataSource.getBoundary();
|
courseLimit = dataSource.getBoundary();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,29 +55,82 @@ public class RaceData {
|
|||||||
|
|
||||||
// root elements
|
// root elements
|
||||||
Document doc = docBuilder.newDocument();
|
Document doc = docBuilder.newDocument();
|
||||||
Element rootElement = doc.createElement("Race");
|
Element raceElement = doc.createElement("Race");
|
||||||
doc.appendChild(rootElement);
|
doc.appendChild(raceElement);
|
||||||
|
|
||||||
// shorten way
|
|
||||||
// staff.setAttribute("id", "1");
|
|
||||||
|
|
||||||
Element raceIdElement = doc.createElement("RaceID");
|
Element raceIdElement = doc.createElement("RaceID");
|
||||||
raceIdElement.appendChild(doc.createTextNode(raceID));
|
raceIdElement.appendChild(doc.createTextNode(raceID));
|
||||||
rootElement.appendChild(raceIdElement);
|
raceElement.appendChild(raceIdElement);
|
||||||
|
|
||||||
Element raceTypeElement = doc.createElement("RaceType");
|
Element raceTypeElement = doc.createElement("RaceType");
|
||||||
raceTypeElement.appendChild(doc.createTextNode(raceType));
|
raceTypeElement.appendChild(doc.createTextNode(raceType));
|
||||||
rootElement.appendChild(raceTypeElement);
|
raceElement.appendChild(raceTypeElement);
|
||||||
|
|
||||||
Element creationTimeElement = doc.createElement("CreationTimeDate");
|
Element creationTimeElement = doc.createElement("CreationTimeDate");
|
||||||
creationTimeElement.appendChild(doc.createTextNode(creationTimeDate.toString()));
|
creationTimeElement.appendChild(doc.createTextNode(creationTimeDate.toString()));
|
||||||
rootElement.appendChild(creationTimeElement);
|
raceElement.appendChild(creationTimeElement);
|
||||||
|
|
||||||
Element startTimeElement = doc.createElement("RaceStartTime");
|
Element startTimeElement = doc.createElement("RaceStartTime");
|
||||||
startTimeElement.setAttribute("Time", raceStartTime.toString());
|
startTimeElement.setAttribute("Time", raceStartTime.toString());
|
||||||
startTimeElement.setAttribute("Postpone", "false");
|
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
|
// write the content into xml file
|
||||||
|
|||||||
@@ -54,8 +54,8 @@ public class GPSCoordinate {
|
|||||||
|
|
||||||
GPSCoordinate that = (GPSCoordinate) o;
|
GPSCoordinate that = (GPSCoordinate) o;
|
||||||
|
|
||||||
if (Math.abs(this.latitude - latitude) > 1e-6) return false;
|
if (Math.abs(this.latitude - that.latitude) > 1e-7) return false;
|
||||||
return (Math.abs(this.longitude - longitude) < 1e-6);
|
return (Math.abs(this.longitude - that.longitude) < 1e-7);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ public class Marker {
|
|||||||
private GPSCoordinate averageGPSCoordinate;
|
private GPSCoordinate averageGPSCoordinate;
|
||||||
private GPSCoordinate mark1;
|
private GPSCoordinate mark1;
|
||||||
private GPSCoordinate mark2;
|
private GPSCoordinate mark2;
|
||||||
|
private String name;
|
||||||
|
private boolean doubleMarker = false;
|
||||||
|
|
||||||
public Marker(GPSCoordinate mark1) {
|
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() {
|
public GPSCoordinate getMark1() {
|
||||||
return mark1;
|
return mark1;
|
||||||
}
|
}
|
||||||
@@ -42,6 +53,9 @@ public class Marker {
|
|||||||
return averageGPSCoordinate;
|
return averageGPSCoordinate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
private GPSCoordinate calculateAverage() {
|
private GPSCoordinate calculateAverage() {
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ public class RaceClock {
|
|||||||
LocalDateTime localDateTime = LocalDateTime.now(zoneId);
|
LocalDateTime localDateTime = LocalDateTime.now(zoneId);
|
||||||
ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
|
ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
|
||||||
dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM HH:mm:ss z");
|
dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM HH:mm:ss z");
|
||||||
// System.out.println(dateTimeFormatter.format(zonedDateTime));
|
|
||||||
time = new SimpleStringProperty(dateTimeFormatter.format(zonedDateTime));
|
time = new SimpleStringProperty(dateTimeFormatter.format(zonedDateTime));
|
||||||
DateTimeFormatter timeZoneFormatter = DateTimeFormatter.ofPattern("z");
|
DateTimeFormatter timeZoneFormatter = DateTimeFormatter.ofPattern("z");
|
||||||
timeZone = timeZoneFormatter.format(zonedDateTime);
|
timeZone = timeZoneFormatter.format(zonedDateTime);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package seng302;
|
|||||||
|
|
||||||
import seng302.Model.BoatInRace;
|
import seng302.Model.BoatInRace;
|
||||||
import seng302.Model.Leg;
|
import seng302.Model.Leg;
|
||||||
|
import seng302.Model.Marker;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -12,6 +13,7 @@ public interface RaceDataSource {
|
|||||||
List<BoatInRace> getBoats();
|
List<BoatInRace> getBoats();
|
||||||
List<Leg> getLegs();
|
List<Leg> getLegs();
|
||||||
List<GPSCoordinate> getBoundary();
|
List<GPSCoordinate> getBoundary();
|
||||||
|
List<Marker> getMarkers();
|
||||||
|
|
||||||
String getRaceId();
|
String getRaceId();
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource {
|
|||||||
private GPSCoordinate mapTopLeft, mapBottomRight;
|
private GPSCoordinate mapTopLeft, mapBottomRight;
|
||||||
private List<GPSCoordinate> boundary = new ArrayList<>();
|
private List<GPSCoordinate> boundary = new ArrayList<>();
|
||||||
private static double COORDINATEPADDING = 0.0005;
|
private static double COORDINATEPADDING = 0.0005;
|
||||||
|
private List<Marker> markers = new ArrayList<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constractor for Race XML
|
* Constractor for Race XML
|
||||||
@@ -59,13 +60,13 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource {
|
|||||||
readID();
|
readID();
|
||||||
readCourse();
|
readCourse();
|
||||||
readLegs();
|
readLegs();
|
||||||
|
readMarkers();
|
||||||
readBoats();
|
readBoats();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void readID() {
|
public void readID() {
|
||||||
|
|
||||||
NodeList race = doc.getElementsByTagName("race");
|
NodeList race = doc.getElementsByTagName("race");
|
||||||
System.out.println(race.getLength());
|
|
||||||
|
|
||||||
raceID = getTextValueOfNode((Element) race.item(0), "raceId");
|
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
|
* Read all the legs in the XML file
|
||||||
*/
|
*/
|
||||||
@@ -225,8 +241,8 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource {
|
|||||||
} else {
|
} else {
|
||||||
side2 = side1;
|
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 String getRaceId() { return raceID; }
|
||||||
|
|
||||||
|
public List<Marker> getMarkers() { return markers; }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user