~josejuan-sanchez/+junk/original-jhv-experimental-version

« back to all changes in this revision

Viewing changes to src/viewmodel/src/org/helioviewer/viewmodel/view/AbstractView.java

  • Committer: José Juan Sánchez Hernández
  • Date: 2013-02-05 13:32:08 UTC
  • Revision ID: josejuan.sanchez@gmail.com-20130205133208-dfz1sh1uge5pjkny
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package org.helioviewer.viewmodel.view;
 
2
 
 
3
import java.util.AbstractList;
 
4
import java.util.ArrayList;
 
5
import java.util.LinkedList;
 
6
import java.util.List;
 
7
import java.util.concurrent.locks.ReadWriteLock;
 
8
import java.util.concurrent.locks.ReentrantReadWriteLock;
 
9
 
 
10
import org.helioviewer.viewmodel.changeevent.ChangeEvent;
 
11
 
 
12
/**
 
13
 * Abstract base class implementing View, managing view listeners.
 
14
 * 
 
15
 * <p>
 
16
 * This class provides the functionality to manage and notify all view
 
17
 * listeners.
 
18
 * 
 
19
 * <p>
 
20
 * For further information about views, see {@link View}.
 
21
 * 
 
22
 * @author Markus Langenberg
 
23
 */
 
24
public abstract class AbstractView implements View {
 
25
 
 
26
    private AbstractList<ViewListener> listeners = new LinkedList<ViewListener>();
 
27
    private ReadWriteLock lock = new ReentrantReadWriteLock();
 
28
 
 
29
    /**
 
30
     * {@inheritDoc}
 
31
     */
 
32
    public void addViewListener(ViewListener l) {
 
33
        lock.writeLock().lock();
 
34
        listeners.add(l);
 
35
        lock.writeLock().unlock();
 
36
    }
 
37
 
 
38
    /**
 
39
     * {@inheritDoc}
 
40
     */
 
41
    public AbstractList<ViewListener> getAllViewListener() {
 
42
        return listeners;
 
43
    }
 
44
 
 
45
    /**
 
46
     * {@inheritDoc}
 
47
     */
 
48
    public void removeViewListener(ViewListener l) {
 
49
        lock.writeLock().lock();
 
50
        listeners.remove(l);
 
51
        lock.writeLock().unlock();
 
52
    }
 
53
 
 
54
    /**
 
55
     * Sends a new ChangeEvent to all registered view listeners.
 
56
     * 
 
57
     * @param aEvent
 
58
     *            ChangeEvent to send
 
59
     */
 
60
    protected void notifyViewListeners(ChangeEvent aEvent) {
 
61
        lock.readLock().lock();
 
62
        List<ViewListener> listenersCopy = null;
 
63
        try {
 
64
            listenersCopy = new ArrayList<ViewListener>(listeners);
 
65
        } finally {
 
66
            lock.readLock().unlock();
 
67
        }
 
68
        if (listenersCopy != null) {
 
69
            for (ViewListener v : listenersCopy) {
 
70
                v.viewChanged(this, aEvent);
 
71
            }
 
72
        }
 
73
    }
 
74
 
 
75
}