blob: c9276fc63fdd64f9a6a0c68ccaa318a7292b5d4e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
******************************************************************************/
package org.eclipse.ui.internal;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.WorkbenchException;
import org.eclipse.ui.internal.misc.StatusUtil;
/**
* @since 3.3
*
*/
public final class StartupThreading {
static Workbench workbench;
public static abstract class StartupRunnable implements Runnable {
private Throwable throwable;
public final void run() {
try {
runWithException();
} catch (Throwable t) {
this.throwable = t;
}
}
public abstract void runWithException() throws Throwable;
public Throwable getThrowable() {
return throwable;
}
}
static void setWorkbench(Workbench wb) {
workbench = wb;
}
public static void runWithWorkbenchExceptions(StartupRunnable r)
throws WorkbenchException {
workbench.getDisplay().syncExec(r);
Throwable throwable = r.getThrowable();
if (throwable != null) {
if (throwable instanceof Error) {
throw (Error) throwable;
} else if (throwable instanceof RuntimeException) {
throw (RuntimeException) throwable;
} else if (throwable instanceof WorkbenchException) {
throw (WorkbenchException) throwable;
} else {
throw new WorkbenchException(StatusUtil.newStatus(
WorkbenchPlugin.PI_WORKBENCH, throwable));
}
}
}
public static void runWithPartInitExceptions(StartupRunnable r)
throws PartInitException {
workbench.getDisplay().syncExec(r);
Throwable throwable = r.getThrowable();
if (throwable != null) {
if (throwable instanceof Error) {
throw (Error) throwable;
} else if (throwable instanceof RuntimeException) {
throw (RuntimeException) throwable;
} else if (throwable instanceof WorkbenchException) {
throw (PartInitException) throwable;
} else {
throw new PartInitException(StatusUtil.newStatus(
WorkbenchPlugin.PI_WORKBENCH, throwable));
}
}
}
public static void runWithThrowable(StartupRunnable r) throws Throwable {
workbench.getDisplay().syncExec(r);
Throwable throwable = r.getThrowable();
if (throwable != null) {
throw throwable;
}
}
public static void runWithoutExceptions(StartupRunnable r)
throws RuntimeException {
workbench.getDisplay().syncExec(r);
Throwable throwable = r.getThrowable();
if (throwable != null) {
if (throwable instanceof Error) {
throw (Error) throwable;
} else if (throwable instanceof RuntimeException) {
throw (RuntimeException) throwable;
} else {
throw new RuntimeException(throwable);
}
}
}
}