Added boats.xml schema.

RaceServer now creates an XMLMessage when the race's BoatDataSource changes.
#story[1188]
main
fjc40 8 years ago
parent 298fcd03dc
commit 8c76d6c26e

@ -78,8 +78,8 @@ public class RaceServer {
*/ */
private void updateXMLFiles() { private void updateXMLFiles() {
updateRaceXMLFile(); updateRaceXMLFile();
//updateBoatXMLFile(); updateBoatXMLFile();
//updateRegattaXMLFile(); 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. * Checks if the boat data source has changed, and if it has, updates LatestMessages' boat xml message.
*/ */
private void updateBoatXMLFile() { 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);
}
}
} }
/** /**

@ -0,0 +1,533 @@
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// 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;
/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* &lt;complexType>
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;sequence>
* &lt;element name="Boats">
* &lt;complexType>
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;sequence>
* &lt;element name="Boat" maxOccurs="unbounded">
* &lt;complexType>
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;sequence>
* &lt;element name="GPSposition">
* &lt;complexType>
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;attribute name="X" type="{http://www.w3.org/2001/XMLSchema}double" />
* &lt;attribute name="Y" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
* &lt;attribute name="Z" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* &lt;/element>
* &lt;/sequence>
* &lt;attribute name="Type" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="BoatName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="SourceID" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
* &lt;attribute name="HullNum" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="ShortName" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="ShapeID" type="{http://www.w3.org/2001/XMLSchema}int" />
* &lt;attribute name="StoweName" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* &lt;/element>
* &lt;/sequence>
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* &lt;/element>
* &lt;/sequence>
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* </pre>
*
*
*/
@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;
}
/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* &lt;complexType>
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;sequence>
* &lt;element name="Boat" maxOccurs="unbounded">
* &lt;complexType>
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;sequence>
* &lt;element name="GPSposition">
* &lt;complexType>
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;attribute name="X" type="{http://www.w3.org/2001/XMLSchema}double" />
* &lt;attribute name="Y" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
* &lt;attribute name="Z" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* &lt;/element>
* &lt;/sequence>
* &lt;attribute name="Type" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="BoatName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="SourceID" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
* &lt;attribute name="HullNum" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="ShortName" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="ShapeID" type="{http://www.w3.org/2001/XMLSchema}int" />
* &lt;attribute name="StoweName" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* &lt;/element>
* &lt;/sequence>
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"boat"
})
public static class Boats {
@XmlElement(name = "Boat", required = true)
protected List<BoatConfig.Boats.Boat> boat;
/**
* Gets the value of the boat property.
*
* <p>
* 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 <CODE>set</CODE> method for the boat property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getBoat().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link BoatConfig.Boats.Boat }
*
*
*/
public List<BoatConfig.Boats.Boat> getBoat() {
if (boat == null) {
boat = new ArrayList<BoatConfig.Boats.Boat>();
}
return this.boat;
}
/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* &lt;complexType>
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;sequence>
* &lt;element name="GPSposition">
* &lt;complexType>
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;attribute name="X" type="{http://www.w3.org/2001/XMLSchema}double" />
* &lt;attribute name="Y" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
* &lt;attribute name="Z" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* &lt;/element>
* &lt;/sequence>
* &lt;attribute name="Type" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="BoatName" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="SourceID" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
* &lt;attribute name="HullNum" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="ShortName" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;attribute name="ShapeID" type="{http://www.w3.org/2001/XMLSchema}int" />
* &lt;attribute name="StoweName" type="{http://www.w3.org/2001/XMLSchema}string" />
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* </pre>
*
*
*/
@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;
}
/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* &lt;complexType>
* &lt;complexContent>
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* &lt;attribute name="X" type="{http://www.w3.org/2001/XMLSchema}double" />
* &lt;attribute name="Y" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
* &lt;attribute name="Z" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
* &lt;/restriction>
* &lt;/complexContent>
* &lt;/complexType>
* </pre>
*
*
*/
@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;
}
}
}
}
}

@ -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);
}
}

@ -0,0 +1,71 @@
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// 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.
* <p>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();
}
}

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="BoatConfig">
<xs:complexType>
<xs:sequence>
<xs:element name="Boats">
<xs:complexType>
<xs:sequence>
<xs:element name="Boat" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="GPSposition" maxOccurs="1">
<xs:complexType>
<xs:attribute name="X" type="xs:double" use="required"/>
<xs:attribute name="Y" type="xs:double" use="required"/>
<xs:attribute name="Z" type="xs:double" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Type" type="xs:string" use="required"/>
<xs:attribute name="BoatName" type="xs:string" use="required"/>
<xs:attribute name="SourceID" type="xs:int" use="required"/>
<xs:attribute name="HullNum" type="xs:string"/>
<xs:attribute name="ShortName" type="xs:string"/>
<xs:attribute name="ShapeID" type="xs:int"/>
<xs:attribute name="StoweName" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Loading…
Cancel
Save