ref #6909 Implement menu item/handler visibility
authorPatrick Plitzner <p.plitzner@bgbm.org>
Tue, 5 Sep 2017 16:39:08 +0000 (18:39 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Tue, 5 Sep 2017 16:39:08 +0000 (18:39 +0200)
eu.etaxonomy.taxeditor.navigation/META-INF/MANIFEST.MF
eu.etaxonomy.taxeditor.navigation/fragment.e4xmi
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/handler/ChangeAcceptedTaxonToSynonymHandlerE4.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/handler/CloneClassificationHandlerE4.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/handler/CreateClassificationHierarchyHandlerE4.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/handler/DeleteHandlerE4.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/handler/MoveFactualDataHandlerE4.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/handler/MoveTaxonHandlerE4.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/handler/NewTaxonNodeHandlerE4.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/handler/RefreshTreeHandlerE4.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/handler/SetSecReferenceForSubtreeHandlerE4.java

index db6c54b6f2de0967e917d320fdfb8053293ec512..20684c3f3d3b655243c3f49dca538bee5db88151 100644 (file)
@@ -24,7 +24,8 @@ Require-Bundle: org.eclipse.ui,
  org.eclipse.e4.ui.di,
  javax.inject,
  org.eclipse.e4.ui.services,
- org.eclipse.e4.ui.workbench
+ org.eclipse.e4.ui.workbench,
+ org.eclipse.e4.core.di.annotations
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.eclipse.core.resources,
  org.eclipse.core.runtime,
index d30ad49df77fc97bf559535eefdd661f31f136db..ff74818109094fdcbd9d66e448e017e9bda8f754 100644 (file)
@@ -23,6 +23,9 @@
           <children xsi:type="menu:MenuSeparator" xmi:id="_33c4IJIvEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.menuseparator.0"/>
           <children xsi:type="menu:HandledMenuItem" xmi:id="_4dTXMJIvEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.menu.new.classification" label="%command.label.3" command="_Vco-4JIxEeeJAdt8ZUxyaw"/>
         </children>
+        <children xsi:type="menu:MenuSeparator" xmi:id="_24NMMJIwEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.menuseparator.5"/>
+        <children xsi:type="menu:DynamicMenuContribution" xmi:id="_3d1BwJIwEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.dynamicmenucontribution.openInCdmViewer" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.view.CdmViewerContextMenuE4"/>
+        <children xsi:type="menu:MenuSeparator" xmi:id="_h3uU0JJYEee-eM8NeuXskA" elementId="eu.etaxonomy.taxeditor.navigation.menuseparator.6"/>
         <children xsi:type="menu:HandledMenuItem" xmi:id="_9hdNkJIvEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.handledmenuitem.fixclassificationhierarchy" label="%command.label.fixClassificationHierarchy" command="_jXX0YJIxEeeJAdt8ZUxyaw"/>
         <children xsi:type="menu:HandledMenuItem" xmi:id="_ivOrwJIwEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.handledmenuitem.cloneclassification" label="Clone Classification" command="_nOOxMJIxEeeJAdt8ZUxyaw"/>
         <children xsi:type="menu:MenuSeparator" xmi:id="_ktyqMJIwEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.menuseparator.1"/>
         <children xsi:type="menu:MenuSeparator" xmi:id="_x0uEMJIwEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.menuseparator.3" visible="false"/>
         <children xsi:type="menu:HandledMenuItem" xmi:id="_yH9JQJIwEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.handledmenuitem.delete" label="%command.label.10" command="__n644JIxEeeJAdt8ZUxyaw"/>
         <children xsi:type="menu:MenuSeparator" xmi:id="_z0Q6EJIwEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.menuseparator.4"/>
-        <children xsi:type="menu:HandledMenuItem" xmi:id="_0FX4MJIwEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.handledmenuitem.refresh" label="%command.label.11" command="_ukhM0JIyEeeJAdt8ZUxyaw"/>
+        <children xsi:type="menu:HandledMenuItem" xmi:id="_0FX4MJIwEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.handledmenuitem.refresh" label="%command.label.11" command="_ukhM0JIyEeeJAdt8ZUxyaw">
+          <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_LmLlYJJYEee-eM8NeuXskA" coreExpressionId="isCdmStoreConnected"/>
+        </children>
         <children xsi:type="menu:HandledMenuItem" xmi:id="_1JIbQJIwEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.handledmenuitem.copy" label="%command.label.12" command="_EJ-u0JIyEeeJAdt8ZUxyaw"/>
-        <children xsi:type="menu:MenuSeparator" xmi:id="_24NMMJIwEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.menuseparator.5"/>
-        <children xsi:type="menu:DynamicMenuContribution" xmi:id="_3d1BwJIwEeeJAdt8ZUxyaw" elementId="eu.etaxonomy.taxeditor.navigation.dynamicmenucontribution.openInCdmViewer" contributionURI="bundleclass://eu.etaxonomy.taxeditor.store/eu.etaxonomy.taxeditor.view.CdmViewerContextMenuE4"/>
       </menus>
     </elements>
   </fragments>
index d89afe0fb2d3a9b46f9906411aa9fda8b26746e4..89b7911c6e5d92a363114344061d937f0791c69f 100644 (file)
@@ -12,6 +12,7 @@ import java.util.UUID;
 
 import javax.inject.Named;
 
+import org.eclipse.e4.core.di.annotations.CanExecute;
 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;
@@ -116,6 +117,11 @@ public class ChangeAcceptedTaxonToSynonymHandlerE4 extends DeleteHandlerE4 imple
                }
        }
 
