java.util.zip.ZipEntry Scala Examples
The following examples show how to use java.util.zip.ZipEntry.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: FileUtil.scala From mleap with Apache License 2.0 | 5 votes |
package ml.combust.bundle.serializer import java.io.{File, FileInputStream, FileOutputStream} import java.util.zip.{ZipEntry, ZipInputStream, ZipOutputStream} import resource._ case class FileUtil() { def rmRF(path: File): Array[(String, Boolean)] = { Option(path.listFiles).map(_.flatMap(f => rmRF(f))).getOrElse(Array()) :+ (path.getPath -> path.delete) } def extract(source: File, dest: File): Unit = { dest.mkdirs() for(in <- managed(new ZipInputStream(new FileInputStream(source)))) { extract(in, dest) } } def extract(in: ZipInputStream, dest: File): Unit = { dest.mkdirs() val buffer = new Array[Byte](1024 * 1024) var entry = in.getNextEntry while(entry != null) { if(entry.isDirectory) { new File(dest, entry.getName).mkdirs() } else { val filePath = new File(dest, entry.getName) for(out <- managed(new FileOutputStream(filePath))) { var len = in.read(buffer) while(len > 0) { out.write(buffer, 0, len) len = in.read(buffer) } } } entry = in.getNextEntry } } def zip(source: File, dest: File): Unit = { for(out <- managed(new ZipOutputStream(new FileOutputStream(dest)))) { zip(source, out) } } def zip(source: File, dest: ZipOutputStream): Unit = zip(source, source, dest) def zip(base: File, source: File, dest: ZipOutputStream): Unit = { val buffer = new Array[Byte](1024 * 1024) for(files <- Option(source.listFiles); file <- files) { val name = file.toString.substring(base.toString.length + 1) if(file.isDirectory) { dest.putNextEntry(new ZipEntry(s"$name/")) zip(base, file, dest) } else { dest.putNextEntry(new ZipEntry(name)) for (in <- managed(new FileInputStream(file))) { var read = in.read(buffer) while (read > 0) { dest.write(buffer, 0, read) read = in.read(buffer) } } } } } }
Example 2
package flaky.history import java.io.{File, FileInputStream, FileOutputStream} import java.util.zip.{ZipEntry, ZipOutputStream} object Zip { def compressFolder(zipFilePath: File, folder: File): Unit = { import java.io.File def recursiveListFiles(f: File): Array[File] = { val these = f.listFiles these.filter(_.isFile) ++ these.filter(_.isDirectory).flatMap(recursiveListFiles) } val toList = recursiveListFiles(folder).toList compress(zipFilePath, folder, toList) } def compress(zipFilePath: File, root: File, files: List[File]): Unit = { val zip = new ZipOutputStream(new FileOutputStream(zipFilePath)) val rootPath = root.getAbsolutePath try { for (file <- files) { zip.putNextEntry(new ZipEntry(file.getAbsolutePath.substring(rootPath.length))) val in = new FileInputStream(file) try { Iterator .continually(in.read()) .takeWhile(_ > -1) .foreach(zip.write) } finally { in.close() } zip.closeEntry() } } finally { zip.close() } } }
Example 3
Source File: DependencyNode.scala From cuesheet with Apache License 2.0 | 5 votes |
package com.kakao.cuesheet.deps import java.io.{BufferedOutputStream, File, FileOutputStream, IOException} import java.net.{URL, URLDecoder} import java.nio.file.{Files, Paths} import java.util.zip.{ZipEntry, ZipOutputStream} import com.kakao.mango.io.FileSystems import com.kakao.mango.logging.Logging import com.kakao.shaded.guava.io.Files.createTempDir sealed trait DependencyNode { def path: String } case class ManagedDependency(group: String, artifact: String, classifier: String = "jar") case class ManagedDependencyNode( path: String, group: String, artifact: String, classifier: String, version: String, children: Seq[ManagedDependency] ) extends DependencyNode { def key = ManagedDependency(group, artifact, classifier) } case class DirectoryDependencyNode(path: String) extends DependencyNode with Logging { lazy val compressed: UnmanagedDependencyNode = { val tmpdir = createTempDir() val jar = new File(s"${tmpdir.getAbsolutePath}/local-${tmpdir.getName}.jar") val root = Paths.get(path) val output = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(jar))) var count = 0 FileSystems.entries(root).foreach { path => if (resourceExtensions.exists(path.toString.endsWith)) { val entry = new ZipEntry(root.relativize(path).toString) output.putNextEntry(entry) try { Files.copy(path, output) count += 1 } catch { case e: IOException => logger.warn(s"skipping $path due to an IOException: ${e.getMessage}") } output.closeEntry() } } output.close() logger.debug(s"Successfully zipped $count files in $path into $jar") UnmanagedDependencyNode(jar.getAbsolutePath) } } case class JavaRuntimeDependencyNode(path: String) extends DependencyNode case class UnmanagedDependencyNode(path: String) extends DependencyNode object DependencyNode { val resolver = new ChainedArtifactResolver( new IvyPathArtifactResolver, new IvyOriginalPathArtifactResolver, new MavenPathArtifactResolver, new GradlePathArtifactResolver, new JavaRuntimeResolver, new MavenMetadataArtifactResolver, new UnmanagedJarResolver ) def resolve(url: URL): DependencyNode = { if (url.getProtocol != "file") { throw new IllegalArgumentException("non-file dependency is not supported") } val path = URLDecoder.decode(url.getFile, "UTF-8") val file = new File(path) if (file.isDirectory) { return DirectoryDependencyNode(file.getAbsolutePath) } if (!file.isFile || !file.canRead) { throw new IllegalArgumentException(s"$path is not a file or readable") } DependencyNode.resolver.resolve(file.getAbsolutePath) match { case Some(node) => node case None => throw new IllegalArgumentException(s"Could not determine the dependency of $path") } } }
Example 4
Source File: ZipUtil.scala From coursier with Apache License 2.0 | 5 votes |
import java.util.zip.{ZipEntry, ZipInputStream, ZipOutputStream} import java.io.{ByteArrayOutputStream, File, FileInputStream, FileOutputStream, InputStream} object ZipUtil { def addToZip(sourceZip: File, destZip: File, extra: Seq[(String, Array[Byte])]): Unit = { val is = new FileInputStream(sourceZip) val os = new FileOutputStream(destZip) val bootstrapZip = new ZipInputStream(is) val outputZip = new ZipOutputStream(os) def readFullySync(is: InputStream) = { val buffer = new ByteArrayOutputStream val data = Array.ofDim[Byte](16384) var nRead = is.read(data, 0, data.length) while (nRead != -1) { buffer.write(data, 0, nRead) nRead = is.read(data, 0, data.length) } buffer.flush() buffer.toByteArray } def zipEntries(zipStream: ZipInputStream): Iterator[(ZipEntry, Array[Byte])] = new Iterator[(ZipEntry, Array[Byte])] { private var nextEntry = Option.empty[ZipEntry] private def update() = nextEntry = Option(zipStream.getNextEntry) update() def hasNext = nextEntry.nonEmpty def next() = { val ent = nextEntry.get val data = readFullySync(zipStream) update() (ent, data) } } val extraNames = extra.map(_._1).toSet for ((ent, data) <- zipEntries(bootstrapZip) if !extraNames(ent.getName)) { // Same workaround as https://github.com/spring-projects/spring-boot/issues/13720 // (https://github.com/spring-projects/spring-boot/commit/a50646b7cc3ad941e748dfb450077e3a73706205#diff-2ff64cd06c0b25857e3e0dfdb6733174R144) ent.setCompressedSize(-1L) outputZip.putNextEntry(ent) outputZip.write(data) outputZip.closeEntry() } for ((dest, data) <- extra) { outputZip.putNextEntry(new ZipEntry(dest)) outputZip.write(data) outputZip.closeEntry() } outputZip.close() is.close() os.close() } }
Example 5
package coursier.launcher.internal import java.util.zip.{ZipEntry, ZipFile, ZipInputStream} import scala.collection.JavaConverters._ private[coursier] object Zip { def zipEntries(zipStream: ZipInputStream): Iterator[(ZipEntry, Array[Byte])] = new Iterator[(ZipEntry, Array[Byte])] { var nextEntry = Option.empty[ZipEntry] def update() = nextEntry = Option(zipStream.getNextEntry) update() def hasNext = nextEntry.nonEmpty def next() = { val ent = nextEntry.get val data = FileUtil.readFullyUnsafe(zipStream) update() // ZipInputStream seems not to be fine with custom deflaters, like some recent versions of proguard use. // This makes ZipOutputStream not handle some of these entries fine without this. // See https://github.com/spring-projects/spring-boot/issues/13720#issuecomment-403428384. // Same workaround as https://github.com/spring-projects/spring-boot/issues/13720 // (https://github.com/spring-projects/spring-boot/commit/a50646b7cc3ad941e748dfb450077e3a73706205#diff-2ff64cd06c0b25857e3e0dfdb6733174R144) ent.setCompressedSize(-1L) (ent, data) } } def zipEntries(zipFile: ZipFile): Iterator[(ZipEntry, Array[Byte])] = zipFile.entries().asScala.map { ent => val data = FileUtil.readFully(zipFile.getInputStream(ent)) // Doing this like above just in case ent.setCompressedSize(-1L) (ent, data) } }
Example 6
Source File: ZipTests.scala From coursier with Apache License 2.0 | 5 votes |
package coursier.cli.util import java.io.{ByteArrayInputStream, ByteArrayOutputStream} import java.util.Random import java.util.zip.{Deflater, ZipEntry, ZipInputStream, ZipOutputStream} import coursier.launcher.internal.Zip import org.junit.runner.RunWith import org.scalatest.flatspec.AnyFlatSpec import org.scalatestplus.junit.JUnitRunner @RunWith(classOf[JUnitRunner]) class ZipTests extends AnyFlatSpec { "zipEntries" should "be fine with custom deflaters" in { // Inspired by https://github.com/spring-projects/spring-boot/commit/a50646b7cc3ad941e748dfb450077e3a73706205#diff-2297c301250b25e3b80301c58daf3ea0R621 val baos = new ByteArrayOutputStream val output = new ZipOutputStream(baos) { `def` = new Deflater(Deflater.NO_COMPRESSION, true) } val data = Array.ofDim[Byte](1024 * 1024) new Random().nextBytes(data) val entry = new ZipEntry("entry.dat") output.putNextEntry(entry) output.write(data) output.closeEntry() output.close() val result = baos.toByteArray val zos = new ZipOutputStream(new ByteArrayOutputStream) val entryNames = Zip.zipEntries(new ZipInputStream(new ByteArrayInputStream(result))) .map { case (ent, content) => println(ent.getCompressedSize) val name = ent.getName zos.putNextEntry(ent) zos.write(content) zos.closeEntry() name } .toVector zos.close() assert(entryNames == Vector("entry.dat")) } }
Example 7
Source File: FileUtilities.scala From mmlspark with MIT License | 5 votes |
// Copyright (C) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in project root for information. package com.microsoft.ml.spark.core.env import java.io.File import java.nio.file.{Files, StandardCopyOption} import scala.io.{BufferedSource, Source} object FileUtilities { def join(folders: String*): File = { folders.tail.foldLeft(new File(folders.head)) { case (f, s) => new File(f, s) } } def join(base: File, folders: String*): File = { folders.foldLeft(base) { case (f, s) => new File(f, s) } } // Same for StandardOpenOption type StandardOpenOption = java.nio.file.StandardOpenOption object StandardOpenOption { import java.nio.file.{StandardOpenOption => S} val APPEND = S.APPEND val CREATE = S.CREATE } def allFiles(dir: File, pred: (File => Boolean) = null): Array[File] = { def loop(dir: File): Array[File] = { val (dirs, files) = dir.listFiles.sorted.partition(_.isDirectory) (if (pred == null) files else files.filter(pred)) ++ dirs.flatMap(loop) } loop(dir) } // readFile takes a file name or a File, and function to extract a value from // BufferedSource which defaults to _.mkString; performs the read, closes the // source, and returns the result def readFile[T](file: File, read: BufferedSource => T): T = { val i = Source.fromFile(file) try read(i) finally i.close } def readFile(file: File): String = readFile(file, _.mkString) def writeFile(file: File, stuff: Any, flags: StandardOpenOption*): Unit = { Files.write(file.toPath, stuff.toString.getBytes(), flags: _*) () } def copyFile(from: File, toDir: File, overwrite: Boolean = false): Unit = { Files.copy(from.toPath, (new File(toDir, from.getName)).toPath, (if (overwrite) Seq(StandardCopyOption.REPLACE_EXISTING) else Seq()): _*) () } // Perhaps this should move into a more specific place, not a generic file utils thing def zipFolder(dir: File, out: File): Unit = { import java.io.{BufferedInputStream, FileInputStream, FileOutputStream} import java.util.zip.{ZipEntry, ZipOutputStream} val bufferSize = 2 * 1024 val data = new Array[Byte](bufferSize) val zip = new ZipOutputStream(new FileOutputStream(out)) val prefixLen = dir.getParentFile.toString.length + 1 allFiles(dir).foreach { file => zip.putNextEntry(new ZipEntry(file.toString.substring(prefixLen).replace(java.io.File.separator, "/"))) val in = new BufferedInputStream(new FileInputStream(file), bufferSize) var b = 0 while (b >= 0) { zip.write(data, 0, b); b = in.read(data, 0, bufferSize) } in.close() zip.closeEntry() } zip.close() } }
Example 8
Source File: AndroidXMLParser.scala From Argus-SAF with Apache License 2.0 | 5 votes |
package org.argus.amandroid.core.parser import java.io.File import java.util.zip.ZipEntry import java.util.zip.ZipInputStream import java.io.FileInputStream def handleAndroidXMLFiles(apk: File, fileNameFilter: Set[String], handler: AndroidXMLHandler): Unit = { try { var archive: ZipInputStream = null try { archive = new ZipInputStream(new FileInputStream(apk)) var entry: ZipEntry = null entry = archive.getNextEntry while (entry != null) { val entryName = entry.getName handler.handleXMLFile(entryName, fileNameFilter, archive) entry = archive.getNextEntry } } finally { if (archive != null) archive.close() } } catch { case e: Exception => e.printStackTrace() throw e } } }
Example 9
Source File: ZipUtil.scala From Argus-SAF with Apache License 2.0 | 5 votes |
package org.argus.jawa.core.util import java.io.{File, FileOutputStream, InputStream, OutputStream} import java.util.zip.{ZipEntry, ZipFile} import scala.collection.JavaConverters._ object ZipUtil { val BUFSIZE = 4096 val buffer = new Array[Byte](BUFSIZE) def unZip(source: String, targetFolder: String): Boolean = { val zipFile = new ZipFile(source) unzipAllFile(zipFile.entries.asScala.toList, getZipEntryInputStream(zipFile), new File(targetFolder)) } def getZipEntryInputStream(zipFile: ZipFile)(entry: ZipEntry): InputStream = zipFile.getInputStream(entry) def unzipAllFile(entryList: List[ZipEntry], inputGetter: ZipEntry => InputStream, targetFolder: File): Boolean = { entryList match { case entry :: entries => if (entry.isDirectory) new File(targetFolder, entry.getName).mkdirs else saveFile(inputGetter(entry), new FileOutputStream(new File(targetFolder, entry.getName))) unzipAllFile(entries, inputGetter, targetFolder) case _ => true } } def saveFile(fis: InputStream, fos: OutputStream): Unit = { writeToFile(bufferReader(fis), fos) fis.close() fos.close() } def bufferReader(fis: InputStream)(buffer: Array[Byte]): (Int, Array[Byte]) = (fis.read(buffer), buffer) def writeToFile(reader: Array[Byte] => (Int, Array[Byte]), fos: OutputStream): Boolean = { val (length, data) = reader(buffer) if (length >= 0) { fos.write(data, 0, length) writeToFile(reader, fos) } else true } }
Example 10
Source File: Using.scala From Argus-SAF with Apache License 2.0 | 5 votes |
package org.argus.jawa.core.compiler.compile.io import java.io.{Closeable, FileInputStream, FileOutputStream, InputStream, OutputStream, File => JavaFile} import java.io.{BufferedInputStream, BufferedOutputStream, InputStreamReader, OutputStreamWriter} import java.io.{BufferedReader, BufferedWriter} import java.util.zip.GZIPInputStream import java.net.URL import java.nio.channels.FileChannel import java.nio.charset.Charset import java.util.jar.{JarFile, JarInputStream, JarOutputStream} import java.util.zip.{GZIPOutputStream, ZipEntry, ZipFile, ZipInputStream, ZipOutputStream} import ErrorHandling.translate import scala.reflect.{Manifest => SManifest} abstract class Using[Source, T] { protected def open(src: Source): T def apply[R](src: Source)(f: T => R): R = { val resource = open(src) try { f(resource) } finally { close(resource) } } protected def close(out: T): Unit } abstract class WrapUsing[Source, T](implicit srcMf: SManifest[Source], targetMf: SManifest[T]) extends Using[Source, T] { protected def label[S](m: SManifest[S]): String = m.runtimeClass.getSimpleName protected def openImpl(source: Source): T protected final def open(source: Source): T = translate("Error wrapping " + label(srcMf) + " in " + label(targetMf) + ": ") { openImpl(source) } } trait OpenFile[T] extends Using[JavaFile, T] { protected def openImpl(file: JavaFile): T protected final def open(file: JavaFile): T = { val parent = file.getParentFile if(parent != null) IO.createDirectory(parent) openImpl(file) } } object Using { def wrap[Source, T<: Closeable](openF: Source => T)(implicit srcMf: SManifest[Source], targetMf: SManifest[T]): Using[Source,T] = wrap(openF, closeCloseable) def wrap[Source, T](openF: Source => T, closeF: T => Unit)(implicit srcMf: SManifest[Source], targetMf: SManifest[T]): Using[Source,T] = new WrapUsing[Source, T] { def openImpl(source: Source): T = openF(source) def close(t: T): Unit = closeF(t) } def resource[Source, T <: Closeable](openF: Source => T): Using[Source,T] = resource(openF, closeCloseable) def resource[Source, T](openF: Source => T, closeF: T => Unit): Using[Source,T] = new Using[Source,T] { def open(s: Source): T = openF(s) def close(s: T): Unit = closeF(s) } def file[T <: Closeable](openF: JavaFile => T): OpenFile[T] = file(openF, closeCloseable) def file[T](openF: JavaFile => T, closeF: T => Unit): OpenFile[T] = new OpenFile[T] { def openImpl(file: JavaFile): T = openF(file) def close(t: T): Unit = closeF(t) } private def closeCloseable[T <: Closeable]: T => Unit = _.close() def bufferedOutputStream: Using[OutputStream, BufferedOutputStream] = wrap((out: OutputStream) => new BufferedOutputStream(out) ) def bufferedInputStream: Using[InputStream, BufferedInputStream] = wrap((in: InputStream) => new BufferedInputStream(in) ) def fileOutputStream(append: Boolean = false): OpenFile[BufferedOutputStream] = file(f => new BufferedOutputStream(new FileOutputStream(f, append))) def fileInputStream: OpenFile[BufferedInputStream] = file(f => new BufferedInputStream(new FileInputStream(f))) def urlInputStream: Using[URL, BufferedInputStream] = resource((u: URL) => translate("Error opening " + u + ": ")(new BufferedInputStream(u.openStream))) def fileOutputChannel: OpenFile[FileChannel] = file(f => new FileOutputStream(f).getChannel) def fileInputChannel: OpenFile[FileChannel] = file(f => new FileInputStream(f).getChannel) def fileWriter(charset: Charset = IO.utf8, append: Boolean = false): OpenFile[BufferedWriter] = file(f => new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f, append), charset)) ) def fileReader(charset: Charset): OpenFile[BufferedReader] = file(f => new BufferedReader(new InputStreamReader(new FileInputStream(f), charset)) ) def urlReader(charset: Charset): Using[URL, BufferedReader] = resource((u: URL) => new BufferedReader(new InputStreamReader(u.openStream, charset))) def jarFile(verify: Boolean): OpenFile[JarFile] = file(f => new JarFile(f, verify), (_: JarFile).close()) def zipFile: OpenFile[ZipFile] = file(f => new ZipFile(f), (_: ZipFile).close()) def streamReader: Using[(InputStream, Charset), InputStreamReader] = wrap{ (_: (InputStream, Charset)) match { case (in, charset) => new InputStreamReader(in, charset) } } def gzipInputStream: Using[InputStream, GZIPInputStream] = wrap((in: InputStream) => new GZIPInputStream(in, 8192) ) def zipInputStream: Using[InputStream, ZipInputStream] = wrap((in: InputStream) => new ZipInputStream(in)) def zipOutputStream: Using[OutputStream, ZipOutputStream] = wrap((out: OutputStream) => new ZipOutputStream(out)) def gzipOutputStream: Using[OutputStream, GZIPOutputStream] = wrap((out: OutputStream) => new GZIPOutputStream(out, 8192), (_: GZIPOutputStream).finish()) def jarOutputStream: Using[OutputStream, JarOutputStream] = wrap((out: OutputStream) => new JarOutputStream(out)) def jarInputStream: Using[InputStream, JarInputStream] = wrap((in: InputStream) => new JarInputStream(in)) def zipEntry(zip: ZipFile): Using[ZipEntry, InputStream] = resource((entry: ZipEntry) => translate("Error opening " + entry.getName + " in " + zip + ": ") { zip.getInputStream(entry) } ) }
Example 11
Source File: ThriftFeatureTest.scala From diffy with GNU Affero General Public License v3.0 | 5 votes |
package ai.diffy import java.io.{File, FileOutputStream} import java.net.ServerSocket import java.nio.file.Files import java.util.zip.{ZipEntry, ZipOutputStream} import ai.diffy.examples.thrift.ExampleServers import ai.diffy.proxy.DifferenceProxy import ai.diffy.thriftscala.Adder import com.google.inject.Stage import com.twitter.finagle.http.Status import com.twitter.finagle.util.DefaultTimer import com.twitter.finagle.{Http, ThriftMux} import com.twitter.finatra.http.EmbeddedHttpServer import com.twitter.inject.Test import com.twitter.util.{Await, Duration, Future, FuturePool} import scala.io.Source class ThriftFeatureTest extends Test { def getPort(): Int = { val s = new ServerSocket(0) val port = s.getLocalPort s.close() port } val env@Seq(p,s,c,d) = Seq.fill(4)(getPort()) val environment = FuturePool.unboundedPool(ExampleServers.main(env.take(3).map(_.toString).toArray)) val diffy = new MainService lazy val differenceProxy = diffy.injector.instance[DifferenceProxy] val thriftFile = new File("src/test/thrift/example.thrift") val data = Source.fromInputStream(Files.newInputStream(thriftFile.toPath), "UTF-8").mkString val thriftJar = Files.createTempFile("thrift", "jar") thriftJar.toFile.deleteOnExit() val out = new ZipOutputStream(new FileOutputStream(thriftJar.toFile)) out.putNextEntry(new ZipEntry(thriftFile.getAbsolutePath)) out.write(data.getBytes) out.closeEntry() out.close() val server = new EmbeddedHttpServer( twitterServer = diffy, flags = Map( "proxy.port" -> s":$d", "candidate" -> s"localhost:$c", "master.primary" -> s"localhost:$p", "master.secondary" -> s"localhost:$s", "serviceName" -> "myThriftService", "service.protocol" -> "thrift", "thrift.jar" -> thriftJar.toAbsolutePath.toString, "thrift.serviceClass" -> "Adder", "summary.email" -> "test" ), stage = Stage.PRODUCTION ) val client = ThriftMux.client.build[Adder.MethodPerEndpoint](s"localhost:$d") test("verify startup") { server.assertHealthy() } test("verify DifferenceCollector") { assert(differenceProxy.collector.fields.isEmpty) Await.result(client.add(1, 1).liftToTry) var tries = 0 while(differenceProxy.outstandingRequests.get() > 0 && tries < 10) { Await.result(Future.sleep(Duration.fromSeconds(1))(DefaultTimer)) tries = tries + 1 } assert(!differenceProxy.collector.fields.isEmpty) } test("verify present differences via API") { val response = Await.result(Http.fetchUrl(s"http://${server.externalHttpHostAndPort}/api/1/endpoints/add/stats")) assertResult(Status.Ok)(response.status) assert(response.getContentString().contains(""""differences":1""")) } test("verify absent endpoint in API") { val response = Await.result(Http.fetchUrl(s"http://${server.externalHttpHostAndPort}/api/1/endpoints/subtract/stats")) assertResult(Status.Ok)(response.status) assertResult("""{"error":"key not found: subtract"}""")(response.getContentString()) } }
Example 12
Source File: BackupWriter.scala From recogito2 with Apache License 2.0 | 5 votes |
package controllers.document import controllers.HasConfig import java.io.{File, FileInputStream, FileOutputStream, BufferedInputStream, ByteArrayInputStream, InputStream, PrintWriter} import java.nio.file.Paths import java.math.BigInteger import java.security.{MessageDigest, DigestInputStream} import java.util.UUID import java.util.zip.{ZipEntry, ZipOutputStream} import services.HasDate import services.annotation.{Annotation, AnnotationService} import services.document.{ExtendedDocumentMetadata, DocumentToJSON} import services.generated.tables.records.{DocumentRecord, DocumentFilepartRecord} import play.api.libs.json.Json import play.api.libs.Files.TemporaryFileCreator import scala.concurrent.{ExecutionContext, Future} import storage.TempDir import storage.uploads.Uploads trait BackupWriter extends HasBackupValidation { self: HasConfig => // Frontend annotation format import services.annotation.FrontendAnnotation._ private val BUFFER_SIZE = 2048 private def writeToZip(inputStream: InputStream, filename: String, zip: ZipOutputStream) = { zip.putNextEntry(new ZipEntry(filename)) val md = MessageDigest.getInstance(ALGORITHM) val in = new DigestInputStream(new BufferedInputStream(inputStream), md) var data= new Array[Byte](BUFFER_SIZE) var count: Int = 0 while ({ count = in.read(data, 0, BUFFER_SIZE); count } > -1) { zip.write(data, 0, count) } in.close() zip.closeEntry() new BigInteger(1, md.digest()).toString(16) } def createBackup(doc: ExtendedDocumentMetadata)(implicit ctx: ExecutionContext, uploads: Uploads, annotations: AnnotationService, tmpFile: TemporaryFileCreator): Future[File] = { def getFileAsStream(owner: String, documentId: String, filename: String) = { val dir = uploads.getDocumentDir(owner, documentId).get // Fail hard if the dir doesn't exist new FileInputStream(new File(dir, filename)) } def getManifestAsStream() = { val manifest = "Recogito-Version: 2.0.1-alpha" new ByteArrayInputStream(manifest.getBytes) } def getMetadataAsStream(doc: ExtendedDocumentMetadata) = { // DocumentRecord JSON serialization import services.document.DocumentToJSON._ val json = Json.prettyPrint(Json.toJson((doc.document, doc.fileparts))) new ByteArrayInputStream(json.getBytes) } def getAnnotationsAsStream(docId: String, annotations: Seq[Annotation], parts: Seq[DocumentFilepartRecord]): InputStream = { val path = Paths.get(TempDir.get()(self.config), s"${docId}_annotations.json") val tmp = tmpFile.create(path) val writer = new PrintWriter(path.toFile) annotations.foreach(a => writer.println(Json.stringify(Json.toJson(a)))) writer.close() new FileInputStream(path.toFile) } Future { tmpFile.create(Paths.get(TempDir.get()(self.config), s"${doc.id}.zip")) } flatMap { zipFile => val zipStream = new ZipOutputStream(new FileOutputStream(zipFile.path.toFile)) writeToZip(getManifestAsStream(), "manifest", zipStream) val metadataHash = writeToZip(getMetadataAsStream(doc), "metadata.json", zipStream) val fileHashes = doc.fileparts.map { part => writeToZip(getFileAsStream(doc.ownerName, doc.id, part.getFile), "parts" + File.separator + part.getFile, zipStream) } annotations.findByDocId(doc.id).map { annotations => val annotationsHash = writeToZip(getAnnotationsAsStream(doc.id, annotations.map(_._1), doc.fileparts), "annotations.jsonl", zipStream) val signature = computeSignature(metadataHash, fileHashes, annotationsHash) writeToZip(new ByteArrayInputStream(signature.getBytes), "signature", zipStream) zipStream.close() zipFile.path.toFile } } } }
Example 13
Source File: UnzipHelper.scala From data-weave-native with Apache License 2.0 | 5 votes |
package org.mule.weave.dwnative.utils import java.io.File import java.io.FileOutputStream import java.io.IOException import java.io.InputStream import java.util.zip.ZipEntry import java.util.zip.ZipInputStream object UnzipHelper { def unZipIt(zipFile: InputStream, outputFolder: File): Unit = { val buffer = new Array[Byte](1024) try { //output directory val folder: File = outputFolder; if (!folder.exists()) { folder.mkdirs() } //zip file content val zis: ZipInputStream = new ZipInputStream(zipFile) //get the zipped file list entry var ze: ZipEntry = zis.getNextEntry(); while (ze != null) { val fileName = ze.getName(); val newFile = new File(outputFolder + File.separator + fileName); //create folders new File(newFile.getParent()).mkdirs(); val fos = new FileOutputStream(newFile); var len: Int = zis.read(buffer); while (len > 0) { fos.write(buffer, 0, len) len = zis.read(buffer) } fos.close() ze = zis.getNextEntry() } zis.closeEntry() zis.close() } catch { case e: IOException => println("exception caught: " + e.getMessage) } } }
Example 14
Source File: IdeaMock.scala From sbt-idea-plugin with Apache License 2.0 | 5 votes |
package org.jetbrains.sbtidea.download.idea import java.net.{URI, URL} import java.nio.file.{Files, Path, Paths} import java.util.zip.{ZipEntry, ZipInputStream} import org.jetbrains.sbtidea.download.BuildInfo import org.jetbrains.sbtidea.packaging.artifact import org.jetbrains.sbtidea.{Keys, TmpDirUtils} import org.jetbrains.sbtidea.Keys._ import org.jetbrains.sbtidea.download.jbr.JbrDependency trait IdeaMock extends TmpDirUtils { protected val IDEA_VERSION = "192.5728.12" protected val IDEA_EDITION = "IU" protected val IDEA_DIST = s"idea$IDEA_EDITION-$IDEA_VERSION.zip" protected val IDEA_DIST_PATH = s"/org/jetbrains/sbtidea/download/$IDEA_DIST" protected val IDEA_BUILDINFO: BuildInfo = BuildInfo(IDEA_VERSION, Keys.IntelliJPlatform.IdeaUltimate, Some(JbrDependency.VERSION_AUTO)) protected val IDEA_DEP: IdeaDependency = IdeaDependency(IDEA_BUILDINFO) protected val IDEA_ART: IdeaDist = IdeaDistImpl(IDEA_DEP, new URL("file:")) protected val bundledPlugins: List[Keys.IntellijPlugin] = "org.jetbrains.plugins.yaml".toPlugin :: "com.intellij.properties".toPlugin :: Nil protected def installIdeaMock: Path = { val tmpDir = newTmpDir val installDir = Files.createDirectory(tmpDir.resolve(IDEA_VERSION)) val stream = getClass.getResourceAsStream(IDEA_DIST_PATH) artifact.using(new ZipInputStream(stream)) { zip => var entry: ZipEntry = zip.getNextEntry while (entry != null) { val toPath = installDir.resolve(entry.getName) if (entry.isDirectory) Files.createDirectory(toPath) else Files.copy(zip, toPath) entry = zip.getNextEntry } } installDir } protected def getDistCopy: Path = Files.copy(getIdeaDistMockPath, newTmpDir.resolve(IDEA_DIST)) protected def getIdeaDistMockURI: URI = getClass.getResource(IDEA_DIST_PATH).toURI protected def getIdeaDistMockPath: Path = Paths.get(getIdeaDistMockURI) }