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 1be63a510f124fa3cedda74b499232479018ca7b..78f27cebf64afee4f206c7a9a147f2dab709c464 100644 (file)
@@ -8,25 +8,28 @@
  */
 package eu.etaxonomy.taxeditor.editor.definedterm.e4.handler;
 
+import java.util.UUID;
+
 import javax.inject.Named;
 
 import org.eclipse.core.commands.operations.IUndoContext;
 import org.eclipse.e4.core.di.annotations.CanExecute;
 import org.eclipse.e4.core.di.annotations.Execute;
-import org.eclipse.e4.core.di.annotations.Optional;
+import org.eclipse.e4.ui.di.UISynchronize;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 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.Marker;
-import eu.etaxonomy.cdm.model.common.MarkerType;
-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;
 
 /**
@@ -39,51 +42,63 @@ public class CreateDefinedTermHandlerE4 {
 
     @Execute
     public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart activePart,
-            @Optional@Named(IServiceConstants.ACTIVE_SELECTION) TermBase termBase, MHandledMenuItem menuItem) {
-
+            @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,
+                        parent,
                         termEditor.getDefinedTermEditorInput(),
                         termEditor, addTermAsKindOf);
-        AbstractUtility.executeOperation(operation);
+        AbstractUtility.executeOperation(operation, sync);
 
     }
 
     @CanExecute
-    public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION) TermBase termBase){
-        if (termBase == null){
-            return true;
-        }
-
-        TermVocabulary vocabulary = null;
-
-        if(termBase instanceof DefinedTermBase){
-            vocabulary = ((DefinedTermBase) termBase).getVocabulary();
-        }else if(termBase instanceof TermVocabulary){
-            vocabulary = (TermVocabulary) termBase;
-        }
-
-        if(vocabulary == null){
-            return true;
-        }
-
-        for(Marker vocabularyMarker : vocabulary.getMarkers()){
-            if(vocabularyMarker.getMarkerType().equals(MarkerType.MODIFIABLE())){
-                return vocabularyMarker.getValue();
+    public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION) IStructuredSelection selection,
+            MHandledMenuItem menuItem){
+        boolean canExecute = false;
+        Object firstElement = selection.getFirstElement();
+        canExecute = selection.size()==1
+                &&
+                (firstElement instanceof TermDto
+                        || firstElement instanceof TermVocabularyDto);
+        UUID vocabularyUuid = null;
+
+        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();
             }
         }
-
-        return true;
+             
+        canExecute &= vocabularyUuid!=null
+                // TODO temporary fix for #7933
+                && VocabularyEnum.getVocabularyEnumByUuid(vocabularyUuid) == null;
+        menuItem.setVisible(canExecute);
+        return canExecute;
     }
 
 }