package Ġnl . kn aw . hu yg ens . graph viz Ċ Ċ /* - Ċ Ġ* Ġ#% L Ċ Ġ* ĠGraph Viz Wrapper Ċ Ġ* Ġ======= Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 Ġ- Ġ 2 0 2 1 ĠHu yg ens ĠIN G Ġ( K NA W ) Ċ Ġ* Ġ======= Ċ Ġ* Ġ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 . Ċ Ġ* Ġ# L % Ċ Ġ*/ Ċ Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ import Ġjava . util . logging . Level Ċ import Ġjava . util . logging . Logger Ċ Ċ object ĠGraph Viz Wrapper Ġ{ ĊĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠLogger . getLogger ( Graph Viz Wrapper :: class . java . name ) ĊĠĠĠ Ġprivate Ġconst Ġval ĠWH ICH _ DOT Ġ= Ġ" which Ġdot " ĊĠĠĠ Ġprivate Ġconst Ġval ĠWHERE _ DOT Ġ= Ġ" where Ġdot . exe " ĊĊĠĠĠ Ġfun Ġdetect Dot Path (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġif Ġ( System . getProperty (" os . name "). contains (" Windows ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( WHERE _ DOT , ĠWH ICH _ DOT ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( WH ICH _ DOT , ĠWHERE _ DOT ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( detection Command Ġin Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocess Ġ= ĠRuntime . get Runtime (). exec ( detection Command ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput StreamReader Ġ= ĠInputStreamReader ( process . inputStream , ĠCharset . default Charset ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBufferedReader ( input StreamReader ). use Ġ{ Ġprocess Reader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠCompletableFuture . supply Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Reader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. lines () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġline : ĠString Ġ-> Ġline . trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġline : ĠString Ġ-> Ġline . toLowerCase (). contains (" dot ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. findFirst () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess . waitFor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpath . get (). get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . log ( Level . F INE , Ġdetection Command , Ġt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ } Ċ