Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: a6053b2b871201c55307d159025c2e06b9a1d3e8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*****************************************************************************
 * Copyright (c) 2013 Cedric Dumoulin.
 *
 *
 * 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:
 *  Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
 *
 *****************************************************************************/

package org.eclipse.papyrus.infra.core.sasheditor.utils;

import java.util.ArrayList;
import java.util.List;


/**
 * A generic list that can be observed.
 *
 * @author cedric dumoulin
 *
 */
public class ObservableList<T> extends ArrayList<T> implements IObservableList<T> {

	/**
	 *
	 */
	private static final long serialVersionUID = 1L;

	/** List of listeners */
	private List<IObservableListListener<T>> listeners = new ArrayList<IObservableListListener<T>>();

	/**
	 * Constructor.
	 *
	 */
	public ObservableList() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * Constructor.
	 *
	 * @param initialCapacity
	 */
	public ObservableList(int initialCapacity) {
		super(initialCapacity);
	}


	/**
	 * For testing purpose.
	 *
	 * @return the listeners
	 */
	protected List<IObservableListListener<T>> getListeners() {
		return listeners;
	}

	/**
	 * Add a listener on list change event event.
	 *
	 * @see org.eclipse.papyrus.infra.core.sasheditor.utils.IObservableList#addListener(org.eclipse.papyrus.infra.core.sasheditor.utils.IObservableListListener)
	 *
	 * @param listener
	 */
	@Override
	public void addListener(IObservableListListener<T> listener) {
		// no duplicate
		if (listeners.contains(listener)) {
			return;
		}
		listeners.add(listener);
	}

	/**
	 * Remove a listener on the list.
	 *
	 * @see org.eclipse.papyrus.infra.core.sasheditor.utils.IObservableList#removeListener(org.eclipse.papyrus.infra.core.sasheditor.utils.IObservableListListener)
	 *
	 * @param listener
	 */
	@Override
	public void removeListener(IObservableListListener<T> listener) {
		listeners.remove(listener);
	}


	/**
	 * Notify all listener with event.
	 *
	 * @param element
	 *            The newly added element
	 */
	public void fireElementAddedEvent(T element) {
		// Fire events to internal listeners
		for (IObservableListListener<T> listener : listeners) {
			listener.elementAdded(element);
		}
	}

	/**
	 * Notify all listener with event.
	 *
	 * @param element
	 *            The removed element.
	 */
	public void fireElementRemovedEvent(T element) {
		// Fire events to internal listeners
		for (IObservableListListener<T> listener : listeners) {
			listener.elementRemoved(element);
		}
	}

	/**
	 * Add the element, and fire the appropriate event.
	 *
	 * @see java.util.ArrayList#add(java.lang.Object)
	 *
	 * @param e
	 * @return
	 */
	@Override
	public boolean add(T e) {
		boolean res = super.add(e);
		fireElementAddedEvent(e);
		return res;
	}

	@SuppressWarnings("unchecked")
	@Override
	public boolean remove(Object o) {
		boolean res = super.remove(o);
		fireElementRemovedEvent((T) o);
		return res;
	}
}

Back to the top