Add context menu to taxon node filter in DDS editor
authorPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 14 May 2018 14:29:58 +0000 (16:29 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 14 May 2018 14:29:58 +0000 (16:29 +0200)
eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin.properties
eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin_de.properties
eu.etaxonomy.taxeditor.editor/fragment.e4xmi
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/DescriptiveDataSetEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/handler/DescriptiveDataSetRemoveTaxonHandler.java [new file with mode: 0644]

index d3e9659b0995a36a8ffde44621aea818d3e1a6bd..ab39a68ec23deaa11325d5ebd19a9709fd5bd190 100644 (file)
@@ -245,3 +245,5 @@ handledmenuitem.label.15 = Descriptive Data Set Navigator
 handledmenuitem.tooltip.3 = Descriptive Data Set Navigator
 handledmenuitem.label.16 = Character Editor
 handledmenuitem.tooltip.4 = Character Editor
+handledmenuitem.label.17 = Remove Taxon
+command.commandname.21 = Remove taxon
index 03c96ff0e7c74b82dd4e2e510b8c3d1422c84a0c..0c7e6253ee452220981ee15ca30fef7d91c6f822 100644 (file)
@@ -245,3 +245,5 @@ handledmenuitem.label.15 = Descriptive Data Set Navigator
 handledmenuitem.tooltip.3 = Descriptive Data Set Navigator
 handledmenuitem.label.16 = Character-Editor
 handledmenuitem.tooltip.4 = Character-Editor
+handledmenuitem.label.17 = Taxon entfernen
+command.commandname.21 = Taxon entfernen
\ No newline at end of file
index 818036ce8ddafc8e93e43a4acdc3644fc4c6d86d..40884c17a43cf63a547dfde6cea0a0158d8955fb 100644 (file)
       </menus>
     </elements>
     <elements xsi:type="basic:PartDescriptor" xmi:id="_ARZyMKz2EeeBIsZyvYlAaA" elementId="eu.etaxonomy.taxeditor.editor.group.authority.e4.CdmAuthorityEditorE4" label="%editor.name.4" allowMultiple="true" closeable="true" dirtyable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.editor/eu.etaxonomy.taxeditor.editor.group.authority.e4.CdmAuthorityEditorE4"/>
-    <elements xsi:type="basic:PartDescriptor" xmi:id="_Fa8l4M7XEeex0rHJ7p8Zdw" elementId="eu.etaxonomy.taxeditor.editor.view.descriptiveDataSet.DescriptiveDataSetEditor" label="%partdescriptor.label.3" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.editor/icons/ws_icon.gif" tooltip="%partdescriptor.tooltip.1" allowMultiple="true" closeable="true" dirtyable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.editor/eu.etaxonomy.taxeditor.editor.descriptiveDataSet.DescriptiveDataSetEditor"/>
+    <elements xsi:type="basic:PartDescriptor" xmi:id="_Fa8l4M7XEeex0rHJ7p8Zdw" elementId="eu.etaxonomy.taxeditor.editor.view.descriptiveDataSet.DescriptiveDataSetEditor" label="%partdescriptor.label.3" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.editor/icons/ws_icon.gif" tooltip="%partdescriptor.tooltip.1" allowMultiple="true" closeable="true" dirtyable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.editor/eu.etaxonomy.taxeditor.editor.descriptiveDataSet.DescriptiveDataSetEditor">
+      <handlers xmi:id="_gmq4sFeBEeiJAP3GTkE0aQ" elementId="eu.etaxonomy.taxeditor.editor.descriptiveDataSet.handler.DescriptiveDataSetRemoveTaxonHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.editor/eu.etaxonomy.taxeditor.editor.descriptiveDataSet.handler.DescriptiveDataSetRemoveTaxonHandler" command="_c3wW8FeBEeiJAP3GTkE0aQ"/>
+      <menus xsi:type="menu:PopupMenu" xmi:id="_XMOXgFeBEeiJAP3GTkE0aQ" elementId="eu.etaxonomy.taxeditor.editor.descriptiveDataSet.DescriptiveDataSetEditor.popupmenu.specimeneditor">
+        <children xsi:type="menu:HandledMenuItem" xmi:id="_X_YSwFeBEeiJAP3GTkE0aQ" elementId="eu.etaxonomy.taxeditor.editor.handledmenuitem.removetaxon" label="%handledmenuitem.label.17" command="_c3wW8FeBEeiJAP3GTkE0aQ"/>
+      </menus>
+    </elements>
     <elements xsi:type="basic:PartDescriptor" xmi:id="_rpaDsNK2EeeWSJT7vW9jsw" elementId="eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrixPart" label="%partdescriptor.label.4" tooltip="%partdescriptor.tooltip.2" allowMultiple="true" closeable="true" dirtyable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.editor/eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrixPart">
       <handlers xmi:id="_d_HUYOPBEeeIH8IplZ0cuA" elementId="eu.etaxonomy.taxeditor.editor.handler.2" contributionURI="bundleclass://eu.etaxonomy.taxeditor.editor/eu.etaxonomy.taxeditor.editor.view.charactermatrix.handler.ExportCharacterMatrixHandler" command="_YeWagOPBEeeIH8IplZ0cuA"/>
       <menus xmi:id="_PLw00OPBEeeIH8IplZ0cuA" elementId="eu.etaxonomy.taxeditor.editor.menu.characterMatrix" label="%menu.label.7">
     <elements xsi:type="commands:Command" xmi:id="_z5Zb4E3kEeivZbtHG8C6kA" elementId="eu.etaxonomy.taxeditor.editor.openSpecimenEditorForTaxonNode" commandName="%command.name.OPEN_DERIVATIVE_EDITOR"/>
     <elements xsi:type="commands:Command" xmi:id="_j2cfsJMmEeeR4YRjNqCKeA" elementId="eu.etaxonomy.taxeditor.editor.openSpecimenEditorForIndividualsAssociation" commandName="%command.name.OPEN_DERIVATIVE_EDITOR"/>
     <elements xsi:type="commands:Command" xmi:id="_0DKb4E3kEeivZbtHG8C6kA" elementId="eu.etaxonomy.taxeditor.editor.openSpecimenEditorForSpecimenOrObservation" commandName="%command.name.OPEN_DERIVATIVE_EDITOR"/>
+    <elements xsi:type="commands:Command" xmi:id="_c3wW8FeBEeiJAP3GTkE0aQ" elementId="eu.etaxonomy.taxeditor.editor.command.descriptivedataseteditor.removeTaxon" commandName="%command.commandname.21"/>
   </fragments>
   <fragments xsi:type="fragment:StringModelFragment" xmi:id="_pZmusEalEeeXMc6kSYO7Xg" featurename="children" parentElementId="eu.etaxonomy.taxeditor.menu.showView" positionInList="after:eu.etaxonomy.taxeditor.workbench.menuseparator.navigation">
     <elements xsi:type="menu:HandledMenuItem" xmi:id="_FPIHQKNwEeebGZ23ERGMGw" elementId="eu.etaxonomy.taxeditor.editor.showViewMenu.conceptGraph" label="%view.name.3" iconURI="" tooltip="%view.name.3" command="_WPjpoDSnEeek0dKsFNy--Q">
index fc6625c0826c383fcfbd68d7ec545b5be0ccad36..4c2f62b566c8ca0b27101f7ec3931c3ed803697f 100644 (file)
@@ -29,6 +29,7 @@ import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.ui.di.Focus;
 import org.eclipse.e4.ui.di.Persist;
 import org.eclipse.e4.ui.model.application.ui.MDirtyable;
+import org.eclipse.e4.ui.services.EMenuService;
 import org.eclipse.e4.ui.services.IServiceConstants;
 import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
 import org.eclipse.jface.util.LocalSelectionTransfer;
@@ -48,12 +49,12 @@ import org.eclipse.swt.widgets.Shell;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.ITermService;
-import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
-import eu.etaxonomy.cdm.model.description.FeatureTree;
 import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.name.Rank;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
@@ -99,7 +100,8 @@ IPartContentHasDetails, IDirtyMarkable {
     private ModifyListener labelModifyListener;
 
     @PostConstruct
-    public void create(Composite parent, IEclipseContext context, @Named(IServiceConstants.ACTIVE_SHELL)Shell shell){
+    public void create(Composite parent, IEclipseContext context, @Named(IServiceConstants.ACTIVE_SHELL)Shell shell,
+            EMenuService menuService){
         if (CdmStore.isActive()){
             if(conversation == null){
                 conversation = CdmStore.createConversation();
@@ -156,21 +158,15 @@ IPartContentHasDetails, IDirtyMarkable {
             @Override
             public void keyPressed(KeyEvent e) {
                 if(e.character==SWT.DEL){
-                    IStructuredSelection selection = (IStructuredSelection) composite.getTaxonNodeTree().getSelection();
-                    if(selection.toList().stream().anyMatch(object->!(object instanceof TaxonNode))){
-                        MessagingUtils.warningDialog(Messages.DescriptiveDataSetEditor_DELETE_FAIL_TITLE, this.getClass(), Messages.DescriptiveDataSetEditor_DELETE_FAIL_MESSAGE);
-                        return;
-                    }
-                    Iterator<Object> iterator = selection.iterator();
-                    while(iterator.hasNext()){
-                        Object next = iterator.next();
-                        TaxonNode taxonNode = (TaxonNode) next;
-                        removeTaxonNode(taxonNode);
-                    }
+                    removeSelectedTaxonNodes();
                 }
             }
         });
 
+
+        //create context menu
+        menuService.registerContextMenu(composite.getTaxonNodeTree().getControl(), "eu.etaxonomy.taxeditor.editor.descriptiveDataSet.DescriptiveDataSetEditor.popupmenu.specimeneditor");
+
     }
 
     public void init(UUID descriptiveDataSetUuid) {
@@ -226,11 +222,21 @@ IPartContentHasDetails, IDirtyMarkable {
         dirty.setDirty(true);
     }
 
-    private void removeTaxonNode(TaxonNode taxonNode){
+    public void removeSelectedTaxonNodes(){
+        IStructuredSelection selection = (IStructuredSelection) composite.getTaxonNodeTree().getSelection();
+        if(selection.toList().stream().anyMatch(object->!(object instanceof TaxonNode))){
+            MessagingUtils.warningDialog(Messages.DescriptiveDataSetEditor_DELETE_FAIL_TITLE, this.getClass(), Messages.DescriptiveDataSetEditor_DELETE_FAIL_MESSAGE);
+            return;
+        }
+        Iterator<Object> iterator = selection.iterator();
         Viewer taxonTreeViewer = getTaxonTreeViewer();
         Collection<TaxonNode> input = (Collection<TaxonNode>) taxonTreeViewer.getInput();
-        input.remove(taxonNode);
-        descriptiveDataSet.removeTaxonSubtree(taxonNode);
+        while(iterator.hasNext()){
+            Object next = iterator.next();
+            TaxonNode taxonNode = (TaxonNode) next;
+            input.remove(taxonNode);
+            descriptiveDataSet.removeTaxonSubtree(taxonNode);
+        }
         taxonTreeViewer.setInput(input);
         dirty.setDirty(true);
     }
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/handler/DescriptiveDataSetRemoveTaxonHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/handler/DescriptiveDataSetRemoveTaxonHandler.java
new file mode 100644 (file)
index 0000000..9da30a3
--- /dev/null
@@ -0,0 +1,33 @@
+
+package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.handler;
+
+import javax.inject.Named;
+
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.model.application.ui.menu.MMenuItem;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.DescriptiveDataSetEditor;
+
+public class DescriptiveDataSetRemoveTaxonHandler {
+       @Execute
+       public void execute(@Named(IServiceConstants.ACTIVE_PART)MPart activePart) {
+           DescriptiveDataSetEditor editor = (DescriptiveDataSetEditor) activePart.getObject();
+           editor.removeSelectedTaxonNodes();
+       }
+
+
+       @CanExecute
+       public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)IStructuredSelection selection,
+               @Named(IServiceConstants.ACTIVE_PART)MPart activePart,
+               MMenuItem menuItem) {
+           boolean canExecute = false;
+           canExecute = !selection.isEmpty() && activePart.getObject() instanceof DescriptiveDataSetEditor;
+               menuItem.setVisible(canExecute);
+               return canExecute;
+       }
+
+}
\ No newline at end of file