package Ġau . gov . d xa . graph Ċ Ċ import Ġcom . be ust . kl ax on . JsonArray Ċ import Ġcom . be ust . kl ax on . JsonObject Ċ import Ġcom . be ust . kl ax on . Parser Ċ import Ġjava . net . URL Ċ Ċ data Ġclass ĠRelation ( val Ġfrom : ĠString , Ġval Ġdirection : String , Ġval Ġto : ĠString , Ġval Ġto Name : ĠString ) Ċ Ċ class ĠRel ations ( var Ġid : String ) Ġ{ ĊĊĠĠĠ Ġvar Ġrelations URL Ġ= Ġ"" ĊĠĠĠ Ġvar Ġrelation Map Ġ= Ġmutable Map Of < String , ĠMutable List < Relation >>() ĊĠĠĠ Ġvar Ġurls Read Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġvar Ġname Lookup Ġ= Ġmutable Map Of < String , ĠString >() ĊĠĠĠ Ġvar Ġidentifier : ĠString Ġ= Ġ"" ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdefinition Url Ġ= ĠURL ( id ) ĊĠĠĠĠĠĠĠ Ġvar Ġdefinition Text Ġ= Ġdefinition Url . read Text () ĊĠĠĠĠĠĠĠ Ġ// Ġhandle Ġwhen Ġhttp Ġredirects Ġto Ġhttps ĊĠĠĠĠĠĠĠ Ġif ( definition Text Ġ== Ġ"" Ġ&& Ġid . startsWith (" http :// ")){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition Text Ġ= ĠURL (" https " Ġ+ Ġid . remove Prefix (" http ")). read Text () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġdefinition Json Ġ= ĠParser (). parse ( StringBuilder (). append ( definition Text )) Ġas ĠJsonObject ĊĠĠĠĠĠĠĠ Ġval Ġlinks Ġ= Ġdefinition Json [" links "] Ġas ĠJson Array < JsonObject > ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġdefinition Json [" content "] Ġas ĠJsonObject ĊĠĠĠĠĠĠĠ Ġidentifier Ġ= Ġcontent [" identifier "] Ġas ĠString ĊĠĠĠĠĠĠĠ Ġval Ġrelations Ġ= Ġlinks . filter Ġ{ Ġit [" rel "] Ġ== Ġ" relations " Ġ}. first OrNull () ĊĠĠĠĠĠĠĠ Ġif Ġ( relations Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelations URL Ġ= Ġrelations [" href "] Ġas ĠString Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( relations URL Ġ!= Ġ"") Ġpopulate Map ( identifier , Ġrelations URL , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġpopulate Map ( the Id : ĠString , Ġurl : ĠString , Ġdepth : Int ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif ( depth Ġ>= Ġ 2 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( urls Read . contains ( url )) Ġreturn ĊĠĠĠĠĠĠĠ Ġurls Read . add ( url ) ĊĊĠĠĠĠĠĠĠ Ġ// println (" Reading Ġ${ the Id }' s Ġrelations Ġfrom Ġ${ url }") ĊĊĠĠĠĠĠĠĠ Ġval Ġrelation URL Ġ= ĠURL ( url ) ĊĠĠĠĠĠĠĠ Ġvar Ġrelation Text Ġ= Ġrelation URL . read Text () ĊĊĠĠĠĠĠĠĠ Ġ// Ġhandle Ġwhen Ġhttp Ġredirects Ġto Ġhttps ĊĠĠĠĠĠĠĠ Ġif ( relation Text Ġ== Ġ"" Ġ&& Ġurl . startsWith (" http :// ")){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelation Text Ġ= ĠURL (" https " Ġ+ Ġurl . remove Prefix (" http ")). read Text () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrelations Json Ġ= ĠParser (). parse ( StringBuilder (). append ( relation Text !! )) Ġas ĠMap < String , ĠJsonObject > ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( relation Name Ġin Ġrelations Json . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Relation >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( relation Json Ġin Ġrelations Json [ relation Name ] Ġas ĠList < JsonObject >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġto Ġ= Ġrelation Json [" to "] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelation Ġ= ĠRelation ( the Id , Ġrelation Json [" direction "] Ġas ĠString , Ġto , Ġrelation Json [" to Name "] Ġas ĠString ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġall Ġrelations Ġare Ġbi - direction al . ĠOnly Ġgetting Ġthe Ġfrom s Ġremoves Ġdup es ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( relation . direction Ġ== Ġ" FROM ") Ġlist . add ( relation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Lookup [ relation . to ] Ġ= Ġrelation . to Name ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfrom : Ġhttp :// api . gov . au / definition / ce / ce 5 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto : Ġhttps :// api . gov . au / definitions / api / relations / ce / ce 1 ĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġnew Url Ġ= Ġ" http :// api . gov . au / definitions / api / relations /" Ġ+ Ġto . remove Prefix (" http :// d xa . gov . au / definition /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Url Ġ= Ġto . replace ("/ definition / "," / definitions / api / relations /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopulate Map ( to , Ġnew Url , Ġdepth Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! relation Map . containsKey ( relation Name )) Ġrelation Map [ relation Name ] Ġ= Ġmutable ListOf < Relation >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelation Map [ relation Name ] !!. addAll ( list ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