/*
* Created on 25.11.2004
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package net.sourceforge.phpeclipse.xdebug.php.model;
import java.util.HashMap;
import java.util.Map;
import net.sourceforge.phpeclipse.xdebug.php.launching.IXDebugConstants;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.debug.core.model.LineBreakpoint;
/**
* @author Axel
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class XDebugLineBreakpoint extends LineBreakpoint {
/**
* Default constructor is required for the breakpoint manager to re-create
* persisted breakpoints. After instantiating a breakpoint, the
* setMarker(...)
method is called to restore this
* breakpoint's attributes.
*/
private static final String XDEBUG_LINE_BREAKPOINT = "net.sourceforge.phpeclipse.xdebug.core.XDebugLineBreakpoint"; //$NON-NLS-1$
/**
* Breakpoint attribute storing the fully qualified name of the type this
* breakpoint is located in. (value
* "net.sourceforge.phpeclipse.debug.typeName"
). This
* attribute is a String
.
*/
protected static final String TYPE_NAME = "net.sourceforge.phpeclipse.debug.typeName"; //$NON-NLS-1$
// public PHPLineBreakpoint() {
// }
//
// public PHPLineBreakpoint(IResource resource, int lineNumber, int
// charStart, int charEnd, int hitCount, boolean add, Map attributes) throws
// DebugException {
// this(resource, lineNumber, charStart, charEnd, hitCount, add, attributes,
// PHP_LINE_BREAKPOINT);
// }
//
// public PHPLineBreakpoint(IResource resource, int lineNumber, int
// hitCount, boolean add, Map attributes) throws DebugException {
// this(resource, lineNumber, -1, -1, hitCount, add, attributes,
// PHP_LINE_BREAKPOINT);
// }
public static final String BREAKPOINT_ID = "XDebugLineBreakpointID";
public XDebugLineBreakpoint() {
}
/**
* Constructs a line breakpoint on the given resource at the given line
* number. The line number is 1-based (i.e. the first line of a file is line
* number 1).
*
* @param resource
* file on which to set the breakpoint
* @param lineNumber
* 1-based line number of the breakpoint
* @throws CoreException
* if unable to create the breakpoint
*/
public XDebugLineBreakpoint(final IResource resource, final int lineNumber)
throws CoreException {
// IMarker marker =
// resource.createMarker("net.sourceforge.phpeclipse.xdebug.core.XDebugLineBreakpoint");
// setMarker(marker);
// setEnabled(true);
// XDebugCorePlugin.log(IStatus.INFO,"Markertype: "+ marker.getType());
// ensureMarker().setAttribute(IMarker.LINE_NUMBER, lineNumber);
// ensureMarker().setAttribute(IBreakpoint.ID,
// IXDebugConstants.ID_PHP_DEBUG_MODEL);
// ensureMarker().setAttribute(BREAKPOINT_ID,-1);
IWorkspaceRunnable wr = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
// create the marker
setMarker(resource.createMarker(XDEBUG_LINE_BREAKPOINT));
// add attributes
Map attributes = new HashMap(10);
addLineBreakpointAttributes(attributes, getModelIdentifier(),
true, lineNumber, -1, -1);
// set attributes
ensureMarker().setAttributes(attributes);
// add to breakpoint manager if requested
register(true);
}
};
run(getMarkerRule(resource), wr);
}
protected void register(boolean register) throws CoreException {
if (register) {
DebugPlugin.getDefault().getBreakpointManager().addBreakpoint(this);
} else {
setRegistered(false);
}
}
public void addLineBreakpointAttributes(Map attributes,
String modelIdentifier, boolean enabled, int lineNumber,
int charStart, int charEnd) {
attributes.put(IBreakpoint.ID, modelIdentifier);
attributes.put(IBreakpoint.ENABLED, new Boolean(enabled));
attributes.put(IMarker.LINE_NUMBER, new Integer(lineNumber));
if (charStart != -1) {
attributes.put(IMarker.CHAR_START, new Integer(charStart));
attributes.put(IMarker.CHAR_END, new Integer(charEnd));
}
attributes.put(TYPE_NAME, "typeName");
attributes.put(BREAKPOINT_ID, new Integer(-1));
}
/*
* (non-Javadoc)
*
* @see org.eclipse.debug.core.model.IBreakpoint#getModelIdentifier()
*/
public String getModelIdentifier() {
return IXDebugConstants.ID_PHP_DEBUG_MODEL;
}
public void setID(int id) throws CoreException {
ensureMarker().setAttribute(BREAKPOINT_ID, id);
}
public int getID() throws CoreException {
return ensureMarker().getAttribute(BREAKPOINT_ID, -1);
}
}