/*
*
*/
package org.smartly.commons.event;
import org.smartly.commons.logging.Level;
import org.smartly.commons.logging.Logger;
import org.smartly.commons.logging.util.LoggingUtils;
import java.io.Serializable;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* Thread safe Map of listener's list.
*
* @author
*/
public class EventListeners
implements Serializable {
private final List<IEventListener> _listeners;
public EventListeners() {
_listeners = Collections.synchronizedList(new LinkedList<IEventListener>());
}
@Override
protected void finalize() throws Throwable {
if (null != _listeners) {
this.clear();
}
super.finalize();
}
@Override
public String toString() {
StringBuilder result = new StringBuilder();
result.append(this.getClass().getName());
result.append("[");
result.append("Items: ").append(this.size());
result.append("]");
return result.toString();
}
public int size() {
synchronized (_listeners) {
return _listeners.size();
}
}
public boolean isEmpty() {
synchronized (_listeners) {
return _listeners.isEmpty();
}
}
public boolean contains(final IEventListener listener) {
synchronized (_listeners) {
return _listeners.contains(listener);
}
}
public void add(IEventListener listener) {
synchronized (_listeners) {
if (!_listeners.contains(listener)) {
_listeners.add(listener);
}
}
}
public void clear() {
synchronized (_listeners) {
_listeners.clear();
}
}
public void remove(final IEventListener listener) {
synchronized (_listeners) {
_listeners.remove(listener);
}
}
public void remove(final int index) {
synchronized (_listeners) {
_listeners.remove(index);
}
}
public IEventListener[] toArray() {
synchronized (_listeners) {
return _listeners.toArray(new IEventListener[_listeners.size()]);
}
}
public int count(final String key) {
synchronized (_listeners) {
return _listeners.size();
}
}
public String getListenerSnapshot() {
synchronized (_listeners) {
return this.getSnapshot();
}
}
// ------------------------------------------------------------------------
// p r i v a t e
// ------------------------------------------------------------------------
private Logger getLogger() {
return LoggingUtils.getLogger(this);
}
private String getSnapshot() {
int size = _listeners.size();
StringBuilder result = new StringBuilder();
result.append("Total listeners: ").append(size);
try {
for (final IEventListener listener : _listeners) {
result.append("\n ");
result.append("\t").append(listener.toString());
}
} catch (Throwable t) {
Logger logger = this.getLogger();
logger.log(Level.WARNING, "Error getting listeners snapshot.", t);
result.append("ERROR [").append(t.toString()).append("]");
}
return result.toString();
}
}