Fixed merge conflict

main
Sunguin Peng 9 years ago
commit c0a9ac63ac

@ -13,8 +13,9 @@ public enum SceneCode {
AIRPORT_ADD("airport_add_form.fxml"), AIRPORT_FILTER("airport_filter_form.fxml"), ROUTE_ADD("route_add_form.fxml"),
ROUTE_FILTER("route_filter_form.fxml"), AIRLINE_EDIT("airline_edit_form.fxml"), AIRPORT_EDIT("airport_edit_form.fxml"),
ROUTE_EDIT("route_edit_form.fxml"), FLIGHT_EDITOR("flight_editor_form.fxml"), DATASET_CONTROLLER("dataset_editor.fxml"), HELP("help.fxml"),
FLIGHT_ADD("flight_add_form.fxml"), ROUTE_BY_AIRPORT("airport_map_routes.fxml"), ROUTE_BY_EQUIP("route_by_equip.fxml"),
FLIGHT_PATH_ADD("new_flight_path.fxml");
FLIGHT_ADD("flight_add_form.fxml"), ROUTE_BY_AIRPORT("airport_map_routes.fxml"), ROUTE_BY_EQUIP("route_by_equip.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"), FLIGHT_PATH_ADD("new_flight_path.fxml");
private String filePath;

@ -6,6 +6,7 @@ import seng202.group9.Core.Airline;
import seng202.group9.Core.FlightPoint;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
/**
@ -13,6 +14,7 @@ import java.util.HashMap;
* Users last session state is store here.
*/
public class Session implements Serializable {
private SceneCode sceneDisplayed;
private int currentFlightPointID;
@ -20,6 +22,51 @@ public class Session implements Serializable {
private HashMap<Integer, String> filteredAirlines;
private HashMap<Integer, String> filteredAirports;
private HashMap<Integer, String> filteredRoutes;
private String selectedgraphagainst;
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;
}
public void setSelectedDataToGraph(String selectedDataToGraph) {
this.selectedDataToGraph = selectedDataToGraph;
}
public String getSelectedgraphagainst() {
return selectedgraphagainst;
}
public void setSelectedgraphagainst(String selectedgraphagainst) {
this.selectedgraphagainst = selectedgraphagainst;
}
public String getSelectedgraphoptions() {
return selectedgraphoptions;
}
public void setSelectedgraphoptions(String selectedgraphoptions) {
this.selectedgraphoptions = selectedgraphoptions;
}
public Boolean getUsefilter() {
return usefilter;
}
public void setUsefilter(Boolean usefilter) {
this.usefilter = usefilter;
}
private String airlineToEdit;
private String airportToEdit;

@ -1,81 +0,0 @@
package seng202.group9.GUI;
import javafx.fxml.FXML;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.PieChart;
import javafx.scene.chart.XYChart;
import seng202.group9.Controller.App;
import seng202.group9.Controller.Dataset;
import seng202.group9.Core.Airline;
import java.util.ArrayList;
import java.util.HashMap;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.chart.*;
import javafx.scene.Group;
import seng202.group9.Core.Airport;
/**
* 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 17/09/2016.
*/
public class AirportAnalyser extends Controller {
//links fxml parts to the controller.
@FXML
PieChart pieGraph;
//Used to store the data needed for making the graph.
private Dataset currentdata = null;
private HashMap<String, Integer> useddata = new HashMap<String, Integer>();
private ArrayList<Airport> current_routes;
/**
* Takes data from the current dataset and places it into the displayed pie graph.
*/
public void build_graph(){
//Takes Airports from the full dataset.
current_routes = currentdata.getAirports();
datasetup(current_routes);
//Turns the data into a usable list.
ObservableList<PieChart.Data> pieChartData = FXCollections.observableArrayList();
System.out.println(useddata.keySet().size());
for (String airport : useddata.keySet()){
Integer temp = useddata.get(airport);
pieChartData.add(new PieChart.Data(airport,temp));
}
//Gives the data to the graph.
pieGraph.setData(pieChartData);
}
/**
* Takes the raw list of routes and fills the used data dictionary with the appropriate data to be displayed
* @param current_air_ports
*/
private void datasetup(ArrayList<Airport> current_air_ports){
//Takes out the specified field then adds to the used data dict.
for (Airport entry : current_air_ports){
String 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);
}
}
}
/**
* Takes the current dataset then loads the data to the graph using build graph.
*/
public void load() {
if (!checkDataset()){
return;
}
currentdata = getParent().getCurrentDataset();
build_graph();
}
}

