Refactored RaceData class

#story[778]
main
Erika Savell 9 years ago
parent 03f63b2c61
commit 3542827c29

@ -30,18 +30,10 @@ public class RaceData {
Element raceElement; Element raceElement;
private OffsetDateTime creationTimeDate; private OffsetDateTime creationTimeDate;
private OffsetDateTime raceStartTime;
private List<BoatInRace> participants;
private List<Marker> course;
private List<GPSCoordinate> courseLimit;
public RaceData(RaceDataSource dataSource) { public RaceData(RaceDataSource dataSource) {
this.dataSource = dataSource; this.dataSource = dataSource;
creationTimeDate = OffsetDateTime.now(); creationTimeDate = OffsetDateTime.now();
raceStartTime = OffsetDateTime.now().plusMinutes(3);
participants = dataSource.getBoats();
course = dataSource.getMarkers();
courseLimit = dataSource.getBoundary();
} }
public String createXML() { public String createXML() {
@ -56,73 +48,124 @@ public class RaceData {
raceElement = doc.createElement("Race"); raceElement = doc.createElement("Race");
doc.appendChild(raceElement); doc.appendChild(raceElement);
appendChildElements();
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
//Serialize document.
StringWriter stringWriter = new StringWriter();
StreamResult result = new StreamResult(stringWriter);
transformer.transform(source, result);
return stringWriter.toString();
} catch (ParserConfigurationException pce) {
throw new InvalidRaceDataException();
} catch (TransformerException tfe) {
throw new InvalidRaceDataException();
}
}
private void appendChildElements() {
appendRaceId(); appendRaceId();
appendRaceType(); appendRaceType();
appendCreationTimeDate();
appendRaceStartTime();
appendParticipants();
appendCourse();
appendCourseLimit();
}
private void appendRaceId() {
Element raceIdElement = doc.createElement("RaceID");
raceIdElement.appendChild(doc.createTextNode(dataSource.getRaceId()));
raceElement.appendChild(raceIdElement);
}
private void appendRaceType() {
Element raceTypeElement = doc.createElement("RaceType");
raceTypeElement.appendChild(doc.createTextNode(dataSource.getRaceType()));
raceElement.appendChild(raceTypeElement);
}
private void appendCreationTimeDate() {
Element creationTimeElement = doc.createElement("CreationTimeDate"); Element creationTimeElement = doc.createElement("CreationTimeDate");
creationTimeElement.appendChild(doc.createTextNode(creationTimeDate.toString())); creationTimeElement.appendChild(doc.createTextNode(creationTimeDate.toString()));
raceElement.appendChild(creationTimeElement); raceElement.appendChild(creationTimeElement);
}
private void appendRaceStartTime() {
Element startTimeElement = doc.createElement("RaceStartTime"); Element startTimeElement = doc.createElement("RaceStartTime");
startTimeElement.setAttribute("Time", raceStartTime.toString()); startTimeElement.setAttribute("Time", (creationTimeDate.plusMinutes(3)).toString());
startTimeElement.setAttribute("Postpone", "false"); startTimeElement.setAttribute("Postpone", "false");
raceElement.appendChild(startTimeElement); raceElement.appendChild(startTimeElement);
}
private void appendParticipants() {
Element participantsElement = doc.createElement("Participants"); Element participantsElement = doc.createElement("Participants");
for (BoatInRace boat : participants) { for (BoatInRace boat : dataSource.getBoats()) {
Element yachtElement = doc.createElement("Yacht"); Element yachtElement = doc.createElement("Yacht");
yachtElement.setAttribute("SourceID", boat.getSourceID() + ""); yachtElement.setAttribute("SourceID", boat.getSourceID() + "");
participantsElement.appendChild(yachtElement); participantsElement.appendChild(yachtElement);
} }
raceElement.appendChild(participantsElement); raceElement.appendChild(participantsElement);
}
private void appendCourse() {
Element courseElement = doc.createElement("Course"); Element courseElement = doc.createElement("Course");
Element compoundMarkSeqElement = doc.createElement("CompoundMarkSequence"); Element compoundMarkSeqElement = doc.createElement("CompoundMarkSequence");
int i = 1; int i = 1;
for (Marker marker : course) { for (Marker marker : dataSource.getMarkers()) {
courseElement.appendChild(createCompoundMarker(marker, i));
compoundMarkSeqElement.appendChild(createCornerElement(i));
i++;
}
raceElement.appendChild(compoundMarkSeqElement);
raceElement.appendChild(courseElement);
}
private Element createMark(GPSCoordinate marker) {
Element mark = doc.createElement("Mark");
mark.setAttribute("TargetLat", marker.getLatitude() + "");
mark.setAttribute("TargetLng", marker.getLongitude() + "");
return mark;
}
private Element createCompoundMarker(Marker marker, int i) {
Element compoundMarkElement = doc.createElement("CompoundMark"); Element compoundMarkElement = doc.createElement("CompoundMark");
compoundMarkElement.setAttribute("CompoundMarkId", i + ""); compoundMarkElement.setAttribute("CompoundMarkId", i + "");
compoundMarkElement.setAttribute("Name", marker.getName()); compoundMarkElement.setAttribute("Name", marker.getName());
Element mark1 = doc.createElement("Mark"); compoundMarkElement.appendChild(createMark(marker.getMark1()));
mark1.setAttribute("TargetLat", marker.getMark1().getLatitude() + "");
mark1.setAttribute("TargetLng", marker.getMark1().getLongitude() + "");
compoundMarkElement.appendChild(mark1);
if (!(marker.getMark1().equals(marker.getMark2()))) { if (!(marker.getMark1().equals(marker.getMark2()))) {
Element mark2 = doc.createElement("Mark"); compoundMarkElement.appendChild(createMark(marker.getMark2()));
mark2.setAttribute("TargetLat", marker.getMark2().getLatitude() + "");
mark2.setAttribute("TargetLng", marker.getMark2().getLongitude() + "");
compoundMarkElement.appendChild(mark2);
} }
courseElement.appendChild(compoundMarkElement); return compoundMarkElement;
}
private Element createCornerElement(int i) {
Element cornerElement = doc.createElement("Corner"); Element cornerElement = doc.createElement("Corner");
cornerElement.setAttribute("SeqID", i + ""); cornerElement.setAttribute("SeqID", i + "");
cornerElement.setAttribute("CompoundMarkID", i + ""); cornerElement.setAttribute("CompoundMarkID", i + "");
compoundMarkSeqElement.appendChild(cornerElement); return cornerElement;
i++;
} }
raceElement.appendChild(compoundMarkSeqElement); private void appendCourseLimit() {
raceElement.appendChild(courseElement);
int j = 1; int j = 1;
Element courseLimitElement = doc.createElement("CourseLimit"); Element courseLimitElement = doc.createElement("CourseLimit");
for (GPSCoordinate coordinate : courseLimit) { for (GPSCoordinate coordinate : dataSource.getBoundary()) {
Element limitElement = doc.createElement("Limit"); Element limitElement = doc.createElement("Limit");
limitElement.setAttribute("SeqID", j + ""); limitElement.setAttribute("SeqID", j + "");
@ -135,40 +178,7 @@ public class RaceData {
} }
raceElement.appendChild(courseLimitElement); raceElement.appendChild(courseLimitElement);
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
//Serialize document.
StringWriter stringWriter = new StringWriter();
StreamResult result = new StreamResult(stringWriter);
transformer.transform(source,result);
return stringWriter.toString();
} catch (ParserConfigurationException pce) {
throw new InvalidRaceDataException();
} catch (TransformerException tfe) {
throw new InvalidRaceDataException();
} }
}
private void appendRaceId() {
Element raceIdElement = doc.createElement("RaceID");
raceIdElement.appendChild(doc.createTextNode(dataSource.getRaceId()));
raceElement.appendChild(raceIdElement);
}
private void appendRaceType() {
Element raceTypeElement = doc.createElement("RaceType");
raceTypeElement.appendChild(doc.createTextNode(dataSource.getRaceType()));
raceElement.appendChild(raceTypeElement);
}
} }

@ -81,6 +81,4 @@ public class RaceDataTest {
} }
} }

Loading…
Cancel
Save