Story 77 task 7 - update xml files at runtime Task: [S] Adjust race XML so that you can modify the number of boats in a race. When clients connect they are added to the participant list, and an updated race.xml is sent out. When they disconnect/timeout, they are unassigned a boat and updated race.xml is sent out. Also contains code for sending updated boats.xml and regatta.xml. See merge request !34main
commit
e8977eb0c4
@ -1,318 +0,0 @@
|
||||
package shared.model;
|
||||
|
||||
import javafx.beans.property.IntegerProperty;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.beans.property.SimpleIntegerProperty;
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
import mock.model.collider.ColliderRegistry;
|
||||
import network.Messages.Enums.RaceStatusEnum;
|
||||
import network.Messages.Enums.RaceTypeEnum;
|
||||
import shared.dataInput.BoatDataSource;
|
||||
import shared.dataInput.RaceDataSource;
|
||||
import shared.dataInput.RegattaDataSource;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* Represents a yacht race.
|
||||
* Has a course, state, wind, boundaries, etc.... Boats are added by inheriting classes (see {@link Boat}, {@link mock.model.MockBoat}, {@link visualiser.model.VisualiserBoat}.
|
||||
*/
|
||||
public abstract class Race {
|
||||
/**
|
||||
* The source of race related data.
|
||||
*/
|
||||
protected RaceDataSource raceDataSource;
|
||||
/**
|
||||
* The source of boat related data.
|
||||
*/
|
||||
protected BoatDataSource boatDataSource;
|
||||
/**
|
||||
* The source of regatta related data.
|
||||
*/
|
||||
protected RegattaDataSource regattaDataSource;
|
||||
/**
|
||||
* A list of compound marks in the race.
|
||||
*/
|
||||
protected List<CompoundMark> compoundMarks;
|
||||
/**
|
||||
* A list of legs in the race.
|
||||
*/
|
||||
protected List<Leg> legs;
|
||||
/**
|
||||
* A list of coordinates describing the boundary of the course.
|
||||
*/
|
||||
protected List<GPSCoordinate> boundary;
|
||||
/**
|
||||
* The clock which tracks the race's start time, current time, and elapsed duration.
|
||||
*/
|
||||
protected RaceClock raceClock;
|
||||
/**
|
||||
* The race ID of the course.
|
||||
*/
|
||||
protected int raceId;
|
||||
/**
|
||||
* The name of the regatta.
|
||||
*/
|
||||
protected String regattaName;
|
||||
/**
|
||||
* The current status of the race.
|
||||
*/
|
||||
protected RaceStatusEnum raceStatusEnum;
|
||||
/**
|
||||
* The type of race this is.
|
||||
*/
|
||||
protected RaceTypeEnum raceType;
|
||||
/**
|
||||
* The race's wind.
|
||||
*/
|
||||
protected Property<Wind> raceWind = new SimpleObjectProperty<>();
|
||||
/**
|
||||
* Registry for all collider object in this race
|
||||
*/
|
||||
protected ColliderRegistry colliderRegistry;
|
||||
/**
|
||||
* The number of frames per second.
|
||||
* We essentially track the number of frames generated per second, over a one second period. When {@link #lastFpsResetTime} reaches 1 second, currentFps is reset.
|
||||
*/
|
||||
private int currentFps = 0;
|
||||
/**
|
||||
* The number of frames per second we generated over the last 1 second period.
|
||||
*/
|
||||
private IntegerProperty lastFps = new SimpleIntegerProperty(0);
|
||||
/**
|
||||
* The time, in milliseconds, since we last reset our {@link #currentFps} counter.
|
||||
*/
|
||||
private long lastFpsResetTime;
|
||||
|
||||
/**
|
||||
* Constructs a race object with a given BoatDataSource, RaceDataSource, and RegattaDataSource.
|
||||
* @param boatDataSource Data source for boat related data (yachts and marker boats).
|
||||
* @param raceDataSource Data source for race related data (participating boats, legs, etc...).
|
||||
* @param regattaDataSource Data source for race related data (course name, location, timezone, etc...).
|
||||
*/
|
||||
public Race(BoatDataSource boatDataSource, RaceDataSource raceDataSource, RegattaDataSource regattaDataSource) {
|
||||
|
||||
//Keep a reference to data sources.
|
||||
this.raceDataSource = raceDataSource;
|
||||
this.boatDataSource = boatDataSource;
|
||||
this.regattaDataSource = regattaDataSource;
|
||||
|
||||
//Marks.
|
||||
this.compoundMarks = raceDataSource.getCompoundMarks();
|
||||
//Boundaries.
|
||||
this.boundary = raceDataSource.getBoundary();
|
||||
//Legs.
|
||||
this.useLegsList(raceDataSource.getLegs());
|
||||
//Race ID.
|
||||
this.raceId = raceDataSource.getRaceId();
|
||||
//Regatta name.
|
||||
this.regattaName = regattaDataSource.getRegattaName();
|
||||
//Race clock.
|
||||
this.raceClock = new RaceClock(this.raceDataSource.getStartDateTime());
|
||||
//Race status.
|
||||
this.setRaceStatusEnum(RaceStatusEnum.NOT_ACTIVE);
|
||||
//Race type.
|
||||
this.raceType = raceDataSource.getRaceType();
|
||||
//Wind.
|
||||
this.setWind(Bearing.fromDegrees(0), 0);
|
||||
// Set up colliders
|
||||
this.colliderRegistry = new ColliderRegistry();
|
||||
|
||||
for(CompoundMark mark: compoundMarks) {
|
||||
colliderRegistry.addCollider(mark.getMark1());
|
||||
if(mark.getMark2() != null) colliderRegistry.addCollider(mark.getMark2());
|
||||
}
|
||||
}
|
||||
|
||||
public ColliderRegistry getColliderRegistry() {
|
||||
return colliderRegistry;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise the boats in the race.
|
||||
* This sets their starting positions and current legs.
|
||||
*/
|
||||
protected abstract void initialiseBoats();
|
||||
|
||||
/**
|
||||
* Updates the race to use a new list of legs, and adds a dummy "Finish" leg at the end.
|
||||
* @param legs The new list of legs to use.
|
||||
*/
|
||||
protected void useLegsList(List<Leg> legs) {
|
||||
//We add a "dummy" leg at the end of the race.
|
||||
this.legs = legs;
|
||||
this.legs.add(new Leg("Finish", this.legs.size()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether or not a specific leg is the last leg in the race.
|
||||
* @param leg The leg to check.
|
||||
* @return Returns true if it is the last, false otherwise.
|
||||
*/
|
||||
protected boolean isLastLeg(Leg leg) {
|
||||
|
||||
//Get the last leg.
|
||||
Leg lastLeg = this.legs.get(this.legs.size() - 1);
|
||||
|
||||
//Check its ID.
|
||||
int lastLegID = lastLeg.getLegNumber();
|
||||
|
||||
//Get the specified leg's ID.
|
||||
int legID = leg.getLegNumber();
|
||||
|
||||
|
||||
//Check if they are the same.
|
||||
return legID == lastLegID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current race status.
|
||||
* @return The current race status.
|
||||
*/
|
||||
public RaceStatusEnum getRaceStatusEnum() {
|
||||
return raceStatusEnum;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current race status.
|
||||
* @param raceStatusEnum The new status of the race.
|
||||
*/
|
||||
public void setRaceStatusEnum(RaceStatusEnum raceStatusEnum) {
|
||||
this.raceStatusEnum = raceStatusEnum;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the type of race this is.
|
||||
* @return The type of race this is.
|
||||
*/
|
||||
public RaceTypeEnum getRaceType() {
|
||||
return raceType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the regatta.
|
||||
* @return The name of the regatta.
|
||||
*/
|
||||
public String getRegattaName() {
|
||||
return regattaName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the race to have a specified wind bearing and speed.
|
||||
* @param windBearing New wind bearing.
|
||||
* @param windSpeedKnots New wind speed, in knots.
|
||||
*/
|
||||
protected void setWind(Bearing windBearing, double windSpeedKnots) {
|
||||
Wind wind = new Wind(windBearing, windSpeedKnots);
|
||||
setWind(wind);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the race to have a specified wind (bearing and speed).
|
||||
* @param wind New wind.
|
||||
*/
|
||||
protected void setWind(Wind wind) {
|
||||
this.raceWind.setValue(wind);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the wind bearing.
|
||||
* @return The wind bearing.
|
||||
*/
|
||||
public Bearing getWindDirection() {
|
||||
return raceWind.getValue().getWindDirection();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the wind speed.
|
||||
* Measured in knots.
|
||||
* @return The wind speed.
|
||||
*/
|
||||
public double getWindSpeed() {
|
||||
return raceWind.getValue().getWindSpeed();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the RaceClock for this race.
|
||||
* This is used to track the start time, current time, and elapsed duration of the race.
|
||||
* @return The RaceClock for the race.
|
||||
*/
|
||||
public RaceClock getRaceClock() {
|
||||
return raceClock;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the RaceDataSource used for the race.
|
||||
* @return The RaceDataSource used for the race.
|
||||
*/
|
||||
public RaceDataSource getRaceDataSource() {
|
||||
return raceDataSource;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of legs in the race.
|
||||
* @return The number of legs in the race.
|
||||
*/
|
||||
public int getLegCount() {
|
||||
//We minus one, as we have added an extra "dummy" leg.
|
||||
return legs.size() - 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the race boundary.
|
||||
* @return The race boundary.
|
||||
*/
|
||||
public List<GPSCoordinate> getBoundary() {
|
||||
return boundary;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the marks of the race.
|
||||
* @return Marks of the race.
|
||||
*/
|
||||
public List<CompoundMark> getCompoundMarks() {
|
||||
return compoundMarks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the legs of the race.
|
||||
* @return Legs of the race.
|
||||
*/
|
||||
public List<Leg> getLegs() {
|
||||
return legs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the fps property.
|
||||
* @return The fps property.
|
||||
*/
|
||||
public IntegerProperty fpsProperty() {
|
||||
return lastFps;
|
||||
}
|
||||
|
||||
/**
|
||||
* Increments the FPS counter, and adds timePeriod milliseconds to our FPS reset timer.
|
||||
* @param timePeriod Time, in milliseconds, to add to {@link #lastFpsResetTime}.
|
||||
*/
|
||||
protected void incrementFps(long timePeriod) {
|
||||
//Increment.
|
||||
this.currentFps++;
|
||||
|
||||
//Add period to timer.
|
||||
this.lastFpsResetTime += timePeriod;
|
||||
|
||||
//If we have reached 1 second period, snapshot the framerate and reset.
|
||||
if (this.lastFpsResetTime > 1000) {
|
||||
this.lastFps.set(this.currentFps);
|
||||
|
||||
this.currentFps = 0;
|
||||
this.lastFpsResetTime = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public int getRaceId() {
|
||||
return raceId;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,131 @@
|
||||
package shared.xml.Race;
|
||||
|
||||
import shared.dataInput.RaceDataSource;
|
||||
import shared.enums.RoundingType;
|
||||
import shared.model.CompoundMark;
|
||||
import shared.model.Corner;
|
||||
import shared.model.GPSCoordinate;
|
||||
import shared.model.Leg;
|
||||
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.RaceDataSource} to an {@link XMLRace} object.
|
||||
*/
|
||||
public class RaceDataSourceToXML {
|
||||
|
||||
|
||||
/**
|
||||
* Converts a race data source to an XMLRace object.
|
||||
* @param raceDataSource The data source to convert.
|
||||
* @return The XMLRace file.
|
||||
*/
|
||||
public static XMLRace toXML(RaceDataSource raceDataSource) {
|
||||
|
||||
//Kind of ugly. Could be refactored/split up a bit.
|
||||
|
||||
|
||||
XMLRace race = new XMLRace();
|
||||
|
||||
|
||||
race.setRaceID(raceDataSource.getRaceId());
|
||||
race.setRaceType(raceDataSource.getRaceType().toString());
|
||||
|
||||
|
||||
race.setCreationTimeDate(raceDataSource.getCreationDateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ")));
|
||||
|
||||
|
||||
XMLRaceStartTime startTime = new XMLRaceStartTime();
|
||||
startTime.setPostpone(String.valueOf(raceDataSource.getPostponed()));
|
||||
startTime.setTime(raceDataSource.getStartDateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ")));
|
||||
race.setRaceStartTime(startTime);
|
||||
|
||||
|
||||
XMLParticipants participants = new XMLParticipants();
|
||||
participants.yacht = new ArrayList<>();
|
||||
for (int i : raceDataSource.getParticipants()) {
|
||||
XMLYacht yacht = new XMLYacht();
|
||||
yacht.setSourceID(i);
|
||||
participants.yacht.add(yacht);
|
||||
}
|
||||
race.setParticipants(participants);
|
||||
|
||||
|
||||
XMLCourseLimit courseLimit = new XMLCourseLimit();
|
||||
courseLimit.limit = new ArrayList<>();
|
||||
for (int i = 0; i < raceDataSource.getBoundary().size(); i++) {
|
||||
XMLLimit limit = new XMLLimit();
|
||||
limit.setLat(raceDataSource.getBoundary().get(i).getLatitude());
|
||||
limit.setLon(raceDataSource.getBoundary().get(i).getLongitude());
|
||||
limit.setSeqID(i + 1);
|
||||
courseLimit.limit.add(limit);
|
||||
}
|
||||
race.setCourseLimit(courseLimit);
|
||||
|
||||
|
||||
XMLCourse course = new XMLCourse();
|
||||
course.compoundMark = new ArrayList<>();
|
||||
for (CompoundMark compoundMark : raceDataSource.getCompoundMarks()) {
|
||||
XMLCompoundMark xmlCompoundMark = new XMLCompoundMark();
|
||||
xmlCompoundMark.setCompoundMarkID(compoundMark.getCompoundMarkID());
|
||||
xmlCompoundMark.setName(compoundMark.getName());
|
||||
|
||||
if (compoundMark.getMark1() != null) {
|
||||
XMLMark xmlMark = new XMLMark();
|
||||
xmlMark.setName(compoundMark.getMark1().getName());
|
||||
xmlMark.setSourceID(compoundMark.getMark1().getSourceID());
|
||||
xmlMark.setSeqId(1);
|
||||
xmlMark.setTargetLat(compoundMark.getMark1().getPosition().getLatitude());
|
||||
xmlMark.setTargetLng(compoundMark.getMark1().getPosition().getLongitude());
|
||||
|
||||
xmlCompoundMark.getMark().add(xmlMark);
|
||||
}
|
||||
if (compoundMark.getMark2() != null) {
|
||||
XMLMark xmlMark = new XMLMark();
|
||||
xmlMark.setName(compoundMark.getMark2().getName());
|
||||
xmlMark.setSourceID(compoundMark.getMark2().getSourceID());
|
||||
xmlMark.setSeqId(2);
|
||||
xmlMark.setTargetLat(compoundMark.getMark2().getPosition().getLatitude());
|
||||
xmlMark.setTargetLng(compoundMark.getMark2().getPosition().getLongitude());
|
||||
|
||||
xmlCompoundMark.getMark().add(xmlMark);
|
||||
}
|
||||
|
||||
course.compoundMark.add(xmlCompoundMark);
|
||||
}
|
||||
race.setCourse(course);
|
||||
|
||||
XMLCompoundMarkSequence compoundMarkSequence = new XMLCompoundMarkSequence();
|
||||
compoundMarkSequence.corner = new ArrayList<>();
|
||||
for (Corner corner : raceDataSource.getCorners()) {
|
||||
XMLCorner xmlCorner = new XMLCorner();
|
||||
xmlCorner.setZoneSize(corner.getZoneSize());
|
||||
xmlCorner.setSeqID(corner.getSeqID());
|
||||
xmlCorner.setCompoundMarkID(corner.getCompoundMarkID());
|
||||
xmlCorner.setRounding(corner.getRounding());
|
||||
|
||||
compoundMarkSequence.corner.add(xmlCorner);
|
||||
}
|
||||
race.setCompoundMarkSequence(compoundMarkSequence);
|
||||
|
||||
|
||||
return race;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Converts a race data source to an xml string.
|
||||
* @param raceDataSource Data source to convert.
|
||||
* @return String containing xml file.
|
||||
* @throws JAXBException Thrown if it cannot be converted.
|
||||
*/
|
||||
public static String toString(RaceDataSource raceDataSource) throws JAXBException {
|
||||
XMLRace race = toXML(raceDataSource);
|
||||
return XMLUtilities.classToXML(race);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -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>
|
||||
* <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>
|
||||
* </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>
|
||||
* <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>
|
||||
* </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>
|
||||
* <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>
|
||||
* </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>
|
||||
* <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>
|
||||
* </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,47 @@
|
||||
//
|
||||
// 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 10:37:23 PM NZST
|
||||
//
|
||||
|
||||
|
||||
package shared.xml.regatta;
|
||||
|
||||
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 RegattaConfig }
|
||||
*
|
||||
*/
|
||||
public RegattaConfig createRegattaConfig() {
|
||||
return new RegattaConfig();
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,219 @@
|
||||
//
|
||||
// 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 10:37:23 PM NZST
|
||||
//
|
||||
|
||||
|
||||
package shared.xml.regatta;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
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>
|
||||
* <complexType>
|
||||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <element name="RegattaID" type="{http://www.w3.org/2001/XMLSchema}int"/>
|
||||
* <element name="RegattaName" type="{http://www.w3.org/2001/XMLSchema}string"/>
|
||||
* <element name="CourseName" type="{http://www.w3.org/2001/XMLSchema}string"/>
|
||||
* <element name="CentralLatitude" type="{http://www.w3.org/2001/XMLSchema}double"/>
|
||||
* <element name="CentralLongitude" type="{http://www.w3.org/2001/XMLSchema}double"/>
|
||||
* <element name="CentralAltitude" type="{http://www.w3.org/2001/XMLSchema}double"/>
|
||||
* <element name="UtcOffset" type="{http://www.w3.org/2001/XMLSchema}double"/>
|
||||
* <element name="MagneticVariation" type="{http://www.w3.org/2001/XMLSchema}double"/>
|
||||
* </sequence>
|
||||
* </restriction>
|
||||
* </complexContent>
|
||||
* </complexType>
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlType(name = "", propOrder = {
|
||||
"regattaID",
|
||||
"regattaName",
|
||||
"courseName",
|
||||
"centralLatitude",
|
||||
"centralLongitude",
|
||||
"centralAltitude",
|
||||
"utcOffset",
|
||||
"magneticVariation"
|
||||
})
|
||||
@XmlRootElement(name = "RegattaConfig")
|
||||
public class RegattaConfig {
|
||||
|
||||
@XmlElement(name = "RegattaID")
|
||||
protected int regattaID;
|
||||
@XmlElement(name = "RegattaName", required = true)
|
||||
protected String regattaName;
|
||||
@XmlElement(name = "CourseName", required = true)
|
||||
protected String courseName;
|
||||
@XmlElement(name = "CentralLatitude")
|
||||
protected double centralLatitude;
|
||||
@XmlElement(name = "CentralLongitude")
|
||||
protected double centralLongitude;
|
||||
@XmlElement(name = "CentralAltitude")
|
||||
protected double centralAltitude;
|
||||
@XmlElement(name = "UtcOffset")
|
||||
protected double utcOffset;
|
||||
@XmlElement(name = "MagneticVariation")
|
||||
protected double magneticVariation;
|
||||
|
||||
/**
|
||||
* Gets the value of the regattaID property.
|
||||
*
|
||||
*/
|
||||
public int getRegattaID() {
|
||||
return regattaID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the regattaID property.
|
||||
*
|
||||
*/
|
||||
public void setRegattaID(int value) {
|
||||
this.regattaID = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the regattaName property.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
public String getRegattaName() {
|
||||
return regattaName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the regattaName property.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
public void setRegattaName(String value) {
|
||||
this.regattaName = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the courseName property.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
public String getCourseName() {
|
||||
return courseName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the courseName property.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
public void setCourseName(String value) {
|
||||
this.courseName = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the centralLatitude property.
|
||||
*
|
||||
*/
|
||||
public double getCentralLatitude() {
|
||||
return centralLatitude;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the centralLatitude property.
|
||||
*
|
||||
*/
|
||||
public void setCentralLatitude(double value) {
|
||||
this.centralLatitude = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the centralLongitude property.
|
||||
*
|
||||
*/
|
||||
public double getCentralLongitude() {
|
||||
return centralLongitude;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the centralLongitude property.
|
||||
*
|
||||
*/
|
||||
public void setCentralLongitude(double value) {
|
||||
this.centralLongitude = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the centralAltitude property.
|
||||
*
|
||||
*/
|
||||
public double getCentralAltitude() {
|
||||
return centralAltitude;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the centralAltitude property.
|
||||
*
|
||||
*/
|
||||
public void setCentralAltitude(double value) {
|
||||
this.centralAltitude = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the utcOffset property.
|
||||
*
|
||||
*/
|
||||
public double getUtcOffset() {
|
||||
return utcOffset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the utcOffset property.
|
||||
*
|
||||
*/
|
||||
public void setUtcOffset(double value) {
|
||||
this.utcOffset = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the magneticVariation property.
|
||||
*
|
||||
*/
|
||||
public double getMagneticVariation() {
|
||||
return magneticVariation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the magneticVariation property.
|
||||
*
|
||||
*/
|
||||
public void setMagneticVariation(double value) {
|
||||
this.magneticVariation = value;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,54 @@
|
||||
package shared.xml.regatta;
|
||||
|
||||
import shared.dataInput.RegattaDataSource;
|
||||
import shared.xml.Race.XMLRace;
|
||||
import shared.xml.XMLUtilities;
|
||||
|
||||
import javax.xml.bind.JAXBException;
|
||||
|
||||
/**
|
||||
* Has functions to convert a {@link shared.dataInput.RegattaDataSource} to an {@link RegattaConfig} object.
|
||||
*/
|
||||
public class RegattaDataSourceToXML {
|
||||
|
||||
|
||||
/**
|
||||
* Converts a regatta data source to an XMLRace object.
|
||||
* @param regattaDataSource The data source to convert.
|
||||
* @return The XMLRace file.
|
||||
*/
|
||||
public static RegattaConfig toXML(RegattaDataSource regattaDataSource) {
|
||||
|
||||
RegattaConfig regatta = new RegattaConfig();
|
||||
|
||||
regatta.setCentralAltitude(regattaDataSource.getCentralAltitude());
|
||||
regatta.setCentralLatitude(regattaDataSource.getCentralLatitude());
|
||||
regatta.setCentralLongitude(regattaDataSource.getCentralLongitude());
|
||||
|
||||
regatta.setCourseName(regattaDataSource.getCourseName());
|
||||
|
||||
regatta.setRegattaName(regattaDataSource.getRegattaName());
|
||||
|
||||
regatta.setMagneticVariation(regattaDataSource.getMagneticVariation());
|
||||
|
||||
regatta.setRegattaID(regattaDataSource.getRegattaID());
|
||||
|
||||
regatta.setUtcOffset(regattaDataSource.getUtcOffset());
|
||||
|
||||
return regatta;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Converts a regatta data source to an xml string.
|
||||
* @param regattaDataSource Data source to convert.
|
||||
* @return String containing xml file.
|
||||
* @throws JAXBException Thrown if it cannot be converted.
|
||||
*/
|
||||
public static String toString(RegattaDataSource regattaDataSource) throws JAXBException {
|
||||
RegattaConfig regatta = toXML(regattaDataSource);
|
||||
return XMLUtilities.classToXML(regatta);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -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>
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:element name="RegattaConfig">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element type="xs:int" name="RegattaID" minOccurs="1"/>
|
||||
<xs:element type="xs:string" name="RegattaName" minOccurs="1"/>
|
||||
<xs:element type="xs:string" name="CourseName" minOccurs="1"/>
|
||||
<xs:element name="CentralLatitude" type="xs:double" minOccurs="1"/>
|
||||
<xs:element name="CentralLongitude" type="xs:double" minOccurs="1"/>
|
||||
<xs:element name="CentralAltitude" type="xs:double" minOccurs="1"/>
|
||||
<xs:element type="xs:double" name="UtcOffset" minOccurs="1"/>
|
||||
<xs:element name="MagneticVariation" type="xs:double" minOccurs="1"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
Loading…
Reference in new issue