package org.gudy.azureus2.ui.swt.shells;
import org.eclipse.swt.widgets.Shell;
import org.gudy.azureus2.core3.util.AERunnable;
import org.gudy.azureus2.core3.util.AEThread2;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.ui.swt.Utils;
import com.aelitis.azureus.core.AzureusCore;
import com.aelitis.azureus.core.AzureusCoreFactory;
import com.aelitis.azureus.core.AzureusCoreRunningListener;
import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT;
public class CoreWaiterSWT
{
private static boolean DEBUG = false;
public enum TriggerInThread {
SWT_THREAD, ANY_THREAD, NEW_THREAD
}
private static Shell shell;
public static void waitForCoreRunning(final AzureusCoreRunningListener l) {
waitForCore(TriggerInThread.SWT_THREAD, l);
}
public static void waitForCore(final TriggerInThread triggerInThread,
final AzureusCoreRunningListener l) {
AzureusCoreFactory.addCoreRunningListener(new AzureusCoreRunningListener() {
public void azureusCoreRunning(final AzureusCore core) {
if (triggerInThread == TriggerInThread.ANY_THREAD) {
l.azureusCoreRunning(core);
} else if (triggerInThread == TriggerInThread.NEW_THREAD) {
new AEThread2("CoreWaiterInvoke", true) {
public void run() {
l.azureusCoreRunning(core);
}
}.start();
}
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
// TODO: Need to detect cancel (can't rely on shell status since it may never open)
if (shell != null && !shell.isDisposed()) {
shell.dispose();
shell = null;
}
if (triggerInThread == TriggerInThread.SWT_THREAD) {
l.azureusCoreRunning(core);
}
}
});
}
});
if (!AzureusCoreFactory.isCoreRunning()) {
if (DEBUG) {
System.out.println("NOT AVAIL FOR " + Debug.getCompressedStackTrace());
}
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
showWaitWindow();
}
});
} else if (DEBUG) {
System.out.println("NO NEED TO WAIT.. CORE AVAIL! "
+ Debug.getCompressedStackTrace());
}
}
protected static void showWaitWindow() {
if (shell != null && !shell.isDisposed()) {
shell.forceActive();
return;
}
shell = UIFunctionsManagerSWT.getUIFunctionsSWT().showCoreWaitDlg();
}
}