blob: 378ee898673be828a2dd39d74273871f161125ce [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2008 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.xml.ui.internal.validation.core.errorinfo;
import java.net.URL;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorRegistry;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.editors.text.TextEditor;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.wst.xml.core.internal.validation.core.logging.LoggerFactory;
public class ReferencedFileErrorUtility {
public static void openEditorAndGotoError(String uristring, final int line, final int column) {
if (uristring != null) {
try {
URL uri = new URL(uristring);
if (uri != null) {
if ("file".equals(uri.getProtocol())) //$NON-NLS-1$
{
String pathString = uri.getPath();
IPath path = new Path(pathString);
String device = path.getDevice();
if ((device != null) && device.startsWith("/")) //$NON-NLS-1$
{
path = path.setDevice(device.substring(1));
}
final IFile iFile = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(path);
if ((iFile != null) && iFile.exists()) {
// Open the editor for this file.
final IWorkbench workbench = PlatformUI.getWorkbench();
final IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
Display.getDefault().asyncExec(new Runnable() {
public void run() {
try {
IContentType contentType = iFile.getContentDescription().getContentType();
IEditorRegistry editorRegistry = workbench.getEditorRegistry();
String fileName = iFile.getName();
IEditorDescriptor descriptor = editorRegistry.getDefaultEditor(fileName, contentType);
String editorId;
if (descriptor != null) {
editorId = descriptor.getId();
}
else {
descriptor = editorRegistry.getDefaultEditor(fileName + ".txt"); //$NON-NLS-1$
editorId = descriptor.getId();
}
if (editorId != null)
{
FileEditorInput editorInput = new FileEditorInput(iFile);
IWorkbenchPage activePage = workbenchWindow.getActivePage();
activePage.openEditor(editorInput, editorId);
}
}
catch (Exception ex) {
LoggerFactory.getLoggerInstance().logError("Exception encountered when attempting to open file: " + iFile + "\n\n", ex); //$NON-NLS-1$ //$NON-NLS-2$
}
}
});
Runnable runnable = new Runnable() {
public void run() {
IEditorPart editorPart = workbenchWindow.getActivePage().getActiveEditor();
gotoError(editorPart, line, column);
}
};
Display.getCurrent().asyncExec(runnable);
}
}
}
}
catch (Exception e) {
// Do nothing.
}
}
}
static void gotoError(IEditorPart editorPart, int line, int column) {
if (editorPart != null) {
TextEditor textEditor = (TextEditor) editorPart.getAdapter(TextEditor.class);
if (textEditor != null) {
try {
IDocumentProvider dp = textEditor.getDocumentProvider();
IDocument document = (dp != null) ? dp.getDocument(textEditor.getEditorInput()) : null;
textEditor.selectAndReveal(document.getLineOffset(line - 1) + column - 1, 0);
}
catch (BadLocationException x) {
// marker refers to invalid text position -> do nothing
}
}
}
}
}