package au.com.langdale.cimtoole.views; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; import au.com.langdale.jena.JenaTreeModelBase.ModelNode; import au.com.langdale.kena.OntResource; import au.com.langdale.kena.Resource; public abstract class SelectionFollower extends ViewPart implements ISelectionListener { private IWorkbenchPage page; public abstract void selectProject(IProject project); public abstract void previewTarget(Resource base); public abstract boolean ignoreNode( ModelNode node); public void selectionChanged(final IWorkbenchPart part, final ISelection selection) { PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { public void run() { followSelection(selection); } }); } public void followSelection(ISelection selection) { if( selection instanceof IStructuredSelection && ! selection.isEmpty()) { IStructuredSelection struct = (IStructuredSelection) selection; if( struct.getFirstElement() instanceof ModelNode) { ModelNode node = (ModelNode) struct.getFirstElement(); //System.out.println("ProjectModelView saw a " + node); if( ignoreNode(node)) return; String source_name = node.getModel().getSource(); if( source_name != null) { Path source_path = new Path(source_name); IResource target = ResourcesPlugin.getWorkspace().getRoot().getFile(source_path); selectProject(target.getProject()); } OntResource base = node.getBase(); if( base != null ) { previewTarget(base); } } else if( struct.getFirstElement() instanceof IResource) { IResource target = (IResource) struct.getFirstElement(); //System.out.println("ProjectModelView saw " + target.getFullPath()); selectProject(target.getProject()); } } } public void listenToSelection(IWorkbenchPage page) { page.addSelectionListener(this); this.page = page; selectionChanged(null, page.getSelection()); } public void dispose() { if( page != null ) page.removeSelectionListener(this); super.dispose(); } }