package com.googlecode.goclipse.ui.navigator; import java.net.URI; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.ide.FileStoreEditorInput; import org.eclipse.ui.ide.ResourceUtil; import org.eclipse.ui.navigator.ILinkHelper; import org.eclipse.ui.part.FileEditorInput; /** * Link IFileStore objects in editors to the selection in the Project Explorer. * * @author devoncarew */ public class NavigatorLinkHelper implements ILinkHelper { public NavigatorLinkHelper() { } @Override public void activateEditor(IWorkbenchPage page, IStructuredSelection selection) { if (selection == null || selection.isEmpty()) { return; } Object element = selection.getFirstElement(); IEditorInput input = null; if (element instanceof IEditorInput) { input = (IEditorInput)element; } else if (element instanceof IFile) { input = new FileEditorInput((IFile)element); } else if (element instanceof IFileStore) { input = new FileStoreEditorInput((IFileStore)element); } if (input != null) { IEditorPart part = page.findEditor(input); if (part != null) { page.bringToTop(part); } } } @Override public IStructuredSelection findSelection(IEditorInput input) { IFile file = ResourceUtil.getFile(input); if (file != null) { return new StructuredSelection(file); } IFileStore fileStore = (IFileStore) input.getAdapter(IFileStore.class); if (fileStore == null && input instanceof FileStoreEditorInput) { URI uri = ((FileStoreEditorInput)input).getURI(); try { fileStore = EFS.getStore(uri); } catch (CoreException e) { } } if (fileStore != null) { return new StructuredSelection(fileStore); } return StructuredSelection.EMPTY; } }