diff --git a/src/main/java/seng202/group9/Controller/AirlineFilter.java b/src/main/java/seng202/group9/Controller/AirlineFilter.java index dc1e149..a13bbad 100644 --- a/src/main/java/seng202/group9/Controller/AirlineFilter.java +++ b/src/main/java/seng202/group9/Controller/AirlineFilter.java @@ -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 diff --git a/src/main/java/seng202/group9/Controller/App.java b/src/main/java/seng202/group9/Controller/App.java index 0dabc03..8744e05 100644 --- a/src/main/java/seng202/group9/Controller/App.java +++ b/src/main/java/seng202/group9/Controller/App.java @@ -166,8 +166,16 @@ public class App extends Application return (Initializable) loader.getController(); } + /** + * Gets the current session. + * @return + */ + public Session getSession() { + return this.session; + } + /** - * Returns the Menu COntroller of the App. + * Returns the Menu Controller of the App. * @return */ public MenuController getMenuController() { diff --git a/src/main/java/seng202/group9/Controller/SceneCode.java b/src/main/java/seng202/group9/Controller/SceneCode.java index de69752..588369c 100644 --- a/src/main/java/seng202/group9/Controller/SceneCode.java +++ b/src/main/java/seng202/group9/Controller/SceneCode.java @@ -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"); + 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"); private String filePath; diff --git a/src/main/java/seng202/group9/Controller/Session.java b/src/main/java/seng202/group9/Controller/Session.java index cea2041..c63461d 100644 --- a/src/main/java/seng202/group9/Controller/Session.java +++ b/src/main/java/seng202/group9/Controller/Session.java @@ -1,6 +1,10 @@ package seng202.group9.Controller; +import javafx.collections.ObservableList; +import seng202.group9.Core.Airline; + import java.io.Serializable; +import java.util.HashMap; /** * Created by fwy13 on 16/09/16. @@ -8,6 +12,9 @@ import java.io.Serializable; */ public class Session implements Serializable { private SceneCode sceneDisplayed; + private HashMap filteredAirlines; + private HashMap filteredAirports; + private HashMap filteredRoutes; /** * Constructor for a new session @@ -40,4 +47,28 @@ public class Session implements Serializable { public SceneCode getSceneDisplayed() { return sceneDisplayed; } + + public void setFilteredAirlines(HashMap airlines) { + this.filteredAirlines = airlines; + } + + public HashMap getFilteredAirlines() { + return filteredAirlines; + } + + public void setFilteredAirports(HashMap airports) { + this.filteredAirports = airports; + } + + public HashMap getFilteredAirports() { + return filteredAirports; + } + + public void setFilteredRoutes(HashMap routes) { + this.filteredRoutes = routes; + } + + public HashMap getFilteredRoutes() { + return filteredRoutes; + } } diff --git a/src/main/java/seng202/group9/GUI/AirlineAddController.java b/src/main/java/seng202/group9/GUI/AirlineAddController.java new file mode 100644 index 0000000..8d08691 --- /dev/null +++ b/src/main/java/seng202/group9/GUI/AirlineAddController.java @@ -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(); + } +} diff --git a/src/main/java/seng202/group9/GUI/AirlineFilterController.java b/src/main/java/seng202/group9/GUI/AirlineFilterController.java new file mode 100644 index 0000000..7a6b88c --- /dev/null +++ b/src/main/java/seng202/group9/GUI/AirlineFilterController.java @@ -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 airlinesHM = new HashMap(); + ArrayList 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(); + } +} diff --git a/src/main/java/seng202/group9/GUI/AirlineRDController.java b/src/main/java/seng202/group9/GUI/AirlineRDController.java index 12bcef9..020d07d 100644 --- a/src/main/java/seng202/group9/GUI/AirlineRDController.java +++ b/src/main/java/seng202/group9/GUI/AirlineRDController.java @@ -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 tableViewAirlineRD; @FXML - private TableColumn airlIDcol; + private TableColumn airlIDCol; @FXML - private TableColumn airlNamecol; + private TableColumn airlNameCol; @FXML - private TableColumn airlAliascol; + private TableColumn airlAliasCol; @FXML - private TableColumn airlIATAcol; + private TableColumn airlIATACol; @FXML - private TableColumn airlICAOcol; + private TableColumn airlICAOCol; @FXML - private TableColumn airlCallsigncol; + private TableColumn airlCallsignCol; @FXML - private TableColumn airlCountrycol; + private TableColumn airlCountryCol; @FXML - private TableColumn airlActivecol; + private TableColumn 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 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("ID")); - airlNamecol.setCellValueFactory(new PropertyValueFactory("Name")); - airlAliascol.setCellValueFactory(new PropertyValueFactory("Alias")); - airlIATAcol.setCellValueFactory(new PropertyValueFactory("IATA")); - airlICAOcol.setCellValueFactory(new PropertyValueFactory("ICAO")); - airlCallsigncol.setCellValueFactory(new PropertyValueFactory("CallSign")); - airlCountrycol.setCellValueFactory(new PropertyValueFactory("CountryName")); - airlActivecol.setCellValueFactory(new PropertyValueFactory("Active")); + airlIDCol.setCellValueFactory(new PropertyValueFactory("ID")); + airlNameCol.setCellValueFactory(new PropertyValueFactory("Name")); + airlAliasCol.setCellValueFactory(new PropertyValueFactory("Alias")); + airlIATACol.setCellValueFactory(new PropertyValueFactory("IATA")); + airlICAOCol.setCellValueFactory(new PropertyValueFactory("ICAO")); + airlCallsignCol.setCellValueFactory(new PropertyValueFactory("CallSign")); + airlCountryCol.setCellValueFactory(new PropertyValueFactory("CountryName")); + airlActiveCol.setCellValueFactory(new PropertyValueFactory("Active")); //Assigning the Dataset to the current Dataset's airlines and displaying it in a table theDataSet = getParent().getCurrentDataset(); + currentSession = getParent().getSession(); + tableViewAirlineRD.setItems(FXCollections.observableArrayList(theDataSet.getAirlines())); + tableViewAirlineRD.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); + } - //Initializes the value for the drop-down menu for Active for adding a new Airline - airlActiveCBox.setValue("Y"); - airlActiveCBox.getItems().addAll("Y", "N"); + + /** + * 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 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,45 +99,24 @@ 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())); - } - - /** - * 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()); + ObservableList 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 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())); } - //Sets the data according to the criteria specified by the user. - tableViewAirlineRD.setItems(FXCollections.observableArrayList(filter.getFilteredData())); } + /** * Analyses the current data and creates a graph based on the data. * Currently not implemented yet. @@ -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); + } } diff --git a/src/main/java/seng202/group9/GUI/AirportAddController.java b/src/main/java/seng202/group9/GUI/AirportAddController.java new file mode 100644 index 0000000..30f29bf --- /dev/null +++ b/src/main/java/seng202/group9/GUI/AirportAddController.java @@ -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(); + } +} diff --git a/src/main/java/seng202/group9/GUI/AirportFilterController.java b/src/main/java/seng202/group9/GUI/AirportFilterController.java new file mode 100644 index 0000000..bb99f0f --- /dev/null +++ b/src/main/java/seng202/group9/GUI/AirportFilterController.java @@ -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 airportsHM = new HashMap(); + ArrayList 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(); + } +} diff --git a/src/main/java/seng202/group9/GUI/AirportRDController.java b/src/main/java/seng202/group9/GUI/AirportRDController.java index 55b2971..c0f3651 100644 --- a/src/main/java/seng202/group9/GUI/AirportRDController.java +++ b/src/main/java/seng202/group9/GUI/AirportRDController.java @@ -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 tableViewAirportRD; @FXML - private TableColumn airpIDcol; - @FXML - private TableColumn airpNamecol; - @FXML - private TableColumn airpCitycol; - @FXML - private TableColumn airpCountrycol; - @FXML - private TableColumn airpIATAFFAcol; - @FXML - private TableColumn airpICAOcol; - @FXML - private TableColumn airpLatitudecol; - @FXML - private TableColumn airpLongitudecol; - @FXML - private TableColumn airpAltitudecol; - @FXML - private TableColumn airpTimezonecol; - @FXML - private TableColumn airpDSTcol; - @FXML - private TableColumn airpTzcol; - - //Setting up text fields for adding data - @FXML - private TextField airpNameBox; - @FXML - private TextField airpCityBox; - @FXML - private TextField airpCountryBox; - @FXML - private TextField airpIATAFFABox; + private TableColumn airpIDCol; @FXML - private TextField airpICAOBox; + private TableColumn airpNameCol; @FXML - private TextField airpLatitudeBox; + private TableColumn airpCityCol; @FXML - private TextField airpLongitudeBox; + private TableColumn airpCountryCol; @FXML - private TextField airpAltitudeBox; + private TableColumn airpIATAFFACol; @FXML - private TextField airpTimezoneBox; - @FXML - private ComboBox airpDSTCBox; - @FXML - private TextField airpTzBox; - - //Setting up text fields for filtering data + private TableColumn airpICAOCol; @FXML - private TextField airpNameFilter; + private TableColumn airpLatitudeCol; @FXML - private TextField airpCityFilter; + private TableColumn airpLongitudeCol; @FXML - private TextField airpCountryFilter; + private TableColumn airpAltitudeCol; @FXML - private TextField airpIATAFFAFilter; + private TableColumn airpTimezoneCol; @FXML - private TextField airpICAOFilter; + private TableColumn airpDSTCol; @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 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("ID")); - airpNamecol.setCellValueFactory(new PropertyValueFactory("Name")); - airpCitycol.setCellValueFactory(new PropertyValueFactory("CityName")); - airpCountrycol.setCellValueFactory(new PropertyValueFactory("CountryName")); - airpIATAFFAcol.setCellValueFactory(new PropertyValueFactory("IATA_FFA")); - airpICAOcol.setCellValueFactory(new PropertyValueFactory("ICAO")); - airpLatitudecol.setCellValueFactory(new PropertyValueFactory("Latitude")); - airpLongitudecol.setCellValueFactory(new PropertyValueFactory("Longitude")); - airpAltitudecol.setCellValueFactory(new PropertyValueFactory ("Altitude")); - airpTimezonecol.setCellValueFactory(new PropertyValueFactory("Timezone")); - airpDSTcol.setCellValueFactory(new PropertyValueFactory("DST")); - airpTzcol.setCellValueFactory(new PropertyValueFactory("Tz")); + airpIDCol.setCellValueFactory(new PropertyValueFactory("ID")); + airpNameCol.setCellValueFactory(new PropertyValueFactory("Name")); + airpCityCol.setCellValueFactory(new PropertyValueFactory("CityName")); + airpCountryCol.setCellValueFactory(new PropertyValueFactory("CountryName")); + airpIATAFFACol.setCellValueFactory(new PropertyValueFactory("IATA_FFA")); + airpICAOCol.setCellValueFactory(new PropertyValueFactory("ICAO")); + airpLatitudeCol.setCellValueFactory(new PropertyValueFactory("Latitude")); + airpLongitudeCol.setCellValueFactory(new PropertyValueFactory("Longitude")); + airpAltitudeCol.setCellValueFactory(new PropertyValueFactory ("Altitude")); + airpTimezoneCol.setCellValueFactory(new PropertyValueFactory("Timezone")); + airpDSTCol.setCellValueFactory(new PropertyValueFactory("DST")); + airpTzCol.setCellValueFactory(new PropertyValueFactory("Tz")); //Assigning the Dataset to the current Dataset's airports and displaying it in a table theDataSet = getParent().getCurrentDataset(); - tableViewAirportRD.setItems(observableArrayList(theDataSet.getAirports())); + currentSession = getParent().getSession(); + tableViewAirportRD.setItems(observableArrayList(theDataSet.getAirports())); + tableViewAirportRD.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); + } - 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"); + public void openAdd() { + createPopUpStage(SceneCode.AIRPORT_ADD, 600, 480); + tableViewAirportRD.setItems(FXCollections.observableArrayList(theDataSet.getAirports())); } - /** - * 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 openFilter() { + createPopUpStage(SceneCode.AIRPORT_FILTER, 600, 480); + ArrayList 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())); - /** - * 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()); + ObservableList 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 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())); } - //Sets the data according to the criteria specified by the user - tableViewAirportRD.setItems(FXCollections.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); + } } diff --git a/src/main/java/seng202/group9/GUI/Controller.java b/src/main/java/seng202/group9/GUI/Controller.java index 2ba31ce..e7d1869 100644 --- a/src/main/java/seng202/group9/GUI/Controller.java +++ b/src/main/java/seng202/group9/GUI/Controller.java @@ -1,9 +1,17 @@ package seng202.group9.GUI; +import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.layout.VBox; +import javafx.stage.Modality; +import javafx.stage.Stage; import seng202.group9.Controller.App; import seng202.group9.Controller.SceneCode; +import java.io.IOException; +import java.io.InputStream; import java.net.URL; import java.util.ResourceBundle; @@ -50,6 +58,45 @@ public abstract class Controller implements Initializable{ } } + /** + * Creates a popup window with a specific fxml scene + * @param scene + * @param width + * @param height + */ + public Stage createPopUpStage(SceneCode scene, int width, int height) { + FXMLLoader loader = new FXMLLoader(); + InputStream in = getClass().getClassLoader().getResourceAsStream(scene.getFilePath()); + Parent page = null; + try { + page = loader.load(in); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + //set contorller and call default calls + Controller controller = (Controller) loader.getController(); + controller.setApp(parent); + controller.load(); + controller.loadOnce(); + //create a new stage to popup + Stage popupStage = new Stage(); + popupStage.initModality(Modality.APPLICATION_MODAL); + //inner layout constraints + VBox container = new VBox(); + container.getChildren().add(page); + Scene popupScene = new Scene(container, width, height); + //show + popupStage.setScene(popupScene); + popupStage.showAndWait(); + return popupStage; + } + /** * Functions here will only load once and after the load function. */ diff --git a/src/main/java/seng202/group9/GUI/RouteAddController.java b/src/main/java/seng202/group9/GUI/RouteAddController.java new file mode 100644 index 0000000..7a9e1ff --- /dev/null +++ b/src/main/java/seng202/group9/GUI/RouteAddController.java @@ -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(); + } +} diff --git a/src/main/java/seng202/group9/GUI/RouteFilterController.java b/src/main/java/seng202/group9/GUI/RouteFilterController.java new file mode 100644 index 0000000..dc47ecd --- /dev/null +++ b/src/main/java/seng202/group9/GUI/RouteFilterController.java @@ -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 routesHM = new HashMap(); + ArrayList 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(); + } +} diff --git a/src/main/java/seng202/group9/GUI/RouteRDController.java b/src/main/java/seng202/group9/GUI/RouteRDController.java index a9ce868..45b1b29 100644 --- a/src/main/java/seng202/group9/GUI/RouteRDController.java +++ b/src/main/java/seng202/group9/GUI/RouteRDController.java @@ -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 rEquipmentCol; - //Setting up text fields for adding data - @FXML - private TextField rAirlineBox; - @FXML - private TextField rSourceBox; - @FXML - private TextField rDestBox; - @FXML - private ComboBox 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(); + currentSession = getParent().getSession(); + tableViewRouteRD.setItems(FXCollections.observableArrayList(theDataSet.getRoutes())); + tableViewRouteRD.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); + } - //Initializes the value for the drop-down menu for Codeshare for adding a new Route - rCodeshareCBox.setValue(""); - rCodeshareCBox.getItems().addAll("Y", ""); + public void openAdd() { + createPopUpStage(SceneCode.ROUTE_ADD, 600, 330); + tableViewRouteRD.setItems(FXCollections.observableArrayList(theDataSet.getRoutes())); } - /** - * 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 openFilter() { + createPopUpStage(SceneCode.ROUTE_FILTER, 600, 330); + ArrayList 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,44 +93,26 @@ 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())); - } - - /** - * 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()); + ObservableList 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 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())); } - //Sets the data according to the criteria specified by the user - tableViewRouteRD.setItems(FXCollections.observableArrayList(filter.getFilteredData())); } + /** * Analyses the current data and creates a graph based on the data. * @see RouteAnalyser @@ -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(); + } } diff --git a/src/main/resources/airline_add_form.fxml b/src/main/resources/airline_add_form.fxml new file mode 100644 index 0000000..9184f85 --- /dev/null +++ b/src/main/resources/airline_add_form.fxml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + diff --git a/src/main/resources/airport_add_form.fxml b/src/main/resources/airport_add_form.fxml new file mode 100644 index 0000000..f65f332 --- /dev/null +++ b/src/main/resources/airport_add_form.fxml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + diff --git a/src/main/resources/route_add_form.fxml b/src/main/resources/route_add_form.fxml new file mode 100644 index 0000000..5be91be --- /dev/null +++ b/src/main/resources/route_add_form.fxml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + +