package org.jboss.windup.config.exception;

public class IllegalTypeArgumentException extends IllegalArgumentException
{
    private static final long serialVersionUID = 1L;

    private final String variableName;
    private final Class<?> expectedInterface;
    private final Class<?> actualType;

    public IllegalTypeArgumentException(String variableName, Class<?> expectedInterface, Class<?> actualType)
    {
        this.variableName = variableName;
        this.expectedInterface = expectedInterface;
        this.actualType = actualType;
    }

    @Override
    public String getMessage()
    {
        StringBuilder implementedInterfaces = new StringBuilder();
        for (Class<?> iface : actualType.getInterfaces())
        {
            if (implementedInterfaces.length() != 0)
            {
                implementedInterfaces.append(", ");
            }
            implementedInterfaces.append(iface.getName());
        }
        String message = "Variable \"" + variableName + "\" does not implement expected interface \""
                    + expectedInterface.getCanonicalName() + "\", actual implemented interfaces are: "
                    + implementedInterfaces.toString();
        return message;
    }
}
