ref #10316: TermNodeDto should not contain termtreedto, only some
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / editor / definedterm / e4 / handler / CreateDefinedTermHandlerE4.java
index 8d25e4a6bf708667cc2cf7f18e77fcf549b34598..78f27cebf64afee4f206c7a9a147f2dab709c464 100644 (file)
@@ -8,6 +8,8 @@
  */
 package eu.etaxonomy.taxeditor.editor.definedterm.e4.handler;
 
+import java.util.UUID;
+
 import javax.inject.Named;
 
 import org.eclipse.core.commands.operations.IUndoContext;
@@ -19,13 +21,15 @@ import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
 import org.eclipse.e4.ui.services.IServiceConstants;
 import org.eclipse.jface.viewers.IStructuredSelection;
 
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;
-import eu.etaxonomy.cdm.model.common.TermBase;
-import eu.etaxonomy.cdm.model.common.TermVocabulary;
+import eu.etaxonomy.cdm.model.term.VocabularyEnum;
+import eu.etaxonomy.cdm.persistence.dto.AbstractTermDto;
+import eu.etaxonomy.cdm.persistence.dto.TermDto;
+import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
 import eu.etaxonomy.taxeditor.editor.definedterm.e4.DefinedTermEditorE4;
 import eu.etaxonomy.taxeditor.editor.definedterm.operation.CreateDefinedTermOperation;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
+import eu.etaxonomy.taxeditor.store.AppModelId;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
 
 /**
@@ -40,19 +44,24 @@ public class CreateDefinedTermHandlerE4 {
     public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart activePart,
             @Named(IServiceConstants.ACTIVE_SELECTION) IStructuredSelection selection, MHandledMenuItem menuItem,
             UISynchronize sync) {
-
         DefinedTermEditorE4 termEditor = (DefinedTermEditorE4) activePart.getObject();
-
+        if(StoreUtil.promptCheckIsDirty(termEditor)){
+            return;
+        }
         boolean addTermAsKindOf =
-                menuItem.getCommand().getElementId().equals("eu.etaxonomy.taxeditor.editor.definedTerms.newKindOfTerm")?true:false;
+                menuItem.getCommand().getElementId()
+                .equals(AppModelId.COMMAND_EU_ETAXONOMY_TAXEDITOR_EDITOR_DEFINEDTERMS_NEWKINDOFTERM)?true:false;
 
         String label = menuItem.getLocalizedLabel();
         IUndoContext undoContext = StoreUtil.getUndoContext();
-
+        AbstractTermDto parent = null;
+        if (selection.getFirstElement() instanceof AbstractTermDto){
+            parent = (AbstractTermDto) selection.getFirstElement();
+        }
         AbstractPostOperation operation =
                 new CreateDefinedTermOperation(label,
                         undoContext,
-                        (TermBase) selection.getFirstElement(),
+                        parent,
                         termEditor.getDefinedTermEditorInput(),
                         termEditor, addTermAsKindOf);
         AbstractUtility.executeOperation(operation, sync);
@@ -66,16 +75,28 @@ public class CreateDefinedTermHandlerE4 {
         Object firstElement = selection.getFirstElement();
         canExecute = selection.size()==1
                 &&
-                (firstElement instanceof DefinedTermBase
-                        || firstElement instanceof TermVocabulary);
-        TermVocabulary vocabulary = null;
+                (firstElement instanceof TermDto
+                        || firstElement instanceof TermVocabularyDto);
+        UUID vocabularyUuid = null;
 
-        if(firstElement instanceof DefinedTermBase){
-            vocabulary = ((DefinedTermBase) firstElement).getVocabulary();
-        }else if(firstElement instanceof TermVocabulary){
-            vocabulary = (TermVocabulary) firstElement;
+        if(firstElement instanceof TermDto){
+            if (((TermDto)firstElement).isManaged() || ((TermDto)firstElement).getVocabularyDto().isManaged()) {
+                return false;
+            }
+            vocabularyUuid = ((TermDto) firstElement).getVocabularyUuid();
+        }else if(firstElement instanceof TermVocabularyDto) {
+            if (((TermVocabularyDto)firstElement).isManaged()) {
+                return false;
+            }
+            if (!menuItem.getCommand().getElementId()
+                    .equals(AppModelId.COMMAND_EU_ETAXONOMY_TAXEDITOR_EDITOR_DEFINEDTERMS_NEWKINDOFTERM)){
+                vocabularyUuid = ((TermVocabularyDto) firstElement).getUuid();
+            }
         }
-        canExecute &= vocabulary!=null;
+             
+        canExecute &= vocabularyUuid!=null
+                // TODO temporary fix for #7933
+                && VocabularyEnum.getVocabularyEnumByUuid(vocabularyUuid) == null;
         menuItem.setVisible(canExecute);
         return canExecute;
     }