package net.jhorstmann.i18n;
import java.util.List;
import java.util.ServiceLoader;
import net.jhorstmann.i18n.impl.DefaultLocaleProviderFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class LocaleProviderFactory {
private static final Logger log = LoggerFactory.getLogger(LocaleProviderFactory.class);
private static final LocaleProviderFactory DEFAULT_INSTANCE = new DefaultLocaleProviderFactory();
private static List<LocaleProviderFactory> instances;
/**
* Loads a {@link LocaleProviderFactory} using Java's {@link java.util.ServiceLoader} infrastructure.
* @return
*/
public static LocaleProviderFactory newInstance() {
if (instances == null) {
instances = ServiceLoaderHelper.load(LocaleProviderFactory.class.getClassLoader(), LocaleProviderFactory.class);
log.debug("Found {} LocaleProviderFactories",instances.size());
}
for (LocaleProviderFactory factory : instances) {
if (factory.isEnvironmentSupported()) {
return factory;
}
}
log.debug("no registered LocaleProviderFactory found, returning default provider-factory");
return DEFAULT_INSTANCE;
}
/**
* Return whether this {@link LocaleProviderFactory} is usable in this environment.
* This makes it possible to configure multiple implementations in a project where
* one is used when run as a webapp and another one for scripts and tests.
* @return
*/
public abstract boolean isEnvironmentSupported();
public abstract LocaleProvider newLocaleProvider();
}