/*
* Copyright 2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.gradle.api.tasks.diagnostics.internal;
import org.gradle.api.Project;
import org.gradle.api.UncheckedIOException;
import org.gradle.initialization.BuildClientMetaData;
import org.gradle.internal.logging.text.StyledTextOutputFactory;
import java.io.File;
import java.io.IOException;
import java.util.Set;
public class ReportGenerator {
private final ReportRenderer renderer;
private final BuildClientMetaData buildClientMetaData;
private final File outputFile;
private final StyledTextOutputFactory textOutputFactory;
private final ProjectReportGenerator projectReportGenerator;
public ReportGenerator(ReportRenderer renderer, BuildClientMetaData buildClientMetaData, File outputFile,
StyledTextOutputFactory textOutputFactory, ProjectReportGenerator projectReportGenerator) {
this.renderer = renderer;
this.buildClientMetaData = buildClientMetaData;
this.outputFile = outputFile;
this.textOutputFactory = textOutputFactory;
this.projectReportGenerator = projectReportGenerator;
}
public void generateReport(Set<Project> projects) {
try {
ReportRenderer renderer = getRenderer();
renderer.setClientMetaData(getClientMetaData());
File outputFile = getOutputFile();
if (outputFile != null) {
renderer.setOutputFile(outputFile);
} else {
renderer.setOutput(getTextOutputFactory().create(getClass()));
}
for (Project project : projects) {
renderer.startProject(project);
projectReportGenerator.generateReport(project);
renderer.completeProject(project);
}
renderer.complete();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
protected ReportRenderer getRenderer() {
return renderer;
}
protected BuildClientMetaData getClientMetaData() {
return buildClientMetaData;
}
/**
* Returns the file which the report will be written to. When set to {@code null}, the report is written to {@code System.out}.
*
* @return The output file. May be null.
*/
protected File getOutputFile() {
return outputFile;
}
protected StyledTextOutputFactory getTextOutputFactory() {
return textOutputFactory;
}
}