/**
* Copyright (C) 2014 Eric Van Dewoestine
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.eclim.plugin.jdt.command.debug.event;
import org.eclim.logging.Logger;
import org.eclim.plugin.jdt.command.debug.context.DebuggerContext;
import org.eclim.plugin.jdt.command.debug.context.DebuggerContextManager;
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.IDebugEventSetListener;
import org.eclipse.jdt.internal.debug.core.model.JDIDebugElement;
import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
import org.eclipse.jdt.internal.debug.core.model.JDIThread;
/**
* Handler for events triggered during a debug session.
*/
public class DebugEventSetListener
implements IDebugEventSetListener
{
private static final Logger logger = Logger.getLogger(
DebugEventSetListener.class);
private DebugEventHandler threadEventhandler;
private DebugEventHandler debugTargetEventhandler;
public DebugEventSetListener()
{
this.threadEventhandler = new ThreadEventHandler();
this.debugTargetEventhandler = new DebugTargetEventHandler();
}
public void handleDebugEvents(DebugEvent[] events)
{
for (DebugEvent event : events) {
JDIDebugElement src = (JDIDebugElement) event.getSource();
int kind = event.getKind();
int detail = event.getDetail();
DebuggerContext ctx = DebuggerContextManager.getDefault();
if (ctx == null) {
if (logger.isDebugEnabled()) {
logger.debug("No debugging session present");
}
return;
}
try {
if (src instanceof JDIThread) {
threadEventhandler.handle(ctx, src, kind, detail);
} else if (src instanceof JDIDebugTarget) {
debugTargetEventhandler.handle(ctx, src, kind, detail);
}
} catch (Exception e) {
logger.error("Listener failed", e);
}
}
}
}