Commit 07bf03cd80598b25566ae0f71c157a3232cabae9

Authored by lsagona
1 parent 79b001037b
Exists in master and in 1 other branch dev

add alert message when a non csv file is selected

Showing 2 changed files with 9 additions and 2 deletions Inline Diff

src/main/kotlin/application/controller/MenuBarController.kt View file @ 07bf03c
package application.controller 1 1 package application.controller
2 2
import application.model.State.* 3 3 import application.model.State.*
import application.model.createVesselCollection 4 4 import application.model.createVesselCollection
import application.model.observableState 5 5 import application.model.observableState
import application.model.observableVessel 6 6 import application.model.observableVessel
import javafx.event.EventHandler 7 7 import javafx.event.EventHandler
import javafx.fxml.FXML 8 8 import javafx.fxml.FXML
import javafx.fxml.Initializable 9 9 import javafx.fxml.Initializable
10 import javafx.scene.control.Alert
import javafx.scene.control.CheckMenuItem 10 11 import javafx.scene.control.CheckMenuItem
import javafx.scene.control.MenuBar 11 12 import javafx.scene.control.MenuBar
import javafx.scene.control.MenuItem 12 13 import javafx.scene.control.MenuItem
import javafx.stage.FileChooser 13 14 import javafx.stage.FileChooser
import java.net.URL 14 15 import java.net.URL
import java.util.* 15 16 import java.util.*
16 17
class MenuBarController : Initializable { 17 18 class MenuBarController : Initializable {
18 19
@FXML 19 20 @FXML
var menuBar: MenuBar = MenuBar() 20 21 var menuBar: MenuBar = MenuBar()
21 22
@FXML 22 23 @FXML
var import: MenuItem = MenuItem() 23 24 var import: MenuItem = MenuItem()
24 25
@FXML 25 26 @FXML
var allMessages: CheckMenuItem = CheckMenuItem() 26 27 var allMessages: CheckMenuItem = CheckMenuItem()
27 28
@FXML 28 29 @FXML
var clusteredMessage: CheckMenuItem = CheckMenuItem() 29 30 var clusteredMessage: CheckMenuItem = CheckMenuItem()
30 31
@FXML 31 32 @FXML
var heatMap: CheckMenuItem = CheckMenuItem() 32 33 var heatMap: CheckMenuItem = CheckMenuItem()
33 34
override fun initialize(location: URL?, resources: ResourceBundle?) { 34 35 override fun initialize(location: URL?, resources: ResourceBundle?) {
35 36
setOnActionImportButton() 36 37 setOnActionImportButton()
37 38
setOnActionAllMessageButton() 38 39 setOnActionAllMessageButton()
setOnActionClusteredMessageButton() 39 40 setOnActionClusteredMessageButton()
setOnActionHeatMapButton() 40 41 setOnActionHeatMapButton()
observableState.state = CLUSTERED_MESSAGES 41 42 observableState.state = CLUSTERED_MESSAGES
allMessages.isSelected = false 42 43 allMessages.isSelected = false
clusteredMessage.isSelected = true 43 44 clusteredMessage.isSelected = true
heatMap.isSelected = false 44 45 heatMap.isSelected = false
45 46
} 46 47 }
47 48
private fun setOnActionImportButton() { 48 49 private fun setOnActionImportButton() {
import.onAction = EventHandler { 49 50 import.onAction = EventHandler {
val fileChooser = FileChooser() 50 51 val fileChooser = FileChooser()
fileChooser.title = "Choose a file to import" 51 52 fileChooser.title = "Choose a file to import"
val window = menuBar.scene.window 52 53 val window = menuBar.scene.window
val file = fileChooser.showOpenDialog(window) 53 54 val file = fileChooser.showOpenDialog(window)
try { 54 55 try {
56 if (file.extension != "csv") {
57 val alert = Alert(Alert.AlertType.WARNING)
58 alert.title = "Warning Alert"
59 alert.headerText = "Wrong file format."
60 alert.contentText = "Please choose à .csv file."
61 alert.showAndWait()
62 }
val vessels = createVesselCollection(file) 55 63 val vessels = createVesselCollection(file)
observableVessel.vessels.clear() 56 64 observableVessel.vessels.clear()
observableVessel.vessels = vessels 57 65 observableVessel.vessels = vessels
} catch (ignore: IllegalStateException){ 58 66 } catch (ignore: IllegalStateException) {
59 67
} 60 68 }
} 61 69 }
} 62 70 }
63 71
private fun setOnActionAllMessageButton() { 64 72 private fun setOnActionAllMessageButton() {
allMessages.onAction = EventHandler { 65 73 allMessages.onAction = EventHandler {
observableState.state = ALL_MESSAGES 66 74 observableState.state = ALL_MESSAGES
allMessages.isSelected = true 67 75 allMessages.isSelected = true
clusteredMessage.isSelected = false 68 76 clusteredMessage.isSelected = false
heatMap.isSelected = false 69 77 heatMap.isSelected = false
} 70 78 }
} 71 79 }
72 80
private fun setOnActionClusteredMessageButton() { 73 81 private fun setOnActionClusteredMessageButton() {
clusteredMessage.onAction = EventHandler { 74 82 clusteredMessage.onAction = EventHandler {
observableState.state = CLUSTERED_MESSAGES 75 83 observableState.state = CLUSTERED_MESSAGES
src/main/kotlin/map/MapDisplayer.kt View file @ 07bf03c
package map 1 1 package map
2 2
import application.model.observableVessel 3 3 import application.model.observableVessel
4 4
fun clearMap(map: LeafletMapView) { 5 5 fun clearMap(map: LeafletMapView) {
clearMapCanvas(map) 6 6 clearMapCanvas(map)
clearMapCluster(map) 7 7 clearMapCluster(map)
clearHeatMap(map) 8 8 clearHeatMap(map)
} 9 9 }
10 10
fun clearMapCluster(map: LeafletMapView) { 11 11 fun clearMapCluster(map: LeafletMapView) {
map.execScript( 12 12 map.execScript(
""" 13 13 """
|myMap.removeLayer(markerClusters); 14 14 |myMap.removeLayer(markerClusters);
|var markerClusters = L.markerClusterGroup({spiderfyOnMaxZoom: false, disableClusteringAtZoom: 10}); 15 15 |var markerClusters = L.markerClusterGroup({spiderfyOnMaxZoom: false, disableClusteringAtZoom: 10});
""".trimMargin() 16 16 """.trimMargin()
) 17 17 )
} 18 18 }
19 19
fun clearMapCanvas(map: LeafletMapView) { 20 20 fun clearMapCanvas(map: LeafletMapView) {
map.execScript( 21 21 map.execScript(
""" 22 22 """
|myRenderer.removeFrom(myMap); 23 23 |myRenderer.removeFrom(myMap);
|var myRenderer = L.canvas({ padding: 0.5 }); 24 24 |var myRenderer = L.canvas({ padding: 0.5 });
""".trimMargin() 25 25 """.trimMargin()
) 26 26 )
} 27 27 }
28 28
fun clearHeatMap(map: LeafletMapView) { 29 29 fun clearHeatMap(map: LeafletMapView) {
map.execScript( 30 30 map.execScript(
""" 31 31 """
|heatLayer.removeFrom(myMap); 32 32 |heatLayer.removeFrom(myMap);
|var heatLayer = L.heatLayer([]).addTo(myMap); 33 33 |var heatLayer = L.heatLayer([]).addTo(myMap);
""".trimMargin() 34 34 """.trimMargin()
) 35 35 )
} 36 36 }
37 37
fun displayAllMessageOnMap(map: LeafletMapView) { 38 38 fun displayAllMessageOnMap(map: LeafletMapView) {
clearMap(map) 39 39 clearMap(map)
observableVessel.vessels.forEach { (_, value) -> 40 40 observableVessel.vessels.forEach { (_, value) ->
value.messages.forEach { (_, message) -> 41 41 value.messages.forEach { (_, message) ->
map.execScript("L.circleMarker([${message.latitude}, ${message.longitude}], {renderer: myRenderer, radius: 0.01, color: '#${message.getHexColorStroke()}'}).addTo(myMap)") 42 42 map.execScript("L.circleMarker([${message.latitude}, ${message.longitude}], {renderer: myRenderer, radius: 0.01, color: '#${message.getHexColorStroke()}'}).addTo(myMap)")
} 43 43 }
} 44 44 }
} 45 45 }
46 46
fun displayAllMessageOnMap(map: LeafletMapView, selectedMMSI: Int) { 47 47 fun displayAllMessageOnMap(map: LeafletMapView, selectedMMSI: Int) {
clearMap(map) 48 48 clearMap(map)
observableVessel.vessels.forEach { (_, value) -> 49 49 observableVessel.vessels.forEach { (_, value) ->
value.messages.forEach { (_, message) -> 50 50 value.messages.forEach { (_, message) ->
if (selectedMMSI == message.mmsi) { 51 51 if (selectedMMSI == message.mmsi) {
map.execScript("L.circleMarker([${message.latitude}, ${message.longitude}], {renderer: myRenderer, radius: 2, color: '#ff4040'}).addTo(myMap)") 52 52 map.execScript("L.circleMarker([${message.latitude}, ${message.longitude}], {renderer: myRenderer, radius: 2, color: '#ff4040'}).addTo(myMap)")
} else { 53 53 } else {
map.execScript("L.circleMarker([${message.latitude}, ${message.longitude}], {renderer: myRenderer, radius: 0.01, color: '#${message.getHexColorStroke()}'}).addTo(myMap)") 54 54 map.execScript("L.circleMarker([${message.latitude}, ${message.longitude}], {renderer: myRenderer, radius: 0.01, color: '#${message.getHexColorStroke()}'}).addTo(myMap)")
} 55 55 }
} 56 56 }
} 57 57 }
} 58 58 }
59 59
fun displayClusterMessageOnMap(map: LeafletMapView) { 60 60 fun displayClusterMessageOnMap(map: LeafletMapView) {
clearMap(map) 61 61 clearMap(map)
observableVessel.vessels.forEach { (_, value) -> 62 62 observableVessel.vessels.forEach { (_, value) ->
value.messages.forEach { (_, message) -> 63 63 value.messages.forEach { (_, message) ->
map.execScript("markerClusters.addLayer(L.circleMarker([${message.latitude}, ${message.longitude}], {renderer: myRenderer, radius: 0.01, color: '#${message.getHexColorStroke()}'}));") 64 64 map.execScript("markerClusters.addLayer(L.circleMarker([${message.latitude}, ${message.longitude}], {renderer: myRenderer, radius: 0.01, color: '#${message.getHexColorStroke()}'}));")
} 65 65 }
} 66 66 }
map.execScript("myMap.addLayer(markerClusters);") 67 67 map.execScript("myMap.addLayer(markerClusters);")
} 68 68 }
69 69
fun displayClusterMessageOnMap(map: LeafletMapView, selectedMMSI: Int) { 70 70 fun displayClusterMessageOnMap(map: LeafletMapView, selectedMMSI: Int) {
clearMap(map) 71 71 clearMap(map)
observableVessel.vessels.forEach { (_, value) -> 72 72 observableVessel.vessels.forEach { (_, value) ->
value.messages.forEach { (_, message) -> 73 73 value.messages.forEach { (_, message) ->
if (selectedMMSI == message.mmsi) { 74 74 if (selectedMMSI == message.mmsi) {
map.execScript("L.circleMarker([${message.latitude}, ${message.longitude}], {renderer: myRenderer, radius: 2, color: '#ff4040'}).addTo(myMap);") 75 75 map.execScript("L.circleMarker([${message.latitude}, ${message.longitude}], {renderer: myRenderer, radius: 2, color: '#ff4040'}).addTo(myMap);")
} else { 76 76 } else {
map.execScript("markerClusters.addLayer(L.circleMarker([${message.latitude}, ${message.longitude}], {renderer: myRenderer, radius: 0.01, color: '#${message.getHexColorStroke()}'}));") 77 77 map.execScript("markerClusters.addLayer(L.circleMarker([${message.latitude}, ${message.longitude}], {renderer: myRenderer, radius: 0.01, color: '#${message.getHexColorStroke()}'}));")
} 78 78 }
} 79 79 }
} 80 80 }
map.execScript("myMap.addLayer(markerClusters);") 81 81 map.execScript("myMap.addLayer(markerClusters);")
} 82 82 }
83 83
fun displayHeatMapOnMap(map: LeafletMapView) { 84 84 fun displayHeatMapOnMap(map: LeafletMapView) {
clearMap(map) 85 85 clearMap(map)
observableVessel.vessels.forEach { (_, value) -> 86 86 observableVessel.vessels.forEach { (_, value) ->
value.messages.forEach { (_, message) -> 87 87 value.messages.forEach { (_, message) ->
map.execScript("heatLayer.addLatLng([${message.latitude}, ${message.longitude}]);") 88 88 map.execScript("heatLayer.addLatLng([${message.latitude}, ${message.longitude}]);")
} 89 89 }
} 90 90 }
91
} 92 91 }
93 92
fun displayHeatMapOnMap(map: LeafletMapView, selectedMMSI: Int) { 94 93 fun displayHeatMapOnMap(map: LeafletMapView, selectedMMSI: Int) {