diff --git a/src/main/java/seng202/group9/Controller/Dataset.java b/src/main/java/seng202/group9/Controller/Dataset.java index 578b92b..064fa3c 100644 --- a/src/main/java/seng202/group9/Controller/Dataset.java +++ b/src/main/java/seng202/group9/Controller/Dataset.java @@ -731,9 +731,6 @@ public class Dataset { return message; } - - - /** * This function updates the connections between airports citys countries etc. */ @@ -1020,7 +1017,53 @@ public class Dataset { } } + /** + * Adds a path to the database and to the path dictionary + * @param sourceAirport + * @param destAirport + */ + public void addFlightPath(String sourceAirport, String destAirport){ + FlightPath newPath = new FlightPath(sourceAirport, destAirport); + Connection c; + Statement stmt; + int pathID = 0; + try { + c = DriverManager.getConnection("jdbc:sqlite:res/userdb.db"); + stmt = c.createStatement(); + String flightPathIDQuery = "SELECT * FROM `sqlite_sequence` WHERE `name` = \""+this.name+"_Flight_Path\" LIMIT 1;"; + ResultSet pathIDRes= stmt.executeQuery(flightPathIDQuery); + while (pathIDRes.next()){ + pathID = Integer.parseInt(pathIDRes.getString("seq")); + } + pathID +=1; + stmt.close(); + + stmt = c.createStatement(); + String insertPathQuery = "INSERT INTO `" + this.name + "_Flight_Path` (`Path_ID`, `Source_Airport`, " + + "`Destination_Airport`) VALUES ("+pathID+", \""+sourceAirport+"\", \""+destAirport+"\" )"; + stmt.execute(insertPathQuery); + } catch (Exception e){ + System.err.println( e.getClass().getName() + ": " + e.getMessage() ); + System.exit(0); + } + newPath.setID(pathID); + flightPathDictionary.put(pathID, newPath); + } + + /** + * Adds a flight point to a given path woth the given id + * @param id + * @param name + * @param type + * @param via + * @param altitude + * @param latitude + * @param longitude + * @param heading + * @param legDist + * @param totDist + */ public void addFlightPointToPath(int id, String name, String type, String via, String altitude, String latitude, String longitude, String heading, String legDist, String totDist) throws DataException{ double altitudeVal = 0.0; diff --git a/src/main/java/seng202/group9/GUI/FlightRDController.java b/src/main/java/seng202/group9/GUI/FlightRDController.java index 30ea8b4..26e5ffa 100644 --- a/src/main/java/seng202/group9/GUI/FlightRDController.java +++ b/src/main/java/seng202/group9/GUI/FlightRDController.java @@ -13,6 +13,7 @@ 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; @@ -115,7 +116,7 @@ public class FlightRDController extends Controller { } /** - * Function used to load the table for the Flight points initially from the MenuController + * Used to load the table for the Flight points initially from the MenuController */ public void load() { theDataSet = getParent().getCurrentDataset(); @@ -133,11 +134,13 @@ public class FlightRDController extends Controller { ArrayList flightPaths; flightPaths = theDataSet.getFlightPaths(); - //int firstID = flightPaths.get(0).getID(); ArrayList flightPoints = flightPaths.get(0).getFlight(); flightTableView.setItems(FXCollections.observableArrayList(flightPoints)); } + /** + * Will take the inputs from the text fields and adds the point to the current flight path. + */ public void addFlightPoint() { ArrayList flightPaths; flightPaths = theDataSet.getFlightPaths(); @@ -171,10 +174,28 @@ public class FlightRDController extends Controller { alert.setTitle("Flight Point Data Error"); alert.setHeaderText("Error adding a custom flight point entry."); alert.setContentText(e.getMessage()); - alert.showAndWait(); + + } + } + + /** + * Creates a pop up dialog which prompts the user for two ICAO airport codes which will use when creating a new path + */ + public void newPath() { + NewPathPopUp dialogBox = new NewPathPopUp(); + dialogBox.display(); + String destAirport = dialogBox.getDestinationAirport(); + String sourceAirport = dialogBox.getSourceAirport(); + + if (destAirport != null && sourceAirport != null){ + theDataSet.addFlightPath(sourceAirport, destAirport); } } + public void flightAnalyser(){ + JOptionPane.showMessageDialog(null, "This is not Implemented yet"); + } + @Override public void loadOnce(){ flightPathListView(); diff --git a/src/main/java/seng202/group9/GUI/NewPathPopUp.java b/src/main/java/seng202/group9/GUI/NewPathPopUp.java new file mode 100644 index 0000000..ea2d1c2 --- /dev/null +++ b/src/main/java/seng202/group9/GUI/NewPathPopUp.java @@ -0,0 +1,77 @@ +package seng202.group9.GUI; + +import javax.swing.*; +import java.awt.*; + +import static java.awt.Color.red; + +/** + * Creates the pop up box where the user will enter the Source and Destination airports for the path name, will reject + * empty strings, strings of length 4 and characters that are not A-Z. Will convert lowercase to uppercase. + * Created by Liam Beckett on 17/09/2016. + */ +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(); + JTextField field2 = new JTextField(); + JPanel panel = new JPanel(new GridLayout(0, 1)); + panel.add(new JLabel("Source Airport ICAO Code" )); + panel.add(field1); + panel.add(new JLabel("Destination Airport ICAO Code: ")); + panel.add(field2); + int result = JOptionPane.showConfirmDialog(null, panel, "Test", + JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); + if (result == JOptionPane.OK_OPTION) { + sourceAirport = field1.getText().toUpperCase(); + destinationAirport = field2.getText().toUpperCase(); + if (validate(sourceAirport) != true && validate(destinationAirport) != true){ + sourceAirport = null; + destinationAirport = null; + JOptionPane.showMessageDialog(null, "Enter a vaild ICAO Code!"); + return; + } + } else { + sourceAirport = null; + destinationAirport = null; + } + } + + // 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; + } + + public String getDestinationAirport() { + return destinationAirport; + } +} + + diff --git a/src/main/resources/flight_data_summary.fxml b/src/main/resources/flight_data_summary.fxml index b8c936c..9b71da3 100644 --- a/src/main/resources/flight_data_summary.fxml +++ b/src/main/resources/flight_data_summary.fxml @@ -84,22 +84,22 @@ - - - -