@ -132,7 +132,7 @@ public class AirportRDController extends Controller{
/**
* Analyses the current data and creates a graph based on the data.
* @see AirportAnalyser
* @see PieGraphController
*/
public void analyse_Button(){ replaceSceneContent(SceneCode.AIRPORT_ANALYSER);}

@ -0,0 +1,19 @@
package seng202.group9.GUI;
import seng202.group9.Controller.SceneCode;
/**
* Created by michael on 24/09/2016.
*/
public class AnalyserController extends Controller{
public void barGraphButton(){
replaceSceneContent(SceneCode.BAR_GRAPH_CHOOSER);
}
public void pieGraphButton(){
replaceSceneContent(SceneCode.PIE_GRAPH_CHOOSER);
}
public void load() {}
}

@ -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);
}
}

@ -0,0 +1,77 @@
package seng202.group9.GUI;
import javafx.beans.Observable;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import seng202.group9.Controller.SceneCode;
import seng202.group9.Controller.Session;
import java.util.ArrayList;
/**
* Created by michael on 24/09/2016.
*/
public class BarChooserController extends Controller{
@FXML
ChoiceBox datatypechooser;
@FXML
ListView graph_against;
@FXML
ListView graph_options;
@FXML
CheckBox usefilter;
ObservableList airportOptions = FXCollections.observableArrayList("Name", "ICAO", "IATA FFA", "Altitude",
"City", "Country");
ObservableList airlineOptions = FXCollections.observableArrayList("ID", "Name", "ICAO", "IATA", "Alias",
"Call Sign", "Active", "Country");
ObservableList routeOptions = FXCollections.observableArrayList("ID", "Stops", "Codeshare", "Equipment", "Airline",
"Departure Airport", "Arival airport");
ArrayList<ObservableList> allOptions = new ArrayList<ObservableList>();
public void buildGraph() {
Session currentsession = this.getParent().getSession();
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);
}
public void returnToSelection(){replaceSceneContent(SceneCode.PIE_GRAPH_CHOOSER);}
public void changeTables(){
int temp = datatypechooser.getSelectionModel().getSelectedIndex();
graph_against.setItems(allOptions.get(temp));
graph_options.setItems(allOptions.get(temp));
}
public void load(){
datatypechooser.setItems(FXCollections.observableArrayList("Airports","Airlines","Routes"));
datatypechooser.getSelectionModel().selectFirst();
datatypechooser.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
changeTables();
}
});
graph_against.setItems(airportOptions);
graph_against.getSelectionModel().selectFirst();
graph_options.setItems(airportOptions);
graph_options.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
graph_options.getSelectionModel().selectFirst();
allOptions.add(airportOptions);
allOptions.add(airlineOptions);
allOptions.add(routeOptions);
}
}

@ -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<Route> current_routes;
private Dataset currentdata = null;
private HashMap<String, ArrayList> useddata = new HashMap<String, ArrayList>();
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<Integer> 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<Airport> 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<Route> 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<Integer> temp = useddata.get(departs);
temp.add(1,temp.get(1)+1);
useddata.replace(departs,temp);
}else {
ArrayList<Integer> temp = new ArrayList<Integer>(2);
temp.add(0);
temp.add(1);
useddata.put(departs,temp);
}
if (useddata.containsKey(arives)){
ArrayList<Integer> temp = useddata.get(arives);
temp.add(0,temp.get(0)+1);
useddata.replace(arives,temp);
}else {
ArrayList<Integer> temp = new ArrayList<Integer>(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<Airport> 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<Airline> 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<Route> 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();
}
}

