KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > uka > ipd > coverage > plugin > ui > ActionOpenMarker


1 package de.uka.ipd.coverage.plugin.ui;
2
3 /*******************************************************************************
4  * Copyright (c) 2000, 2004 IBM Corporation and others.
5  * All rights reserved. This program and the accompanying materials
6  * are made available under the terms of the Common Public License v1.0
7  * which accompanies this distribution, and is available at
8  * http://www.eclipse.org/legal/cpl-v10.html
9  *
10  * Contributors:
11  * IBM Corporation - initial API and implementation
12  *******************************************************************************/

13
14
15 import java.util.HashMap JavaDoc;
16 import java.util.Map JavaDoc;
17
18 import org.eclipse.core.resources.*;
19 import org.eclipse.core.runtime.CoreException;
20 import org.eclipse.core.runtime.IProgressMonitor;
21 import org.eclipse.jface.dialogs.MessageDialog;
22 import org.eclipse.jface.util.OpenStrategy;
23 import org.eclipse.jface.viewers.ISelectionProvider;
24 import org.eclipse.jface.viewers.IStructuredSelection;
25 import org.eclipse.ui.*;
26 import org.eclipse.ui.actions.SelectionProviderAction;
27 import org.eclipse.ui.ide.IDE;
28
29 import de.uka.ipd.coverage.plugin.CoveragePlugin;
30 import de.uka.ipd.coverage.recording.CoverageState;
31 import de.uka.ipd.coverage.utils.Logger;
32
33 /**
34  * Action to open an editor on the selected marker.
35  * 04-22-2005 changed by Matthias Kempka: If the selected marker is of type
36  * de.uka.ipd.coverage.coveragemarker and has values in the attributes "covered_uses" or
37  * "uncovered_uses", a set of de.uka.ipd.coverage.coveragemarker.uses is
38  * created and shown according to those attributes.
39  */

40 public class ActionOpenMarker extends SelectionProviderAction {
41     
42     private Logger logger = new Logger(this);
43 // private final String IMAGE_PATH = "elcl16/gotoobj_tsk.gif"; //$NON-NLS-1$
44
// private final String DISABLED_IMAGE_PATH = "dlcl16/gotoobj_tsk.gif"; //$NON-NLS-1$
45

46     private final static Boolean JavaDoc TRUE = new Boolean JavaDoc(true);
47
48     protected IWorkbenchPart part;
49
50     public ActionOpenMarker(IWorkbenchPart part, ISelectionProvider provider) {
51         super(provider, null); //$NON-NLS-1$
52
this.part = part;
53 // setImageDescriptor(ImageFactory.getImageDescriptor(IMAGE_PATH));
54
// setDisabledImageDescriptor(ImageFactory.getImageDescriptor(DISABLED_IMAGE_PATH));
55
setEnabled(false);
56     }
57     
58     public void run() {
59         IStructuredSelection selection = getStructuredSelection();
60         if (selection == null || selection.size() != 1) {
61             return;
62         }
63         Object JavaDoc obj = selection.getFirstElement();
64         if (!(obj instanceof IMarker)) {
65             return;
66         }
67         
68         IMarker marker = (IMarker) obj;
69         //optimization: if the active editor has the same input as the selected marker then
70
//RevealMarkerAction would have been run and we only need to activate the editor
71
IEditorPart editor = part.getSite().getPage().getActiveEditor();
72         if (editor != null) {
73 // logger.info("using already open editor");
74
IEditorInput input = editor.getEditorInput();
75             if (input instanceof IFileEditorInput) {
76                 IFile file = ((IFileEditorInput) input).getFile();
77                 if (marker.getResource().equals(file)) {
78                     part.getSite().getPage().activate(editor);
79                 }
80             }
81         }
82         
83         if (marker.getResource() instanceof IFile) {
84             try {
85                 IDE.openEditor(part.getSite().getPage(), marker, OpenStrategy.activateOnOpen());
86             } catch (PartInitException e) {
87                 // Open a regular error dialog since there is no
88
// extra information to display
89
MessageDialog.openError(
90                     part.getSite().getShell(),
91                     getClass().getName() + ": parameter not implemented", //$NON-NLS-1$
92
e.getMessage());
93             }
94         }
95         showUsesMarkers(marker);
96     }
97     
98     private void showUsesMarkers(IMarker marker) {
99         try {
100             if (CoverageMarkerManager.TYPE_COVERAGEMARKER.equals(marker.getType())) {
101                 CoveragePlugin.getDefault().getMarkerManager().deleteSecondaryMarkers();
102                 CoveragePlugin.getDefault().getMarkerManager().disablePrimaryMarkersExcept(marker);
103                 parseStringAndCreateMarkers(marker,
104                     (String JavaDoc) marker.getAttribute(CoverageMarkerManager.ATT_COVERED_USES),
105                     CoverageState.FULL_COVERAGE,
106                     Messages.getString("ActionOpenMarker.0")); //$NON-NLS-1$
107
parseStringAndCreateMarkers(marker,
108                     (String JavaDoc) marker.getAttribute(CoverageMarkerManager.ATT_UNCOVERED_USES),
109                     CoverageState.NO_COVERAGE,
110                     Messages.getString("ActionOpenMarker.1")); //$NON-NLS-1$
111
}
112         } catch (CoreException e) {
113             logger.log(e);
114             e.printStackTrace();
115         }
116     }
117
118     /**
119      * @param marker
120      */

121     private void parseStringAndCreateMarkers(IMarker marker,
122             String JavaDoc stringToParse,
123             CoverageState state,
124             String JavaDoc reason) {
125         if (!"".equals(stringToParse) && stringToParse != null) { //$NON-NLS-1$
126
String JavaDoc[] coveredLines = stringToParse.split(" "); //$NON-NLS-1$
127
for (int i = 0; i < coveredLines.length; i++) {
128                 if (!coveredLines[i].equals("")) { //$NON-NLS-1$
129
createMarkerFor(marker.getResource(),
130                         Integer.valueOf(coveredLines[i]),
131                         state,
132                         reason);
133                 }
134             }
135         }
136     }
137
138     /**
139      * @param resource
140      * @param line
141      * @param state
142      */

143     private void createMarkerFor(final IResource resource,
144             final Integer JavaDoc line,
145             final CoverageState state,
146             final String JavaDoc reason) {
147         final Map JavaDoc atts = new HashMap JavaDoc();
148         atts.put(IMarker.LINE_NUMBER, line);
149         atts.put(IMarker.MESSAGE, reason);
150         atts.put(IMarker.TRANSIENT, TRUE);
151         atts.put(CoverageMarkerManager.ATT_COVERAGE, state.toString());
152
153         IWorkspaceRunnable r= new IWorkspaceRunnable() {
154             public void run(IProgressMonitor monitor) throws CoreException {
155                 String JavaDoc type = CoverageMarkerManager.TYPE_USESMARKER;
156                 IMarker marker= resource.createMarker(type);
157                 marker.setAttributes(atts);
158                 CoveragePlugin.getDefault().getMarkerManager().addSecondaryMarker(marker, true);
159             }
160         };
161         
162         try {
163             resource.getWorkspace().run(r, null,IWorkspace.AVOID_UPDATE, null);
164         } catch (CoreException e) {
165             e.printStackTrace();
166             logger.log(e);
167         }
168     }
169     
170     
171     public void selectionChanged(IStructuredSelection selection) {
172         setEnabled(selection != null && selection.size() == 1);
173     }
174 }
175
Popular Tags