class ActionFactory {

    public static BaseSpellAction construct(String actionClassName)
            throws ActionFactoryException {
        List<String> attempts = new ArrayList<>();

        for (ActionResolver resolver : resolvers) {
            ActionConstructor constructor = resolver.resolve(actionClassName,
                    attempts);

            if (constructor != null) {
                return constructor.construct();
            }
        }

        throw new ActionFactoryException(
                "Failed to resolve class: " + actionClassName + "\nTried: "
                        + attempts);
    }

    private  ActionFactory();

}