@ -67,6 +67,8 @@ public class MenuController extends Controller{
replaceSceneContent(SceneCode.ROUTE_SUMMARY);
}
public void viewAnalyserMain() { replaceSceneContent(SceneCode.ANALYSER_TAB);}
/**
* view Routes by the Destination / Arrival Airport
*/

@ -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(true);
replaceSceneContent(SceneCode.AIRPORT_ANALYSER);
}
public void backToSafety(){
replaceSceneContent(SceneCode.PIE_GRAPH_CHOOSER);
}
}

@ -0,0 +1,86 @@
package seng202.group9.GUI;
import javafx.beans.Observable;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import seng202.group9.Controller.SceneCode;
import seng202.group9.Controller.Session;
import java.util.ArrayList;
/**
* Created by michael on 24/09/2016.
*/
public class PieChooserController extends Controller{
@FXML
ChoiceBox datatypechooser;
@FXML
ListView graph_options;
@FXML
CheckBox usefilter;
ObservableList airportOptions = FXCollections.observableArrayList("Name", "ICAO", "IATA FFA", "Altitude",
"City", "Country");
ObservableList airlineOptions = FXCollections.observableArrayList("Name", "ICAO", "IATA", "Active", "Country");
ObservableList routeOptions = FXCollections.observableArrayList("Stops", "Codeshare", "Equipment", "Airline",
"Departure Airport", "Arival airport");
ArrayList<ObservableList> allOptions = new ArrayList<ObservableList>();
public void toBarGraphChooser(){replaceSceneContent(SceneCode.BAR_GRAPH_CHOOSER);}
public void buildGraph() {
Session currentsession = this.getParent().getSession();
ArrayList<String> temp = new ArrayList<String>();
currentsession.setSelectedDataToGraph(datatypechooser.getSelectionModel().getSelectedItem().toString());
currentsession.setSelectedgraphagainst(graph_options.getSelectionModel().getSelectedItem().toString());
currentsession.setUsefilter(usefilter.isSelected());
currentsession.setForceGraph(false);
replaceSceneContent(SceneCode.AIRPORT_ANALYSER);
}
public void changeTables(){
int temp = datatypechooser.getSelectionModel().getSelectedIndex();
graph_options.setItems(allOptions.get(temp));
}
public void load(){
datatypechooser.setItems(FXCollections.observableArrayList("Airports","Airlines","Routes"));
datatypechooser.getSelectionModel().selectFirst();
datatypechooser.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
changeTables();
}
});
graph_options.setItems(airportOptions);
graph_options.getSelectionModel().selectFirst();
allOptions.add(airportOptions);
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);
}
}
}