+    @CanExecute
+    private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection){
+        return selection.getFirstElement() instanceof TaxonNode;
+    }
+
        /** {@inheritDoc} */
        @Override
     public boolean postOperation(CdmBase objectAffectedByOperation) {
index 91a3fe0fcb7b7c930d10ad7bef32e15089c1ab11..187e21a629e0b487bc4d4a0d63090cca27586713 100644 (file)
@@ -2,6 +2,7 @@ package eu.etaxonomy.taxeditor.navigation.navigator.e4.handler;
 
 import javax.inject.Named;
 
+import org.eclipse.e4.core.di.annotations.CanExecute;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.services.IServiceConstants;
 import org.eclipse.jface.viewers.TreeSelection;
@@ -17,6 +18,8 @@ import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
 import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
 import eu.etaxonomy.taxeditor.navigation.navigator.e4.TaxonNavigatorE4;
 import eu.etaxonomy.taxeditor.navigation.operation.CloneClassificationOperation;
+import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
 import eu.etaxonomy.taxeditor.ui.section.classification.CloneClassificationWizard;
 
@@ -54,4 +57,8 @@ public class CloneClassificationHandlerE4 {
         }
     }
 
+    @CanExecute
+    private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection){
+        return selection.getFirstElement() instanceof Classification && PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_EXPERIMENTAL_FEATURES);
+    }
 }
index 2ebb682e73b06a1fa2d54b5551f0179befe2b9f8..8a25e3a5761874e707be25bc0dd3a7ef20d4ef02 100644 (file)
@@ -2,6 +2,7 @@ package eu.etaxonomy.taxeditor.navigation.navigator.e4.handler;
 
 import javax.inject.Named;
 
+import org.eclipse.e4.core.di.annotations.CanExecute;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.services.IServiceConstants;
 import org.eclipse.jface.viewers.TreeSelection;
@@ -13,6 +14,8 @@ import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
 import eu.etaxonomy.taxeditor.navigation.navigator.e4.TaxonNavigatorE4;
 import eu.etaxonomy.taxeditor.navigation.operation.CreateNewTaxonHierarchyOperation;
