All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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 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 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 - 2024 Weber Informatics LLC | Privacy Policy