package org.kravemir.gradle.sass; import org.gradle.api.GradleException; import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.OutputDirectory; import java.io.File; import java.nio.file.Paths; import java.util.Collections; /** * Concrete implementation of {@link AbstractSassCompileTask} * @author Miroslav Kravec */ @CacheableTask public class SassCompileTask extends AbstractSassCompileTask { private File srcDir = null; private File outDir = null; private String outSubDir = null; private String include = null; private String exclude = null; private boolean minify = false; private String sassSetName; @Override public File getOutputDirectory() { File outDir = this.getOutDir(); if(outSubDir != null) return Paths.get(outDir.getPath(), outSubDir).toFile(); return outDir; } @Override public File getSrcDir() { if(srcDir == null) return Paths.get(getProject().getProjectDir().getPath(), "src", sassSetName, "sass").toFile(); return srcDir; } public void setSrcDir(File srcDir) { this.srcDir = srcDir; } @OutputDirectory public File getOutDir() { return outDir != null ? outDir : Paths.get(getProject().getBuildDir().getPath(), "sass", sassSetName).toFile(); } public void setOutDir(File outDir) { this.outDir = outDir; } @Internal public String getOutSubDir() { return outSubDir; } public void setOutSubDir(String outSubDir) { this.outSubDir = outSubDir; } @Override public String getInclude() { return include; } public void setInclude(String include) { this.include = include; } @Override public String getExclude() { return exclude; } public void setExclude(String exclude) { this.exclude = exclude; } @Override public boolean getMinify() { return minify; } public void setMinify(boolean minify) { this.minify = minify; } public void registerInSourceSets(String ...sourceSetNames) { if (sourceSetNames == null || sourceSetNames.length == 0) return; try { JavaPluginConvention javaPlugin = getProject().getConvention().getPlugin(JavaPluginConvention.class); if (javaPlugin == null) { throw new GradleException("You must apply the java plugin if you're using 'registerInSourceSets' functionality."); } for (String sourceSet : sourceSetNames) { javaPlugin.getSourceSets().getByName(sourceSet).getOutput().dir( Collections.singletonMap("builtBy", this), getOutDir() ); } } catch (Exception e) { throw new GradleException("You must apply the java plugin if you're using 'registerInSourceSets' functionality."); } } public void setSassSetName(String sassSetName) { this.sassSetName = sassSetName; } }