package org.jboss.windup.reporting.freemarker; import java.util.List; import java.util.logging.Logger; import org.jboss.windup.config.GraphRewrite; import org.jboss.windup.graph.model.ProjectModel; import org.jboss.windup.reporting.model.ApplicationReportIndexModel; import org.jboss.windup.reporting.service.ApplicationReportIndexService; import org.jboss.windup.util.ExecutionStatistics; import org.jboss.windup.util.Logging; import freemarker.ext.beans.StringModel; import freemarker.template.TemplateModelException; /** * * Given a {@link ProjectModel}, return the {@link ApplicationReportIndexModel} that is associated with the application. * * The function takes one parameter, and can be called from a freemarker template as follows: * * projectModelToApplicationIndex(projectModel) * * @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a> * */ public class ProjectModelToApplicationIndexMethod implements WindupFreeMarkerMethod { private static final Logger LOG = Logging.get(ProjectModelToApplicationIndexMethod.class); private static final String NAME = "projectModelToApplicationIndex"; private ApplicationReportIndexService service; @Override public void setContext(GraphRewrite event) { this.service = new ApplicationReportIndexService(event.getGraphContext()); } @Override public String getMethodName() { return NAME; } @Override public String getDescription() { return "Takes a parameter of type " + ProjectModel.class.getSimpleName() + " and returns the associated " + ApplicationReportIndexModel.class.getSimpleName() + "."; } @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 (ProjectModel)"); } StringModel stringModelArg = (StringModel) arguments.get(0); if (stringModelArg == null) { throw new IllegalArgumentException("FreeMarker Method " + NAME + " called with null project model"); } ProjectModel projectModel = (ProjectModel) stringModelArg.getWrappedObject(); ApplicationReportIndexModel index = service.getApplicationReportIndexForProjectModel(projectModel); if (index == null) { LOG.warning("Could not find an application index for project model: " + projectModel.getName() + " (Vertex ID: " + projectModel.asVertex().getId() + ")"); } ExecutionStatistics.get().end(NAME); return index; } }