From becb0a891e38e083671ab2850889118bdabf9a13 Mon Sep 17 00:00:00 2001
From: Florian Hoelzl <hoelzl@fortiss.org>
Date: Thu, 3 Mar 2011 10:13:47 +0000
Subject: [PATCH] fixed navigator listening, some rework to clean up

---
 .../kernel/internal/NavigatorService.java     | 15 +++++++++++
 .../internal/navigator/NavigatorViewPart.java | 27 +++++++++++++------
 .../kernel/services/INavigatorService.java    |  7 ++++-
 3 files changed, 40 insertions(+), 9 deletions(-)

diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/NavigatorService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/NavigatorService.java
index 2b36fe1d6..8735111d1 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/NavigatorService.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/NavigatorService.java
@@ -17,6 +17,8 @@ $Id$
 +--------------------------------------------------------------------------*/
 package org.fortiss.tooling.kernel.internal;
 
+import org.eclipse.ui.part.ViewPart;
+import org.fortiss.tooling.kernel.internal.navigator.NavigatorViewPart;
 import org.fortiss.tooling.kernel.services.INavigatorService;
 
 /**
@@ -29,4 +31,17 @@ import org.fortiss.tooling.kernel.services.INavigatorService;
  */
 public class NavigatorService implements INavigatorService {
 
+	/** Stores the navigator view. */
+	private NavigatorViewPart navigatorViewPart;
+
+	/** Sets the navigator view. */
+	public void setNavigatorViewPart(NavigatorViewPart part) {
+		this.navigatorViewPart = part;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public ViewPart getNavigatorView() {
+		return navigatorViewPart;
+	}
 }
diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorViewPart.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorViewPart.java
index 90f8a3293..27cfc1351 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorViewPart.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorViewPart.java
@@ -46,7 +46,9 @@ import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.ViewPart;
 import org.eclipse.ui.progress.UIJob;
 import org.fortiss.tooling.kernel.ToolingKernelActivator;
+import org.fortiss.tooling.kernel.internal.NavigatorService;
 import org.fortiss.tooling.kernel.services.IEditorService;
+import org.fortiss.tooling.kernel.services.INavigatorService;
 import org.fortiss.tooling.kernel.util.EObjectSelectionUtils;
 import org.unicase.ecp.model.ECPWorkspaceManager;
 import org.unicase.ecp.model.NoWorkspaceException;
@@ -81,6 +83,15 @@ public final class NavigatorViewPart extends ViewPart implements
 	/** Stores the menu manager. */
 	private MenuManager menuManager;
 
+	/** Stores the UI update job. */
+	private final UIJob updateUI = new UIJob("Update Model Navigator") {
+		@Override
+		public IStatus runInUIThread(IProgressMonitor monitor) {
+			viewer.refresh();
+			return Status.OK_STATUS;
+		}
+	};
+
 	/** Constructor. */
 	public NavigatorViewPart() {
 		try {
@@ -98,6 +109,9 @@ public final class NavigatorViewPart extends ViewPart implements
 
 		createWorkspaceListener();
 		workspace.eAdapters().add(workspaceListener);
+
+		((NavigatorService) INavigatorService.INSTANCE)
+				.setNavigatorViewPart(this);
 	}
 
 	/**
@@ -124,6 +138,7 @@ public final class NavigatorViewPart extends ViewPart implements
 								.getOldValue();
 						projectSpace.removeECPProjectListener(projectListener);
 					}
+					updateUI.schedule();
 				}
 				super.notifyChanged(msg);
 			}
@@ -143,14 +158,7 @@ public final class NavigatorViewPart extends ViewPart implements
 
 			@Override
 			public void projectChanged() {
-				new UIJob("Update Model Navigator") {
-
-					@Override
-					public IStatus runInUIThread(IProgressMonitor monitor) {
-						viewer.refresh();
-						return Status.OK_STATUS;
-					}
-				}.schedule();
+				updateUI.schedule();
 			}
 
 			@Override
@@ -252,6 +260,9 @@ public final class NavigatorViewPart extends ViewPart implements
 	/** {@inheritDoc} */
 	@Override
 	public void dispose() {
+		((NavigatorService) INavigatorService.INSTANCE)
+				.setNavigatorViewPart(null);
+
 		PlatformUI.getWorkbench().getActiveWorkbenchWindow()
 				.getSelectionService().removeSelectionListener(this);
 		getSite().setSelectionProvider(null);
diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/services/INavigatorService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/services/INavigatorService.java
index abc85cd04..eda351ed1 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/services/INavigatorService.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/services/INavigatorService.java
@@ -17,6 +17,7 @@ $Id$
 +--------------------------------------------------------------------------*/
 package org.fortiss.tooling.kernel.services;
 
+import org.eclipse.ui.part.ViewPart;
 import org.fortiss.tooling.kernel.internal.NavigatorService;
 
 /**
@@ -35,5 +36,9 @@ public interface INavigatorService {
 	/** Returns view id of the navigator view. */
 	public static final String NAVIGATOR_VIEW = "org.fortiss.tooling.kernel.model.navigator";
 
-	// TODO (FH): define
+	/**
+	 * Returns the navigator view part. May return <code>null</code> if
+	 * navigator has not yet been created or has already been disposed.
+	 */
+	ViewPart getNavigatorView();
 }
-- 
GitLab