11package com.cognifide.gradle.aem.internal.file
22
3- import com.cognifide.gradle.aem.AemException
43import com.cognifide.gradle.aem.internal.Formats
54import com.google.common.hash.HashCode
65import groovy.lang.Closure
@@ -24,8 +23,10 @@ class FileResolver(val project: Project, val downloadDir: File) {
2423 val DOWNLOAD_LOCK = " download.lock"
2524 }
2625
27- private inner class Resolver (val id : String , val group : String , val action : (Resolver ) -> Unit ) {
26+ private inner class Resolver (val id : String , val group : String , val action : (Resolver ) -> File ) {
2827 val dir = File (" $downloadDir /$id " )
28+
29+ val file: File by lazy { action(this ) }
2930 }
3031
3132 private val resolvers = mutableListOf<Resolver >()
@@ -50,30 +51,22 @@ class FileResolver(val project: Project, val downloadDir: File) {
5051 }
5152 }
5253
53- fun allFiles (filter : (String ) -> Boolean = { true }, resolve : Boolean = true ): List <File > {
54- return resolveFiles (filter, resolve ).map { it.dir }
54+ fun outputDirs (filter : (String ) -> Boolean = { true }): List <File > {
55+ return filterResolvers (filter).map { it.dir }
5556 }
5657
57- fun groupedFiles (filter : (String ) -> Boolean = { true }, resolve : Boolean = true): Map <String , List <File >> {
58- return resolveFiles(filter, resolve).fold(mutableMapOf<String , MutableList <File >>(), { files, resolver ->
59- files.getOrPut(resolver.group, { mutableListOf () }).add(resolver.dir); files
60- })
58+ fun allFiles (filter : (String ) -> Boolean = { true }): List <File > {
59+ return filterResolvers(filter).map { it.file }
6160 }
6261
63- private fun resolveFiles (filter : (String ) -> Boolean , resolve : Boolean ): List <Resolver > {
64- val resolvers = resolvers.filter { filter(it.group) }
65- if (resolve) {
66- resolvers.onEach(this ::resolveFile)
67- }
68-
69- return resolvers
62+ fun groupedFiles (filter : (String ) -> Boolean = { true }): Map <String , List <File >> {
63+ return filterResolvers(filter).fold(mutableMapOf<String , MutableList <File >>(), { files, resolver ->
64+ files.getOrPut(resolver.group, { mutableListOf () }).add(resolver.file); files
65+ })
7066 }
7167
72- private fun resolveFile (resolver : Resolver ) {
73- resolver.action(resolver)
74- if (FileOperations .isDirEmpty(resolver.dir)) {
75- throw AemException (" Cannot resolve file(s) from group '${resolver.group} ' to path: ${resolver.dir} " )
76- }
68+ private fun filterResolvers (filter : (String ) -> Boolean ): List <Resolver > {
69+ return resolvers.filter { filter(it.group) }
7770 }
7871
7972 fun url (url : String ) {
@@ -187,10 +180,10 @@ class FileResolver(val project: Project, val downloadDir: File) {
187180 }
188181
189182 fun local (sourceFile : File ) {
190- resolve(sourceFile.absolutePath, { })
183+ resolve(sourceFile.absolutePath, { sourceFile })
191184 }
192185
193- private fun resolve (hash : Any , resolver : (Resolver ) -> Unit ) {
186+ private fun resolve (hash : Any , resolver : (Resolver ) -> File ) {
194187 val id = HashCode .fromInt(HashCodeBuilder ().append(hash).toHashCode()).toString()
195188 resolvers + = Resolver (id, group, resolver)
196189 }
0 commit comments