/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 1 8 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġorg . intellij . plugins . h cl . terraform . config . external Doc Ċ Ċ import Ġcom . be ust . kl ax on .* Ċ import Ġorg . intellij . plugins . h cl . terraform . config . model . Type Model Loader Ċ import Ġjava . net . URI Ċ Ċ const Ġval ĠBASE _ URL Ġ= Ġ" https :// www . terraform . io / docs " Ċ Ċ const Ġval ĠFUNCTIONS _ URL Ġ= Ġ"$ BASE _ URL / configuration / interpolation . html " Ċ Ċ private Ġclass ĠData ( ĊĠ Ġval Ġfunction Fragments : ĠMap < String , ĠString >, ĊĠ Ġval Ġfunction Signatures : ĠMap < String , ĠString >, ĊĠ Ġval Ġkeep Provider Prefix : ĠSet < String >, ĊĠ Ġval Ġkeywords : ĠMap < String , ĠString >, ĊĠ Ġval Ġpaths : ĠMap < String , ĠString > Ċ ) Ċ Ċ private Ġfun Ġpairs ToMap ( obj : ĠJsonObject , ĠfieldName : ĠString ): ĠMutable Map < String , ĠString > Ġ{ ĊĠ Ġreturn Ġobj . array < JsonArray < String >>( fieldName ) !!. associate Ġ{ Ġit [ 0 ] Ġto Ġit [ 1 ] Ġ} Ġas ĠMutable Map < String , ĠString > Ċ } Ċ Ċ private Ġval Ġdata : ĠData Ġby Ġlazy Ġ{ ĊĠ Ġval Ġdoc Data Ġ= ĠType Model Loader . getResource Json ("${ Type Model Loader . Model Resources Prefix }- external / doc - data . json ") Ġas ĠJsonObject ĊĠ Ġval Ġdoc Data Generated Ġ= ĠType Model Loader . getResource Json ("${ Type Model Loader . Model Resources Prefix }/ doc - data - generated . json ") Ġas ĠJsonObject ĊĊĠ Ġval Ġfunction Fragments Ġ= Ġmutable Map Of < String , String >() ĊĠ Ġval Ġfunction Signatures Ġ= Ġmutable Map Of < String , String >() ĊĊĠ Ġfor Ġ( Ġf Ġin Ġdoc Data Generated . array < JsonObject >(" functions ") !! ) Ġ{ ĊĠĠĠ Ġval Ġname Ġ= Ġf . string (" name ") !! ĊĠĠĠ Ġfunction Fragments [ name ] Ġ= Ġf . string (" fragment ") !! ĊĠĠĠ Ġfunction Signatures [ name ] Ġ= Ġf . string (" signature ") !! ĊĠ Ġ} ĊĊĠ Ġval Ġpaths Ġ= Ġpairs ToMap ( doc Data , Ġ" paths ") ĊĠ Ġpaths . put All ( pairs ToMap ( doc Data Generated , Ġ" paths ")) ĊĊĠ ĠData ( ĊĠĠĠĠĠ Ġfunction Fragments Ġ= Ġfunction Fragments , ĊĠĠĠĠĠ Ġfunction Signatures Ġ= Ġfunction Signatures , ĊĠĠĠĠĠ Ġkeep Provider Prefix Ġ= Ġdoc Data . array < String >(" keep Provider Prefix ") !!. toSet (), ĊĠĠĠĠĠ Ġkeywords Ġ= Ġpairs ToMap ( doc Data , Ġ" keywords "), ĊĠĠĠĠĠ Ġpaths Ġ= Ġpaths ĊĠ Ġ) Ċ } Ċ Ċ fun Ġurl For Backend Type Doc ( type : ĠString ): ĠString Ġ{ ĊĠ Ġreturn Ġ"$ BASE _ URL / backends / types /${ data . paths [" backend .$ type "] Ġ?: Ġtype }. html " Ċ } Ċ Ċ fun Ġurl For Provider Type Doc ( type : ĠString ): ĠString Ġ{ ĊĠ Ġreturn Ġ"$ BASE _ URL / providers /${ data . paths [" provider .$ type "] Ġ?: Ġtype }/ " Ċ } Ċ Ċ fun Ġurl For Provision er Type Doc ( type : ĠString ): ĠString Ġ{ ĊĠ Ġreturn Ġ"$ BASE _ URL / provision ers /$ type . html " Ċ } Ċ Ċ fun Ġurl For Keyword Doc ( keyword : ĠString ): ĠString ? Ġ{ ĊĠ Ġval Ġpath Ġ= Ġdata . keywords [ keyword ] ĊĠ Ġreturn Ġif Ġ( path Ġ== Ġnull ) Ġnull Ġelse Ġ"$ BASE _ URL /$ path " Ċ } Ċ Ċ fun Ġfunction Fragment ( name : ĠString ): ĠString ? Ġ{ ĊĠ Ġreturn Ġdata . function Fragments [ name ] Ċ } Ċ Ċ fun Ġfunction Signature ( name : ĠString ): ĠString ? Ġ{ ĊĠ Ġreturn Ġdata . function Signatures [ name ] Ċ } Ċ Ċ fun Ġurl For Function Doc ( name : ĠString ): ĠString Ġ{ ĊĠ Ġreturn Ġ"$ FUNCTION S _ URL # ${ function Fragment ( name )}" Ċ } Ċ Ċ private Ġfun Ġurl For DataSource Or Resource Doc ( provider Name : ĠString , Ġdata Or Resource : ĠString , Ġtype : ĠString ): ĠString Ġ{ ĊĠ Ġval Ġbase Ġ= Ġ"${ url For Provider Type Doc ( provider Name )} ${ data Or Resource [ 0 ] }/ " ĊĠ Ġval Ġpath Ġ= Ġdata . paths [" $ data Or Resource .$ type "] ĊĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠ Ġpath Ġ!= Ġnull Ġ-> ĠURI ("$ base $ path . html "). normalize (). toString () ĊĠĠĠ Ġdata . keep Provider Prefix . contains ( provider Name ) Ġ-> Ġ"$ base $ type . html " ĊĠĠĠ Ġelse Ġ-> Ġ"$ base ${ type . substring After ('_ ') }. html " ĊĠ Ġ} Ċ } Ċ Ċ fun Ġurl For DataSource Type Doc ( provider Type : ĠString , Ġtype : ĠString ): ĠString Ġ{ ĊĠ Ġreturn Ġurl For DataSource Or Resource Doc ( provider Type , Ġ" data ", Ġtype ) Ċ } Ċ Ċ fun Ġurl For ResourceType Doc ( provider Type : ĠString , Ġtype : ĠString ): ĠString Ġ{ ĊĠ Ġreturn Ġurl For DataSource Or Resource Doc ( provider Type , Ġ" resource ", Ġtype ) Ċ } Ċ