/*
* Copyright (c) 2012 ICM Uniwersytet Warszawski All rights reserved.
* See LICENCE.txt file for licensing information.
*/
package eu.emi.security.authn.x509.helpers;
import java.util.Collection;
import java.util.HashSet;
import java.util.Observable;
import java.util.Set;
import eu.emi.security.authn.x509.StoreUpdateListener;
import eu.emi.security.authn.x509.StoreUpdateListener.Severity;
/**
* Thread safe class maintaining a collection of {@link StoreUpdateListener}s.
* Type-safe counterpart of {@link Observable}.
* @author K. Benedyczak
*/
public class ObserversHandler
{
private Set<StoreUpdateListener> observers;
public ObserversHandler()
{
this(null);
}
public ObserversHandler(Collection<? extends StoreUpdateListener> initialObservers)
{
observers = new HashSet<StoreUpdateListener>();
if (initialObservers != null)
observers.addAll(initialObservers);
}
/**
* Registers a listener which can react to errors found during refreshing
* of the trust material: trusted CAs or CRLs. This method is useful only if
* the implementation supports updating of CAs or CRLs, otherwise the listener
* will not be invoked.
*
* @param listener to be registered
*/
public synchronized void addObserver(StoreUpdateListener listener)
{
observers.add(listener);
}
/**
* Unregisters a previously registered CA or CRL update listener. If the listener
* was not registered then the method does nothing.
* @param listener to be unregistered
*/
public synchronized void removeObserver(StoreUpdateListener listener)
{
observers.remove(listener);
}
public synchronized void notifyObservers(String url, String type, Severity level, Exception e)
{
for (StoreUpdateListener observer: observers)
observer.loadingNotification(url, type, level, e);
}
public synchronized void removeAllObservers()
{
observers.clear();
}
}