All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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