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.jface.viewers.TreeNode;
+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.api.service.molecular.ISequenceService;
import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.molecular.Sequence;
+import eu.etaxonomy.cdm.model.molecular.SingleRead;
+import eu.etaxonomy.taxeditor.editor.Messages;
+import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.dialog.deleteConfigurator.DeleteConfiguratorDialog;
/**
*
public class DeleteDerivateOperation extends AbstractPostOperation<CdmBase> {
private final SpecimenDeleteConfigurator deleteConfigurator;
+ private final TreeNode treeNode;
- public DeleteDerivateOperation(String label, IUndoContext undoContext, CdmBase element,
+ public DeleteDerivateOperation(String label, IUndoContext undoContext, CdmBase element, TreeNode treeNode,
IPostOperationEnabled postOperationEnabled) {
- this(label, undoContext, element, postOperationEnabled, new SpecimenDeleteConfigurator());
+ this(label, undoContext, element, treeNode, postOperationEnabled, new SpecimenDeleteConfigurator());
}
- public DeleteDerivateOperation(String label, IUndoContext undoContext, CdmBase element,
+ public DeleteDerivateOperation(String label, IUndoContext undoContext, CdmBase element, TreeNode treeNode,
IPostOperationEnabled postOperationEnabled, SpecimenDeleteConfigurator config) {
super(label, undoContext, element, postOperationEnabled);
this.deleteConfigurator = config;
+ this.treeNode = treeNode;
}
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse
- * .core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
- */
/** {@inheritDoc} */
@Override
public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
- DeleteResult deleteResult = CdmStore.getService(IOccurrenceService.class).deleteDerivateHierarchy(element, deleteConfigurator);
- if(!deleteResult.isOk()){
- String exceptionMessage = "";
- for(Exception exception:deleteResult.getExceptions()){
- exceptionMessage += exception.getLocalizedMessage();
+ if(getPostOperationEnabled() instanceof ISaveablePart){
+ String confirmationQuestion = Messages.DeleteDerivateOperation_REALLY_DELETE;
+ if(deleteConfigurator.isDeleteChildren()){
+ confirmationQuestion += Messages.DeleteDerivateOperation_AND_CHILDREN;
}
- //TODO: add method to DeleteResult to sum up exceptions
- MessagingUtils.warningDialog("Deletion failed", this, exceptionMessage);
- return postExecute(null);
+ confirmationQuestion += "?"; //$NON-NLS-1$
+ if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(deleteConfigurator, null, Messages.DeleteDerivateOperation_CONFIRM, confirmationQuestion)){
+ return Status.CANCEL_STATUS;
+ }
+ if(((ISaveablePart) getPostOperationEnabled()).isDirty()){
+ MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
+ return Status.CANCEL_STATUS;
+ }
+ }
+ DeleteResult deleteResult;
+ if(element instanceof SingleRead && treeNode!=null
+ && treeNode.getValue().equals(element)
+ && treeNode.getParent()!=null
+ && treeNode.getParent().getValue() instanceof Sequence){
+ deleteResult = CdmStore.getService(IOccurrenceService.class).deleteSingleRead(((SingleRead)element).getUuid(),
+ ((Sequence) treeNode.getParent().getValue()).getUuid());
+ } else if(element instanceof Sequence){
+ deleteResult = CdmStore.getService(ISequenceService.class).delete(element.getUuid(), deleteConfigurator);
+ } else {
+ deleteResult = CdmStore.getService(IOccurrenceService.class).deleteDerivateHierarchy(element.getUuid(), deleteConfigurator);
+ }
+ if(deleteResult.isOk()){
+ if(getPostOperationEnabled() instanceof DerivateView){
+ DerivateView derivateView = (DerivateView) getPostOperationEnabled();
+ derivateView.remove(element);
+ //update DerivateView
+ derivateView.getConversationHolder().commit();
+ IStatus returnStatus = postExecute(null);
+ //close if no more items left
+ if(derivateView.getViewer().getTree().getItemCount()<1){
+ AbstractUtility.close(derivateView);
+ }
+ return returnStatus;
+ }
+ }
+ else{
+ MessagingUtils.warningDialog(Messages.DeleteDerivateOperation_DELETE_FAILED, this, deleteResult.toString());
+ return Status.CANCEL_STATUS;
}
- return postExecute(element);
+ return Status.OK_STATUS;
}
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse
- * .core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
- */
/** {@inheritDoc} */
@Override
public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
- return execute(monitor, info);
+ //no redo possible
+ return Status.CANCEL_STATUS ;
}
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse
- * .core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
- */
/** {@inheritDoc} */
@Override
public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
- return postExecute(element);
+ //no undo possible
+ return Status.CANCEL_STATUS;
}
}