Made Route Graph Work
This commit is contained in:
@@ -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<Integer, Integer> airlinesHM = new HashMap<Integer, Integer>();
|
||||
ArrayList<Airline> 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<Integer, Integer> airportsHM = new HashMap<Integer, Integer>();
|
||||
ArrayList<Airport> 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);
|
||||
|
||||
@@ -19,9 +19,9 @@ public class Session implements Serializable {
|
||||
|
||||
private int currentFlightPointID;//current selected flight point
|
||||
private int currentFlightPathID;//cureselected flight path
|
||||
private HashMap<Integer, Integer> filteredAirlines;//current filtered airlines
|
||||
private HashMap<Integer, Integer> filteredAirports;//current filtered airports
|
||||
private HashMap<Integer, Integer> filteredRoutes;//current filtered routes
|
||||
private HashMap<Integer, String> filteredAirlines;//current filtered airlines
|
||||
private HashMap<Integer, String> filteredAirports;//current filtered airports
|
||||
private HashMap<Integer, String> filteredRoutes;//current filtered routes
|
||||
private HashMap<String, String> airportFilter;//storage for filter values for airports
|
||||
private HashMap<String, String> airlineFilter;//storage for filter values for airports
|
||||
private HashMap<String, String> routeFilter;//storage for filter values for airports
|
||||
@@ -83,7 +83,7 @@ public class Session implements Serializable {
|
||||
this.filteredAirlines = airlines;
|
||||
}
|
||||
|
||||
public HashMap<Integer, Integer> getFilteredAirlines() {
|
||||
public HashMap<Integer, String> getFilteredAirlines() {
|
||||
return filteredAirlines;
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ public class Session implements Serializable {
|
||||
this.filteredAirports = airports;
|
||||
}
|
||||
|
||||
public HashMap<Integer, Integer> getFilteredAirports() {
|
||||
public HashMap<Integer, String> getFilteredAirports() {
|
||||
return filteredAirports;
|
||||
}
|
||||
|
||||
@@ -99,7 +99,7 @@ public class Session implements Serializable {
|
||||
this.filteredRoutes = routes;
|
||||
}
|
||||
|
||||
public HashMap<Integer, Integer> getFilteredRoutes() {
|
||||
public HashMap<Integer, String> getFilteredRoutes() {
|
||||
return filteredRoutes;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Integer, Integer> airlinesHM = new HashMap<Integer, Integer>();
|
||||
HashMap<Integer, String> airlinesHM = new HashMap<Integer, String>();
|
||||
ArrayList<Airline> 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);
|
||||
|
||||
|
||||
@@ -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<String, Airline> airlineDict;
|
||||
private HashMap<Integer, String> sessionDict;
|
||||
Airline[] airlinesFiltered;
|
||||
@FXML
|
||||
private VBox chartContainer;
|
||||
private BarChart routeGraph;
|
||||
@FXML
|
||||
private NumberAxis routeYAxis;
|
||||
@FXML
|
||||
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<Airline> 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<String,Integer> series = new XYChart.Series<>();
|
||||
series.setName("Number of Routes");
|
||||
ArrayList<Airline> 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<String, Integer>(maxRoutes[i].getName(), maxRoutes[i].getRoutes().size()));
|
||||
}
|
||||
}
|
||||
routeGraph.getData().add(series);
|
||||
}
|
||||
|
||||
public void goToRawData(){
|
||||
|
||||
@@ -85,14 +85,8 @@ public class AirlineRDController extends Controller {
|
||||
public void openFilter() {
|
||||
createPopUpStage(SceneCode.AIRLINE_FILTER, 600, 370);
|
||||
ArrayList<Airline> 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));
|
||||
}
|
||||
|
||||
@@ -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<Integer, Integer> airportsHM = new HashMap<Integer, Integer>();
|
||||
HashMap<Integer, String> airportsHM = new HashMap<Integer, String>();
|
||||
ArrayList<Airport> 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);
|
||||
|
||||
|
||||
@@ -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<Airport> 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);
|
||||
|
||||
@@ -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<Integer, Integer> routesHM = new HashMap<Integer, Integer>();
|
||||
//currentSession.setFilteredAirlines(FXCollections.observableArrayList(filter.getFilteredData()));
|
||||
//routeAirline + routeSourceAirport + routeArrvAirport + routeCodeShare + routeStops + routeEquip
|
||||
HashMap<Integer, String> routesHM = new HashMap<Integer, String>();
|
||||
ArrayList<Route> 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);
|
||||
|
||||
|
||||
@@ -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<Route> 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() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.scene.chart.*?>
|
||||
<?import java.lang.*?>
|
||||
<?import javafx.geometry.*?>
|
||||
<?import javafx.scene.control.*?>
|
||||
@@ -35,15 +36,62 @@
|
||||
<Insets left="15.0" />
|
||||
</GridPane.margin>
|
||||
</Text>
|
||||
<TabPane prefHeight="200.0" prefWidth="200.0" tabClosingPolicy="UNAVAILABLE" GridPane.rowIndex="1">
|
||||
<tabs>
|
||||
<Tab text="Route Graph">
|
||||
<content>
|
||||
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
|
||||
<children>
|
||||
<BarChart fx:id="routeGraph" layoutX="37.0" prefHeight="436.0" prefWidth="800.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||
<xAxis>
|
||||
<CategoryAxis fx:id="routeXAxis" side="BOTTOM" />
|
||||
</xAxis>
|
||||
<yAxis>
|
||||
<NumberAxis fx:id="routeYAxis" side="LEFT" />
|
||||
</yAxis>
|
||||
</BarChart>
|
||||
</children>
|
||||
</AnchorPane>
|
||||
</content>
|
||||
</Tab>
|
||||
<Tab text="Country Graph">
|
||||
<content>
|
||||
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
|
||||
<children>
|
||||
<BarChart fx:id="countryGraph" layoutX="156.0" layoutY="-10.0" prefHeight="436.0" prefWidth="800.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||
<xAxis>
|
||||
<CategoryAxis side="BOTTOM" />
|
||||
</xAxis>
|
||||
<yAxis>
|
||||
<NumberAxis side="LEFT" />
|
||||
</yAxis>
|
||||
</BarChart>
|
||||
</children>
|
||||
</AnchorPane>
|
||||
</content>
|
||||
</Tab>
|
||||
<Tab text="Equipment Graph">
|
||||
<content>
|
||||
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
|
||||
<children>
|
||||
<BarChart fx:id="equipGraph" layoutX="69.0" layoutY="8.0" prefHeight="436.0" prefWidth="800.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||
<xAxis>
|
||||
<CategoryAxis side="BOTTOM" />
|
||||
</xAxis>
|
||||
<yAxis>
|
||||
<NumberAxis side="LEFT" />
|
||||
</yAxis>
|
||||
</BarChart>
|
||||
</children>
|
||||
</AnchorPane>
|
||||
</content>
|
||||
</Tab>
|
||||
</tabs>
|
||||
</TabPane>
|
||||
<Button mnemonicParsing="false" onAction="#goToRawData" prefHeight="25.0" prefWidth="100.0" text="Change Data" GridPane.halignment="LEFT" GridPane.rowIndex="2" GridPane.valignment="TOP">
|
||||
<GridPane.margin>
|
||||
<Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
|
||||
</GridPane.margin>
|
||||
</Button>
|
||||
<ScrollPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
|
||||
<content>
|
||||
<VBox fx:id="chartContainer" prefHeight="200.0" prefWidth="100.0" />
|
||||
</content>
|
||||
</ScrollPane>
|
||||
</children>
|
||||
</GridPane>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.scene.chart.*?>
|
||||
<?import java.lang.*?>
|
||||
<?import javafx.geometry.*?>
|
||||
<?import javafx.scene.control.*?>
|
||||
@@ -42,7 +43,7 @@
|
||||
</Button>
|
||||
<ScrollPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
|
||||
<content>
|
||||
<VBox fx:id="chartContainer" prefHeight="200.0" prefWidth="100.0" />
|
||||
<VBox fx:id="chartContainer" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="463.0" prefWidth="798.0" />
|
||||
</content>
|
||||
</ScrollPane>
|
||||
</children>
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
</Button>
|
||||
<ScrollPane prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1">
|
||||
<content>
|
||||
<VBox fx:id="chartContainer" prefHeight="200.0" prefWidth="100.0" />
|
||||
<VBox fx:id="chartContainer" prefHeight="463.0" prefWidth="798.0" />
|
||||
</content>
|
||||
</ScrollPane>
|
||||
</children>
|
||||
|
||||
Reference in New Issue
Block a user