diff --git a/src/main/java/seng202/group9/Controller/Dataset.java b/src/main/java/seng202/group9/Controller/Dataset.java index 73d79d4..578b92b 100644 --- a/src/main/java/seng202/group9/Controller/Dataset.java +++ b/src/main/java/seng202/group9/Controller/Dataset.java @@ -25,7 +25,7 @@ public class Dataset { LinkedHashMap airlineDictionary; LinkedHashMap airportDictionary; LinkedHashMap routeDictionary; - LinkedHashMap flightPathDictionary; + LinkedHashMap flightPathDictionary; LinkedHashMap countryDictionary; LinkedHashMap cityDictionary; @@ -48,6 +48,7 @@ public class Dataset { this.routeDictionary = new LinkedHashMap();; this.countryDictionary = new LinkedHashMap();; this.cityDictionary = new LinkedHashMap();; + this.flightPathDictionary = new LinkedHashMap(); if (action == getExisting){ updateDataset(); //after this make connections. ie filling in the country.cities airports.routes etc @@ -174,7 +175,9 @@ public class Dataset { String flightpDepart = rs.getString("Source_Airport"); String flightpArrive = rs.getString("Destination_Airport"); //duplicates are fine so no flight dictionary is made. - flightPaths.add(new FlightPath(flightpID, flightpDepart, flightpArrive)); + FlightPath flightPathToAdd = new FlightPath(flightpID, flightpDepart, flightpArrive); + flightPaths.add(flightPathToAdd); + flightPathDictionary.put(flightpID, flightPathToAdd); } rs.close(); stmt.close(); @@ -718,6 +721,7 @@ public class Dataset { stmt.close(); } flightPaths.add(flightPathToAdd); + flightPathDictionary.put(flightPathToAdd.getID(), flightPathToAdd); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); @@ -1016,6 +1020,83 @@ public class Dataset { } } + + 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; + double latitudeVal = 0.0; + double longitudeVal = 0.0; + int headingVal = 0; + double legDistVal = 0.0; + double totalDistVal = 0.0; + + try{ + altitudeVal = Double.parseDouble(altitude); + }catch (NumberFormatException e){ + throw new DataException("Altitude must be a double value"); + } + try{ + latitudeVal = Double.parseDouble(latitude); + }catch (NumberFormatException e){ + throw new DataException("Latitude must be a double value"); + } + try{ + longitudeVal = Double.parseDouble(longitude); + }catch (NumberFormatException e){ + throw new DataException("Longitude must be a double value"); + } + try{ + headingVal = Integer.parseInt(heading); + }catch (NumberFormatException e){ + throw new DataException("Heading must be a integer value"); + } + try{ + legDistVal = Double.parseDouble(legDist); + }catch (NumberFormatException e){ + throw new DataException("Leg DIstance must be a double value"); + } + try{ + totalDistVal = Double.parseDouble(totDist); + }catch (NumberFormatException e){ + throw new DataException("Total Distance must be a double value"); + } + Connection c = null; + Statement stmt; + int pointID = 0; + try { + c = DriverManager.getConnection("jdbc:sqlite:res/userdb.db"); + + stmt = c.createStatement(); + String flightPointIDQuery = "SELECT * FROM `sqlite_sequence` WHERE `name` = \""+this.name+"_Flight_Points\" LIMIT 1;"; + ResultSet pointIDRes= stmt.executeQuery(flightPointIDQuery); + while (pointIDRes.next()){ + pointID = Integer.parseInt(pointIDRes.getString("seq")); + } + stmt.close(); + + stmt = c.createStatement(); + String insertFlightPointQuery = "INSERT INTO `" + this.name + "_Flight_Points` (`Index_ID`, `Name`, `Type`," + + " `Altitude`, `Longitude`, `Latitude`, `Heading`, `Tot_Dist`, `Leg_Dist`, `Via`) VALUES "; + String flightType = type.replace("\"", "\"\""); + String flightName = name.replace("\"", "\"\""); + insertFlightPointQuery += "(" + id +", \""+ flightName +"\", \"" + flightType + "\", "+ altitudeVal + ", " + + "" + latitudeVal + ", " + longitudeVal + ", " + headingVal + ", " + totalDistVal + ", " + legDistVal + + ", \"" + via + "\")"; + stmt.execute(insertFlightPointQuery); + stmt.close(); + + + } catch ( Exception e ) { + System.err.println( e.getClass().getName() + ": " + e.getMessage() ); + System.exit(0); + } + + FlightPoint pointToAdd = new FlightPoint(name, pointID+1, id, type, via, headingVal, altitudeVal, legDistVal, + totalDistVal,latitudeVal, longitudeVal); + flightPathDictionary.get(id).addFlightPoint(pointToAdd); + + + } /** * This is called in conjunction to the App deleteDataset DO NOT CALL UNLESS THROUGH APP.DELETEDATASET */ @@ -1226,6 +1307,7 @@ public class Dataset { public void deleteFlightPath(int index){ deleteFlightPath(flightPaths.get(index)); } + /** * deletes an airline from the dataset. * @param flightPoint @@ -1275,4 +1357,28 @@ public class Dataset { public ArrayList getCities() { return cities; } + + public LinkedHashMap getAirlineDictionary() { + return airlineDictionary; + } + + public LinkedHashMap getAirportDictionary() { + return airportDictionary; + } + + public LinkedHashMap getRouteDictionary() { + return routeDictionary; + } + + public LinkedHashMap getFlightPathDictionary() { + return flightPathDictionary; + } + + public LinkedHashMap getCountryDictionary() { + return countryDictionary; + } + + public LinkedHashMap getCityDictionary() { + return cityDictionary; + } } diff --git a/src/main/java/seng202/group9/Core/FlightPoint.java b/src/main/java/seng202/group9/Core/FlightPoint.java index b059626..2e44249 100644 --- a/src/main/java/seng202/group9/Core/FlightPoint.java +++ b/src/main/java/seng202/group9/Core/FlightPoint.java @@ -38,7 +38,7 @@ public class FlightPoint { double latitude, double longitude){ this.name = name; this.ID = ID; - this.indexID = indexID; + this.indexID = indexID; //path this.type = type; this.via = via; this.heading = heading; diff --git a/src/main/java/seng202/group9/GUI/FlightRawDataController.java b/src/main/java/seng202/group9/GUI/FlightRDController.java similarity index 64% rename from src/main/java/seng202/group9/GUI/FlightRawDataController.java rename to src/main/java/seng202/group9/GUI/FlightRDController.java index d69260c..e1f70ed 100644 --- a/src/main/java/seng202/group9/GUI/FlightRawDataController.java +++ b/src/main/java/seng202/group9/GUI/FlightRDController.java @@ -5,9 +5,7 @@ import javafx.collections.ObservableList; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; -import javafx.scene.control.ListView; -import javafx.scene.control.TableColumn; -import javafx.scene.control.TableView; +import javafx.scene.control.*; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.input.MouseEvent; import seng202.group9.Controller.App; @@ -24,13 +22,17 @@ import java.util.ResourceBundle; * Controller for the Flights Raw Data Scene. * Created by Liam Beckett on 13/09/2016. */ -public class FlightRawDataController implements Initializable { +public class FlightRDController implements Initializable { private Dataset theDataSet = null; + private int currentPathId = 0; + private int currentPathIndex = 0; App parent; public void setApp(App parent){ this.parent = parent; + theDataSet = parent.getCurrentDataset(); + currentPathId = theDataSet.getFlightPaths().get(0).getID(); //Sets the default to the 1st Path } @FXML @@ -60,6 +62,24 @@ public class FlightRawDataController implements Initializable { ListView flightPathListView; final ObservableList flightList = FXCollections.observableArrayList(); + @FXML + private TextField flightNameBox; + @FXML + private TextField flightTypeBox; + @FXML + private TextField flightViaBox; + @FXML + private TextField flightAltitudeBox; + @FXML + private TextField flightLatitudeBox; + @FXML + private TextField flightLongitudeBox; + @FXML + private TextField flightHeadingBox; + @FXML + private TextField flightLegDistBox; + @FXML + private TextField flightTotDistBox; /** * Loads the Flight paths into the List View and waits for a mouse clicked event for which it will update the table @@ -67,7 +87,7 @@ public class FlightRawDataController implements Initializable { */ public void flightPathListView() { try { - ArrayList flightPaths = new ArrayList(); + ArrayList flightPaths; flightPaths = theDataSet.getFlightPaths(); for(int i = 0; i flightPaths; flightPaths = theDataSet.getFlightPaths(); - ArrayList flightPoints = flightPaths.get(Integer.parseInt(pathIdClicked)-1).getFlight(); + ArrayList flightPoints = flightPaths.get(currentPathIndex).getFlight(); flightTableView.setItems(FXCollections.observableArrayList(flightPoints)); } @@ -115,11 +139,48 @@ public class FlightRawDataController implements Initializable { ArrayList flightPaths; flightPaths = theDataSet.getFlightPaths(); - int firstID = flightPaths.get(0).getID(); + //int firstID = flightPaths.get(0).getID(); ArrayList flightPoints = flightPaths.get(0).getFlight(); flightTableView.setItems(FXCollections.observableArrayList(flightPoints)); } + public void addFlightPoint() { + ArrayList flightPaths; + flightPaths = theDataSet.getFlightPaths(); + + try { + theDataSet.addFlightPointToPath(currentPathId, + flightNameBox.getText(), + flightTypeBox.getText(), + flightViaBox.getText(), + flightAltitudeBox.getText(), + flightLatitudeBox.getText(), + flightLongitudeBox.getText(), + flightHeadingBox.getText(), + flightLegDistBox.getText(), + flightTotDistBox.getText()); + flightNameBox.clear(); + flightTypeBox.clear(); + flightViaBox.clear(); + flightAltitudeBox.clear(); + flightLatitudeBox.clear(); + flightLongitudeBox.clear(); + flightHeadingBox.clear(); + flightLegDistBox.clear(); + flightTotDistBox.clear(); + + 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."); + alert.setContentText(e.getMessage()); + alert.showAndWait(); + } + } + public void initialize(URL arg0, ResourceBundle arg1) { // TODO Auto-generated method stub diff --git a/src/main/java/seng202/group9/GUI/FlightSummaryController.java b/src/main/java/seng202/group9/GUI/FlightSummaryController.java index a534407..de7fa9b 100644 --- a/src/main/java/seng202/group9/GUI/FlightSummaryController.java +++ b/src/main/java/seng202/group9/GUI/FlightSummaryController.java @@ -2,17 +2,13 @@ package seng202.group9.GUI; import javafx.collections.FXCollections; import javafx.collections.ObservableList; -import javafx.event.ActionEvent; -import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Button; import javafx.scene.control.ListView; -import javafx.scene.control.TableView; import seng202.group9.Controller.App; import seng202.group9.Controller.Dataset; import seng202.group9.Core.FlightPath; -import seng202.group9.Core.FlightPoint; import java.net.URL; import java.util.ArrayList; @@ -65,7 +61,7 @@ public class FlightSummaryController implements Initializable { */ public void handleRawDataButton() { try { - FlightRawDataController rawDataController = (FlightRawDataController) + FlightRDController rawDataController = (FlightRDController) parent.replaceSceneContent("flight_raw_data.fxml"); rawDataController.setApp(parent); rawDataController.loadTables(); diff --git a/src/main/java/seng202/group9/GUI/MenuController.java b/src/main/java/seng202/group9/GUI/MenuController.java index 7167741..b02c844 100644 --- a/src/main/java/seng202/group9/GUI/MenuController.java +++ b/src/main/java/seng202/group9/GUI/MenuController.java @@ -6,10 +6,7 @@ import java.util.ResourceBundle; import javax.swing.JOptionPane; import javafx.fxml.Initializable; -import javafx.scene.Scene; -import javafx.scene.layout.BorderPane; -import javafx.stage.Stage; import seng202.group9.Controller.App; public class MenuController implements Initializable{ @@ -117,7 +114,7 @@ public class MenuController implements Initializable{ */ public void viewFlightRawData() { try { - FlightRawDataController rawDataController = (FlightRawDataController) + FlightRDController rawDataController = (FlightRDController) parent.replaceSceneContent("flight_raw_data.fxml"); rawDataController.setApp(parent); rawDataController.loadTables(); diff --git a/src/main/resources/flight_raw_data.fxml b/src/main/resources/flight_raw_data.fxml index 9b9fbee..abe195c 100644 --- a/src/main/resources/flight_raw_data.fxml +++ b/src/main/resources/flight_raw_data.fxml @@ -1,11 +1,13 @@ + + @@ -15,7 +17,7 @@ - + @@ -26,49 +28,108 @@ - - - - + + + - + - - + + - + - - - + - - + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + -