From a21b14ad340cd8dfef5d3dc0d5452b594b8b5f9a Mon Sep 17 00:00:00 2001 From: YaFedImYaEatIm Date: Mon, 3 Oct 2016 02:28:10 +1300 Subject: [PATCH] Added Most Incoming and Outgoing Routes from Airport Graph --- .../group9/GUI/AirlineGraphController.java | 1 - .../group9/GUI/AirportGraphController.java | 146 +++++++++++++++++- 2 files changed, 145 insertions(+), 2 deletions(-) diff --git a/src/main/java/seng202/group9/GUI/AirlineGraphController.java b/src/main/java/seng202/group9/GUI/AirlineGraphController.java index 5c7f086..c9f06f2 100644 --- a/src/main/java/seng202/group9/GUI/AirlineGraphController.java +++ b/src/main/java/seng202/group9/GUI/AirlineGraphController.java @@ -78,7 +78,6 @@ public class AirlineGraphController extends Controller{ 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; diff --git a/src/main/java/seng202/group9/GUI/AirportGraphController.java b/src/main/java/seng202/group9/GUI/AirportGraphController.java index 77f08b2..01dbf2e 100644 --- a/src/main/java/seng202/group9/GUI/AirportGraphController.java +++ b/src/main/java/seng202/group9/GUI/AirportGraphController.java @@ -1,11 +1,22 @@ package seng202.group9.GUI; import javafx.fxml.FXML; +import javafx.scene.chart.BarChart; +import javafx.scene.chart.CategoryAxis; +import javafx.scene.chart.XYChart; +import javafx.scene.control.Alert; 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 seng202.group9.Core.Airport; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; /** * Created by Gondr on 2/10/2016. @@ -13,8 +24,25 @@ import seng202.group9.Controller.Session; public class AirportGraphController extends Controller{ private Dataset dataset; private Session session; + private LinkedHashMap airportDict; + private HashMap sessionDict; + Airport[] airportsFiltered; + @FXML + private BarChart countryGraph; + @FXML + private CategoryAxis countryXAxis; + @FXML + private BarChart destGraph; + @FXML + private CategoryAxis destXAxis; + @FXML + private BarChart transGraph; + @FXML + private CategoryAxis transXAxis; + @FXML + private BarChart airlineGraph; @FXML - private VBox chartContainer; + private CategoryAxis airlineXAxis; @Override public void load() { @@ -22,7 +50,123 @@ public class AirportGraphController extends Controller{ return; } dataset = getParent().getCurrentDataset(); + airportDict = dataset.getAirportDictionary(); session = getParent().getSession(); + sessionDict = session.getFilteredAirports(); + if (sessionDict.size() == 0){ + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setTitle("No Data"); + alert.setHeaderText("No Filtered Data"); + alert.setContentText("There is no set Filtered Data Please go to the Airport Raw Data and Filter a Dataset to Analyse."); + alert.showAndWait(); + } + ArrayList airportArrayList = new ArrayList<>(); + for (int key : sessionDict.keySet()) { + airportArrayList.add(airportDict.get(sessionDict.get(key))); + + } + airportsFiltered = airportArrayList.toArray(new Airport[airportArrayList.size()]); + + //load graphs + loadCountryGraph(); + loadDestGraph(); + loadTransGraph(); + } + + public void loadCountryGraph(){ + countryGraph.setTitle("Top 10 Countries with the most Airports"); + countryXAxis.setLabel("Countries"); + XYChart.Series series = new XYChart.Series<>(); + series.setName("Number of Countries"); + HashMap countries = new HashMap<>(); + for (Airport airport: airportsFiltered){ + if (countries.containsKey(airport.getCountryName())) { + countries.put(airport.getCountryName(), countries.get(airport.getCountryName()) + 1); + }else{ + countries.put(airport.getCountryName(), 1); + } + } + + int length = 10; + if (airportsFiltered.length < 10){ + length = airportsFiltered.length; + } + for (int i = 0 ; i < length; i ++) { + int max = 0; + String maxCountry = null; + for (String country: countries.keySet()){ + if (countries.get(country) > max){ + maxCountry = country; + max = countries.get(country); + } + } + series.getData().add(new XYChart.Data(maxCountry, max)); + countries.remove(maxCountry); + } + + countryGraph.getData().add(series); + } + + public void loadDestGraph(){ + destGraph.setTitle("Top 10 Airports with Arriving Routes"); + destXAxis.setLabel("Airports"); + + XYChart.Series series = new XYChart.Series<>(); + series.setName("Number of Routes"); + ArrayList airports = new ArrayList<>(); + airports.addAll(Arrays.asList(airportsFiltered)); + Airport maxRoutes[] = new Airport[10]; + for (int i = 0 ; i < maxRoutes.length; i ++) { + int max = 0; + Airport maxAirport = null; + for (Airport airport: airports){ + if (airport != null) { + if (airport.getDepartureRoutes().size() > max) { + maxAirport = airport; + max = airport.getDepartureRoutes().size(); + } + } + } + maxRoutes[i] = maxAirport; + airports.remove(maxAirport); + } + for (int i = 0; i < maxRoutes.length; i++){ + if (maxRoutes[i] != null) { + series.getData().add(new XYChart.Data(maxRoutes[i].getName(), maxRoutes[i].getDepartureRoutes().size())); + } + } + destGraph.getData().add(series); + } + + public void loadTransGraph(){ + transGraph.setTitle("Top 10 Airports with Leaving Routes"); + transXAxis.setLabel("Airports"); + + XYChart.Series series = new XYChart.Series<>(); + series.setName("Number of Routes"); + ArrayList airports = new ArrayList<>(); + airports.addAll(Arrays.asList(airportsFiltered)); + Airport maxRoutes[] = new Airport[10]; + for (int i = 0 ; i < maxRoutes.length; i ++) { + int max = 0; + Airport maxAirport = null; + for (Airport airport: airports){ + if (airport != null) { + if (airport.getArrivalRoutes().size() > max) { + maxAirport = airport; + max = airport.getArrivalRoutes().size(); + } + } + } + maxRoutes[i] = maxAirport; + airports.remove(maxAirport); + } + for (int i = 0; i < maxRoutes.length; i++){ + if (maxRoutes[i] != null) { + series.getData().add(new XYChart.Data(maxRoutes[i].getName(), maxRoutes[i].getArrivalRoutes().size())); + } + } + transGraph.getData().add(series); } public void goToRawData(){