Essentials/nms/NMSProvider/src/net/ess3/providers/ProviderFactory.java

37 lines
1.2 KiB
Java

package net.ess3.providers;
import java.util.logging.Logger;
public class ProviderFactory<T extends Provider> {
private Logger logger;
private String providerType;
private Iterable<Class <? extends T>> availableProviders;
public ProviderFactory(Logger logger, Iterable<Class <? extends T>> availableProviders, String providerType) {
this.logger = logger;
this.providerType = providerType;
this.availableProviders = availableProviders;
}
public T getProvider() {
T finalProvider = null;
for (Class<? extends T> providerClass : availableProviders) {
finalProvider = loadProvider(providerClass);
if (finalProvider != null && finalProvider.tryProvider()) {
break;
}
}
assert finalProvider != null;
logger.info("Using " + finalProvider.getHumanName() + " as " + providerType + " provider.");
return finalProvider;
}
private T loadProvider(Class<? extends T> providerClass) {
try {
return providerClass.getConstructor().newInstance();
} catch (Throwable ignored) {
return null;
}
}
}