diff --git a/doc/examples/teams.xml b/doc/examples/teams.xml index ea549357..73c0f898 100644 --- a/doc/examples/teams.xml +++ b/doc/examples/teams.xml @@ -3,12 +3,32 @@ Oracle Team USA - USA - 23.4 + USA + 23.4 + + + Artemis Racing + ART + 12.9 Emirates Team New Zealand - NZL - 25.2 + NZL + 25.2 + + + Land Rover BAR + BAR + 16.4 + + + SoftBank Team Japan + JAP + 19.22 + + + Groupama Team France + FRC + 28.8 \ No newline at end of file diff --git a/src/main/java/seng302/models/parsers/TeamsParser.java b/src/main/java/seng302/models/parsers/TeamsParser.java new file mode 100644 index 00000000..c4d34b1f --- /dev/null +++ b/src/main/java/seng302/models/parsers/TeamsParser.java @@ -0,0 +1,63 @@ +package seng302.models.parsers; + +import org.w3c.dom.*; +import seng302.models.Boat; + +import java.util.ArrayList; +import java.util.NoSuchElementException; + +public class TeamsParser extends FileParser { + + private Document doc; + + public TeamsParser(String path) { + super(path); + this.doc = this.parseFile(); + } + + /** + * Create a boat instance by a given team node + * @param node a boat node containing name, alias and velocity + * @return an instance of Boat + */ + private Boat parseBoat(Node node) { + try { + if (node.getNodeType() == Node.ELEMENT_NODE) { + Element element = (Element) node; + String name = element.getElementsByTagName("name").item(0).getTextContent(); + String alias = element.getElementsByTagName("alias").item(0).getTextContent(); + double velocity = Double.valueOf(element.getElementsByTagName("velocity").item(0).getTextContent()); + Boat boat = new Boat(name, velocity); + return boat; + } else { + throw new NoSuchElementException("Cannot generate a boat by given node"); + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * Create an arraylist of boats instance. + * @return an arraylist of boats in teams file + */ + public ArrayList getBoats() { + ArrayList boats = new ArrayList<>(); + try { + NodeList nodes = this.doc.getElementsByTagName("team"); + for (int i = 0; i < nodes.getLength(); i++) { + Node node = nodes.item(i); + + boats.add(parseBoat(node)); + } + return boats; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + +} + diff --git a/src/main/java/seng302/models/parsers/teamsParser.java b/src/main/java/seng302/models/parsers/teamsParser.java deleted file mode 100644 index b54c1773..00000000 --- a/src/main/java/seng302/models/parsers/teamsParser.java +++ /dev/null @@ -1,11 +0,0 @@ -package seng302.models.parsers; - -public class teamsParser extends FileParser { - - public teamsParser(String path) { - super(path); - } - - -} - diff --git a/src/test/java/seng302/models/parsers/TeamsParserTest.java b/src/test/java/seng302/models/parsers/TeamsParserTest.java new file mode 100644 index 00000000..c0fd2814 --- /dev/null +++ b/src/test/java/seng302/models/parsers/TeamsParserTest.java @@ -0,0 +1,35 @@ +package seng302.models.parsers; + +import org.junit.Before; +import org.junit.Test; +import seng302.models.Boat; + +import java.util.ArrayList; + +import static org.junit.Assert.*; + +/** + * Created by Haoming on 18/03/17. + */ +public class TeamsParserTest { + + private TeamsParser tp; + @Before + public void readFile() { + tp = new TeamsParser("doc/examples/teams.xml"); + } + + @Test + public void getBoats() throws Exception { + ArrayList boats = tp.getBoats(); + + assertEquals(6, boats.size(), 1e-10); + + assertEquals("Oracle Team USA", boats.get(0).getTeamName()); + assertEquals(23.4, boats.get(0).getVelocity(), 1e-10); + + assertEquals("Groupama Team France", boats.get(5).getTeamName()); + assertEquals(28.8, boats.get(5).getVelocity(), 1e-10); + } + +} \ No newline at end of file