package application.controller import application.model.* import application.model.MapState.* import javafx.fxml.FXML import javafx.fxml.Initializable import javafx.scene.layout.StackPane import map.* import java.net.URL import java.util.* class MapPanelController : Initializable { @FXML private lateinit var map: StackPane private val mapView = LeafletMapView() override fun initialize(location: URL?, resources: ResourceBundle?) { mapView.displayMap(MapConfig()) setObservableVesselListener() setObservableSelectedVesselListener() setStateListener() observableCurrentTime() /*val completeFutureMap: CompletableFuture = mapView.displayMap(MapConfig()) completeFutureMap.whenComplete{ workerState, _ -> if (workerState == Worker.State.SUCCEEDED) { } }*/ map.children.add(mapView) map.children } private fun setStateListener() { observableMapState.listeners.add(object : StateListener { override fun onValueChanged(newValue: MapState) { if (observableSelectedVessel.vessel.mmsi != null) { updateMap(observableSelectedVessel.vessel.mmsi!!) } else { updateMap() } } }) } private fun observableCurrentTime() { observableCurrentTime.listeners.add(object : CurrentTime{ override fun onValueChanged(newValue: Int) { updateMap() } }) } private fun updateMap() { if (observableIsReplayState.value){ displayTargetedVessels(mapView) } else { when (observableMapState.state) { ALL_MESSAGES -> displayAllMessageOnMap(mapView) CLUSTERED_MESSAGES -> displayClusterMessageOnMap(mapView) HEAT_MAP -> displayHeatMapOnMap(mapView) } } } private fun updateMap(selectedMMSI: String) { when (observableMapState.state) { ALL_MESSAGES -> displayAllMessageOnMap(mapView, selectedMMSI) CLUSTERED_MESSAGES -> displayClusterMessageOnMap(mapView, selectedMMSI) HEAT_MAP -> displayHeatMapOnMap(mapView, selectedMMSI) } } private fun setObservableVesselListener() { observableVessel.listeners.add(object : MessageListener { override fun onValueChanged(newValue: MutableMap) { updateMap() } }) } private fun setObservableSelectedVesselListener() { observableSelectedVessel.listeners.add(object : SelectedVesselListener { override fun onValueChanged(newValue: Vessel) { if (newValue.mmsi != null){ updateMap(newValue.mmsi) }else { updateMap() } } }) } }