blob: 3ffadb7d78ff63d6a5cee4a2a38e85f9a1b42cf3 [file] [log] [blame]
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();
}
}