// ĠCopyright Ġ 2 0 1 3 - 2 0 1 9 ĠM ic hel ĠK ra em er Ċ // Ċ // Ġ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 . Ċ package Ġde . under couch . gradle . tasks . download Ċ Ċ import Ġde . under couch . gradle . tasks . download . internal . ms Ċ import Ġorg . gradle . api . Default Task Ċ import Ġorg . gradle . api . specs . Spec Ċ import Ġorg . gradle . api . tasks .* Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠDown loads Ġa Ġfile Ġand Ġdisplays Ġprogress . ĠExample : Ċ Ġ* Ġ< pre > Ċ Ġ* Ġtask Ġdownload File ( type : ĠDownload ) Ġ{ Ċ Ġ* Ġsrc Ġ' http :// www . example . com / file . ext ' Ċ Ġ* Ġdest Ġbuild Dir Ċ Ġ* Ġ} Ċ </ pre > Ġ* Ċ Ġ* Ġ@ author ĠM ic hel ĠK ra em er Ċ Ġ*/ Ċ class ĠDownload Ġ: ĠDefault Task (), ĠDownload Spec Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġaction : ĠDownload Action Ġ= ĠDownload Action ( project , Ġthis ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarts Ġdownloading ĊĠĠĠĠ Ġ* Ġ@ throws ĠIOException Ġif Ġthe Ġfile Ġcould Ġnot Ġbe Ġdownloaded ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġdownload () Ġ{ ĊĠĠĠĠĠĠĠ Ġaction . execute () ĊĊĠĠĠĠĠĠĠ Ġ// Ġhandle Ġ' up ToDate ' ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action . is Up ToDate ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġthis . java Class . getMethod (" getState ")( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġprior Ġto ĠGradle Ġ 3 . 2 Ġwe Ġneeded Ġto Ġdo Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . java Class . getMethod (" up ToDate ")( state ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch Method Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsince ĠGradle Ġ 3 . 2 Ġwe Ġneed Ġto Ġdo Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . java Class . getMethod (" set Did Work ", ĠBoolean :: class . java Primitive Type )( state , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// just Ġignore ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefault Ġconstructor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġget Ġrequired Ġproject Ġproperties Ġnow Ġto Ġenable Ġconfiguration Ġcache ĊĠĠĠĠĠĠĠ Ġval Ġis Offline Ġ= Ġproject . gradle . start Parameter . is Offline ĊĠĠĠĠĠĠĠ Ġoutputs . up ToDate When Ġ{ Ġ!( only If Modified Ġ|| Ġoverwrite ) Ġ} ĊĠĠĠĠĠĠĠ Ġonly If ( Spec Ġ{ Ġ// Ġin Ġcase Ġoffline Ġmode Ġis Ġenabled Ġdon 't Ġtry Ġto Ġdownload Ġif ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdestination Ġalready Ġexists ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Offline ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( f Ġin Ġoutput Files ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! quiet ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . info (" Skipping Ġexisting Ġfile Ġ'${ f . name }' Ġin Ġoffline Ġmode .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Unable Ġto Ġdownload Ġfile Ġ'${ f . name }' Ġin Ġoffline Ġmode .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Spec Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġlist Ġof Ġfiles Ġcreated Ġby Ġthis Ġtask Ġ( i . e . Ġthe Ġdestination Ġfiles ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġoutput Files : ĠList < File > ĊĠĠĠĠĠĠĠ Ġ@ Output Files ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . output Files ĊĊĠĠĠ Ġoverride Ġvar Ġsrc : ĠAny ? ĊĠĠĠĠĠĠĠ Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . src ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . src Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġdest : ĠFile ĊĠĠĠĠĠĠĠ Ġ@ Internal ĊĠĠĠĠĠĠĠ Ġ// Ġsee Ġ# getOutput Files () ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . dest ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . dest Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġquiet : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ@ Console ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . quiet ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . quiet Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġoverwrite : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . overwrite ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . overwrite Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġonly If Modified : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . only If Modified ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . only If Modified Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġonly If New er : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . only If New er ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . only If New er Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġcompress : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . compress ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . compress Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġusername : ĠString ? ĊĠĠĠĠĠĠĠ Ġ@ Optional Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . username ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . username Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġpassword : ĠString ? ĊĠĠĠĠĠĠĠ Ġ@ Optional Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . password ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . password Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġauth Scheme : ĠString ? ĊĠĠĠĠĠĠĠ Ġ@ Optional Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . auth Scheme ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . auth Scheme Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġheaders : ĠMutable Map < String ?, ĠString ?> ? ĊĠĠĠĠĠĠĠ Ġ@ Optional Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . headers ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . headers Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġheader ( name : ĠString ?, Ġvalue : ĠString ?) Ġ= Ġaction . header ( name , Ġvalue ) ĊĠĠĠ Ġoverride Ġfun Ġget Header ( name : ĠString ?): ĠString ? Ġ= Ġaction . getHeader ( name ) ĊĊĠĠĠ Ġoverride Ġvar Ġaccept Any Certificate : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . accept Any Certificate ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . accept Any Certificate Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġconnect Timeout : Ġms ĊĠĠĠĠĠĠĠ Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . connect Timeout ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . connect Timeout Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġread Timeout : Ġms ĊĠĠĠĠĠĠĠ Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . read Timeout ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . read Timeout Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġretries : ĠInt ĊĠĠĠĠĠĠĠ Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . retries ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . retries Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġdownload Task Dir : ĠFile ? ĊĠĠĠĠĠĠĠ Ġ@ Internal ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . download Task Dir ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . download Task Dir Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġtemp And Move : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . temp And Move ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . temp And Move Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġuse ET ag : ĠAny ? ĊĠĠĠĠĠĠĠ Ġ@ Optional Ġ@ Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . use ET ag ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . use ET ag Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġcached ET ags File : ĠFile ? ĊĠĠĠĠĠĠĠ Ġ@ Internal ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġaction . cached ET ags File ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . cached ET ags File Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} Ċ }