package sk.stuba.fiit.perconik.core.resources; import javax.annotation.Nullable; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IViewReference; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import sk.stuba.fiit.perconik.eclipse.ui.Editors; import static java.util.Arrays.asList; import static sk.stuba.fiit.perconik.core.resources.Ui.dereferenceEditor; import static sk.stuba.fiit.perconik.core.resources.Ui.dereferencePart; import static sk.stuba.fiit.perconik.core.resources.Ui.dereferenceView; import static sk.stuba.fiit.perconik.eclipse.ui.Pages.waitForActivePage; import static sk.stuba.fiit.perconik.eclipse.ui.Windows.waitForActiveWindow; import static sk.stuba.fiit.perconik.eclipse.ui.Workbenches.waitForWorkbench; final class Hooks { private Hooks() {} static <T> void addAll(final Hook<T, ?> hook, final Iterable<T> objects) { for (T object: objects) { hook.add(object); } } static <T> void addNonNull(final Hook<T, ?> hook, @Nullable final T object) { if (object != null) { hook.add(object); } } static <T> void removeAll(final Hook<T, ?> hook, final Iterable<T> objects) { for (T object: objects) { hook.remove(object); } } static <T> void removeNonNull(final Hook<T, ?> hook, @Nullable final T object) { if (object != null) { hook.remove(object); } } static void addWindowsAsynchronouslyTo(final Hook<IWorkbenchWindow, ?> hook) { final Runnable initializer = new Runnable() { @Override public void run() { addAll(hook, asList(waitForWorkbench().getWorkbenchWindows())); } }; Display.getDefault().asyncExec(initializer); } static void addPagesAsynchronouslyTo(final Hook<IWorkbenchPage, ?> hook) { final Runnable initializer = new Runnable() { @Override public void run() { addAll(hook, asList(waitForActiveWindow().getPages())); } }; Display.getDefault().asyncExec(initializer); } static void addPartsAsynchronouslyTo(final Hook<IWorkbenchPart, ?> hook) { final Runnable initializer = new Runnable() { @Override public void run() { for (IViewReference reference: waitForActivePage().getViewReferences()) { addNonNull(hook, dereferencePart(reference)); } } }; Display.getDefault().asyncExec(initializer); } static void addEditorsAsynchronouslyTo(final Hook<IEditorPart, ?> hook) { final Runnable initializer = new Runnable() { @Override public void run() { for (IEditorReference reference: waitForActivePage().getEditorReferences()) { addNonNull(hook, dereferenceEditor(reference)); } } }; Display.getDefault().asyncExec(initializer); } static void addViewsAsynchronouslyTo(final Hook<IViewPart, ?> hook) { final Runnable initializer = new Runnable() { @Override public void run() { for (IViewReference reference: waitForActivePage().getViewReferences()) { addNonNull(hook, dereferenceView(reference)); } } }; Display.getDefault().asyncExec(initializer); } static void addTextViewersAsynchronouslyTo(final Hook<ITextViewer, ?> hook) { final Runnable initializer = new Runnable() { @Override public void run() { for (IEditorReference reference: waitForActivePage().getEditorReferences()) { addNonNull(hook, Editors.getTextViewer(dereferenceEditor(reference))); } } }; Display.getDefault().asyncExec(initializer); } static void addSourceViewersAsynchronouslyTo(final Hook<ISourceViewer, ?> hook) { final Runnable initializer = new Runnable() { @Override public void run() { for (IEditorReference reference: waitForActivePage().getEditorReferences()) { addNonNull(hook, Editors.getSourceViewer(dereferenceEditor(reference))); } } }; Display.getDefault().asyncExec(initializer); } static void addDocumentsAsynchronouslyTo(final Hook<IDocument, ?> hook) { final Runnable initializer = new Runnable() { @Override public void run() { for (IEditorReference reference: waitForActivePage().getEditorReferences()) { addNonNull(hook, Editors.getDocument(dereferenceEditor(reference))); } } }; Display.getDefault().asyncExec(initializer); } }