package org.jboss.windup.reporting.freemarker;
import java.util.List;
import java.util.Set;
import org.jboss.windup.config.GraphRewrite;
import org.jboss.windup.graph.model.resource.FileModel;
import org.jboss.windup.reporting.TagUtil;
import org.jboss.windup.reporting.model.source.SourceReportModel;
import org.jboss.windup.reporting.service.SourceReportService;
import org.jboss.windup.util.ExecutionStatistics;
import freemarker.ext.beans.StringModel;
import freemarker.template.SimpleSequence;
import freemarker.template.TemplateModelException;
/**
*
* This determines whether or not the given file is interesting to report on. This is based on whether there is an available source report as well as
* whether or not the file has classifications or hints that pass the tag filter.
*
* It can be called as follows:
*
* <pre>
* isReportableFile(FileModel, Setlt;String> includeTags, Setlt&;String> excludeTags)
* </pre>
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
*
*/
public class IsReportableFile implements WindupFreeMarkerMethod
{
public static final String NAME = "isReportableFile";
private SourceReportService sourceReportService;
@Override
public void setContext(GraphRewrite event)
{
this.sourceReportService = new SourceReportService(event.getGraphContext());
}
@Override
public String getMethodName()
{
return NAME;
}
@Override
public String getDescription()
{
return "Takes a " + FileModel.class.getSimpleName()
+ " and a set of tags to include and exclude as parameters, and whether or not this file should appear in overview reports";
}
@Override
public Object exec(@SuppressWarnings("rawtypes") List arguments) throws TemplateModelException
{
ExecutionStatistics.get().begin(NAME);
try
{
if (arguments.size() != 3)
{
throw new TemplateModelException("Error, method expects one argument (FileModel, includeTags:Set<String>, excludeTags:Set<String>)");
}
StringModel stringModelArg = (StringModel) arguments.get(0);
FileModel fileModel = (FileModel) stringModelArg.getWrappedObject();
Set<String> includeTags = FreeMarkerUtil.simpleSequenceToSet((SimpleSequence) arguments.get(1));
Set<String> excludeTags = FreeMarkerUtil.simpleSequenceToSet((SimpleSequence) arguments.get(2));
SourceReportModel result = sourceReportService.getSourceReportForFileModel(fileModel);
if (result == null)
return false;
return TagUtil.hasHintsOrClassificationsWithRelevantTags(result.getSourceFileModel(), includeTags, excludeTags);
}
finally
{
ExecutionStatistics.get().end(NAME);
}
}
}