a9712ec0bb9ecefea3d9bcbb8e9e98f785515422
[phpeclipse.git] /
1 /**********************************************************************
2 Copyright (c) 2000, 2002 IBM Corp. and others.
3 All rights reserved. This program and the accompanying materials
4 are made available under the terms of the Common Public License v1.0
5 which accompanies this distribution, and is available at
6 http://www.eclipse.org/legal/cpl-v10.html
7
8 Contributors:
9     Vicente Fernando - Initial implementation - www.alfersoft.com.ar
10 **********************************************************************/
11 package net.sourceforge.phpdt.internal.debug.core.breakpoints;
12
13 import java.util.Map;
14
15 import org.eclipse.core.resources.IMarker;
16 import org.eclipse.core.resources.IResource;
17 import org.eclipse.core.resources.IWorkspaceRunnable;
18 import org.eclipse.core.runtime.CoreException;
19 import org.eclipse.core.runtime.IProgressMonitor;
20 import org.eclipse.debug.core.DebugException;
21 import org.eclipse.debug.core.model.IBreakpoint;
22 import org.eclipse.debug.core.model.ILineBreakpoint;
23
24 /**
25  * A breakpoint that can be located at a specific line of source code.
26  */
27 public class PHPLineBreakpoint extends PHPBreakpoint implements IBreakpoint, ILineBreakpoint {
28
29         private static final String PHP_LINE_BREAKPOINT = "net.sourceforge.phpeclipse.debug.core.phpLineBreakpointMarker"; //$NON-NLS-1$
30
31         public PHPLineBreakpoint() {
32         }
33
34         public PHPLineBreakpoint(IResource resource, int lineNumber, int charStart, int charEnd, int hitCount, boolean add, Map attributes) throws DebugException {
35                 this(resource, lineNumber, charStart, charEnd, hitCount, add, attributes, PHP_LINE_BREAKPOINT);
36         }
37         
38         public PHPLineBreakpoint(IResource resource, int lineNumber, int hitCount, boolean add, Map attributes) throws DebugException {
39                 this(resource, lineNumber, -1, -1, hitCount, add, attributes, PHP_LINE_BREAKPOINT);
40         }
41         
42
43         protected PHPLineBreakpoint(final IResource resource, final int lineNumber, final int charStart, final int charEnd, final int hitCount, final boolean add, final Map attributes, final String markerType) throws DebugException {
44                 IWorkspaceRunnable wr= new IWorkspaceRunnable() {
45                         public void run(IProgressMonitor monitor) throws CoreException {
46         
47                                 // create the marker
48                                 setMarker(resource.createMarker(markerType));
49
50                                 // add attributes
51                                 addLineBreakpointAttributes(attributes, getModelIdentifier(), true, lineNumber, charStart, charEnd);
52
53                                 // set attributes
54                                 ensureMarker().setAttributes(attributes);
55                                 
56                                 // add to breakpoint manager if requested
57                                 register(add);          
58                         }
59                 };
60                 run(wr);
61         }
62         
63
64         public void addLineBreakpointAttributes(Map attributes, String modelIdentifier, boolean enabled, int lineNumber, int charStart, int charEnd) {
65                 attributes.put(IBreakpoint.ID, modelIdentifier);
66                 attributes.put(IBreakpoint.ENABLED, new Boolean(enabled));
67                 attributes.put(IMarker.LINE_NUMBER, new Integer(lineNumber));
68                 if (charStart!=-1)
69                 {
70                         attributes.put(IMarker.CHAR_START, new Integer(charStart));
71                         attributes.put(IMarker.CHAR_END, new Integer(charEnd));
72                 }
73                 attributes.put(TYPE_NAME, "typeName"); 
74         }               
75
76         /**
77          * @see ILineBreakpoint#getLineNumber()
78          */
79         public int getLineNumber() throws CoreException {
80                 return ensureMarker().getAttribute(IMarker.LINE_NUMBER, -1);
81         }
82
83         /**
84          * @see ILineBreakpoint#getCharStart()
85          */
86         public int getCharStart() throws CoreException {
87                 return ensureMarker().getAttribute(IMarker.CHAR_START, -1);
88         }
89
90         /**
91          * @see ILineBreakpoint#getCharEnd()
92          */
93         public int getCharEnd() throws CoreException {
94                 return ensureMarker().getAttribute(IMarker.CHAR_END, -1);
95         }
96         
97         /**
98          * Returns the type of marker associated with Java line breakpoints
99          */
100         public static String getMarkerType() {
101                 return PHP_LINE_BREAKPOINT;
102         }       
103 }