blob: 13574ba1c3324e84d0b60dac8ad8df610685416a [file] [log] [blame]
/*
* Copyright 2018 The Bazel Authors. All rights reserved.
*
* 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 io.bazel.kotlin.builder.utils.jars
import java.nio.file.Files
import java.nio.file.Path
import java.util.jar.JarFile
open class JarExtractor protected constructor(
protected var destDir: Path
) {
/**
* @param isDirectory is the target a directory.
* @param target path the operation will apply to.
* @return weather the operation should be applied or not.
*/
internal open fun preWrite(isDirectory: Boolean, target: Path): Boolean = true
protected fun extract(jarFile: Path) {
JarFile(jarFile.toFile()).use { jar ->
jar.entries().also { entries ->
while (entries.hasMoreElements()) {
(entries.nextElement() as java.util.jar.JarEntry).also { entry ->
destDir.resolve(entry.name).also { target ->
if (preWrite(entry.isDirectory, target)) {
when {
entry.isDirectory ->
Files.createDirectories(target)
else -> jar.getInputStream(entry).use {
Files.createDirectories(target.parent)
Files.copy(it, target)
}
}
}
}
}
}
}
}
}
}