Merge remote-tracking branch 'remotes/origin/master' into WIP_Flight_Editor
# Conflicts: # res/userdb.db # src/main/java/seng202/group9/Controller/App.java # src/main/java/seng202/group9/Controller/Dataset.java # src/main/java/seng202/group9/Controller/SceneCode.java # src/main/java/seng202/group9/Controller/Session.java # src/main/java/seng202/group9/Core/FlightPath.java
This commit is contained in:
@@ -155,6 +155,10 @@ public class AirlineFilter extends Filter{
|
||||
return filteredList;
|
||||
}
|
||||
|
||||
// public ArrayList getBaseList(){
|
||||
// return baseArray;
|
||||
// }
|
||||
|
||||
/**
|
||||
* sets a new base list of the filter.
|
||||
* @param arrayList
|
||||
|
||||
@@ -139,6 +139,7 @@ public class App extends Application
|
||||
c.close();
|
||||
} catch ( Exception e ) {
|
||||
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,10 +167,10 @@ public class App extends Application
|
||||
return (Initializable) loader.getController();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current session.
|
||||
* @return
|
||||
*/
|
||||
/**
|
||||
* Gets the current session.
|
||||
* @return
|
||||
*/
|
||||
public Session getSession() {
|
||||
return this.session;
|
||||
}
|
||||
@@ -193,7 +194,7 @@ public class App extends Application
|
||||
/**
|
||||
* Sets the current Dataset to another Dataset by its index in the datasets arraylist
|
||||
* @param index
|
||||
*/
|
||||
*/
|
||||
public void setCurrentDataset(int index){
|
||||
currentDataset = datasets.get(index);
|
||||
}
|
||||
@@ -201,7 +202,7 @@ public class App extends Application
|
||||
/**
|
||||
* Sets the current Dataset to another Dataset.
|
||||
* @param dataset
|
||||
*/
|
||||
*/
|
||||
public void setCurrentDataset(Dataset dataset){
|
||||
currentDataset = dataset;
|
||||
}
|
||||
@@ -240,4 +241,4 @@ public class App extends Application
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,7 +9,9 @@ public enum SceneCode {
|
||||
AIRPORT_SUMMARY("airport_summary.fxml"), AIRPORT_RAW_DATA("airport_raw_data.fxml"),
|
||||
ROUTE_SUMMARY("routes_summary.fxml"), ROUTE_RAW_DATA("route_raw_data.fxml"), FLIGHT_SUMMARY("flight_data_summary.fxml"),
|
||||
FLIGHT_RAW_DATA("flight_raw_data.fxml"), AIRPORT_ANALYSER("airport_analyser.fxml"), ROUTE_ANALYSER("route_analyser.fxml"),
|
||||
AIRPORT_DIST_CALC("airport_dist_calc.fxml"), FLIGHT_EDITOR("flight_editor_form.fxml");
|
||||
AIRPORT_DIST_CALC("airport_dist_calc.fxml"), AIRLINE_ADD("airline_add_form.fxml"), AIRLINE_FILTER("airline_filter_form.fxml"),
|
||||
AIRPORT_ADD("airport_add_form.fxml"), AIRPORT_FILTER("airport_filter_form.fxml"), ROUTE_ADD("route_add_form.fxml"),
|
||||
ROUTE_FILTER("route_filter_form.fxml"), FLIGHT_EDITOR("flight_editor_form.fxml");
|
||||
|
||||
private String filePath;
|
||||
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
package seng202.group9.Controller;
|
||||
|
||||
import javafx.collections.ObservableList;
|
||||
import seng202.group9.Core.Airline;
|
||||
|
||||
import seng202.group9.Core.FlightPoint;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* Created by fwy13 on 16/09/16.
|
||||
@@ -12,6 +16,9 @@ public class Session implements Serializable {
|
||||
private SceneCode sceneDisplayed;
|
||||
private int currentFlightPointID;
|
||||
private int currentFlightPathID;
|
||||
private HashMap<Integer, String> filteredAirlines;
|
||||
private HashMap<Integer, String> filteredAirports;
|
||||
private HashMap<Integer, String> filteredRoutes;
|
||||
|
||||
/**
|
||||
* Constructor for a new session
|
||||
@@ -45,6 +52,30 @@ public class Session implements Serializable {
|
||||
return sceneDisplayed;
|
||||
}
|
||||
|
||||
public void setFilteredAirlines(HashMap airlines) {
|
||||
this.filteredAirlines = airlines;
|
||||
}
|
||||
|
||||
public HashMap<Integer, String> getFilteredAirlines() {
|
||||
return filteredAirlines;
|
||||
}
|
||||
|
||||
public void setFilteredAirports(HashMap airports) {
|
||||
this.filteredAirports = airports;
|
||||
}
|
||||
|
||||
public HashMap<Integer, String> getFilteredAirports() {
|
||||
return filteredAirports;
|
||||
}
|
||||
|
||||
public void setFilteredRoutes(HashMap routes) {
|
||||
this.filteredRoutes = routes;
|
||||
}
|
||||
|
||||
public HashMap<Integer, String> getFilteredRoutes() {
|
||||
return filteredRoutes;
|
||||
}
|
||||
|
||||
/**
|
||||
* sets the current flight point
|
||||
* @param currentFlightPointID
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
package seng202.group9.GUI;
|
||||
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.Alert;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.stage.Stage;
|
||||
import seng202.group9.Controller.Dataset;
|
||||
|
||||
/**
|
||||
* Created by Sunguin on 2016/09/22.
|
||||
*/
|
||||
public class AirlineAddController extends Controller {
|
||||
//Setting up text fields for adding data
|
||||
@FXML
|
||||
private TextField airlNameAdd;
|
||||
@FXML
|
||||
private TextField airlAliasAdd;
|
||||
@FXML
|
||||
private TextField airlIATAAdd;
|
||||
@FXML
|
||||
private TextField airlICAOAdd;
|
||||
@FXML
|
||||
private TextField airlCallsignAdd;
|
||||
@FXML
|
||||
private TextField airlCountryAdd;
|
||||
@FXML
|
||||
private TextField airlActiveAdd;
|
||||
@FXML
|
||||
private Button addButton;
|
||||
|
||||
private Dataset theDataSet = null;
|
||||
|
||||
/**
|
||||
* Adds a single airline entry to the database.
|
||||
* Takes in values from the GUI the user has typed in.
|
||||
* @see Dataset
|
||||
*/
|
||||
public void addAirlineSingle() {
|
||||
//Tries to add a new airline and clears the fields to their initial state if successful.
|
||||
//Otherwise an error message will pop up with what is wrong with the manual data.
|
||||
|
||||
try {
|
||||
theDataSet.addAirline(
|
||||
airlNameAdd.getText(),
|
||||
airlAliasAdd.getText(),
|
||||
airlIATAAdd.getText(),
|
||||
airlICAOAdd.getText(),
|
||||
airlCallsignAdd.getText(),
|
||||
airlCountryAdd.getText(),
|
||||
airlActiveAdd.getText());
|
||||
airlNameAdd.clear();
|
||||
airlAliasAdd.clear();
|
||||
airlIATAAdd.clear();
|
||||
airlICAOAdd.clear();
|
||||
airlCallsignAdd.clear();
|
||||
airlCountryAdd.clear();
|
||||
airlActiveAdd.clear();
|
||||
|
||||
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
||||
alert.setTitle("Airline Add Successful");
|
||||
alert.setHeaderText("New Airline added!");
|
||||
alert.setContentText("Your new airline has been successfully added into the database.");
|
||||
alert.showAndWait();
|
||||
|
||||
Stage stage = (Stage) addButton.getScene().getWindow();
|
||||
stage.close();
|
||||
|
||||
} catch (Exception e) {
|
||||
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||
alert.setTitle("Airline Data Error");
|
||||
alert.setHeaderText("Error adding a custom airline entry.");
|
||||
alert.setContentText(e.getMessage());
|
||||
alert.showAndWait();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void load() {
|
||||
theDataSet = getParent().getCurrentDataset();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
package seng202.group9.GUI;
|
||||
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.Alert;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.stage.Stage;
|
||||
import seng202.group9.Controller.AirlineFilter;
|
||||
import seng202.group9.Controller.Dataset;
|
||||
import seng202.group9.Controller.Session;
|
||||
import seng202.group9.Core.Airline;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* Created by Sunguin on 2016/09/22.
|
||||
*/
|
||||
public class AirlineFilterController extends Controller {
|
||||
|
||||
//Setting up text fields for filtering data
|
||||
@FXML
|
||||
private TextField airlNameFilter;
|
||||
@FXML
|
||||
private TextField airlAliasFilter;
|
||||
@FXML
|
||||
private TextField airlIATAFilter;
|
||||
@FXML
|
||||
private TextField airlICAOFilter;
|
||||
@FXML
|
||||
private TextField airlCallsignFilter;
|
||||
@FXML
|
||||
private TextField airlCountryFilter;
|
||||
@FXML
|
||||
private TextField airlActiveFilter;
|
||||
@FXML
|
||||
private Button applyButton;
|
||||
|
||||
private Dataset theDataSet = null;
|
||||
private Session currentSession = null;
|
||||
|
||||
/**
|
||||
* Filters airlines by any field.
|
||||
* These are specified by what the user has typed in the filter boxes.
|
||||
* Updates the GUI accordingly.
|
||||
* @see AirlineFilter
|
||||
*/
|
||||
public void filterAirlines() {
|
||||
//The filter function also operates like a search function
|
||||
AirlineFilter filter = new AirlineFilter(theDataSet.getAirlines());
|
||||
if (airlNameFilter.getText() != null) {
|
||||
filter.filterName(airlNameFilter.getText());
|
||||
}
|
||||
if (airlAliasFilter.getText() != null) {
|
||||
filter.filterAlias(airlAliasFilter.getText());
|
||||
}
|
||||
if (airlIATAFilter.getText() != null) {
|
||||
filter.filterIATA(airlIATAFilter.getText());
|
||||
}
|
||||
if (airlICAOFilter.getText() != null) {
|
||||
filter.filterICAO(airlICAOFilter.getText());
|
||||
}
|
||||
if (airlCallsignFilter.getText() != null) {
|
||||
filter.filterCallsign(airlCallsignFilter.getText());
|
||||
}
|
||||
if (airlCountryFilter.getText() != null) {
|
||||
filter.filterCountry(airlCountryFilter.getText());
|
||||
}
|
||||
if (airlActiveFilter.getText() != null) {
|
||||
filter.filterActive(airlActiveFilter.getText());
|
||||
}
|
||||
|
||||
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
||||
alert.setTitle("Airline Filter Successful");
|
||||
alert.setHeaderText("Airline data filtered!");
|
||||
alert.setContentText("Your airline data has been successfully filtered.");
|
||||
alert.showAndWait();
|
||||
|
||||
//currentSession.setFilteredAirlines(FXCollections.observableArrayList(filter.getFilteredData()));
|
||||
|
||||
HashMap<Integer, String> airlinesHM = new HashMap<Integer, String>();
|
||||
ArrayList<Airline> airlines = filter.getFilteredData();
|
||||
//for (Airline airline: airlines) {
|
||||
for (int index = 0; index < airlines.size(); index++) {
|
||||
airlinesHM.put(index, airlines.get(index).getName());
|
||||
}
|
||||
currentSession.setFilteredAirlines(airlinesHM);
|
||||
|
||||
Stage stage = (Stage) applyButton.getScene().getWindow();
|
||||
stage.close();
|
||||
}
|
||||
|
||||
public void load() {
|
||||
theDataSet = getParent().getCurrentDataset();
|
||||
currentSession = getParent().getSession();
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,17 @@
|
||||
package seng202.group9.GUI;
|
||||
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.control.cell.PropertyValueFactory;
|
||||
import seng202.group9.Controller.AirlineFilter;
|
||||
import seng202.group9.Controller.Dataset;
|
||||
import seng202.group9.Controller.*;
|
||||
import seng202.group9.Core.Airline;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Optional;
|
||||
|
||||
|
||||
/**
|
||||
* The GUI controller class for airline_raw_data.fxml.
|
||||
@@ -20,56 +23,26 @@ public class AirlineRDController extends Controller {
|
||||
@FXML
|
||||
private TableView<Airline> tableViewAirlineRD;
|
||||
@FXML
|
||||
private TableColumn<Airline, String> airlIDcol;
|
||||
private TableColumn<Airline, String> airlIDCol;
|
||||
@FXML
|
||||
private TableColumn<Airline, String> airlNamecol;
|
||||
private TableColumn<Airline, String> airlNameCol;
|
||||
@FXML
|
||||
private TableColumn<Airline, String> airlAliascol;
|
||||
private TableColumn<Airline, String> airlAliasCol;
|
||||
@FXML
|
||||
private TableColumn<Airline, String> airlIATAcol;
|
||||
private TableColumn<Airline, String> airlIATACol;
|
||||
@FXML
|
||||
private TableColumn<Airline, String> airlICAOcol;
|
||||
private TableColumn<Airline, String> airlICAOCol;
|
||||
@FXML
|
||||
private TableColumn<Airline, String> airlCallsigncol;
|
||||
private TableColumn<Airline, String> airlCallsignCol;
|
||||
@FXML
|
||||
private TableColumn<Airline, String> airlCountrycol;
|
||||
private TableColumn<Airline, String> airlCountryCol;
|
||||
@FXML
|
||||
private TableColumn<Airline, String> airlActivecol;
|
||||
private TableColumn<Airline, String> airlActiveCol;
|
||||
|
||||
//Setting up text fields for adding data
|
||||
@FXML
|
||||
private TextField airlNameBox;
|
||||
@FXML
|
||||
private TextField airlAliasBox;
|
||||
@FXML
|
||||
private TextField airlIATABox;
|
||||
@FXML
|
||||
private TextField airlICAOBox;
|
||||
@FXML
|
||||
private TextField airlCallsignBox;
|
||||
@FXML
|
||||
private TextField airlCountryBox;
|
||||
@FXML
|
||||
private ComboBox<String> airlActiveCBox;
|
||||
|
||||
//Setting up text fields for filtering data
|
||||
@FXML
|
||||
private TextField airlNameFilter;
|
||||
@FXML
|
||||
private TextField airlAliasFilter;
|
||||
@FXML
|
||||
private TextField airlIATAFilter;
|
||||
@FXML
|
||||
private TextField airlICAOFilter;
|
||||
@FXML
|
||||
private TextField airlCallsignFilter;
|
||||
@FXML
|
||||
private TextField airlCountryFilter;
|
||||
@FXML
|
||||
private TextField airlActiveFilter;
|
||||
|
||||
//Set an empty Dataset to be assigned later.
|
||||
//Set an empty Dataset to be assigned to the current dataset.
|
||||
private Dataset theDataSet = null;
|
||||
//Set an empty session to be assigned to the current session.
|
||||
private Session currentSession = null;
|
||||
|
||||
/**
|
||||
* Loads the initial airline data to the GUI table.
|
||||
@@ -77,59 +50,48 @@ public class AirlineRDController extends Controller {
|
||||
*/
|
||||
public void load() {
|
||||
//Sets up the table columns to be ready for use for Airline data
|
||||
airlIDcol.setCellValueFactory(new PropertyValueFactory<Airline, String>("ID"));
|
||||
airlNamecol.setCellValueFactory(new PropertyValueFactory<Airline, String>("Name"));
|
||||
airlAliascol.setCellValueFactory(new PropertyValueFactory<Airline, String>("Alias"));
|
||||
airlIATAcol.setCellValueFactory(new PropertyValueFactory<Airline, String>("IATA"));
|
||||
airlICAOcol.setCellValueFactory(new PropertyValueFactory<Airline, String>("ICAO"));
|
||||
airlCallsigncol.setCellValueFactory(new PropertyValueFactory<Airline, String>("CallSign"));
|
||||
airlCountrycol.setCellValueFactory(new PropertyValueFactory<Airline, String>("CountryName"));
|
||||
airlActivecol.setCellValueFactory(new PropertyValueFactory<Airline, String>("Active"));
|
||||
airlIDCol.setCellValueFactory(new PropertyValueFactory<Airline, String>("ID"));
|
||||
airlNameCol.setCellValueFactory(new PropertyValueFactory<Airline, String>("Name"));
|
||||
airlAliasCol.setCellValueFactory(new PropertyValueFactory<Airline, String>("Alias"));
|
||||
airlIATACol.setCellValueFactory(new PropertyValueFactory<Airline, String>("IATA"));
|
||||
airlICAOCol.setCellValueFactory(new PropertyValueFactory<Airline, String>("ICAO"));
|
||||
airlCallsignCol.setCellValueFactory(new PropertyValueFactory<Airline, String>("CallSign"));
|
||||
airlCountryCol.setCellValueFactory(new PropertyValueFactory<Airline, String>("CountryName"));
|
||||
airlActiveCol.setCellValueFactory(new PropertyValueFactory<Airline, String>("Active"));
|
||||
|
||||
//Assigning the Dataset to the current Dataset's airlines and displaying it in a table
|
||||
theDataSet = getParent().getCurrentDataset();
|
||||
tableViewAirlineRD.setItems(FXCollections.observableArrayList(theDataSet.getAirlines()));
|
||||
currentSession = getParent().getSession();
|
||||
|
||||
//Initializes the value for the drop-down menu for Active for adding a new Airline
|
||||
airlActiveCBox.setValue("Y");
|
||||
airlActiveCBox.getItems().addAll("Y", "N");
|
||||
tableViewAirlineRD.setItems(FXCollections.observableArrayList(theDataSet.getAirlines()));
|
||||
tableViewAirlineRD.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Opens the Airline add form.
|
||||
*/
|
||||
public void openAdd() {
|
||||
createPopUpStage(SceneCode.AIRLINE_ADD, 600, 370);
|
||||
tableViewAirlineRD.setItems(FXCollections.observableArrayList(theDataSet.getAirlines()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a single airline entry to the database.
|
||||
* Takes in values from the GUI the user has typed in.
|
||||
* @see Dataset
|
||||
* Opens the Airline Filter form.
|
||||
*/
|
||||
public void addAirlineSingle() {
|
||||
//Tries to add a new airline and clears the fields to their initial state if successful.
|
||||
//Otherwise an error message will pop up with what is wrong with the manual data.
|
||||
try {
|
||||
theDataSet.addAirline(
|
||||
airlNameBox.getText(),
|
||||
airlAliasBox.getText(),
|
||||
airlIATABox.getText(),
|
||||
airlICAOBox.getText(),
|
||||
airlCallsignBox.getText(),
|
||||
airlCountryBox.getText(),
|
||||
airlActiveCBox.getSelectionModel().getSelectedItem().toString());
|
||||
airlNameBox.clear();
|
||||
airlAliasBox.clear();
|
||||
airlIATABox.clear();
|
||||
airlICAOBox.clear();
|
||||
airlCallsignBox.clear();
|
||||
airlCountryBox.clear();
|
||||
airlActiveCBox.getSelectionModel().clearSelection();
|
||||
airlActiveCBox.setValue("Y");
|
||||
tableViewAirlineRD.setItems(FXCollections.observableArrayList(theDataSet.getAirlines()));
|
||||
} catch ( Exception e ) {
|
||||
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||
alert.setTitle("Airline Data Error");
|
||||
alert.setHeaderText("Error adding a custom airline entry.");
|
||||
alert.setContentText(e.getMessage());
|
||||
alert.showAndWait();
|
||||
public void openFilter() {
|
||||
createPopUpStage(SceneCode.AIRLINE_FILTER, 600, 370);
|
||||
ArrayList<Airline> d = new ArrayList();
|
||||
for(int i = 0; i < theDataSet.getAirlines().size(); i++) {
|
||||
if (currentSession.getFilteredAirlines().containsValue(theDataSet.getAirlines().get(i).getName())
|
||||
&& currentSession.getFilteredAirlines().containsKey(i)) {
|
||||
d.add(theDataSet.getAirlines().get(i));
|
||||
}
|
||||
}
|
||||
tableViewAirlineRD.setItems(FXCollections.observableArrayList(d));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Deletes a single selected airline entry from the database.
|
||||
* Updates the GUI accordingly.
|
||||
@@ -137,44 +99,23 @@ public class AirlineRDController extends Controller {
|
||||
*/
|
||||
public void deleteAirline() {
|
||||
//Gets an airline from the table and deletes it before updating the table
|
||||
Airline toDelete = tableViewAirlineRD.getSelectionModel().getSelectedItem();
|
||||
theDataSet.deleteAirline(toDelete);
|
||||
tableViewAirlineRD.setItems(FXCollections.observableArrayList(theDataSet.getAirlines()));
|
||||
ObservableList<Airline> toDelete = tableViewAirlineRD.getSelectionModel().getSelectedItems();
|
||||
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
|
||||
alert.setTitle("Airline Delete Confirmation");
|
||||
alert.setHeaderText("You are about to delete some data.");
|
||||
alert.setContentText("Are you sure you want to delete the selected airline(s)?");
|
||||
//alert.showAndWait();
|
||||
Optional<ButtonType> result = alert.showAndWait();
|
||||
Airline air = null;
|
||||
if (result.isPresent() && result.get() == ButtonType.OK) {
|
||||
for (int i = 0; i < toDelete.size(); i++) {
|
||||
air = toDelete.get(i);
|
||||
theDataSet.deleteAirline(air);
|
||||
}
|
||||
tableViewAirlineRD.setItems(FXCollections.observableArrayList(theDataSet.getAirlines()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters airlines by any field.
|
||||
* These are specified by what the user has typed in the filter boxes.
|
||||
* Updates the GUI accordingly.
|
||||
* @see AirlineFilter
|
||||
*/
|
||||
public void filterAirlines() {
|
||||
//The filter function also operates like a search function
|
||||
AirlineFilter filter = new AirlineFilter(theDataSet.getAirlines());
|
||||
if (airlNameFilter.getText() != null) {
|
||||
filter.filterName(airlNameFilter.getText());
|
||||
}
|
||||
if (airlAliasFilter.getText() != null) {
|
||||
filter.filterAlias(airlAliasFilter.getText());
|
||||
}
|
||||
if (airlIATAFilter.getText() != null) {
|
||||
filter.filterIATA(airlIATAFilter.getText());
|
||||
}
|
||||
if (airlICAOFilter.getText() != null) {
|
||||
filter.filterICAO(airlICAOFilter.getText());
|
||||
}
|
||||
if (airlCallsignFilter.getText() != null) {
|
||||
filter.filterCallsign(airlCallsignFilter.getText());
|
||||
}
|
||||
if (airlCountryFilter.getText() != null) {
|
||||
filter.filterCountry(airlCountryFilter.getText());
|
||||
}
|
||||
if (airlActiveFilter.getText() != null) {
|
||||
filter.filterActive(airlActiveFilter.getText());
|
||||
}
|
||||
//Sets the data according to the criteria specified by the user.
|
||||
tableViewAirlineRD.setItems(FXCollections.<Airline>observableArrayList(filter.getFilteredData()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Analyses the current data and creates a graph based on the data.
|
||||
@@ -183,4 +124,8 @@ public class AirlineRDController extends Controller {
|
||||
public void analyse_Button() {
|
||||
JOptionPane.showMessageDialog(null, "This is not Implemented yet");
|
||||
}
|
||||
|
||||
public void airlineSummaryButton() {
|
||||
replaceSceneContent(SceneCode.AIRLINE_SUMMARY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
package seng202.group9.GUI;
|
||||
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.Alert;
|
||||
import javafx.scene.control.ComboBox;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.stage.Stage;
|
||||
import seng202.group9.Controller.Dataset;
|
||||
import seng202.group9.Controller.Session;
|
||||
|
||||
/**
|
||||
* Created by Sunguin on 2016/09/22.
|
||||
*/
|
||||
public class AirportAddController extends Controller {
|
||||
//Setting up text fields for adding data
|
||||
@FXML
|
||||
private TextField airpNameAdd;
|
||||
@FXML
|
||||
private TextField airpCityAdd;
|
||||
@FXML
|
||||
private TextField airpCountryAdd;
|
||||
@FXML
|
||||
private TextField airpIATAFAAAdd;
|
||||
@FXML
|
||||
private TextField airpICAOAdd;
|
||||
@FXML
|
||||
private TextField airpLatitudeAdd;
|
||||
@FXML
|
||||
private TextField airpLongitudeAdd;
|
||||
@FXML
|
||||
private TextField airpAltitudeAdd;
|
||||
@FXML
|
||||
private TextField airpTimezoneAdd;
|
||||
@FXML
|
||||
private TextField airpDSTAdd;
|
||||
@FXML
|
||||
private TextField airpTzAdd;
|
||||
@FXML
|
||||
private TextField addButton;
|
||||
|
||||
//Set an empty Dataset to be assigned later
|
||||
private Dataset theDataSet = null;
|
||||
|
||||
/**
|
||||
* Adds a single airport entry in the database.
|
||||
* Takes in values from the GUI the user has typed in.
|
||||
* @see Dataset
|
||||
*/
|
||||
public void addAirportSingle() {
|
||||
//Tries to add a new airport and clears the fields to their initial state if successful.
|
||||
//Otherwise an error message will pop up with what is wrong with the manual data.
|
||||
try {
|
||||
theDataSet.addAirport(
|
||||
airpNameAdd.getText(),
|
||||
airpCityAdd.getText(),
|
||||
airpCountryAdd.getText(),
|
||||
airpIATAFAAAdd.getText(),
|
||||
airpICAOAdd.getText(),
|
||||
airpLatitudeAdd.getText(),
|
||||
airpLongitudeAdd.getText(),
|
||||
airpAltitudeAdd.getText(),
|
||||
airpTimezoneAdd.getText(),
|
||||
airpDSTAdd.getText(),
|
||||
airpTzAdd.getText());
|
||||
airpNameAdd.clear();
|
||||
airpCityAdd.clear();
|
||||
airpCountryAdd.clear();
|
||||
airpIATAFAAAdd.clear();
|
||||
airpICAOAdd.clear();
|
||||
airpLatitudeAdd.clear();
|
||||
airpLongitudeAdd.clear();
|
||||
airpAltitudeAdd.clear();
|
||||
airpTimezoneAdd.clear();
|
||||
airpDSTAdd.clear();
|
||||
airpTzAdd.clear();
|
||||
|
||||
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
||||
alert.setTitle("Airport Add Successful");
|
||||
alert.setHeaderText("New Airport added!");
|
||||
alert.setContentText("Your new airport has been successfully added into the database.");
|
||||
alert.showAndWait();
|
||||
|
||||
Stage stage = (Stage) addButton.getScene().getWindow();
|
||||
stage.close();
|
||||
|
||||
} catch ( Exception e ) {
|
||||
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||
alert.setTitle("Airport Data Error");
|
||||
alert.setHeaderText("Error adding a custom airport entry.");
|
||||
alert.setContentText(e.getMessage());
|
||||
alert.showAndWait();
|
||||
}
|
||||
}
|
||||
|
||||
public void load() {
|
||||
theDataSet = getParent().getCurrentDataset();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
package seng202.group9.GUI;
|
||||
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.Alert;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.stage.Stage;
|
||||
import seng202.group9.Controller.AirportFilter;
|
||||
import seng202.group9.Controller.Dataset;
|
||||
import seng202.group9.Controller.Session;
|
||||
import seng202.group9.Core.Airport;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* Created by Sunguin on 2016/09/22.
|
||||
*/
|
||||
public class AirportFilterController extends Controller {
|
||||
//Setting up text fields for filtering data
|
||||
@FXML
|
||||
private TextField airpNameFilter;
|
||||
@FXML
|
||||
private TextField airpCityFilter;
|
||||
@FXML
|
||||
private TextField airpCountryFilter;
|
||||
@FXML
|
||||
private TextField airpIATAFAAFilter;
|
||||
@FXML
|
||||
private TextField airpICAOFilter;
|
||||
@FXML
|
||||
private TextField airpLatitudeFilter;
|
||||
@FXML
|
||||
private TextField airpLongitudeFilter;
|
||||
@FXML
|
||||
private TextField airpAltitudeFilter;
|
||||
@FXML
|
||||
private TextField airpTimezoneFilter;
|
||||
@FXML
|
||||
private TextField airpDSTFilter;
|
||||
@FXML
|
||||
private TextField airpTzFilter;
|
||||
@FXML
|
||||
private Button applyButton;
|
||||
|
||||
//Set an empty Dataset to be assigned later
|
||||
private Dataset theDataSet = null;
|
||||
//Set an empty session to be assigned to the current session.
|
||||
private Session currentSession = null;
|
||||
|
||||
/**
|
||||
* Filters the airports table by any field.
|
||||
* These are specified by what the user has typed in the filter boxes.
|
||||
* Updates the GUI accordingly.
|
||||
* @see AirportFilter
|
||||
*/
|
||||
public void filterAirports() {
|
||||
//The filter function also operates like a search function
|
||||
AirportFilter filter = new AirportFilter(theDataSet.getAirports());
|
||||
if (airpNameFilter.getText() != null) {
|
||||
filter.filterName(airpNameFilter.getText());
|
||||
}
|
||||
if (airpCityFilter.getText() != null) {
|
||||
filter.filterCity(airpCityFilter.getText());
|
||||
}
|
||||
if (airpCountryFilter.getText() != null) {
|
||||
filter.filterCountry(airpCountryFilter.getText());
|
||||
}
|
||||
if (airpIATAFAAFilter.getText() != null) {
|
||||
filter.filterIATA_FFA(airpIATAFAAFilter.getText());
|
||||
}
|
||||
if (airpICAOFilter.getText() != null) {
|
||||
filter.filterICAO(airpICAOFilter.getText());
|
||||
}
|
||||
if (airpLatitudeFilter.getText() != null) {
|
||||
filter.filterLatitude(airpLatitudeFilter.getText());
|
||||
}
|
||||
if (airpLongitudeFilter.getText() != null) {
|
||||
filter.filterLongitude(airpLongitudeFilter.getText());
|
||||
}
|
||||
if (airpAltitudeFilter.getText() != null) {
|
||||
filter.filterAltitude(airpAltitudeFilter.getText());
|
||||
}
|
||||
if (airpTimezoneFilter.getText() != null) {
|
||||
filter.filterTimezone(airpTimezoneFilter.getText());
|
||||
}
|
||||
if (airpDSTFilter.getText() != null) {
|
||||
filter.filterDST(airpDSTFilter.getText());
|
||||
}
|
||||
if (airpTzFilter.getText() != null) {
|
||||
filter.filterOlson(airpTzFilter.getText());
|
||||
}
|
||||
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
||||
alert.setTitle("Airline Filter Successful");
|
||||
alert.setHeaderText("Airline data filtered!");
|
||||
alert.setContentText("Your airline data has been successfully filtered.");
|
||||
alert.showAndWait();
|
||||
|
||||
//currentSession.setFilteredAirlines(FXCollections.observableArrayList(filter.getFilteredData()));
|
||||
|
||||
HashMap<Integer, String> airportsHM = new HashMap<Integer, String>();
|
||||
ArrayList<Airport> airports = filter.getFilteredData();
|
||||
for (int index = 0; index < airports.size(); index++) {
|
||||
airportsHM.put(index, airports.get(index).getName());
|
||||
}
|
||||
currentSession.setFilteredAirports(airportsHM);
|
||||
|
||||
Stage stage = (Stage) applyButton.getScene().getWindow();
|
||||
stage.close();
|
||||
}
|
||||
|
||||
public void load() {
|
||||
theDataSet = getParent().getCurrentDataset();
|
||||
currentSession = getParent().getSession();
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,19 @@
|
||||
package seng202.group9.GUI;
|
||||
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.control.cell.PropertyValueFactory;
|
||||
import seng202.group9.Controller.AirportFilter;
|
||||
import seng202.group9.Controller.Dataset;
|
||||
import seng202.group9.Controller.SceneCode;
|
||||
import seng202.group9.Controller.Session;
|
||||
import seng202.group9.Core.Airport;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Optional;
|
||||
|
||||
import static javafx.collections.FXCollections.observableArrayList;
|
||||
|
||||
/**
|
||||
@@ -21,80 +26,34 @@ public class AirportRDController extends Controller{
|
||||
@FXML
|
||||
private TableView<Airport> tableViewAirportRD;
|
||||
@FXML
|
||||
private TableColumn<Airport, String> airpIDcol;
|
||||
private TableColumn<Airport, String> airpIDCol;
|
||||
@FXML
|
||||
private TableColumn<Airport, String> airpNamecol;
|
||||
private TableColumn<Airport, String> airpNameCol;
|
||||
@FXML
|
||||
private TableColumn<Airport, String> airpCitycol;
|
||||
private TableColumn<Airport, String> airpCityCol;
|
||||
@FXML
|
||||
private TableColumn<Airport, String> airpCountrycol;
|
||||
private TableColumn<Airport, String> airpCountryCol;
|
||||
@FXML
|
||||
private TableColumn<Airport, String> airpIATAFFAcol;
|
||||
private TableColumn<Airport, String> airpIATAFFACol;
|
||||
@FXML
|
||||
private TableColumn<Airport, String> airpICAOcol;
|
||||
private TableColumn<Airport, String> airpICAOCol;
|
||||
@FXML
|
||||
private TableColumn<Airport, String> airpLatitudecol;
|
||||
private TableColumn<Airport, String> airpLatitudeCol;
|
||||
@FXML
|
||||
private TableColumn<Airport, String> airpLongitudecol;
|
||||
private TableColumn<Airport, String> airpLongitudeCol;
|
||||
@FXML
|
||||
private TableColumn<Airport, String> airpAltitudecol;
|
||||
private TableColumn<Airport, String> airpAltitudeCol;
|
||||
@FXML
|
||||
private TableColumn<Airport, String> airpTimezonecol;
|
||||
private TableColumn<Airport, String> airpTimezoneCol;
|
||||
@FXML
|
||||
private TableColumn<Airport, String> airpDSTcol;
|
||||
private TableColumn<Airport, String> airpDSTCol;
|
||||
@FXML
|
||||
private TableColumn<Airport, String> airpTzcol;
|
||||
|
||||
//Setting up text fields for adding data
|
||||
@FXML
|
||||
private TextField airpNameBox;
|
||||
@FXML
|
||||
private TextField airpCityBox;
|
||||
@FXML
|
||||
private TextField airpCountryBox;
|
||||
@FXML
|
||||
private TextField airpIATAFFABox;
|
||||
@FXML
|
||||
private TextField airpICAOBox;
|
||||
@FXML
|
||||
private TextField airpLatitudeBox;
|
||||
@FXML
|
||||
private TextField airpLongitudeBox;
|
||||
@FXML
|
||||
private TextField airpAltitudeBox;
|
||||
@FXML
|
||||
private TextField airpTimezoneBox;
|
||||
@FXML
|
||||
private ComboBox<String> airpDSTCBox;
|
||||
@FXML
|
||||
private TextField airpTzBox;
|
||||
|
||||
//Setting up text fields for filtering data
|
||||
@FXML
|
||||
private TextField airpNameFilter;
|
||||
@FXML
|
||||
private TextField airpCityFilter;
|
||||
@FXML
|
||||
private TextField airpCountryFilter;
|
||||
@FXML
|
||||
private TextField airpIATAFFAFilter;
|
||||
@FXML
|
||||
private TextField airpICAOFilter;
|
||||
@FXML
|
||||
private TextField airpLatitudeFilter;
|
||||
@FXML
|
||||
private TextField airpLongitudeFilter;
|
||||
@FXML
|
||||
private TextField airpAltitudeFilter;
|
||||
@FXML
|
||||
private TextField airpTimezoneFilter;
|
||||
@FXML
|
||||
private TextField airpDSTFilter;
|
||||
@FXML
|
||||
private TextField airpTzFilter;
|
||||
private TableColumn<Airport, String> airpTzCol;
|
||||
|
||||
//Set an empty Dataset to be assigned later
|
||||
private Dataset theDataSet = null;
|
||||
//Set an empty session to be assigned to the current session.
|
||||
private Session currentSession = null;
|
||||
|
||||
/**
|
||||
* Loads the initial airport data to the GUI table.
|
||||
@@ -102,68 +61,42 @@ public class AirportRDController extends Controller{
|
||||
*/
|
||||
public void load() {
|
||||
//Sets up the table columns to be ready for use for Airport data
|
||||
airpIDcol.setCellValueFactory(new PropertyValueFactory<Airport, String>("ID"));
|
||||
airpNamecol.setCellValueFactory(new PropertyValueFactory<Airport, String>("Name"));
|
||||
airpCitycol.setCellValueFactory(new PropertyValueFactory<Airport, String>("CityName"));
|
||||
airpCountrycol.setCellValueFactory(new PropertyValueFactory<Airport, String>("CountryName"));
|
||||
airpIATAFFAcol.setCellValueFactory(new PropertyValueFactory<Airport, String>("IATA_FFA"));
|
||||
airpICAOcol.setCellValueFactory(new PropertyValueFactory<Airport, String>("ICAO"));
|
||||
airpLatitudecol.setCellValueFactory(new PropertyValueFactory<Airport, String>("Latitude"));
|
||||
airpLongitudecol.setCellValueFactory(new PropertyValueFactory<Airport, String>("Longitude"));
|
||||
airpAltitudecol.setCellValueFactory(new PropertyValueFactory<Airport, String> ("Altitude"));
|
||||
airpTimezonecol.setCellValueFactory(new PropertyValueFactory<Airport, String>("Timezone"));
|
||||
airpDSTcol.setCellValueFactory(new PropertyValueFactory<Airport, String>("DST"));
|
||||
airpTzcol.setCellValueFactory(new PropertyValueFactory<Airport, String>("Tz"));
|
||||
airpIDCol.setCellValueFactory(new PropertyValueFactory<Airport, String>("ID"));
|
||||
airpNameCol.setCellValueFactory(new PropertyValueFactory<Airport, String>("Name"));
|
||||
airpCityCol.setCellValueFactory(new PropertyValueFactory<Airport, String>("CityName"));
|
||||
airpCountryCol.setCellValueFactory(new PropertyValueFactory<Airport, String>("CountryName"));
|
||||
airpIATAFFACol.setCellValueFactory(new PropertyValueFactory<Airport, String>("IATA_FFA"));
|
||||
airpICAOCol.setCellValueFactory(new PropertyValueFactory<Airport, String>("ICAO"));
|
||||
airpLatitudeCol.setCellValueFactory(new PropertyValueFactory<Airport, String>("Latitude"));
|
||||
airpLongitudeCol.setCellValueFactory(new PropertyValueFactory<Airport, String>("Longitude"));
|
||||
airpAltitudeCol.setCellValueFactory(new PropertyValueFactory<Airport, String> ("Altitude"));
|
||||
airpTimezoneCol.setCellValueFactory(new PropertyValueFactory<Airport, String>("Timezone"));
|
||||
airpDSTCol.setCellValueFactory(new PropertyValueFactory<Airport, String>("DST"));
|
||||
airpTzCol.setCellValueFactory(new PropertyValueFactory<Airport, String>("Tz"));
|
||||
|
||||
//Assigning the Dataset to the current Dataset's airports and displaying it in a table
|
||||
theDataSet = getParent().getCurrentDataset();
|
||||
currentSession = getParent().getSession();
|
||||
|
||||
tableViewAirportRD.setItems(observableArrayList(theDataSet.getAirports()));
|
||||
|
||||
|
||||
airpDSTCBox.setValue("E");//Initializes the value for the drop-down menu for DST for adding a new Airport
|
||||
airpDSTCBox.getItems().addAll("E", "A", "S", "O", "Z", "N", "U");
|
||||
tableViewAirportRD.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a single airport entry in the database.
|
||||
* Takes in values from the GUI the user has typed in.
|
||||
* @see Dataset
|
||||
*/
|
||||
public void addAirportSingle() {
|
||||
//Tries to add a new airport and clears the fields to their initial state if successful.
|
||||
//Otherwise an error message will pop up with what is wrong with the manual data.
|
||||
try {
|
||||
theDataSet.addAirport(
|
||||
airpNameBox.getText(),
|
||||
airpCityBox.getText(),
|
||||
airpCountryBox.getText(),
|
||||
airpIATAFFABox.getText(),
|
||||
airpICAOBox.getText(),
|
||||
airpLatitudeBox.getText(),
|
||||
airpLongitudeBox.getText(),
|
||||
airpAltitudeBox.getText(),
|
||||
airpTimezoneBox.getText(),
|
||||
airpDSTCBox.getSelectionModel().getSelectedItem().toString(),
|
||||
airpTzBox.getText());
|
||||
airpCityBox.clear();
|
||||
airpCountryBox.clear();
|
||||
airpIATAFFABox.clear();
|
||||
airpICAOBox.clear();
|
||||
airpLatitudeBox.clear();
|
||||
airpLongitudeBox.clear();
|
||||
airpAltitudeBox.clear();
|
||||
airpTimezoneBox.clear();
|
||||
airpDSTCBox.getSelectionModel().clearSelection();
|
||||
airpDSTCBox.setValue("E");
|
||||
airpTzBox.clear();
|
||||
tableViewAirportRD.setItems(FXCollections.observableArrayList(theDataSet.getAirports()));
|
||||
} catch ( Exception e ) {
|
||||
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||
alert.setTitle("Airport Data Error");
|
||||
alert.setHeaderText("Error adding a custom airport entry.");
|
||||
alert.setContentText(e.getMessage());
|
||||
alert.showAndWait();
|
||||
public void openAdd() {
|
||||
createPopUpStage(SceneCode.AIRPORT_ADD, 600, 480);
|
||||
tableViewAirportRD.setItems(FXCollections.observableArrayList(theDataSet.getAirports()));
|
||||
}
|
||||
|
||||
public void openFilter() {
|
||||
createPopUpStage(SceneCode.AIRPORT_FILTER, 600, 480);
|
||||
ArrayList<Airport> d = new ArrayList();
|
||||
for(int i = 0; i < theDataSet.getAirports().size(); i++) {
|
||||
if (currentSession.getFilteredAirports().containsValue(theDataSet.getAirports().get(i).getName())
|
||||
&& currentSession.getFilteredAirports().containsKey(i)) {
|
||||
d.add(theDataSet.getAirports().get(i));
|
||||
}
|
||||
}
|
||||
tableViewAirportRD.setItems(FXCollections.observableArrayList(d));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -173,60 +106,35 @@ public class AirportRDController extends Controller{
|
||||
*/
|
||||
public void deleteAirport(){
|
||||
//Gets an airport from the table and deletes it before updating the table
|
||||
Airport toDelete = tableViewAirportRD.getSelectionModel().getSelectedItem();
|
||||
theDataSet.deleteAirport(toDelete);
|
||||
tableViewAirportRD.setItems(observableArrayList(theDataSet.getAirports()));
|
||||
// Airport toDelete = tableViewAirportRD.getSelectionModel().getSelectedItem();
|
||||
// theDataSet.deleteAirport(toDelete);
|
||||
// tableViewAirportRD.setItems(observableArrayList(theDataSet.getAirports()));
|
||||
|
||||
ObservableList<Airport> toDelete = tableViewAirportRD.getSelectionModel().getSelectedItems();
|
||||
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
|
||||
alert.setTitle("Airport Delete Confirmation");
|
||||
alert.setHeaderText("You are about to delete some data.");
|
||||
alert.setContentText("Are you sure you want to delete the selected airport(s)?");
|
||||
//alert.showAndWait();
|
||||
Optional<ButtonType> result = alert.showAndWait();
|
||||
Airport air = null;
|
||||
if (result.isPresent() && result.get() == ButtonType.OK) {
|
||||
for (int i = 0; i < toDelete.size(); i++) {
|
||||
air = toDelete.get(i);
|
||||
theDataSet.deleteAirport(air);
|
||||
}
|
||||
tableViewAirportRD.setItems(FXCollections.observableArrayList(theDataSet.getAirports()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters the airports table by any field.
|
||||
* These are specified by what the user has typed in the filter boxes.
|
||||
* Updates the GUI accordingly.
|
||||
* @see AirportFilter
|
||||
*/
|
||||
public void filterAirports() {
|
||||
//The filter function also operates like a search function
|
||||
AirportFilter filter = new AirportFilter(theDataSet.getAirports());
|
||||
if (airpNameFilter.getText() != null) {
|
||||
filter.filterName(airpNameFilter.getText());
|
||||
}
|
||||
if (airpCityFilter.getText() != null) {
|
||||
filter.filterCity(airpCityFilter.getText());
|
||||
}
|
||||
if (airpCountryFilter.getText() != null) {
|
||||
filter.filterCountry(airpCountryFilter.getText());
|
||||
}
|
||||
if (airpIATAFFAFilter.getText() != null) {
|
||||
filter.filterIATA_FFA(airpIATAFFAFilter.getText());
|
||||
}
|
||||
if (airpICAOFilter.getText() != null) {
|
||||
filter.filterICAO(airpICAOFilter.getText());
|
||||
}
|
||||
if (airpLatitudeFilter.getText() != null) {
|
||||
filter.filterLatitude(airpLatitudeFilter.getText());
|
||||
}
|
||||
if (airpLongitudeFilter.getText() != null) {
|
||||
filter.filterLongitude(airpLongitudeFilter.getText());
|
||||
}
|
||||
if (airpAltitudeFilter.getText() != null) {
|
||||
filter.filterAltitude(airpAltitudeFilter.getText());
|
||||
}
|
||||
if (airpTimezoneFilter.getText() != null) {
|
||||
filter.filterTimezone(airpTimezoneFilter.getText());
|
||||
}
|
||||
if (airpDSTFilter.getText() != null) {
|
||||
filter.filterDST(airpDSTFilter.getText());
|
||||
}
|
||||
if (airpTzFilter.getText() != null) {
|
||||
filter.filterOlson(airpTzFilter.getText());
|
||||
}
|
||||
//Sets the data according to the criteria specified by the user
|
||||
tableViewAirportRD.setItems(FXCollections.<Airport>observableArrayList(filter.getFilteredData()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Analyses the current data and creates a graph based on the data.
|
||||
* @see AirportAnalyser
|
||||
*/
|
||||
public void analyse_Button(){ replaceSceneContent(SceneCode.AIRPORT_ANALYSER);}
|
||||
|
||||
public void airportSummaryButton() {
|
||||
replaceSceneContent(SceneCode.AIRPORT_SUMMARY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
package seng202.group9.GUI;
|
||||
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.Alert;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.ComboBox;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.stage.Stage;
|
||||
import seng202.group9.Controller.Dataset;
|
||||
|
||||
/**
|
||||
* Created by Sunguin on 2016/09/23.
|
||||
*/
|
||||
public class RouteAddController extends Controller {
|
||||
//Setting up text fields for adding data
|
||||
@FXML
|
||||
private TextField rAirlineAdd;
|
||||
@FXML
|
||||
private TextField rSourceAdd;
|
||||
@FXML
|
||||
private TextField rDestAdd;
|
||||
@FXML
|
||||
private TextField rCodeshareAdd;
|
||||
@FXML
|
||||
private TextField rStopsAdd;
|
||||
@FXML
|
||||
private TextField rEquipmentAdd;
|
||||
@FXML
|
||||
private Button addButton;
|
||||
|
||||
private Dataset theDataSet = null;
|
||||
|
||||
/**
|
||||
* Adds a single route entry in the database.
|
||||
* Takes in values from the GUI the user has typed in.
|
||||
* @see Dataset
|
||||
*/
|
||||
public void addRouteSingle() {
|
||||
//Tries to add a new route and clears the fields to their initial state if successful.
|
||||
//Otherwise an error message will pop up with what is wrong with the manual data.
|
||||
try {
|
||||
theDataSet.addRoute(
|
||||
rAirlineAdd.getText(),
|
||||
rSourceAdd.getText(),
|
||||
rDestAdd.getText(),
|
||||
rCodeshareAdd.getText(),
|
||||
rStopsAdd.getText(),
|
||||
rEquipmentAdd.getText()
|
||||
);
|
||||
rAirlineAdd.clear();
|
||||
rSourceAdd.clear();
|
||||
rDestAdd.clear();
|
||||
rCodeshareAdd.clear();
|
||||
rStopsAdd.clear();
|
||||
rEquipmentAdd.clear();
|
||||
|
||||
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
||||
alert.setTitle("Route Add Successful");
|
||||
alert.setHeaderText("New Route added!");
|
||||
alert.setContentText("Your new route has been successfully added into the database.");
|
||||
alert.showAndWait();
|
||||
|
||||
Stage stage = (Stage) addButton.getScene().getWindow();
|
||||
stage.close();
|
||||
|
||||
} catch ( Exception e ) {
|
||||
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||
alert.setTitle("Route Data Error");
|
||||
alert.setHeaderText("Error adding a custom route entry.");
|
||||
alert.setContentText(e.getMessage());
|
||||
alert.showAndWait();
|
||||
}
|
||||
}
|
||||
|
||||
public void load() {
|
||||
theDataSet = getParent().getCurrentDataset();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
package seng202.group9.GUI;
|
||||
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.Alert;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.stage.Stage;
|
||||
import seng202.group9.Controller.Dataset;
|
||||
import seng202.group9.Controller.RouteFilter;
|
||||
import seng202.group9.Controller.Session;
|
||||
import seng202.group9.Core.Route;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* Created by Sunguin on 2016/09/23.
|
||||
*/
|
||||
public class RouteFilterController extends Controller {
|
||||
//Setting up text fields for filtering data
|
||||
@FXML
|
||||
private TextField rAirlineFilter;
|
||||
@FXML
|
||||
private TextField rSourceFilter;
|
||||
@FXML
|
||||
private TextField rDestFilter;
|
||||
@FXML
|
||||
private TextField rCodeshareFilter;
|
||||
@FXML
|
||||
private TextField rStopsFilter;
|
||||
@FXML
|
||||
private TextField rEquipmentFilter;
|
||||
@FXML
|
||||
private Button applyButton;
|
||||
|
||||
private Dataset theDataSet = null;
|
||||
//Set an empty session to be assigned to the current session.
|
||||
private Session currentSession = null;
|
||||
|
||||
/**
|
||||
* Filters the routes table by any field.
|
||||
* These are specified by what the user has typed in the filter boxes.
|
||||
* Updates the GUI accordingly.
|
||||
* @see RouteFilter
|
||||
*/
|
||||
public void filterRoutes(){
|
||||
//The filter function also operates like a search function
|
||||
RouteFilter filter = new RouteFilter(theDataSet.getRoutes());
|
||||
if (rAirlineFilter.getText() != null) {
|
||||
filter.filterAirline(rAirlineFilter.getText());
|
||||
}
|
||||
if (rSourceFilter.getText() != null) {
|
||||
filter.filterSourceAirport(rSourceFilter.getText());
|
||||
}
|
||||
if (rDestFilter.getText() != null) {
|
||||
filter.filterDestinationAirport(rDestFilter.getText());
|
||||
}
|
||||
if (rCodeshareFilter.getText() != null) {
|
||||
filter.filterCodeshare(rCodeshareFilter.getText());
|
||||
}
|
||||
if (rStopsFilter.getText() != null) {
|
||||
filter.filterDestinationStops(rStopsFilter.getText());
|
||||
}
|
||||
if (rEquipmentFilter.getText() != null) {
|
||||
filter.filterEquipment(rEquipmentFilter.getText());
|
||||
}
|
||||
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
||||
alert.setTitle("Route Filter Successful");
|
||||
alert.setHeaderText("Route data filtered!");
|
||||
alert.setContentText("Your route data has been successfully filtered.");
|
||||
alert.showAndWait();
|
||||
|
||||
//currentSession.setFilteredAirlines(FXCollections.observableArrayList(filter.getFilteredData()));
|
||||
|
||||
HashMap<Integer, String> routesHM = new HashMap<Integer, String>();
|
||||
ArrayList<Route> routes = filter.getFilteredData();
|
||||
for (int index = 0; index < routes.size(); index++) {
|
||||
routesHM.put(index, routes.get(index).getAirlineName());
|
||||
}
|
||||
currentSession.setFilteredRoutes(routesHM);
|
||||
|
||||
Stage stage = (Stage) applyButton.getScene().getWindow();
|
||||
stage.close();
|
||||
}
|
||||
|
||||
public void load() {
|
||||
theDataSet = getParent().getCurrentDataset();
|
||||
currentSession = getParent().getSession();
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,19 @@
|
||||
package seng202.group9.GUI;
|
||||
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.fxml.FXML;
|
||||
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;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* The GUI controller class for route_raw_data.fxml.
|
||||
* Extends from the abstract class {@link Controller}.
|
||||
@@ -37,36 +42,10 @@ public class RouteRDController extends Controller {
|
||||
@FXML
|
||||
private TableColumn<Route, String> rEquipmentCol;
|
||||
|
||||
//Setting up text fields for adding data
|
||||
@FXML
|
||||
private TextField rAirlineBox;
|
||||
@FXML
|
||||
private TextField rSourceBox;
|
||||
@FXML
|
||||
private TextField rDestBox;
|
||||
@FXML
|
||||
private ComboBox<String> rCodeshareCBox;
|
||||
@FXML
|
||||
private TextField rStopsBox;
|
||||
@FXML
|
||||
private TextField rEquipmentBox;
|
||||
|
||||
//Setting up text fields for filtering data
|
||||
@FXML
|
||||
private TextField rAirlineFilter;
|
||||
@FXML
|
||||
private TextField rSourceFilter;
|
||||
@FXML
|
||||
private TextField rDestFilter;
|
||||
@FXML
|
||||
private TextField rCodeshareFilter;
|
||||
@FXML
|
||||
private TextField rStopsFilter;
|
||||
@FXML
|
||||
private TextField rEquipmentFilter;
|
||||
|
||||
//Set an empty Dataset to be assigned later
|
||||
private Dataset theDataSet = null;
|
||||
//Set an empty session to be assigned to the current session.
|
||||
private Session currentSession = null;
|
||||
|
||||
/**
|
||||
* Loads the initial route data to the GUI table.
|
||||
@@ -86,45 +65,27 @@ public class RouteRDController extends Controller {
|
||||
|
||||
//Assigning the Dataset to the current Dataset's routes and displaying it in a table
|
||||
theDataSet = getParent().getCurrentDataset();
|
||||
tableViewRouteRD.setItems(FXCollections.observableArrayList(theDataSet.getRoutes()));
|
||||
currentSession = getParent().getSession();
|
||||
|
||||
//Initializes the value for the drop-down menu for Codeshare for adding a new Route
|
||||
rCodeshareCBox.setValue("");
|
||||
rCodeshareCBox.getItems().addAll("Y", "");
|
||||
tableViewRouteRD.setItems(FXCollections.observableArrayList(theDataSet.getRoutes()));
|
||||
tableViewRouteRD.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a single route entry in the database.
|
||||
* Takes in values from the GUI the user has typed in.
|
||||
* @see Dataset
|
||||
*/
|
||||
public void addRouteSingle() {
|
||||
//Tries to add a new route and clears the fields to their initial state if successful.
|
||||
//Otherwise an error message will pop up with what is wrong with the manual data.
|
||||
try {
|
||||
theDataSet.addRoute(
|
||||
rAirlineBox.getText(),
|
||||
rSourceBox.getText(),
|
||||
rDestBox.getText(),
|
||||
rCodeshareCBox.getSelectionModel().getSelectedItem().toString(),
|
||||
rStopsBox.getText(),
|
||||
rEquipmentBox.getText()
|
||||
);
|
||||
rAirlineBox.clear();
|
||||
rSourceBox.clear();
|
||||
rDestBox.clear();
|
||||
rCodeshareCBox.getSelectionModel().clearSelection();
|
||||
rCodeshareCBox.setValue("");
|
||||
rStopsBox.clear();
|
||||
rEquipmentBox.clear();
|
||||
tableViewRouteRD.setItems(FXCollections.observableArrayList(theDataSet.getRoutes()));
|
||||
} catch ( Exception e ) {
|
||||
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||
alert.setTitle("Route Data Error");
|
||||
alert.setHeaderText("Error adding a custom route entry.");
|
||||
alert.setContentText(e.getMessage());
|
||||
alert.showAndWait();
|
||||
public void openAdd() {
|
||||
createPopUpStage(SceneCode.ROUTE_ADD, 600, 330);
|
||||
tableViewRouteRD.setItems(FXCollections.observableArrayList(theDataSet.getRoutes()));
|
||||
}
|
||||
|
||||
public void openFilter() {
|
||||
createPopUpStage(SceneCode.ROUTE_FILTER, 600, 330);
|
||||
ArrayList<Route> d = new ArrayList();
|
||||
for(int i = 0; i < theDataSet.getRoutes().size(); i++) {
|
||||
if (currentSession.getFilteredRoutes().containsValue(theDataSet.getRoutes().get(i).getAirlineName())
|
||||
&& currentSession.getFilteredRoutes().containsKey(i)) {
|
||||
d.add(theDataSet.getRoutes().get(i));
|
||||
}
|
||||
}
|
||||
tableViewRouteRD.setItems(FXCollections.observableArrayList(d));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -132,43 +93,25 @@ public class RouteRDController extends Controller {
|
||||
* Updates the GUI accordingly.
|
||||
* @see Dataset
|
||||
*/
|
||||
public void deleteRoute(){
|
||||
public void deleteRoute() {
|
||||
//Gets a route from the table and deletes it before updating the table
|
||||
Route toDelete = tableViewRouteRD.getSelectionModel().getSelectedItem();
|
||||
theDataSet.deleteRoute(toDelete);
|
||||
tableViewRouteRD.setItems(FXCollections.observableArrayList(theDataSet.getRoutes()));
|
||||
ObservableList<Route> toDelete = tableViewRouteRD.getSelectionModel().getSelectedItems();
|
||||
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
|
||||
alert.setTitle("Route Delete Confirmation");
|
||||
alert.setHeaderText("You are about to delete some data.");
|
||||
alert.setContentText("Are you sure you want to delete the selected route(s)?");
|
||||
//alert.showAndWait();
|
||||
Optional<ButtonType> result = alert.showAndWait();
|
||||
Route air = null;
|
||||
if (result.isPresent() && result.get() == ButtonType.OK) {
|
||||
for (int i = 0; i < toDelete.size(); i++) {
|
||||
air = toDelete.get(i);
|
||||
theDataSet.deleteRoute(air);
|
||||
}
|
||||
tableViewRouteRD.setItems(FXCollections.observableArrayList(theDataSet.getRoutes()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters the routes table by any field.
|
||||
* These are specified by what the user has typed in the filter boxes.
|
||||
* Updates the GUI accordingly.
|
||||
* @see RouteFilter
|
||||
*/
|
||||
public void filterRoutes(){
|
||||
//The filter function also operates like a search function
|
||||
RouteFilter filter = new RouteFilter(theDataSet.getRoutes());
|
||||
if (rAirlineFilter.getText() != null) {
|
||||
filter.filterAirline(rAirlineFilter.getText());
|
||||
}
|
||||
if (rSourceFilter.getText() != null) {
|
||||
filter.filterSourceAirport(rSourceFilter.getText());
|
||||
}
|
||||
if (rDestFilter.getText() != null) {
|
||||
filter.filterDestinationAirport(rDestFilter.getText());
|
||||
}
|
||||
if (rCodeshareFilter.getText() != null) {
|
||||
filter.filterCodeshare(rCodeshareFilter.getText());
|
||||
}
|
||||
if (rStopsFilter.getText() != null) {
|
||||
filter.filterDestinationStops(rStopsFilter.getText());
|
||||
}
|
||||
if (rEquipmentFilter.getText() != null) {
|
||||
filter.filterEquipment(rEquipmentFilter.getText());
|
||||
}
|
||||
//Sets the data according to the criteria specified by the user
|
||||
tableViewRouteRD.setItems(FXCollections.<Route>observableArrayList(filter.getFilteredData()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Analyses the current data and creates a graph based on the data.
|
||||
@@ -177,4 +120,9 @@ public class RouteRDController extends Controller {
|
||||
public void analyse_Button() {
|
||||
replaceSceneContent(SceneCode.ROUTE_ANALYSER);
|
||||
}
|
||||
|
||||
public void routeSummaryButton() {
|
||||
replaceSceneContent(SceneCode.ROUTE_SUMMARY);
|
||||
currentSession = getParent().getSession();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user