Created Schema for Race xml's and generated classes for reading xml with xjc, made the RaceXMLReader read Corner classes in as well as making a corner class #story[1092]
This commit is contained in:
@@ -3,6 +3,8 @@ package mock.app;
|
||||
import mock.dataInput.PolarParser;
|
||||
import mock.model.MockRace;
|
||||
import mock.model.Polars;
|
||||
import mock.xml.Race;
|
||||
import mock.xml.RaceFactory;
|
||||
import network.Messages.LatestMessages;
|
||||
import shared.dataInput.*;
|
||||
import shared.enums.XMLFileType;
|
||||
@@ -10,10 +12,15 @@ import shared.exceptions.InvalidBoatDataException;
|
||||
import shared.exceptions.InvalidRaceDataException;
|
||||
import shared.exceptions.InvalidRegattaDataException;
|
||||
import shared.exceptions.XMLReaderException;
|
||||
import shared.model.CompoundMark;
|
||||
import shared.model.Constants;
|
||||
import shared.model.Corner;
|
||||
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Marshaller;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import java.io.IOException;
|
||||
import java.io.*;
|
||||
import java.net.UnknownHostException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.ZonedDateTime;
|
||||
@@ -42,7 +49,7 @@ public class Event {
|
||||
*/
|
||||
private Event() {
|
||||
try {
|
||||
this.raceXML = getRaceXMLAtCurrentTime(XMLReader.readXMLFileToString("mock/mockXML/raceTest.xml", StandardCharsets.UTF_8));
|
||||
this.raceXML = getRaceXMLAtCurrentTime(alterRaceToWind("mock/mockXML/raceSchemaTest.xml", 0));
|
||||
this.boatXML = XMLReader.readXMLFileToString("mock/mockXML/boatsSinglePlayer.xml", StandardCharsets.UTF_8);
|
||||
this.regattaXML = XMLReader.readXMLFileToString("mock/mockXML/regattaTest.xml", StandardCharsets.UTF_8);
|
||||
this.xmlFileType = XMLFileType.Contents;
|
||||
@@ -58,6 +65,10 @@ public class Event {
|
||||
e.printStackTrace();
|
||||
} catch (TransformerException e) {
|
||||
e.printStackTrace();
|
||||
} catch (InvalidRaceDataException e) {
|
||||
e.printStackTrace();
|
||||
} catch (JAXBException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,4 +141,94 @@ public class Event {
|
||||
return raceXML;
|
||||
|
||||
}
|
||||
|
||||
|
||||
private Race copyRace(RaceXMLReader reader) throws InvalidRaceDataException, XMLReaderException {
|
||||
mock.xml.RaceFactory raceFactory = new RaceFactory();
|
||||
mock.xml.Race race = raceFactory.createRace();
|
||||
race.setRaceID(String.valueOf(reader.getRaceId()));
|
||||
race.setRaceType(String.valueOf(reader.getRaceType()));
|
||||
race.setCreationTimeDate("CREATION_TIME");//this needs to be changed later
|
||||
|
||||
//Race Start Time
|
||||
mock.xml.Race.RaceStartTime raceStartTime = raceFactory.createRaceRaceStartTime();
|
||||
raceStartTime.setPostpone("false");
|
||||
raceStartTime.setTime("START_TIME");//this needs to be changed later
|
||||
race.setRaceStartTime(raceStartTime);
|
||||
|
||||
//Participants
|
||||
Race.Participants participants = raceFactory.createRaceParticipants();
|
||||
for (int i :reader.getParticipants()) {
|
||||
Race.Participants.Yacht yacht = raceFactory.createRaceParticipantsYacht();
|
||||
yacht.setSourceID(String.valueOf(i));
|
||||
participants.getYacht().add(yacht); //java schema does not clone the array so this is "safe".
|
||||
}
|
||||
race.setParticipants(participants);
|
||||
|
||||
//compound marks sequence
|
||||
Race.CompoundMarkSequence cms = raceFactory.createRaceCompoundMarkSequence();
|
||||
for (Corner mark: reader.getCornersList()){
|
||||
Race.CompoundMarkSequence.Corner corner = raceFactory.createRaceCompoundMarkSequenceCorner();
|
||||
corner.setCompoundMarkID(String.valueOf(mark.getId()));
|
||||
corner.setSeqID(String.valueOf(mark.getSeqID()));
|
||||
cms.getCorner().add(corner);
|
||||
}
|
||||
race.setCompoundMarkSequence(cms);
|
||||
|
||||
//Course
|
||||
Race.Course course = raceFactory.createRaceCourse();
|
||||
for (CompoundMark mark: reader.getCompoundMarks()){
|
||||
Race.Course.CompoundMark cm = raceFactory.createRaceCourseCompoundMark();
|
||||
cm.setName(mark.getName());
|
||||
cm.setCompoundMarkID(String.valueOf(mark.getId()));
|
||||
if (mark.getMark1() != null){
|
||||
Race.Course.CompoundMark.Mark m1 = raceFactory.createRaceCourseCompoundMarkMark();
|
||||
m1.setName(mark.getMark1().getName());
|
||||
m1.setTargetLat(String.valueOf(mark.getMark1().getPosition().getLatitude()));
|
||||
m1.setTargetLng(String.valueOf(mark.getMark1().getPosition().getLongitude()));
|
||||
m1.setSourceID(String.valueOf(mark.getMark1().getSourceID()));
|
||||
cm.getMark().add(m1);
|
||||
}
|
||||
//make this not copy paste later but just need the concept working right now
|
||||
if (mark.getMark2() != null){
|
||||
Race.Course.CompoundMark.Mark m2 = raceFactory.createRaceCourseCompoundMarkMark();
|
||||
m2.setName(mark.getMark1().getName());
|
||||
m2.setTargetLat(String.valueOf(mark.getMark1().getPosition().getLatitude()));
|
||||
m2.setTargetLng(String.valueOf(mark.getMark1().getPosition().getLongitude()));
|
||||
m2.setSourceID(String.valueOf(mark.getMark1().getSourceID()));
|
||||
cm.getMark().add(m2);
|
||||
}
|
||||
course.getCompoundMark().add(cm);
|
||||
}
|
||||
race.setCourse(course);
|
||||
|
||||
//Course Limit
|
||||
Race.CourseLimit courseLimit = raceFactory.createRaceCourseLimit();
|
||||
for (int i = 0; i < reader.getBoundary().size(); i++){
|
||||
Race.CourseLimit.Limit limit = raceFactory.createRaceCourseLimitLimit();
|
||||
limit.setSeqID(String.valueOf(i+1));
|
||||
limit.setLat(String.valueOf(reader.getBoundary().get(i).getLatitude()));
|
||||
limit.setLon(String.valueOf(reader.getBoundary().get(i).getLongitude()));
|
||||
courseLimit.getLimit().add(limit);
|
||||
}
|
||||
race.setCourseLimit(courseLimit);
|
||||
|
||||
return race;
|
||||
}
|
||||
|
||||
private String alterRaceToWind(String s, double degrees) throws XMLReaderException, InvalidRaceDataException, JAXBException {
|
||||
RaceXMLReader reader = new RaceXMLReader(s, XMLFileType.ResourcePath);
|
||||
|
||||
mock.xml.Race race = copyRace(reader);
|
||||
|
||||
JAXBContext context = JAXBContext.newInstance(mock.xml.Race.class);
|
||||
Marshaller jaxbMarshaller = context.createMarshaller();
|
||||
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
|
||||
|
||||
StringWriter sw = new StringWriter();
|
||||
|
||||
jaxbMarshaller.marshal(race, sw);
|
||||
return sw.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user