package com.mobilesorcery.sdk.html5.debug.jsdt;
import java.util.ArrayList;
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.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 com.mobilesorcery.sdk.html5.debug.ReloadVirtualMachine;
import com.mobilesorcery.sdk.html5.debug.jsdt.requests.ReloadBreakpointRequest;
import com.mobilesorcery.sdk.html5.debug.jsdt.requests.ReloadDebuggerStatementRequest;
import com.mobilesorcery.sdk.html5.debug.jsdt.requests.ReloadEventRequest;
import com.mobilesorcery.sdk.html5.debug.jsdt.requests.ReloadExceptionRequest;
import com.mobilesorcery.sdk.html5.debug.jsdt.requests.ReloadResumeRequest;
import com.mobilesorcery.sdk.html5.debug.jsdt.requests.ReloadScriptLoadRequest;
import com.mobilesorcery.sdk.html5.debug.jsdt.requests.ReloadStepRequest;
import com.mobilesorcery.sdk.html5.debug.jsdt.requests.ReloadSuspendRequest;
import com.mobilesorcery.sdk.html5.debug.jsdt.requests.ReloadThreadEnterRequest;
import com.mobilesorcery.sdk.html5.debug.jsdt.requests.ReloadThreadExitRequest;
import com.mobilesorcery.sdk.html5.debug.jsdt.requests.ReloadVMDeathRequest;
import com.mobilesorcery.sdk.html5.debug.jsdt.requests.ReloadVMDisconnectRequest;
public class ReloadEventRequestManager implements EventRequestManager {
private final ReloadVirtualMachine vm;
private final ArrayList<EventRequest> requests = new ArrayList<EventRequest>();
public ReloadEventRequestManager(ReloadVirtualMachine vm) {
this.vm = vm;
}
@Override
public BreakpointRequest createBreakpointRequest(Location location) {
return addRequest(new ReloadBreakpointRequest(vm, location));
}
private <T extends EventRequest> T addRequest(T request) {
requests.add(request);
return request;
}
private List filterRequests(Class requestType) {
ArrayList<EventRequest> result = new ArrayList<EventRequest>();
for (EventRequest request : requests) {
if (requestType.isAssignableFrom(request.getClass())) {
result.add(request);
}
}
return result;
}
@Override
public List breakpointRequests() {
return filterRequests(BreakpointRequest.class);
}
@Override
public DebuggerStatementRequest createDebuggerStatementRequest() {
return addRequest(new ReloadDebuggerStatementRequest(vm));
}
@Override
public List debuggerStatementRequests() {
return filterRequests(DebuggerStatementRequest.class);
}
@Override
public ExceptionRequest createExceptionRequest() {
return addRequest(new ReloadExceptionRequest(vm));
}
@Override
public List exceptionRequests() {
return filterRequests(ExceptionRequest.class);
}
@Override
public ScriptLoadRequest createScriptLoadRequest() {
return addRequest(new ReloadScriptLoadRequest(vm));
}
@Override
public List scriptLoadRequests() {
return filterRequests(ScriptLoadRequest.class);
}
@Override
public StepRequest createStepRequest(ThreadReference thread, int step) {
return addRequest(new ReloadStepRequest(vm, thread, step));
}
@Override
public List stepRequests() {
return filterRequests(StepRequest.class);
}
@Override
public SuspendRequest createSuspendRequest(ThreadReference thread) {
return addRequest(new ReloadSuspendRequest(vm, thread));
}
@Override
public List suspendRequests() {
return filterRequests(SuspendRequest.class);
}
@Override
public ResumeRequest createResumeRequest(ThreadReference thread) {
return addRequest(new ReloadResumeRequest(vm, thread));
}
@Override
public List resumeRequests() {
return filterRequests(ResumeRequest.class);
}
@Override
public ThreadEnterRequest createThreadEnterRequest() {
return addRequest(new ReloadThreadEnterRequest(vm));
}
@Override
public List threadEnterRequests() {
return filterRequests(ThreadEnterRequest.class);
}
@Override
public ThreadExitRequest createThreadExitRequest() {
return addRequest(new ReloadThreadExitRequest(vm));
}
@Override
public List threadExitRequests() {
return filterRequests(ThreadExitRequest.class);
}
@Override
public void deleteEventRequest(EventRequest eventRequest) {
this.requests.remove(eventRequest);
if (eventRequest instanceof ReloadEventRequest) {
((ReloadEventRequest) eventRequest).delete();
}
}
@Override
public void deleteEventRequest(List eventRequests) {
this.requests.removeAll(eventRequests);
}
@Override
public VMDeathRequest createVMDeathRequest() {
return addRequest(new ReloadVMDeathRequest(vm));
}
@Override
public List vmDeathRequests() {
return filterRequests(VMDeathRequest.class);
}
@Override
public VMDisconnectRequest createVMDisconnectRequest() {
return addRequest(new ReloadVMDisconnectRequest(vm));
}
@Override
public List vmDisconnectRequests() {
return filterRequests(VMDisconnectRequest.class);
}
}