Skip to content

Commit

Permalink
Modify plugin to use reporting classes
Browse files Browse the repository at this point in the history
  • Loading branch information
ksoichiro committed Jan 30, 2017
1 parent 1c59354 commit c916a7f
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,25 @@ import groovy.text.Template
import groovy.text.markup.MarkupTemplateEngine
import groovy.text.markup.TemplateConfiguration
import org.gradle.api.DefaultTask
import org.gradle.api.internal.plugins.DslObject
import org.gradle.api.reporting.Reporting
import org.gradle.api.tasks.Nested
import org.gradle.api.tasks.TaskAction
import org.gradle.internal.reflect.Instantiator

class GenerateSummaryTask extends DefaultTask {
import javax.inject.Inject

class GenerateSummaryTask extends DefaultTask implements Reporting<SummaryReports> {
static final NAME = 'generateSummary'
SummaryExtension extension
List<SummaryItemBuilder> summaryItemBuilders
File reportFile

@Nested
final SummaryReportsImpl reports = (SummaryReportsImpl) getInstantiator().newInstance(SummaryReportsImpl, this)

GenerateSummaryTask() {
group = 'reporting'
reports.html.enabled = true
project.afterEvaluate {
if (!rootProjectHasCheckTask()) {
defineCheckTaskForRootProject()
Expand All @@ -24,14 +34,38 @@ class GenerateSummaryTask extends DefaultTask {
extension = project.extensions."${SummaryExtension.NAME}"
summaryItemBuilders = extension.builders.collect { it.newInstance(project) }
dependsOn summaryItemBuilders.collect { it.dependsOn() }?.findAll { it != null }?.flatten()
reportFile = extension.destination ?: project.file("${project.buildDir}/reports/summary/index.html")
(new DslObject(reports.html)).conventionMapping.with {
enabled = true
destination = {
extension.destination ?: project.file("${project.buildDir}/reports/summary/index.html")
}
}
inputs.files summaryItemBuilders.collect { it.getInputFiles() }?.findAll { it != null }?.flatten()
outputs.file reportFile
}
}

@Inject
protected Instantiator getInstantiator() {
throw new UnsupportedOperationException()
}

@Override
SummaryReports getReports() {
reports
}

@Override
SummaryReports reports(Closure closure) {
reports.configure closure
}

@TaskAction
void exec() {
if (!reports.html.isEnabled()) {
didWork = false
return
}

createReportDir()

def styleContent = getClass().getResourceAsStream("/templates/style.css").text
Expand All @@ -52,14 +86,14 @@ class GenerateSummaryTask extends DefaultTask {
Writer writer = new StringWriter()
Writable output = template.make(templateMap)
output.writeTo(writer)
reportFile.text = writer.toString()
reports.html.destination.text = writer.toString()

println "Summary:"
println "${reportFile.canonicalPath}"
println "${reports.html.destination.canonicalPath}"
}

def createReportDir() {
def reportDir = reportFile.parentFile
def reportDir = reports.html.destination.parentFile
if (!reportDir.exists()) {
project.mkdir(reportDir)
}
Expand All @@ -86,8 +120,8 @@ class GenerateSummaryTask extends DefaultTask {
def defineCleanTaskForRootProject() {
project.rootProject.tasks.create('clean') {
doLast {
if (reportFile?.exists()) {
project.rootProject.delete(reportFile)
if (reports.html.destination?.exists()) {
project.rootProject.delete(reports.html.destination)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package com.github.ksoichiro.summary

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.ReportingBasePlugin

class SummaryPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.pluginManager.apply(ReportingBasePlugin)
project.extensions.create(SummaryExtension.NAME, SummaryExtension)
project.tasks.create(GenerateSummaryTask.NAME, GenerateSummaryTask)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.github.ksoichiro.summary

import org.gradle.api.reporting.ReportContainer
import org.gradle.api.reporting.SingleFileReport

interface SummaryReports extends ReportContainer<SingleFileReport> {
SingleFileReport getHtml()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.github.ksoichiro.summary

import org.gradle.api.Task
import org.gradle.api.reporting.SingleFileReport
import org.gradle.api.reporting.internal.TaskGeneratedSingleFileReport
import org.gradle.api.reporting.internal.TaskReportContainer

class SummaryReportsImpl extends TaskReportContainer<SingleFileReport> implements SummaryReports {
SummaryReportsImpl(Task task) {
super(SingleFileReport, task)
add(TaskGeneratedSingleFileReport, "html", task)
}

@Override
SingleFileReport getHtml() {
getByName("html")
}
}

0 comments on commit c916a7f

Please sign in to comment.