- allow creation of derivates only when editor is not dirty
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / contextMenu / CreateDerivateContextMenu.java
index a98bbb423d7eb80a89332bdc8835b50477f03daa..2a74174c3c463ecc4d7b39ea2e53241a577082a2 100644 (file)
@@ -9,7 +9,6 @@ import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.CompoundContributionItem;
@@ -29,6 +28,7 @@ import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 
 /**
  * Context menu for the creation of derivates in the derivate hierarchy.
@@ -127,6 +127,18 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
          */
         @Override
         public void widgetSelected(SelectionEvent e) {
+            DerivateView derivateView = null;
+            if(AbstractUtility.getActivePart() instanceof DerivateView){
+                derivateView = (DerivateView) AbstractUtility.getActivePart();
+            }
+            if(derivateView!=null){
+                if(derivateView.isDirty()){
+                    e.doit = false;
+                    MessagingUtils.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
+                    return;
+                }
+            }
+
             Object createdElement = null;
             Object selectedDerivate = selectedNode.getValue();
             if(selectedDerivate instanceof DnaSample && ((DnaSample) selectedDerivate).getRecordBasis()==SpecimenOrObservationType.DnaSample){
@@ -168,10 +180,8 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
             }
 
             //refresh view
-            IWorkbenchPart activePart = AbstractUtility.getActivePart();
-            if(activePart instanceof DerivateView){
-                DerivateView derivateView = (DerivateView)activePart;
-                derivateView.changed(null);
+            if(derivateView!=null){
+                derivateView.getConversationHolder().commit();
                 derivateView.refreshTree(createdElement);
             }
         }