1 8 package com.mountainminds.eclemma.internal.ui.launching; 9 10 import java.util.ArrayList ; 11 import java.util.Arrays ; 12 import java.util.HashSet ; 13 import java.util.List ; 14 import java.util.Set ; 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 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 getPackageFragmentRoots(IClassFiles[] classfiles) { 57 Set elements = new HashSet (); 58 for (int i = 0; i < classfiles.length; i++) { 59 elements.addAll(Arrays.asList(classfiles[i].getPackageFragmentRoots())); 60 } 61 return new ArrayList (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 } 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 l = new ArrayList (); 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 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 |