diff --git a/src/main/java/seng202/group9/Controller/App.java b/src/main/java/seng202/group9/Controller/App.java index 351d622..e43f39d 100644 --- a/src/main/java/seng202/group9/Controller/App.java +++ b/src/main/java/seng202/group9/Controller/App.java @@ -74,6 +74,20 @@ public class App extends Application session = new Session(); e.printStackTrace(); } + + //load all datasets + try{ + loadAllDatasets(); + } catch (Exception e){ + e.printStackTrace(); + } + if (session.getCurrentDataset() != null){ + for (int i = 0; i < datasets.size(); i ++) { + if (datasets.get(i).getName().equals(session.getCurrentDataset())) { + currentDataset = datasets.get(i); + } + } + } //load the menu and the first container try { FXMLLoader loader = new FXMLLoader(); @@ -89,49 +103,13 @@ public class App extends Application } catch (Exception e) { e.printStackTrace(); } - primaryStage.show(); - //load all datasets - try{ - loadAllDatasets(); - } catch (Exception e){ - e.printStackTrace(); - } - if (session.getCurrentDataset() != null){ - for (int i = 0; i < datasets.size(); i ++) { - if (datasets.get(i).getName().equals(session.getCurrentDataset())) { - currentDataset = datasets.get(i); - - HashMap airlinesHM = new HashMap(); - ArrayList airlines = currentDataset.getAirlines(); - for (int index = 0; index < airlines.size(); index++) { - try { - airlinesHM.put(index, airlines.get(index).getID()); - } catch (DataException e) { - e.printStackTrace(); - } - } - session.setFilteredAirlines(airlinesHM); - - HashMap airportsHM = new HashMap(); - ArrayList airports = currentDataset.getAirports(); - for (int index = 0; index < airports.size(); index++) { - try { - airportsHM.put(index, airports.get(index).getID()); - } catch (DataException e) { - e.printStackTrace(); - } - } - session.setFilteredAirports(airportsHM); - //session.setFilteredRoutes(); - } - } - } //after all loading then load the previous session if (session.getSceneDisplayed() != null) { menuController.replaceSceneContent(session.getSceneDisplayed()); }else{ menuController.replaceSceneContent(SceneCode.INITIAL); } + primaryStage.show(); //check if there is internet connectivity if (!testInet("maps.google.com")){ Alert alert = new Alert(Alert.AlertType.WARNING); diff --git a/src/main/java/seng202/group9/Controller/Session.java b/src/main/java/seng202/group9/Controller/Session.java index c1eecff..fc29672 100644 --- a/src/main/java/seng202/group9/Controller/Session.java +++ b/src/main/java/seng202/group9/Controller/Session.java @@ -19,9 +19,9 @@ public class Session implements Serializable { private int currentFlightPointID;//current selected flight point private int currentFlightPathID;//cureselected flight path - private HashMap filteredAirlines;//current filtered airlines - private HashMap filteredAirports;//current filtered airports - private HashMap filteredRoutes;//current filtered routes + private HashMap filteredAirlines;//current filtered airlines + private HashMap filteredAirports;//current filtered airports + private HashMap filteredRoutes;//current filtered routes private HashMap airportFilter;//storage for filter values for airports private HashMap airlineFilter;//storage for filter values for airports private HashMap routeFilter;//storage for filter values for airports @@ -83,7 +83,7 @@ public class Session implements Serializable { this.filteredAirlines = airlines; } - public HashMap getFilteredAirlines() { + public HashMap getFilteredAirlines() { return filteredAirlines; } @@ -91,7 +91,7 @@ public class Session implements Serializable { this.filteredAirports = airports; } - public HashMap getFilteredAirports() { + public HashMap getFilteredAirports() { return filteredAirports; } @@ -99,7 +99,7 @@ public class Session implements Serializable { this.filteredRoutes = routes; } - public HashMap getFilteredRoutes() { + public HashMap getFilteredRoutes() { return filteredRoutes; } diff --git a/src/main/java/seng202/group9/GUI/AirlineFilterController.java b/src/main/java/seng202/group9/GUI/AirlineFilterController.java index aa7ea48..02ae8c0 100644 --- a/src/main/java/seng202/group9/GUI/AirlineFilterController.java +++ b/src/main/java/seng202/group9/GUI/AirlineFilterController.java @@ -12,7 +12,6 @@ import javafx.scene.input.KeyEvent; import javafx.scene.layout.GridPane; import javafx.stage.Stage; import seng202.group9.Controller.AirlineFilter; -import seng202.group9.Controller.DataException; import seng202.group9.Controller.Dataset; import seng202.group9.Controller.Session; import seng202.group9.Core.Airline; @@ -130,14 +129,10 @@ public class AirlineFilterController extends Controller { //Creates a new hashmap for airlines and fills it with airlines that fit the criteria specified by the user. //Saves it into the current session. - HashMap airlinesHM = new HashMap(); + HashMap airlinesHM = new HashMap(); ArrayList airlines = filter.getFilteredData(); for (int index = 0; index < airlines.size(); index++) { - try { - airlinesHM.put(index, airlines.get(index).getID()); - } catch (DataException e) { - e.printStackTrace(); - } + airlinesHM.put(index, airlines.get(index).getName()); } currentSession.setFilteredAirlines(airlinesHM); diff --git a/src/main/java/seng202/group9/GUI/AirlineGraphController.java b/src/main/java/seng202/group9/GUI/AirlineGraphController.java index eaf9994..9adc296 100644 --- a/src/main/java/seng202/group9/GUI/AirlineGraphController.java +++ b/src/main/java/seng202/group9/GUI/AirlineGraphController.java @@ -1,11 +1,21 @@ package seng202.group9.GUI; import javafx.fxml.FXML; +import javafx.scene.chart.BarChart; +import javafx.scene.chart.CategoryAxis; +import javafx.scene.chart.NumberAxis; +import javafx.scene.chart.XYChart; import javafx.scene.layout.GridPane; import javafx.scene.layout.VBox; import seng202.group9.Controller.Dataset; import seng202.group9.Controller.SceneCode; import seng202.group9.Controller.Session; +import seng202.group9.Core.Airline; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; import static javafx.application.ConditionalFeature.FXML; @@ -15,8 +25,15 @@ import static javafx.application.ConditionalFeature.FXML; public class AirlineGraphController extends Controller{ private Dataset dataset; private Session session; + private LinkedHashMap airlineDict; + private HashMap sessionDict; + Airline[] airlinesFiltered; + @FXML + private BarChart routeGraph; + @FXML + private NumberAxis routeYAxis; @FXML - private VBox chartContainer; + private CategoryAxis routeXAxis; @Override public void load() { @@ -24,7 +41,49 @@ public class AirlineGraphController extends Controller{ return; } dataset = getParent().getCurrentDataset(); + airlineDict = dataset.getAirlineDictionary(); session = getParent().getSession(); + sessionDict = session.getFilteredAirlines(); + ArrayList airlinesArrayList = new ArrayList<>(); + for (int key : sessionDict.keySet()) { + airlinesArrayList.add(airlineDict.get(sessionDict.get(key))); + + } + airlinesFiltered = airlinesArrayList.toArray(new Airline[airlinesArrayList.size()]); + + loadRoutesGraph(); + } + + public void loadRoutesGraph(){ + routeGraph.setTitle("Top 10 Number of Routes vs Airports"); + routeXAxis.setLabel("Airports"); + + XYChart.Series series = new XYChart.Series<>(); + series.setName("Number of Routes"); + ArrayList airlines = new ArrayList<>(); + airlines.addAll(Arrays.asList(airlinesFiltered)); + Airline maxRoutes[] = new Airline[10]; + System.out.println(airlines.size()); + for (int i = 0 ; i < maxRoutes.length; i ++) { + int max = 0; + Airline maxAirline = null; + for (Airline airline: airlines){ + if (airline != null) { + if (airline.getRoutes().size() > max) { + maxAirline = airline; + max = airline.getRoutes().size(); + } + } + } + maxRoutes[i] = maxAirline; + airlines.remove(maxAirline); + } + for (int i = 0; i < maxRoutes.length; i++){ + if (maxRoutes[i] != null) { + series.getData().add(new XYChart.Data(maxRoutes[i].getName(), maxRoutes[i].getRoutes().size())); + } + } + routeGraph.getData().add(series); } public void goToRawData(){ diff --git a/src/main/java/seng202/group9/GUI/AirlineRDController.java b/src/main/java/seng202/group9/GUI/AirlineRDController.java index 1c65546..8c161c3 100644 --- a/src/main/java/seng202/group9/GUI/AirlineRDController.java +++ b/src/main/java/seng202/group9/GUI/AirlineRDController.java @@ -85,14 +85,8 @@ public class AirlineRDController extends Controller { public void openFilter() { createPopUpStage(SceneCode.AIRLINE_FILTER, 600, 370); ArrayList d = new ArrayList(); - for (Airline airline : theDataSet.getAirlines()){ - try { - if (currentSession.getFilteredAirlines().containsValue(airline.getID())){ - d.add(airline); - } - } catch (DataException e) { - e.printStackTrace(); - } + for (int key: currentSession.getFilteredAirlines().keySet()){ + d.add(theDataSet.getAirlineDictionary().get(currentSession.getFilteredAirlines().get(key))); } tableViewAirlineRD.setItems(FXCollections.observableArrayList(d)); } diff --git a/src/main/java/seng202/group9/GUI/AirportFilterController.java b/src/main/java/seng202/group9/GUI/AirportFilterController.java index 1e944fa..595feee 100644 --- a/src/main/java/seng202/group9/GUI/AirportFilterController.java +++ b/src/main/java/seng202/group9/GUI/AirportFilterController.java @@ -11,7 +11,6 @@ import javafx.scene.input.KeyEvent; import javafx.scene.layout.GridPane; import javafx.stage.Stage; import seng202.group9.Controller.AirportFilter; -import seng202.group9.Controller.DataException; import seng202.group9.Controller.Dataset; import seng202.group9.Controller.Session; import seng202.group9.Core.Airport; @@ -118,14 +117,10 @@ public class AirportFilterController extends Controller { alert.setContentText("Your airport data has been successfully filtered."); alert.showAndWait(); - HashMap airportsHM = new HashMap(); + HashMap airportsHM = new HashMap(); ArrayList airports = filter.getFilteredData(); for (int index = 0; index < airports.size(); index++) { - try { - airportsHM.put(index, airports.get(index).getID()); - } catch (DataException e) { - e.printStackTrace(); - } + airportsHM.put(index, airports.get(index).getName()); } currentSession.setFilteredAirports(airportsHM); diff --git a/src/main/java/seng202/group9/GUI/AirportRDController.java b/src/main/java/seng202/group9/GUI/AirportRDController.java index 70babd7..bd76be4 100644 --- a/src/main/java/seng202/group9/GUI/AirportRDController.java +++ b/src/main/java/seng202/group9/GUI/AirportRDController.java @@ -6,7 +6,6 @@ import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.scene.control.cell.PropertyValueFactory; import javafx.stage.Stage; -import seng202.group9.Controller.DataException; import seng202.group9.Controller.Dataset; import seng202.group9.Controller.SceneCode; import seng202.group9.Controller.Session; @@ -94,14 +93,8 @@ public class AirportRDController extends Controller{ public void openFilter() { createPopUpStage(SceneCode.AIRPORT_FILTER, 600, 480); ArrayList d = new ArrayList(); - for (Airport airport: theDataSet.getAirports()){ - try { - if (currentSession.getFilteredAirports().containsValue(airport.getID())) { - d.add(airport); - } - } catch (DataException e) { - e.printStackTrace(); - } + for (int key: currentSession.getFilteredAirports().keySet()){ + d.add(theDataSet.getAirportDictionary().get(currentSession.getFilteredAirports().get(key))); } tableViewAirportRD.setItems(FXCollections.observableArrayList(d)); } @@ -138,9 +131,9 @@ public class AirportRDController extends Controller{ /** * Analyses the current data and creates a graph based on the data. - * + * @see PieGraphController */ - public void analyse_Button(){ replaceSceneContent(SceneCode.AIRPORT_GRAPHS);} + public void analyse_Button(){ replaceSceneContent(SceneCode.AIRPORT_ANALYSER);} public void airportSummaryButton() { replaceSceneContent(SceneCode.AIRPORT_SUMMARY); diff --git a/src/main/java/seng202/group9/GUI/RouteFilterController.java b/src/main/java/seng202/group9/GUI/RouteFilterController.java index eeecf56..a9cdc41 100644 --- a/src/main/java/seng202/group9/GUI/RouteFilterController.java +++ b/src/main/java/seng202/group9/GUI/RouteFilterController.java @@ -10,7 +10,6 @@ import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.layout.GridPane; import javafx.stage.Stage; -import seng202.group9.Controller.DataException; import seng202.group9.Controller.Dataset; import seng202.group9.Controller.RouteFilter; import seng202.group9.Controller.Session; @@ -87,14 +86,13 @@ public class RouteFilterController extends Controller { alert.setContentText("Your route data has been successfully filtered."); alert.showAndWait(); - HashMap routesHM = new HashMap(); + //currentSession.setFilteredAirlines(FXCollections.observableArrayList(filter.getFilteredData())); + //routeAirline + routeSourceAirport + routeArrvAirport + routeCodeShare + routeStops + routeEquip + HashMap routesHM = new HashMap(); ArrayList routes = filter.getFilteredData(); for (int index = 0; index < routes.size(); index++) { - try { - routesHM.put(index, routes.get(index).getID()); - } catch (DataException e) { - e.printStackTrace(); - } + routesHM.put(index, routes.get(index).getAirlineName() + routes.get(index).getDepartureAirport() + routes.get(index).getArrivalAirport() + + routes.get(index).getCode() + routes.get(index).getStops() + routes.get(index).getEquipment()); } currentSession.setFilteredRoutes(routesHM); diff --git a/src/main/java/seng202/group9/GUI/RouteRDController.java b/src/main/java/seng202/group9/GUI/RouteRDController.java index 47f28f4..3654737 100644 --- a/src/main/java/seng202/group9/GUI/RouteRDController.java +++ b/src/main/java/seng202/group9/GUI/RouteRDController.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.DataException; import seng202.group9.Controller.Dataset; import seng202.group9.Controller.SceneCode; import seng202.group9.Controller.Session; @@ -83,14 +82,8 @@ public class RouteRDController extends Controller { createPopUpStage(SceneCode.ROUTE_FILTER, 600, 330); ArrayList d = new ArrayList(); - for (Route route: theDataSet.getRoutes()){ - try { - if (currentSession.getFilteredRoutes().containsValue(route.getID())) { - d.add(route); - } - } catch (DataException e) { - e.printStackTrace(); - } + for (int key: currentSession.getFilteredRoutes().keySet()){ + d.add(theDataSet.getRouteDictionary().get(currentSession.getFilteredRoutes().get(key))); } tableViewRouteRD.setItems(FXCollections.observableArrayList(d)); } @@ -134,10 +127,10 @@ public class RouteRDController extends Controller { /** * Analyses the current data and creates a graph based on the data. - * + * @see BarGraphController */ public void analyse_Button() { - replaceSceneContent(SceneCode.ROUTE_GRAPHS); + replaceSceneContent(SceneCode.ROUTE_ANALYSER); } public void routeSummaryButton() { diff --git a/src/main/resources/airline_graphs.fxml b/src/main/resources/airline_graphs.fxml index bdd5c01..e1f8d9e 100644 --- a/src/main/resources/airline_graphs.fxml +++ b/src/main/resources/airline_graphs.fxml @@ -1,5 +1,6 @@ + @@ -35,15 +36,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - diff --git a/src/main/resources/airport_graphs.fxml b/src/main/resources/airport_graphs.fxml index e6007c6..ba3aed1 100644 --- a/src/main/resources/airport_graphs.fxml +++ b/src/main/resources/airport_graphs.fxml @@ -1,5 +1,6 @@ + @@ -42,7 +43,7 @@ - + diff --git a/src/main/resources/route_graphs.fxml b/src/main/resources/route_graphs.fxml index 9f4d8e5..2421fa8 100644 --- a/src/main/resources/route_graphs.fxml +++ b/src/main/resources/route_graphs.fxml @@ -42,7 +42,7 @@ - +