1 package de.uka.ipd.coverage.plugin.ui; 2 3 13 14 15 import java.util.HashMap ; 16 import java.util.Map ; 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 40 public class ActionOpenMarker extends SelectionProviderAction { 41 42 private Logger logger = new Logger(this); 43 46 private final static Boolean TRUE = new Boolean (true); 47 48 protected IWorkbenchPart part; 49 50 public ActionOpenMarker(IWorkbenchPart part, ISelectionProvider provider) { 51 super(provider, null); this.part = part; 53 setEnabled(false); 56 } 57 58 public void run() { 59 IStructuredSelection selection = getStructuredSelection(); 60 if (selection == null || selection.size() != 1) { 61 return; 62 } 63 Object obj = selection.getFirstElement(); 64 if (!(obj instanceof IMarker)) { 65 return; 66 } 67 68 IMarker marker = (IMarker) obj; 69 IEditorPart editor = part.getSite().getPage().getActiveEditor(); 72 if (editor != null) { 73 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 MessageDialog.openError( 90 part.getSite().getShell(), 91 getClass().getName() + ": parameter not implemented", 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 ) marker.getAttribute(CoverageMarkerManager.ATT_COVERED_USES), 105 CoverageState.FULL_COVERAGE, 106 Messages.getString("ActionOpenMarker.0")); parseStringAndCreateMarkers(marker, 108 (String ) marker.getAttribute(CoverageMarkerManager.ATT_UNCOVERED_USES), 109 CoverageState.NO_COVERAGE, 110 Messages.getString("ActionOpenMarker.1")); } 112 } catch (CoreException e) { 113 logger.log(e); 114 e.printStackTrace(); 115 } 116 } 117 118 121 private void parseStringAndCreateMarkers(IMarker marker, 122 String stringToParse, 123 CoverageState state, 124 String reason) { 125 if (!"".equals(stringToParse) && stringToParse != null) { String [] coveredLines = stringToParse.split(" "); for (int i = 0; i < coveredLines.length; i++) { 128 if (!coveredLines[i].equals("")) { createMarkerFor(marker.getResource(), 130 Integer.valueOf(coveredLines[i]), 131 state, 132 reason); 133 } 134 } 135 } 136 } 137 138 143 private void createMarkerFor(final IResource resource, 144 final Integer line, 145 final CoverageState state, 146 final String reason) { 147 final Map atts = new HashMap (); 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 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 |