1 6 package de.uka.ipd.coverage.plugin.ui; 7 8 import java.util.ArrayList ; 9 import java.util.Iterator ; 10 import java.util.List ; 11 12 import org.eclipse.core.resources.IMarker; 13 import org.eclipse.core.resources.IWorkspace; 14 import org.eclipse.core.resources.IWorkspaceRunnable; 15 import org.eclipse.core.runtime.CoreException; 16 import org.eclipse.core.runtime.IProgressMonitor; 17 18 import de.uka.ipd.coverage.utils.Logger; 19 20 24 public class CoverageMarkerManager { 25 26 private static final Boolean FALSE = new Boolean (false); 27 private static final Boolean TRUE = new Boolean (true); 28 public static final String TYPE_COVERAGEMARKER = "de.uka.ipd.coverage.coveragemarker"; public static final String TYPE_USESMARKER = "de.uka.ipd.coverage.coveragemarker.uses"; 31 public static final String ATT_COVERAGE = "coverage"; public static final String ATT_METHOD = "method"; public static final String ATT_COVERED_USES = "covered_uses"; public static final String ATT_UNCOVERED_USES = "uncovered_uses"; public static final String ATT_VISIBLE = "visible"; public static final String ATT_DEFINITION = "definition"; 38 public static final int VIEW_STATE_PRIMARY_MARKERS_ENABLED = 0; 39 public static final int VIEW_STATE_PRIMARY_MARKERS_DISABLED = 10; 40 41 private Logger logger = new Logger(this); 42 private List primaryMarkerList = new ArrayList (); 43 private List secondaryMarkerList = new ArrayList (); 44 private List listenerList = new ArrayList (); 45 private IMarker markerNotDisabled; 46 private int viewState = VIEW_STATE_PRIMARY_MARKERS_ENABLED; 47 48 public void addPrimaryMarker(IMarker marker, boolean notifyListeners) { 49 primaryMarkerList.add(marker); 50 if (notifyListeners) { 51 notifyListenersAdd(marker); 52 } 53 } 54 55 62 public void addSecondaryMarker(IMarker marker, boolean notifyListeners) { 63 secondaryMarkerList.add(marker); 64 if (notifyListeners) { 65 notifyListenersAdd(marker); 66 } 67 } 68 69 private void notifyListenersAdd(IMarker marker) { 70 for (Iterator iter = listenerList.iterator(); iter.hasNext();) { 71 MarkerListener element = (MarkerListener) iter.next(); 72 element.markersAdded(new IMarker[] {marker}); 73 } 74 } 75 76 public IMarker[] getPrimaryMarkers() { 77 return (IMarker[]) primaryMarkerList.toArray(new IMarker[primaryMarkerList.size()]); 78 } 79 80 public IMarker[] getSecondaryMarkers() { 81 return (IMarker[]) secondaryMarkerList.toArray(new IMarker[primaryMarkerList.size()]); 82 } 83 84 public void deletePrimaryMarkers() { 85 deleteMarkers(primaryMarkerList); 86 } 87 88 private void deleteMarkers(List markerList) { 89 try { 90 for (Iterator iter = markerList.iterator(); iter.hasNext();) { 91 IMarker marker = (IMarker) iter.next(); 92 marker.delete(); 93 assert (! marker.exists()) : " deleted marker still exists!"; } 95 markerList.clear(); 96 } catch (CoreException e) { 97 e.printStackTrace(); 98 logger.log(e); 99 } 100 notifyListeners(); 101 } 102 103 public void deleteSecondaryMarkers() { 104 deleteMarkers(secondaryMarkerList); 105 } 106 107 public void notifyListeners() { 108 for (Iterator iter = listenerList.iterator(); iter.hasNext();) { 109 MarkerListener element = (MarkerListener) iter.next(); 110 element.markersChanged(this); 111 } 112 } 113 114 public void addMarkerListener(MarkerListener listener) { 115 if (!this.listenerList.contains(listener)) 116 this.listenerList.add(listener); 117 } 118 119 public void removeMarkerListener(MarkerListener listener) { 120 this.listenerList.remove(listener); 121 } 122 123 126 public void disablePrimaryMarkersExcept(final IMarker marker) { 127 this.viewState = VIEW_STATE_PRIMARY_MARKERS_DISABLED; 128 setMarkerNotDisabled(marker); 129 IWorkspaceRunnable r = new IWorkspaceRunnable() { 130 public void run(IProgressMonitor monitor) { 131 try { 132 for (Iterator iter = primaryMarkerList.iterator(); iter.hasNext();) { 133 IMarker element = (IMarker) iter.next(); 134 if (element.equals(marker)) { 135 element.setAttribute(CoverageMarkerManager.ATT_VISIBLE, TRUE); 136 } else { 137 element.setAttribute(CoverageMarkerManager.ATT_VISIBLE, FALSE); 138 } 139 } 140 } catch (CoreException e) { 141 e.printStackTrace(); 142 logger.log(e); 143 } 144 } 145 }; 146 try { 147 marker.getResource().getWorkspace().run(r, null,IWorkspace.AVOID_UPDATE, null); 148 } catch (CoreException e) { 149 e.printStackTrace(); 150 logger.log(e); 151 } 152 notifyListeners(); 153 } 154 155 public void enablePrimaryMarkers() { 156 this.viewState = VIEW_STATE_PRIMARY_MARKERS_ENABLED; 157 setMarkerNotDisabled(null); 158 deleteSecondaryMarkers(); 159 IWorkspaceRunnable r = new IWorkspaceRunnable() { 161 public void run(IProgressMonitor monitor) { 162 try { 163 for (Iterator iter = primaryMarkerList.iterator(); iter.hasNext();) { 164 IMarker element = (IMarker) iter.next(); 165 element.setAttribute(CoverageMarkerManager.ATT_VISIBLE, TRUE); 166 } 167 } catch (CoreException e) { 168 e.printStackTrace(); 169 logger.log(e); 170 } 171 } 172 }; 173 List resources = new ArrayList (); 174 try { 175 for (Iterator iter = primaryMarkerList.iterator(); iter.hasNext();) { 176 IMarker element = (IMarker) iter.next(); 177 if (!resources.contains(element.getResource())) { 178 element.getResource().getWorkspace().run(r, null,IWorkspace.AVOID_UPDATE, null); 179 resources.add(element.getResource()); 180 } 181 } 182 } catch (CoreException e) { 183 e.printStackTrace(); 184 logger.log(e); 185 } 186 notifyListeners(); 187 } 188 189 192 private void setMarkerNotDisabled(IMarker marker) { 193 this.markerNotDisabled = marker; 194 } 195 196 200 public IMarker getMarkerNotDisabled() { 201 return markerNotDisabled; 202 } 203 204 public int getViewState() { 205 return viewState; 206 } 207 } 208 | Popular Tags |