KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > mountainminds > eclemma > internal > ui > dialogs > CoveragePropertyPage


1 /*******************************************************************************
2  * Copyright (c) 2006, 2007 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: CoveragePropertyPage.java 372 2007-07-18 18:41:10Z mtnminds $
7  ******************************************************************************/

8 package com.mountainminds.eclemma.internal.ui.dialogs;
9
10 import java.text.DecimalFormat JavaDoc;
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 /**
39  * Property page for coverage details of a Java element.
40  *
41  * @author Marc R. Hoffmann
42  * @version $Revision: 372 $
43  */

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 JavaDoc COVERAGE_VALUE = new DecimalFormat JavaDoc(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 JavaDoc 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 JavaDoc parentElement, Object JavaDoc 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 JavaDoc 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 JavaDoc label;
128     public final ICounter counter;
129     public Line(String JavaDoc 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 JavaDoc 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 JavaDoc getColumnText(Object JavaDoc 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 ""; //$NON-NLS-1$
154
}
155     }
156     
157   }
158
159 }
160
Popular Tags