package Ġme . kc ra . log 4 j fix er Ċ Ċ import Ġme . kc ra . log 4 j fix er . utils . Jar Patch er Ċ import Ġme . kc ra . log 4 j fix er . utils . unzip Ċ import Ġorg . apache . commons . cli . CommandLine Ċ import Ġorg . apache . commons . cli . Default Parser Ċ import Ġorg . apache . commons . cli . Help Formatter Ċ import Ġorg . apache . commons . cli . Options Ċ import Ġjava . io . File Ċ import Ġjava . net . URL Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Standard Copy Option Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġoptions : ĠOptions Ġ= ĠOptions () ĊĠĠĠĠĠĠĠ Ġ. add Required Option (" f ", Ġ" file ", Ġtrue , Ġ" Select s Ġthe Ġfile Ġto Ġbe Ġpatched ") ĊĠĠĠ Ġval Ġhelp Formatter Ġ= ĠHelp Formatter () ĊĠĠĠ Ġval Ġcmd : ĠCommandLine ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġcmd Ġ= ĠDefault Parser (). parse ( options , Ġargs ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhelp Formatter . print Help (" Log 4 J Fixer ", Ġoptions ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfile : ĠFile Ġ= ĠPath . of ( cmd . getOption Value (' f ')). to File () ĊĠĠĠ Ġif Ġ(! file . isFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Could Ġnot Ġfind Ġpatch able Ġfile !") ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġlog 4 j Jar Extract : ĠFile Ġ= Ġunzip ( get From URL (" https :// repo 1 . maven . org / maven 2 / org / apache / logging / log 4 j / log 4 j - core / 2 . 1 5 . 0 / log 4 j - core - 2 . 1 5 . 0 . jar "), ĠFiles . create Temp Directory (" log 4 j _ unzip "). to File ()) ĊĠĠĠ Ġprintln (" Pull ing Ġhttps :// repo 1 . maven . org / maven 2 / org / apache / logging / log 4 j / log 4 j - core / 2 . 1 5 . 0 / log 4 j - core - 2 . 1 5 . 0 . jar ...") ĊĠĠĠ Ġval Ġpatch able Classes : ĠMap < String , ĠFile > Ġ= ĠFiles . walk ( log 4 j Jar Extract . to Path ()) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġpath Ġ-> Ġpath . to File () Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġf Ġ-> Ġf . name . endsWith (". class ") Ġ} ĊĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠ Ġ. associate By ({ Ġit . name Ġ}, Ġ{ Ġit Ġ}) ĊĊĠĠĠ ĠFiles . move ( Jar Patch er ( file ). patch ( patch able Classes , Ġ" log 4 j "). to Path (), ĠPath . of ( System . getProperty (" user . dir "), Ġ" patched . jar "), ĠStandard Copy Option . REPLACE _ EXIST ING ) Ċ } Ċ Ċ fun Ġget From URL ( url : ĠString ): ĠFile Ġ{ ĊĠĠĠ Ġval Ġfile : ĠPath Ġ= ĠFiles . create TempFile (" downloaded _ file ", Ġnull ) ĊĠĠĠ ĠURL ( url ). open Stream (). use Ġ{ ĠinputStream Ġ-> ĊĠĠĠĠĠĠĠ ĠFiles . copy ( inputStream , Ġfile , ĠStandard Copy Option . REPLACE _ EXIST ING ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfile . to File () Ċ }