package org.jboss.windup.reporting.rules.rendering;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Path;
import java.util.logging.Logger;
import javax.inject.Inject;
import org.apache.commons.io.FileUtils;
import org.jboss.forge.furnace.Furnace;
import org.jboss.windup.config.AbstractRuleProvider;
import org.jboss.windup.config.GraphRewrite;
import org.jboss.windup.config.loader.RuleLoaderContext;
import org.jboss.windup.config.metadata.RuleMetadata;
import org.jboss.windup.config.operation.GraphOperation;
import org.jboss.windup.config.phase.PreReportGenerationPhase;
import org.jboss.windup.config.tags.TagService;
import org.jboss.windup.config.tags.TagServiceHolder;
import org.jboss.windup.reporting.service.ReportService;
import org.jboss.windup.util.Logging;
import org.ocpsoft.rewrite.config.Configuration;
import org.ocpsoft.rewrite.config.ConfigurationBuilder;
import org.ocpsoft.rewrite.context.EvaluationContext;
/**
* This renders the data of tags into a .js file, which is later linked from various report pages.
*
* @author Ondrej Zizka
*/
@RuleMetadata(phase = PreReportGenerationPhase.class, before = { RenderReportRuleProvider.class })
public class RenderTagsJavaScriptRuleProvider extends AbstractRuleProvider
{
private static final Logger LOG = Logging.get(RenderTagsJavaScriptRuleProvider.class);
@Inject
private Furnace furnace;
@Inject
private TagServiceHolder tagServiceHolder;
// @formatter:off
@Override
public Configuration getConfiguration(RuleLoaderContext ruleLoaderContext)
{
return ConfigurationBuilder
.begin()
.addRule()
.perform(new GraphOperation()
{
@Override
public void perform(GraphRewrite event, EvaluationContext context)
{
TagService tagService = tagServiceHolder.getTagService();
ReportService reportService = new ReportService(event.getGraphContext());
Path outputDir = reportService.getReportDirectory();
File tagsDataFile = outputDir.resolve("resources/tagsData.js").toFile();
try
{
FileUtils.forceMkdir(tagsDataFile.getParentFile());
}
catch (IOException ex)
{
LOG.severe("Error creating a directory: " + tagsDataFile.getParentFile().getPath());
return;
}
try(FileWriter writer = new FileWriter(tagsDataFile))
{
tagService.writeTagsToJavaScript(writer);
LOG.info("Exporting tags data to file: " + tagsDataFile.getPath());
}
catch (IOException e)
{
LOG.severe("Error exporting tags data to: " + tagsDataFile.getPath());
return;
}
}
});
}
// @formatter:on
}