| /******************************************************************************* |
| * Copyright (c) 2016 Obeo. |
| * 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: |
| * Obeo - initial API and implementation and/or initial documentation |
| * ... |
| *******************************************************************************/ |
| package org.eclipse.intent.mapping.ide.ui; |
| |
| import java.io.File; |
| import java.net.URI; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IMarker; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.core.runtime.URIUtil; |
| import org.eclipse.intent.mapping.base.ILocation; |
| import org.eclipse.intent.mapping.ide.IdeMappingUtils; |
| import org.eclipse.ui.IEditorInput; |
| import org.eclipse.ui.IFileEditorInput; |
| import org.eclipse.ui.IURIEditorInput; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.PartInitException; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.editors.text.ILocationProvider; |
| import org.eclipse.ui.ide.IDE; |
| |
| /** |
| * UI Ide mapping utilities. |
| * |
| * @author <a href="mailto:yvan.lussaud@obeo.fr">Yvan Lussaud</a> |
| */ |
| public final class UiIdeMappingUtils { |
| |
| /** |
| * Constructor. |
| */ |
| private UiIdeMappingUtils() { |
| // nothing to do here |
| } |
| |
| /** |
| * Shows the given {@link ILocation} in an editor. |
| * |
| * @param location |
| * the {@link ILocation} to show |
| */ |
| public static void showLocation(ILocation location) { |
| if (!location.isMarkedAsDeleted()) { |
| final IMarker marker = IdeMappingUtils.getMarker(location); |
| if (marker != null) { |
| showMarker(marker); |
| } else { |
| final IMarker createdMarker = IdeMappingUtils.getOrCreateMarker(location); |
| if (createdMarker != null) { |
| showMarker(createdMarker); |
| } |
| IdeMappingUtils.deleteMarker(location); |
| } |
| } |
| } |
| |
| /** |
| * Shows the given {@link IMarker}. |
| * |
| * @param marker |
| * the {@link IMarker} to show |
| */ |
| private static void showMarker(final IMarker marker) { |
| final IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow() |
| .getActivePage(); |
| try { |
| IDE.openEditor(activePage, marker, true); |
| } catch (PartInitException e) { |
| Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, |
| "unable to open location marker: ", e)); |
| } |
| } |
| |
| /** |
| * Gets the {@link IFile} from the given {@link IEditorInput}. |
| * |
| * @param editorInput |
| * the {@link IEditorInput} |
| * @return the {@link IFile} from the given {@link IEditorInput} if any, <code>null</code> otherwise |
| */ |
| public static IFile getFile(final IEditorInput editorInput) { |
| final IFile file; |
| if (editorInput instanceof IFileEditorInput) { |
| file = ((IFileEditorInput)editorInput).getFile(); |
| } else { |
| final IPath path = getPath(editorInput); |
| if (path != null) { |
| file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(path); |
| } else { |
| file = IdeMappingUtils.adapt(editorInput, IFile.class); |
| } |
| } |
| return file; |
| } |
| |
| /** |
| * Gets the {@link IPath} from the given {@link IEditorInput}. |
| * |
| * @param editorInput |
| * the {@link IEditorInput} |
| * @return the {@link IPath} from the given {@link IEditorInput} if any, <code>null</code> otherwise |
| */ |
| public static IPath getPath(final IEditorInput editorInput) { |
| final IPath path; |
| if (editorInput instanceof ILocationProvider) { |
| path = ((ILocationProvider)editorInput).getPath(editorInput); |
| } else if (editorInput instanceof IURIEditorInput) { |
| final URI uri = ((IURIEditorInput)editorInput).getURI(); |
| if (uri != null) { |
| final File osFile = URIUtil.toFile(uri); |
| if (osFile != null) { |
| path = Path.fromOSString(osFile.getAbsolutePath()); |
| } else { |
| path = null; |
| } |
| } else { |
| path = null; |
| } |
| } else { |
| path = null; |
| } |
| return path; |
| } |
| |
| } |