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.

107 lines
4.0 KiB

package seng302.Data;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import seng302.Exceptions.InvalidRegattaDataException;
import seng302.Mock.Regatta;
import seng302.Mock.RegattaDataSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.StringWriter;
/**
* Created by esa46 on 25/04/17.
*/
public class RegattaData {
private RegattaDataSource regattaDataSource;
public RegattaData(RegattaDataSource regattaDataSource) {
this.regattaDataSource = regattaDataSource;
}
public String createXML() {
Regatta regatta = regattaDataSource.getRegatta();
try {
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);
// 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 InvalidRegattaDataException();
} catch (TransformerException tfe) {
throw new InvalidRegattaDataException();
}
}
}