/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠSer ge ĠMer z li ak ov Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttps :// 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 . install m ation . service Ċ Ċ import Ġorg . apache . logging . log 4 j . Log Manager Ċ import Ġorg . apache . logging . log 4 j . Logger Ċ import Ġorg . install m ation . configuration . Configuration Ċ import Ġorg . install m ation . core . Clear Messages Event Ċ import Ġorg . install m ation . core . Collection Utils Ċ import Ġorg . install m ation . core . Operating System Ċ import Ġorg . install m ation . core . User Message Event Ċ import Ġorg . install m ation . image . Image Processor Ċ import Ġorg . install m ation . image . Image Tool Ċ import Ġorg . install m ation . image . Linux Image Processor Ċ import Ġorg . install m ation . image . OSX Image Processor Ċ import Ġorg . install m ation . image . Windows Image Processor Ċ import Ġorg . install m ation . io . File Filters Ċ import Ġorg . install m ation . model .* Ċ import Ġorg . install m ation . model . binary . J Deps Executable Ċ import Ġorg . install m ation . model . binary . J Package Executable Ċ import Ġorg . install m ation . model . binary . Module Dependencies Generator Ċ import Ġjava . io . File Ċ Ċ private Ġval Ġlog : ĠLogger Ġ= ĠLog Manager . getLogger ( Install Creator :: class . java ) Ċ Ċ /** Ċ Ġ* ĠGenerates Ġimages Ġand Ġinstall ers Ċ Ġ*/ Ċ class ĠInstall Creator ( private Ġval Ġconfiguration : ĠConfiguration ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġimage Ġ(. exe Ġor Ġ. app Ġfile ), Ġbut Ġnot Ġthe Ġinstaller ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate Image ( prj : ĠInstall Project ): ĠGenerate Result Ġ{ ĊĠĠĠĠĠĠ ĠcheckNotNull ( prj . image Build Directory ) ĊĠĠĠĠĠĠ ĠcheckNotNull ( prj . j package JDK ) ĊĠĠĠĠĠĠ ĠcheckNotNull ( prj . main Jar ) ĊĠĠĠĠĠĠ ĠcheckNotNull ( prj . java FX Lib ?. path ) ĊĊĠĠĠĠĠĠ Ġconfiguration . event Bus . post ( Clear Messages Event ()) ĊĠĠĠĠĠĠ Ġprogress Message (" Image Ġcreation Ġstarted .... ") ĊĊĠĠĠĠĠĠ Ġval Ġpack ager Ġ= Ġinitialize Image Pack ager ( prj , Ġfalse ) ĊĠĠĠĠĠĠ Ġval Ġfull Command Ġ= Ġpack ager . toString () ĊĠĠĠĠĠĠ Ġlog . info (" command : Ġ$ full Command ") ĊĠĠĠĠĠĠ Ġprogress Message (" command : Ġ$ full Command ") ĊĠĠĠĠĠĠ Ġval Ġprocess Output Ġ= Ġpack ager . execute () ĊĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġprocess Output . output ) ĊĠĠĠĠĠĠĠĠĠ Ġprogress Message ( line ) ĊĊĠĠĠĠĠĠ Ġval Ġresult : ĠGenerate Result ĊĠĠĠĠĠĠ Ġif Ġ( process Output . success ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprogress Message (" Image Ġ${ prj . name Ġ+ ĠOperating System . image File Extension ()} Ġcreated Ġsuccessfully Ġin Ġ${ prj . image Build Directory !!. path }") ĊĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠGenerate Result ( true ) ĊĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprogress ErrorMessage (" Image Ġcreation Ġfailed Ġwith Ġerrors :") ĊĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠGenerate Result ( false , Ġprocess Output . errors ()) ĊĠĠĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġprocess Output . errors ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress ErrorMessage ( line ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO Ġerror Ġhandling ĊĠĠĠ Ġfun Ġcreate Image Script ( prj : ĠInstall Project ): ĠShell Script Ġ{ ĊĠĠĠĠĠĠ Ġval Ġpack ager Ġ= Ġinitialize Image Pack ager ( prj , Ġtrue ) ĊĠĠĠĠĠĠ Ġval Ġfull Command Ġ= Ġpack ager . to Shell String () ĊĠĠĠĠĠĠ Ġval Ġscript Ġ= ĠShell Script Factory . create Script (" generate _ image ") ĊĠĠĠĠĠĠ Ġscript . add Line ( full Command ) ĊĠĠĠĠĠĠ Ġreturn Ġscript ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Installer Script ( prj : ĠInstall Project ): ĠShell Script Ġ{ ĊĠĠĠĠĠĠ ĠcheckNotNull ( prj . installer Directory ) ĊĠĠĠĠĠĠ ĠcheckNotNull ( prj . j package JDK ) ĊĠĠĠĠĠĠ ĠcheckNotNull ( prj . main Jar ) ĊĠĠĠĠĠĠ ĠcheckNotNull ( prj . java FX Lib ?. path ) ĊĠĠĠĠĠĠ ĠcheckNotNull ( prj . installer Type ) ĊĊĠĠĠĠĠĠ Ġval Ġpack ager Ġ= Ġinitialize Installer Pack ager ( prj , Ġtrue ) ĊĠĠĠĠĠĠ Ġval Ġfull Command Ġ= Ġpack ager . to Shell String () ĊĠĠĠĠĠĠ Ġval Ġscript Ġ= ĠShell Script Factory . create Script (" generate _ installer ") ĊĠĠĠĠĠĠ Ġscript . add Line ( full Command ) ĊĠĠĠĠĠĠ Ġreturn Ġscript ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġcomplete Ġinstaller ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate Installer ( prj : ĠInstall Project ): ĠGenerate Result Ġ{ ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( prj . installer Directory ) ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( prj . j package JDK ) ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( prj . main Jar ) ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( prj . java FX Lib ?. path ) ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( prj . installer Type ) ĊĊĠĠĠĠĠĠĠ Ġconfiguration . event Bus . post ( Clear Messages Event ()) ĊĠĠĠĠĠĠ Ġprogress Message (" Installer Ġcreation Ġstarted .... ") ĊĊĠĠĠĠĠĠ Ġ// ĠStep Ġ 1 Ġcreate Ġimage Ġas Ġwell ĊĠĠĠĠĠĠ Ġval Ġimage Result Ġ= Ġcreate Image ( prj ) ĊĠĠĠĠĠĠ Ġif Ġ(! image Result . successful ) ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġimage Result ĊĊĠĠĠĠĠĠ Ġprogress Message (" *** ĠAP PLICATION ĠIMAGE ĠCRE ATED ĠSUCCESS FULL Y . ĠSTART ING ĠINSTALL ER ĠCRE ATION Ġ*** ") ĊĊĠĠĠĠĠĠ Ġ// ĠStep Ġ 2 Ġ- Ġcreate Ġinstaller Ġbased Ġon Ġimage Ġcreated Ġin ĠStep Ġ 1 ĊĠĠĠĠĠĠ Ġval Ġpack ager Ġ= Ġinitialize Installer Pack ager ( prj , Ġfalse ) ĊĠĠĠĠĠĠ Ġval Ġfull Command Ġ= Ġpack ager . toString () ĊĠĠĠĠĠĠ Ġlog . info (" command : Ġ$ full Command ") ĊĠĠĠĠĠĠ Ġprogress Message (" command : Ġ$ full Command ") ĊĠĠĠĠĠĠ Ġval Ġprocess Output Ġ= Ġpack ager . execute () ĊĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġprocess Output . output ) ĊĠĠĠĠĠĠĠĠĠ Ġprogress Message ( line ) ĊĊĠĠĠĠĠĠ Ġval Ġresult : ĠGenerate Result ĊĠĠĠĠĠĠ Ġif Ġ( process Output . success ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprogress Message (" Installer Ġcreation Ġcompleted Ġsuccessfully Ġin Ġ${ prj . installer Directory !!. path }") ĊĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠGenerate Result ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprogress Message (" Installer Ġcreation Ġfailed Ġwith Ġerrors :") ĊĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠGenerate Result ( false , Ġprocess Output . errors ()) ĊĠĠĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġprocess Output . errors ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress ErrorMessage ( line ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠ Ġ/** ĊĠĠĠ Ġ* ĠCreate ĠInstall er ĊĠĠĠ Ġ*/ ĊĠĠ Ġprivate Ġfun Ġinitialize Installer Pack ager ( prj : ĠInstall Project , Ġscript Only : ĠBoolean ): ĠJ Package Executable Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! script Only ) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġdelete Directories ( prj . installer Directory ) ĊĠĠĠĠĠĠĠĠ Ġpr j . installer Directory ?. mkdir s () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġpack ager Ġ= ĠJ Package Executable ( configuration . event Bus , Ġpr j . j package JDK !! ) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( pack ager . create Installer Parameter ( prj . installer Type !! )) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( pack ager . create Destination Parameter ( prj . installer Directory !!. path )) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- app - version ", Ġpr j . version )) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- copyright ", Ġpr j . copyright Ġ?: Ġ" Copyright Ġ 2 0 1 9 ")) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("- n ", Ġpr j . name )) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( pack ager . create Installer App Image Parameter ( prj . name !! , Ġpr j . image Build Directory !!. path )) ĊĠĠĠĠĠ Ġprocess OSX Parameters ( pack ager , Ġpr j ) ĊĠĠĠĠĠ Ġreturn Ġpack ager ĊĠĠ Ġ} ĊĊĠĠ Ġ/** ĊĠĠĠ Ġ* ĠThis Ġis Ġcalled Ġby Ġinstaller Ġcreation Ġprocess Ġand Ġreturns Ġthe Ġcommand Ġoutput ĊĠĠĠ Ġ*/ ĊĠĠ Ġprivate Ġfun Ġinitialize Image Pack ager ( prj : ĠInstall Project , Ġscript Only : ĠBoolean ): ĠJ Package Executable Ġ{ ĊĠĠĠĠĠ ĠcheckNotNull ( prj . input Directory ) ĊĠĠĠĠĠ ĠcheckNotNull ( prj . main Jar ) ĊĠĠĠĠĠ ĠcheckNotNull ( prj . main Class ) ĊĊĠĠĠĠĠ Ġ// Ġfor Ġscripts , Ġ Ġdon 't Ġ" do " Ġanything ĊĠĠĠĠĠ Ġval Ġlogo : ĠFile ? ĊĠĠĠĠĠ Ġif Ġ( script Only ) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġlogo Ġ= Ġpr j . application Logo ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠ Ġ// ĠSTEP Ġ 1 Ġ- Ġmake Ġsure Ġlib / Ġand Ġmain Ġjar Ġin Ġimage Content Directory ĊĠĠĠĠĠĠĠĠ Ġcreate Image Content ( prj ) ĊĊĠĠĠĠĠĠĠĠ Ġ// ĠStep Ġ 2 Ġ- ĠGenerate ĠImage Ġin Ġimage Build Directory ĊĠĠĠĠĠĠĠĠ Ġprogress Message (" Deleting Ġold Ġimage Ġcontent .... ") ĊĠĠĠĠĠĠĠĠ Ġdelete Directories ( prj . image Build Directory ) ĊĠĠĠĠĠĠĠĠ Ġpr j . image Build Directory !!. mkdir s () ĊĠĠĠĠĠĠĠĠ Ġlogo Ġ= Ġcreate Application Icon ( prj . application Logo , Ġpr j . input Directory !! ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġpack ager Ġ= ĠJ Package Executable ( configuration . event Bus , Ġpr j . j package JDK !! ) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( pack ager . create Image Parameter ()) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("- i ", Ġpr j . input Directory !!. path )) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- app - version ", Ġpr j . version )) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- vendor ", Ġpr j . vendor )) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- copyright ", Ġpr j . copyright Ġ?: Ġ" Copyright Ġ 2 0 2 0 ")) ĊĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- icon ", Ġlogo ?. path )) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( pack ager . create Destination Parameter ( prj . image Build Directory !!. path )) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("- n ", Ġpr j . name )) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- module - path ", Ġpr j . java FX Mods ?. path ?. path )) ĊĊĠĠĠĠĠ Ġ// Ġcheck Ġif Ġmodular Ġapplication ĊĠĠĠĠĠ Ġval Ġmodules Ġ= Ġgenerate Module Dependencies ( prj ) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- add - modules ", Ġmodules )) ĊĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- java - options ", Ġpr j . jvm Arguments )) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- main - jar ", Ġpr j . main Jar ?. name )) ĊĠĠĠĠĠ Ġpack ager . parameters . add Argument ( pack ager . create Main Class Parameter ( prj . main Class !! )) ĊĠĠĠĠĠ Ġreturn Ġpack ager ĊĠĠ Ġ} ĊĊĠĠ Ġprivate Ġfun Ġprocess OSX Parameters ( pack ager : ĠJ Package Executable , Ġpr j : ĠInstall Project ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( Operating System . os () Ġ== ĠOperating System . Type . OSX ) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- mac - package - identifier ", Ġpr j . package Identifier )) ĊĠĠĠĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- mac - package - name ", Ġpr j . packageName )) ĊĊĠĠĠĠĠĠĠĠ Ġif Ġ( prj . sign Installer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Flag Argument ("-- mac - sign ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- mac - package - signing - prefix ", Ġpr j . sign Prefix )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- mac - signing - key chain ", Ġpr j . apple Installer Key Chain ?. path )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpack ager . parameters . add Argument ( Value Argument ("-- mac - signing - key - user - name ", Ġ"${ prj . apple Installer Cert Name } ")) ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} ĊĊĠĠ Ġprivate Ġfun Ġcreate Application Icon ( raw Image : ĠFile ?, Ġdestination : ĠFile ): ĠFile ? Ġ{ ĊĠĠĠĠĠ Ġif Ġ( raw Image Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠ Ġreturn Ġwhen Ġ( Operating System . os ()) Ġ{ ĊĠĠĠĠĠĠĠĠ ĠOperating System . Type . OSX Ġ-> Ġcreate OSX Application Icon ( raw Image , Ġdestination ) ĊĠĠĠĠĠĠĠĠ ĠOperating System . Type . Windows Ġ-> Ġcreate Windows Application Icon ( raw Image , Ġdestination ) ĊĠĠĠĠĠĠĠĠ ĠOperating System . Type . Linux Ġ-> Ġcreate Linux Application Icon ( raw Image , Ġdestination ) ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} ĊĊĠĠ Ġprivate Ġfun Ġcreate OSX Application Icon ( raw Image : ĠFile , Ġdestination : ĠFile ): ĠFile Ġ{ ĊĠĠĠĠĠ Ġif Ġ( raw Image . extension Ġ== ĠImage Tool . ImageType . Ic ns . value ) ĊĠĠĠĠĠĠĠĠ Ġreturn Ġraw Image . copy To ( File ( destination , Ġraw Image . name ), Ġtrue ) ĊĠĠĠĠĠ Ġval Ġprocessor : ĠImage Processor Ġ= ĠOSX Image Processor ( configuration . event Bus ) ĊĠĠĠĠĠ Ġreturn Ġprocessor . create Application Logo ( raw Image , Ġdestination ) ĊĠĠ Ġ} ĊĊĠĠ Ġprivate Ġfun Ġcreate Windows Application Icon ( raw Image : ĠFile , Ġdestination : ĠFile ): ĠFile Ġ{ ĊĠĠĠĠĠ Ġif Ġ( raw Image . extension Ġ== ĠImage Tool . ImageType . I co . value ) ĊĠĠĠĠĠĠĠĠ Ġreturn Ġraw Image . copy To ( File ( destination , Ġraw Image . name ), Ġtrue ) ĊĠĠĠĠĠ Ġval Ġprocessor : ĠImage Processor Ġ= ĠWindows Image Processor () ĊĠĠĠĠĠ Ġreturn Ġprocessor . create Application Logo ( raw Image , Ġdestination ) ĊĠĠ Ġ} ĊĊĠĠ Ġprivate Ġfun Ġcreate Linux Application Icon ( raw Image : ĠFile , Ġdestination : ĠFile ): ĠFile Ġ{ ĊĠĠĠĠĠ Ġ// ĠTODO ĠCHECK Ġfor Ġimage Ġtype Ġlike Ġother ĠOS ĊĠĠĠĠĠ Ġval Ġprocessor : ĠImage Processor Ġ= ĠLinux Image Processor () ĊĠĠĠĠĠ Ġreturn Ġprocessor . create Application Logo ( raw Image , Ġdestination ) ĊĠĠ Ġ} ĊĊĠĠ Ġ/** ĊĠĠĠ Ġ* ĠRun Ġj deps Ġtool Ġto Ġget Ġa Ġlist Ġof ĠJDK Ġmodules Ġused Ġby Ġthe Ġtarget Ġapplication ĊĠĠĠ Ġ*/ ĊĠĠ Ġprivate Ġfun Ġgenerate Module Dependencies ( prj : ĠInstall Project ): ĠString Ġ{ ĊĠĠĠĠĠ Ġif Ġ( prj . class Path . isEmpty ()) ĊĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĊĠĠĠĠĠ ĠcheckNotNull ( prj . j package JDK ) ĊĠĠĠĠĠ ĠcheckNotNull ( prj . java FX Lib ) ĊĠĠĠĠĠ ĠcheckNotNull ( prj . main Jar ) ĊĊĠĠĠĠĠ Ġval Ġclass Path String Ġ= ĠCollection Utils . to Path List ( prj . class Path . map Ġ{ Ġit . path Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġj deps Ġ= ĠJ Deps Executable ( configuration . event Bus , Ġpr j . j package JDK !! ) ĊĠĠĠĠĠĠĠ Ġval Ġmm Ġ= ĠModule Dependencies Generator ( j deps , Ġclass Path String , Ġpr j . java FX Lib ?. path !! , Ġpr j . main Jar ?. path !! ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcombine Ġmodules Ġdiscovered Ġplus Ġcustom Ġmodules Ġspecified Ġby Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġtotal Ġ= Ġmutable Set Of < String >() ĊĠĠĠĠĠĠĠ Ġtotal . addAll ( prj . custom Modules ) ĊĠĠĠĠĠĠĠ Ġtotal . addAll ( mm . generate ()) ĊĠĠĠĠĠĠĠ Ġval Ġdependencies Ġ= Ġ Ġtotal . join ToString (",") ĊĠĠĠĠĠ Ġlog . debug (" Module Ġdependencies : Ġ$ dependencies ") ĊĠĠĠĠĠ Ġreturn Ġdependencies ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Image Content ( prj : ĠInstall Project ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdestination Ġ= Ġpr j . input Directory !! ĊĠĠĠĠĠĠĠ Ġprogress Message (" Creating Ġall ĠImage ĠContent Ġin Ġ${ destination . path }") ĊĠĠĠĠĠĠĠ Ġdelete Directories ( destination ) ĊĠĠĠĠĠĠĠ Ġval Ġlibs Ġ= ĠFile ( destination , Ġ" lib ") ĊĠĠĠĠĠĠĠ Ġlibs . mkdir s () ĊĊĠĠĠĠĠĠĠ Ġ// Ġmain Ġjar ĊĠĠĠĠĠĠĠ Ġpr j . main Jar ?. copy To ( File ( destination , Ġpr j . main Jar !!. name ), Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġclasspath ĊĠĠĠĠĠĠĠ Ġfor Ġ( cp Ġin Ġpr j . class Path ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjar Files Ġ= Ġcp . list Files ( File Filters . jar File Filter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( jar Files Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( jar Ġin Ġjar Files ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjar . copy To ( File ( libs , Ġjar . name ), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Directories ( d : ĠFile ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( d Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġd . delete Re cursively () ĊĠĠĠĠĠĠĠ Ġlog . debug (" deleted Ġ${ d . path } Ġ- Ġ$ res ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprogress Message ( m : ĠString ) Ġ{ ĊĠĠĠĠĠĠ Ġconfiguration . event Bus . post ( User Message Event ( m )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprogress ErrorMessage ( m : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconfiguration . event Bus . post ( User Message Event ( m , Ġtrue )) ĊĠĠĠ Ġ} Ċ } Ċ