diff --git a/res/userdb.db b/res/userdb.db index b80a0f5..f93172e 100644 Binary files a/res/userdb.db and b/res/userdb.db differ diff --git a/src/main/java/seng202/group9/Controller/Session.java b/src/main/java/seng202/group9/Controller/Session.java index 09da4c1..c63461d 100644 --- a/src/main/java/seng202/group9/Controller/Session.java +++ b/src/main/java/seng202/group9/Controller/Session.java @@ -12,7 +12,9 @@ import java.util.HashMap; */ public class Session implements Serializable { private SceneCode sceneDisplayed; - private HashMap filteredAirlines; + private HashMap filteredAirlines; + private HashMap filteredAirports; + private HashMap filteredRoutes; /** * Constructor for a new session @@ -50,7 +52,23 @@ public class Session implements Serializable { this.filteredAirlines = airlines; } - public HashMap getFilteredAirlines() { + 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/AirlineRDController.java b/src/main/java/seng202/group9/GUI/AirlineRDController.java index 63cbfd2..020d07d 100644 --- a/src/main/java/seng202/group9/GUI/AirlineRDController.java +++ b/src/main/java/seng202/group9/GUI/AirlineRDController.java @@ -3,23 +3,16 @@ package seng202.group9.GUI; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; -import javafx.scene.Parent; -import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.control.cell.PropertyValueFactory; -import javafx.scene.layout.Pane; -import javafx.stage.Modality; -import javafx.stage.Stage; -import javafx.stage.StageStyle; import seng202.group9.Controller.*; import seng202.group9.Core.Airline; import javax.swing.*; -import java.io.IOException; import java.util.ArrayList; import java.util.Optional; -//make a class for the scenes to get the data I guess + + /** * The GUI controller class for airline_raw_data.fxml. * Extends from the abstract class {@link Controller}. @@ -46,8 +39,9 @@ public class AirlineRDController extends Controller { @FXML private TableColumn airlActiveCol; - //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; /** @@ -67,10 +61,10 @@ public class AirlineRDController extends Controller { //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); - - currentSession = getParent().getSession(); } diff --git a/src/main/java/seng202/group9/GUI/AirportAddController.java b/src/main/java/seng202/group9/GUI/AirportAddController.java index 5cca155..30f29bf 100644 --- a/src/main/java/seng202/group9/GUI/AirportAddController.java +++ b/src/main/java/seng202/group9/GUI/AirportAddController.java @@ -5,7 +5,9 @@ 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. @@ -34,6 +36,8 @@ public class AirportAddController extends Controller { private TextField airpDSTAdd; @FXML private TextField airpTzAdd; + @FXML + private TextField addButton; //Set an empty Dataset to be assigned later private Dataset theDataSet = null; @@ -70,6 +74,16 @@ public class AirportAddController extends Controller { 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"); diff --git a/src/main/java/seng202/group9/GUI/AirportFilterController.java b/src/main/java/seng202/group9/GUI/AirportFilterController.java index 32aad7b..bb99f0f 100644 --- a/src/main/java/seng202/group9/GUI/AirportFilterController.java +++ b/src/main/java/seng202/group9/GUI/AirportFilterController.java @@ -2,11 +2,18 @@ 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. */ @@ -34,9 +41,13 @@ public class AirportFilterController extends Controller { 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. @@ -80,9 +91,27 @@ public class AirportFilterController extends Controller { 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 13e14c9..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; /** @@ -47,6 +52,8 @@ public class AirportRDController extends Controller{ //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. @@ -69,7 +76,10 @@ public class AirportRDController extends Controller{ //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())); + tableViewAirportRD.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); } public void openAdd() { @@ -79,6 +89,14 @@ public class AirportRDController extends Controller{ 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)); } /** @@ -88,9 +106,25 @@ 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 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())); + } } diff --git a/src/main/java/seng202/group9/GUI/RouteAddController.java b/src/main/java/seng202/group9/GUI/RouteAddController.java index 9056f1f..7a9e1ff 100644 --- a/src/main/java/seng202/group9/GUI/RouteAddController.java +++ b/src/main/java/seng202/group9/GUI/RouteAddController.java @@ -3,8 +3,10 @@ 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; /** @@ -24,6 +26,8 @@ public class RouteAddController extends Controller { private TextField rStopsAdd; @FXML private TextField rEquipmentAdd; + @FXML + private Button addButton; private Dataset theDataSet = null; @@ -50,6 +54,16 @@ public class RouteAddController extends Controller { 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"); diff --git a/src/main/java/seng202/group9/GUI/RouteFilterController.java b/src/main/java/seng202/group9/GUI/RouteFilterController.java index 56836fb..dc47ecd 100644 --- a/src/main/java/seng202/group9/GUI/RouteFilterController.java +++ b/src/main/java/seng202/group9/GUI/RouteFilterController.java @@ -2,11 +2,18 @@ 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. */ @@ -24,8 +31,12 @@ public class RouteFilterController extends Controller { 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. @@ -54,9 +65,27 @@ public class RouteFilterController extends Controller { 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 accf21b..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}. @@ -39,6 +44,8 @@ public class RouteRDController extends Controller { //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. @@ -58,7 +65,10 @@ 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); } public void openAdd() { @@ -68,6 +78,14 @@ public class RouteRDController extends Controller { 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)); } /** @@ -77,9 +95,21 @@ public class RouteRDController extends Controller { */ 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 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())); + } } @@ -93,5 +123,6 @@ public class RouteRDController extends Controller { public void routeSummaryButton() { replaceSceneContent(SceneCode.ROUTE_SUMMARY); + currentSession = getParent().getSession(); } } diff --git a/src/main/resources/airport_add_form.fxml b/src/main/resources/airport_add_form.fxml index 420ffb2..f65f332 100644 --- a/src/main/resources/airport_add_form.fxml +++ b/src/main/resources/airport_add_form.fxml @@ -73,7 +73,7 @@ -