package net.sourceforge.tagsea.breakpoint.waypoints;
import net.sourceforge.tagsea.AbstractWaypointDelegate;
import net.sourceforge.tagsea.breakpoint.BreakpointWaypointPlugin;
import net.sourceforge.tagsea.core.ITagChangeEvent;
import net.sourceforge.tagsea.core.IWaypoint;
import net.sourceforge.tagsea.core.IWaypointChangeEvent;
import net.sourceforge.tagsea.core.TagDelta;
import net.sourceforge.tagsea.core.WaypointDelta;
import org.eclipse.core.resources.ISaveContext;
import org.eclipse.core.resources.ISaveParticipant;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IBreakpointManager;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.ide.IDE;
public class BreakpointWaypointDelegate extends AbstractWaypointDelegate
{
private class SaveParticipant implements ISaveParticipant {
/* (non-Javadoc)
* @see org.eclipse.core.resources.ISaveParticipant#doneSaving(org.eclipse.core.resources.ISaveContext)
*/
public void doneSaving(ISaveContext context) {
}
/* (non-Javadoc)
* @see org.eclipse.core.resources.ISaveParticipant#prepareToSave(org.eclipse.core.resources.ISaveContext)
*/
public void prepareToSave(ISaveContext context) throws CoreException {
}
/* (non-Javadoc)
* @see org.eclipse.core.resources.ISaveParticipant#rollback(org.eclipse.core.resources.ISaveContext)
*/
public void rollback(ISaveContext context) {
//can't rollback saves
}
/* (non-Javadoc)
* @see org.eclipse.core.resources.ISaveParticipant#saving(org.eclipse.core.resources.ISaveContext)
*/
public void saving(ISaveContext context) throws CoreException
{
//only care about full saves.
if (context.getKind() != ISaveContext.FULL_SAVE) return;
BreakpointUtil.saveAll();
}
}
public BreakpointWaypointDelegate()
{
}
@Override
protected void load()
{
// //
// TagSEAPlugin.run(new TagSEAOperation("Loading Breakpoint Waypoints..."){
//
// @Override
// public IStatus run(IProgressMonitor monitor) throws InvocationTargetException {
IBreakpoint[] breakpoints = BreakpointUtil.getBreakpoints();
//monitor.beginTask("Loading Breakpoint Waypoints", breakpoints.length);
for(IBreakpoint breakpoint : breakpoints)
BreakpointUtil.createWaypointFromBreakpoint(breakpoint, false);
IBreakpointManager manager = DebugPlugin.getDefault().getBreakpointManager();
manager.addBreakpointListener(new BreakpointListener(BreakpointWaypointDelegate.this));
// return Status.OK_STATUS;
// }
//
// }, false);
try
{
ResourcesPlugin.getWorkspace().addSaveParticipant(BreakpointWaypointPlugin.getDefault(), new SaveParticipant());
}
catch (CoreException e)
{
e.printStackTrace();
}
}
@Override
public void navigate(IWaypoint waypoint)
{
IBreakpoint breakpoint = BreakpointUtil.findBreakpoint(waypoint);
// if (breakpoint == null) return;
//
// try
// {
// String handleIdentifier = (String)breakpoint.getMarker().getAttribute("org.eclipse.jdt.debug.ui.JAVA_ELEMENT_HANDLE_ID");
//
// if(handleIdentifier != null && handleIdentifier.trim().length()>0)
// {
// IJavaElement element = JavaCore.create(handleIdentifier);
// int line = waypoint.getIntValue(BreakpointUtil.LINE_ATTR, 0);
//
// try
// {
// IEditorPart part = EditorUtility.openInEditor(element);
//
// if(part instanceof ITextEditor)
// {
// ITextEditor editor = (ITextEditor)part;
// IDocument doc = editor.getDocumentProvider().getDocument(editor.getEditorInput());
//
// if(doc !=null)
// {
// IRegion region = doc.getLineInformation(line - 1);
// editor.getSelectionProvider().setSelection(new TextSelection(region.getOffset(),region.getLength()));
// }
// }
// }
// catch (PartInitException e)
// {
// e.printStackTrace();
// }
// catch (BadLocationException e)
// {
// e.printStackTrace();
// }
// catch (CoreException e)
// {
// e.printStackTrace();
// }
// }
// }
// catch (CoreException e)
// {
// e.printStackTrace();
// }
if(breakpoint!=null)
{
try
{
IDE.openEditor(BreakpointWaypointPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(), breakpoint.getMarker());
}
catch (PartInitException e)
{
e.printStackTrace();
}
}
}
@Override
protected void tagsChanged(TagDelta delta)
{
ITagChangeEvent[] events = delta.getEvents();
for(ITagChangeEvent event : events)
{
IWaypoint[] waypoints = event.getNewWaypoints();
for(IWaypoint waypoint:waypoints)
{
if(waypoint.getType().equals(BreakpointWaypointPlugin.WAYPOINT_ID))
BreakpointUtil.save(waypoint);
}
waypoints = event.getOldWaypoints();
for(IWaypoint waypoint:waypoints)
{
if(waypoint.getType().equals(BreakpointWaypointPlugin.WAYPOINT_ID))
BreakpointUtil.save(waypoint);
}
}
}
@Override
protected void waypointsChanged(WaypointDelta delta)
{
IWaypointChangeEvent[] events = delta.getChanges();
for(IWaypointChangeEvent event : events)
{
if(event.getType() == IWaypointChangeEvent.CHANGE)
{
IWaypoint waypoint = event.getWaypoint();
if(waypoint.getType().equals(BreakpointWaypointPlugin.WAYPOINT_ID))
{
BreakpointUtil.save(waypoint);
}
}
if(event.getType() == IWaypointChangeEvent.DELETE)
{
IWaypoint waypoint = event.getWaypoint();
if(waypoint.getType().equals(BreakpointWaypointPlugin.WAYPOINT_ID))
{
IBreakpoint breakpoint = BreakpointUtil.findBreakpoint(waypoint);
if (breakpoint != null) BreakpointUtil.delete(breakpoint);
}
}
}
}
public void updateWaypoints(IBreakpoint[] breakpoints)
{
BreakpointUtil.updateWaypoints(breakpoints);
}
}