/**************************************************************************************
* Copyright (C) 2008 EsperTech, Inc. All rights reserved. *
* http://esper.codehaus.org *
* http://www.espertech.com *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the GPL license *
* a copy of which has been included with this distribution in the license.txt file. *
**************************************************************************************/
package com.espertech.esper.core.service;
import com.espertech.esper.client.UpdateListener;
import com.espertech.esper.client.StatementAwareUpdateListener;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* Provides update listeners for use by statement instances, and the management methods around these.
* <p>
* The collection of update listeners is based on copy-on-write:
* When the engine dispatches events to a set of listeners, then while iterating through the set there
* may be listeners added or removed (the listener may remove itself).
* Additionally, events may be dispatched by multiple threads to the same listener.
*/
public class EPStatementListenerSet
{
Object subscriber;
CopyOnWriteArraySet<UpdateListener> listeners;
CopyOnWriteArraySet<StatementAwareUpdateListener> stmtAwareListeners;
/**
* Ctor.
*/
public EPStatementListenerSet()
{
listeners = new CopyOnWriteArraySet<UpdateListener>();
stmtAwareListeners = new CopyOnWriteArraySet<StatementAwareUpdateListener>();
}
/**
* Ctor.
* @param listeners is a set of update listener
* @param stmtAwareListeners is a set of statement-aware update listener
*/
public EPStatementListenerSet(CopyOnWriteArraySet<UpdateListener> listeners, CopyOnWriteArraySet<StatementAwareUpdateListener> stmtAwareListeners)
{
this.listeners = listeners;
this.stmtAwareListeners = stmtAwareListeners;
}
/**
* Returns the set of listeners to the statement.
* @return statement listeners
*/
public CopyOnWriteArraySet<UpdateListener> getListeners()
{
return listeners;
}
/**
* Returns the set of statement-aware listeners.
* @return statement-aware listeners
*/
public CopyOnWriteArraySet<StatementAwareUpdateListener> getStmtAwareListeners()
{
return stmtAwareListeners;
}
/**
* Set the update listener set to use.
* @param listenerSet a collection of update listeners
*/
public void setListeners(EPStatementListenerSet listenerSet)
{
this.listeners = listenerSet.getListeners();
this.stmtAwareListeners = listenerSet.getStmtAwareListeners();
}
/**
* Add a listener to the statement.
* @param listener to add
*/
public void addListener(UpdateListener listener)
{
if (listener == null)
{
throw new IllegalArgumentException("Null listener reference supplied");
}
listeners.add(listener);
}
/**
* Remove a listeners to a statement.
* @param listener to remove
*/
public void removeListener(UpdateListener listener)
{
if (listener == null)
{
throw new IllegalArgumentException("Null listener reference supplied");
}
listeners.remove(listener);
}
/**
* Remove all listeners to a statement.
*/
public void removeAllListeners()
{
listeners.clear();
stmtAwareListeners.clear();
}
/**
* Add a listener to the statement.
* @param listener to add
*/
public void addListener(StatementAwareUpdateListener listener)
{
if (listener == null)
{
throw new IllegalArgumentException("Null listener reference supplied");
}
stmtAwareListeners.add(listener);
}
/**
* Remove a listeners to a statement.
* @param listener to remove
*/
public void removeListener(StatementAwareUpdateListener listener)
{
if (listener == null)
{
throw new IllegalArgumentException("Null listener reference supplied");
}
stmtAwareListeners.remove(listener);
}
/**
* Sets a subscriber instance.
* @param subscriber is the subscriber to set
*/
public void setSubscriber(Object subscriber)
{
this.subscriber = subscriber;
}
/**
* Returns the subscriber instance.
* @return subscriber
*/
public Object getSubscriber()
{
return subscriber;
}
}