/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.view.event;
import java.util.concurrent.CopyOnWriteArraySet;
import com.opengamma.id.UniqueId;
/**
* Registered listeners for registering and unregistering ViewProcessorEventListener and sending notifications to
* registrants.
* <p>
* There is one of these per ViewProcessor. It is a composite listener.
*/
public class ViewProcessorEventListenerRegistry implements ViewProcessorEventListener {
/**
* The set of listeners.
*/
private final CopyOnWriteArraySet<ViewProcessorEventListener> _listeners = new CopyOnWriteArraySet<ViewProcessorEventListener>();
@Override
public void notifyViewProcessAdded(UniqueId viewProcessId) {
for (ViewProcessorEventListener listener : _listeners) {
listener.notifyViewProcessAdded(viewProcessId);
}
}
@Override
public void notifyViewAutomaticallyStarted(UniqueId viewProcessId, String autoStartName) {
for (ViewProcessorEventListener listener : _listeners) {
listener.notifyViewAutomaticallyStarted(viewProcessId, autoStartName);
}
}
@Override
public void notifyViewProcessRemoved(UniqueId viewProcessId) {
for (ViewProcessorEventListener listener : _listeners) {
listener.notifyViewProcessRemoved(viewProcessId);
}
}
@Override
public void notifyViewClientAdded(UniqueId viewClientId) {
for (ViewProcessorEventListener listener : _listeners) {
listener.notifyViewClientAdded(viewClientId);
}
}
@Override
public void notifyViewClientRemoved(UniqueId viewClientId) {
for (ViewProcessorEventListener listener : _listeners) {
listener.notifyViewClientRemoved(viewClientId);
}
}
/**
* Adds a listener to the notification service. No guarantee is made that listeners will be
* notified in the order they were added.
*
* @param viewProcessorEventListener the listener to add. Can be null, in which case nothing happens
* @return true if the listener is being added and was not already added
*/
public final boolean registerListener(ViewProcessorEventListener viewProcessorEventListener) {
if (viewProcessorEventListener == null) {
return false;
}
return _listeners.add(viewProcessorEventListener);
}
/**
* Removes a listener from the notification service.
*
* @param viewProcessorEventListener the listener to remove
* @return true if the listener was present
*/
public final boolean unregisterListener(ViewProcessorEventListener viewProcessorEventListener) {
return _listeners.remove(viewProcessorEventListener);
}
@Override
public void notifyViewProcessorStarted() {
for (ViewProcessorEventListener listener : _listeners) {
listener.notifyViewProcessorStarted();
}
}
@Override
public void notifyViewProcessorStopped() {
for (ViewProcessorEventListener listener : _listeners) {
listener.notifyViewProcessorStopped();
}
}
}