/*******************************************************************************
* Copyright (c) 2000, 2005 QNX Software Systems and others.
* 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:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.debug.mi.core.cdi;
import java.util.Vector;
import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
import org.eclipse.cdt.debug.mi.core.MISession;
import org.eclipse.cdt.debug.mi.core.cdi.model.Target;
import org.eclipse.cdt.debug.mi.core.event.MIInferiorCreatedEvent;
/**
*/
public class ProcessManager extends Manager {
static final Target[] EMPTY_TARGETS = new Target[0];
Vector debugTargetList;
public ProcessManager(Session session) {
super(session, true);
debugTargetList = new Vector(1);
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDIProcessManager#getProcesses()
*/
public Target[] getTargets() {
return (Target[]) debugTargetList.toArray(new Target[debugTargetList.size()]);
}
public ICDITarget[] getCDITargets() {
return (ICDITarget[]) debugTargetList.toArray(new ICDITarget[debugTargetList.size()]);
}
public void addTargets(Target[] targets) {
EventManager eventManager = (EventManager)getSession().getEventManager();
for (int i = 0; i < targets.length; ++i) {
Target target = targets[i];
MISession miSession = target.getMISession();
if (miSession != null) {
miSession.addObserver(eventManager);
miSession.fireEvent(new MIInferiorCreatedEvent(miSession, 0));
if (!debugTargetList.contains(target)) {
debugTargetList.add(target);
}
}
}
debugTargetList.trimToSize();
}
public void removeTargets(Target[] targets) {
EventManager eventManager = (EventManager)getSession().getEventManager();
for (int i = 0; i < targets.length; ++i) {
Target target = targets[i];
MISession miSession = target.getMISession();
if (miSession != null) {
miSession.deleteObserver(eventManager);
}
debugTargetList.remove(target);
}
debugTargetList.trimToSize();
}
public Target getTarget(MISession miSession) {
synchronized(debugTargetList) {
for (int i = 0; i < debugTargetList.size(); ++i) {
Target target = (Target)debugTargetList.get(i);
MISession mi = target.getMISession();
if (mi.equals(miSession)) {
return target;
}
}
}
// ASSERT: it should not happen.
return null;
}
public void update(Target target) throws CDIException {
}
}