diff --git a/pom.xml b/pom.xml
index 471603b..cc6b58c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -55,8 +55,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/ma
org.apache.maven.plugins
maven-compiler-plugin
- 1.8
- 1.8
+ 1.7
+ 1.7
diff --git a/res/userdb.db b/res/userdb.db
index 475b344..d59f689 100644
Binary files a/res/userdb.db and b/res/userdb.db differ
diff --git a/src/main/java/seng202/group9/Controller/SceneCode.java b/src/main/java/seng202/group9/Controller/SceneCode.java
index e13e196..8f1e7e4 100644
--- a/src/main/java/seng202/group9/Controller/SceneCode.java
+++ b/src/main/java/seng202/group9/Controller/SceneCode.java
@@ -13,7 +13,8 @@ public enum SceneCode {
AIRPORT_ADD("airport_add_form.fxml"), AIRPORT_FILTER("airport_filter_form.fxml"), ROUTE_ADD("route_add_form.fxml"),
ROUTE_FILTER("route_filter_form.fxml"), AIRLINE_EDIT("airline_edit_form.fxml"), AIRPORT_EDIT("airport_edit_form.fxml"),
ROUTE_EDIT("route_edit_form.fxml"), FLIGHT_EDITOR("flight_editor_form.fxml"), DATASET_CONTROLLER("dataset_editor.fxml"), HELP("help.fxml"),
- FLIGHT_ADD("flight_add_form.fxml"), ROUTE_BY_AIRPORT("airport_map_routes.fxml"), ROUTE_BY_EQUIP("route_by_equip.fxml"),
+ FLIGHT_ADD("flight_add_form.fxml"), ROUTE_BY_AIRPORT("airport_map_routes.fxml"), ROUTE_BY_EQUIP("route_by_equip.fxml"), ANALYSER_TAB("analyser_main_page.fxml"), CHART_ERROR("too_many_options_pie.fxml"),
+ BAR_GRAPH_CHOOSER("bar_graph_chooser.fxml"), PIE_GRAPH_CHOOSER("pie_graph_chooser.fxml"), FLIGHT_PATH_ADD("new_flight_path.fxml"),
POP_UP_AIRPORT_MAP("pop_up_airport_map.fxml"), POP_UP_ROUTE_MAP("pop_up_route_map.fxml");
diff --git a/src/main/java/seng202/group9/Controller/Session.java b/src/main/java/seng202/group9/Controller/Session.java
index 8387a48..655f74f 100644
--- a/src/main/java/seng202/group9/Controller/Session.java
+++ b/src/main/java/seng202/group9/Controller/Session.java
@@ -6,6 +6,7 @@ import seng202.group9.Core.Airline;
import seng202.group9.Core.FlightPoint;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.HashMap;
/**
@@ -13,6 +14,7 @@ import java.util.HashMap;
* Users last session state is store here.
*/
public class Session implements Serializable {
+
private SceneCode sceneDisplayed;
private int currentFlightPointID;
@@ -20,6 +22,51 @@ public class Session implements Serializable {
private HashMap filteredAirlines;
private HashMap filteredAirports;
private HashMap filteredRoutes;
+ private String selectedgraphagainst;
+ private String selectedgraphoptions;
+ private Boolean usefilter;
+ private Boolean forceGraph;
+ private String selectedDataToGraph;
+
+ public Boolean getForceGraph() {
+ return forceGraph;
+ }
+
+ public void setForceGraph(Boolean forceGraph) {
+ this.forceGraph = forceGraph;
+ }
+
+ public String getSelectedDataToGraph() {
+ return selectedDataToGraph;
+ }
+
+ public void setSelectedDataToGraph(String selectedDataToGraph) {
+ this.selectedDataToGraph = selectedDataToGraph;
+ }
+
+ public String getSelectedgraphagainst() {
+ return selectedgraphagainst;
+ }
+
+ public void setSelectedgraphagainst(String selectedgraphagainst) {
+ this.selectedgraphagainst = selectedgraphagainst;
+ }
+
+ public String getSelectedgraphoptions() {
+ return selectedgraphoptions;
+ }
+
+ public void setSelectedgraphoptions(String selectedgraphoptions) {
+ this.selectedgraphoptions = selectedgraphoptions;
+ }
+
+ public Boolean getUsefilter() {
+ return usefilter;
+ }
+
+ public void setUsefilter(Boolean usefilter) {
+ this.usefilter = usefilter;
+ }
private String airlineToEdit;
private String airportToEdit;
diff --git a/src/main/java/seng202/group9/GUI/AirportAnalyser.java b/src/main/java/seng202/group9/GUI/AirportAnalyser.java
deleted file mode 100644
index 71ccee8..0000000
--- a/src/main/java/seng202/group9/GUI/AirportAnalyser.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package seng202.group9.GUI;
-
-import javafx.fxml.FXML;
-import javafx.scene.chart.BarChart;
-import javafx.scene.chart.PieChart;
-import javafx.scene.chart.XYChart;
-import seng202.group9.Controller.App;
-import seng202.group9.Controller.Dataset;
-import seng202.group9.Core.Airline;
-import java.util.ArrayList;
-import java.util.HashMap;
-import javafx.application.Application;
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableList;
-import javafx.scene.chart.*;
-import javafx.scene.Group;
-import seng202.group9.Core.Airport;
-
-/**
- * Gui controller class currently for creating the bar graph of routes arriving and departing from airports.
- * Extend the class. {@link Controller}
- * Created by michael on 17/09/2016.
- */
-public class AirportAnalyser extends Controller {
- //links fxml parts to the controller.
- @FXML
- PieChart pieGraph;
-
- //Used to store the data needed for making the graph.
- private Dataset currentdata = null;
- private HashMap useddata = new HashMap();
- private ArrayList current_routes;
-
- /**
- * Takes data from the current dataset and places it into the displayed pie graph.
- */
- public void build_graph(){
- //Takes Airports from the full dataset.
- current_routes = currentdata.getAirports();
- datasetup(current_routes);
- //Turns the data into a usable list.
- ObservableList pieChartData = FXCollections.observableArrayList();
- System.out.println(useddata.keySet().size());
- for (String airport : useddata.keySet()){
- Integer temp = useddata.get(airport);
- pieChartData.add(new PieChart.Data(airport,temp));
- }
- //Gives the data to the graph.
- pieGraph.setData(pieChartData);
- }
-
- /**
- * Takes the raw list of routes and fills the used data dictionary with the appropriate data to be displayed
- * @param current_air_ports
- */
- private void datasetup(ArrayList current_air_ports){
- //Takes out the specified field then adds to the used data dict.
- for (Airport entry : current_air_ports){
- String name = entry.getCountryName();
- if (useddata.containsKey(name)){
- int temp = useddata.get(name);
- useddata.replace(name,temp+1);
- }else {
- Integer temp = 1;
- useddata.put(name,temp);
- }
- }
- }
-
- /**
- * Takes the current dataset then loads the data to the graph using build graph.
- */
- public void load() {
- if (!checkDataset()){
- return;
- }
- currentdata = getParent().getCurrentDataset();
- build_graph();
- }
-
-}
diff --git a/src/main/java/seng202/group9/GUI/AirportFilterController.java b/src/main/java/seng202/group9/GUI/AirportFilterController.java
index bb99f0f..f54236b 100644
--- a/src/main/java/seng202/group9/GUI/AirportFilterController.java
+++ b/src/main/java/seng202/group9/GUI/AirportFilterController.java
@@ -92,13 +92,11 @@ public class AirportFilterController extends Controller {
filter.filterOlson(airpTzFilter.getText());
}
Alert alert = new Alert(Alert.AlertType.INFORMATION);
- alert.setTitle("Airline Filter Successful");
- alert.setHeaderText("Airline data filtered!");
- alert.setContentText("Your airline data has been successfully filtered.");
+ alert.setTitle("Airport Filter Successful");
+ alert.setHeaderText("Airport data filtered!");
+ alert.setContentText("Your airport data has been successfully filtered.");
alert.showAndWait();
- //currentSession.setFilteredAirlines(FXCollections.observableArrayList(filter.getFilteredData()));
-
HashMap airportsHM = new HashMap();
ArrayList airports = filter.getFilteredData();
for (int index = 0; index < airports.size(); index++) {
diff --git a/src/main/java/seng202/group9/GUI/AirportRDController.java b/src/main/java/seng202/group9/GUI/AirportRDController.java
index 45ba396..bd76be4 100644
--- a/src/main/java/seng202/group9/GUI/AirportRDController.java
+++ b/src/main/java/seng202/group9/GUI/AirportRDController.java
@@ -131,7 +131,7 @@ public class AirportRDController extends Controller{
/**
* Analyses the current data and creates a graph based on the data.
- * @see AirportAnalyser
+ * @see PieGraphController
*/
public void analyse_Button(){ replaceSceneContent(SceneCode.AIRPORT_ANALYSER);}
diff --git a/src/main/java/seng202/group9/GUI/AnalyserController.java b/src/main/java/seng202/group9/GUI/AnalyserController.java
new file mode 100644
index 0000000..671547c
--- /dev/null
+++ b/src/main/java/seng202/group9/GUI/AnalyserController.java
@@ -0,0 +1,19 @@
+package seng202.group9.GUI;
+
+import seng202.group9.Controller.SceneCode;
+
+/**
+ * Created by michael on 24/09/2016.
+ */
+public class AnalyserController extends Controller{
+
+ public void barGraphButton(){
+ replaceSceneContent(SceneCode.BAR_GRAPH_CHOOSER);
+ }
+
+ public void pieGraphButton(){
+ replaceSceneContent(SceneCode.PIE_GRAPH_CHOOSER);
+ }
+
+ public void load() {}
+}
diff --git a/src/main/java/seng202/group9/GUI/BarChartErrorController.java b/src/main/java/seng202/group9/GUI/BarChartErrorController.java
new file mode 100644
index 0000000..52d2498
--- /dev/null
+++ b/src/main/java/seng202/group9/GUI/BarChartErrorController.java
@@ -0,0 +1,23 @@
+package seng202.group9.GUI;
+
+import seng202.group9.Controller.SceneCode;
+import seng202.group9.Controller.Session;
+
+/**
+ * Created by michael on 2/10/2016.
+ */
+public class BarChartErrorController extends Controller {
+ private Session currentSession;
+
+ public void load(){
+ currentSession = this.getParent().getSession();
+ }
+
+ public void ignoredWarning() {
+ currentSession.setForceGraph(Boolean.TRUE);
+ replaceSceneContent(SceneCode.ROUTE_ANALYSER);
+ }
+ public void backToSafety(){
+ replaceSceneContent(SceneCode.BAR_GRAPH_CHOOSER);
+ }
+}
diff --git a/src/main/java/seng202/group9/GUI/BarChooserController.java b/src/main/java/seng202/group9/GUI/BarChooserController.java
new file mode 100644
index 0000000..19089cf
--- /dev/null
+++ b/src/main/java/seng202/group9/GUI/BarChooserController.java
@@ -0,0 +1,80 @@
+package seng202.group9.GUI;
+
+import javafx.beans.Observable;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.fxml.FXML;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.ChoiceBox;
+import javafx.scene.control.ListView;
+import javafx.scene.control.SelectionMode;
+import seng202.group9.Controller.SceneCode;
+import seng202.group9.Controller.Session;
+
+import java.util.ArrayList;
+
+/**
+ * Created by michael on 24/09/2016.
+ */
+public class BarChooserController extends Controller{
+
+ @FXML
+ ChoiceBox datatypechooser;
+ @FXML
+ ListView graph_against;
+ @FXML
+ ListView graph_options;
+ @FXML
+ CheckBox usefilter;
+
+ ObservableList airportOptions = FXCollections.observableArrayList("Name", "ICAO", "IATA FFA", "Altitude",
+ "City", "Country");
+
+ ObservableList airlineOptions = FXCollections.observableArrayList("ID", "Name", "ICAO", "IATA", "Alias",
+ "Call Sign", "Active", "Country");
+
+ ObservableList routeOptions = FXCollections.observableArrayList("ID", "Stops", "Codeshare", "Equipment", "Airline",
+ "Departure Airport", "Arival airport");
+
+ ArrayList allOptions = new ArrayList();
+
+ public void buildGraph() {
+ Session currentsession = this.getParent().getSession();
+ currentsession.setSelectedgraphoptions(graph_against.getSelectionModel().getSelectedItem().toString());
+ currentsession.setSelectedgraphagainst(graph_options.getSelectionModel().getSelectedItem().toString());
+ currentsession.setUsefilter(usefilter.isSelected());
+ currentsession.setForceGraph(Boolean.FALSE);
+ replaceSceneContent(SceneCode.ROUTE_ANALYSER);
+ }
+
+ public void returnToSelection(){replaceSceneContent(SceneCode.PIE_GRAPH_CHOOSER);}
+
+ public void changeTables(){
+ int temp = datatypechooser.getSelectionModel().getSelectedIndex();
+ graph_against.setItems(allOptions.get(temp));
+ graph_options.setItems(allOptions.get(temp));
+ }
+
+ public void load(){
+ if (!checkDataset()){
+ return;
+ }
+ datatypechooser.setItems(FXCollections.observableArrayList("Airports","Airlines","Routes"));
+ datatypechooser.getSelectionModel().selectFirst();
+ datatypechooser.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() {
+ public void changed(ObservableValue extends Number> observable, Number oldValue, Number newValue) {
+ changeTables();
+ }
+ });
+ graph_against.setItems(airportOptions);
+ graph_against.getSelectionModel().selectFirst();
+ graph_options.setItems(airportOptions);
+ graph_options.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
+ graph_options.getSelectionModel().selectFirst();
+ allOptions.add(airportOptions);
+ allOptions.add(airlineOptions);
+ allOptions.add(routeOptions);
+ }
+}
diff --git a/src/main/java/seng202/group9/GUI/BarGraphController.java b/src/main/java/seng202/group9/GUI/BarGraphController.java
new file mode 100644
index 0000000..ea75d83
--- /dev/null
+++ b/src/main/java/seng202/group9/GUI/BarGraphController.java
@@ -0,0 +1,154 @@
+package seng202.group9.GUI;
+
+
+import javafx.fxml.FXML;
+import javafx.scene.chart.BarChart;
+import javafx.scene.chart.XYChart;
+import seng202.group9.Controller.App;
+import seng202.group9.Controller.Dataset;
+import seng202.group9.Controller.Session;
+import seng202.group9.Core.Airline;
+import seng202.group9.Core.Airport;
+import seng202.group9.Core.Route;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+
+/**
+ * Gui controller class currently for creating the bar graph of routes arriving and departing from airports.
+ * Extend the class. {@link Controller}
+ * Created by michael on 16/09/2016.
+ */
+public class BarGraphController extends Controller {
+ //Links fxml to the controller.
+ @FXML
+ private BarChart analyserGraph;
+
+ //Used to store the data needed for making the tables.
+ private ArrayList current_routes;
+ private Dataset currentdata = null;
+ private HashMap useddata = new HashMap();
+ private Session currentsession;
+
+
+ /**
+ * Takes data from the current dataset and places it into the displayed bar graph.
+ */
+ public void build_graph(){
+ //Takes routes from the full dataset.
+ current_routes = currentdata.getRoutes();
+ //datasetup(current_routes);
+ //Builds series needed for the graph.
+ XYChart.Series seriesArivals = new XYChart.Series();
+ XYChart.Series seriesDeparts = new XYChart.Series();
+ seriesArivals.setName("Arriving routes");
+ seriesDeparts.setName("Departs routes");
+ for (String airport : useddata.keySet()){
+ ArrayList temp = useddata.get(airport);
+ seriesArivals.getData().add(new XYChart.Data(airport,temp.get(0)));
+ seriesDeparts.getData().add(new XYChart.Data(airport,temp.get(1)));
+ }
+ //Gives the formatted data to the graph.
+ analyserGraph.getData().addAll(seriesArivals,seriesDeparts);
+ }
+
+ /**
+ * Takes the raw list of routes and fills the used data dictionary with the appropriate data to be displayed
+ * @param current_routes
+ */
+
+ private int stops;
+ private String codeShare;
+ private String equipment;
+ private String airlineName;
+ private String departureAirport;
+ private String arrivalAirport;
+
+/** private void datasetupCustomarAirport(ArrayList current_air_ports){
+ //Takes out the specified field then adds to the used data dict.
+ for (Airport entry : current_air_ports){
+ currentsession.getSelectedgraphagainst() == "Name";
+ name = entry.getName();
+ currentsession.getSelectedgraphagainst() == "ICAO";
+ name = entry.getICAO();
+ currentsession.getSelectedgraphagainst() == "IATA_FFA"
+ name = entry.getIATA_FFA();
+ currentsession.getSelectedgraphagainst() == "City"
+
+ currentsession.getSelectedgraphagainst() == "Country"
+ name = entry.getCountryName();
+
+ if (useddata.containsKey(name)){
+ int temp = useddata.get(name);
+ useddata.replace(name,temp+1);
+ }else {
+ Integer temp = 1;
+ useddata.put(name,temp);
+ }
+ }
+ }
+*/
+
+ private void datasetupCustomRoute(ArrayList current_routes){
+ //Takes out the specified field (Currently departure airport and arrival airport) then adds to the used data dict.
+ //if(currentsession.getSelectedgraphagainst() = ""){
+
+ //}
+ }
+
+ /**
+ * Takes the current dataset then loads the data to the graph using build graph.
+ */
+ public void load() {
+ currentdata = getParent().getCurrentDataset();
+ currentsession = this.getParent().getSession();
+ String temp = currentsession.getSelectedDataToGraph();
+ if (temp == "Airports") {
+ ArrayList d = new ArrayList();
+ if (currentsession.getUsefilter()){
+ for(int i = 0; i < currentdata.getAirports().size(); i++) {
+ if (currentsession.getFilteredAirports().containsValue(currentdata.getAirports().get(i).getName())
+ && currentsession.getFilteredAirports().containsKey(i)) {
+ d.add(currentdata.getAirports().get(i));
+ }
+ }
+ }
+ else{
+ d = currentdata.getAirports();
+ }
+ //datasetupCustomarAirport(d);
+ }
+ else if (temp == "Airlines"){
+ ArrayList d = new ArrayList();
+ if (currentsession.getUsefilter()){
+ for(int i = 0; i < currentdata.getAirports().size(); i++) {
+ if (currentsession.getFilteredAirlines().containsValue(currentdata.getAirlines().get(i).getName())
+ && currentsession.getFilteredAirlines().containsKey(i)) {
+ d.add(currentdata.getAirlines().get(i));
+ }
+ }
+ }
+ else{
+ d = currentdata.getAirlines();
+ }
+ //datasetupCustomarAirline(d);
+ }
+ else if (temp == "Routes") {
+ ArrayList d = new ArrayList();
+ if (currentsession.getUsefilter()){
+ for(int i = 0; i < currentdata.getRoutes().size(); i++) {
+ if (currentsession.getFilteredRoutes().containsValue(currentdata.getRoutes().get(i).getAirlineName())
+ && currentsession.getFilteredRoutes().containsKey(i)) {
+ d.add(currentdata.getRoutes().get(i));
+ }
+ }
+ }
+ else{
+ d = currentdata.getRoutes();
+ }
+ datasetupCustomRoute(d);
+ }
+ build_graph();
+ }
+
+}
diff --git a/src/main/java/seng202/group9/GUI/FlightRDController.java b/src/main/java/seng202/group9/GUI/FlightRDController.java
index e85c131..399dfdd 100644
--- a/src/main/java/seng202/group9/GUI/FlightRDController.java
+++ b/src/main/java/seng202/group9/GUI/FlightRDController.java
@@ -56,25 +56,6 @@ public class FlightRDController extends Controller {
ListView flightPathListView;
private 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
* to display the selected Flight paths points. Called from the MenuController.
@@ -166,16 +147,9 @@ public class FlightRDController extends Controller {
* 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);
- flightPathListView.getItems().clear();
- flightPathListView();
- }
+ createPopUpStage(SceneCode.FLIGHT_PATH_ADD, 500, 240);
+ flightPathListView.getItems().clear();
+ flightPathListView();
}
/**
* Removes the selected point from the table and database.
diff --git a/src/main/java/seng202/group9/GUI/MenuController.java b/src/main/java/seng202/group9/GUI/MenuController.java
index 6472f34..7346706 100644
--- a/src/main/java/seng202/group9/GUI/MenuController.java
+++ b/src/main/java/seng202/group9/GUI/MenuController.java
@@ -67,6 +67,8 @@ public class MenuController extends Controller{
replaceSceneContent(SceneCode.ROUTE_SUMMARY);
}
+ public void viewAnalyserMain() { replaceSceneContent(SceneCode.ANALYSER_TAB);}
+
/**
* view Routes by the Destination / Arrival Airport
*/
diff --git a/src/main/java/seng202/group9/GUI/NewPathController.java b/src/main/java/seng202/group9/GUI/NewPathController.java
new file mode 100644
index 0000000..0395f6a
--- /dev/null
+++ b/src/main/java/seng202/group9/GUI/NewPathController.java
@@ -0,0 +1,58 @@
+package seng202.group9.GUI;
+
+import javafx.fxml.FXML;
+import javafx.scene.control.Alert;
+import javafx.scene.control.Button;
+import javafx.scene.control.TextField;
+import javafx.stage.Stage;
+import seng202.group9.Controller.Dataset;
+import seng202.group9.Controller.EntryParser;
+
+/**
+ * The controller class for new_flight_path.fxml.
+ * Created by Sunguin.
+ */
+public class NewPathController extends Controller {
+ @FXML
+ private TextField sourceAirport;
+ @FXML
+ private TextField destinationAirport;
+ @FXML
+ private Button addButton;
+
+ private Dataset theDataSet = null;
+
+ public void load() {
+ theDataSet = getParent().getCurrentDataset();
+ }
+
+ /**
+ * Attempts to add a new flight path. First uses the entry parser to check for valid ICAO codes.
+ */
+ public void addPath() {
+ EntryParser airportCheck = new EntryParser();
+ try {
+ airportCheck.parsePointName(sourceAirport.getText());
+ airportCheck.parsePointName(destinationAirport.getText());
+ theDataSet.addFlightPath(sourceAirport.getText(), destinationAirport.getText());
+
+ //Saying to the user that the flight path has successfully added.
+ Alert alert = new Alert(Alert.AlertType.INFORMATION);
+ alert.setTitle("Flight Path Add Successful");
+ alert.setHeaderText("New Flight Path added!");
+ alert.setContentText("Your new flight path has been successfully added into the database.");
+ alert.showAndWait();
+
+ //Closes the add form.
+ Stage stage = (Stage) addButton.getScene().getWindow();
+ stage.close();
+ } catch (Exception e) {
+ //Tells the user what and where the error is.
+ Alert alert = new Alert(Alert.AlertType.ERROR);
+ alert.setTitle("Flight Path Data Error");
+ alert.setHeaderText("Error adding a custom flight path entry.");
+ alert.setContentText(e.getMessage());
+ alert.showAndWait();
+ }
+ }
+}
diff --git a/src/main/java/seng202/group9/GUI/NewPathPopUp.java b/src/main/java/seng202/group9/GUI/NewPathPopUp.java
deleted file mode 100644
index a219a9d..0000000
--- a/src/main/java/seng202/group9/GUI/NewPathPopUp.java
+++ /dev/null
@@ -1,75 +0,0 @@
-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.*;
-
-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();
- try{
- EntryParser parser = new EntryParser();
- parser.parsePointName(sourceAirport);
- }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 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;
- destinationAirport = null;
- }
- }
-
- public String getSourceAirport() {
- return sourceAirport;
- }
-
- public String getDestinationAirport() {
- return destinationAirport;
- }
-}
-
-
diff --git a/src/main/java/seng202/group9/GUI/PieChartErrorController.java b/src/main/java/seng202/group9/GUI/PieChartErrorController.java
new file mode 100644
index 0000000..33f9547
--- /dev/null
+++ b/src/main/java/seng202/group9/GUI/PieChartErrorController.java
@@ -0,0 +1,23 @@
+package seng202.group9.GUI;
+
+import seng202.group9.Controller.SceneCode;
+import seng202.group9.Controller.Session;
+
+/**
+ * Created by michael on 2/10/2016.
+ */
+public class PieChartErrorController extends Controller {
+ private Session currentSession;
+
+ public void load(){
+ currentSession = this.getParent().getSession();
+ }
+
+ public void ignoredWarning() {
+ currentSession.setForceGraph(true);
+ replaceSceneContent(SceneCode.AIRPORT_ANALYSER);
+ }
+ public void backToSafety(){
+ replaceSceneContent(SceneCode.PIE_GRAPH_CHOOSER);
+ }
+}
diff --git a/src/main/java/seng202/group9/GUI/PieChooserController.java b/src/main/java/seng202/group9/GUI/PieChooserController.java
new file mode 100644
index 0000000..8cc6db8
--- /dev/null
+++ b/src/main/java/seng202/group9/GUI/PieChooserController.java
@@ -0,0 +1,89 @@
+package seng202.group9.GUI;
+
+import javafx.beans.Observable;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.fxml.FXML;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.ChoiceBox;
+import javafx.scene.control.ListView;
+import javafx.scene.control.SelectionMode;
+import seng202.group9.Controller.SceneCode;
+import seng202.group9.Controller.Session;
+
+import java.util.ArrayList;
+
+/**
+ * Created by michael on 24/09/2016.
+ */
+public class PieChooserController extends Controller{
+
+ @FXML
+ ChoiceBox datatypechooser;
+ @FXML
+ ListView graph_options;
+ @FXML
+ CheckBox usefilter;
+
+
+ ObservableList airportOptions = FXCollections.observableArrayList("Name", "ICAO", "IATA FFA", "Altitude",
+ "City", "Country");
+
+ ObservableList airlineOptions = FXCollections.observableArrayList("Name", "ICAO", "IATA", "Active", "Country");
+
+ ObservableList routeOptions = FXCollections.observableArrayList("Stops", "Codeshare", "Equipment", "Airline",
+ "Departure Airport", "Arival airport");
+
+ ArrayList allOptions = new ArrayList();
+
+
+ public void toBarGraphChooser(){replaceSceneContent(SceneCode.BAR_GRAPH_CHOOSER);}
+
+ public void buildGraph() {
+ Session currentsession = this.getParent().getSession();
+ ArrayList temp = new ArrayList();
+ currentsession.setSelectedDataToGraph(datatypechooser.getSelectionModel().getSelectedItem().toString());
+ currentsession.setSelectedgraphagainst(graph_options.getSelectionModel().getSelectedItem().toString());
+ currentsession.setUsefilter(usefilter.isSelected());
+ currentsession.setForceGraph(false);
+ replaceSceneContent(SceneCode.AIRPORT_ANALYSER);
+ }
+
+ public void changeTables(){
+ int temp = datatypechooser.getSelectionModel().getSelectedIndex();
+ graph_options.setItems(allOptions.get(temp));
+ }
+
+ public void load(){
+ if (!checkDataset()){
+ return;
+ }
+ datatypechooser.setItems(FXCollections.observableArrayList("Airports","Airlines","Routes"));
+ datatypechooser.getSelectionModel().selectFirst();
+ datatypechooser.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() {
+ public void changed(ObservableValue extends Number> observable, Number oldValue, Number newValue) {
+ changeTables();
+ }
+ });
+
+ graph_options.setItems(airportOptions);
+ graph_options.getSelectionModel().selectFirst();
+ allOptions.add(airportOptions);
+ allOptions.add(airlineOptions);
+ allOptions.add(routeOptions);
+ }
+
+ public void newFilter(){
+ if (datatypechooser.getSelectionModel().getSelectedItem().toString() == "Airports"){
+ createPopUpStage(SceneCode.AIRPORT_FILTER, 600, 480);
+ }
+ else if (datatypechooser.getSelectionModel().getSelectedItem().toString() == "Airlines"){
+ createPopUpStage(SceneCode.AIRLINE_FILTER, 600, 370);
+ }
+ else if (datatypechooser.getSelectionModel().getSelectedItem().toString() == "Routes"){
+ createPopUpStage(SceneCode.ROUTE_FILTER, 600, 330);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/seng202/group9/GUI/PieGraphController.java b/src/main/java/seng202/group9/GUI/PieGraphController.java
new file mode 100644
index 0000000..34357e9
--- /dev/null
+++ b/src/main/java/seng202/group9/GUI/PieGraphController.java
@@ -0,0 +1,208 @@
+package seng202.group9.GUI;
+
+import javafx.fxml.FXML;
+import javafx.scene.chart.BarChart;
+import javafx.scene.chart.PieChart;
+import javafx.scene.chart.XYChart;
+import seng202.group9.Controller.*;
+import seng202.group9.Core.Airline;
+import java.util.ArrayList;
+import java.util.HashMap;
+import javafx.application.Application;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.chart.*;
+import javafx.scene.Group;
+import seng202.group9.Core.Airport;
+import seng202.group9.Core.Route;
+
+/**
+ * Gui controller class currently for creating the bar graph of routes arriving and departing from airports.
+ * Extend the class. {@link Controller}
+ * Created by michael on 17/09/2016.
+ */
+public class PieGraphController extends Controller {
+ //links fxml parts to the controller.
+ @FXML
+ PieChart pieGraph;
+
+ //Used to store the data needed for making the graph.
+ private Dataset currentdata = null;
+ private HashMap useddata = new HashMap();
+ private Session currentsession;
+
+
+ /**
+ * Takes data from the current dataset and places it into the displayed pie graph.
+ */
+ public void build_graph(){
+ //Turns the data into a usable list.
+ ObservableList pieChartData = FXCollections.observableArrayList();
+ System.out.println(useddata.keySet().size());
+ for (String airport : useddata.keySet()){
+ Integer temp = useddata.get(airport);
+ pieChartData.add(new PieChart.Data(airport,temp));
+ }
+ //Gives the data to the graph.
+ if (useddata.keySet().size() > 250 && !currentsession.getForceGraph()){
+ replaceSceneContent(SceneCode.CHART_ERROR);
+ }
+ else{
+ pieGraph.setData(pieChartData);
+ }
+ }
+
+ /**
+ * Takes the raw list of routes and fills the used data dictionary with the appropriate data to be displayed
+ * @param current_air_ports
+ */
+ private void datasetupCustomarAirport(ArrayList current_air_ports){
+ //Takes out the specified field then adds to the used data dict.
+ for (Airport entry : current_air_ports){
+ String name = "Error";
+ if (currentsession.getSelectedgraphagainst() == "Name") {
+ name = entry.getName();
+ }
+ else if (currentsession.getSelectedgraphagainst() == "ICAO") {
+ name = entry.getICAO();
+ }
+ else if (currentsession.getSelectedgraphagainst() == "IATA FFA") {
+ name = entry.getIATA_FFA();
+ }
+ else if (currentsession.getSelectedgraphagainst() == "Altitude") {
+ name = String.valueOf(entry.getAltitude());
+ }
+ else if (currentsession.getSelectedgraphagainst() == "City") {
+ name = entry.getCityName();
+ }
+ else if (currentsession.getSelectedgraphagainst() == "Country") {
+ name = entry.getCountryName();
+ }
+ if (useddata.containsKey(name)){
+ int temp = useddata.get(name);
+ useddata.replace(name,temp+1);
+ }else {
+ Integer temp = 1;
+ useddata.put(name,temp);
+ }
+ }
+ }
+
+
+ private void datasetupCustomarAirline(ArrayList current_air_ports){
+ //Takes out the specified field then adds to the used data dict.
+ for (Airline entry : current_air_ports) {
+ String name = "Error";
+ if (currentsession.getSelectedgraphagainst() == "Name") {
+ name = entry.getName();
+ } else if (currentsession.getSelectedgraphagainst() == "ICAO") {
+ name = entry.getICAO();
+ } else if (currentsession.getSelectedgraphagainst() == "IATA") {
+ name = entry.getIATA();
+ } else if (currentsession.getSelectedgraphagainst() == "Country") {
+ name = entry.getCountryName();
+ } else if (currentsession.getSelectedgraphagainst() == "Active") {
+ name = entry.getActive();
+ }
+ if (useddata.containsKey(name)) {
+ int temp = useddata.get(name);
+ useddata.replace(name, temp + 1);
+ } else {
+ Integer temp = 1;
+ useddata.put(name, temp);
+ }
+ }
+ }
+
+
+ private void datasetupCustomRoute(ArrayList current_air_ports){
+ //Takes out the specified field then adds to the used data dict.
+ for (Route entry : current_air_ports){
+ String name = "Error";
+ if (currentsession.getSelectedgraphagainst() == "Stops") {
+ name = String.valueOf(entry.getStops());
+ }
+ else if (currentsession.getSelectedgraphagainst() == "Codeshare") {
+ name = entry.getCode();
+ }
+ else if (currentsession.getSelectedgraphagainst() == "Equipment") {
+ name = entry.getEquipment();
+ }
+ else if (currentsession.getSelectedgraphagainst() == "Airline") {
+ name = entry.getAirlineName();
+ }
+ else if (currentsession.getSelectedgraphagainst() == "Departure Airport") {
+ name = entry.getDepartureAirport();
+ }
+ else if (currentsession.getSelectedgraphagainst() == "Arival airport") {
+ name = entry.getArrivalAirport();
+ }
+ if (useddata.containsKey(name)){
+ int temp = useddata.get(name);
+ useddata.replace(name,temp+1);
+ }else {
+ Integer temp = 1;
+ useddata.put(name,temp);
+ }
+ }
+ }
+
+ /**
+ * Takes the current dataset then loads the data to the graph using build graph.
+ */
+ public void load() {
+ if (!checkDataset()){
+ return;
+ }
+ currentdata = getParent().getCurrentDataset();
+ currentsession = this.getParent().getSession();
+ String temp = currentsession.getSelectedDataToGraph();
+ if (temp == "Airports") {
+ ArrayList d = new ArrayList();
+ if (currentsession.getUsefilter()){
+ for(int i = 0; i < currentdata.getAirports().size(); i++) {
+ if (currentsession.getFilteredAirports().containsValue(currentdata.getAirports().get(i).getName())
+ && currentsession.getFilteredAirports().containsKey(i)) {
+ d.add(currentdata.getAirports().get(i));
+ }
+ }
+ }
+ else{
+ d = currentdata.getAirports();
+ }
+ datasetupCustomarAirport(d);
+ }
+ else if (temp == "Airlines"){
+ ArrayList d = new ArrayList();
+ if (currentsession.getUsefilter()){
+ for(int i = 0; i < currentdata.getAirports().size(); i++) {
+ if (currentsession.getFilteredAirlines().containsValue(currentdata.getAirlines().get(i).getName())
+ && currentsession.getFilteredAirlines().containsKey(i)) {
+ d.add(currentdata.getAirlines().get(i));
+ }
+ }
+ }
+ else{
+ d = currentdata.getAirlines();
+ }
+ datasetupCustomarAirline(d);
+ }
+ else if (temp == "Routes") {
+ ArrayList d = new ArrayList();
+ if (currentsession.getUsefilter()){
+ for(int i = 0; i < currentdata.getRoutes().size(); i++) {
+ if (currentsession.getFilteredRoutes().containsValue(currentdata.getRoutes().get(i).getAirlineName())
+ && currentsession.getFilteredRoutes().containsKey(i)) {
+ d.add(currentdata.getRoutes().get(i));
+ }
+ }
+ }
+ else{
+ d = currentdata.getRoutes();
+ }
+ datasetupCustomRoute(d);
+ }
+ build_graph();
+ }
+
+}
diff --git a/src/main/java/seng202/group9/GUI/RouteAnalyser.java b/src/main/java/seng202/group9/GUI/RouteAnalyser.java
deleted file mode 100644
index f2f7485..0000000
--- a/src/main/java/seng202/group9/GUI/RouteAnalyser.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package seng202.group9.GUI;
-
-
-import javafx.fxml.FXML;
-import javafx.scene.chart.BarChart;
-import javafx.scene.chart.XYChart;
-import seng202.group9.Controller.App;
-import seng202.group9.Controller.Dataset;
-import seng202.group9.Core.Route;
-import java.util.ArrayList;
-import java.util.HashMap;
-
-
-/**
- * Gui controller class currently for creating the bar graph of routes arriving and departing from airports.
- * Extend the class. {@link Controller}
- * Created by michael on 16/09/2016.
- */
-public class RouteAnalyser extends Controller {
- //Links fxml to the controller.
- @FXML
- private BarChart analyserGraph;
-
- //Used to store the data needed for making the tables.
- private ArrayList current_routes;
- private Dataset currentdata = null;
- private HashMap useddata = new HashMap();
-
- /**
- * Takes data from the current dataset and places it into the displayed bar graph.
- */
- public void build_graph(){
- //Takes routes from the full dataset.
- current_routes = currentdata.getRoutes();
- datasetup(current_routes);
- //Builds series needed for the graph.
- XYChart.Series seriesArivals = new XYChart.Series();
- XYChart.Series seriesDeparts = new XYChart.Series();
- seriesArivals.setName("Arriving routes");
- seriesDeparts.setName("Departs routes");
- System.out.println(useddata.keySet().size());
- for (String airport : useddata.keySet()){
- ArrayList temp = useddata.get(airport);
- seriesArivals.getData().add(new XYChart.Data(airport,temp.get(0)));
- seriesDeparts.getData().add(new XYChart.Data(airport,temp.get(1)));
- }
- //Gives the formatted data to the graph.
- analyserGraph.getData().addAll(seriesArivals,seriesDeparts);
- }
-
- /**
- * Takes the raw list of routes and fills the used data dictionary with the appropriate data to be displayed
- * @param current_routes
- */
-
- private void datasetup(ArrayList current_routes){
- //Takes out the specified field (Currently departure airport and arrival airport) then adds to the used data dict.
- for (Route entry : current_routes){
- String departs = entry.getDepartureAirport();
- String arives = entry.getArrivalAirport();
- if (useddata.containsKey(departs)){
- ArrayList temp = useddata.get(departs);
- temp.add(1,temp.get(1)+1);
- useddata.replace(departs,temp);
- }else {
- ArrayList temp = new ArrayList(2);
- temp.add(0);
- temp.add(1);
- useddata.put(departs,temp);
- }
- if (useddata.containsKey(arives)){
- ArrayList temp = useddata.get(arives);
- temp.add(0,temp.get(0)+1);
- useddata.replace(arives,temp);
- }else {
- ArrayList temp = new ArrayList(2);
- temp.add(1);
- temp.add(0);
- useddata.put(arives,temp);
- }
- }
- }
-
- /**
- * Takes the current dataset then loads the data to the graph using build graph.
- */
- public void load() {
- if (!checkDataset()){
- return;
- }
- currentdata = getParent().getCurrentDataset();
- build_graph();
- }
-}
diff --git a/src/main/java/seng202/group9/GUI/RouteRDController.java b/src/main/java/seng202/group9/GUI/RouteRDController.java
index fa109bb..3654737 100644
--- a/src/main/java/seng202/group9/GUI/RouteRDController.java
+++ b/src/main/java/seng202/group9/GUI/RouteRDController.java
@@ -7,7 +7,6 @@ import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import seng202.group9.Controller.Dataset;
import seng202.group9.Controller.SceneCode;
-import seng202.group9.Controller.RouteFilter;
import seng202.group9.Controller.Session;
import seng202.group9.Core.Route;
@@ -128,7 +127,7 @@ public class RouteRDController extends Controller {
/**
* Analyses the current data and creates a graph based on the data.
- * @see RouteAnalyser
+ * @see BarGraphController
*/
public void analyse_Button() {
replaceSceneContent(SceneCode.ROUTE_ANALYSER);
diff --git a/src/main/java/seng202/group9/Map/Map.java b/src/main/java/seng202/group9/Map/Map.java
index 2b8b73b..d377784 100644
--- a/src/main/java/seng202/group9/Map/Map.java
+++ b/src/main/java/seng202/group9/Map/Map.java
@@ -56,7 +56,7 @@ public class Map {
});
}
- public Map(WebView webView, final RoutePath newRoute, TableView table){
+ public Map(WebView webView, final RoutePath newRoute, final TableView table){
this.webView = webView;
webEngine = webView.getEngine();
initMap();
diff --git a/src/main/resources/airport_analyser.fxml b/src/main/resources/airport_analyser.fxml
index a811436..7b6485c 100644
--- a/src/main/resources/airport_analyser.fxml
+++ b/src/main/resources/airport_analyser.fxml
@@ -8,7 +8,7 @@
-
+
diff --git a/src/main/resources/analyser_main_page.fxml b/src/main/resources/analyser_main_page.fxml
new file mode 100644
index 0000000..4061d65
--- /dev/null
+++ b/src/main/resources/analyser_main_page.fxml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/bar_graph_chooser.fxml b/src/main/resources/bar_graph_chooser.fxml
new file mode 100644
index 0000000..f7581f5
--- /dev/null
+++ b/src/main/resources/bar_graph_chooser.fxml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/menu.fxml b/src/main/resources/menu.fxml
index db1fe0e..8005c50 100644
--- a/src/main/resources/menu.fxml
+++ b/src/main/resources/menu.fxml
@@ -6,7 +6,6 @@
-
@@ -58,6 +57,7 @@