/******************************************************************************* * <copyright> * * Copyright (c) 2012, 2012 SAP AG. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * SAP AG - initial API, implementation and documentation * * </copyright> * *******************************************************************************/ package org.eclipse.graphiti.examples.common.navigator; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.emf.common.util.URI; import org.eclipse.graphiti.ui.editor.DiagramEditorInput; 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.navigator.ILinkHelper; import org.eclipse.ui.part.FileEditorInput; /** * Provides information to the Common Navigator (Project Explorer) on how to * link active editors with selections of diagram nodes. * * @since 0.9 */ public class EditorLinkHelper implements ILinkHelper { /** * Return a selection that contains the file that the given editor input * represent. The {@link StructuredSelection} will be compared with nodes in * the tree. See also extension point * {@code "org.eclipse.ui.navigator.linkHelper"}. */ public IStructuredSelection findSelection(IEditorInput editorInput) { if (editorInput instanceof DiagramEditorInput) { if (editorInput.exists()) { DiagramEditorInput diagramEditorInput = (DiagramEditorInput) editorInput; final IFile file = getFile(diagramEditorInput.getUri()); if (file != null) { return new StructuredSelection(file); } } } return StructuredSelection.EMPTY; } /** * Links IFile to FileEditorInput. */ public void activateEditor(IWorkbenchPage aPage, IStructuredSelection aSelection) { if (aSelection == null || aSelection.isEmpty()) { return; } if (aSelection.getFirstElement() instanceof IFile) { IEditorInput fileInput = new FileEditorInput((IFile) aSelection.getFirstElement()); IEditorPart editor = null; if ((editor = aPage.findEditor(fileInput)) != null) { aPage.bringToTop(editor); } } } private IFile getFile(URI uri) { if (uri == null) { return null; } final IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); // File URIs final String filePath = getWorkspaceFilePath(uri.trimFragment()); if (filePath == null) { final IPath location = Path.fromOSString(uri.toString()); final IFile file = workspaceRoot.getFileForLocation(location); if (file != null) { return file; } return null; } // Platform resource URIs else { final IResource workspaceResource = workspaceRoot.findMember(filePath); return (IFile) workspaceResource; } } private String getWorkspaceFilePath(URI uri) { if (uri.isPlatform()) { return uri.toPlatformString(true); } return null; } }