import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.ui.ISaveablePart;
import eu.etaxonomy.cdm.api.service.DeleteResult;
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
import eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator;
import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
/** {@inheritDoc} */
@Override
public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ if(getPostOperationEnabled() instanceof ISaveablePart){
+ if(!MessagingUtils.confirmDialog("Confirm deletion", "Do you really want to delete the selected element?")){
+ return Status.CANCEL_STATUS;
+ }
+ if(((ISaveablePart) getPostOperationEnabled()).isDirty()){
+ MessagingUtils.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
+ return Status.CANCEL_STATUS;
+ }
+ }
DeleteResult deleteResult = CdmStore.getService(IOccurrenceService.class).deleteDerivateHierarchy(element, deleteConfigurator);
- if(!deleteResult.isOk()){
+ if(deleteResult.isOk()){
+ if(getPostOperationEnabled() instanceof DerivateView){
+ DerivateView derivateView = (DerivateView) getPostOperationEnabled();
+ //update DerivateView
+ derivateView.getConversationHolder().commit();
+ return postExecute(null);
+ }
+ }
+ else{
String exceptionMessage = "";
for(Exception exception:deleteResult.getExceptions()){
exceptionMessage += exception.getLocalizedMessage();
}
//TODO: add method to DeleteResult to sum up exceptions
MessagingUtils.warningDialog("Deletion failed", this, exceptionMessage);
- return postExecute(null);
+ return Status.CANCEL_STATUS;
}
- return postExecute(element);
+ return Status.OK_STATUS;
}
/*
/** {@inheritDoc} */
@Override
public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
- return execute(monitor, info);
+ //no redo possible
+ return Status.CANCEL_STATUS ;
}
/*
/** {@inheritDoc} */
@Override
public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
- return postExecute(element);
+ //no undo possible
+ return Status.CANCEL_STATUS;
}
}