1 8 package com.mountainminds.eclemma.ui.launching; 9 10 import java.util.ArrayList ; 11 import java.util.List ; 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 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 } 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 l = new ArrayList (); 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 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 |