From 236b93ed85c48d6c79050d0c736fe1e63565d71d Mon Sep 17 00:00:00 2001 From: YaFedImYaEatIm Date: Sun, 2 Oct 2016 00:52:03 +1300 Subject: [PATCH] Added Routes By Airport Menu --- .../seng202/group9/Controller/SceneCode.java | 2 +- .../group9/GUI/AirportRouteMapController.java | 72 +++++++++++++++++++ .../seng202/group9/GUI/MenuController.java | 3 + src/main/java/seng202/group9/Map/Map.java | 31 ++++++++ src/main/resources/airport_map_routes.fxml | 66 +++++++++++++++++ src/main/resources/map.html | 51 +++++++++++++ src/main/resources/menu.fxml | 6 ++ 7 files changed, 230 insertions(+), 1 deletion(-) create mode 100644 src/main/java/seng202/group9/GUI/AirportRouteMapController.java create mode 100644 src/main/resources/airport_map_routes.fxml diff --git a/src/main/java/seng202/group9/Controller/SceneCode.java b/src/main/java/seng202/group9/Controller/SceneCode.java index 7dae90a..72f2e85 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"); + FLIGHT_ADD("flight_add_form.fxml"), ROUTE_BY_AIRPORT("airport_map_routes.fxml"); private String filePath; diff --git a/src/main/java/seng202/group9/GUI/AirportRouteMapController.java b/src/main/java/seng202/group9/GUI/AirportRouteMapController.java new file mode 100644 index 0000000..4fa8071 --- /dev/null +++ b/src/main/java/seng202/group9/GUI/AirportRouteMapController.java @@ -0,0 +1,72 @@ +package seng202.group9.GUI; + +import javafx.beans.InvalidationListener; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; +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.*; +import seng202.group9.Map.Map; + +import java.util.*; + +/** + * Created by fwy13 on 1/10/16. + */ +public class AirportRouteMapController extends Controller{ + @FXML + WebView mapView; + @FXML + TableView airportsTable; + @FXML + TableColumn airportName; + @FXML + TableColumn routes; + ObservableList airportsToDisplay; + Dataset currentDataset; + Map map; + + @Override + public void load() { + if (!checkDataset()){ + return; + } + currentDataset = getParent().getCurrentDataset(); + //Sets up map. + map = new Map(mapView, new RoutePath(), airportsTable); + airportName.setCellValueFactory(new PropertyValueFactory("Name")); + routes.setCellValueFactory(new PropertyValueFactory("TotalRoutes")); + airportsToDisplay = FXCollections.observableArrayList(); + for (Airport airport: currentDataset.getAirports()){ + if (airport.getTotalRoutes() > 0) { + airportsToDisplay.add(airport); + } + } + airportsTable.setItems(airportsToDisplay); + airportsTable.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { + public void changed(ObservableValue observable, Airport oldValue, Airport newValue) { + Airport selectedAirport= (Airport) airportsTable.getSelectionModel().getSelectedItems().get(0); + for (int i = 0 ; i < currentDataset.getAirports().size(); i ++){ + if (currentDataset.getAirports().get(i).equals(selectedAirport)){ + ArrayList routePaths = new ArrayList(); + for (Route route:currentDataset.getAirports().get(i).getArrivalRoutes()){ + routePaths.add(route.getRoutePath()); + } + for (Route route:currentDataset.getAirports().get(i).getDepartureRoutes()){ + routePaths.add(route.getRoutePath()); + } + map.displayRoutes(routePaths); + break; + } + } + } + }); + } +} diff --git a/src/main/java/seng202/group9/GUI/MenuController.java b/src/main/java/seng202/group9/GUI/MenuController.java index e528005..a6987c4 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); } + public void viewRouteByAirport(){ + replaceSceneContent(SceneCode.ROUTE_BY_AIRPORT); + } /** * Load Flight Summary Function. */ diff --git a/src/main/java/seng202/group9/Map/Map.java b/src/main/java/seng202/group9/Map/Map.java index 95bbfcc..a1138af 100644 --- a/src/main/java/seng202/group9/Map/Map.java +++ b/src/main/java/seng202/group9/Map/Map.java @@ -3,11 +3,14 @@ package seng202.group9.Map; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Worker; +import javafx.scene.control.TableView; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import seng202.group9.Core.Position; import seng202.group9.Core.RoutePath; +import java.util.ArrayList; + /** * Created by fwy13 on 17/09/16. */ @@ -31,6 +34,21 @@ public class Map { }); } + public Map(WebView webView, final RoutePath newRoute, TableView table){ + this.webView = webView; + webEngine = webView.getEngine(); + initMap(); + webEngine.getLoadWorker().stateProperty().addListener( + new ChangeListener() { + public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) { + if (newState == Worker.State.SUCCEEDED){ + displayRoute(newRoute); + table.getSelectionModel().selectFirst(); + } + } + }); + } + public void initMap() { webEngine.load(getClass().getClassLoader().getResource("map.html").toExternalForm()); } @@ -45,4 +63,17 @@ public class Map { webEngine.executeScript(scriptToExecute); } + public void displayRoutes(ArrayList routes){ + String routeJSONArray = "["; + int counter = 0; + for (RoutePath route: routes){ + routeJSONArray += route.toJSONArray() + ", "; + if (counter++ > 99){ + break; + } + } + routeJSONArray += "]"; + webEngine.executeScript("displayRoutes("+routeJSONArray+");"); + } + } diff --git a/src/main/resources/airport_map_routes.fxml b/src/main/resources/airport_map_routes.fxml new file mode 100644 index 0000000..6b1b06f --- /dev/null +++ b/src/main/resources/airport_map_routes.fxml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/map.html b/src/main/resources/map.html index 3af53d2..3acdd74 100644 --- a/src/main/resources/map.html +++ b/src/main/resources/map.html @@ -90,6 +90,57 @@ repositionMap(flightPath); } + function displayRoutes(flightPaths) { + map = new google.maps.Map(document.getElementById('map'), { + center: {lat: 0, lng: 0}, + zoom: 5 + }); + for (var i = 0; i < flightPaths.length; i++) { + var tempMarker1 = null; + var tempMarker2 = null; + var tempPath = null; + + if (flightPaths[i].length < 2) { + continue; + } + + // CREATE MARKERS AT START AND FINISH + tempMarker1 = new google.maps.Marker({ + position: flightPaths[i][0], + map: map + }); + + tempMarker2 = new google.maps.Marker({ + position: flightPaths[i][flightPaths[i].length - 1], + map: map + }); + + // DRAW POLYLINE FOR ROUTE + tempPath = new google.maps.Polyline({ + path: flightPaths[i], + geodesic: true, + strokeColor: '#FF0000', + strokeOpacity: 1.0, + strokeWeight: 2 + }); + + tempPath.setMap(map); + } + repositionMapToMulti(flightPaths); + } + + function repositionMapToMulti(flightPaths){ + var bounds = new google.maps.LatLngBounds(); + + for (var i = 0; i < flightPaths.length; i++) { + for (var j = 0; j < flightPaths[i].length; j++) { + bounds.extend(flightPaths[i][j]); + } + } + + map.fitBounds(bounds); + } + function repositionMap(flightPath) { var bounds = new google.maps.LatLngBounds(); diff --git a/src/main/resources/menu.fxml b/src/main/resources/menu.fxml index 0c6600d..a8dd750 100644 --- a/src/main/resources/menu.fxml +++ b/src/main/resources/menu.fxml @@ -49,6 +49,12 @@ + + + + + +