package edu.neu.ccs.eclipse.LoDChecker; import org.eclipse.jface.viewers.*; import java.util.Observer; import java.util.Observable; import java.util.Vector; /* Provides viewer with information on how to transform domain object * into a visible viewer item. * Also listens for domain model changes and updates viewer correspondingly */ public class JFContentProvider implements IStructuredContentProvider,Observer { private ListViewer viewer; //Subscribes as listener for model change events... public void inputChanged(Viewer viewer,Object oldInput,Object newInput) { this.viewer=(ListViewer)viewer; if (oldInput!=null) { ((Observable)oldInput).deleteObserver(this); } if (newInput!=null) { ((Observable)newInput).addObserver(this); } } /**This method is called by viewer whenever * viewer's setInput methos was called. * Converts inputElement into object array. * After calling this method viewer will call pass * array returned to getText() & getImage() methods * of its ILabelProvider object. */ public Object[] getElements(Object inputElement) { if (inputElement instanceof ViewerInput) return ((ViewerInput)inputElement).getElements(); else return null; } public void dispose() { } /** * Called whenever we change domain model objects * (change selection in the workbench). * Keeps viewer in sync with domain model contain. */ public void update(Observable o, Object arg) { Vector elements; if (arg instanceof elementsEvent) elements=((elementsEvent)arg).getElements(); else return; if (elements!=null) { if (arg instanceof removeElementsEvent) { viewer.remove(elements.toArray()); } if (arg instanceof insertElementsEvent) { viewer.add(elements.toArray()); } } } }