@ -0,0 +1,203 @@
package seng202.group9.GUI;
import javafx.fxml.FXML;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.PieChart;
import javafx.scene.chart.XYChart;
import seng202.group9.Controller.*;
import seng202.group9.Core.Airline;
import java.util.ArrayList;
import java.util.HashMap;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.chart.*;
import javafx.scene.Group;
import seng202.group9.Core.Airport;
import seng202.group9.Core.Route;
/**
* 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 17/09/2016.
*/
public class PieGraphController extends Controller {
//links fxml parts to the controller.
@FXML
PieChart pieGraph;
//Used to store the data needed for making the graph.
private Dataset currentdata = null;
private HashMap<String, Integer> useddata = new HashMap<String, Integer>();
private Session currentsession;
/**
* Takes data from the current dataset and places it into the displayed pie graph.
*/
public void build_graph(){
//Turns the data into a usable list.
ObservableList<PieChart.Data> pieChartData = FXCollections.observableArrayList();
System.out.println(useddata.keySet().size());
for (String airport : useddata.keySet()){
Integer temp = useddata.get(airport);
pieChartData.add(new PieChart.Data(airport,temp));
}
//Gives the data to the graph.
if (useddata.keySet().size() > 250 && currentsession.getForceGraph()){
replaceSceneContent(SceneCode.CHART_ERROR);
}
else{
pieGraph.setData(pieChartData);
}
}
/**
* Takes the raw list of routes and fills the used data dictionary with the appropriate data to be displayed
* @param current_air_ports
*/
private void datasetupCustomarAirport(ArrayList<Airport> 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 datasetupCustomarAirline(ArrayList<Airline> current_air_ports){
//Takes out the specified field then adds to the used data dict.
for (Airline 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") {
name = entry.getIATA();
} else if (currentsession.getSelectedgraphagainst() == "Country") {
name = entry.getCountryName();
} else if (currentsession.getSelectedgraphagainst() == "Active") {
name = entry.getActive();
}
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<Route> current_air_ports){
//Takes out the specified field then adds to the used data dict.
for (Route entry : current_air_ports){
String name = "Error";
if (currentsession.getSelectedgraphagainst() == "Stops") {
name = String.valueOf(entry.getStops());
}
else if (currentsession.getSelectedgraphagainst() == "Codeshare") {
name = entry.getCode();
}
else if (currentsession.getSelectedgraphagainst() == "Equipment") {
name = entry.getEquipment();
}
else if (currentsession.getSelectedgraphagainst() == "Airline") {
name = entry.getAirlineName();
}
else if (currentsession.getSelectedgraphagainst() == "Departure Airport") {
name = entry.getDepartureAirport();
}
else if (currentsession.getSelectedgraphagainst() == "Arival airport") {
name = entry.getArrivalAirport();
}
if (useddata.containsKey(name)){
int temp = useddata.get(name);
useddata.replace(name,temp+1);
}else {
Integer temp = 1;
useddata.put(name,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<Airport> 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<Airline> 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<Route> 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();
}
}

@ -1,94 +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<Route> current_routes;
private Dataset currentdata = null;
private HashMap<String, ArrayList> useddata = new HashMap<String, ArrayList>();
/**
* 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");
System.out.println(useddata.keySet().size());
for (String airport : useddata.keySet()){
ArrayList<Integer> 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 void datasetup(ArrayList<Route> 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<Integer> temp = useddata.get(departs);
temp.add(1,temp.get(1)+1);
useddata.replace(departs,temp);
}else {
ArrayList<Integer> temp = new ArrayList<Integer>(2);
temp.add(0);
temp.add(1);
useddata.put(departs,temp);
}
if (useddata.containsKey(arives)){
ArrayList<Integer> temp = useddata.get(arives);
temp.add(0,temp.get(0)+1);
useddata.replace(arives,temp);
}else {
ArrayList<Integer> temp = new ArrayList<Integer>(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() {
if (!checkDataset()){
return;
}
currentdata = getParent().getCurrentDataset();
build_graph();
}
}

@ -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;
@ -128,7 +127,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);

@ -8,7 +8,7 @@
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.text.Font?>
<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="568.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.45" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng202.group9.GUI.AirportAnalyser">
<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="568.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.45" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng202.group9.GUI.PieGraphController">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.web.*?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<?import javafx.scene.web.WebView?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng202.group9.GUI.AnalyserController">
<children>
<ScrollPane prefHeight="800.0" prefWidth="800.0">
<content>
<AnchorPane prefHeight="800.0" prefWidth="800.0">
<children>
<HBox alignment="CENTER" prefHeight="300.0" prefWidth="583.0" AnchorPane.topAnchor="25.0">
<children>
<AnchorPane prefHeight="300.0" prefWidth="330.0">
<children>
<Pane layoutY="-6.0" prefHeight="60.0" prefWidth="330.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<Text layoutX="21.0" layoutY="40.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Analyse Data">
<font>
<Font size="29.0" />
</font>
</Text>
</children>
</Pane>
<Button layoutX="165.0" layoutY="125.0" mnemonicParsing="false" onAction="#barGraphButton" text="Bar Graph" />
</children>
</AnchorPane>
<AnchorPane prefHeight="300.0" prefWidth="253.0">
<children>
<Pane layoutY="200.0" prefHeight="100.0" prefWidth="253.0">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</Pane>
<Pane prefHeight="200.0" prefWidth="253.0">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
<children>
<Button layoutX="191.0" layoutY="124.0" mnemonicParsing="false" onAction="#pieGraphButton" text="Pie Graph" />
</children>
</Pane>
</children>
</AnchorPane>
</children>
</HBox>
</children>
</AnchorPane>
</content>
</ScrollPane>
</children>
</VBox>

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng202.group9.GUI.BarChooserController">
<children>
<ScrollPane prefHeight="800.0" prefWidth="800.0">
<content>
<AnchorPane prefHeight="800.0" prefWidth="800.0">
<children>
<HBox alignment="CENTER" prefHeight="300.0" prefWidth="583.0" AnchorPane.topAnchor="25.0">
<children>
<AnchorPane prefHeight="300.0" prefWidth="330.0">
<children>
<Pane layoutY="-6.0" prefHeight="60.0" prefWidth="330.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<Text layoutX="21.0" layoutY="40.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Bar Graph">
<font>
<Font size="29.0" />
</font>
</Text>
</children>
</Pane>
<ListView fx:id="graph_against" layoutX="116.0" layoutY="150.0" prefHeight="200.0" prefWidth="200.0" />
</children>
</AnchorPane>
<AnchorPane prefHeight="300.0" prefWidth="253.0">
<children>
<Pane layoutY="200.0" prefHeight="100.0" prefWidth="253.0">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
<children>
<ListView fx:id="graph_options" layoutX="104.0" layoutY="-50.0" prefHeight="200.0" prefWidth="200.0" />
</children>
</Pane>
<Pane prefHeight="200.0" prefWidth="253.0">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
<children>
<ChoiceBox fx:id="datatypechooser" layoutY="14.0" prefWidth="150.0" />
</children>
</Pane>
</children>
</AnchorPane>
</children>
</HBox>
<Button layoutX="244.0" layoutY="400.0" mnemonicParsing="false" onAction="#buildGraph" text="Build Graph" />
<Button layoutX="400.0" layoutY="400.0" mnemonicParsing="false" onAction="#returnToSelection" text="Change Graph Type" />
<CheckBox fx:id="usefilter" layoutX="277.0" layoutY="449.0" mnemonicParsing="false" text="Use filters from Raw Data or here." />
</children>
</AnchorPane>
</content>
</ScrollPane>
</children>
</VBox>

@ -6,7 +6,6 @@
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.SeparatorMenuItem?>
<?import javafx.scene.layout.VBox?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng202.group9.GUI.MenuController">
@ -58,6 +57,7 @@
</items></Menu>
<Menu mnemonicParsing="false" text="Analysis">
<items>
<MenuItem mnemonicParsing="false" onAction="#viewAnalyserMain" text="Graphs" />
<MenuItem mnemonicParsing="false" onAction="#veiwDistCalc" text="Calculate distance between Airports" />
</items></Menu>
<Menu mnemonicParsing="false" text="Help">

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng202.group9.GUI.PieChooserController">
<children>
<AnchorPane prefHeight="800.0" prefWidth="800.0">
<children>
<HBox alignment="CENTER" prefHeight="300.0" prefWidth="583.0" AnchorPane.topAnchor="25.0">
<children>
<AnchorPane prefHeight="300.0" prefWidth="330.0">
<children>
<Pane layoutY="-6.0" prefHeight="60.0" prefWidth="330.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<Text layoutX="21.0" layoutY="40.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Pie Graph">
<font>
<Font size="29.0" />
</font>
</Text>
</children>
</Pane>
</children>
</AnchorPane>
<AnchorPane prefHeight="300.0" prefWidth="253.0">
<children>
<Pane prefHeight="200.0" prefWidth="253.0">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
<children>
<ChoiceBox fx:id="datatypechooser" layoutY="14.0" prefWidth="150.0" />
<Label layoutX="-6.0" layoutY="120.0" text="Values to be Graphed." />
<Label layoutX="15.0" layoutY="-7.0" text="Data Type Used" />
</children>
</Pane>
<ListView fx:id="graph_options" layoutY="155.0" prefHeight="200.0" prefWidth="200.0" />
</children>
</AnchorPane>
</children>
</HBox>
<Button layoutX="234.0" layoutY="413.0" mnemonicParsing="false" onAction="#buildGraph" text="Build Graph" />
<Button layoutX="346.0" layoutY="413.0" mnemonicParsing="false" onAction="#newFilter" text="New Filter" />
<Button layoutX="462.0" layoutY="413.0" mnemonicParsing="false" onAction="#toBarGraphChooser" text="Change Graph Type" />
<CheckBox fx:id="usefilter" layoutX="356.0" layoutY="464.0" mnemonicParsing="false" text="Use filters from Raw Data" />
</children>
</AnchorPane>
</children>
</VBox>

@ -10,7 +10,7 @@
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.text.Font?>
<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="568.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.45" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng202.group9.GUI.RouteAnalyser">
<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="568.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.45" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng202.group9.GUI.BarGraphController">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.45" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng202.group9.GUI.BarChartErrorController">
<children>
<ScrollPane prefHeight="800.0" prefWidth="800.0">
<content>
<AnchorPane prefHeight="800.0" prefWidth="800.0">
<children>
<HBox alignment="CENTER" prefHeight="300.0" prefWidth="583.0" AnchorPane.topAnchor="25.0">
<children>
<AnchorPane prefHeight="300.0" prefWidth="330.0">
<children>
<Pane layoutY="-6.0" prefHeight="60.0" prefWidth="330.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<Text layoutX="21.0" layoutY="40.0" strokeType="OUTSIDE" strokeWidth="0.0" text="You have entered too many options for our graph to safely handle. ">
<font>
<Font size="24.0" />
</font></Text>
</children>
</Pane>
<Button layoutX="100.0" layoutY="125.0" mnemonicParsing="false" onAction="#ignoredWarning" text="Continue? (May cause slowdown and display issues" />
</children>
</AnchorPane>
<AnchorPane prefHeight="300.0" prefWidth="253.0">
<children>
<Pane layoutY="200.0" prefHeight="100.0" prefWidth="253.0">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</Pane>
<Pane prefHeight="200.0" prefWidth="253.0">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
<children>
<Button layoutX="100.0" layoutY="124.0" mnemonicParsing="false" onAction="#backToSafety" text="Abort (Add more filters to fix.)" />
</children>
</Pane>
</children>
</AnchorPane>
</children>
</HBox>
</children>
</AnchorPane>
</content>
</ScrollPane>
</children>
</VBox>

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.45" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng202.group9.GUI.PieChartErrorController">
<children>
<ScrollPane prefHeight="800.0" prefWidth="800.0">
<content>
<AnchorPane prefHeight="800.0" prefWidth="800.0">
<children>
<HBox alignment="CENTER" prefHeight="300.0" prefWidth="583.0" AnchorPane.topAnchor="25.0">
<children>
<AnchorPane prefHeight="300.0" prefWidth="330.0">
<children>
<Pane layoutY="-6.0" prefHeight="60.0" prefWidth="330.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<Text layoutX="21.0" layoutY="40.0" strokeType="OUTSIDE" strokeWidth="0.0" text="You have entered too many options for our graph to safely handle. ">
<font>
<Font size="24.0" />
</font></Text>
</children>
</Pane>
<Button layoutX="100.0" layoutY="125.0" mnemonicParsing="false" onAction="#ignoredWarning" text="Continue? (May cause slowdown and display issues" />
</children>
</AnchorPane>
<AnchorPane prefHeight="300.0" prefWidth="253.0">
<children>
<Pane layoutY="200.0" prefHeight="100.0" prefWidth="253.0">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</Pane>
<Pane prefHeight="200.0" prefWidth="253.0">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
<children>
<Button layoutX="100.0" layoutY="124.0" mnemonicParsing="false" onAction="#backToSafety" text="Abort (Add more filters to fix.)" />
</children>
</Pane>
</children>
</AnchorPane>
</children>
</HBox>
</children>
</AnchorPane>
</content>
</ScrollPane>
</children>
</VBox>
Loading…
Cancel
Save