diff --git a/src/main/java/seng202/group9/Controller/SceneCode.java b/src/main/java/seng202/group9/Controller/SceneCode.java index a8c3d17..56fd07c 100644 --- a/src/main/java/seng202/group9/Controller/SceneCode.java +++ b/src/main/java/seng202/group9/Controller/SceneCode.java @@ -11,7 +11,7 @@ public enum SceneCode { FLIGHT_RAW_DATA("flight_raw_data.fxml"), AIRPORT_ANALYSER("airport_analyser.fxml"), ROUTE_ANALYSER("route_analyser.fxml"), AIRPORT_DIST_CALC("airport_dist_calc.fxml"), AIRLINE_ADD("airline_add_form.fxml"), AIRLINE_FILTER("airline_filter_form.fxml"), AIRPORT_ADD("airport_add_form.fxml"), AIRPORT_FILTER("airport_filter_form.fxml"), ROUTE_ADD("route_add_form.fxml"), - ROUTE_FILTER("route_filter_form.fxml"),ANALYSER_TAB("analyser_main_page.fxml"), + ROUTE_FILTER("route_filter_form.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"); private String filePath; diff --git a/src/main/java/seng202/group9/Controller/Session.java b/src/main/java/seng202/group9/Controller/Session.java index baa1719..7e2c018 100644 --- a/src/main/java/seng202/group9/Controller/Session.java +++ b/src/main/java/seng202/group9/Controller/Session.java @@ -18,10 +18,19 @@ public class Session implements Serializable { private HashMap filteredAirports; private HashMap filteredRoutes; private String selectedgraphagainst; - private ArrayList selectedgraphoptions; + 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; } @@ -38,11 +47,11 @@ public class Session implements Serializable { this.selectedgraphagainst = selectedgraphagainst; } - public ArrayList getSelectedgraphoptions() { + public String getSelectedgraphoptions() { return selectedgraphoptions; } - public void setSelectedgraphoptions(ArrayList selectedgraphoptions) { + public void setSelectedgraphoptions(String selectedgraphoptions) { this.selectedgraphoptions = selectedgraphoptions; } 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 index 362d994..c7441b9 100644 --- a/src/main/java/seng202/group9/GUI/BarChooserController.java +++ b/src/main/java/seng202/group9/GUI/BarChooserController.java @@ -29,8 +29,8 @@ public class BarChooserController extends Controller{ @FXML 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"); @@ -42,12 +42,10 @@ public class BarChooserController extends Controller{ public void buildGraph() { Session currentsession = this.getParent().getSession(); - ArrayList temp = new ArrayList(); - temp.addAll(graph_options.getSelectionModel().getSelectedItems()); - currentsession.setSelectedgraphoptions(temp); - currentsession.setUsefilter(usefilter.isSelected()); + 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); } 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..c151226 --- /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/PieChartErrorController.java b/src/main/java/seng202/group9/GUI/PieChartErrorController.java new file mode 100644 index 0000000..3b2c89a --- /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(Boolean.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 index 6525511..b6be1d7 100644 --- a/src/main/java/seng202/group9/GUI/PieChooserController.java +++ b/src/main/java/seng202/group9/GUI/PieChooserController.java @@ -47,6 +47,7 @@ public class PieChooserController extends Controller{ currentsession.setSelectedDataToGraph(datatypechooser.getSelectionModel().getSelectedItem().toString()); currentsession.setSelectedgraphagainst(graph_options.getSelectionModel().getSelectedItem().toString()); currentsession.setUsefilter(usefilter.isSelected()); + currentsession.setForceGraph(Boolean.FALSE); replaceSceneContent(SceneCode.AIRPORT_ANALYSER); } @@ -69,4 +70,16 @@ public class PieChooserController extends Controller{ 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 index dc81823..eb80465 100644 --- a/src/main/java/seng202/group9/GUI/PieGraphController.java +++ b/src/main/java/seng202/group9/GUI/PieGraphController.java @@ -29,7 +29,6 @@ public class PieGraphController extends Controller { //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; @@ -45,7 +44,12 @@ public class PieGraphController extends Controller { pieChartData.add(new PieChart.Data(airport,temp)); } //Gives the data to the graph. - pieGraph.setData(pieChartData); + if (useddata.keySet().size() > 50 && currentsession.getForceGraph()){ + replaceSceneContent(SceneCode.CHART_ERROR); + } + else{ + pieGraph.setData(pieChartData); + } } /** @@ -84,36 +88,27 @@ public class PieGraphController extends Controller { 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){ + for (Airline entry : current_air_ports) { String name = "Error"; if (currentsession.getSelectedgraphagainst() == "Name") { name = entry.getName(); - } - else if (currentsession.getSelectedgraphagainst() == "ICAO") { + } else if (currentsession.getSelectedgraphagainst() == "ICAO") { name = entry.getICAO(); - } - else if (currentsession.getSelectedgraphagainst() == "IATA") { + } else if (currentsession.getSelectedgraphagainst() == "IATA") { name = entry.getIATA(); - } - else if (currentsession.getSelectedgraphagainst() == "Country") { + } else if (currentsession.getSelectedgraphagainst() == "Country") { name = entry.getCountryName(); - } - else if (currentsession.getSelectedgraphagainst() == "Active") { + } else if (currentsession.getSelectedgraphagainst() == "Active") { name = entry.getActive(); } - if (useddata.containsKey(name)){ + if (useddata.containsKey(name)) { int temp = useddata.get(name); - useddata.replace(name,temp+1); - }else { + useddata.replace(name, temp + 1); + } else { Integer temp = 1; - useddata.put(name,temp); + useddata.put(name, temp); } } - int size = useddata.size(); - while (size > 50){ - - size = useddata.size(); - } } @@ -147,11 +142,6 @@ public class PieGraphController extends Controller { useddata.put(name,temp); } } - int size = useddata.size(); - while (size > 50){ - - size = useddata.size(); - } } /** @@ -162,13 +152,49 @@ public class PieGraphController extends Controller { currentsession = this.getParent().getSession(); String temp = currentsession.getSelectedDataToGraph(); if (temp == "Airports") { - datasetupCustomarAirport(currentdata.getAirports()); + 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"){ - datasetupCustomarAirline(currentdata.getAirlines()); + 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") { - datasetupCustomRoute(currentdata.getRoutes()); + 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 2d66c79..0000000 --- a/src/main/java/seng202/group9/GUI/RouteAnalyser.java +++ /dev/null @@ -1,91 +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"); - 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))); - } - System.out.println(useddata.keySet().size()); - //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() { - 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 45b1b29..0a352b6 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; @@ -115,7 +114,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/pie_graph_chooser.fxml b/src/main/resources/pie_graph_chooser.fxml index 7f57044..843111d 100644 --- a/src/main/resources/pie_graph_chooser.fxml +++ b/src/main/resources/pie_graph_chooser.fxml @@ -1,13 +1,10 @@ - - - - - + + @@ -17,7 +14,7 @@ - + @@ -63,6 +60,7 @@