Implements the button 'new' on the Flight raw data page which can be used to create a new blank path. Currently does not reload the list view of paths to include the new path.

main
Liam Beckett 9 years ago
parent e3ff9d3bfc
commit 23bebdf8e3

@ -731,9 +731,6 @@ public class Dataset {
return message; return message;
} }
/** /**
* This function updates the connections between airports citys countries etc. * 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, 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{ String heading, String legDist, String totDist) throws DataException{
double altitudeVal = 0.0; double altitudeVal = 0.0;

@ -13,6 +13,7 @@ import seng202.group9.Controller.Dataset;
import seng202.group9.Core.FlightPath; import seng202.group9.Core.FlightPath;
import seng202.group9.Core.FlightPoint; import seng202.group9.Core.FlightPoint;
import javax.swing.*;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; 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() { public void load() {
theDataSet = getParent().getCurrentDataset(); theDataSet = getParent().getCurrentDataset();
@ -133,11 +134,13 @@ public class FlightRDController extends Controller {
ArrayList<FlightPath> flightPaths; ArrayList<FlightPath> flightPaths;
flightPaths = theDataSet.getFlightPaths(); flightPaths = theDataSet.getFlightPaths();
//int firstID = flightPaths.get(0).getID();
ArrayList<FlightPoint> flightPoints = flightPaths.get(0).getFlight(); ArrayList<FlightPoint> flightPoints = flightPaths.get(0).getFlight();
flightTableView.setItems(FXCollections.observableArrayList(flightPoints)); 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() { public void addFlightPoint() {
ArrayList<FlightPath> flightPaths; ArrayList<FlightPath> flightPaths;
flightPaths = theDataSet.getFlightPaths(); flightPaths = theDataSet.getFlightPaths();
@ -171,10 +174,28 @@ public class FlightRDController extends Controller {
alert.setTitle("Flight Point Data Error"); alert.setTitle("Flight Point Data Error");
alert.setHeaderText("Error adding a custom flight point entry."); alert.setHeaderText("Error adding a custom flight point entry.");
alert.setContentText(e.getMessage()); 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 @Override
public void loadOnce(){ public void loadOnce(){
flightPathListView(); 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;
}
}

@ -84,22 +84,22 @@
<children> <children>
<Pane prefHeight="160.0" prefWidth="295.0" GridPane.rowIndex="1"> <Pane prefHeight="160.0" prefWidth="295.0" GridPane.rowIndex="1">
<children> <children>
<Button layoutX="20.0" layoutY="14.0" mnemonicParsing="false" onAction="#airportSummaryButton" prefHeight="25.0" prefWidth="65.0" text="Airports"> <Button layoutX="26.0" layoutY="82.0" mnemonicParsing="false" onAction="#airportSummaryButton" prefHeight="25.0" prefWidth="65.0" text="Airports">
<font> <font>
<Font size="12.0" /> <Font size="12.0" />
</font> </font>
</Button> </Button>
<Button layoutX="94.0" layoutY="14.0" mnemonicParsing="false" onAction="#airlineSummaryButton" prefHeight="25.0" prefWidth="65.0" text="Airlines"> <Button layoutX="127.0" layoutY="82.0" mnemonicParsing="false" onAction="#airlineSummaryButton" prefHeight="25.0" prefWidth="65.0" text="Airlines">
<font> <font>
<Font size="12.0" /> <Font size="12.0" />
</font> </font>
</Button> </Button>
<Button layoutX="169.0" layoutY="14.0" mnemonicParsing="false" onAction="#routeSummaryButton" prefHeight="25.0" prefWidth="65.0" text="Routes"> <Button layoutX="227.0" layoutY="82.0" mnemonicParsing="false" onAction="#routeSummaryButton" prefHeight="25.0" prefWidth="65.0" text="Routes">
<font> <font>
<Font size="12.0" /> <Font size="12.0" />
</font> </font>
</Button> </Button>
<Button layoutX="20.0" layoutY="61.0" mnemonicParsing="false" onAction="#handleRawDataButton" prefHeight="25.0" prefWidth="214.0" text="Flights Raw Data" /> <Button layoutX="26.0" layoutY="132.0" mnemonicParsing="false" onAction="#handleRawDataButton" prefHeight="25.0" prefWidth="266.0" text="Flights Raw Data" />
</children> </children>
<padding> <padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />

@ -1,5 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.geometry.Insets?> <?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?> <?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?> <?import javafx.scene.control.Label?>
@ -17,7 +22,7 @@
<?import javafx.scene.text.Font?> <?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?> <?import javafx.scene.text.Text?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng202.group9.GUI.FlightRDController"> <VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng202.group9.GUI.FlightRDController">
<children> <children>
<ScrollPane hbarPolicy="NEVER" prefHeight="603.0" prefWidth="751.0" vbarPolicy="NEVER"> <ScrollPane hbarPolicy="NEVER" prefHeight="603.0" prefWidth="751.0" vbarPolicy="NEVER">
<content> <content>
@ -44,6 +49,7 @@
<children> <children>
<Pane prefHeight="434.0" prefWidth="158.0"> <Pane prefHeight="434.0" prefWidth="158.0">
<children> <children>
<Button layoutX="32.0" layoutY="486.0" mnemonicParsing="false" onAction="#newPath" prefHeight="25.0" prefWidth="99.0" text="New" />
<ListView fx:id="flightPathListView" layoutX="19.0" layoutY="25.0" prefHeight="450.0" prefWidth="125.0" /> <ListView fx:id="flightPathListView" layoutX="19.0" layoutY="25.0" prefHeight="450.0" prefWidth="125.0" />
<Label layoutX="16.0" text="Flight Path File(s)"> <Label layoutX="16.0" text="Flight Path File(s)">
<font> <font>
@ -124,7 +130,7 @@
<Pane prefHeight="44.0" prefWidth="601.0" GridPane.rowIndex="3"> <Pane prefHeight="44.0" prefWidth="601.0" GridPane.rowIndex="3">
<children> <children>
<Button layoutX="476.0" layoutY="11.0" mnemonicParsing="false" onAction="#addFlightPoint" prefHeight="25.0" prefWidth="125.0" text="Add" /> <Button layoutX="476.0" layoutY="11.0" mnemonicParsing="false" onAction="#addFlightPoint" prefHeight="25.0" prefWidth="125.0" text="Add" />
<Button layoutY="11.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="125.0" text="Analyse" /> <Button layoutY="11.0" mnemonicParsing="false" onAction="#flightAnalyser" prefHeight="25.0" prefWidth="125.0" text="Analyse" />
</children> </children>
</Pane> </Pane>
<TableView fx:id="flightTableView" prefHeight="377.0" prefWidth="601.0"> <TableView fx:id="flightTableView" prefHeight="377.0" prefWidth="601.0">

Loading…
Cancel
Save