1 8 package com.mountainminds.eclemma.internal.ui.dialogs; 9 10 import java.text.DecimalFormat ; 11 12 import org.eclipse.jface.viewers.ArrayContentProvider; 13 import org.eclipse.jface.viewers.ITableLabelProvider; 14 import org.eclipse.jface.viewers.LabelProvider; 15 import org.eclipse.jface.viewers.TableViewer; 16 import org.eclipse.jface.viewers.Viewer; 17 import org.eclipse.jface.viewers.ViewerFilter; 18 import org.eclipse.swt.SWT; 19 import org.eclipse.swt.graphics.Image; 20 import org.eclipse.swt.layout.GridData; 21 import org.eclipse.swt.layout.GridLayout; 22 import org.eclipse.swt.widgets.Composite; 23 import org.eclipse.swt.widgets.Control; 24 import org.eclipse.swt.widgets.Label; 25 import org.eclipse.swt.widgets.Table; 26 import org.eclipse.swt.widgets.TableColumn; 27 import org.eclipse.swt.widgets.Text; 28 import org.eclipse.ui.dialogs.PropertyPage; 29 30 import com.mountainminds.eclemma.core.CoverageTools; 31 import com.mountainminds.eclemma.core.ICoverageSession; 32 import com.mountainminds.eclemma.core.analysis.ICounter; 33 import com.mountainminds.eclemma.core.analysis.IJavaElementCoverage; 34 import com.mountainminds.eclemma.internal.ui.ContextHelp; 35 import com.mountainminds.eclemma.internal.ui.EclEmmaUIPlugin; 36 import com.mountainminds.eclemma.internal.ui.UIMessages; 37 38 44 public class CoveragePropertyPage extends PropertyPage { 45 46 private static final int COLUMN_COUNTER = 0; 47 private static final int COLUMN_COVERAGE = 1; 48 private static final int COLUMN_COVERED = 2; 49 private static final int COLUMN_TOTAL = 3; 50 51 private static final DecimalFormat COVERAGE_VALUE = new DecimalFormat (UIMessages.CoveragePropertyPageColumnCoverage_value); 52 53 protected Control createContents(Composite parent) { 54 ContextHelp.setHelp(parent, ContextHelp.COVERAGE_PROPERTIES); 55 noDefaultAndApplyButton(); 56 parent = new Composite(parent, SWT.NONE); 57 GridLayout layout = new GridLayout(); 58 layout.numColumns = 2; 59 layout.marginWidth = 0; 60 layout.marginHeight = 0; 61 parent.setLayout(layout); 62 63 Label l1 = new Label(parent, SWT.NONE); 64 l1.setText(UIMessages.CoveragePropertyPageSession_label); 65 l1.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false)); 66 67 Text t1 = new Text(parent, SWT.READ_ONLY | SWT.WRAP); 68 t1.setText(getSessionDescription()); 69 t1.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false)); 70 71 Control table = createTable(parent); 72 GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); 73 gd.horizontalSpan = 2; 74 table.setLayoutData(gd); 75 76 return parent; 77 } 78 79 private String getSessionDescription() { 80 ICoverageSession session = CoverageTools.getSessionManager().getActiveSession(); 81 return session == null ? UIMessages.CoveragePropertyPageNoSession_value : session.getDescription(); 82 } 83 84 private Control createTable(Composite parent) { 85 Table table = new Table(parent, SWT.BORDER); 86 initializeDialogUnits(table); 87 table.setHeaderVisible(true); 88 table.setLinesVisible(true); 89 createColumn(table, SWT.LEFT, 24, UIMessages.CoveragePropertyPageColumnCounter_label); 90 createColumn(table, SWT.RIGHT, 16, UIMessages.CoveragePropertyPageColumnCoverage_label); 91 createColumn(table, SWT.RIGHT, 16, UIMessages.CoveragePropertyPageColumnCovered_label); 92 createColumn(table, SWT.RIGHT, 16, UIMessages.CoveragePropertyPageColumnTotal_label); 93 TableViewer viewer = new TableViewer(table); 94 viewer.setContentProvider(new ArrayContentProvider()); 95 viewer.addFilter(new ViewerFilter() { 96 public boolean select(Viewer viewer, Object parentElement, Object element) { 97 return ((Line) element).counter.getTotalCount() != 0; 98 } 99 }); 100 viewer.setInput(getLines()); 101 viewer.setLabelProvider(new CounterLabelProvider()); 102 return table; 103 } 104 105 private void createColumn(Table table, int align, int width, String caption) { 106 TableColumn column = new TableColumn(table, align); 107 column.setText(caption); 108 column.setWidth(convertWidthInCharsToPixels(width)); 109 } 110 111 private Line[] getLines() { 112 IJavaElementCoverage c = CoverageTools.getCoverageInfo(getElement()); 113 if (c == null) { 114 return new Line[0]; 115 } else { 116 return new Line[] { 117 new Line(UIMessages.CoveragePropertyPageInstructions_label, c.getInstructionCounter()), 118 new Line(UIMessages.CoveragePropertyPageBlocks_label, c.getBlockCounter()), 119 new Line(UIMessages.CoveragePropertyPageLines_label, c.getLineCounter()), 120 new Line(UIMessages.CoveragePropertyPageMethods_label, c.getMethodCounter()), 121 new Line(UIMessages.CoveragePropertyPageTypes_label, c.getTypeCounter()) 122 }; 123 } 124 } 125 126 private static class Line { 127 public final String label; 128 public final ICounter counter; 129 public Line(String label, ICounter counter) { 130 this.label = label; 131 this.counter = counter; 132 } 133 } 134 135 private static class CounterLabelProvider extends LabelProvider implements ITableLabelProvider { 136 137 public Image getColumnImage(Object element, int columnIndex) { 138 if (columnIndex == COLUMN_COUNTER) { 139 Line l = (Line) element; 140 return EclEmmaUIPlugin.getCoverageImage(l.counter.getRatio()); 141 } else { 142 return null; 143 } 144 } 145 146 public String getColumnText(Object element, int columnIndex) { 147 Line l = (Line) element; 148 switch (columnIndex) { 149 case COLUMN_COUNTER: return l.label; 150 case COLUMN_COVERAGE: return COVERAGE_VALUE.format(l.counter.getRatio()); 151 case COLUMN_COVERED: return String.valueOf(l.counter.getCoveredCount()); 152 case COLUMN_TOTAL: return String.valueOf(l.counter.getTotalCount()); 153 default: return ""; } 155 } 156 157 } 158 159 } 160 | Popular Tags |