package org.jboss.windup.reporting.freemarker;
import java.util.List;
import org.jboss.windup.config.GraphRewrite;
import org.jboss.windup.graph.GraphContext;
import org.jboss.windup.graph.model.ProjectModel;
import org.jboss.windup.graph.traversal.ProjectModelTraversal;
import org.jboss.windup.reporting.model.TechnologyTagModel;
import org.jboss.windup.reporting.service.TechnologyTagService;
import org.jboss.windup.util.ExecutionStatistics;
import freemarker.ext.beans.StringModel;
import freemarker.template.TemplateModelException;
/**
* <p>
* Gets all technology tags for the provided {@link ProjectModelTraversal} and all of its subprojects (eg, "EJB", "Web XML").
* </p>
* <p>
* Example call:
* </p>
*
* <pre>
* getTechnologyTagsForProjectTraversal(ProjectModelTraversal).
* </pre>
*
* <p>
* The method will return an Iterable containing {@link TechnologyTagModel} instances.
* </p>
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
*/
public class GetTechnologyTagsForProject implements WindupFreeMarkerMethod
{
private static final String NAME = "getTechnologyTagsForProjectTraversal";
private GraphContext context;
@Override
public void setContext(GraphRewrite event)
{
this.context = event.getGraphContext();
}
@Override
public Object exec(@SuppressWarnings("rawtypes") List arguments) throws TemplateModelException
{
ExecutionStatistics.get().begin(NAME);
if (arguments.size() != 1)
{
throw new TemplateModelException("Error, method expects one argument (" + ProjectModelTraversal.class.getSimpleName() + ")");
}
StringModel stringModelArg = (StringModel) arguments.get(0);
ProjectModelTraversal projectTraversal = (ProjectModelTraversal) stringModelArg.getWrappedObject();
Iterable<TechnologyTagModel> result = new TechnologyTagService(this.context).findTechnologyTagsForProject(projectTraversal);
ExecutionStatistics.get().end(NAME);
return result;
}
@Override
public String getMethodName()
{
return NAME;
}
@Override
public String getDescription()
{
return "Takes a " + ProjectModel.class.getSimpleName()
+ " as a parameter and returns an Iterable<" + TechnologyTagModel.class.getSimpleName()
+ "> containing the technology tags for this project (and all subprojects).";
}
}