package org.jboss.windup.reporting.service;
import org.jboss.windup.graph.GraphContext;
import org.jboss.windup.graph.service.GraphService;
import org.jboss.windup.reporting.model.EffortReportModel;
/**
* Contains constants representing the migration effort levels.
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
* @author <a href="mailto:zizka@seznam.cz">Ondrej Zizka</a>
*/
public class EffortReportService extends GraphService
{
public enum Verbosity
{
ID, SHORT, VERBOSE
}
public enum EffortLevel
{
INFO(0, "Info", "Info"),
TRIVIAL(1, "Trivial", "Trivial change or 1-1 library swap"),
COMPLEX(3, "Complex", "Complex change with documented solution"),
REDESIGN(5, "Redesign", "Requires re-design or library change"),
ARCHITECTURAL(7, "Architectural", "Requires architectural decision or change"),
UNKNOWN(13, "Unknown", "Unknown effort");
private final int points;
private final String shortDesc;
private final String verboseDesc;
EffortLevel(final int points, final String shortDesc, final String verboseDesc)
{
this.points = points;
this.shortDesc = shortDesc;
this.verboseDesc = verboseDesc;
}
public static EffortLevel forPoints(int points)
{
EffortLevel[] levels = EffortLevel.class.getEnumConstants();
for (EffortLevel level : levels)
{
if (level.getPoints() == points)
return level;
}
return UNKNOWN;
}
public int getPoints()
{
return points;
}
public String getShortDescription()
{
return shortDesc;
}
public String getVerboseDescription()
{
return verboseDesc;
}
}
public EffortReportService(GraphContext context)
{
super(context, EffortReportModel.class);
}
/**
* Returns the right string representation of the effort level based on given number of points.
*/
public static String getEffortLevelDescription(Verbosity verbosity, int points)
{
EffortLevel level = EffortLevel.forPoints(points);
switch (verbosity)
{
case ID:
return level.name();
case VERBOSE:
return level.getVerboseDescription();
case SHORT:
default:
return level.getShortDescription();
}
}
}