package Ġnet . cord a . de mob ench . plugin Ċ Ċ import Ġnet . cord a . core . internal . copy To Directory Ċ import Ġnet . cord a . core . internal . create Directories Ċ import Ġnet . cord a . core . internal . exists Ċ import Ġnet . cord a . de mob ench . model . Has C ord apps Ċ import Ġnet . cord a . de mob ench . model . JVM Config Ċ import Ġnet . cord a . de mob ench . model . Node Config Ċ import Ġnet . cord a . de mob ench . model . Node Config Wrapper Ċ import Ġt orn ad of x .* Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Standard Copy Option Ċ import Ġjava . util . stream . Stream Ċ Ċ class ĠC ord app Controller Ġ: ĠController () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġj vm Ġby Ġinject < JVM Config >() ĊĠĠĠ Ġprivate Ġval Ġc ord app Dir : ĠPath Ġ= Ġj vm . application Dir . resolve ( Node Config . cord app Dir Name ) ĊĠĠĠ Ġprivate Ġval Ġbank Of C ord a : ĠPath Ġ= Ġc ord app Dir . resolve (" bank - of - cord a . jar ") ĊĠĠĠ Ġprivate Ġval Ġfin ance : ĠPath Ġ= Ġc ord app Dir . resolve (" cord a - finance . jar ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInstall Ġany Ġbuilt - in Ġc ord apps Ġthat Ġthis Ġnode Ġrequires . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġpopulate ( config : ĠNode Config Wrapper ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! config . cord apps Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . cord apps Dir . create Directories () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( finance . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfin ance . copy To Directory ( config . cord apps Dir , ĠStandard Copy Option . REPLACE _ EXIST ING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Installed Ġ' Finance ' Ġc ord app ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠNodes Ġcannot Ġissue Ġcash Ġunless Ġthey Ġcontain Ġthe Ġ" Bank Ġof ĠC ord a " Ġc ord app . ĊĠĠĠĠĠĠĠ Ġif Ġ( config . node Config . iss uable C urrencies . isNotEmpty () Ġ&& Ġbank Of C ord a . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbank Of C ord a . copy To Directory ( config . cord apps Dir , ĠStandard Copy Option . REPLACE _ EXIST ING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Installed Ġ' Bank Ġof ĠC ord a ' Ġc ord app ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerates Ġa Ġstream Ġof Ġa Ġnode 's Ġnon - built - in Ġc ord apps . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġuse C ord apps For ( config : ĠHas C ord apps ): ĠStream < Path > Ġ= Ġwalk C ord apps ( config . cord apps Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! bank Of C ord a . endsWith ( it . fileName ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! finance . endsWith ( it . fileName ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwalk C ord apps ( cord apps Dir : ĠPath ): ĠStream < Path > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Files . isDirectory ( cord apps Dir )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . walk ( cord apps Dir , Ġ 1 ). filter ( Path :: is C ord app ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStream . empty () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun ĠPath . is C ord app (): ĠBoolean Ġ= ĠFiles . is Readable ( this ) Ġ&& Ġthis . fileName . toString (). endsWith (". jar ") Ċ fun ĠPath . in C ord apps Dir (): ĠBoolean Ġ= Ġ( this . parent Ġ!= Ġnull ) Ġ&& Ġthis . parent . endsWith (" cord apps /") Ċ