core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/discovery/ui/Activator.java
changeset 1734 bf670d38123a
parent 1721 18638adda547
child 1744 48b623de4c8e
--- a/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/discovery/ui/Activator.java	Thu Jul 29 15:31:29 2010 -0500
+++ b/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/discovery/ui/Activator.java	Mon Aug 02 08:44:45 2010 -0500
@@ -21,18 +21,24 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 import java.text.MessageFormat;
 import java.util.Properties;
 
 import org.eclipse.core.net.proxy.IProxyData;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.osgi.service.datalocation.Location;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
 
@@ -50,6 +56,8 @@
 
 	private static final String PROPERTY_PROXYPORT = "network.proxy_port"; //$NON-NLS-1$
 	private static final String PROPERTY_PROXYHOST = "network.proxy_host"; //$NON-NLS-1$
+
+	private boolean proxyDataAvailable;
 	
 	/**
 	 * The constructor
@@ -64,13 +72,66 @@
 	public void start(BundleContext context) throws Exception {
 		plugin = this;
 		super.start(context);
-		IProxyData proxyData = ProxyUtils.getProxyData(new URI("http://www.yahoo.com")); //$NON-NLS-1$
-		if (proxyData != null) {
-			System.setProperty(PROPERTY_PROXYHOST, proxyData.getHost());
-			System.setProperty(PROPERTY_PROXYPORT, String.valueOf(proxyData.getPort()));
-		}
+		Job j = new Job("Getting proxy info") {
+			@Override
+			protected IStatus run(IProgressMonitor monitor) {
+				try {
+					IProxyData proxyData = ProxyUtils.getProxyData(new URI("http://www.yahoo.com"));
+					if (proxyData != null) {
+						System.setProperty(PROPERTY_PROXYHOST, proxyData.getHost());
+						System.setProperty(PROPERTY_PROXYPORT, String.valueOf(proxyData.getPort()));
+					}
+				} catch (URISyntaxException e) {
+				} //$NON-NLS-1$
+				setProxyDataAvailable();
+				return Status.OK_STATUS;
+			}
+		};
+		j.setSystem(true);
+		j.setUser(false);
+		j.schedule();
+	}
+
+	private synchronized void setProxyDataAvailable() {
+		proxyDataAvailable = true;
+	}
+	
+	public synchronized boolean isProxyDataAvailable() {
+		return proxyDataAvailable;
 	}
 
+	public static void runInUIThreadWhenProxyDataSet(final Control control, final Runnable r) {
+		Job j = new Job("") {
+			@Override
+			protected IStatus run(IProgressMonitor monitor) {
+				setBusyCursor(control, true);
+				Activator activator = getDefault();
+				while (!activator.isProxyDataAvailable()) {
+					try {
+						Thread.sleep(200);
+					} catch (InterruptedException e) {
+					}
+				}
+				setBusyCursor(control, false);
+				Display.getDefault().asyncExec(r);
+				return Status.OK_STATUS;
+			}
+		};
+		j.setSystem(true);
+		j.setUser(false);
+		j.schedule();
+	}
+	
+	public static void setBusyCursor(final Control control, final boolean isBusy) {
+		final Display display = control.getDisplay();
+		display.syncExec(new Runnable() {
+			@Override
+			public void run() {
+				control.setCursor(isBusy ? display.getSystemCursor(SWT.CURSOR_WAIT) : null);
+			}
+		});
+	}
+	
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)