diff --git a/src/main/java/seng202/group9/Controller/SceneCode.java b/src/main/java/seng202/group9/Controller/SceneCode.java index e921a0e..fec587e 100644 --- a/src/main/java/seng202/group9/Controller/SceneCode.java +++ b/src/main/java/seng202/group9/Controller/SceneCode.java @@ -13,8 +13,9 @@ 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_PATH_ADD("new_flight_path.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"); + private String filePath; diff --git a/src/main/java/seng202/group9/Controller/Session.java b/src/main/java/seng202/group9/Controller/Session.java index f14787c..0d759d4 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/AirportRDController.java b/src/main/java/seng202/group9/GUI/AirportRDController.java index 0cea901..1b4bbfd 100644 --- a/src/main/java/seng202/group9/GUI/AirportRDController.java +++ b/src/main/java/seng202/group9/GUI/AirportRDController.java @@ -132,7 +132,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..c7441b9 --- /dev/null +++ b/src/main/java/seng202/group9/GUI/BarChooserController.java @@ -0,0 +1,77 @@ +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(){ + datatypechooser.setItems(FXCollections.observableArrayList("Airports","Airlines","Routes")); + datatypechooser.getSelectionModel().selectFirst(); + datatypechooser.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + public void changed(ObservableValue 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..14cd66a --- /dev/null +++ b/src/main/java/seng202/group9/GUI/BarGraphController.java @@ -0,0 +1,184 @@ +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){ + 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 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() = ""){ + + //} + } + +/** + 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() { + 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/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/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..72254a4 --- /dev/null +++ b/src/main/java/seng202/group9/GUI/PieChooserController.java @@ -0,0 +1,86 @@ +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(){ + datatypechooser.setItems(FXCollections.observableArrayList("Airports","Airlines","Routes")); + datatypechooser.getSelectionModel().selectFirst(); + datatypechooser.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + public void changed(ObservableValue 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, 330); + } + else if (datatypechooser.getSelectionModel().getSelectedItem().toString() == "Airlines"){ + createPopUpStage(SceneCode.AIRLINE_FILTER, 600, 330); + } + 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..62b9b65 --- /dev/null +++ b/src/main/java/seng202/group9/GUI/PieGraphController.java @@ -0,0 +1,203 @@ +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() == "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() { + 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 3a2e64b..f86db83 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/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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +