<name>Components Parent</name>
<packaging>pom</packaging>
<properties>
- <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
- <grpc.version>1.18.0</grpc.version>
- <protobuff.java.utils.version>3.6.1</protobuff.java.utils.version>
<eelf.version>1.0.0</eelf.version>
<guava.version>27.0.1-jre</guava.version>
<springfox.swagger2.version>2.9.2</springfox.swagger2.version>
<h2database.version>1.4.197</h2database.version>
<onap.logger.slf4j>1.2.2</onap.logger.slf4j>
- <mockk.version>1.9</mockk.version>
<velocity.version>1.7</velocity.version>
<jinja.version>2.5.1</jinja.version>
</properties>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-compress</artifactId>
- <version>1.15</version>
- </dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-compress</artifactId>
- </dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<name>Blueprints Processor Parent</name>
<description>Blueprints Processor Parent</description>
<properties>
- <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
- <grpc.version>1.18.0</grpc.version>
<sshd.version>2.2.0</sshd.version>
<jsch.version>0.1.55</jsch.version>
- <protobuff.java.utils.version>3.6.1</protobuff.java.utils.version>
<spring.kafka.version>2.2.6.RELEASE</spring.kafka.version>
<kafka.version>2.2.0</kafka.version>
<eelf.version>1.0.0</eelf.version>
<h2database.version>1.4.197</h2database.version>
<onap.logger.slf4j>1.2.2</onap.logger.slf4j>
<powermock.version>1.7.4</powermock.version>
- <mockk.version>1.9</mockk.version>
<dmaap.client.version>1.1.5</dmaap.client.version>
<jinja.version>2.5.1</jinja.version>
<velocity.version>1.7</velocity.version>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-compress</artifactId>
- <version>1.15</version>
- </dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-compress</artifactId>
- </dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
/*
* Copyright © 2017-2018 AT&T Intellectual Property.
* Modifications Copyright © 2019 Bell Canada.
+ * Modifications Copyright © 2019 Nordix Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.onap.ccsdk.cds.controllerblueprints.core.utils
- import org.apache.commons.compress.archivers.zip.ZipArchiveEntry
- import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream
- import org.apache.commons.io.IOUtils
+ import com.google.common.base.Predicates
import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
import org.slf4j.LoggerFactory
import java.io.BufferedInputStream
+ import java.io.ByteArrayOutputStream
import java.io.File
- import java.io.FileInputStream
+ import java.io.FileOutputStream
import java.io.IOException
+ import java.io.OutputStream
import java.nio.charset.Charset
+ import java.nio.file.FileVisitResult
+ import java.nio.file.Files
+ import java.nio.file.Path
+ import java.nio.file.SimpleFileVisitor
+ import java.nio.file.attribute.BasicFileAttributes
+ import java.util.function.Predicate
+ import java.util.zip.Deflater
+ import java.util.zip.ZipEntry
import java.util.zip.ZipFile
+ import java.util.zip.ZipOutputStream
class BluePrintArchiveUtils {
*
* @param source the base directory
* @param destination the output filename
- * @param absolute store absolute filepath (from directory) or only filename
* @return True if OK
*/
- fun compress(source: File, destination: File, absolute: Boolean): Boolean {
+ fun compress(source: File, destination: File): Boolean {
try {
+ if(!destination.parentFile.exists()) {
+ destination.parentFile.mkdirs()
+ }
destination.createNewFile()
- ZipArchiveOutputStream(destination).use {
- recurseFiles(source, source, it, absolute)
+ val ignoreZipFiles = Predicate<Path> { path -> !path.endsWith(".zip") && !path.endsWith(".ZIP") }
+ FileOutputStream(destination).use { out ->
+ compressFolder(source.toPath(), out, pathFilter = ignoreZipFiles)
}
} catch (e: Exception) {
log.error("Fail to compress folder($source) to path(${destination.path})", e)
}
/**
- * Recursive traversal to add files
- *
- * @param root
- * @param file
- * @param zaos
- * @param absolute
- * @throws IOException
+ * In-memory compress an entire folder.
*/
- @Throws(IOException::class)
- private fun recurseFiles(root: File, file: File, zaos: ZipArchiveOutputStream,
- absolute: Boolean) {
- if (file.isDirectory) {
- // recursive call
- val files = file.listFiles()
- for (fileChild in files!!) {
- recurseFiles(root, fileChild, zaos, absolute)
- }
- } else if (!file.name.endsWith(".zip") && !file.name.endsWith(".ZIP")) {
- val filename = if (absolute) {
- file.absolutePath.substring(root.absolutePath.length)
- } else {
- file.name
- }
- val zae = ZipArchiveEntry(filename)
- zae.size = file.length()
- zaos.putArchiveEntry(zae)
- FileInputStream(file).use {
- IOUtils.copy(it, zaos)
- it.close()
- }
- zaos.closeArchiveEntry()
- }
+ fun compressToBytes(baseDir: Path, compressionLevel: Int = Deflater.NO_COMPRESSION): ByteArray {
+ return compressFolder(baseDir, ByteArrayOutputStream(), compressionLevel = compressionLevel)
+ .toByteArray()
}
+ /**
+ * Compress an entire folder.
+ *
+ * @param baseDir path of base folder to be packaged.
+ * @param output the output stream
+ * @param pathFilter filter to ignore files based on its path.
+ * @param compressionLevel the wanted compression level.
+ * @param fixedModificationTime to force every entry to have this modification time.
+ * Useful for reproducible operations, like tests, for example.
+ */
+ private fun <T> compressFolder(baseDir: Path, output: T,
+ pathFilter: Predicate<Path> = Predicates.alwaysTrue(),
+ compressionLevel: Int = Deflater.DEFAULT_COMPRESSION,
+ fixedModificationTime: Long? = null): T
+ where T : OutputStream {
+ ZipOutputStream(output)
+ .apply { setLevel(compressionLevel) }
+ .use { zos ->
+ Files.walkFileTree(baseDir, object : SimpleFileVisitor<Path>() {
+ @Throws(IOException::class)
+ override fun visitFile(file: Path, attrs: BasicFileAttributes): FileVisitResult {
+ if (pathFilter.test(file)) {
+ val zipEntry = ZipEntry(baseDir.relativize(file).toString())
+ fixedModificationTime?.let {
+ zipEntry.time = it
+ }
+ zipEntry.time = 0;
+ zos.putNextEntry(zipEntry)
+ Files.copy(file, zos)
+ zos.closeEntry()
+ }
+ return FileVisitResult.CONTINUE
+ }
+
+ @Throws(IOException::class)
+ override fun preVisitDirectory(dir: Path, attrs: BasicFileAttributes): FileVisitResult {
+ val zipEntry = ZipEntry(baseDir.relativize(dir).toString() + "/")
+ fixedModificationTime?.let {
+ zipEntry.time = it
+ }
+ zos.putNextEntry(zipEntry)
+ zos.closeEntry()
+ return FileVisitResult.CONTINUE
+ }
+ })
+ }
+ return output
+ }
fun deCompress(zipFile: File, targetPath: String): File {
val zip = ZipFile(zipFile, Charset.defaultCharset())
<name>Controller Blueprints Parent</name>
<packaging>pom</packaging>
<properties>
- <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
- <grpc.version>1.18.0</grpc.version>
- <protobuff.java.utils.version>3.6.1</protobuff.java.utils.version>
<eelf.version>1.0.0</eelf.version>
<guava.version>27.0.1-jre</guava.version>
<springfox.swagger2.version>2.9.2</springfox.swagger2.version>
<h2database.version>1.4.197</h2database.version>
<onap.logger.slf4j>1.2.2</onap.logger.slf4j>
<powermock.version>1.7.4</powermock.version>
- <mockk.version>1.9</mockk.version>
<jinja.version>2.5.1</jinja.version>
<velocity.version>1.7</velocity.version>
</properties>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-compress</artifactId>
- <version>1.15</version>
- </dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-compress</artifactId>
- </dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>