KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > mountainminds > eclemma > internal > 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 158 2006-10-30 17:21:33Z mtnminds $
7  ******************************************************************************/

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

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