1 /*******************************************************************************
2  * Copyright (c) 2000, 2008 IBM Corporation and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     IBM Corporation - initial API and implementation
13  *******************************************************************************/
14 package org.eclipse.jsp.launching;
15 
16 import org.eclipse.jdt.debug.core.IJavaStratumLineBreakpoint;
17 import org.eclipse.jdt.debug.core.JDIDebugModel;
18 
19 import org.eclipse.core.runtime.CoreException;
20 
21 import org.eclipse.core.resources.IFile;
22 import org.eclipse.core.resources.IResource;
23 
24 import org.eclipse.jface.action.Action;
25 
26 import org.eclipse.jface.text.source.IVerticalRulerInfo;
27 
28 import org.eclipse.ui.IEditorInput;
29 
30 import org.eclipse.ui.texteditor.ITextEditor;
31 
32 import org.eclipse.debug.core.DebugPlugin;
33 import org.eclipse.debug.core.IBreakpointManager;
34 import org.eclipse.debug.core.model.IBreakpoint;
35 
36 /**
37  * ToggleJspBreakpointAction
38  */
39 public class ToggleJspBreakpointAction extends Action {
40 
41 	private ITextEditor fEditor;
42 	private IVerticalRulerInfo fRulerInfo;
43 
44 	@Override
run()45 	public void run() {
46 		IBreakpointManager manager = DebugPlugin.getDefault().getBreakpointManager();
47 		IResource resource = getResource();
48 		int lineNumber = fRulerInfo.getLineOfLastMouseButtonActivity() + 1;
49 		for (IBreakpoint bp : manager.getBreakpoints()) {
50 			if (bp instanceof IJavaStratumLineBreakpoint) {
51 				IJavaStratumLineBreakpoint breakpoint = (IJavaStratumLineBreakpoint)bp;
52 				if (breakpoint.getMarker().getResource().equals(resource)) {
53 					try {
54 						if (breakpoint.getLineNumber() == lineNumber) {
55 							// remove
56 							breakpoint.delete();
57 							return;
58 						}
59 					} catch (CoreException e) {
60 						e.printStackTrace();
61 					}
62 				}
63 			}
64 		}
65 		createBreakpoint();
66 	}
67 
createBreakpoint()68 	protected void createBreakpoint() {
69 		IResource resource = getResource();
70 		int lineNumber = fRulerInfo.getLineOfLastMouseButtonActivity() + 1;
71 		try {
72 			JDIDebugModel.createStratumBreakpoint(resource, null, resource.getName(), null, null, lineNumber, -1, -1, 0, true, null); //
73 		} catch (CoreException e) {
74 			e.printStackTrace();
75 		}
76 	}
77 
ToggleJspBreakpointAction(ITextEditor editor, IVerticalRulerInfo rulerInfo)78 	public ToggleJspBreakpointAction(ITextEditor editor, IVerticalRulerInfo rulerInfo) {
79 		super(LaunchingMessages.ToggleJspBreakpointAction_2);
80 		fEditor = editor;
81 		fRulerInfo = rulerInfo;
82 	}
83 
getResource()84 	protected IResource getResource() {
85 		IEditorInput input= fEditor.getEditorInput();
86 		IResource resource= input.getAdapter(IFile.class);
87 		if (resource == null) {
88 			resource= input.getAdapter(IResource.class);
89 		}
90 		return resource;
91 	}
92 }
93