package Ġno . nav . bid rag . cucumber Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġno . nav . bid rag . commons . Correlation Id Ċ import Ġno . nav . bid rag . commons . web . En het Filter . X _ EN H ET _ HEADER Ċ import Ġno . nav . bid rag . cucumber . model . Bid rag C ucumber Sing letons Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . http . Http Entity Ċ import Ġorg . springframework . http . HttpHeaders Ċ import Ġorg . springframework . http . HttpMethod Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . web . client . HttpStatusCode Exception Ċ import Ġorg . springframework . web . client . Rest Template Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ open Ġclass ĠRest T jen este ( ĊĠĠĠ Ġinternal Ġval Ġrest : ĠRest t jen este Med BaseUrl Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĠLoggerFactory . getLogger ( Environment :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfull Url : ĠFull Url ĊĠĠĠ Ġinternal Ġvar Ġresponse Entity : ĠResponseEntity < String ?> ? Ġ= Ġnull ĊĊĠĠĠ Ġconstructor ( na is Application : ĠString ) Ġ: Ġthis ( Rest T jen este For App lik as jon . h ent E ller Kon fig urer ( na is Application )) ĊĊĠĠĠ Ġfun Ġh ent Full Url Med Event ue ll Warning () Ġ= Ġ"$ full Url ${ append Warning When Exists () }" ĊĠĠĠ Ġfun Ġh ent HttpStatus (): ĠHttpStatus Ġ= Ġresponse Entity ?. statusCode Ġ?: ĠHttpStatus . I _ AM _ A _ TE AP OT ĊĠĠĠ Ġfun Ġh ent Response (): ĠString ? Ġ= Ġresponse Entity ?. body ĊĠĠĠ Ġfun Ġh ent Response S om Map (): ĠMap < String , ĠAny > Ġ= Ġif Ġ( response Entity ?. statusCode Ġ== ĠHttpStatus . OK Ġ&& Ġresponse Entity ?. body Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġmap ResponseBody ( response Entity ?. body !! ) ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ ĠHashMap () ĊĊĠĠĠ Ġprivate Ġfun Ġmap ResponseBody ( body : ĠString ): ĠMap < String , ĠAny > Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠObjectMapper (). readValue ( body , ĠMap :: class . java ) Ġas ĠMap < String , ĠAny > ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBid rag C ucumber Sing letons . hold Exception For Test ( e ) ĊĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġappend Warning When Exists (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwarnings Ġ= Ġresponse Entity ?. headers ?. get ( HttpHeaders . WARNING ) Ġ?: Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( warnings . isNotEmpty ()) Ġ" Ġ- Ġ${ warnings [ 0 ]}" Ġelse Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexchange Get ( endpoint Url : ĠString ): ĠResponseEntity < String ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġfull Url Ġ= ĠFull Url ( rest . baseUrl , Ġendpoint Url ) ĊĊĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġinit HttpHeaders With Correlation Id And En het () ĊĊĠĠĠĠĠĠĠ Ġexchange ( Http Entity ( null , Ġheader ), Ġendpoint Url , ĠHttpMethod . GET ) ĊĊĠĠĠĠĠĠĠ ĠLOGGER . info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Entity ?. body Ġ!= Ġnull ) Ġ" response Ġwith Ġbody Ġand Ġstatus Ġ${ response Entity !!. statusCode }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( response Entity Ġ== Ġnull ) Ġ" no Ġresponse Ġentity Ġ(${ san ity Check () })" Ġelse Ġ" no Ġresponse Ġbody Ġwith Ġstatus Ġ${ response Entity !!. statusCode }" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresponse Entity Ġ?: ĠResponseEntity . status ( HttpStatus . I _ AM _ A _ TE AP OT ). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsanity Check (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Environment . is San ity Check ) Ġ" is Ġsanity Ġcheck " Ġelse Ġ" is ĠNOT Ġsanity Ġcheck " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit HttpHeaders With Correlation Id And En het (): ĠHttp Headers Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= ĠHttp Headers () ĊĠĠĠĠĠĠĠ Ġheaders . add ( Correlation Id . COR REL ATION _ ID _ HEADER , ĠScenario Manager . getC orre lation Id For Scenario ()) ĊĠĠĠĠĠĠĠ Ġheaders . add ( X _ EN H ET _ HEADER , Ġ" 4 8 0 2 ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġheaders ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexchange Post ( endpoint Url : ĠString , Ġjson : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Entity Ġ= Ġhttp Entity ( endpoint Url , Ġjson ) ĊĠĠĠĠĠĠĠ Ġexchange ( json Entity , Ġendpoint Url , ĠHttpMethod . POST ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexchange Post ( endpoint Url : ĠString , Ġbody : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexchange Post ( endpoint Url Ġ= Ġendpoint Url , Ġjson Ġ= ĠBid rag C ucumber Sing letons . toJson ( body )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexchange Patch ( endpoint Url : ĠString , Ġbody : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Entity Ġ= Ġhttp Entity ( endpoint Url , ĠBid rag C ucumber Sing letons . toJson ( body )) ĊĠĠĠĠĠĠĠ Ġexchange ( json Entity , Ġendpoint Url , ĠHttpMethod . PATCH ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhttp Entity ( endpoint Url : ĠString , Ġbody : ĠAny ): ĠHttp Entity < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . full Url Ġ= ĠFull Url ( rest . baseUrl , Ġendpoint Url ) ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġinit HttpHeaders With Correlation Id And En het () ĊĠĠĠĠĠĠĠ Ġheaders . contentType Ġ= ĠMediaType . APPLICATION _ JSON ĊĊĠĠĠĠĠĠĠ Ġreturn ĠHttp Entity ( body , Ġheaders ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexchange ( json Entity : ĠHttp Entity <* >, Ġendpoint Url : ĠString , Ġhttp Method : ĠHttpMethod ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLOGGER . info ("$ http Method : Ġ$ full Url ") ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Entity Ġ= Ġrest . template . exchange ( endpoint Url , Ġhttp Method , Ġjson Entity , ĠString :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScenario Manager . error Log ("$ http Method ĠFE ILE T ! Ġ($ full Url )", Ġe ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Entity Ġ= Ġif Ġ( e Ġis ĠHttpStatusCode Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponseEntity . status ( e . statusCode ). body < String >(" ${ e . java Class . simple Name }: Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponseEntity . status ( HttpStatus . INTERNAL _ SERVER _ ERROR ). body < String >(" ${ e . java Class . simple Name }: Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Environment . isNot San ity Check ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠRest t jen este Med BaseUrl ( val Ġtemplate : ĠRest Template , Ġval ĠbaseUrl : ĠString ) ĊĠĠĠ Ġinternal Ġclass ĠFull Url ( baseUrl : ĠString , Ġendpoint Url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfull Url : ĠString Ġ= Ġ"$ baseUrl $ endpoint Url " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfull Url ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