fix for #3998
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / key / polytomous / handler / DeleteNodeHandler.java
index f65f3fdc455c9b7e83959049037b0a5af03154e5..4fc42da010535d14387ff4b3c0c0812b3b5c9ac7 100644 (file)
@@ -20,6 +20,9 @@ import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.handlers.HandlerUtil;
 
+import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
+import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService;
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.key.KeyEditor;
@@ -27,6 +30,7 @@ import eu.etaxonomy.taxeditor.editor.key.polytomous.IPolytomousKeyEditorPage;
 import eu.etaxonomy.taxeditor.editor.key.polytomous.operation.DeleteNodeOperation;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * @author n.hoffmann
@@ -46,6 +50,15 @@ public class DeleteNodeHandler extends AbstractHandler {
        public Object execute(ExecutionEvent event) throws ExecutionException {
                IEditorPart editor = HandlerUtil.getActiveEditor(event);
 
+               if (editor.isDirty()){
+                       boolean proceed = MessageDialog.openQuestion(null,
+                                       "Save changes", "You have made changes that must be saved before you can delete the node. Would you like to proceed?");
+                       if (!proceed) {
+                               return null;
+                       }else{
+                               editor.doSave(EditorUtil.getMonitor());
+                       }
+               }
                if (editor instanceof KeyEditor) {
                        IPolytomousKeyEditorPage editorPage = (IPolytomousKeyEditorPage) ((KeyEditor) editor)
                                        .getActiveEditor();
@@ -59,8 +72,8 @@ public class DeleteNodeHandler extends AbstractHandler {
                                        IUndoContext undoContext = EditorUtil.getUndoContext();
 
                                        for (Object element : selection.toArray()) {
-                                               PolytomousKeyNode keyNode = (PolytomousKeyNode) element;
-
+                                               PolytomousKeyNode keyNode = HibernateProxyHelper.deproxy(element, PolytomousKeyNode.class);
+                                               
                                                AbstractPostOperation operation = new DeleteNodeOperation(
                                                                label, undoContext, keyNode, editorPage);
                                                EditorUtil.executeOperation(operation);