package Ġat . ac . tu w ien . d se . ss 1 8 . group 0 5 . service Ċ Ċ import Ġat . ac . tu w ien . d se . ss 1 8 . group 0 5 . dto . G ps Location Ċ import Ġat . ac . tu w ien . d se . ss 1 8 . group 0 5 . dto . Vehicle Location Ċ import Ġat . ac . tu w ien . d se . ss 1 8 . group 0 5 . repository . Vehicle Location Repository Ċ import Ġorg . springframework . data . geo . Distance Ċ import Ġorg . springframework . data . geo . Metrics Ċ import Ġorg . springframework . data . geo . Point Ċ import Ġorg . springframework . data . mongodb . core . geo . Geo Json Point Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġreactor . core . publisher . Mono Ċ Ċ /** Ċ Ġ* Ġ< h 4 > About Ġthis Ġclass </ h 4 > Ċ Ġ* Ċ Ġ* Ġ< p > Description </ p > Ċ Ġ* Ċ Ġ* Ġ@ author ĠDaniel ĠF ue ves i Ċ Ġ* Ġ@ version Ġ 1 . 0 . 0 Ċ Ġ* Ġ@ since Ġ 1 . 0 . 0 Ċ Ġ*/ Ċ @ Component Ċ class ĠVehicle Location Service ( private Ġval Ġrepository : ĠVehicle Location Repository ) Ġ: ĠI Vehicle Location Service Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠS aves Ġ( i . e . Ġinserts Ġor Ġupdates ) Ġthe Ġgiven Ġvehicle Ġlocation Ġto Ġthe ĊĠĠĠĠ Ġ* Ġrepository . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlocation Ġthe Ġvehicle Ġlocation Ġto Ġsave ĊĠĠĠĠ Ġ* Ġ@ return ĠMono Ġemit ting Ġthe Ġsaved Ġvehicle Ġlocation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġsave ( location : ĠVehicle Location ): ĠMono < Vehicle Location > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrepository . save ( location ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinds Ġvehicles Ġby Ġtheir ĠIDs Ġfor Ġwhich Ġthe Ġlast Ġknown Ġlocation Ġlies Ġwithin Ġa Ġ 1 0 ĊĠĠĠĠ Ġ* Ġk ilo met res Ġradius . ĠThis Ġlist Ġis Ġfurther more Ġsplit Ġup Ġinto Ġtwo Ġparts , Ġwhere Ġthe Ġfirst ĊĠĠĠĠ Ġ* Ġcontains Ġthe Ġvehicles Ġwithin Ġ 1 Ġk ilo meter Ġ(" near ") Ġand Ġthe Ġsecond Ġthe Ġrest Ġof Ġthem Ġ(" far "). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpoint Ġa Ġvalid ĠGPS Ġlocation Ġ( lat , Ġlon ) ĊĠĠĠĠ Ġ* Ġ@ return ĠMono Ġemit ting Ġa Ġpair Ġobject Ġof Ġlists ; ĠThe Ġfirst Ġlist Ġcontains Ġthe Ġnear Ġvehicle ĠIDs , Ġwhile ĊĠĠĠĠ Ġ* Ġthe Ġsecond Ġlist Ġcontains Ġthe Ġfar Ġvehicle ĠIDs ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfind Veh icles In Radius ( point : ĠG ps Location ): ĠMono < Pair < List < String >, ĠList < String >>> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Veh icles In Radius ( Point ( point . lon , Ġpoint . lat )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinds Ġvehicles Ġby Ġtheir ĠIDs Ġfor Ġwhich Ġthe Ġlast Ġknown Ġlocation Ġlies Ġwithin Ġa Ġ 1 0 ĊĠĠĠĠ Ġ* Ġk ilo met res Ġradius . ĠThis Ġlist Ġis Ġfurther more Ġsplit Ġup Ġinto Ġtwo Ġparts , Ġwhere Ġthe Ġfirst ĊĠĠĠĠ Ġ* Ġcontains Ġthe Ġvehicles Ġwithin Ġ 1 Ġk ilo meter Ġ(" near ") Ġand Ġthe Ġsecond Ġthe Ġrest Ġof Ġthem Ġ(" far "). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpoint Ġa Ġvalid ĠGeo Json Point Ġ( x , Ġy ) ĊĠĠĠĠ Ġ* Ġ@ return ĠMono Ġemit ting Ġa Ġpair Ġobject Ġof Ġlists ; ĠThe Ġfirst Ġlist Ġcontains Ġthe Ġnear Ġvehicle ĠIDs , Ġwhile ĊĠĠĠĠ Ġ* Ġthe Ġsecond Ġlist Ġcontains Ġthe Ġfar Ġvehicle ĠIDs ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfind Veh icles In Radius ( point : ĠGeo Json Point ): ĠMono < Pair < List < String >, ĠList < String >>> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Veh icles In Radius ( Point ( point . x , Ġpoint . y )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Veh icles In Radius ( point : ĠPoint ): ĠMono < Pair < List < String >, ĠList < String >>> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnear Veh icles Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . findBy Location Near ( point , ĠDistance ( 1 . 0 , ĠMetrics . KI LO METER S )). collect List (). block () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . vehicle Identification Number Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfar Veh icles Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . findBy Location Near ( point , ĠDistance ( 1 0 . 0 , ĠMetrics . KI LO METER S )). collect List (). block () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . vehicle Identification Number Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! near Veh icles . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠMono . just ( Pair ( near Veh icles , Ġfar Veh icles )) ĊĠĠĠ Ġ} Ċ }