Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 711d65dde8e103dfc00589be59f9da8256016deb (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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
package org.eclipse.debug.internal.core;

/*
 * (c) Copyright IBM Corp. 2000, 2001.
 * All Rights Reserved.
 */
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;

import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IDebugEventSetListener;
import org.eclipse.debug.core.IExpressionListener;
import org.eclipse.debug.core.IExpressionManager;
import org.eclipse.debug.core.model.IExpression;

/**
 * The expression manager manages all registered expressions
 * for the debug plugin. It is instantiated by the debug plugin
 * at startup.
 * 
 * [XXX: expression persistence not yet implemented]
 *
 * @see IExpressionManager
 */
public class ExpressionManager implements IExpressionManager, IDebugEventSetListener {
	
	/**
	 * Collection of registered expressions.
	 */
	private Vector fExpressions = new Vector(10);
	
	/**
	 * List of expression listeners
	 */
	private ListenerList fListeners = new ListenerList(2);
	
	/**
	 * @see IExpressionManager#addExpression(IExpression, String)
	 */
	public void addExpression(IExpression expression) {
		if (getExpressions0().indexOf(expression) == -1) {
			getExpressions0().add(expression);
			fireExpressionAdded(expression);
		}
	}

	/**
	 * @see IExpressionManager#getExpressions()
	 */
	public IExpression[] getExpressions() {
		Vector expressions = getExpressions0();
		IExpression[] temp= new IExpression[expressions.size()];
		expressions.copyInto(temp);
		return temp;
	}

	/**
	 * @see IExpressionManager#getExpressions(String)
	 */
	public IExpression[] getExpressions(String modelIdentifier) {
		Vector expressions = getExpressions0();
		ArrayList temp= new ArrayList(expressions.size());
		Iterator iter= expressions.iterator();
		while (iter.hasNext()) {
			IExpression expression= (IExpression) iter.next();
			String id= expression.getModelIdentifier();
			if (id != null && id.equals(modelIdentifier)) {
				temp.add(expression);
			}
		}
		return (IExpression[]) temp.toArray(new IExpression[temp.size()]);
	}

	/**
	 * @see IExpressionManager#removeExpression(IExpression)
	 */
	public void removeExpression(IExpression expression) {
		if (getExpressions0().indexOf(expression) >= 0) {
			getExpressions0().remove(expression);
			expression.dispose();
			fireExpressionRemoved(expression);
		}
	}

	/**
	 * @see IExpressionManager#addExpressionListener(IExpressionListener)
	 */
	public void addExpressionListener(IExpressionListener listener) {
		fListeners.add(listener);
	}

	/**
	 * @see IExpressionManager#removeExpressionListener(IExpressionListener)
	 */
	public void removeExpressionListener(IExpressionListener listener) {
		fListeners.remove(listener);
	}
	
	/**
	 * Called be the debug plug-in when starting up.
	 */
	public void startup() {
		DebugPlugin.getDefault().addDebugEventListener(this);
	}
	
	/**
	 * Called by the debug plug-in when shutting down.
	 */
	public void shutdown() {
		DebugPlugin.getDefault().removeDebugEventListener(this);
	}

	/**
	 * Returns the list of registered expressions as
	 * a vector.
	 * 
	 * @return vector of registered expressions
	 */
	protected Vector getExpressions0() {
		return fExpressions;
	}
	
	/**
	 * @see IDebugEventSetListener#handleDebugEvent(DebugEvent)
	 */
	public void handleDebugEvents(DebugEvent[] events) {
		for (int i = 0; i < events.length; i++) {
			DebugEvent event = events[i];
			if (event.getSource() instanceof IExpression) {
				switch (event.getKind()) {
					case DebugEvent.CHANGE:
						fireExpressionChanged((IExpression)event.getSource());
						break;
					default:
						break;
				}
			} 
		}
	}
	
	/**
	 * Notifies listeners that the given expression has been
	 * added.
	 * 
	 * @param expression the newly added expression
	 */
	protected void fireExpressionAdded(IExpression expression) {
		Object[] listeners = fListeners.getListeners();
		for (int i = 0; i < listeners.length; i++) {
			((IExpressionListener)listeners[i]).expressionAdded(expression);
		}
	}
	
	/**
	 * Notifies listeners that the given expression has been
	 * removed.
	 * 
	 * @param expression the removed expression
	 */
	protected void fireExpressionRemoved(IExpression expression) {
		Object[] listeners = fListeners.getListeners();
		for (int i = 0; i < listeners.length; i++) {
			((IExpressionListener)listeners[i]).expressionRemoved(expression);
		}
	}	
	
	/**
	 * Notifies listeners that the given expression has changed.
	 * 
	 * @param expression the changed expression
	 */
	protected void fireExpressionChanged(IExpression expression) {
		Object[] listeners = fListeners.getListeners();
		for (int i = 0; i < listeners.length; i++) {
			((IExpressionListener)listeners[i]).expressionChanged(expression);
		}
	}		

	/**
	 * @see IExpressionManager#hasExpressions()
	 */
	public boolean hasExpressions() {
		return !getExpressions0().isEmpty();
	}

}

Back to the top