1
package org.helioviewer.viewmodel.view;
3
import java.util.AbstractList;
4
import java.util.ArrayList;
5
import java.util.LinkedList;
7
import java.util.concurrent.locks.ReadWriteLock;
8
import java.util.concurrent.locks.ReentrantReadWriteLock;
10
import org.helioviewer.viewmodel.changeevent.ChangeEvent;
13
* Abstract base class implementing View, managing view listeners.
16
* This class provides the functionality to manage and notify all view
20
* For further information about views, see {@link View}.
22
* @author Markus Langenberg
24
public abstract class AbstractView implements View {
26
private AbstractList<ViewListener> listeners = new LinkedList<ViewListener>();
27
private ReadWriteLock lock = new ReentrantReadWriteLock();
32
public void addViewListener(ViewListener l) {
33
lock.writeLock().lock();
35
lock.writeLock().unlock();
41
public AbstractList<ViewListener> getAllViewListener() {
48
public void removeViewListener(ViewListener l) {
49
lock.writeLock().lock();
51
lock.writeLock().unlock();
55
* Sends a new ChangeEvent to all registered view listeners.
60
protected void notifyViewListeners(ChangeEvent aEvent) {
61
lock.readLock().lock();
62
List<ViewListener> listenersCopy = null;
64
listenersCopy = new ArrayList<ViewListener>(listeners);
66
lock.readLock().unlock();
68
if (listenersCopy != null) {
69
for (ViewListener v : listenersCopy) {
70
v.viewChanged(this, aEvent);