/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 - 2 0 2 0 ĠRe ece ĠH . ĠD un n Ċ Ġ* Ċ Ġ* Ġ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 Ġuk . co . re ec ed un n . intellij . plugin . core . zip Ċ Ċ import Ġuk . co . re ec ed un n . intellij . plugin . core . io . Non Closing InputStream Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . InputStream Ċ import Ġjava . util . zip . Zip Entry Ċ import Ġjava . util . zip . Zip InputStream Ċ import Ġjava . util . zip . Zip OutputStream Ċ Ċ private Ġclass ĠZip Entry Iterator ( private Ġval Ġzip : ĠZip InputStream ) Ġ: ĠIterator < Zip Entry > Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġentry : ĠZip Entry ? Ġ= Ġzip . next Entry ĊĠĠĠ Ġprivate Ġvar Ġconsumed Next Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( consumed Next ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed Next Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry Ġ= Ġzip . next Entry ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġentry Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnext (): ĠZip Entry Ġ{ ĊĠĠĠĠĠĠĠ Ġconsumed Next Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġentry !! ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠZip InputStream . entries : ĠSequence < Zip Entry > ĊĠĠĠ Ġget () Ġ= ĠZip Entry Iterator ( this ). as Sequence () Ċ Ċ fun ĠSequence < Pair < Zip Entry , ĠByteArray >> . to Zip ByteArray (): ĠByteArray Ġ= ĠByteArrayOutputStream (). use Ġ{ Ġstream Ġ-> ĊĠĠĠ ĠZip OutputStream ( stream ). use Ġ{ Ġzip Ġ-> ĊĠĠĠĠĠĠĠ ĠforEach Ġ{ Ġ( entry , Ġcontents ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip . put Next Entry ( entry ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip . write ( contents ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip . close Entry () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstream . toByteArray () Ċ } Ċ Ċ fun ĠInputStream . unzip ( f : Ġ( Zip Entry , ĠInputStream ) Ġ-> ĠUnit ): ĠUnit Ġ= Ġuse Ġ{ Ġstream Ġ-> ĊĠĠĠ ĠZip InputStream ( stream ). use Ġ{ Ġzip Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠNon Closing InputStream ( zip ) ĊĠĠĠĠĠĠĠ Ġzip . entries . forEach Ġ{ Ġentry Ġ-> Ġf ( entry , Ġinput ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠByteArray . unzip (): ĠList < Pair < Zip Entry , ĠByteArray >> Ġ{ ĊĠĠĠ Ġval Ġcontents Ġ= ĠByteArrayOutputStream ( DEFAULT _ BUFFER _ SIZE ) ĊĠĠĠ Ġval Ġret Ġ= ĠArrayList < Pair < Zip Entry , ĠByteArray >>() ĊĠĠĠ ĠByteArrayInputStream ( this ). unzip Ġ{ Ġentry , Ġzip Ġ-> ĊĠĠĠĠĠĠĠ Ġzip . copy To ( contents ) ĊĠĠĠĠĠĠĠ Ġret . add ( Pair ( entry , Ġcontents . toByteArray ())) ĊĠĠĠĠĠĠĠ Ġcontents . reset () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġret Ċ } Ċ