You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ds...@apache.org on 2010/07/22 09:08:10 UTC

svn commit: r966521 - /felix/trunk/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/SigilUI.java

Author: dsavage
Date: Thu Jul 22 07:08:10 2010
New Revision: 966521

URL: http://svn.apache.org/viewvc?rev=966521&view=rev
Log:
add util method to run Callable in UI thread

Modified:
    felix/trunk/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/SigilUI.java

Modified: felix/trunk/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/SigilUI.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/SigilUI.java?rev=966521&r1=966520&r2=966521&view=diff
==============================================================================
--- felix/trunk/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/SigilUI.java (original)
+++ felix/trunk/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/SigilUI.java Thu Jul 22 07:08:10 2010
@@ -24,6 +24,8 @@ import java.io.InputStream;
 import java.lang.reflect.InvocationTargetException;
 import java.util.Locale;
 import java.util.ResourceBundle;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Future;
 
 import org.apache.felix.sigil.eclipse.SigilCore;
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
@@ -190,6 +192,33 @@ public class SigilUI extends AbstractUIP
         getActiveDisplay().asyncExec( runnable );
     }
 
+    @SuppressWarnings("unchecked")
+    public static <T> T runInUISync(final Callable<T> callable) throws Exception
+    {
+        final Object[] result = new Object[1];
+        final Exception[] exception = new Exception[1];
+        runInUISync(new Runnable() {
+            public void run()
+            {
+                try
+                {
+                    result[0] = callable.call();
+                }
+                catch (Exception e)
+                {
+                    exception[0] = e;
+                }
+            }
+            
+        });
+        if ( exception[0] == null ) {
+            return (T) result[0];
+        }
+        else {
+            throw exception[0];
+        }
+    }
+
 
     public static void runInUISync( Runnable runnable )
     {
@@ -230,4 +259,6 @@ public class SigilUI extends AbstractUIP
             return null;
         }
     }
+
+
 }