
io.github.mrdaios.templates.TemplateProviderManager Maven / Gradle / Ivy
package io.github.mrdaios.templates;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ServiceLoader;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
public class TemplateProviderManager {
private final static ConcurrentMap driverConcurrentMap = new ConcurrentHashMap<>();
static {
loadInitialDrivers();
}
public static TemplateProvider getDriver(String driverType) {
if (null == driverType) {
throw new RuntimeException("driverType is null.");
}
TemplateProvider templateProvider = driverConcurrentMap.get(driverType);
if (null == templateProvider) {
throw new RuntimeException(String.format("not support driverType:%s.", driverType));
}
return templateProvider;
}
private static void loadInitialDrivers() {
AccessController.doPrivileged(new PrivilegedAction() {
@Override
public Void run() {
ServiceLoader loaderDrivers = ServiceLoader.load(TemplateProvider.class);
for (TemplateProvider loaderDriver : loaderDrivers) {
String templateType = loaderDriver.getTemplateType();
if (templateType != null && templateType.length() > 0) {
driverConcurrentMap.put(templateType, loaderDriver);
}
}
return null;
}
});
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy