package org.gradle.plugins.site.tasks;
import org.gradle.api.DefaultTask;
import org.gradle.api.provider.PropertyState;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.Nested;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.TaskAction;
import org.gradle.plugins.site.data.CustomData;
import org.gradle.plugins.site.data.ProjectDescriptor;
import org.gradle.plugins.site.generator.FreemarkerSiteGenerator;
import org.gradle.plugins.site.generator.SiteGenerator;
import java.io.File;
/**
* Custom task for generating a web page containing information derived from the project.
*/
public class SiteGenerate extends DefaultTask {
private final PropertyState<ProjectDescriptor> projectDescriptor;
private final PropertyState<File> outputDir;
private final CustomData customData;
public SiteGenerate() {
this.projectDescriptor = getProject().property(ProjectDescriptor.class);
this.outputDir = getProject().property(File.class);
customData = new CustomData(getProject());
}
/**
* Returns the project descriptor containing the derived project information.
*
* @return The project descriptor.
*/
@Nested
public ProjectDescriptor getProjectDescriptor() {
return projectDescriptor.get();
}
/**
* Configures the project descriptor containing the derived project information.
*
* @param projectDescriptor The project descriptor.
*/
public void setProjectDescriptor(ProjectDescriptor projectDescriptor) {
this.projectDescriptor.set(projectDescriptor);
}
/**
* Configures the {@link org.gradle.api.provider.Provider} calculating the project descriptor containing the derived project information.
*
* @param projectDescriptor The provider calculating the project descriptor.
*/
public void setProjectDescriptor(Provider<ProjectDescriptor> projectDescriptor) {
this.projectDescriptor.set(projectDescriptor);
}
/**
* Returns the output directory for the generated web page.
*
* @return The output directory.
*/
@OutputDirectory
public File getOutputDir() {
return outputDir.get();
}
/**
* Configures the output directory for the generated web page.
*
* @param outputDir The output directory.
*/
public void setOutputDir(File outputDir) {
this.outputDir.set(outputDir);
}
/**
* Configures the{@link org.gradle.api.provider.Provider} calculating the output directory for the generated web page.
*
* @param outputDir The provider calculating the output directory.
*/
public void setOutputDir(Provider<File> outputDir) {
this.outputDir.set(outputDir);
}
/**
* Returns the custom data to be used in the generated web page.
*
* @return The custom data.
*/
@Nested
public CustomData getCustomData() {
return customData;
}
@TaskAction
public void generate() {
SiteGenerator siteGenerator = new FreemarkerSiteGenerator(getOutputDir());
siteGenerator.generate(getProjectDescriptor(), customData);
}
}