KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2  * Created on Apr 18, 2005
3  *
4  * written by Matthias Kempka
5  */

6 package de.uka.ipd.coverage.plugin.ui;
7
8 import java.util.ArrayList JavaDoc;
9 import java.util.Iterator JavaDoc;
10 import java.util.List JavaDoc;
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 /**
21  * Created on Apr 18, 2005
22  * @author Matthias Kempka
23  */

24 public class CoverageMarkerManager {
25      
26     private static final Boolean JavaDoc FALSE = new Boolean JavaDoc(false);
27     private static final Boolean JavaDoc TRUE = new Boolean JavaDoc(true);
28     public static final String JavaDoc TYPE_COVERAGEMARKER = "de.uka.ipd.coverage.coveragemarker"; //$NON-NLS-1$
29
public static final String JavaDoc TYPE_USESMARKER = "de.uka.ipd.coverage.coveragemarker.uses"; //$NON-NLS-1$
30

31     public static final String JavaDoc ATT_COVERAGE = "coverage"; //$NON-NLS-1$
32
public static final String JavaDoc ATT_METHOD = "method"; //$NON-NLS-1$
33
public static final String JavaDoc ATT_COVERED_USES = "covered_uses"; //$NON-NLS-1$
34
public static final String JavaDoc ATT_UNCOVERED_USES = "uncovered_uses"; //$NON-NLS-1$
35
public static final String JavaDoc ATT_VISIBLE = "visible"; //$NON-NLS-1$
36
public static final String JavaDoc ATT_DEFINITION = "definition"; //$NON-NLS-1$
37

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 JavaDoc primaryMarkerList = new ArrayList JavaDoc();
43     private List JavaDoc secondaryMarkerList = new ArrayList JavaDoc();
44     private List JavaDoc listenerList = new ArrayList JavaDoc();
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     /**
56      * secondary markers are intended to show additionaly places a
57      * primary marker points to. All-Uses uses secondary markers to
58      * show the coverage of
59      * uses to a definition (which the primary markers mark).
60      * @param marker
61      */

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 JavaDoc 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 JavaDoc markerList) {
89         try {
90             for (Iterator JavaDoc iter = markerList.iterator(); iter.hasNext();) {
91                 IMarker marker = (IMarker) iter.next();
92                 marker.delete();
93                 assert (! marker.exists()) : " deleted marker still exists!"; //$NON-NLS-1$
94
}
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 JavaDoc 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     /**
124      * @param marker
125      */

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 JavaDoc 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         //TODO: this can be speed optimized quite strongly
160
IWorkspaceRunnable r = new IWorkspaceRunnable() {
161             public void run(IProgressMonitor monitor) {
162                 try {
163                     for (Iterator JavaDoc 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 JavaDoc resources = new ArrayList JavaDoc();
174         try {
175             for (Iterator JavaDoc 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     /**
190      * @param marker
191      */

192     private void setMarkerNotDisabled(IMarker marker) {
193         this.markerNotDisabled = marker;
194     }
195
196     /**
197      * @return returns the marker that is not disabled if the state is
198      * VIEW_STATE_PRIMARY_MARKERS_DISABLED, null otherwise
199      */

200     public IMarker getMarkerNotDisabled() {
201         return markerNotDisabled;
202     }
203     
204     public int getViewState() {
205         return viewState;
206     }
207 }
208
Popular Tags