package edu.neu.ccs.eclipse.LoDChecker; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.core.resources.IFile; import java.util.Iterator; import java.util.Vector; import java.util.Observable; /* * Input for the viewer. */ public class ViewerInput extends Observable implements ISelectionListener{ Vector elements=new Vector(); public ViewerInput(ISelection selection) { if (selection!=null && selection instanceof IStructuredSelection) setSelection((IStructuredSelection)selection); } public Object[] getElements() { return elements.toArray(); } /** Executes whenever we make new selection in the Workbench */ public void selectionChanged(IWorkbenchPart part, ISelection selection) { if (selection!=null && selection instanceof IStructuredSelection) { IStructuredSelection sel=(IStructuredSelection)selection; setSelection((IStructuredSelection)selection); } } /** Convert selection into model objects and notifys listeners if */ protected void setSelection(IStructuredSelection selection) { Vector newElements=new Vector(); Vector removed=new Vector(); Vector inserted=new Vector(); Iterator iter=selection.iterator(); while (iter.hasNext()) { Object el=iter.next(); if (el instanceof IFile && ((IFile)el).getFileExtension()!=null && ((IFile)el).getFileExtension().equals("java") ) { if (!elements.contains(el)) inserted.add(el); newElements.add(el); } } for (int i=0;i0) { setChanged(); notifyObservers(new removeElementsEvent(removed)); clearChanged(); } if (inserted.size()>0) { setChanged(); notifyObservers(new insertElementsEvent(inserted)); clearChanged(); } elements=newElements; } } //Event classes class elementsEvent { private Vector elements; public elementsEvent(Vector elements) { this.elements=elements; } public Vector getElements() {return elements;} } class insertElementsEvent extends elementsEvent { public insertElementsEvent(Vector elements) { super(elements); } } class removeElementsEvent extends elementsEvent { public removeElementsEvent(Vector elements) { super(elements); } }