package org.radrails.rails.internal.ui; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Path; import org.eclipse.debug.ui.console.IConsole; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IRegion; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.console.IHyperlink; import org.eclipse.ui.ide.IDE; import org.radrails.rails.ui.RailsUILog; public class RailsConsoleHyperlink implements IHyperlink { private IConsole fConsole; private RailsConsoleLine fLine; public RailsConsoleHyperlink(IConsole console, RailsConsoleLine line) { fConsole = console; fLine = line; } /** * @see org.eclipse.debug.ui.console.IHyperlink#linkEntered() */ public void linkEntered() { } /** * @see org.eclipse.debug.ui.console.IHyperlink#linkExited() */ public void linkExited() { } /** * @see org.eclipse.debug.ui.console.IHyperlink#linkActivated() */ public void linkActivated() { String filename = this.getFilename(); try { IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), ResourcesPlugin .getWorkspace().getRoot().getFile(new Path(filename))); } catch (CoreException e) { RailsUILog.logError("Could not open editor or set line in editor", e); } } /** * Returns the line number associated with the stack trace * * @exception CoreException * if unable to parse the number */ public int getLineNumber() { return fLine.getLineNumber(); } public String getFilename() { return fLine.getFilename(); } /** * Returns the console this link is contained in. * * @return console */ protected IConsole getConsole() { return fConsole; } /** * Returns this link's text * * @exception CoreException * if unable to retrieve the text */ protected String getLinkText() throws BadLocationException { IRegion region = getConsole().getRegion(this); return getConsole().getDocument().get(region.getOffset(), region.getLength()); } }