1 11 package com.mountainminds.eclemma.internal.ui.decorators; 12 13 import java.text.DecimalFormat ; 14 import java.text.Format ; 15 import java.util.ArrayList ; 16 import java.util.Iterator ; 17 import java.util.List ; 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 39 public class CoverageDecorator implements ILightweightLabelDecorator { 40 41 private static final Format SUFFIX_FORMAT = 42 new DecimalFormat (UIMessages.CoverageDecoratorSuffix_label); 43 44 private List listeners = new ArrayList (); 45 private IJavaCoverageListener coverageListener = null; 46 47 public CoverageDecorator() { 48 super(); 49 } 50 51 public void decorate(Object element, IDecoration decoration) { 52 IJavaElementCoverage coverage = CoverageTools.getCoverageInfo(element); 53 if (coverage == null) { 54 return; 56 } 57 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 (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 () { 69 public void run() { 70 Iterator 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 element, String property) { 97 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 |