*/
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;
/**
@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;
}
}