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(); } } }