Made Route Graph Work

main
YaFedImYaEatIm 9 years ago
parent 6cea9f938f
commit 1eeb859744

@ -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 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<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>

Loading…
Cancel
Save