package net.sourceforge.tagsea.breakpoint.waypoints;
import java.lang.reflect.InvocationTargetException;
import net.sourceforge.tagsea.TagSEAPlugin;
import net.sourceforge.tagsea.core.TagSEAOperation;
import org.eclipse.core.resources.IMarkerDelta;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.IBreakpointsListener;
import org.eclipse.debug.core.model.IBreakpoint;
public class BreakpointListener implements IBreakpointsListener
{
BreakpointWaypointDelegate fDelegate;
public BreakpointListener(BreakpointWaypointDelegate delegate)
{
fDelegate = delegate;
}
/**
* Notifies this listener that the given breakpoints have been added
* to the breakpoint manager.
*
* @param breakpoints the added breakpoints
*/
public void breakpointsAdded(final IBreakpoint[] breakpoints)
{
TagSEAPlugin.run(new TagSEAOperation("Adding Breakpoints..."){
@Override
public IStatus run(IProgressMonitor monitor) throws InvocationTargetException {
for(IBreakpoint breakpoint : breakpoints)
BreakpointUtil.createWaypointFromBreakpoint(breakpoint, true);
return Status.OK_STATUS;
}
}, false);
}
/**
* Notifies this listener that the given breakpoints have been removed
* from the breakpoint manager.
* If a breakpoint has been removed because it has been deleted,
* the associated marker delta is also provided.
*
* @param breakpoints the removed breakpoints
* @param deltas the associated marker deltas. Entries may be
* <code>null</code> when a breakpoint is removed from the breakpoint
* manager without being deleted
*
* @see org.eclipse.core.resources.IMarkerDelta
*/
public void breakpointsRemoved(final IBreakpoint[] breakpoints, final IMarkerDelta[] deltas)
{
TagSEAPlugin.run(new TagSEAOperation("Removing Breakpoints...") {
@Override
public IStatus run(IProgressMonitor monitor) throws InvocationTargetException {
for(IMarkerDelta delta : deltas)
if(delta!=null)
BreakpointUtil.removeWaypoint(delta.getId());
for(IBreakpoint breakpoint : breakpoints)
BreakpointUtil.removeWaypoint(breakpoint);
return Status.OK_STATUS;
}
}, false);
}
/**
* Notifies this listener that the given breakpoints have
* changed, as described by the corresponding deltas.
*
* @param breakpoints the changed breakpoints
* @param deltas the marker deltas that describe the changes
* with the markers associated with the given breakpoints. Entries
* may be <code>null</code> when a breakpoint change does not generate
* a marker delta
*
* @see org.eclipse.core.resources.IMarkerDelta
*/
public void breakpointsChanged(IBreakpoint[] breakpoints, IMarkerDelta[] deltas)
{
fDelegate.updateWaypoints(breakpoints);
}
}