diff --git a/racevisionGame/src/main/java/mock/model/RaceServer.java b/racevisionGame/src/main/java/mock/model/RaceServer.java index 585fe615..b7ccef12 100644 --- a/racevisionGame/src/main/java/mock/model/RaceServer.java +++ b/racevisionGame/src/main/java/mock/model/RaceServer.java @@ -78,8 +78,8 @@ public class RaceServer { */ private void updateXMLFiles() { updateRaceXMLFile(); - //updateBoatXMLFile(); - //updateRegattaXMLFile(); + updateBoatXMLFile(); + updateRegattaXMLFile(); } /** @@ -105,7 +105,19 @@ public class RaceServer { * Checks if the boat data source has changed, and if it has, updates LatestMessages' boat xml message. */ private void updateBoatXMLFile() { + if (boatXMLSeqNumber != race.getBoatDataSource().getSequenceNumber()) { + boatXMLSeqNumber = race.getBoatDataSource().getSequenceNumber(); + try { + String boatXMLString = BoatDataSourceToXML.toString(race.getBoatDataSource()); + XMLMessage message = createXMLMessage(boatXMLString, XMLMessageType.BOAT); + latestMessages.setXMLMessage(message); + + } catch (JAXBException e) { + Logger.getGlobal().log(Level.WARNING, "Could not serialise: " + race.getBoatDataSource(), e); + } + + } } /** diff --git a/racevisionGame/src/main/java/shared/xml/boats/BoatConfig.java b/racevisionGame/src/main/java/shared/xml/boats/BoatConfig.java new file mode 100644 index 00000000..c517c830 --- /dev/null +++ b/racevisionGame/src/main/java/shared/xml/boats/BoatConfig.java @@ -0,0 +1,533 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2017.09.01 at 11:12:43 PM NZST +// + + +package shared.xml.boats; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *
Java class for anonymous complex type. + * + *
The following schema fragment specifies the expected content contained within this class. + * + *
+ * <complexType>
+ * <complexContent>
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * <sequence>
+ * <element name="Boats">
+ * <complexType>
+ * <complexContent>
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * <sequence>
+ * <element name="Boat" maxOccurs="unbounded">
+ * <complexType>
+ * <complexContent>
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * <sequence>
+ * <element name="GPSposition">
+ * <complexType>
+ * <complexContent>
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * <attribute name="X" type="{http://www.w3.org/2001/XMLSchema}double" />
+ * <attribute name="Y" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
+ * <attribute name="Z" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
+ * </restriction>
+ * </complexContent>
+ * </complexType>
+ * </element>
+ * </sequence>
+ * <attribute name="Type" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * <attribute name="BoatName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * <attribute name="SourceID" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+ * <attribute name="HullNum" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * <attribute name="ShortName" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * <attribute name="ShapeID" type="{http://www.w3.org/2001/XMLSchema}int" />
+ * <attribute name="StoweName" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * </restriction>
+ * </complexContent>
+ * </complexType>
+ * </element>
+ * </sequence>
+ * </restriction>
+ * </complexContent>
+ * </complexType>
+ * </element>
+ * </sequence>
+ * </restriction>
+ * </complexContent>
+ * </complexType>
+ *
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+ "boats"
+})
+@XmlRootElement(name = "BoatConfig")
+public class BoatConfig {
+
+ @XmlElement(name = "Boats", required = true)
+ protected BoatConfig.Boats boats;
+
+ /**
+ * Gets the value of the boats property.
+ *
+ * @return
+ * possible object is
+ * {@link BoatConfig.Boats }
+ *
+ */
+ public BoatConfig.Boats getBoats() {
+ return boats;
+ }
+
+ /**
+ * Sets the value of the boats property.
+ *
+ * @param value
+ * allowed object is
+ * {@link BoatConfig.Boats }
+ *
+ */
+ public void setBoats(BoatConfig.Boats value) {
+ this.boats = value;
+ }
+
+
+ /**
+ * Java class for anonymous complex type. + * + *
The following schema fragment specifies the expected content contained within this class. + * + *
+ * <complexType>
+ * <complexContent>
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * <sequence>
+ * <element name="Boat" maxOccurs="unbounded">
+ * <complexType>
+ * <complexContent>
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * <sequence>
+ * <element name="GPSposition">
+ * <complexType>
+ * <complexContent>
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * <attribute name="X" type="{http://www.w3.org/2001/XMLSchema}double" />
+ * <attribute name="Y" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
+ * <attribute name="Z" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
+ * </restriction>
+ * </complexContent>
+ * </complexType>
+ * </element>
+ * </sequence>
+ * <attribute name="Type" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * <attribute name="BoatName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * <attribute name="SourceID" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+ * <attribute name="HullNum" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * <attribute name="ShortName" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * <attribute name="ShapeID" type="{http://www.w3.org/2001/XMLSchema}int" />
+ * <attribute name="StoweName" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * </restriction>
+ * </complexContent>
+ * </complexType>
+ * </element>
+ * </sequence>
+ * </restriction>
+ * </complexContent>
+ * </complexType>
+ *
+ *
+ *
+ */
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {
+ "boat"
+ })
+ public static class Boats {
+
+ @XmlElement(name = "Boat", required = true)
+ protected List
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a set method for the boat property.
+ *
+ *
+ * For example, to add a new item, do as follows: + *
+ * getBoat().add(newItem); + *+ * + * + *
+ * Objects of the following type(s) are allowed in the list
+ * {@link BoatConfig.Boats.Boat }
+ *
+ *
+ */
+ public List Java class for anonymous complex type.
+ *
+ * The following schema fragment specifies the expected content contained within this class.
+ *
+ * Java class for anonymous complex type.
+ *
+ * The following schema fragment specifies the expected content contained within this class.
+ *
+ * An ObjectFactory allows you to programatically
+ * construct new instances of the Java representation
+ * for XML content. The Java representation of XML
+ * content can consist of schema derived interfaces
+ * and classes representing the binding of schema
+ * type definitions, element declarations and model
+ * groups. Factory methods for each of these are
+ * provided in this class.
+ *
+ */
+@XmlRegistry
+public class ObjectFactory {
+
+
+ /**
+ * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: aaa
+ *
+ */
+ public ObjectFactory() {
+ }
+
+ /**
+ * Create an instance of {@link BoatConfig }
+ *
+ */
+ public BoatConfig createBoatConfig() {
+ return new BoatConfig();
+ }
+
+ /**
+ * Create an instance of {@link BoatConfig.Boats }
+ *
+ */
+ public BoatConfig.Boats createBoatConfigBoats() {
+ return new BoatConfig.Boats();
+ }
+
+ /**
+ * Create an instance of {@link BoatConfig.Boats.Boat }
+ *
+ */
+ public BoatConfig.Boats.Boat createBoatConfigBoatsBoat() {
+ return new BoatConfig.Boats.Boat();
+ }
+
+ /**
+ * Create an instance of {@link BoatConfig.Boats.Boat.GPSposition }
+ *
+ */
+ public BoatConfig.Boats.Boat.GPSposition createBoatConfigBoatsBoatGPSposition() {
+ return new BoatConfig.Boats.Boat.GPSposition();
+ }
+
+}
diff --git a/racevisionGame/src/main/resources/mock/mockXML/schema/boatsSchema.xsd b/racevisionGame/src/main/resources/mock/mockXML/schema/boatsSchema.xsd
new file mode 100644
index 00000000..6d5af617
--- /dev/null
+++ b/racevisionGame/src/main/resources/mock/mockXML/schema/boatsSchema.xsd
@@ -0,0 +1,36 @@
+
+
+ * <complexType>
+ * <complexContent>
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * <sequence>
+ * <element name="GPSposition">
+ * <complexType>
+ * <complexContent>
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * <attribute name="X" type="{http://www.w3.org/2001/XMLSchema}double" />
+ * <attribute name="Y" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
+ * <attribute name="Z" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
+ * </restriction>
+ * </complexContent>
+ * </complexType>
+ * </element>
+ * </sequence>
+ * <attribute name="Type" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * <attribute name="BoatName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * <attribute name="SourceID" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
+ * <attribute name="HullNum" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * <attribute name="ShortName" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * <attribute name="ShapeID" type="{http://www.w3.org/2001/XMLSchema}int" />
+ * <attribute name="StoweName" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * </restriction>
+ * </complexContent>
+ * </complexType>
+ *
+ *
+ *
+ */
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {
+ "gpSposition"
+ })
+ public static class Boat {
+
+ @XmlElement(name = "GPSposition", required = true)
+ protected BoatConfig.Boats.Boat.GPSposition gpSposition;
+ @XmlAttribute(name = "Type", required = true)
+ protected String type;
+ @XmlAttribute(name = "BoatName", required = true)
+ protected String boatName;
+ @XmlAttribute(name = "SourceID", required = true)
+ protected int sourceID;
+ @XmlAttribute(name = "HullNum")
+ protected String hullNum;
+ @XmlAttribute(name = "ShortName")
+ protected String shortName;
+ @XmlAttribute(name = "ShapeID")
+ protected Integer shapeID;
+ @XmlAttribute(name = "StoweName")
+ protected String stoweName;
+
+ /**
+ * Gets the value of the gpSposition property.
+ *
+ * @return
+ * possible object is
+ * {@link BoatConfig.Boats.Boat.GPSposition }
+ *
+ */
+ public BoatConfig.Boats.Boat.GPSposition getGPSposition() {
+ return gpSposition;
+ }
+
+ /**
+ * Sets the value of the gpSposition property.
+ *
+ * @param value
+ * allowed object is
+ * {@link BoatConfig.Boats.Boat.GPSposition }
+ *
+ */
+ public void setGPSposition(BoatConfig.Boats.Boat.GPSposition value) {
+ this.gpSposition = value;
+ }
+
+ /**
+ * Gets the value of the type property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getType() {
+ return type;
+ }
+
+ /**
+ * Sets the value of the type property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setType(String value) {
+ this.type = value;
+ }
+
+ /**
+ * Gets the value of the boatName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getBoatName() {
+ return boatName;
+ }
+
+ /**
+ * Sets the value of the boatName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setBoatName(String value) {
+ this.boatName = value;
+ }
+
+ /**
+ * Gets the value of the sourceID property.
+ *
+ */
+ public int getSourceID() {
+ return sourceID;
+ }
+
+ /**
+ * Sets the value of the sourceID property.
+ *
+ */
+ public void setSourceID(int value) {
+ this.sourceID = value;
+ }
+
+ /**
+ * Gets the value of the hullNum property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getHullNum() {
+ return hullNum;
+ }
+
+ /**
+ * Sets the value of the hullNum property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setHullNum(String value) {
+ this.hullNum = value;
+ }
+
+ /**
+ * Gets the value of the shortName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getShortName() {
+ return shortName;
+ }
+
+ /**
+ * Sets the value of the shortName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setShortName(String value) {
+ this.shortName = value;
+ }
+
+ /**
+ * Gets the value of the shapeID property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getShapeID() {
+ return shapeID;
+ }
+
+ /**
+ * Sets the value of the shapeID property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setShapeID(Integer value) {
+ this.shapeID = value;
+ }
+
+ /**
+ * Gets the value of the stoweName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getStoweName() {
+ return stoweName;
+ }
+
+ /**
+ * Sets the value of the stoweName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setStoweName(String value) {
+ this.stoweName = value;
+ }
+
+
+ /**
+ *
+ * <complexType>
+ * <complexContent>
+ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * <attribute name="X" type="{http://www.w3.org/2001/XMLSchema}double" />
+ * <attribute name="Y" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
+ * <attribute name="Z" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
+ * </restriction>
+ * </complexContent>
+ * </complexType>
+ *
+ *
+ *
+ */
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "")
+ public static class GPSposition {
+
+ @XmlAttribute(name = "X", required = true)
+ protected Double x;
+ @XmlAttribute(name = "Y", required = true)
+ protected double y;
+ @XmlAttribute(name = "Z", required = true)
+ protected double z;
+
+ /**
+ * Gets the value of the x property.
+ *
+ * @return
+ * possible object is
+ * {@link Double }
+ *
+ */
+ public Double getX() {
+ return x;
+ }
+
+ /**
+ * Sets the value of the x property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Double }
+ *
+ */
+ public void setX(Double value) {
+ this.x = value;
+ }
+
+ /**
+ * Gets the value of the y property.
+ *
+ */
+ public double getY() {
+ return y;
+ }
+
+ /**
+ * Sets the value of the y property.
+ *
+ */
+ public void setY(double value) {
+ this.y = value;
+ }
+
+ /**
+ * Gets the value of the z property.
+ *
+ */
+ public double getZ() {
+ return z;
+ }
+
+ /**
+ * Sets the value of the z property.
+ *
+ */
+ public void setZ(double value) {
+ this.z = value;
+ }
+
+ }
+
+ }
+
+ }
+
+}
diff --git a/racevisionGame/src/main/java/shared/xml/boats/BoatDataSourceToXML.java b/racevisionGame/src/main/java/shared/xml/boats/BoatDataSourceToXML.java
new file mode 100644
index 00000000..d24bee56
--- /dev/null
+++ b/racevisionGame/src/main/java/shared/xml/boats/BoatDataSourceToXML.java
@@ -0,0 +1,86 @@
+package shared.xml.boats;
+
+import shared.dataInput.BoatDataSource;
+import shared.dataInput.RaceDataSource;
+import shared.enums.RoundingType;
+import shared.model.Boat;
+import shared.model.CompoundMark;
+import shared.model.Leg;
+import shared.model.Mark;
+import shared.xml.Race.*;
+import shared.xml.XMLUtilities;
+
+import javax.xml.bind.JAXBException;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+
+/**
+ * Has functions to convert a {@link shared.dataInput.BoatDataSource} to an {@link BoatConfig} object.
+ */
+public class BoatDataSourceToXML {
+
+
+ /**
+ * Converts a boat data source to an XMLRace object.
+ * @param boatDataSource The data source to convert.
+ * @return The XMLRace file.
+ */
+ public static BoatConfig toXML(BoatDataSource boatDataSource) {
+ BoatConfig boatConfig = new BoatConfig();
+
+ boatConfig.boats = new BoatConfig.Boats();
+ boatConfig.boats.boat = new ArrayList<>();
+
+
+ for (Boat boat : boatDataSource.getBoats().values()) {
+ BoatConfig.Boats.Boat xmlBoat = new BoatConfig.Boats.Boat();
+
+ xmlBoat.setType("Yacht");
+ xmlBoat.setBoatName(boat.getName());
+ xmlBoat.setSourceID(boat.getSourceID());
+ xmlBoat.setStoweName(boat.getCountry());
+ xmlBoat.setShortName(boat.getCountry());
+
+ BoatConfig.Boats.Boat.GPSposition position = new BoatConfig.Boats.Boat.GPSposition();
+ position.setX(boat.getPosition().getLongitude());
+ position.setY(boat.getPosition().getLatitude());
+ position.setZ(0);
+ xmlBoat.setGPSposition(position);
+
+ boatConfig.boats.boat.add(xmlBoat);
+ }
+
+
+ for (Mark mark : boatDataSource.getMarkerBoats().values()) {
+ BoatConfig.Boats.Boat xmlBoat = new BoatConfig.Boats.Boat();
+
+ xmlBoat.setType("Mark");
+ xmlBoat.setBoatName(mark.getName());
+ xmlBoat.setSourceID(mark.getSourceID());
+
+ BoatConfig.Boats.Boat.GPSposition position = new BoatConfig.Boats.Boat.GPSposition();
+ position.setX(mark.getPosition().getLongitude());
+ position.setY(mark.getPosition().getLatitude());
+ position.setZ(0);
+ xmlBoat.setGPSposition(position);
+
+ boatConfig.boats.boat.add(xmlBoat);
+ }
+
+ return boatConfig;
+ }
+
+
+ /**
+ * Converts a boat data source to an xml string.
+ * @param boatDataSource Data source to convert.
+ * @return String containing xml file.
+ * @throws JAXBException Thrown if it cannot be converted.
+ */
+ public static String toString(BoatDataSource boatDataSource) throws JAXBException {
+ BoatConfig boats = toXML(boatDataSource);
+ return XMLUtilities.classToXML(boats);
+ }
+
+
+}
diff --git a/racevisionGame/src/main/java/shared/xml/boats/ObjectFactory.java b/racevisionGame/src/main/java/shared/xml/boats/ObjectFactory.java
new file mode 100644
index 00000000..0319de9a
--- /dev/null
+++ b/racevisionGame/src/main/java/shared/xml/boats/ObjectFactory.java
@@ -0,0 +1,71 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802
+// See http://java.sun.com/xml/jaxb
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2017.09.01 at 11:12:43 PM NZST
+//
+
+
+package shared.xml.boats;
+
+import javax.xml.bind.annotation.XmlRegistry;
+
+
+/**
+ * This object contains factory methods for each
+ * Java content interface and Java element interface
+ * generated in the aaa package.
+ *