package Ġorg . gen omic dat asci . covid pub med . lib Ċ Ċ import Ġarrow . core . Either Ċ import Ġorg . apache . commons . io . FileUtils Ċ import Ġorg . apache . commons . io . Filename Utils Ċ import Ġorg . gen omic dat asci . covid pub med . lib . Lit Cov id FileUtils . retrieve Remote File By Data file Property Ċ import Ġorg . gen omic dat asci . covid pub med . service . property . Data files Properties Service Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . net . URL Ċ import Ġjava . nio . file . Path Ċ import Ġjava . util .* Ċ import Ġjava . util . zip . GZIP InputStream Ċ import Ġjavax . annotation . Nullable Ċ Ċ /** Ċ Ġ* ĠA Ġcollection Ġof ĠFile - related Ġfunctions Ċ Ġ* ĠCreated Ġby Ġf cr is cu o Ġon Ġ 7 / 2 7 / 2 1 . Ċ Ġ*/ Ċ Ċ object ĠL it Cov id FileUtils Ġ{ ĊĠĠĠ Ġprivate Ġval ĠBASE _ DATA _ DIRECTORY Ġ= ĠData files Properties Service . resolve Property AsString (" base . data . path ") Ġ?: Ġ"/ tmp " ĊĠĠĠ Ġprivate Ġval ĠBASE _ SUB DIRECTORY _ NAME Ġ= ĠData files Properties Service . resolve Property AsString (" base . sub directory . name ") Ġ?: Ġ" data " ĊĠĠĠ Ġprivate Ġval Ġfile Separator : String Ġ= ĠSystem . getProperty (" file . separator ") ĊĠĠĠ Ġval Ġcompressed File Extensions Ġ= ĠlistOf < String >(" gz "," zip ") ĊĊĠĠĠ Ġ@ Jvm Static Ċ /* Ċ Function Ġto Ġdelete Ġa Ġdirectory Ġrecursively Ċ Ġ*/ ĊĠĠĠ Ġfun Ġdelete Directory Re cursively ( path : ĠPath ): ĠEither < Exception , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . delete Directory ( path . to File ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Right ("${ path . fileName } Ġand Ġchildren Ġhave Ġbeen Ġdeleted ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Left ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresolve DataSource From Url ( url : ĠURL ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhost Ġ= Ġurl . host . uppercase ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost . contains (" EB I ") Ġ-> Ġ" EB I " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost . contains (" ENSE MB L ") Ġ-> Ġ" ENSE MB L " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost . contains (" GEN CODE ") Ġ-> Ġ" Gen Code " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost . contains (" INT ACT ") Ġ-> Ġ" Int Act " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost . contains (" UN IP ROT ") Ġ-> Ġ" Uni Prot " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost . contains (" DR U GB ANK ") Ġ-> Ġ" Dr ug Bank " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost . contains (" SEQUENCE ON TO LOG Y ") Ġ-> Ġ" Sequence Ontology " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost . contains (" PH ARM G KB ") Ġ-> Ġ" Ph arm g KB " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost . contains (" j uni per . health . un m . ed ". toUpperCase ()) Ġ-> Ġ" Dis Ge NET " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost . contains (" dis gen et ". toUpperCase ()) Ġ-> Ġ" Dis Ge NET " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" UNSPECIFIED " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresolve Local FileName From Property Pair ( property Pair : ĠPair < String , ĠString >): ĠEither < Exception , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsubdirectory Ġ= Ġresolve Data Sub Directory From PropertyName ( property Pair . first ) ĊĠĠĠĠĠĠĠ Ġval Ġlocal Path Ġ= Ġsubdirectory Ġ+ Ġfile Separator Ġ+ Ġresolve Source FileName ( property Pair . second ) ĊĠĠĠĠĠĠĠ Ġreturn ĠEither . Right ( local Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresolve Source FileName ( remote Path : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġremote Path . split ( file Separator ). last () ĊĊĊĠĠĠ Ġprivate Ġfun Ġresolve Data Sub Directory From PropertyName ( propertyName : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( propertyName . startsWith ( BASE _ SUB DIRECTORY _ NAME . toString ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBASE _ DATA _ DIRECTORY . toString () Ġ+ Ġfile Separator Ġ+ ĠpropertyName . replace (".", Ġfile Separator ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠBASE _ DATA _ DIRECTORY . toString () Ġ+ Ġfile Separator Ġ+ ĠBASE _ SUB DIRECTORY _ NAME . toString () Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Separator Ġ+ ĠpropertyName . replace (".", Ġfile Separator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ ĠRead Ġthe Ġcontents Ġof Ġa Ġresource Ġfile Ġas Ġa ĠStream ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Nullable ĊĠĠĠ Ġfun ĠreadFile As Lines Using Get Resource AsStream ( fileName : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġthis :: class . java . getResource AsStream ( fileName ). buffered Reader (). read Lines () ĊĊĠĠĠ Ġ/* ĊĠĠĠ ĠFunction Ġto Ġaccess Ġa Ġremote Ġfile Ġvia Ġanonymous ĠFTP Ġand Ġcopy Ġits Ġcontents Ġto ĊĠĠĠ Ġthe Ġlocal Ġfilesystem Ġat Ġa Ġspecified Ġlocation . ĊĠĠĠ ĠParameters : Ġftp Url Ġ- ĠComplete ĠURL Ġfor Ġremote Ġfile ĊĠĠĠ ĠReturns : ĠEither Ġwhose ĠLeft Ġside Ġis Ġan ĠException , Ġand Ġwhose ĠRight Ġside Ġcontains Ġa Ġsuccess Ġmessage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġretrieve Remote File By Data file Property ( property Pair : ĠPair < String , ĠString >): ĠEither < Exception , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Connection Ġ= ĠURL ( property Pair . second ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġlocal Ġ= Ġresolve Local FileName From Property Pair ( property Pair )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEither . Right Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal FilePath Ġ= Ġlocal . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Connection . open Connection () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . copy InputStream ToFile ( url Connection . open Stream (), ĠFile ( local FilePath )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Filename Utils . getExtension ( local FilePath ) Ġin Ġcompressed File Extensions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg unzip File ( local FilePath ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Right ("${ property Pair . second } Ġdownloaded Ġto Ġ Ġ$ local FilePath ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Left ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEither . Left Ġ-> Ġreturn ĠEither . Left ( local . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġunzip Ġa Ġcompressed Ġfile ĊĠĠĠ Ġthe Ġexpanded Ġfile Ġis Ġgiven Ġthe Ġsame Ġfilename Ġwithout Ġthe Ġ. gz Ġor Ġ. zip Ġextension ĊĠĠĠ Ġand Ġthe Ġcompressed Ġfile Ġis Ġdeleted ĊĠĠĠ Ġthis Ġcode Ġis Ġa Ġsimple Ġrefactoring Ġof Ġa ĠJava Ġexample ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// TODO : Ġmake Ġthis Ġasynchronous ĊĠĠĠ Ġfun Ġg unzip File ( compressed File : ĠString ): ĠEither < Exception , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpanded File Ġ= ĠFilename Utils . remove Extension ( compressed File ) ĊĠĠĠĠĠĠĠ Ġval Ġgz is Ġ= ĠG ZIP InputStream ( FileInputStream ( compressed File )) ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠFileOutputStream ( expanded File ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlen : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlen Ġ= Ġgz is . read ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( len Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write ( buffer , Ġ 0 , Ġlen ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// delete Ġcompressed Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . force Delete ( File ( compressed File )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEither . Right ("$ compressed File Ġexpanded Ġto Ġ$ expanded File ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEither . Left ( e ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgz is . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġ/// data . dis gen et . cur ated . gene - d isease . associ ations = https :// www . dis gen et . org / static / dis gen et _ ap 1 / files / downloads / cur ated _ gene _ d isease _ associ ations . tsv . gz ĊĠĠĠ Ġval Ġresult Ġ= Ġretrieve Remote File By Data file Property ( Pair (" data . mint . human ", ĊĠĠĠĠĠĠĠ Ġ" http :// www . eb i . ac . uk / Tools / web services / ps ic quic / mint / web services / current / search / query / species : human " Ġ)) ĊĠĠĠ Ġwhen Ġ( result ){ ĊĠĠĠĠĠĠĠ Ġis ĠEither . Right Ġ-> Ġprintln ( result . value ) ĊĠĠĠĠĠĠĠ Ġis ĠEither . Left Ġ-> Ġprintln ( result . value . message ) ĊĠĠĠ Ġ} Ċ } Ċ