package com.prezi.spaghetti.gradle; import com.prezi.spaghetti.definition.ModuleConfiguration; import com.prezi.spaghetti.generator.StubGenerator; import com.prezi.spaghetti.generator.internal.DefaultGeneratorParameters; import com.prezi.spaghetti.generator.internal.Generators; import com.prezi.spaghetti.generator.internal.InternalGeneratorUtils; import com.prezi.spaghetti.gradle.internal.AbstractDefinitionAwareSpaghettiTask; import org.apache.commons.io.FileUtils; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.OutputDirectory; import org.gradle.api.tasks.TaskAction; import java.io.File; import java.io.IOException; import java.util.concurrent.Callable; public class GenerateStubs extends AbstractDefinitionAwareSpaghettiTask { private File outputDirectory; private boolean timestamp = true; @TaskAction public void generate() throws IOException { ModuleConfiguration config = readConfig(getDefinition()); getLogger().info("Generating module stubs for {}", config.getAllModules()); File directory = getOutputDirectory(); FileUtils.deleteQuietly(directory); FileUtils.forceMkdir(directory); StubGenerator generator = Generators.getService(StubGenerator.class, getLanguage()); DefaultGeneratorParameters generatorParams = new DefaultGeneratorParameters(config, InternalGeneratorUtils.createHeader(getTimestamp())); generator.generateStubs(generatorParams, directory); } @OutputDirectory public File getOutputDirectory() { return outputDirectory; } public void setOutputDirectory(Object outputDirectory) { this.outputDirectory = getProject().file(outputDirectory); } public void outputDirectory(Object directory) { setOutputDirectory(directory); } public GenerateStubs() { this.getConventionMapping().map("outputDirectory", new Callable<File>() { @Override public File call() throws Exception { return new File(getProject().getBuildDir(), "spaghetti/generated-stubs"); } }); } @Input public boolean getTimestamp() { return timestamp; } public void setTimestamp(boolean timestamp) { this.timestamp = timestamp; } public void timestamp(boolean timestamp) { setTimestamp(timestamp); } }