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

com.eowise.imagemagick.tasks.Magick.groovy Maven / Gradle / Ivy

The newest version!
package com.eowise.imagemagick.tasks

import com.eowise.imagemagick.specs.FormattingSpec
import com.eowise.imagemagick.specs.DefaultMagickSpec
import org.gradle.api.DefaultTask
import org.gradle.api.file.FileCollection
import org.gradle.api.file.FileTree
import org.gradle.api.file.FileVisitDetails
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
import org.gradle.api.tasks.util.PatternSet

/**
 * Created by aurel on 14/12/13.
 */
class Magick extends DefaultTask {

    
    @InputFiles
    FileTree inputFiles
    @OutputDirectory
    File outputDir
    @Input
    String inputSpec

    DefaultMagickSpec spec
    FormattingSpec formattingSpec;
    Closure output

    Magick() {
        this.spec = new DefaultMagickSpec(this)
        this.formattingSpec = new FormattingSpec(this)
    }


    def convert(String baseDir, PatternSet pattern) {
        this.inputFiles = project.fileTree(baseDir).matching(pattern)
        this.output = { relativePath -> "${baseDir}/${relativePath}"  }
        this.outputDir = project.file(output(''))
        this.spec.setInputBasePath(baseDir)
        this.formattingSpec.setInputBasePath(baseDir)
    }

    def convert(String baseDir, Closure closure) {
        PatternSet pattern = project.configure(new PatternSet(), closure) as PatternSet

        convert(baseDir, pattern)
    }

    def into(Closure outputClosure) {
        this.output = outputClosure
        this.outputDir = project.file(output(''))
        this.spec.setOutput(outputClosure)
    }

    def into(String path) {
        into({ relativePath -> "${path}/${relativePath}"  })
    }

    def formatting(Closure closure) {
        project.configure(formattingSpec, closure)
    }

    def actions(Closure closure) {
        project.configure(spec, closure)
        inputSpec = spec.toString()
    }

    LinkedList buildArgs(FileVisitDetails file) {

        LinkedList execArgs = []

        spec.params.each {
            p ->
                execArgs.addAll(p.toParams(file))
        }

        return execArgs

        /*
        String name = file.getName()[0.. execArgs
        FileCollection changedFiles = project.files()
        FileCollection removedFiles = project.files()
        File outputFile

        incrementalInputs.outOfDate {
            change ->
                changedFiles.from(change.file)
        }

        incrementalInputs.removed {
            remove ->
                removedFiles.from(remove.file)
        }


        inputFiles.visit {
            FileVisitDetails f ->

                if (changedFiles.contains(f.getFile())) {

                    if (!f.getFile().isDirectory()) {

                        formattingSpec.formats.each {
                            id, param ->
                                project.exec {
                                    commandLine 'convert'
                                    args param.toParams(f)
                                    standardOutput new FileOutputStream("${temporaryDir}/${f.getRelativePath()}.${id}.mvg")
                                }
                        }

                        execArgs = buildArgs(f)

                        project.exec {
                            commandLine 'convert'
                            args execArgs
                        }
                    }

                } else if (removedFiles.contains(f.getFile())) {
                    project.delete("${path}/${f.getPath()}")
                }
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy