Started on the boat XML parser, reads only boat data from the XML and makes a StreamedBoat for each boat in the XML. #story[861]
parent
0d0b9e143f
commit
22075ee415
@ -0,0 +1,126 @@
|
|||||||
|
package seng302.Mock;
|
||||||
|
|
||||||
|
import javafx.scene.paint.Color;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
import org.w3c.dom.NodeList;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
import seng302.XMLReader;
|
||||||
|
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Joseph on 24/04/2017.
|
||||||
|
*/
|
||||||
|
public class BoatXMLReader extends XMLReader {
|
||||||
|
Map<Integer, StreamedBoat> streamedBoatMap = new HashMap<>();
|
||||||
|
private Color[] colours = {Color.BLUEVIOLET, Color.BLACK, Color.RED, Color.ORANGE, Color.DARKOLIVEGREEN, Color.LIMEGREEN};
|
||||||
|
private int currentColourIndex = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for Boat XML Reader
|
||||||
|
* @param filePath path of the file
|
||||||
|
* @throws IOException error
|
||||||
|
* @throws SAXException error
|
||||||
|
* @throws ParserConfigurationException error
|
||||||
|
*/
|
||||||
|
public BoatXMLReader(String filePath) throws IOException, SAXException, ParserConfigurationException, ParseException {
|
||||||
|
this(filePath, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for Boat XML Reader
|
||||||
|
* @param filePath file path to read
|
||||||
|
* @param read whether or not to read and store the files straight away.
|
||||||
|
* @throws IOException error
|
||||||
|
* @throws SAXException error
|
||||||
|
* @throws ParserConfigurationException error
|
||||||
|
*/
|
||||||
|
public BoatXMLReader(String filePath, boolean read) throws IOException, SAXException, ParserConfigurationException, ParseException {
|
||||||
|
super(filePath);
|
||||||
|
if (read) {
|
||||||
|
read();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void read() {
|
||||||
|
readSettings();
|
||||||
|
readShapes();
|
||||||
|
readBoats();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads boats settings.
|
||||||
|
* INFORMATION FROM HERE IS IGNORED FOR NOW
|
||||||
|
*/
|
||||||
|
private void readSettings() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads different kinds of boat.
|
||||||
|
* INFORMATION FROM HERE IS IGNORED FOR NOW
|
||||||
|
*/
|
||||||
|
private void readShapes() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads the boats in the race
|
||||||
|
*/
|
||||||
|
private void readBoats() {
|
||||||
|
Element nBoats = (Element) doc.getElementsByTagName("Boats").item(0);
|
||||||
|
for (int i = 0; i < nBoats.getChildNodes().getLength(); i++) {
|
||||||
|
Node boat = nBoats.getChildNodes().item(i);
|
||||||
|
if (boat.getNodeName().equals("Boat")) {
|
||||||
|
readSingleBoat(boat);
|
||||||
|
currentColourIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads the information about one boat
|
||||||
|
* Ignored values: Type, ShapeID, StoweName, HullNum, Skipper
|
||||||
|
*/
|
||||||
|
private void readSingleBoat(Node boat) {
|
||||||
|
StreamedBoat streamedBoat;
|
||||||
|
String country = null;
|
||||||
|
int sourceID = Integer.parseInt(boat.getAttributes().getNamedItem("SourceID").getTextContent());
|
||||||
|
String boatName = boat.getAttributes().getNamedItem("BoatName").getTextContent();
|
||||||
|
String shortName = boat.getAttributes().getNamedItem("ShortName").getTextContent();
|
||||||
|
if (boat.getAttributes().getNamedItem("Country") != null) country = boat.getAttributes().getNamedItem("Country").getTextContent();
|
||||||
|
|
||||||
|
if (!streamedBoatMap.containsKey(sourceID)) {
|
||||||
|
if (country != null) {
|
||||||
|
streamedBoat = new StreamedBoat(sourceID, boatName, colours[currentColourIndex], country);
|
||||||
|
} else {
|
||||||
|
streamedBoat = new StreamedBoat(sourceID, boatName, colours[currentColourIndex], shortName);
|
||||||
|
}
|
||||||
|
streamedBoatMap.put(sourceID, streamedBoat);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < boat.getChildNodes().getLength(); i++) {
|
||||||
|
Node GPSPosition = boat.getChildNodes().item(i);
|
||||||
|
if (GPSPosition.getNodeName().equals("GPSposition")) readBoatPositionInformation(sourceID, GPSPosition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads the positional information about a boat
|
||||||
|
* Ignored values: FlagPosition, MastTop, Z value of GPSposition
|
||||||
|
*/
|
||||||
|
private void readBoatPositionInformation(int sourceID, Node GPSPosition) {
|
||||||
|
// TODO Get relative point before implementing. (GPSposition is based off a relative point).
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<Integer, StreamedBoat> getBoatMap() {
|
||||||
|
return streamedBoatMap;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
package seng302.Mock;
|
||||||
|
|
||||||
|
import javafx.scene.paint.Color;
|
||||||
|
import seng302.GPSCoordinate;
|
||||||
|
import seng302.Model.Boat;
|
||||||
|
import seng302.Model.BoatInRace;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Joseph on 24/04/2017.
|
||||||
|
*/
|
||||||
|
public class StreamedBoat extends BoatInRace {
|
||||||
|
private int sourceID;
|
||||||
|
|
||||||
|
public StreamedBoat(int sourceID, String name, Color colour, String abbrev) {
|
||||||
|
super(name, colour, abbrev);
|
||||||
|
this.sourceID = sourceID;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overridden to ignore this function
|
||||||
|
* @deprecated
|
||||||
|
* @return 0
|
||||||
|
*/
|
||||||
|
public double getScaledVelocity() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overridden to ignore this function
|
||||||
|
* @deprecated
|
||||||
|
* @param velocity of boat
|
||||||
|
*/
|
||||||
|
public void setScaledVelocity(double velocity) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,7 +1,20 @@
|
|||||||
package seng302.Mock;
|
package seng302.Mock;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.text.ParseException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by jjg64 on 21/04/17.
|
* Created by jjg64 on 21/04/17.
|
||||||
*/
|
*/
|
||||||
public class BoatsXMLTest {
|
public class BoatsXMLTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() throws SAXException, ParserConfigurationException, ParseException, IOException {
|
||||||
|
new BoatXMLReader("mockXML/boatXML/boatTest.xml");
|
||||||
|
//new BoatXMLReader("mockXML/raceXML/raceTest.xml", true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in new issue