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/Dataset.java b/src/main/java/seng202/group9/Controller/Dataset.java
index 4438ac5..00b9277 100644
--- a/src/main/java/seng202/group9/Controller/Dataset.java
+++ b/src/main/java/seng202/group9/Controller/Dataset.java
@@ -1150,6 +1150,15 @@ public class Dataset {
newPath.setID(pathID);
flightPathDictionary.put(pathID, newPath);
flightPaths.add(newPath);
+ FlightPoint sourcePoint = new FlightPoint(sourceAirport, pathID);
+ FlightPoint destinationPoint = new FlightPoint(sourceAirport, pathID);
+ try{
+ addFlightPointToPath(sourcePoint);
+ addFlightPointToPath(destinationPoint);
+ } catch (DataException e){
+ System.err.println( e.getClass().getName() + ": " + e.getMessage() );
+ System.exit(0);
+ }
}
/**
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/Core/FlightPoint.java b/src/main/java/seng202/group9/Core/FlightPoint.java
index c45e37a..d4538e7 100644
--- a/src/main/java/seng202/group9/Core/FlightPoint.java
+++ b/src/main/java/seng202/group9/Core/FlightPoint.java
@@ -16,7 +16,26 @@ public class FlightPoint {
private double longitude;
/**
- * Constructor for FLight POint before set by the database.
+ * Constructor for Flight Point when creating a new path
+ * @param name
+ * @param indexID
+ */
+ public FlightPoint(String name, int indexID) {
+ this.name = name;
+ this.ID = -1;
+ this.indexID = indexID;
+ this.type = "";
+ this.via = "";
+ this.heading = 0;
+ this.altitude = 0.0;
+ this.legDistance = 0;
+ this.totalDistance = 0;
+ this.latitude = 0.0;
+ this.longitude = 0.0;
+ }
+
+ /**
+ * Constructor for Flight Point before set by the database.
* @param type
* @param name
* @param altitude
diff --git a/src/main/java/seng202/group9/GUI/FlightRDController.java b/src/main/java/seng202/group9/GUI/FlightRDController.java
index b1e11af..7cf4e8a 100644
--- a/src/main/java/seng202/group9/GUI/FlightRDController.java
+++ b/src/main/java/seng202/group9/GUI/FlightRDController.java
@@ -4,22 +4,17 @@ import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
-import javafx.fxml.Initializable;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
-import seng202.group9.Controller.App;
import seng202.group9.Controller.DataException;
import seng202.group9.Controller.Dataset;
import seng202.group9.Core.FlightPath;
import seng202.group9.Core.FlightPoint;
import javax.swing.*;
-import java.net.URL;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.LinkedHashMap;
-import java.util.ResourceBundle;
/**
* Controller for the Flights Raw Data Scene.
@@ -57,7 +52,7 @@ public class FlightRDController extends Controller {
@FXML
ListView flightPathListView;
- final ObservableList flightList = FXCollections.observableArrayList();
+ private ObservableList flightList = FXCollections.observableArrayList();
@FXML
private TextField flightNameBox;
@@ -82,7 +77,7 @@ public class FlightRDController extends Controller {
* Loads the Flight paths into the List View and waits for a mouse clicked event for which it will update the table
* to display the selected Flight paths points. Called from the MenuController.
*/
- public void flightPathListView() {
+ private void flightPathListView() {
try {
ArrayList flightPaths;
flightPaths = theDataSet.getFlightPaths();
@@ -135,8 +130,8 @@ public class FlightRDController extends Controller {
flightLatCol.setCellValueFactory(new PropertyValueFactory("Latitude"));
flightLongCol.setCellValueFactory(new PropertyValueFactory("Longitude"));
flightHeadCol.setCellValueFactory(new PropertyValueFactory("Heading"));
- flightLegDisCol.setCellValueFactory(new PropertyValueFactory("Leg_Dist"));
- flightTotDisCol.setCellValueFactory(new PropertyValueFactory("Tot_Dist"));
+ flightLegDisCol.setCellValueFactory(new PropertyValueFactory("LegDistance"));
+ flightTotDisCol.setCellValueFactory(new PropertyValueFactory("totalDistance"));
ArrayList flightPaths;
flightPaths = theDataSet.getFlightPaths();
@@ -175,7 +170,6 @@ public class FlightRDController extends Controller {
ArrayList flightPoints = flightPaths.get(currentPathIndex).getFlight();
flightTableView.setItems(FXCollections.observableArrayList(flightPoints));
} catch ( Exception e ) {
- //e.printStackTrace();
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("Flight Point Data Error");
alert.setHeaderText("Error adding a custom flight point entry.");
@@ -204,7 +198,7 @@ public class FlightRDController extends Controller {
*/
public void deletePoint() {
FlightPoint toDelete = flightTableView.getSelectionModel().getSelectedItem();
- int pathID = 0;
+ int pathID;
try {
pathID = toDelete.getIndex();
} catch (DataException e) {
diff --git a/src/main/java/seng202/group9/GUI/FlightSummaryController.java b/src/main/java/seng202/group9/GUI/FlightSummaryController.java
index 9dc5a29..c15cf63 100644
--- a/src/main/java/seng202/group9/GUI/FlightSummaryController.java
+++ b/src/main/java/seng202/group9/GUI/FlightSummaryController.java
@@ -124,7 +124,6 @@ public class FlightSummaryController extends Controller {
}
});
}
-
/**
* Removes the selected path from the list view of paths and from the database.
*/
diff --git a/src/main/java/seng202/group9/GUI/NewPathPopUp.java b/src/main/java/seng202/group9/GUI/NewPathPopUp.java
index ea2d1c2..a219a9d 100644
--- a/src/main/java/seng202/group9/GUI/NewPathPopUp.java
+++ b/src/main/java/seng202/group9/GUI/NewPathPopUp.java
@@ -1,5 +1,10 @@
package seng202.group9.GUI;
+import javafx.scene.control.Alert;
+import seng202.group9.Controller.DataException;
+import seng202.group9.Controller.EntryParser;
+import seng202.group9.Core.FlightPoint;
+
import javax.swing.*;
import java.awt.*;
@@ -14,7 +19,6 @@ public class NewPathPopUp {
private String sourceAirport = null;
private String destinationAirport = null;
-
// Creates and displays the pop up box for the user to input data.
public void display() {
JTextField field1 = new JTextField();
@@ -29,11 +33,29 @@ 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!");
- return;
+ Alert alert = new Alert(Alert.AlertType.ERROR);
+ alert.setTitle("Flight Path Name Error");
+ alert.setHeaderText("Error adding the Source airport ICAO code.");
+ alert.setContentText(e.getMessage());
+ alert.showAndWait();
+ }
+ try{
+ EntryParser parser = new EntryParser();
+ parser.parsePointName(destinationAirport);
+ }catch (DataException e){
+ sourceAirport = null;
+ destinationAirport = null;
+ Alert alert = new Alert(Alert.AlertType.ERROR);
+ alert.setTitle("Flight Path Name Error");
+ alert.setHeaderText("Error adding the Destination airport ICAO code.");
+ alert.setContentText(e.getMessage());
+ alert.showAndWait();
}
} else {
sourceAirport = null;
@@ -41,30 +63,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;
}