KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > mountainminds > eclemma > internal > ui > decorators > CoverageDecorator


1 /*******************************************************************************
2  * Copyright (c) 2006 Mountainminds GmbH & Co. KG
3  * This software is provided under the terms of the Eclipse Public License v1.0
4  * See http://www.eclipse.org/legal/epl-v10.html.
5  *
6  * $Id: CoverageDecorator.java 394 2007-08-28 13:08:46Z mtnminds $
7  *
8  * Contributors:
9  * Benjamin Muskalla - coverage decorators (SF #1659429)
10  ******************************************************************************/

11 package com.mountainminds.eclemma.internal.ui.decorators;
12
13 import java.text.DecimalFormat JavaDoc;
14 import java.text.Format JavaDoc;
15 import java.util.ArrayList JavaDoc;
16 import java.util.Iterator JavaDoc;
17 import java.util.List JavaDoc;
18
19 import org.eclipse.jface.resource.ImageDescriptor;
20 import org.eclipse.jface.viewers.IDecoration;
21 import org.eclipse.jface.viewers.ILabelProviderListener;
22 import org.eclipse.jface.viewers.ILightweightLabelDecorator;
23 import org.eclipse.jface.viewers.LabelProviderChangedEvent;
24 import org.eclipse.ui.IWorkbench;
25
26 import com.mountainminds.eclemma.core.CoverageTools;
27 import com.mountainminds.eclemma.core.analysis.ICounter;
28 import com.mountainminds.eclemma.core.analysis.IJavaCoverageListener;
29 import com.mountainminds.eclemma.core.analysis.IJavaElementCoverage;
30 import com.mountainminds.eclemma.internal.ui.EclEmmaUIPlugin;
31 import com.mountainminds.eclemma.internal.ui.UIMessages;
32
33 /**
34  * Decorator to show code coverage for Java elements.
35  *
36  * @author Benjamin Muskalla, Marc R. Hoffmann
37  * @version $Revision: 394 $
38  */

39 public class CoverageDecorator implements ILightweightLabelDecorator {
40
41   private static final Format JavaDoc SUFFIX_FORMAT =
42     new DecimalFormat JavaDoc(UIMessages.CoverageDecoratorSuffix_label);
43   
44   private List JavaDoc listeners = new ArrayList JavaDoc();
45   private IJavaCoverageListener coverageListener = null;
46   
47   public CoverageDecorator() {
48     super();
49   }
50
51   public void decorate(Object JavaDoc element, IDecoration decoration) {
52     IJavaElementCoverage coverage = CoverageTools.getCoverageInfo(element);
53     if (coverage == null) {
54       // no coverage data
55
return;
56     }
57     // TODO obtain counter from preferences
58
ICounter counter = coverage.getInstructionCounter();
59     ImageDescriptor overlay = EclEmmaUIPlugin.getCoverageOverlay(counter.getRatio());
60     decoration.addOverlay(overlay, IDecoration.TOP_LEFT);
61     decoration.addSuffix(SUFFIX_FORMAT.format(new Double JavaDoc(counter.getRatio())));
62   }
63
64   protected void fireEvent() {
65     final IWorkbench workbench = EclEmmaUIPlugin.getInstance().getWorkbench();
66     if(workbench == null) return;
67     final LabelProviderChangedEvent event = new LabelProviderChangedEvent(this);
68     workbench.getDisplay().asyncExec(new Runnable JavaDoc() {
69       public void run() {
70         Iterator JavaDoc i = listeners.iterator();
71         while (i.hasNext()) {
72           ((ILabelProviderListener) i.next()).labelProviderChanged(event);
73         }
74       }
75     });
76   }
77   
78   public void addListener(ILabelProviderListener listener) {
79     if (!listeners.contains(listener)) {
80       listeners.add(listener);
81     }
82     if (coverageListener == null) {
83       coverageListener = new IJavaCoverageListener() {
84         public void coverageChanged() {
85           fireEvent();
86         }
87       };
88       CoverageTools.addJavaCoverageListener(coverageListener);
89     }
90   }
91   
92   public void removeListener(ILabelProviderListener listener) {
93     listeners.remove(listener);
94   }
95
96   public boolean isLabelProperty(Object JavaDoc element, String JavaDoc property) {
97     // coverage does not depend on IJavaElement properties
98
return false;
99   }
100   
101   public void dispose() {
102     if (coverageListener != null) {
103       CoverageTools.removeJavaCoverageListener(coverageListener);
104       coverageListener = null;
105     }
106   }
107   
108 }
109
Popular Tags