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

com.github.ksoichiro.web.resource.task.WebResourceCopyBowerDependenciesTask.groovy Maven / Gradle / Ivy

package com.github.ksoichiro.web.resource.task

import com.github.ksoichiro.web.resource.extension.BowerDependency
import com.github.ksoichiro.web.resource.util.PathResolver
import com.github.ksoichiro.web.resource.extension.WebResourceExtension
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction

class WebResourceCopyBowerDependenciesTask extends DefaultTask {
    static String NAME = "webResourceCopyBowerDependencies"
    WebResourceExtension extension
    PathResolver pathResolver

    WebResourceCopyBowerDependenciesTask() {
        dependsOn([WebResourceInstallBowerDependenciesTask.NAME])
        project.afterEvaluate {
            extension = project.extensions.webResource
            pathResolver = new PathResolver(project, extension)
            getInputs()
                .dir(new File(extension.workDir, WebResourceInstallBowerDependenciesTask.BOWER_COMPONENTS_DIR))
                .property('bower', extension.bower.toString())
                .property('version', WebResourceExtension.VERSION)
            getOutputs().files(pathResolver.retrieveValidDestLibPaths())
        }
    }

    @TaskAction
    void exec() {
        removeOldFiles()
        if (hasBowerDependencies()) {
            copyDependencies()
            extension.bower.dependencies.each { dependency ->
                renameDependencyDirIfRequired(dependency)
            }
        }
    }

    void removeOldFiles() {
        if (extension.lib.cleanOnUpdate) {
            File targetDir = project.file("${extension.base.dest}/${extension.lib.dest}")
            if (extension.lib.excludeFromClean && !extension.lib.excludeFromClean.isEmpty()) {
                // Delete all files except files that are listed in excludeFromClean
                targetDir.eachFile {
                    if (!extension.lib.excludeFromClean.contains(it.name)) {
                        project.delete(it.absolutePath)
                    }
                }
            } else {
                // Delete all
                project.delete(targetDir.absolutePath)
            }
        }
    }

    boolean hasBowerDependencies() {
        !extension.bower.dependencies.isEmpty()
    }

    void copyDependencies() {
        project.copy {
            from project.fileTree("${extension.workDir}/bower_components").matching {
                extension.bower.dependencies.each { dependency ->
                    String[] expr = dependency.filter
                    if (expr) {
                        expr.each { e -> it.include("${dependency.getCacheName()}/${e}") }
                    } else {
                        it.include("${dependency.getCacheName()}/**/*")
                    }
                }
            }
            into "${extension.base.dest}/${extension.lib.dest}"
        }
        project.file("${extension.base.dest}/${extension.lib.dest}").eachDir{ dir ->
            extension.bower.dependencies.each { dependency ->
                if (dir.name == dependency.cacheName && dir.name != dependency.name) {
                    dir.renameTo(project.file("${extension.base.dest}/${extension.lib.dest}/${dependency.name}"))
                }
            }
        }
    }

    void renameDependencyDirIfRequired(BowerDependency dependency) {
        def dependencyDir = project.file("${extension.base.dest}/${extension.lib.dest}/${dependency.getCacheName()}")
        if (dependencyDir.exists()) {
            dependencyDir.renameTo(project.file("${extension.base.dest}/${extension.lib.dest}/${dependency.getOutputName()}"))
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy