1 8 package com.mountainminds.eclemma.internal.ui.viewers; 9 10 import java.util.ArrayList ; 11 import java.util.Arrays ; 12 import java.util.HashSet ; 13 import java.util.Iterator ; 14 import java.util.List ; 15 import java.util.Set ; 16 17 import org.eclipse.jdt.core.IPackageFragmentRoot; 18 import org.eclipse.jdt.ui.JavaElementSorter; 19 import org.eclipse.jface.viewers.ArrayContentProvider; 20 import org.eclipse.jface.viewers.CheckStateChangedEvent; 21 import org.eclipse.jface.viewers.CheckboxTableViewer; 22 import org.eclipse.jface.viewers.ICheckStateListener; 23 import org.eclipse.jface.viewers.ILabelProvider; 24 import org.eclipse.jface.viewers.ISelection; 25 import org.eclipse.jface.viewers.ISelectionChangedListener; 26 import org.eclipse.jface.viewers.ISelectionProvider; 27 import org.eclipse.jface.viewers.IStructuredSelection; 28 import org.eclipse.jface.viewers.LabelProvider; 29 import org.eclipse.jface.viewers.SelectionChangedEvent; 30 import org.eclipse.jface.viewers.StructuredSelection; 31 import org.eclipse.swt.SWT; 32 import org.eclipse.swt.graphics.Image; 33 import org.eclipse.swt.widgets.Composite; 34 import org.eclipse.swt.widgets.Table; 35 import org.eclipse.ui.model.WorkbenchLabelProvider; 36 37 import com.mountainminds.eclemma.core.IClassFiles; 38 39 48 public class ClassesViewer implements ISelectionProvider { 49 50 private static class PackageFragmentRootLabelProvider extends LabelProvider { 51 52 private ILabelProvider delegate = new WorkbenchLabelProvider(); 53 54 public Image getImage(Object element) { 55 return delegate.getImage(element); 56 } 57 58 public String getText(Object element) { 59 IPackageFragmentRoot root = (IPackageFragmentRoot) element; 60 return root.getPath().toString(); 61 } 62 63 public void dispose() { 64 delegate.dispose(); 65 } 66 67 } 68 69 private final Table table; 70 private final CheckboxTableViewer viewer; 71 private final List listeners = new ArrayList (); 72 73 private IClassFiles[] input; 74 private boolean includebinaries; 75 private final Set selectedclasses = new HashSet (); 76 77 85 public ClassesViewer(Composite parent, int style) { 86 this(new Table(parent, SWT.CHECK | style)); 87 } 88 89 95 public ClassesViewer(Table table) { 96 this.table = table; 97 viewer = new CheckboxTableViewer(table); 98 viewer.setContentProvider(new ArrayContentProvider()); 99 viewer.setLabelProvider(new PackageFragmentRootLabelProvider()); 100 viewer.setSorter(new JavaElementSorter()); 101 viewer.addCheckStateListener(new ICheckStateListener() { 102 public void checkStateChanged(CheckStateChangedEvent event) { 103 updateCheckedStatus(event.getElement(), event.getChecked()); 104 } 105 }); 106 } 107 108 113 public Table getTable() { 114 return table; 115 } 116 117 123 public void setInput(IClassFiles[] input) { 124 this.input = input; 125 viewer.setInput(getPackageFragmentRoots(input)); 126 } 127 128 134 public void setIncludeBinaries(boolean includebinaries) { 135 this.includebinaries = includebinaries; 136 if (!includebinaries) { 137 for (Iterator i = selectedclasses.iterator(); i.hasNext();) { 138 if (((IClassFiles) i.next()).isBinary()) { 139 i.remove(); 140 } 141 } 142 } 143 if (input != null) { 144 viewer.setInput(getPackageFragmentRoots(input)); 145 } 146 } 147 148 154 public void setSelectedClasses(IClassFiles[] classfiles) { 155 selectedclasses.clear(); 156 selectedclasses.addAll(Arrays.asList(classfiles)); 157 viewer.setCheckedElements(getPackageFragmentRoots(classfiles)); 158 } 159 160 166 public void setSelectedClasses(String [] locations) { 167 Set lset = new HashSet (Arrays.asList(locations)); 168 selectedclasses.clear(); 169 for (int i = 0; i < input.length; i++) { 170 if (lset.contains(input[i].getLocation().toString())) { 171 selectedclasses.add(input[i]); 172 } 173 } 174 viewer.setCheckedElements(getPackageFragmentRoots(selectedclasses.toArray())); 175 } 176 177 public void selectAll() { 178 selectedclasses.clear(); 179 for (int i = 0; i < input.length; i++) { 180 if (includebinaries || !input[i].isBinary()) { 181 selectedclasses.add(input[i]); 182 } 183 } 184 viewer.setCheckedElements(getPackageFragmentRoots(selectedclasses.toArray())); 185 } 186 187 public void deselectAll() { 188 selectedclasses.clear(); 189 viewer.setCheckedElements(new Object [0]); 190 } 191 192 197 public IClassFiles[] getSelectedClasses() { 198 return (IClassFiles[]) selectedclasses.toArray(new IClassFiles[0]); 199 } 200 201 206 public String [] getSelectedClassesLocations() { 207 String [] locs = new String [selectedclasses.size()]; 208 int idx = 0; 209 for (Iterator i = selectedclasses.iterator(); i.hasNext();) { 210 locs[idx++] = ((IClassFiles) i.next()).getLocation().toString(); 211 } 212 return locs; 213 } 214 215 221 public void addSelectionChangedListener(ISelectionChangedListener listener) { 222 if (!listeners.contains(listener)) { 223 listeners.add(listener); 224 } 225 } 226 227 233 public void removeSelectionChangedListener(ISelectionChangedListener listener) { 234 listeners.remove(listener); 235 } 236 237 private IPackageFragmentRoot[] getPackageFragmentRoots(Object [] classfiles) { 238 Set roots = new HashSet (); 239 for (int i = 0; i < classfiles.length; i++) { 240 IClassFiles cf = (IClassFiles) classfiles[i]; 241 if (includebinaries || !cf.isBinary()) { 242 roots.addAll(Arrays.asList(cf.getPackageFragmentRoots())); 243 } 244 } 245 return (IPackageFragmentRoot[]) roots 246 .toArray(new IPackageFragmentRoot[roots.size()]); 247 } 248 249 private void updateCheckedStatus(Object root, boolean checked) { 250 for (int i = 0; i < input.length; i++) { 251 IClassFiles cf = input[i]; 252 if (Arrays.asList(cf.getPackageFragmentRoots()).contains(root)) { 253 if (checked) { 254 selectedclasses.add(cf); 255 } else { 256 selectedclasses.remove(cf); 257 } 258 break; 259 } 260 } 261 viewer.setCheckedElements(getPackageFragmentRoots(selectedclasses.toArray())); 262 fireSelectionEvent(); 263 } 264 265 private void fireSelectionEvent() { 266 SelectionChangedEvent evt = new SelectionChangedEvent(this, getSelection()); 267 for (Iterator i = listeners.iterator(); i.hasNext();) { 268 ISelectionChangedListener l = (ISelectionChangedListener) i.next(); 269 l.selectionChanged(evt); 270 } 271 } 272 273 275 public ISelection getSelection() { 276 return new StructuredSelection(getSelectedClasses()); 277 } 278 279 public void setSelection(ISelection selection) { 280 Object [] classfiles = ((IStructuredSelection) selection).toArray(); 281 selectedclasses.clear(); 282 selectedclasses.addAll(Arrays.asList(classfiles)); 283 viewer.setCheckedElements(getPackageFragmentRoots(classfiles)); 284 } 285 286 } 287 | Popular Tags |