package org.jboss.windup.reporting.freemarker;

import java.net.URL;
import java.util.concurrent.Callable;

import org.jboss.forge.furnace.Furnace;
import org.jboss.forge.furnace.addons.Addon;
import org.jboss.forge.furnace.lock.LockMode;
import org.jboss.forge.furnace.util.AddonFilters;
import org.jboss.windup.config.furnace.FurnaceHolder;

import freemarker.cache.URLTemplateLoader;

public class FurnaceFreeMarkerTemplateLoader extends URLTemplateLoader {
    @Override
    protected URL getURL(final String name) {
        final Furnace furnace = FurnaceHolder.getFurnace();
        return furnace.getLockManager().performLocked(LockMode.READ, new Callable<URL>() {
            @Override
            public URL call() throws Exception {
                URL result = null;
                for (Addon addon : furnace.getAddonRegistry().getAddons(AddonFilters.allLoaded())) {
                    URL url = addon.getClassLoader().getResource(name);
                    if (url != null) {
                        result = url;
                        break;
                    }
                }
                return result;
            }
        });
    }
}
