diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index aee86f6..81ceb31 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -37,8 +37,14 @@ junit junit - 3.8.1 + 4.12 test + + + hamcrest-core + org.hamcrest + + diff --git a/src/main/java/seng202/group9/Controller/EntryParser.java b/src/main/java/seng202/group9/Controller/EntryParser.java index 651226f..fbeddf2 100644 --- a/src/main/java/seng202/group9/Controller/EntryParser.java +++ b/src/main/java/seng202/group9/Controller/EntryParser.java @@ -132,6 +132,14 @@ public class EntryParser { } public FlightPoint parsePoint(String name, String type, String altitude, String latitude, String longitude) throws DataException{ + //(airport) name (first and last point) + if (!isLetter(name)) { + throw new DataException("Airport ICAO code must contain only letters"); + } + if (name.length() != 4) { + throw new DataException("Aiport ICAO code must be of length four"); + } + //type type = type.toUpperCase(); if (!type.equals("APT") && !type.equals("VOR") && !type.equals("FIX") && !type.equals("NDB") && !type.equals("LATLON")){ throw new DataException("Type of flight must be either APT, VOR, FIX, NDB or LATLON"); @@ -167,4 +175,31 @@ public class EntryParser { return parseSuccess; } + /** + * Throws an exception if the point name is not a valid AIRPORT ICAO code. + * @param name + * @throws DataException + */ + public void parsePointName(String name)throws DataException{ + if (!isLetter(name)){ + throw new DataException("Airport ICAO code must contain only letters!"); + } + if (name.length() != 4) { + throw new DataException("Aiport ICAO code must be of length four!"); + } + } + /* + * Cycles through a string to make sure all the characters are letters + */ + private static boolean isLetter(String string){ + char[] chars = string.toCharArray(); + + for (char element : chars) { + if(!Character.isLetter(element)) { + return false; + } + } + return true; + } + } diff --git a/src/main/java/seng202/group9/GUI/NewPathPopUp.java b/src/main/java/seng202/group9/GUI/NewPathPopUp.java index ea2d1c2..02e2f46 100644 --- a/src/main/java/seng202/group9/GUI/NewPathPopUp.java +++ b/src/main/java/seng202/group9/GUI/NewPathPopUp.java @@ -1,5 +1,8 @@ package seng202.group9.GUI; +import seng202.group9.Controller.DataException; +import seng202.group9.Controller.EntryParser; + import javax.swing.*; import java.awt.*; @@ -29,10 +32,22 @@ public class NewPathPopUp { if (result == JOptionPane.OK_OPTION) { sourceAirport = field1.getText().toUpperCase(); destinationAirport = field2.getText().toUpperCase(); - if (validate(sourceAirport) != true && validate(destinationAirport) != true){ + try{ + EntryParser parser = new EntryParser(); + parser.parsePointName(sourceAirport); + }catch (DataException e){ sourceAirport = null; destinationAirport = null; - JOptionPane.showMessageDialog(null, "Enter a vaild ICAO Code!"); + JOptionPane.showMessageDialog(null, "Source " + e.getMessage()); + return; + } + try{ + EntryParser parser = new EntryParser(); + parser.parsePointName(destinationAirport); + }catch (DataException e){ + sourceAirport = null; + destinationAirport = null; + JOptionPane.showMessageDialog(null, "Destination " + e.getMessage()); return; } } else { @@ -41,30 +56,6 @@ public class NewPathPopUp { } } - // Checks the users entered string to make sure it is a 4 letter valid code. - private static boolean validate(String airportCode){ - if(airportCode == ""){ - return false; - } else if(airportCode.length() != 4){ - return false; - } else if(!isLetter(airportCode)){ - return false; - } - return true; - } - - // Used by the validate() method to cycle through the string looking for non letter characters. - private static boolean isLetter(String airportCode){ - char[] chars = airportCode.toCharArray(); - - for (char element : chars) { - if(!Character.isLetter(element)) { - return false; - } - } - return true; - } - public String getSourceAirport() { return sourceAirport; }