+import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
 
 /**
@@ -28,17 +31,23 @@ public class CreateClassificationHierarchyHandlerE4 {
 
         TaxonNavigatorE4 taxonNavigator = (TaxonNavigatorE4) activePart.getObject();
 
-            Object selectedElement = selection.getFirstElement();
-            if (selectedElement instanceof TaxonNode && !((TaxonNode)selectedElement).hasTaxon()) {
-                Classification classification = ((TaxonNode) selectedElement).getClassification();
-                try {
-                    CreateNewTaxonHierarchyOperation operation = new CreateNewTaxonHierarchyOperation(Messages.CreateClassificationHierarchyHandler_CREATE_HIERARCHY, StoreUtil.getUndoContext(),classification, taxonNavigator, taxonNavigator);
-                    AbstractUtility.executeOperation(operation);
-                    taxonNavigator.refresh();
-                } catch (Exception e) {
-                    MessagingUtils.messageDialog(Messages.CreateClassificationHierarchyHandler_FAILED, CreateClassificationHierarchyHandlerE4.class,
-                            Messages.CreateClassificationHierarchyHandler_FAILED_MESSAGE, e);
-                }
+        Object selectedElement = selection.getFirstElement();
+        if (selectedElement instanceof TaxonNode && !((TaxonNode)selectedElement).hasTaxon()) {
+            Classification classification = ((TaxonNode) selectedElement).getClassification();
+            try {
+                CreateNewTaxonHierarchyOperation operation = new CreateNewTaxonHierarchyOperation(Messages.CreateClassificationHierarchyHandler_CREATE_HIERARCHY, StoreUtil.getUndoContext(),classification, taxonNavigator, taxonNavigator);
+                AbstractUtility.executeOperation(operation);
+                taxonNavigator.refresh();
+            } catch (Exception e) {
+                MessagingUtils.messageDialog(Messages.CreateClassificationHierarchyHandler_FAILED, CreateClassificationHierarchyHandlerE4.class,
+                        Messages.CreateClassificationHierarchyHandler_FAILED_MESSAGE, e);
             }
+        }
     }
+
+    @CanExecute
+    private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection){
+        return selection.getFirstElement() instanceof Classification && PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_EXPERIMENTAL_FEATURES);
+    }
+
 }
index 5788097715dffa86f753e65c4f431c022b2bcfa3..d89bd5fcd1f6c0b7037b2b493955767e5801419e 100644 (file)
@@ -15,6 +15,7 @@ import java.util.Set;
 
 import javax.inject.Named;
 
+import org.eclipse.e4.core.di.annotations.CanExecute;
 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;
@@ -27,6 +28,7 @@ import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;
 import eu.etaxonomy.cdm.api.service.config.TaxonNodeDeletionConfigurator;
 import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
@@ -178,6 +180,11 @@ public class DeleteHandlerE4 {
                return;
        }
 
+    @CanExecute
+    private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection){
+        return !selection.isEmpty() && !(selection.getFirstElement() instanceof Synonym);
+    }
+
        protected boolean closeObsoleteEditor(TaxonNode taxonNode){
            //FIXME E4 migrate
                boolean result = true;
index 5b9ac0cbf68c815fd099efbf19ea7cb1b2862eda..3650213b18cf4e6a44cd66f4aab6227c5850b37e 100644 (file)
@@ -6,6 +6,7 @@ import java.util.UUID;
 
 import javax.inject.Named;
 
+import org.eclipse.e4.core.di.annotations.CanExecute;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.services.IServiceConstants;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -97,4 +98,9 @@ public class MoveFactualDataHandlerE4 {
         }
     }
 
+    @CanExecute
+    private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection){
+        return selection.getFirstElement() instanceof TaxonNode;
+    }
+
 }
index b7be2ff32b6ed84932e3a3bf7975ba9350f1af0d..f1f0a64fc29592e468daf6c4508f2daf26b724a0 100644 (file)
@@ -18,6 +18,7 @@ import java.util.UUID;
 
 import javax.inject.Named;
 
+import org.eclipse.e4.core.di.annotations.CanExecute;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.services.IServiceConstants;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -99,6 +100,11 @@ public class MoveTaxonHandlerE4 implements IPostOperationEnabled {
                }
        }
 
+    @CanExecute
+    private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection){
+        return selection.getFirstElement() instanceof TaxonNode;
+    }
+
        /** {@inheritDoc} */
        @Override
     public boolean postOperation(CdmBase objectAffectedByOperation) {
index 1d23a6838579c08f2b858e972355147cc789c7cb..d5a12797008f8c4ded11ea93a78be27c11bed499 100644 (file)
@@ -12,7 +12,9 @@ package eu.etaxonomy.taxeditor.navigation.navigator.e4.handler;
 import javax.inject.Named;
 
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.e4.core.di.annotations.CanExecute;
 import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.viewers.TreeSelection;
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.widgets.Shell;
 
@@ -50,4 +52,9 @@ public class NewTaxonNodeHandlerE4 {
                        }
                }
        }
+
+    @CanExecute
+    private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection){
+        return selection!=null && !selection.isEmpty();
+    }
 }
index 9419adb4dbbde5c7fce4c3b794d367f6d5886564..e1546b4c5e9c858ca3b4a30b3a0a29cc0337d2b8 100644 (file)
@@ -11,9 +11,12 @@ package eu.etaxonomy.taxeditor.navigation.navigator.e4.handler;
 
 import javax.inject.Named;
 
+import org.eclipse.e4.core.di.annotations.CanExecute;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.viewers.TreeSelection;
 
+import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
 import eu.etaxonomy.taxeditor.navigation.navigator.e4.TaxonNavigatorE4;
 
 /**
@@ -30,4 +33,9 @@ public class RefreshTreeHandlerE4 {
 
         taxonNavigator.refresh();
        }
+
+    @CanExecute
+    private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection){
+        return selection.getFirstElement() instanceof ITaxonTreeNode;
+    }
 }
index c2a9e08911084ca95c70465efeaa0063c465c667..bbb32641361bb176d459daa632085e6e820f346b 100755 (executable)
@@ -8,11 +8,15 @@
 */
 package eu.etaxonomy.taxeditor.navigation.navigator.e4.handler;
 
+import javax.inject.Named;
+
 import org.eclipse.core.commands.operations.AbstractOperation;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.e4.core.di.annotations.CanExecute;
 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.TreeSelection;
 import org.eclipse.jface.window.Window;
 import org.eclipse.jface.wizard.WizardDialog;
@@ -91,7 +95,11 @@ public class SetSecReferenceForSubtreeHandlerE4 extends RemotingCdmHandlerE4 {
            }else{
                return Status.CANCEL_STATUS;
            }
+       }
 
+       @CanExecute
+       private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection){
+           return selection.getFirstElement() instanceof ITaxonTreeNode;
        }
 
        @Override