trace/tracebuilder/com.nokia.tracebuilder.eclipse/src/com/nokia/tracebuilder/eclipse/WorkbenchListener.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/trace/tracebuilder/com.nokia.tracebuilder.eclipse/src/com/nokia/tracebuilder/eclipse/WorkbenchListener.java Wed Jun 23 14:35:40 2010 +0300
@@ -0,0 +1,283 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+* Workbench listener
+*
+*/
+package com.nokia.tracebuilder.eclipse;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IPageListener;
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IWindowListener;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.texteditor.ITextEditor;
+
+import com.nokia.tracebuilder.file.FileUtils;
+
+/**
+ * Workbench listener
+ *
+ */
+final class WorkbenchListener implements IWindowListener, IPageListener,
+ IPartListener2 {
+
+ /**
+ * List of open windows
+ */
+ private ArrayList<IWorkbenchWindow> windowList = new ArrayList<IWorkbenchWindow>();
+
+ /**
+ * Callback for editor notifications
+ */
+ private WorkbenchListenerCallback callback;
+
+ /**
+ * Constructor
+ *
+ * @param callback
+ * callback for editor notifications
+ */
+ WorkbenchListener(WorkbenchListenerCallback callback) {
+ this.callback = callback;
+ }
+
+ /**
+ * Starts this listener
+ */
+ void startListener() {
+ PlatformUI.getWorkbench().addWindowListener(this);
+ IWorkbenchWindow[] windows = PlatformUI.getWorkbench()
+ .getWorkbenchWindows();
+ for (IWorkbenchWindow element : windows) {
+ windowOpened(element);
+ }
+ }
+
+ /**
+ * Stops this listener
+ */
+ void stopListener() {
+ Iterator<IWorkbenchWindow> itr;
+ do {
+ itr = windowList.iterator();
+ if (itr.hasNext()) {
+ windowClosed(itr.next());
+ }
+ } while (itr.hasNext());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWindowListener#
+ * windowActivated(org.eclipse.ui.IWorkbenchWindow)
+ */
+ public void windowActivated(IWorkbenchWindow window) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWindowListener#
+ * windowDeactivated(org.eclipse.ui.IWorkbenchWindow)
+ */
+ public void windowDeactivated(IWorkbenchWindow window) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWindowListener#
+ * windowClosed(org.eclipse.ui.IWorkbenchWindow)
+ */
+ public void windowClosed(IWorkbenchWindow window) {
+ window.removePageListener(this);
+ windowList.remove(window);
+ IWorkbenchPage[] pages = window.getPages();
+ for (IWorkbenchPage element : pages) {
+ pageClosed(element);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWindowListener#
+ * windowOpened(org.eclipse.ui.IWorkbenchWindow)
+ */
+ public void windowOpened(IWorkbenchWindow window) {
+ boolean found = false;
+ for (int j = 0; j < windowList.size(); j++) {
+ if (windowList.get(j) == window) {
+ found = true;
+ }
+ }
+ if (!found) {
+ window.addPageListener(this);
+ IWorkbenchPage[] pages = window.getPages();
+ for (IWorkbenchPage element : pages) {
+ pageOpened(element);
+ }
+ windowList.add(window);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IPageListener#pageActivated(org.eclipse.ui.IWorkbenchPage)
+ */
+ public void pageActivated(IWorkbenchPage page) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IPageListener#pageClosed(org.eclipse.ui.IWorkbenchPage)
+ */
+ public void pageClosed(IWorkbenchPage page) {
+ page.removePartListener(this);
+ IEditorReference[] editors = page.getEditorReferences();
+ for (IEditorReference element : editors) {
+ partClosed(element);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IPageListener#pageOpened(org.eclipse.ui.IWorkbenchPage)
+ */
+ public void pageOpened(IWorkbenchPage page) {
+ page.addPartListener(this);
+ IEditorReference[] references = page.getEditorReferences();
+ for (IEditorReference element : references) {
+ partOpened(element);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IPartListener2#partOpened(org.eclipse.ui.IWorkbenchPartReference)
+ */
+ public void partOpened(IWorkbenchPartReference partRef) {
+ IFile file = WorkbenchUtils.getEditorFile(partRef);
+ if (file != null && FileUtils.isFileAllowed(file.getName())) {
+ callback.editorOpened((ITextEditor) ((IEditorReference) partRef)
+ .getEditor(false), file);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IPartListener2#partClosed(org.eclipse.ui.IWorkbenchPartReference)
+ */
+ public void partClosed(IWorkbenchPartReference partRef) {
+ if (partRef != null) {
+ IFile file = WorkbenchUtils.getEditorFile(partRef);
+
+ if (partRef instanceof IEditorReference) {
+ IEditorPart editorPart = ((IEditorReference) partRef)
+ .getEditor(false);
+ // Check that editorPart is instance of ITextEditor
+ if (editorPart instanceof ITextEditor) {
+ // Variable file might be null, but it does not matter. So
+ // null check is not needed.
+ callback.editorClosed((ITextEditor) editorPart, file);
+ }
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IPartListener2#partActivated(org.eclipse.ui.IWorkbenchPartReference)
+ */
+ public void partActivated(IWorkbenchPartReference partRef) {
+ IFile file = WorkbenchUtils.getEditorFile(partRef);
+ if (file != null && FileUtils.isFileAllowed(file.getName())) {
+ callback.editorActivated((ITextEditor) ((IEditorReference) partRef)
+ .getEditor(false), file);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IPartListener2#partDeactivated(org.eclipse.ui.IWorkbenchPartReference)
+ */
+ public void partDeactivated(IWorkbenchPartReference partRef) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IPartListener2#partInputChanged(org.eclipse.ui.IWorkbenchPartReference)
+ */
+ public void partInputChanged(IWorkbenchPartReference partRef) {
+ IFile file = WorkbenchUtils.getEditorFile(partRef);
+ if (file != null && FileUtils.isFileAllowed(file.getName())) {
+ callback.editorReplaced((ITextEditor) ((IEditorReference) partRef)
+ .getEditor(false), file);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IPartListener2#partBroughtToTop(org.eclipse.ui.IWorkbenchPartReference)
+ */
+ public void partBroughtToTop(IWorkbenchPartReference partRef) {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IPartListener2#partVisible(org.eclipse.ui.IWorkbenchPartReference)
+ */
+ public void partVisible(IWorkbenchPartReference partRef) {
+ IFile file = WorkbenchUtils.getEditorFile(partRef);
+ if (file != null && FileUtils.isFileAllowed(file.getName())) {
+ callback.editorVisible((ITextEditor) ((IEditorReference) partRef)
+ .getEditor(false), file);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IPartListener2#partHidden(org.eclipse.ui.IWorkbenchPartReference)
+ */
+ public void partHidden(IWorkbenchPartReference partRef) {
+ IFile file = WorkbenchUtils.getEditorFile(partRef);
+ if (file != null && FileUtils.isFileAllowed(file.getName())) {
+ callback.editorHidden((ITextEditor) ((IEditorReference) partRef)
+ .getEditor(false), file);
+ }
+ }
+
+}
\ No newline at end of file