Merge branch 'WIP_Flight_Add_Path' into 'master'

Implements the button 'new' on the Flight raw data page which can be used to cre…

…ate a new blank path. Currently does not reload the list view of paths to include the new path.

See merge request !12
This commit is contained in:
Liam Beckett
2016-09-17 15:46:36 +12:00
5 changed files with 159 additions and 12 deletions
@@ -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;
@@ -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<FlightPath> flightPaths;
flightPaths = theDataSet.getFlightPaths();
//int firstID = flightPaths.get(0).getID();
ArrayList<FlightPoint> 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<FlightPath> 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();
@@ -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;
}
}