Initial implementation of the new Debug Plugin
[phpeclipse.git] / net.sourceforge.phpeclipse.xdebug.core / src / net / sourceforge / phpeclipse / xdebug / php / model / XDebugLineBreakpoint.java
diff --git a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugLineBreakpoint.java b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugLineBreakpoint.java
new file mode 100644 (file)
index 0000000..a626e8c
--- /dev/null
@@ -0,0 +1,141 @@
+
+/*
+ * 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 <code>setMarker(...)</code> 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 <code>"net.sourceforge.phpeclipse.debug.typeName"</code>). This attribute is a <code>String</code>.
+        */
+       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);
+       }
+}