You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

214 lines
7.7 KiB

package seng302.Model;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import seng302.Data.RaceData;
import seng302.Mock.Regatta;
import seng302.Mock.RegattaDataSource;
import seng302.Model.Race;
import seng302.RaceDataSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.util.List;
/**
* Created by esa46 on 21/04/17.
*/
public class Event {
RaceDataSource raceDataSource;
RegattaDataSource regattaDataSource;
public Event(RaceDataSource raceData, RegattaDataSource regattaData) {
this.raceDataSource = raceData;
this.regattaDataSource = regattaData;
}
public void start() {
sendRegattaData();
sendRaceData();
sendBoatData();
Race newRace = new Race(raceDataSource, 15);
new Thread((newRace)).start();
}
public void sendRegattaData() {
try {
Regatta regatta = regattaDataSource.getRegatta();
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
//root element
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("RegattaConfig");
doc.appendChild(rootElement);
//regattaID element
Element regattaID = doc.createElement("RegattaID");
regattaID.appendChild(doc.createTextNode(Integer.toString(regatta.getRegattaID())));
rootElement.appendChild(regattaID);
//regattaName element
Element regattaName = doc.createElement("RegattaName");
regattaName.appendChild(doc.createTextNode(regatta.getRegattaName()));
rootElement.appendChild(regattaName);
//courseName element
Element courseName = doc.createElement("CourseName");
courseName.appendChild(doc.createTextNode(regatta.getCourseName()));
rootElement.appendChild(courseName);
//centralLatitude element
Element centralLat = doc.createElement("CentralLatitude");
centralLat.appendChild(doc.createTextNode(Double.toString(regatta.getCentralLatitude())));
rootElement.appendChild(centralLat);
//centralLongitude element
Element centralLong = doc.createElement("CentralLongitude");
centralLong.appendChild(doc.createTextNode(Double.toString(regatta.getCentralLongitude())));
rootElement.appendChild(centralLong);
//centralAltitude element
Element centralAlt = doc.createElement("CentralAltitude");
centralAlt.appendChild(doc.createTextNode(Double.toString(regatta.getCentralAltitude())));
rootElement.appendChild(centralAlt);
//utcOffset element
Element utcOffset = doc.createElement("UtcOffset");
utcOffset.appendChild(doc.createTextNode(Double.toString(regatta.getUtcOffset())));
rootElement.appendChild(utcOffset);
//magneticVariation element
Element magneticVariation = doc.createElement("MagneticVariation");
magneticVariation.appendChild(doc.createTextNode(Double.toString(regatta.getMagneticVariation())));
rootElement.appendChild(magneticVariation);
TransformerFactory trasformerFactory = TransformerFactory.newInstance();
Transformer transformer = trasformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
//print XML object to check for correctness
StreamResult result = new StreamResult(System.out);
transformer.transform(source,result);
} catch (Exception e){
e.printStackTrace();
}
}
public void sendRaceData() {
RaceData raceData = new RaceData(raceDataSource);
raceData.createXML();
}
public void sendBoatData() {
List<BoatInRace> boatData = raceDataSource.getBoats();
try {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
//root element
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("BoatConfig");
doc.appendChild(rootElement);
//Boats element
Element boats = doc.createElement("Boats");
rootElement.appendChild(boats);
for (int i=0; i < boatData.size(); i++) {
//Boat element
Element boat = doc.createElement("Boat");
//Type attribute
Attr attrType = doc.createAttribute("Type");
attrType.setValue("Mark");
boat.setAttributeNode(attrType);
//SourceID attribute
Attr attrSourceID = doc.createAttribute("SourceID");
attrSourceID.setValue(Integer.toString(boatData.get(i).getSourceID()));
boat.setAttributeNode(attrSourceID);
//ShapeID attribute
Attr attrShapeID = doc.createAttribute("ShapeID");
attrShapeID.setValue("0");
boat.setAttributeNode(attrShapeID);
//HullNum attribute
Attr attrHullNum = doc.createAttribute("HullNum");
attrHullNum.setValue("RG01");
boat.setAttributeNode(attrHullNum);
//StoweName attribute
Attr attrStoweName = doc.createAttribute("StoweName");
attrStoweName.setValue(boatData.get(i).getAbbrev());
boat.setAttributeNode(attrStoweName);
//ShortName attribute
Attr attrShortName = doc.createAttribute("ShortName");
attrShortName.setValue(boatData.get(i).getAbbrev());
boat.setAttributeNode(attrShortName);
//BoatName attribute
Attr attrBoatName = doc.createAttribute("BoatName");
attrBoatName.setValue(boatData.get(i).toString());
boat.setAttributeNode(attrBoatName);
//GPSCoord for element
Element GPSCoord = doc.createElement("GPSposition");
//Z axis attribute
Attr attrZCoord = doc.createAttribute("Z");
attrZCoord.setValue("0");
GPSCoord.setAttributeNode(attrZCoord);
//Y axis attribute
Attr attrYCoord = doc.createAttribute("Y");
attrYCoord.setValue(Double.toString(boatData.get(i).getCurrentPosition().getLatitude()));
GPSCoord.setAttributeNode(attrYCoord);
//X axis attribute
Attr attrXCoord = doc.createAttribute("X");
attrXCoord.setValue(Double.toString(boatData.get(i).getCurrentPosition().getLongitude()));
GPSCoord.setAttributeNode(attrXCoord);
//Write GPSCoord to boat
boat.appendChild(GPSCoord);
//Write boat to boats
boats.appendChild(boat);
}
TransformerFactory trasformerFactory = TransformerFactory.newInstance();
Transformer transformer = trasformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
//print XML object to check for correctness
StreamResult result = new StreamResult(System.out);
transformer.transform(source,result);
} catch (Exception e) {
e.printStackTrace();
}
}
}