package Ġcom . blue an vil . chk Ċ Ċ import Ġcom . be ust . kl ax on . JsonObject Ċ import Ġcom . be ust . kl ax on . Parser Ċ import Ġokhttp 3 . Headers . Companion . to Headers Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . net . URL Encoder Ċ import Ġjava . nio . charset . StandardCharsets Ċ import Ġjava . time . Duration Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . time . temporal . Ch rono Unit Ċ Ċ /** Ċ Ġ* Ġ@ author ĠCos min ĠM arg ine an Ċ Ġ*/ Ċ private Ġval Ġhttp Log Ġ= ĠLoggerFactory . getLogger ( Ok HttpClient :: class . java ) Ċ internal Ġval Ġkl ax on Json Parser Ġ= ĠParser . default () Ċ internal Ġval ĠDATE _ FMT _ DASH _ Y MD Ġ= ĠDateTime Formatter . of Pattern (" yyyy - MM - dd ") Ċ Ċ internal Ġval ĠHTTP _ OK Ġ= Ġ 2 0 0 Ċ internal Ġval ĠHTTP _ NOT _ FOUND Ġ= Ġ 4 0 4 Ċ Ċ internal Ġfun ĠString . tidy Spaces () Ġ= Ġreplace ("\\ s +". to Regex (), Ġ" Ġ"). trim () Ċ internal Ġfun ĠString . utf 8 Url Encode () Ġ= ĠURL Encoder . encode ( this , ĠStandard Charsets . UTF _ 8 . name ()) Ċ Ċ internal Ġfun ĠString ?. to LocalDate (): ĠLocalDate ? Ġ{ ĊĠĠĠ Ġif Ġ( this Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠLocalDate . from ( DATE _ FMT _ DASH _ Y MD . parse ( this )) Ċ } Ċ Ċ internal Ġfun ĠhttpClient () Ġ= ĠOk HttpClient (). newBuilder () ĊĠĠĠĠĠĠĠ Ġ. connect Timeout ( Duration . of ( 1 2 0 , ĠCh rono Unit . SECONDS )) ĊĠĠĠĠĠĠĠ Ġ. read Timeout ( Duration . of ( 1 2 0 , ĠCh rono Unit . SECONDS )) ĊĠĠĠĠĠĠĠ Ġ. build () Ċ Ċ internal Ġfun ĠOk HttpClient . get ( url : ĠString , Ġheaders : ĠMap < String , ĠString > Ġ= Ġempty Map ()): ĠResponse Ġ{ ĊĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. headers ( headers . to Headers ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġreturn Ġnew Call ( request ). execute () Ċ } Ċ Ċ fun ĠResponse . text (): ĠString Ġ{ ĊĠĠĠ Ġval Ġstring Ġ= Ġthis . body !!. string () ĊĠĠĠ Ġthis . body !!. close () ĊĠĠĠ Ġreturn Ġstring Ċ } Ċ Ċ fun ĠResponse . json (): ĠJsonObject Ġ{ ĊĠĠĠ Ġreturn Ġkl ax on Json Parser . parse ( StringBuilder ( text ())) Ġas ĠJsonObject Ċ } Ċ Ċ fun ĠResponse . check Ok (): ĠResponse Ġ{ ĊĠĠĠ Ġreturn Ġcheck Status ( HTTP _ OK ) Ċ } Ċ Ċ fun ĠResponse . check Status ( var arg Ġsuccess Codes : ĠInt ): ĠResponse Ġ{ ĊĠĠĠ Ġif Ġ( success Codes . isNotEmpty () Ġ&& Ġ! success Codes . contains ( code )) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" Error Ġon Ġrequest Ġ${ request . url }. ĠStatus Ġcode Ġis Ġ$ code Ġand Ġresponse Ġbody Ġis Ġ${ text () }" ĊĠĠĠĠĠĠĠ Ġhttp Log . error ( message ) ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( message ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ // Because ĠCH Ġsometimes Ġreturns Ġ' 2 5 3 8 0 9 8 ' Ġand Ġsometimes Ġ' 0 2 5 3 8 0 9 8 ' Ġfor Ġa Ġcompany Ċ fun ĠString ?. fix Company Number (): ĠString ? Ġ{ ĊĠĠĠ Ġreturn Ġthis ?. pad Start ( 8 , Ġ' 0 ') Ċ } Ċ