package eu.etaxonomy.taxeditor.model;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.resource.ColorRegistry;
import org.eclipse.ui.themes.ITheme;
import org.eclipse.ui.themes.IThemeManager;
+import eu.etaxonomy.cdm.database.PermissionDeniedException;
import eu.etaxonomy.cdm.model.common.IEnumTerm;
+import eu.etaxonomy.cdm.persistence.hibernate.permission.SecurityExceptionUtils;
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
* @param status
* a {@link org.eclipse.core.runtime.IStatus} object.
*/
- public static void errorDialog(final String title, final Object source,
+ public static void errorDialog(final String title, final Object source,
final IStatus status) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
- MessageDialog.openError(getShell(), title, status.getMessage());
+ ErrorDialog.openError(getShell(), title, null, status);
Class<? extends Object> clazz = source != null ? source
.getClass() : this.getClass();
- error(clazz, status.getMessage(), status.getException());
+ error(clazz, status);
}
});
}
status = getOperationHistory().execute(operation, monitor,
uiInfoAdapter);
} catch (ExecutionException e) {
- errorDialog("Error executing operation", getClass(), String.format("An error occured while executing %s.", operation.getLabel()), e);
+ MultiStatus info = null;
+ String title = null;
+
+ // FIXME cannot access TaxonomicEditorPlugin.PLUGIN_ID from here
+ // String PID = TaxonomicEditorPlugin.PLUGIN_ID;
+ String PID = "eu.etaxonomy.taxeditor.application";
+
+ RuntimeException securityRuntimeException = SecurityExceptionUtils.findSecurityRuntimeException(e);
+
+ if(securityRuntimeException != null){
+ title = "Your changes could not be saved!";
+ info = new MultiStatus(PID, 1, String.format("You are missing sufficient permissions for the operation \"%s\".", operation.getLabel()), null);
+ info.add(new Status(IStatus.WARNING, PID, 1, securityRuntimeException.getMessage(), null));
+
+ } else {
+ title = "Error executing operation";
+ info = new MultiStatus(PID, 1, String.format("An error occured while executing %s.", operation.getLabel()), null);
+ Writer writer = new StringWriter();
+ PrintWriter printWriter = new PrintWriter(writer);
+ e.printStackTrace(printWriter);
+ info.add(new Status(IStatus.ERROR, PID, 1, writer.toString(), null));
+ }
+
+ errorDialog(title, getClass(), info);
+
} finally {
monitor.done();
}