package co.codewizards.cloudstore.core.oio;
import java.util.Iterator;
import java.util.ServiceLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Sebastian Schefczyk
*/
public class OioRegistry {
private static final Logger logger = LoggerFactory.getLogger(OioRegistry.class);
private final FileFactory fileFactory;
private static class OioProviderHolder {
public static final OioRegistry instance = new OioRegistry();
}
private OioRegistry() {
this.fileFactory = getPrioritizedService(FileFactory.class);
logger.info("Preferred implementation '{}' for fileFactory", this.fileFactory.getClass().getSimpleName());
}
private <N extends FileFactory> N getPrioritizedService(final Class<N> n) {
final Iterator<N> it = ServiceLoader.load(n).iterator();
N highPrio = null;
while (it.hasNext()) {
final N i = it.next();
if (highPrio == null)
highPrio = i;
else if (highPrio.getPriority() < i.getPriority())
highPrio = i;
}
if (highPrio == null)
throw new IllegalStateException("Could not get an implementation for interface: " + n.getName());
return highPrio;
}
public static OioRegistry getInstance() {
return OioProviderHolder.instance;
}
public FileFactory getFileFactory() {
return fileFactory;
}
}