package org.jboss.windup.rules.apps.java.reporting.freemarker;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.jboss.windup.reporting.freemarker.WindupFreeMarkerMethod;
import org.jboss.windup.rules.apps.java.dependencyreport.DependencyReportToArchiveEdgeModel;
import org.jboss.windup.rules.apps.java.model.comparator.DependencyReportToEdgeComparator;
import org.jboss.windup.util.ExecutionStatistics;
import freemarker.ext.beans.StringModel;
import freemarker.template.TemplateModelException;
/**
* Takes a list of DependencyReportToArchiveEdgeModel and orders them according to their path.
*
* For example, DependencyReportToArchiveEdgeModel with this structure:
*
* <ul>
* <li>/CProject</li>
* <li>/BProject</li>
* <li>/AProject</li>
* </ul>
*
* Will be returned as:
*
* <ul>
* <li>/AProject</li>
* <li>/BProject</li>
* <li>/CProject</li>
* </ul>
*
*/
public class SortDependencyArchivesByPathMethod implements WindupFreeMarkerMethod
{
private static final String NAME = "sortDependencyArchivesByPathAscending";
@Override
public String getMethodName()
{
return NAME;
}
@Override
public String getDescription()
{
return "Takes an Iterable<" + DependencyReportToArchiveEdgeModel.class.getSimpleName() + "> and returns them, ordered alphabetically.";
}
@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 (Iterable<DependencyReportToArchiveEdgeModel>)");
}
StringModel stringModelArg = (StringModel) arguments.get(0);
@SuppressWarnings("unchecked")
Iterable<DependencyReportToArchiveEdgeModel> edges = (Iterable<DependencyReportToArchiveEdgeModel>) stringModelArg.getWrappedObject();
List<DependencyReportToArchiveEdgeModel> list = new ArrayList<>();
for (DependencyReportToArchiveEdgeModel edge : edges)
{
list.add(edge);
}
Collections.sort(list, new DependencyReportToEdgeComparator());
ExecutionStatistics.get().end(NAME);
return list;
}
}