
org.keycloak.util.ProviderLoader Maven / Gradle / Ivy
package org.keycloak.util;
import java.util.Iterator;
import java.util.ServiceLoader;
/**
* @author Stian Thorgersen
*/
public class ProviderLoader implements Iterable {
private final ServiceLoader serviceLoader;
public static Iterable load(Class service) {
ServiceLoader providers = ServiceLoader.load(service);
return new ProviderLoader(providers);
}
private ProviderLoader(ServiceLoader serviceLoader) {
this.serviceLoader = serviceLoader;
}
@Override
public Iterator iterator() {
return new ProviderIterator(serviceLoader.iterator());
}
private static class ProviderIterator implements Iterator {
private final Iterator itr;
private T next;
private ProviderIterator(Iterator itr) {
this.itr = itr;
setNext();
}
@Override
public boolean hasNext() {
return next != null;
}
@Override
public T next() {
T n = next;
setNext();
return n;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
private void setNext() {
next = null;
while (itr.hasNext()) {
if (itr.hasNext()) {
T n = itr.next();
if (!System.getProperties().containsKey(n.getClass().getName() + ".disabled")) {
next = n;
return;
}
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy