From b635da471d23ffc201bfe18285c5282b23c5fa80 Mon Sep 17 00:00:00 2001 From: Greg Watson Date: Tue, 13 Aug 2013 16:03:43 -0400 Subject: [PATCH] Merge changes. Signed-off-by: Greg Watson --- .../internal/remote/ui/messages/Messages.java | 2 + .../remote/ui/messages/messages.properties | 1 + .../eclipse/remote/ui/RemoteUIServices.java | 41 +++++++++++-------- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/Messages.java b/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/Messages.java index d464644f561..fdf7df9f065 100644 --- a/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/Messages.java +++ b/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/Messages.java @@ -56,6 +56,8 @@ public class Messages extends NLS { public static String RemoteResourceBrowser_Show_hidden_files; public static String RemoteResourceBrowser_UpOneLevel; + public static String RemoteUIServices_Configuring_remote_services; + public static String RemoteUIServicesProxy_1; public static String RemoteUIServicesProxy_2; diff --git a/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/messages.properties b/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/messages.properties index 1604312f7d7..70f035eebbf 100644 --- a/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/messages.properties +++ b/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/messages.properties @@ -37,5 +37,6 @@ RemoteResourceBrowser_newConnection=New... RemoteResourceBrowser_NewFolder=New folder RemoteResourceBrowser_Show_hidden_files=Show hidden files RemoteResourceBrowser_UpOneLevel=Up one level +RemoteUIServices_Configuring_remote_services=Configuring remote services... RemoteUIServicesProxy_1=Missing {0} attribute RemoteUIServicesProxy_2=Failed to instantiate factory: {0} in type: {1} in plugin: {2} diff --git a/org.eclipse.remote.ui/src/org/eclipse/remote/ui/RemoteUIServices.java b/org.eclipse.remote.ui/src/org/eclipse/remote/ui/RemoteUIServices.java index 40c3dd37ec1..f9b1b1e5ab4 100644 --- a/org.eclipse.remote.ui/src/org/eclipse/remote/ui/RemoteUIServices.java +++ b/org.eclipse.remote.ui/src/org/eclipse/remote/ui/RemoteUIServices.java @@ -22,6 +22,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Platform; import org.eclipse.internal.remote.ui.RemoteUIPlugin; import org.eclipse.internal.remote.ui.RemoteUIServicesProxy; +import org.eclipse.internal.remote.ui.messages.Messages; import org.eclipse.jface.operation.IRunnableContext; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.remote.core.IRemoteServices; @@ -37,6 +38,7 @@ public class RemoteUIServices { private static final String EXTENSION_POINT_ID = "remoteUIServices"; //$NON-NLS-1$ private static Map fRemoteUIServices = null; + private static Map fRemoteServices = new HashMap(); /** * Look up a remote service provider and ensure it is initialized. The method will use the supplied container's progress @@ -50,25 +52,32 @@ public class RemoteUIServices { * @since 5.0 */ public static IRemoteServices getRemoteServices(final String id, IRunnableContext context) { - final IRemoteServices[] remoteService = new IRemoteServices[1]; - IRunnableWithProgress runnable = new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - remoteService[0] = RemoteServices.getRemoteServices(id, monitor); + IRemoteServices service = fRemoteServices.get(id); + if (service == null) { + final IRemoteServices[] remoteService = new IRemoteServices[1]; + IRunnableWithProgress runnable = new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + monitor.beginTask(Messages.RemoteUIServices_Configuring_remote_services, 10); + remoteService[0] = RemoteServices.getRemoteServices(id, monitor); + } + }; + try { + if (context != null) { + context.run(true, false, runnable); + } else { + PlatformUI.getWorkbench().getProgressService().busyCursorWhile(runnable); + } + } catch (InvocationTargetException e) { + // Ignored + } catch (InterruptedException e) { + // cancelled } - }; - try { - if (context != null) { - context.run(true, false, runnable); - } else { - PlatformUI.getWorkbench().getProgressService().busyCursorWhile(runnable); + service = remoteService[0]; + if (service != null) { + fRemoteServices.put(id, service); } - } catch (InvocationTargetException e) { - // Ignored - } catch (InterruptedException e) { - // cancelled } - - return remoteService[0]; + return service; } /**