package Ġde . f ay ard . refresh Versions . core . internal Ċ Ċ import Ġde . f ay ard . refresh Versions . core . Dependency Versions Fetcher Ċ import Ġde . f ay ard . refresh Versions . core . Module Id Ċ import Ġde . f ay ard . refresh Versions . core . Version Ċ import Ġde . f ay ard . refresh Versions . core . extensions . okhttp . await Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġretrofit 2 . HttpException Ċ import Ġretrofit 2 . Response Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ internal Ġclass ĠMaven Dependency Versions Fetcher ( ĊĠĠĠ Ġprivate Ġval ĠhttpClient : ĠOk HttpClient , ĊĠĠĠ Ġmodule Id : ĠModule Id , ĊĠĠĠ Ġrepo Url : ĠString , ĊĠĠĠ Ġrepo Authorization : ĠString ? Ċ ) Ġ: ĠDependency Versions Fetcher ( ĊĠĠĠ Ġmodule Id Ġ= Ġmodule Id , ĊĠĠĠ Ġrepo Key Ġ= Ġrepo Url Ċ ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( repo Url . endsWith ('/ ')) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrequest Ġ= ĠRequest . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Url For Artifact Ġ= Ġmodule Id . let Ġ{ Ġ( group , Ġname ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ repo Url ${ group !!. replace ('.', Ġ'/') }/ $ name / maven - metadata . xml " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġurl ( Ok Http File Url Handler . re written If File Scheme Url ( metadata Url For Artifact )) ĊĠĠĠĠĠĠĠ Ġheader ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Authorization ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġrepo Authorization Ġ?: Ġreturn @ apply ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Available Versions ( version Filter : Ġ(( Version ) Ġ-> ĠBoolean )? ): ĠSuccessful Result Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġxml Ġ= ĠhttpClient . new Call ( request ). await (). use Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . use Ġ{ Ġit . body !!. string () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġthrow ĠHttp Exception ( Response . error < Any ? >( response . code , Ġresponse . body !! )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġall Versions Ġ= Ġparse Versions From Maven MetaData ( xml ) ĊĠĠĠĠĠĠĠ Ġreturn ĠSuccessful Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Update Timestamp Millis Ġ= Ġparse Last Updated From Maven MetaData ( xml ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Versions Ġ= Ġif Ġ( version Filter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Versions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Versions . filter ( version Filter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Spell Checking Inspection ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmaven Last Updated DateFormat Ġ= ĠSimpleDateFormat (" yyyy MM dd HH mm ss ", ĠLocale . ROOT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Zone Ġ= ĠTime Zone . getTime Zone (" UTC ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġparse Last Updated From Maven MetaData ( xml : ĠString ): ĠLong Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate String Ġ= Ġxml . substring After ("< last Updated > "). substring Before ("</ last Updated >") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmaven Last Updated DateFormat . parse ( date String ). time ĊĠĠĠĠĠĠĠ Ġ}. get OrDefault ( 0 ) ĊĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġparse Versions From Maven MetaData ( xml : ĠString ): ĠList < Version > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġxml . substring After ("< versions > "). substring Before ("</ versions >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split ("< version >", Ġ"</ version >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġif Ġ( it . isBlank ()) Ġnull Ġelse ĠVersion ( it . trim ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