Skip to content

Commit ec16c2b

Browse files
authored
Make ZipFileReader AutoCloseable (#189)
1 parent 564dbf0 commit ec16c2b

2 files changed

Lines changed: 15 additions & 3 deletions

File tree

src/main/scala/io/apibuilder/validation/MultiService.scala

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import io.apibuilder.validation.util.{FileOrder, StandardErrors}
77
import io.apibuilder.validation.zip.ZipFileReader
88
import play.api.libs.json._
99

10+
import scala.util.Using
11+
1012
/**
1113
* Wrapper to work with multiple API Builder services.
1214
* Takes an ordered list of services. If multiple
@@ -169,7 +171,8 @@ object MultiService {
169171

170172
/**
171173
* Allow a client to read from for example s3 by providing a reader already constructed from the
172-
* stream.
174+
* stream. Note that the caller is responsible for ensuring that close() is called on the reader
175+
* when done.
173176
*/
174177
def fromZipFileReader(reader: ZipFileReader): ValidatedNec[String, Seq[ApiBuilderService]] = {
175178
val fileSorter = FileOrder(reader.entries.find(_.name.toLowerCase() == OrderByFileName).map(_.file))
@@ -181,6 +184,10 @@ object MultiService {
181184
}
182185

183186
private def servicesFromZip(url: String): ValidatedNec[String, Seq[ApiBuilderService]] = {
184-
ZipFileReader.fromUrl(url).andThen(fromZipFileReader)
187+
ZipFileReader
188+
.fromUrl(url)
189+
.andThen { zfr =>
190+
Using.resource(zfr)(fromZipFileReader)
191+
}
185192
}
186193
}

src/main/scala/io/apibuilder/validation/zip/ZipFileReader.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import java.nio.file.Files
88
import java.util.zip.ZipEntry
99
import java.util.zip.ZipInputStream
1010
import io.apibuilder.validation.util.UrlDownloader
11+
import org.apache.commons.io.FileUtils
1112

1213
object ZipFileReader {
1314

@@ -36,10 +37,14 @@ object ZipFileReader {
3637
}
3738
}
3839

39-
case class ZipFileReader(inputStream: InputStream) {
40+
case class ZipFileReader(inputStream: InputStream) extends AutoCloseable {
4041

4142
private val destDir: File = Files.createTempDirectory("zipfilereader").toFile
4243

44+
override def close(): Unit = {
45+
FileUtils.deleteQuietly(destDir)
46+
}
47+
4348
/**
4449
* Returns a list of the entries of the zip file (all files ending with .json)
4550
*/

0 commit comments

Comments
 (0)