From 8ac6606b76a6cf52de5732fe0716d02c87d7b24a Mon Sep 17 00:00:00 2001 From: Michael Wilson Date: Sat, 1 Oct 2016 20:07:13 +1300 Subject: [PATCH] Pie graph fully hooked up. --- .../seng202/group9/Controller/Session.java | 9 + .../seng202/group9/GUI/AirportAnalyser.java | 78 -------- .../group9/GUI/AirportRDController.java | 3 +- .../group9/GUI/PieChooserController.java | 11 +- .../group9/GUI/PieGraphController.java | 176 ++++++++++++++++++ src/main/resources/airport_analyser.fxml | 2 +- 6 files changed, 192 insertions(+), 87 deletions(-) delete mode 100644 src/main/java/seng202/group9/GUI/AirportAnalyser.java create mode 100644 src/main/java/seng202/group9/GUI/PieGraphController.java diff --git a/src/main/java/seng202/group9/Controller/Session.java b/src/main/java/seng202/group9/Controller/Session.java index 100fc9d..baa1719 100644 --- a/src/main/java/seng202/group9/Controller/Session.java +++ b/src/main/java/seng202/group9/Controller/Session.java @@ -20,6 +20,15 @@ public class Session implements Serializable { private String selectedgraphagainst; private ArrayList selectedgraphoptions; private Boolean usefilter; + private String selectedDataToGraph; + + public String getSelectedDataToGraph() { + return selectedDataToGraph; + } + + public void setSelectedDataToGraph(String selectedDataToGraph) { + this.selectedDataToGraph = selectedDataToGraph; + } public String getSelectedgraphagainst() { return selectedgraphagainst; 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 47f7116..0000000 --- a/src/main/java/seng202/group9/GUI/AirportAnalyser.java +++ /dev/null @@ -1,78 +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() { - currentdata = getParent().getCurrentDataset(); - build_graph(); - } - -} diff --git a/src/main/java/seng202/group9/GUI/AirportRDController.java b/src/main/java/seng202/group9/GUI/AirportRDController.java index c0f3651..59af18c 100644 --- a/src/main/java/seng202/group9/GUI/AirportRDController.java +++ b/src/main/java/seng202/group9/GUI/AirportRDController.java @@ -5,7 +5,6 @@ import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.scene.control.cell.PropertyValueFactory; -import seng202.group9.Controller.AirportFilter; import seng202.group9.Controller.Dataset; import seng202.group9.Controller.SceneCode; import seng202.group9.Controller.Session; @@ -130,7 +129,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/PieChooserController.java b/src/main/java/seng202/group9/GUI/PieChooserController.java index 2293ffc..6525511 100644 --- a/src/main/java/seng202/group9/GUI/PieChooserController.java +++ b/src/main/java/seng202/group9/GUI/PieChooserController.java @@ -28,13 +28,12 @@ public class PieChooserController extends Controller{ CheckBox usefilter; - ObservableList airportOptions = FXCollections.observableArrayList("ID", "Name", "ICAO", "IATA FFA", "Altitude", - "Latitude", "Longitude", "City", "Country"); + 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 airlineOptions = FXCollections.observableArrayList("Name", "ICAO", "IATA", "Active", "Country"); - ObservableList routeOptions = FXCollections.observableArrayList("ID", "Stops", "Codeshare", "Equipment", "Airline", + ObservableList routeOptions = FXCollections.observableArrayList("Stops", "Codeshare", "Equipment", "Airline", "Departure Airport", "Arival airport"); ArrayList allOptions = new ArrayList(); @@ -45,6 +44,7 @@ public class PieChooserController extends Controller{ 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()); replaceSceneContent(SceneCode.AIRPORT_ANALYSER); @@ -63,7 +63,6 @@ public class PieChooserController extends Controller{ changeTables(); } }); - graph_options.setItems(airportOptions); graph_options.getSelectionModel().selectFirst(); allOptions.add(airportOptions); 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..dc81823 --- /dev/null +++ b/src/main/java/seng202/group9/GUI/PieGraphController.java @@ -0,0 +1,176 @@ +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 ArrayList current_routes; + 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. + 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() == "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); + } + } + int size = useddata.size(); + while (size > 50){ + + size = useddata.size(); + } + } + + + 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); + } + } + int size = useddata.size(); + while (size > 50){ + + size = useddata.size(); + } + } + + /** + * 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") { + datasetupCustomarAirport(currentdata.getAirports()); + } + else if (temp == "Airlines"){ + datasetupCustomarAirline(currentdata.getAirlines()); + } + else if (temp == "Routes") { + datasetupCustomRoute(currentdata.getRoutes()); + } + build_graph(); + } + +} 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 @@ - +