Skip to content

Instantly share code, notes, and snippets.

@vemacs
Created March 10, 2016 14:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vemacs/e6c6166201e3fa04ce44 to your computer and use it in GitHub Desktop.
Save vemacs/e6c6166201e3fa04ce44 to your computer and use it in GitHub Desktop.
package com.earth2me.essentials.providers;
import com.earth2me.essentials.IEssentials;
public class ProviderFactory<T extends Provider> {
private IEssentials ess;
private String providerType;
private Iterable<Class <? extends T>> availableProviders;
public ProviderFactory(IEssentials ess, Iterable<Class <? extends T>> availableProviders, String providerType) {
this.ess = ess;
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;
ess.getLogger().info("Using " + finalProvider.getHumanName() + " as " + providerType + " provider.");
return finalProvider;
}
private T loadProvider(Class<? extends T> providerClass) {
try {
return providerClass.newInstance();
} catch (Throwable ignored) {
return null;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment