From: <gjo...@us...> - 2008-05-29 14:09:42
|
Revision: 2724 http://abbot.svn.sourceforge.net/abbot/?rev=2724&view=rev Author: gjohnsto Date: 2008-05-29 07:08:40 -0700 (Thu, 29 May 2008) Log Message: ----------- Added closeEditor(IEditorPart,boolean[,long]) and waitEditorClose(IEditorPart,long). Modified Paths: -------------- abbot.swt/trunk/abbot.swt.eclipse/src/abbot/swt/eclipse/utils/WorkbenchUtilities.java Modified: abbot.swt/trunk/abbot.swt.eclipse/src/abbot/swt/eclipse/utils/WorkbenchUtilities.java =================================================================== --- abbot.swt/trunk/abbot.swt.eclipse/src/abbot/swt/eclipse/utils/WorkbenchUtilities.java 2008-05-29 14:04:05 UTC (rev 2723) +++ abbot.swt/trunk/abbot.swt.eclipse/src/abbot/swt/eclipse/utils/WorkbenchUtilities.java 2008-05-29 14:08:40 UTC (rev 2724) @@ -11,6 +11,7 @@ import org.eclipse.ui.IViewReference; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; @@ -31,11 +32,12 @@ * @author Gary Johnston * @author Kevin Dale */ +@SuppressWarnings("restriction") public class WorkbenchUtilities { /** - * Gets the workbench. This is just a convenience method and is equivalent to - * {@link PlatformUI#getWorkbench()}. + * Gets the workbench. This is just a convenience method and is equivalent + * to {@link PlatformUI#getWorkbench()}. * * @return the {@link IWorkbench} */ @@ -61,25 +63,25 @@ // Get the active workbench window. final IWorkbench workbench = getWorkbench(); Display display = workbench.getDisplay(); - IWorkbenchWindow window = (IWorkbenchWindow) Displays.syncExec( - display, + IWorkbenchWindow window = Displays.syncExec(display, new Result<IWorkbenchWindow>() { public IWorkbenchWindow result() { return workbench.getActiveWorkbenchWindow(); } }); - // If there isn't one and activate was specified then activate the first visible workbench + // If there isn't one and activate was specified then activate the first + // visible workbench // window (if any). if (window == null && activate) { final IWorkbenchWindow[] windows = workbench.getWorkbenchWindows(); - window = (IWorkbenchWindow) Displays.syncExec(display, new Result<IWorkbenchWindow>() { + window = Displays.syncExec(display, new Result<IWorkbenchWindow>() { public IWorkbenchWindow result() { - for (IWorkbenchWindow window : windows) { - Shell shell = window.getShell(); + for (IWorkbenchWindow workbenchWindow : windows) { + Shell shell = workbenchWindow.getShell(); if (shell.isVisible()) { shell.setActive(); - return window; + return workbenchWindow; } } return null; @@ -125,8 +127,10 @@ boolean matches(IEditorPart editor); } - public static IEditorReference findEditorReference(EditorReferenceMatcher matcher) { - for (IWorkbenchWindow window : PlatformUI.getWorkbench().getWorkbenchWindows()) { + public static IEditorReference findEditorReference( + EditorReferenceMatcher matcher) { + for (IWorkbenchWindow window : PlatformUI.getWorkbench() + .getWorkbenchWindows()) { for (IWorkbenchPage page : window.getPages()) { for (IEditorReference reference : page.getEditorReferences()) { if (matcher.matches(reference)) @@ -137,14 +141,16 @@ return null; } - public static IEditorPart findEditor(EditorReferenceMatcher matcher, boolean restore) { + public static IEditorPart findEditor(EditorReferenceMatcher matcher, + boolean restore) { IEditorReference reference = findEditorReference(matcher); if (reference != null) return reference.getEditor(restore); return null; } - public static IEditorPart findEditor(final EditorMatcher matcher, final boolean restore) { + public static IEditorPart findEditor(final EditorMatcher matcher, + final boolean restore) { return findEditor(new EditorReferenceMatcher() { public boolean matches(IEditorReference reference) { IEditorPart editor = reference.getEditor(restore); @@ -155,12 +161,13 @@ } /** - * Gets an open editor by its editor ID. If there are more than one then the first one happened - * upon will be returned. + * Gets an open editor by its editor ID. If there are more than one then the + * first one happened upon will be returned. * * @param editorId - * the editor ID - * @return the {@link IEditorPart} of the editor that was found, or <code>null</code> if none. + * the editor ID + * @return the {@link IEditorPart} of the editor that was found, or + * <code>null</code> if none. */ public static IEditorPart findEditor(final String editorId) { return findEditor(new EditorReferenceMatcher() { @@ -174,33 +181,84 @@ * Gets an open editor based on the file it's editing. * * @param file - * the {@link IFile} being edited - * @return the {@link IEditorPart} of the editor that was found, or <code>null</code> if none. + * the {@link IFile} being edited + * @return the {@link IEditorPart} of the editor that was found, or + * <code>null</code> if none. */ - public static IEditorPart findEditor(final IFile file) throws PartInitException { + public static IEditorPart findEditor(final IFile file) + throws PartInitException { IWorkbenchPage page = getActivePage(); IEditorInput input = new FileEditorInput(file); return page.findEditor(input); } /** - * Default number of milliseconds to wait for an editor to open. Value is 60000 (60 seconds). + * Activates a specified editor. + * + * @param editor + * the {@link IEditorPart} to be activated */ + public static void activateEditor(final IEditorPart editor) { + IEditorSite site = editor.getEditorSite(); + final IWorkbenchPage page = site.getPage(); + Display display = site.getShell().getDisplay(); + display.syncExec(new Runnable() { + public void run() { + page.activate(editor); + } + }); + if (editor != page.getActiveEditor()) + throw new RuntimeException("could not activate " + editor); + } + + /** + * Default number of milliseconds to wait for an editor to open. + */ public static final long EDITOR_OPEN_WAIT_TIMEOUT = 60000L; - + /** - * Wait up to 60 sec. for an editor to open on a specified file. - * @param file an {@link IFile} - * @return the {@link IEditorInput} of the editor that opened + * Default number of milliseconds to wait for an editor to close. */ - public static IEditorPart waitEditorOpen(final IFile file) { - return waitEditorOpen(file, EDITOR_OPEN_WAIT_TIMEOUT); + public static final long EDITOR_CLOSE_WAIT_TIMEOUT = 60000L; + + public static IEditorPart openEditor(IFile file, String editorId) + throws PartInitException { + IWorkbenchPage page = getActivePage(); + assert page != null; + IEditorPart editor = IDE.openEditor(page, file, editorId, true); + assert editor != null; + return editor; } + public static IEditorPart openEditor(final IFile file) + throws PartInitException { + final IWorkbenchPage page = getActivePage(); + assert page != null; + final PartInitException[] exception = new PartInitException[1]; + final IEditorPart[] editor = new IEditorPart[1]; + getDisplay().syncExec(new Runnable() { + public void run() { + try { + editor[0] = IDE.openEditor(page, file, true, true); + } catch (PartInitException e) { + exception[0] = e; + } + } + }); + if (exception[0] != null) + throw exception[0]; + assert editor[0] != null; + return editor[0]; + } + /** - * Wait up to a specified amount of time for an editor to open on a specified file. - * @param file an {@link IFile} - * @param timeout the maximum amount of time to wait (in milliseconds) + * Wait up to a specified amount of time for an editor to open on a + * specified file. + * + * @param file + * an {@link IFile} + * @param timeout + * the maximum amount of time to wait (in milliseconds) * @return the {@link IEditorInput} of the editor that opened */ public static IEditorPart waitEditorOpen(final IFile file, long timeout) { @@ -210,7 +268,8 @@ if (editor.getEditorSite() != null) { IEditorInput input = editor.getEditorInput(); if (input instanceof IFileEditorInput) - return file.equals(((IFileEditorInput) input).getFile()); + return file + .equals(((IFileEditorInput) input).getFile()); } return false; } @@ -226,33 +285,74 @@ } /** - * Activates a specified editor. + * Wait up to 60 seconds for an editor to open on a specified file. * + * @param file + * an {@link IFile} + * @return the {@link IEditorInput} of the editor that opened + */ + public static IEditorPart waitEditorOpen(final IFile file) { + return waitEditorOpen(file, EDITOR_OPEN_WAIT_TIMEOUT); + } + + /** + * Programmatically closes an editor. Does <b>not</b> wait for it to close. + * * @param editor - * the {@link IEditorPart} to be activated + * an {@link IEditorPart} that corresponds to an open editor + * @param save + * if <code>true</code> then the editor will be saved first, otherwise + * it will not be saved */ - public static void activateEditor(final IEditorPart editor) { - IEditorSite site = editor.getEditorSite(); - final IWorkbenchPage page = site.getPage(); + private static void closeEditorInternal(final IEditorPart editor, final boolean save) { + final IWorkbenchPartSite site = editor.getSite(); Display display = site.getShell().getDisplay(); - display.syncExec(new Runnable() { + display.asyncExec(new Runnable() { public void run() { - page.activate(editor); + site.getPage().closeEditor(editor, save); } }); - if (editor != page.getActiveEditor()) - throw new RuntimeException("could not activate " + editor); } - public static IEditorPart openEditor(IFile file, String editorId) throws PartInitException { - IWorkbenchPage page = getActivePage(); - assert page != null; - IEditorPart editor = IDE.openEditor(page, file, editorId, true); - assert editor != null; - return editor; + /** + * Programmatically closes an editor and waits for it to close. + * + * @param editor + * an {@link IEditorPart} that corresponds to an open editor + * @param save + * if <code>true</code> then the editor will be saved first, otherwise + * it will not be saved + * @param timeout + * the maximum number of milliseconds to wait for the editor to close + */ + public static void closeEditor(IEditorPart editor, + final boolean save, long timeout) { + closeEditorInternal(editor, save); + waitEditorClose(editor, timeout); } - - public static void waitEditorClose(final IEditorPart editor) { + + /** + * Programmatically closes an editor and waits for it to close. + * + * @param editor + * an {@link IEditorPart} that corresponds to an open editor + * @param save + * if <code>true</code> then the editor will be saved first, otherwise + * it will not be saved + */ + public static void closeEditor(IEditorPart editor, boolean save) { + closeEditor(editor, save, EDITOR_CLOSE_WAIT_TIMEOUT); + } + + /** + * Waits for an editor to close. + * + * @param editor + * an {@link IEditorPart} that corresponds to an editor being closed + * @param timeout + * the maximum number of milliseconds to wait for the editor to close + */ + public static void waitEditorClose(final IEditorPart editor, long timeout) { Wait.wait(new Condition() { public boolean test() { return null == findEditor(new EditorMatcher() { @@ -262,39 +362,30 @@ }, false); } - }, 60000); + }, timeout); } - public static IEditorPart openEditor(final IFile file) throws PartInitException { - final IWorkbenchPage page = getActivePage(); - assert page != null; - final PartInitException[] exception = new PartInitException[1]; - final IEditorPart[] editor = new IEditorPart[1]; - getDisplay().syncExec(new Runnable() { - public void run() { - try { - editor[0] = IDE.openEditor(page, file, true, true); - } catch (PartInitException e) { - exception[0] = e; - } - } - }); - if (exception[0] != null) - throw exception[0]; - assert editor[0] != null; - return editor[0]; + /** + * Waits for an editor to close (for at most 60 seconds). + * + * @param editor + * an {@link IEditorPart} that corresponds to an editor being closed + */ + public static void waitEditorClose(final IEditorPart editor) { + waitEditorClose(editor, EDITOR_CLOSE_WAIT_TIMEOUT); } public static IWorkbenchWindow getWorkbenchWindow() { - return (IWorkbenchWindow) Displays.syncExec(getDisplay(), new Result() { - public Object result() { + return Displays.syncExec(getDisplay(), new Result<IWorkbenchWindow>() { + public IWorkbenchWindow result() { return PlatformUI.getWorkbench().getActiveWorkbenchWindow(); } }); } /** - * Brings the workbench to the top of the drawing order so that it receives keyboard focus. + * Brings the workbench to the top of the drawing order so that it receives + * keyboard focus. */ public static void bringWorkbenchToFront() { Shell workbenchShell = getWorkbenchWindow().getShell(); @@ -302,7 +393,8 @@ } /** - * Brings the passed Shell to the top of the drawing order so that it receives keyboard focus. + * Brings the passed Shell to the top of the drawing order so that it + * receives keyboard focus. */ public static void bringToFront(final Shell shell) { ShellTester tester = (ShellTester) WidgetTester.getTester(shell); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |