package org.jboss.windup.rules.apps.java.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.freemarker.WindupFreeMarkerMethod;
import org.jboss.windup.reporting.model.ApplicationReportIndexModel;
import org.jboss.windup.reporting.service.ApplicationReportIndexService;
import org.jboss.windup.rules.apps.java.archives.model.IdentifiedArchiveModel;
import org.jboss.windup.util.ExecutionStatistics;
import org.jboss.windup.util.Logging;
import freemarker.ext.beans.StringModel;
import freemarker.template.TemplateModelException;
/**
*
* Returns the SHA1 hash of the given a {@link ProjectModel}.
*
* The function takes one parameter, and can be called from a freemarker template as follows:
*
* projectModelToApplicationArchive(projectModel)
*
* @author <a href="mailto:bradsdavis@gmail.com">Brad Davis</a>
*
*/
public class ProjectModelToSha1 implements WindupFreeMarkerMethod
{
private static Logger LOG = Logging.get(ProjectModelToSha1.class);
private static final String NAME = "projectModelToSha1";
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
{
Object result = null;
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();
if(projectModel.getRootFileModel() instanceof IdentifiedArchiveModel) {
result = projectModel.getRootFileModel().getSHA1Hash();
}
ExecutionStatistics.get().end(NAME);
return result;
}
}