package com.edulify.modules.sitemap;
import play.Configuration;
import play.inject.Injector;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.ArrayList;
import java.util.List;
@Singleton
public class SitemapProviders {
private Injector injector;
private Configuration configuration;
private List<UrlProvider> providers = new ArrayList<>();
@Inject
public SitemapProviders(Injector injector, Configuration configuration) {
this.injector = injector;
this.configuration = configuration;
this.init();
}
public List<UrlProvider> getProviders() {
return providers;
}
private List<UrlProvider> init() {
providers.add(injector.instanceOf(AnnotationUrlProvider.class));
String allProvidersClasses = configuration.getString("sitemap.providers");
if (allProvidersClasses != null) {
String[] providerClasses = allProvidersClasses.split(",");
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
for (String provider : providerClasses) {
if (!"".equals(provider)) {
Class<?> clazz = getProviderClass(provider, classLoader);
providers.add((UrlProvider)injector.instanceOf(clazz));
}
}
}
return providers;
}
private Class<?> getProviderClass(String name, ClassLoader classLoader) {
try {
return classLoader.loadClass(name);
} catch (ClassNotFoundException ex) {
throw new RuntimeException("Was not able to load provider class: " + name, ex);
}
}
}