KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > mountainminds > eclemma > ui > launching > CoverageTab


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: CoverageTab.java 384 2007-08-15 20:22:58Z mtnminds $
7  ******************************************************************************/

8 package com.mountainminds.eclemma.ui.launching;
9
10 import java.util.ArrayList JavaDoc;
11 import java.util.List JavaDoc;
12
13 import org.eclipse.core.runtime.CoreException;
14 import org.eclipse.debug.core.ILaunchConfiguration;
15 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
16 import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
17 import org.eclipse.jface.viewers.ISelectionChangedListener;
18 import org.eclipse.jface.viewers.SelectionChangedEvent;
19 import org.eclipse.swt.SWT;
20 import org.eclipse.swt.events.SelectionAdapter;
21 import org.eclipse.swt.events.SelectionEvent;
22 import org.eclipse.swt.graphics.Image;
23 import org.eclipse.swt.layout.GridData;
24 import org.eclipse.swt.layout.GridLayout;
25 import org.eclipse.swt.widgets.Button;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.swt.widgets.Group;
28
29 import com.mountainminds.eclemma.core.CoverageTools;
30 import com.mountainminds.eclemma.core.IClassFiles;
31 import com.mountainminds.eclemma.core.launching.ICoverageLaunchConfigurationConstants;
32 import com.mountainminds.eclemma.internal.ui.ContextHelp;
33 import com.mountainminds.eclemma.internal.ui.EclEmmaUIPlugin;
34 import com.mountainminds.eclemma.internal.ui.UIMessages;
35 import com.mountainminds.eclemma.internal.ui.viewers.ClassesViewer;
36
37 /**
38  * The "Coverage" tab of the launch configuration dialog.
39  *
40  * @author Marc R. Hoffmann
41  * @version $Revision: 384 $
42  */

43 public class CoverageTab extends AbstractLaunchConfigurationTab {
44
45   private final boolean inplaceonly;
46   private ClassesViewer classesviewer;
47   private Button buttonInplaceInstrumentation;
48
49   public CoverageTab(boolean inplaceonly) {
50     this.inplaceonly = inplaceonly;
51   }
52
53   public void createControl(Composite parent) {
54     parent = new Composite(parent, SWT.NONE);
55     ContextHelp.setHelp(parent, ContextHelp.COVERAGE_LAUNCH_TAB);
56     GridLayout layout = new GridLayout();
57     layout.verticalSpacing = 0;
58     parent.setLayout(layout);
59     setControl(parent);
60     createInstrumentedClasses(parent);
61   }
62
63   private void createInstrumentedClasses(Composite parent) {
64     Group group = new Group(parent, SWT.NONE);
65     group.setLayoutData(new GridData(GridData.FILL_BOTH));
66     group.setText(UIMessages.CoverageTabInstrumentedClassesGroup_label);
67     GridLayout layout = new GridLayout();
68     layout.numColumns = 3;
69     group.setLayout(layout);
70     classesviewer = new ClassesViewer(group, SWT.BORDER);
71     GridData gd = new GridData(GridData.FILL_BOTH);
72     gd.horizontalSpan = 3;
73     classesviewer.getTable().setLayoutData(gd);
74     classesviewer.addSelectionChangedListener(new ISelectionChangedListener() {
75       public void selectionChanged(SelectionChangedEvent event) {
76         setDirty(true);
77         updateErrorStatus();
78         updateLaunchConfigurationDialog();
79       }
80     });
81     
82     buttonInplaceInstrumentation = new Button(group, SWT.CHECK);
83     buttonInplaceInstrumentation.setText(UIMessages.CoverageTabInplaceInstrumentation_label);
84     buttonInplaceInstrumentation.setEnabled(!inplaceonly);
85     buttonInplaceInstrumentation.addSelectionListener(new SelectionAdapter() {
86       public void widgetSelected(SelectionEvent e) {
87         classesviewer.setIncludeBinaries(!buttonInplaceInstrumentation.getSelection());
88         setDirty(true);
89         updateLaunchConfigurationDialog();
90       }
91     });
92     buttonInplaceInstrumentation.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL));
93     Button buttonSelectAll = createPushButton(group, UIMessages.SelectAllAction_label, null);
94     buttonSelectAll.addSelectionListener(new SelectionAdapter() {
95       public void widgetSelected(SelectionEvent e) {
96         classesviewer.selectAll();
97         setDirty(true);
98         updateLaunchConfigurationDialog();
99       }
100     });
101     Button buttonDeselectAll = createPushButton(group, UIMessages.DeselectAllAction_label, null);
102     buttonDeselectAll.addSelectionListener(new SelectionAdapter() {
103       public void widgetSelected(SelectionEvent e) {
104         classesviewer.deselectAll();
105         setDirty(true);
106         updateLaunchConfigurationDialog();
107       }
108     });
109   }
110
111   public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
112     // nothing to do
113
}
114
115   public void initializeFrom(ILaunchConfiguration configuration) {
116     try {
117       boolean inplace = inplaceonly || configuration.getAttribute(
118           ICoverageLaunchConfigurationConstants.ATTR_INPLACE_INSTRUMENTATION, false);
119       buttonInplaceInstrumentation.setSelection(inplace);
120       classesviewer.setIncludeBinaries(!inplace);
121       classesviewer.setInput(CoverageTools.getClassFiles(configuration, true));
122       classesviewer.setSelectedClasses(
123           CoverageTools.getClassFilesForInstrumentation(configuration, inplace));
124     } catch (CoreException e) {
125       EclEmmaUIPlugin.log(e);
126     }
127     updateErrorStatus();
128   }
129   
130   public void performApply(ILaunchConfigurationWorkingCopy configuration) {
131     configuration.setAttribute(
132         ICoverageLaunchConfigurationConstants.ATTR_INPLACE_INSTRUMENTATION,
133         buttonInplaceInstrumentation.getSelection());
134     IClassFiles[] classes = classesviewer.getSelectedClasses();
135     List JavaDoc l = new ArrayList JavaDoc();
136     for (int i = 0; i < classes.length; i++) {
137       l.add(classes[i].getLocation().toString());
138     }
139     configuration.setAttribute(ICoverageLaunchConfigurationConstants.ATTR_INSTRUMENTATION_PATHS, l);
140   }
141   
142   public boolean isValid(ILaunchConfiguration launchConfig) {
143     return !classesviewer.getSelection().isEmpty();
144   }
145
146   public String JavaDoc getName() {
147     return UIMessages.CoverageTab_title;
148   }
149
150   public Image getImage() {
151     return EclEmmaUIPlugin.getImage(EclEmmaUIPlugin.EVIEW_COVERAGE);
152   }
153   
154   private void updateErrorStatus() {
155     if (classesviewer.getSelection().isEmpty()) {
156       setErrorMessage(UIMessages.CoverageTabNoClassesSelected_message);
157     } else {
158       setErrorMessage(null);
159     }
160   }
161
162 }
163
Popular Tags