package net.certware.core.ui.resources; import net.certware.core.ui.log.CertWareLog; import org.eclipse.core.resources.IFile; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.FileEditorInput; import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.texteditor.ITextEditor; /** * File opener utility. * @author mrb * @since 1.0.3 */ public class FileOpener { /** * Finds an editor for a file and opens the file. * @param ifile file to open * @return editor or null */ public static IEditorPart findResourceEditor(IFile ifile) { if ( ifile != null ) { IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IEditorDescriptor desc = PlatformUI.getWorkbench().getEditorRegistry().getDefaultEditor(ifile.getName()); try { return page.openEditor(new FileEditorInput(ifile), desc.getId()); } catch (PartInitException e) { CertWareLog.logError(String.format("%s %s","Opening editor for",ifile),e); } } return null; } /** * Finds a resource by name, finds its editor, opens its editor, and positions the document at the given line number. * @param fileName file name to find using <code>FileFinder</code> * @param lineNumber line number in document, where bad locations are caught and written to given log */ public static void editAtLineNumber(String fileName, int lineNumber) { IFile myFile = FileFinder.findResourceByName(fileName); IEditorPart iep = FileOpener.findResourceEditor(myFile); if ( iep != null ) { if (iep instanceof ITextEditor) { ITextEditor textEditor = (ITextEditor) iep ; IDocumentProvider idp = textEditor.getDocumentProvider(); IDocument document = idp.getDocument(textEditor.getEditorInput()); try { textEditor.selectAndReveal(document.getLineOffset(lineNumber - 1), document.getLineLength(lineNumber - 1)); } catch (BadLocationException ble) { // $codepro.audit.disable logExceptions CertWareLog.logWarning(String.format("%s %s:%d","Opening line number for",fileName,lineNumber)); } } } } }