package Ġgate ch . mobile . occup ancy . rn oc Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġgate ch . mobile . occup ancy . Occup ancy Configuration Properties Ċ import Ġmu . K Logging Ċ import Ġorg . springframework . boot . web . client . Rest Template Builder Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . springframework . web . client . Resource AccessException Ċ import Ġorg . springframework . web . client . Rest Template Ċ Ċ @ Component Ċ class ĠW ifi Count Api ( ĊĠĠĠĠĠĠĠ Ġclient Builder : ĠRest Template Builder , ĊĠĠĠĠĠĠĠ Ġapp Props : ĠOcc up ancy Configuration Properties , ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠobjectMapper : ĠObjectMapper Ċ ) Ċ { ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠK Logging () ĊĊĠĠĠ Ġprivate Ġval Ġclient : ĠRest Template Ġ= Ġclient Builder . root Uri ( app Props . rn oc . wifi Api ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġfun Ġfetch For Path ( path : ĠString , Ġwith Details : ĠBoolean Ġ= Ġfalse ): ĠW ifi Count ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġtry ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġclient . get For Object ("$ path /? details =$ with Details ", ĠW ifi Count :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch ( ignored : ĠResource AccessException ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn Ġ{ Ġ" Couldn 't Ġconnect Ġto ĠWiFi ĠAPI " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresource File Ġ= Ġwhen ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" floor " Ġin Ġpath Ġ-> Ġ"/ floor . json " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" building " Ġin Ġpath Ġ-> Ġ"/ building . json " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"/ all . json " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresource Ġ= Ġjava Class . getResource AsStream ( resource File ) ĊĠĠĠĠĠĠĠ Ġreturn ĠobjectMapper . readValue < Wifi Count >( resource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch All ( with Details : ĠBoolean Ġ= Ġfalse ) Ġ= Ġfetch For Path ("/", Ġwith Details ) ĊĊĠĠĠ Ġfun Ġfetch Building ( id : ĠString , Ġwith Details : ĠBoolean Ġ= Ġfalse ) Ġ= Ġfetch For Path ("/ building _ id =$ id ", Ġwith Details ) ĊĊĠĠĠ Ġfun Ġfetch Floor ( building Id : ĠString , Ġfloor : ĠString , Ġwith Details : ĠBoolean Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġfetch For Path ("/ building _ id =$ building Id / floor =$ floor ", Ġwith Details ) ĊĊĠĠĠ Ġfun Ġfetch Room ( building Id : ĠString , Ġfloor : ĠString , Ġroom : ĠString , Ġwith Details : ĠBoolean Ġ= Ġfalse ): ĠW ifi Count ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġfetch All ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġroom AP Ġ= Ġinfo . access Points . first Ġ{ Ġit . building Id Ġ== Ġbuilding Id Ġ&& Ġit . floor Ġ== Ġfloor Ġ&& Ġit . room Ġ== Ġroom Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( with Details ) ĠW ifi Count ( room AP . client Count , ĠlistOf ( room AP )) Ġelse ĠW ifi Count ( room AP . client Count ) ĊĠĠĠ Ġ} Ċ } Ċ