package Ġvisual isation . graph Ċ Ċ import Ġkotlinx . html .* Ċ import Ġkotlinx . html . stream . append HTML Ċ import Ġkotlinx . serialization . encode ToString Ċ import Ġutil . Help Functions Util Ċ import Ġvisual isation . entity . Graph Data Three JS Ċ import Ġjava . io . File Ċ Ċ abstract Ġclass ĠGraph Three JS ( private Ġval Ġgraph Js FileName : ĠString ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDATA _ JS _ FILENAME Ġ= Ġ" data . js " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠGRAPH _ HTML _ ID Ġ= Ġ" 3 d - graph " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠHTML _ FILENAME Ġ= Ġ" graph . html " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTHREE _ JS _ LIB Ġ= Ġ" https :// un pkg . com / three @ 0 . 1 3 0 . 1 / build / three . js " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠGRAPH _ JS _ LIB Ġ= Ġ" https :// un pkg . com / 3 d - force - graph @ 1 . 7 0 . 5 / dist / 3 d - force - graph . min . js " ĊĊĠĠĠĠĠĠĠ Ġprotected Ġfun ĠgetResource As Text ( path : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ{} . java Class . getResource ( path ). read Text () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĊ ĊĠĠĠĠĠĠĠ Ġfun Ġedge Color ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquant ile 1 : ĠString Ġ= Ġ"# FFF 9 E 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquant ile 2 : ĠString Ġ= Ġ"# F 1 C 5 5 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquant ile 3 : ĠString Ġ= Ġ"# FF 6 6 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquant ile 4 : ĠString Ġ= Ġ"# CE 2 5 2 5 " ĊĠĠĠĠĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( value Ġ<= Ġ 0 . 2 5 f ) Ġ-> Ġquant ile 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( value Ġ<= Ġ 0 . 5 f ) Ġ-> Ġquant ile 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( value Ġ<= Ġ 0 . 7 5 f ) Ġ-> Ġquant ile 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġquant ile 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġnormalize MinMax ( value : ĠFloat , Ġmin : ĠFloat , Ġmax : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( value Ġ- Ġmin ) Ġ/ Ġ( max Ġ- Ġmin ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Graph JS ( directory : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscript Ġ= ĠgetResource As Text ("/ $ graph Js FileName ") ĊĠĠĠĠĠĠĠ ĠFile ( directory , Ġgraph Js FileName ). write Text ( script ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate HTML ( directory : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhtml Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Line (" <! DOCTYPE Ġhtml >") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend HTML (). html Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiv Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠGRAPH _ HTML _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Ġ= ĠTHREE _ JS _ LIB ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Ġ= ĠGRAPH _ JS _ LIB ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Ġ= ĠFile ( directory , ĠDATA _ JS _ FILENAME ). absolute Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Ġ= ĠFile ( directory , Ġgraph Js FileName ). absolute Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠFile ( directory , ĠHTML _ FILENAME ). write Text ( html ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġgenerate Data ( size : ĠInt , Ġdescending : ĠBoolean ): ĠGraph Data Three JS ĊĊĠĠĠ Ġfun Ġsave Graph ( directory : ĠFile , Ġsize : ĠInt , Ġdescending : ĠBoolean ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! directory . exists () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirectory . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirectory . exists () Ġ&& Ġ! directory . isDirectory Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Wrong Ġpath Ġto Ġsave Ġgraph . ĠThere Ġare Ġalready Ġexists Ġfile : Ġ${ directory . absolute Path }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate HTML ( directory ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgraph Ġ= Ġgenerate Data ( size , Ġdescending ) ĊĠĠĠĠĠĠĠ Ġcreate Data JS ( directory , Ġgraph ) ĊĊĠĠĠĠĠĠĠ Ġcreate Graph JS ( directory ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Data JS ( directory : ĠFile , Ġgraph : ĠGraph Data Three JS ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Json Ġ= ĠHelp Functions Util . json . encode ToString ( graph ) ĊĠĠĠĠĠĠĠ ĠFile ( directory , ĠDATA _ JS _ FILENAME ). write Text (" const Ġdata Ġ= Ġ$ data Json ") ĊĠĠĠ Ġ} Ċ } Ċ