/*******************************************************************************
* Copyright (c) 2013 Luigi Sgro. All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Luigi Sgro - initial API and implementation
******************************************************************************/
package com.quantcomponents.ui.core;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
public class MonitorableContainer<T> implements IMutableMonitorableContainer<T, T> {
private final Set<T> elements = new CopyOnWriteArraySet<T>();
private final Set<IMonitorableContainerListener<T>> listeners = new CopyOnWriteArraySet<IMonitorableContainerListener<T>>();
@Override
public Collection<T> getElements() {
return Collections.unmodifiableCollection(elements);
}
@Override
public void addElement(T element) {
elements.add(element);
for (IMonitorableContainerListener<T> listener : listeners) {
listener.onElementAdded(element);
}
}
@Override
public boolean removeElement(T element) {
boolean removed = elements.remove(element);
for (IMonitorableContainerListener<T> listener : listeners) {
listener.onElementRemoved(element);
}
return removed;
}
@Override
public boolean removeWrapper(T element) {
return removeElement(element);
}
@Override
public void addListener(IMonitorableContainerListener<T> listener) {
listeners.add(listener);
}
@Override
public void removeListener(IMonitorableContainerListener<T> listener) {
listeners.remove(listener);
}
@Override
public void dispose() {
elements.clear();
listeners.clear();
}
}