diff --git a/src/main/java/seng202/group9/Controller/Dataset.java b/src/main/java/seng202/group9/Controller/Dataset.java index ed55270..d73e644 100644 --- a/src/main/java/seng202/group9/Controller/Dataset.java +++ b/src/main/java/seng202/group9/Controller/Dataset.java @@ -4,6 +4,7 @@ package seng202.group9.Controller; import javafx.scene.chart.PieChart; import javafx.scene.control.Alert; import seng202.group9.Core.*; +import sun.awt.image.ImageWatched; import java.sql.Connection; import java.sql.DriverManager; @@ -31,6 +32,7 @@ public class Dataset { private LinkedHashMap countryDictionary;//key name private LinkedHashMap cityDictionary;//key city name private LinkedHashMap flightPointDictionary;//key point id + private LinkedHashMap equipmentDictionary; /** * @@ -53,6 +55,7 @@ public class Dataset { this.cityDictionary = new LinkedHashMap();; this.flightPathDictionary = new LinkedHashMap(); this.flightPointDictionary = new LinkedHashMap(); + this.equipmentDictionary = new LinkedHashMap<>(); if (action == getExisting){ updateDataset(); //after this make connections. ie filling in the country.cities airports.routes etc @@ -783,8 +786,22 @@ public class Dataset { airport.setDepartureRoutes(new ArrayList()); airport.setArrivalRoutes(new ArrayList()); } + equipmentDictionary = new LinkedHashMap<>(); //set Airport variables for route for (Route route: routes){ + String[] equipment = route.getEquipment().split(" "); + for (String equip: equipment){ + if (equip != "" && equip != null){ + Equipment equipment1 = equipmentDictionary.get(equip); + if (equipment1 != null){ + equipment1.addRoute(route); + }else{ + equipment1 = new Equipment(equip); + equipment1.addRoute(route); + equipmentDictionary.put(equip, equipment1); + } + } + } if (route.getDepartureAirport().length() > 3){ route.setSourceAirport(airportsByICAO.get(route.getDepartureAirport())); if (airportsByICAO.get(route.getDepartureAirport()) != null) { @@ -1727,6 +1744,10 @@ public class Dataset { return cityDictionary; } + public LinkedHashMap getEquipmentDictionary() { + return equipmentDictionary; + } + /** * Edits Airline and commits them to the database. * @param index diff --git a/src/main/java/seng202/group9/Controller/SceneCode.java b/src/main/java/seng202/group9/Controller/SceneCode.java index 72f2e85..205465d 100644 --- a/src/main/java/seng202/group9/Controller/SceneCode.java +++ b/src/main/java/seng202/group9/Controller/SceneCode.java @@ -13,7 +13,7 @@ public enum SceneCode { AIRPORT_ADD("airport_add_form.fxml"), AIRPORT_FILTER("airport_filter_form.fxml"), ROUTE_ADD("route_add_form.fxml"), ROUTE_FILTER("route_filter_form.fxml"), AIRLINE_EDIT("airline_edit_form.fxml"), AIRPORT_EDIT("airport_edit_form.fxml"), ROUTE_EDIT("route_edit_form.fxml"), FLIGHT_EDITOR("flight_editor_form.fxml"), DATASET_CONTROLLER("dataset_editor.fxml"), HELP("help.fxml"), - FLIGHT_ADD("flight_add_form.fxml"), ROUTE_BY_AIRPORT("airport_map_routes.fxml"); + FLIGHT_ADD("flight_add_form.fxml"), ROUTE_BY_AIRPORT("airport_map_routes.fxml"), ROUTE_BY_EQUIP("route_by_equip.fxml"); private String filePath; diff --git a/src/main/java/seng202/group9/Core/Equipment.java b/src/main/java/seng202/group9/Core/Equipment.java new file mode 100644 index 0000000..2a67c62 --- /dev/null +++ b/src/main/java/seng202/group9/Core/Equipment.java @@ -0,0 +1,45 @@ +package seng202.group9.Core; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * Created by fwy13 on 2/10/16. + */ +public class Equipment { + private String name; + private HashMap routesUsed; + + public Equipment(String name){ + this.name = name; + routesUsed = new HashMap<>(); + } + + public void resetRoutes(){ + routesUsed = new HashMap<>(); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void addRoute(Route route){ + routesUsed.put(routesUsed.size(), route); + } + + public HashMap getRoutesUsed() { + return routesUsed; + } + + public void setRoutesUsed(HashMap routesUsed) { + this.routesUsed = routesUsed; + } + + public int getRouteNum(){ + return routesUsed.size(); + } +} diff --git a/src/main/java/seng202/group9/GUI/EquipByRouteController.java b/src/main/java/seng202/group9/GUI/EquipByRouteController.java new file mode 100644 index 0000000..36c871c --- /dev/null +++ b/src/main/java/seng202/group9/GUI/EquipByRouteController.java @@ -0,0 +1,69 @@ +package seng202.group9.GUI; + +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.web.WebView; +import seng202.group9.Controller.Dataset; +import seng202.group9.Core.Airport; +import seng202.group9.Core.Equipment; +import seng202.group9.Core.Route; +import seng202.group9.Core.RoutePath; +import seng202.group9.Map.Map; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Set; + +/** + * Created by fwy13 on 2/10/16. + */ +public class EquipByRouteController extends Controller{ + @FXML + WebView mapView; + @FXML + TableView equipTable; + @FXML + TableColumn equipName; + @FXML + TableColumn routes; + ObservableList equipToDisplay; + Dataset currentDataset; + Map map; + + @Override + public void load() { + if (!checkDataset()){ + return; + } + currentDataset = getParent().getCurrentDataset(); + //Sets up map. + map = new Map(mapView, new RoutePath(), equipTable); + equipName.setCellValueFactory(new PropertyValueFactory("Name")); + routes.setCellValueFactory(new PropertyValueFactory("RouteNum")); + equipToDisplay = FXCollections.observableArrayList(); + ArrayList keys = new ArrayList<>(currentDataset.getEquipmentDictionary().keySet()); + for (int i = 0; i < currentDataset.getEquipmentDictionary().size(); i ++){ + if (currentDataset.getEquipmentDictionary().get(keys.get(i)).getRouteNum() > 0){ + equipToDisplay.add(currentDataset.getEquipmentDictionary().get(keys.get(i))); + } + } + equipTable.setItems(equipToDisplay); + equipTable.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { + public void changed(ObservableValue observable, Equipment oldValue, Equipment newValue) { + Equipment selectedEquip= (Equipment) equipTable.getSelectionModel().getSelectedItems().get(0); + ArrayList routePaths = new ArrayList(); + HashMap routes = selectedEquip.getRoutesUsed(); + for (int i = 0; i < routes.size(); i ++){ + routePaths.add(routes.get(i).getRoutePath()); + } + map.displayRoutes(routePaths); + } + }); + } +} diff --git a/src/main/java/seng202/group9/GUI/MenuController.java b/src/main/java/seng202/group9/GUI/MenuController.java index a6987c4..6472f34 100644 --- a/src/main/java/seng202/group9/GUI/MenuController.java +++ b/src/main/java/seng202/group9/GUI/MenuController.java @@ -67,6 +67,9 @@ public class MenuController extends Controller{ replaceSceneContent(SceneCode.ROUTE_SUMMARY); } + /** + * view Routes by the Destination / Arrival Airport + */ public void viewRouteByAirport(){ replaceSceneContent(SceneCode.ROUTE_BY_AIRPORT); } @@ -76,7 +79,6 @@ public class MenuController extends Controller{ public void viewFlightSummary() { replaceSceneContent(SceneCode.FLIGHT_SUMMARY); } - /** * Load Flight Raw Data Function. */ @@ -84,6 +86,10 @@ public class MenuController extends Controller{ replaceSceneContent(SceneCode.FLIGHT_RAW_DATA); } + public void viewRouteByEquipment(){ + replaceSceneContent(SceneCode.ROUTE_BY_EQUIP); + } + public void goToGettingStarted() { replaceSceneContent(SceneCode.INITIAL); } diff --git a/src/main/java/seng202/group9/Map/Map.java b/src/main/java/seng202/group9/Map/Map.java index a1138af..177c11d 100644 --- a/src/main/java/seng202/group9/Map/Map.java +++ b/src/main/java/seng202/group9/Map/Map.java @@ -3,6 +3,7 @@ package seng202.group9.Map; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Worker; +import javafx.scene.control.Alert; import javafx.scene.control.TableView; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; @@ -68,7 +69,12 @@ public class Map { int counter = 0; for (RoutePath route: routes){ routeJSONArray += route.toJSONArray() + ", "; - if (counter++ > 99){ + if (counter++ > 49){ + Alert alert = new Alert(Alert.AlertType.WARNING); + alert.setTitle("Too Many Routes"); + alert.setHeaderText("Too Many Routes to display"); + alert.setContentText("As there are too many routes to display only the first\n50 will be displayed."); + alert.showAndWait(); break; } } diff --git a/src/main/resources/menu.fxml b/src/main/resources/menu.fxml index a8dd750..db1fe0e 100644 --- a/src/main/resources/menu.fxml +++ b/src/main/resources/menu.fxml @@ -52,7 +52,7 @@ - + diff --git a/src/main/resources/route_by_equip.fxml b/src/main/resources/route_by_equip.fxml new file mode 100644 index 0000000..837e383 --- /dev/null +++ b/src/main/resources/route_by_equip.fxml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +