import java.util.ArrayList;
import java.util.List;
+import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
-import eu.etaxonomy.cdm.persistence.hibernate.permission.SecurityExceptionUtils;
+import eu.etaxonomy.cdm.test.integration.SecurityExceptionUtils;
import eu.etaxonomy.taxeditor.store.CdmStore;
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
public final static String UNEXPECTED_ERROR_MESSAGE = "This is an unexpected error.";
public final static String CONTACT_MESSAGE = System.getProperty("line.separator") + "Please contact EDIT Support (EditSupport@bgbm.org) with the error trace below (click on the 'Details' button).";
public final static String DEFAULT_MESSAGE = "Error thrown but no associated message";
+ public final static String CONNECTION_FAILURE_MESSAGE = "The connection to the remote server has been broken";
+ public final static String REMOTE_ACCESS_FAILURE_MESSAGE = "Problem accessing remote server";
+ public static final String WIDGET_IS_DISPOSED_MESSAGE = "A widget was called, which was already disposed";
/**
* Gets the Log4J logger for a given class
contextInfo.add("editor version : " + version);
contextInfo.add("server : " + server + " / " + name);
contextInfo.add("schema version : " + schemaVersion);
+ contextInfo.add("os : " + System.getProperty("os.name")+" "+System.getProperty("os.version")+" "+System.getProperty("os.arch"));
+ contextInfo.add("java : "+System.getProperty("java.version"));
return contextInfo;
}
return stackTraceAndContextInfo.toString();
}
+ public static String getContextInfo(List<String> contextInfo) {
+ StringBuffer scontextInfoStringBuffer = new StringBuffer();
+
+
+ for(String infoItem : contextInfo) {
+ scontextInfoStringBuffer.append(infoItem + System.getProperty("line.separator"));
+ }
+
+
+
+ return scontextInfoStringBuffer.toString();
+ }
+
private static Throwable getDefaultThrowable() {
return new Throwable("Error thrown but no associated exception");
}
final Throwable t,
final List<String> contextInfo,
final String message,
- final MultiStatus status) {
+ final MultiStatus status,
+ final boolean showReason) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
String stackTraceWithContext = getStackTraceAndContextInfo(t, contextInfo);
- CdmErrorDialog ced = new CdmErrorDialog(AbstractUtility.getShell(), title, message, status, stackTraceWithContext);
+ CdmErrorDialog ced = new CdmErrorDialog(AbstractUtility.getShell(), title, message, status, stackTraceWithContext, showReason);
ced.open();
Class<? extends Object> clazz = source != null ? source.getClass() : this.getClass();
});
}
+ public static void errorDialog(final String title,
+ final Object source,
+ final String message,
+ final String pluginId,
+ final Throwable t,
+ boolean addContactMesg) {
+ errorDialog(title, source, message, pluginId, t, addContactMesg, true);
+
+ }
/**
* Displays a {@link eu.etaxonomy.taxeditor.model.CdmErrorDialog}.
*
final String message,
final String pluginId,
final Throwable t,
- boolean addContactMesg) {
+ boolean addContactMesg,
+ boolean showReason) {
Throwable throwable = t;
StringBuffer sbStackTrace = new StringBuffer();
throwable = getDefaultThrowable();
}
- // add main execption
- for (StackTraceElement ste : throwable.getStackTrace()) {
- childStatuses.add(new Status(IStatus.ERROR, pluginId, "at " + ste.toString()));
- }
+ int thCount = 0;
+ int maxTraces = 4;
- // add cause
- if(throwable.getCause() != null) {
- childStatuses.add(new Status(IStatus.ERROR, pluginId, ""));
- childStatuses.add(new Status(IStatus.ERROR, pluginId, "Caused by : " + throwable.getCause().toString()));
- for (StackTraceElement ste : throwable.getCause().getStackTrace()) {
- // build & add status
- childStatuses.add(new Status(IStatus.ERROR, pluginId, "at " + ste.toString()));
+ for(Throwable th : ExceptionUtils.getThrowables(throwable)) {
+ // add main exception
+ if(thCount == 0) {
+ for (StackTraceElement ste : th.getStackTrace()) {
+ childStatuses.add(new Status(IStatus.ERROR, pluginId, " at " + ste.toString()));
+ }
+ } else {
+ // add recursive causes
+ if(th != null) {
+ childStatuses.add(new Status(IStatus.ERROR, pluginId, ""));
+ String msg = th.toString();
+ childStatuses.add(new Status(IStatus.ERROR, pluginId, "Caused by : " + msg));
+ int traceCount = 0;
+ for (StackTraceElement ste : th.getStackTrace()) {
+ // add only pre-defined number of trace elements
+ if(traceCount > maxTraces) {
+ childStatuses.add(new Status(IStatus.ERROR, pluginId, " ...."));
+ break;
+ }
+ // build & add status
+ childStatuses.add(new Status(IStatus.ERROR, pluginId, " at " + ste.toString()));
+ traceCount++;
+ }
+ }
}
+ thCount++;
}
-
String finalMessage = message;
if(finalMessage == null || finalMessage.isEmpty()) {
throwable.toString(),
throwable);
- errorDialog(title, source, throwable, contextInfo, finalMessage, ms);
+ errorDialog(title, source, throwable, contextInfo, finalMessage, ms, showReason);
}
/**