blob: 5671cb3f41cb5a0657c79d7ca524f04cf2813be3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.jsdt.debug.internal.crossfire.jsdi;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.eclipse.wst.jsdt.debug.core.jsdi.Location;
import org.eclipse.wst.jsdt.debug.core.jsdi.ThreadReference;
import org.eclipse.wst.jsdt.debug.core.jsdi.VirtualMachine;
import org.eclipse.wst.jsdt.debug.core.jsdi.request.BreakpointRequest;
import org.eclipse.wst.jsdt.debug.core.jsdi.request.DebuggerStatementRequest;
import org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequest;
import org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager;
import org.eclipse.wst.jsdt.debug.core.jsdi.request.ExceptionRequest;
import org.eclipse.wst.jsdt.debug.core.jsdi.request.ResumeRequest;
import org.eclipse.wst.jsdt.debug.core.jsdi.request.ScriptLoadRequest;
import org.eclipse.wst.jsdt.debug.core.jsdi.request.StepRequest;
import org.eclipse.wst.jsdt.debug.core.jsdi.request.SuspendRequest;
import org.eclipse.wst.jsdt.debug.core.jsdi.request.ThreadEnterRequest;
import org.eclipse.wst.jsdt.debug.core.jsdi.request.ThreadExitRequest;
import org.eclipse.wst.jsdt.debug.core.jsdi.request.VMDeathRequest;
import org.eclipse.wst.jsdt.debug.core.jsdi.request.VMDisconnectRequest;
import org.eclipse.wst.jsdt.debug.internal.crossfire.request.CFBreakpointRequest;
import org.eclipse.wst.jsdt.debug.internal.crossfire.request.CFDeathRequest;
import org.eclipse.wst.jsdt.debug.internal.crossfire.request.CFDebuggerRequest;
import org.eclipse.wst.jsdt.debug.internal.crossfire.request.CFDisconnectRequest;
import org.eclipse.wst.jsdt.debug.internal.crossfire.request.CFExceptionRequest;
import org.eclipse.wst.jsdt.debug.internal.crossfire.request.CFResumeRequest;
import org.eclipse.wst.jsdt.debug.internal.crossfire.request.CFScriptLoadRequest;
import org.eclipse.wst.jsdt.debug.internal.crossfire.request.CFStepRequest;
import org.eclipse.wst.jsdt.debug.internal.crossfire.request.CFSuspendRequest;
import org.eclipse.wst.jsdt.debug.internal.crossfire.request.CFThreadEnterRequest;
import org.eclipse.wst.jsdt.debug.internal.crossfire.request.CFThreadExitRequest;
/**
* Default {@link EventRequestManager} for Crossfire
*
* @since 1.0
*/
public class CFEventRequestManager implements EventRequestManager {
private List threadexits = Collections.synchronizedList(new ArrayList(4));
private List threadenters = Collections.synchronizedList(new ArrayList(4));
private List breakpoints = Collections.synchronizedList(new ArrayList(4));
private List debuggers = Collections.synchronizedList(new ArrayList(4));
private List exceptions = Collections.synchronizedList(new ArrayList(4));
private List loads = Collections.synchronizedList(new ArrayList(4));
private List steps = Collections.synchronizedList(new ArrayList(4));
private List suspends = Collections.synchronizedList(new ArrayList(4));
private List resumes = Collections.synchronizedList(new ArrayList(4));
private List disconnects = Collections.synchronizedList(new ArrayList(4));
private List deaths = Collections.synchronizedList(new ArrayList(4));
private HashMap kind = new HashMap(10);
private VirtualMachine vm = null;
/**
* Constructor
*
* @param vm
*/
public CFEventRequestManager(VirtualMachine vm) {
this.vm = vm;
kind.put(CFBreakpointRequest.class, breakpoints);
kind.put(CFDebuggerRequest.class, debuggers);
kind.put(CFExceptionRequest.class, exceptions);
kind.put(CFScriptLoadRequest.class, loads);
kind.put(CFStepRequest.class, steps);
kind.put(CFSuspendRequest.class, suspends);
kind.put(CFResumeRequest.class, resumes);
kind.put(CFThreadEnterRequest.class, threadenters);
kind.put(CFThreadExitRequest.class, threadexits);
kind.put(CFDisconnectRequest.class, disconnects);
kind.put(CFDeathRequest.class, deaths);
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#createBreakpointRequest(org.eclipse.wst.jsdt.debug.core.jsdi.Location)
*/
public BreakpointRequest createBreakpointRequest(Location location) {
CFBreakpointRequest request = new CFBreakpointRequest(vm, location);
breakpoints.add(request);
return request;
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#breakpointRequests()
*/
public List breakpointRequests() {
return Collections.unmodifiableList(breakpoints);
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#createDebuggerStatementRequest()
*/
public DebuggerStatementRequest createDebuggerStatementRequest() {
CFDebuggerRequest request = new CFDebuggerRequest(vm);
debuggers.add(request);
return request;
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#debuggerStatementRequests()
*/
public List debuggerStatementRequests() {
return Collections.unmodifiableList(debuggers);
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#createExceptionRequest()
*/
public ExceptionRequest createExceptionRequest() {
CFExceptionRequest request = new CFExceptionRequest(vm);
exceptions.add(request);
return request;
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#exceptionRequests()
*/
public List exceptionRequests() {
return Collections.unmodifiableList(exceptions);
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#createScriptLoadRequest()
*/
public ScriptLoadRequest createScriptLoadRequest() {
CFScriptLoadRequest request = new CFScriptLoadRequest(vm);
loads.add(request);
return request;
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#scriptLoadRequests()
*/
public List scriptLoadRequests() {
return Collections.unmodifiableList(loads);
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#createStepRequest(org.eclipse.wst.jsdt.debug.core.jsdi.ThreadReference, int)
*/
public StepRequest createStepRequest(ThreadReference thread, int step) {
CFStepRequest request = new CFStepRequest(vm, thread, step);
steps.add(request);
return request;
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#stepRequests()
*/
public List stepRequests() {
return Collections.unmodifiableList(steps);
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#createSuspendRequest(org.eclipse.wst.jsdt.debug.core.jsdi.ThreadReference)
*/
public SuspendRequest createSuspendRequest(ThreadReference thread) {
CFSuspendRequest request = new CFSuspendRequest(vm, thread);
suspends.add(request);
return request;
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#suspendRequests()
*/
public List suspendRequests() {
return Collections.unmodifiableList(suspends);
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#createResumeRequest(org.eclipse.wst.jsdt.debug.core.jsdi.ThreadReference)
*/
public ResumeRequest createResumeRequest(ThreadReference thread) {
CFResumeRequest request = new CFResumeRequest(vm, thread);
resumes.add(request);
return request;
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#resumeRequests()
*/
public List resumeRequests() {
return Collections.unmodifiableList(resumes);
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#createThreadEnterRequest()
*/
public ThreadEnterRequest createThreadEnterRequest() {
CFThreadEnterRequest request = new CFThreadEnterRequest(vm);
threadenters.add(request);
return request;
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#threadEnterRequests()
*/
public List threadEnterRequests() {
return Collections.unmodifiableList(threadenters);
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#createThreadExitRequest()
*/
public ThreadExitRequest createThreadExitRequest() {
CFThreadExitRequest request = new CFThreadExitRequest(vm);
threadexits.add(request);
return request;
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#threadExitRequests()
*/
public List threadExitRequests() {
return Collections.unmodifiableList(threadexits);
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#deleteEventRequest(org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequest)
*/
public void deleteEventRequest(EventRequest eventRequest) {
List requests = (List) kind.get(eventRequest.getClass());
if(requests != null) {
requests.remove(eventRequest);
eventRequest.setEnabled(false);
}
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#deleteEventRequest(java.util.List)
*/
public void deleteEventRequest(List eventRequests) {
for (Iterator iter = eventRequests.iterator(); iter.hasNext();) {
deleteEventRequest((EventRequest) iter.next());
}
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#createVMDeathRequest()
*/
public VMDeathRequest createVMDeathRequest() {
CFDeathRequest request = new CFDeathRequest(vm);
deaths.add(request);
return request;
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#vmDeathRequests()
*/
public List vmDeathRequests() {
return Collections.unmodifiableList(deaths);
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#createVMDisconnectRequest()
*/
public VMDisconnectRequest createVMDisconnectRequest() {
CFDisconnectRequest request = new CFDisconnectRequest(vm);
disconnects.add(request);
return request;
}
/* (non-Javadoc)
* @see org.eclipse.wst.jsdt.debug.core.jsdi.request.EventRequestManager#vmDisconnectRequests()
*/
public List vmDisconnectRequests() {
return Collections.unmodifiableList(disconnects);
}
/**
* Cleans up all requests
*/
public void dispose() {
for (Iterator iter = kind.keySet().iterator(); iter.hasNext();) {
List list = (List) kind.get(iter.next());
list.clear();
}
}
}