All Downloads are FREE. Search and download functionalities are using the official Maven repository.

main.name.remal.gradle_plugins.dsl.artifact.CachedArtifactsCollection.kt Maven / Gradle / Ivy

The newest version!
package name.remal.gradle_plugins.dsl.artifact

import java.io.File
import java.io.InputStream

class CachedArtifactsCollection(val artifacts: Set) : BaseHasEntries() {

    constructor(files: Iterable) : this(files.mapTo(mutableSetOf(), ArtifactsCache::get))
    constructor(vararg files: Iterable) : this(files.toList().flatten())
    constructor(vararg files: File) : this(files.toList())
    constructor(file: File) : this(setOf(ArtifactsCache[file]))

    fun getArtifactForEntry(entryName: String): Artifact? {
        return artifacts.firstOrNull { entryName in it.entryNames }
    }

    val entryMapping: Map by lazy {
        val result = sortedMapOf()
        artifacts.forEach { artifact ->
            artifact.entryNames.forEach {
                if (it !in result) result[it] = artifact
            }
        }
        return@lazy result.toMap()
    }

    override val entryNames: Set by lazy { entryMapping.keys }

    override fun openStream(entryName: String): InputStream {
        val artifact = entryMapping[entryName] ?: throw ArtifactEntryNotFoundException("Artifact entry not found: $entryName")
        return artifact.openStream(entryName)
    }

    override fun forEachEntry(pattern: String?, action: (entry: HasEntries.Entry) -> Unit) {
        artifacts.forEach { it.forEachEntry(pattern, action) }
    }

    override fun toString(): String {
        return "${javaClass.simpleName}[$artifacts]"
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy