Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @startuml
- title ViewPollutantMap
- actor Traveler
- box Front-End
- participant "System\n Android Cell Phone" as Android
- end box
- box Database Hook
- participant Webhook
- end box
- box Back-End
- participant SensorController
- participant SensorService
- participant CapturedPollutantProvider
- participant SensorProvider
- participant WaypointValidator
- end box
- box Database
- participant Sensor as Sensors
- participant CapturedPollutant as CapturedPollutants
- end box
- Traveler -> Android: selectMapView
- Android ->> Webhook : set up listener
- Android ->> Android : set up locationListener
- note right: the location listener triggers anytime\nthe traveler's geolocation updates
- Android -->> Traveler : map view
- opt if location disabled
- Android -> Traveler: promptForLocation()
- alt if user allows
- Traveler -> Android: selectAllow()
- Android -> Android : locationTrackingEnabled = true
- Android -->> Traveler
- else if user refuses
- Traveler --> Android: selectDecline()
- Android -> Android : locationTrackingEnabled = false
- Android -->> Traveler
- end
- end
- loop while frontend is running
- opt when database hook updates with info
- Webhook ->> Android : trigger listener
- Android -> Android : needsSensorsUpdated = true
- end
- opt if user wants to drag map
- Traveler -> Android : dragMap()
- Android -> Android : needsSensorsUpdated = true
- Android -->> Traveler : updated map
- end
- opt needsSensorsUpdated is true
- Android -> SensorController : getSensorsWithData(boundingBox, preferences)
- note right: boundingBox = the view range\nof what can be seen on the map
- SensorController -> SensorService : getSensorsWithData(boundingBox, preferences)
- SensorService -> SensorProvider : findRelevantSensors(boundingBox, preferences)
- SensorProvider -> Sensors : findIntersectingSensors(boundingBox)
- Sensors -->> SensorProvider : sensors
- SensorProvider -->> SensorService : sensors
- SensorService -> CapturedPollutantProvider : findLatestDataFor(sensors)
- loop sensor ∈ sensors
- CapturedPollutantProvider -> CapturedPollutants : findLatestDataFor(sensor)
- CapturedPollutants -->> CapturedPollutantProvider : sensorData
- end
- CapturedPollutantProvider -->> SensorService : sensorsData
- SensorService -->> SensorController : sensors, sensorsData
- SensorController -->> Android : sensors, sensorsData
- end
- opt when location of user updates
- Android -> SensorController : isUserNearHazardousArea(latitude, longitude)
- SensorController -> SensorService : isUserNearHazardousArea(geoLocation)
- SensorService -> WaypointValidator : isValidWaypoint(geoLocation)
- alt if user location <500m of red zone
- WaypointValidator -->> SensorService : false
- SensorService -->> SensorController : true
- SensorController -->> Android : true
- Android ->> Traveler: alertRedZoneApproach
- else if user is safe
- WaypointValidator -->> SensorService : true
- SensorService -->> SensorController : false
- SensorController -->> Android : false
- end
- end
- @enduml
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement