add changeTo operation for pro parte synonyms
authorKatja Luther <k.luther@bgbm.org>
Wed, 16 May 2018 12:55:43 +0000 (14:55 +0200)
committerKatja Luther <k.luther@bgbm.org>
Wed, 16 May 2018 12:56:31 +0000 (14:56 +0200)
eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin_de.properties
eu.etaxonomy.taxeditor.editor/fragment.e4xmi
eu.etaxonomy.taxeditor.editor/plugin.xml
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/e4/handler/ChangeSynonymToAcceptedTaxonHandlerE4.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/e4/handler/ChangeToProParteSynonymHandlerE5.java [new file with mode: 0755]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/NameEditorMenuPropertyTester.java
eu.etaxonomy.taxeditor.navigation/plugin.xml

index 2d2efa470bb9b739fbda748a57f4cd968800c998..b00a96e4f2d808baf6ad8dc9b9af25ef11b2c58f 100644 (file)
@@ -34,6 +34,7 @@ menu.label.0 = \u00c4ndere zu
 command.label.12 = Akzeptiertes Taxon
 command.label.13 = Synonym
 command.label.14 = Misapplication
+command.label.61 = Pro Parte Synonym
 command.label.15 = L\u00f6schen
 command.label.16 = L\u00f6sche alle leeren Namen
 command.label.17 = Tausche Synonym mit akzeptiertem Namen
@@ -131,6 +132,8 @@ command.label.60 = Pro Parte Synonym
 command.label.50 = Benutze vorhandenes Bild
 command.name.36 = Erstelle Misapplication
 command.name.60 = Erstelle Pro Parte Synonym
+command.name.61 = Pro Parte Synonym
+
 command.name.37 = Benutze vorhandenes Bild
 command.name.38 = \u00d6ffne Verbreitungs-Editor
 command.name.39 = Neue Datenquelle
index 013b2740cf967db55add1ed459411b81f7be9a6e..86f0693573cbdbe47e058abd5590e398a40685ef 100644 (file)
       <handlers xmi:id="_edkd4IvQEee7R4eqeQiXZg" elementId="eu.etaxonomy.taxeditor.editor.name.e4.handler.SetBasionymHandlerE4" contributionURI="bundleclass://eu.etaxonomy.taxeditor.editor/eu.etaxonomy.taxeditor.editor.name.e4.handler.SetBasionymHandlerE4" command="_b2nCsIvQEee7R4eqeQiXZg"/>
       <handlers xmi:id="_lv9GYIvQEee7R4eqeQiXZg" elementId="eu.etaxonomy.taxeditor.editor.name.e4.handler.MoveSynonymToAnotherAcceptedTaxonHandlerE4" contributionURI="bundleclass://eu.etaxonomy.taxeditor.editor/eu.etaxonomy.taxeditor.editor.name.e4.handler.MoveSynonymToAnotherAcceptedTaxonHandlerE4" command="_jNvBQIvQEee7R4eqeQiXZg"/>
       <handlers xmi:id="_g8QScFgWEeiQk_eTMvMviQ" elementId="eu.etaxonomy.taxeditor.editor.name.e4.handler.CreateProParteSynonymHandlerE4" contributionURI="bundleclass://eu.etaxonomy.taxeditor.editor/eu.etaxonomy.taxeditor.editor.name.e4.handler.CreateProParteSynonymHandlerE4" command="_HSKdYFgXEeiQk_eTMvMviQ"/>
+      <handlers xmi:id="_442rEFj-EeiQk_eTMvMviQ" elementId="eu.etaxonomy.taxeditor.editor.name.e4.handler.ChangeToMisapplicationHandlerE4" contributionURI="bundleclass://eu.etaxonomy.taxeditor.editor/eu.etaxonomy.taxeditor.editor.name.e4.handler.ChangeToProParteSynonymHandlerE5" command="_BgX6gFj_EeiQk_eTMvMviQ"/>
       <menus xsi:type="menu:PopupMenu" xmi:id="_tLceQYl4Eeeox7omhvOBWg" elementId="eu.etaxonomy.taxeditor.editor.popupmenu.nameeditor">
         <children xsi:type="menu:Menu" xmi:id="_R6buoIl5Eeeox7omhvOBWg" elementId="eu.etaxonomy.taxeditor.editor.nameEditor.menu.new" label="%menu.label">
           <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_X1lWsEoREeiEhr9v9h_MoA" coreExpressionId="isNotMisapplication"/>
             <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_lSby0EoQEeiEhr9v9h_MoA" coreExpressionId="isSynonym"/>
           </children>
           <children xsi:type="menu:HandledMenuItem" xmi:id="_POj24Il8Eeeox7omhvOBWg" elementId="eu.etaxonomy.taxeditor.editor.nameEditor.nameEditor.menuItem.changeToSynonym" label="%command.label.13" command="_yh49QIvPEee7R4eqeQiXZg">
-            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_h6hb0EoQEeiEhr9v9h_MoA" coreExpressionId="isMisapplication"/>
+            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_h6hb0EoQEeiEhr9v9h_MoA" coreExpressionId="isNotSynonym"/>
           </children>
           <children xsi:type="menu:HandledMenuItem" xmi:id="_QbC4IIl8Eeeox7omhvOBWg" elementId="eu.etaxonomy.taxeditor.editor.nameEditor.menuItem.changeToMisapplication" label="%command.label.14" command="_56AaUIvPEee7R4eqeQiXZg">
-            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_fYbSgEoQEeiEhr9v9h_MoA" coreExpressionId="isSynonym"/>
+            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_fYbSgEoQEeiEhr9v9h_MoA" coreExpressionId="isNotMisapplication"/>
+          </children>
+          <children xsi:type="menu:HandledMenuItem" xmi:id="_F0EH0FkAEeiQk_eTMvMviQ" elementId="eu.etaxonomy.taxeditor.editor.handledmenuitem.changeToProparteSynonym" label="%command.label.61" command="_BgX6gFj_EeiQk_eTMvMviQ">
+            <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_Lc4KcFkAEeiQk_eTMvMviQ" coreExpressionId="isNotProparteSynonym"/>
           </children>
         </children>
         <children xsi:type="menu:MenuSeparator" xmi:id="_a0anEIl5Eeeox7omhvOBWg" elementId="eu.etaxonomy.taxeditor.editor.menuseparator.13"/>
     <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"/>
     <elements xsi:type="commands:Command" xmi:id="_HSKdYFgXEeiQk_eTMvMviQ" elementId="eu.etaxonomy.taxeditor.editor.name.createProParteSynonym" commandName="%command.name.60"/>
+    <elements xsi:type="commands:Command" xmi:id="_BgX6gFj_EeiQk_eTMvMviQ" elementId="eu.etaxonomy.taxeditor.editor.command.changeToProParteSynonym" commandName="%command.name.61"/>
   </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 383d0249687a5347987635e01c6367fcf6e0c3fc..27078fcdadea4c06672f57c4c8754b5c288b4d0e 100644 (file)
             </test>
          </with>
       </definition>
+      <definition
+            id="isNotSynonym">
+         <with
+               variable="selection">
+            <test
+                  property="eu.etaxonomy.taxeditor.editor.name.propertyTester.isNotSynonym">
+            </test>
+         </with>
+      </definition>
       <definition
             id="isMisapplication">
          <with
                   property="eu.etaxonomy.taxeditor.editor.name.propertyTester.isMisapplication">
             </test>
          </with>
+      </definition>
+       <definition
+            id="isProparteSynonym">
+         <with
+               variable="selection">
+            <test
+                  property="eu.etaxonomy.taxeditor.editor.name.propertyTester.isProparteSynonym">
+            </test>
+         </with>
+      </definition>
+       <definition
+            id="isNotProparteSynonym">
+         <with
+               variable="selection">
+            <test
+                  property="eu.etaxonomy.taxeditor.editor.name.propertyTester.isNotProparteSynonym">
+            </test>
+         </with>
       </definition>
            <definition
             id="isNotMisapplication">
             class="eu.etaxonomy.taxeditor.editor.name.handler.NameEditorMenuPropertyTester"
             id="eu.etaxonomy.taxeditor.editor.name.propertyTester"
             namespace="eu.etaxonomy.taxeditor.editor.name.propertyTester"
-            properties="isAcceptedTaxon,isSynonym,isMisapplication,isNotMisapplication,isTaxonBase,hasEmptyNames,isAcceptedAndHasNoHomotypicSynonyms,isNotHomotypicSynonymOfAcceptedTaxon,isNotAcceptedTaxon,isSynonymInHomotypicalGroupWithMoreSynonyms,isOrphaned"
+            properties="isAcceptedTaxon,isSynonym,isNotSynonym,isMisapplication,isProparteSynonym,isNotProparteSynonym,isNotMisapplication,isTaxonBase,hasEmptyNames,isAcceptedAndHasNoHomotypicSynonyms,isNotHomotypicSynonymOfAcceptedTaxon,isNotAcceptedTaxon,isSynonymInHomotypicalGroupWithMoreSynonyms,isOrphaned"
             type="java.lang.Object">
       </propertyTester>
       <propertyTester
index e27a3610006e585414afa786f2d3296bd0aacb39..1b64ecc68c2fd23a4a783d46835843409e05e128 100644 (file)
@@ -139,7 +139,8 @@ public class ChangeSynonymToAcceptedTaxonHandlerE4 implements IPostOperationEnab
         canExecute =
                 NameEditorMenuPropertyTester.isNotHomotypicSynonymOfAcceptedTaxon(selectedElement)
                 && !NameEditorMenuPropertyTester.isAccepted(selectedElement)
-                && !NameEditorMenuPropertyTester.isMisapplication(selectedElement);
+                && !NameEditorMenuPropertyTester.isMisapplication(selectedElement)
+                && !NameEditorMenuPropertyTester.isProparteSynonym(selectedElement);
         menuItem.setVisible(canExecute);
         return canExecute;
     }
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/e4/handler/ChangeToProParteSynonymHandlerE5.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/e4/handler/ChangeToProParteSynonymHandlerE5.java
new file mode 100755 (executable)
index 0000000..83d95b2
--- /dev/null
@@ -0,0 +1,82 @@
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor.name.e4.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.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 org.eclipse.swt.widgets.Shell;
+
+import eu.etaxonomy.cdm.model.taxon.Synonym;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
+import eu.etaxonomy.taxeditor.editor.name.handler.NameEditorMenuPropertyTester;
+import eu.etaxonomy.taxeditor.editor.name.operation.ChangeConceptRelationshipTypeOperation;
+import eu.etaxonomy.taxeditor.editor.name.operation.ChangeSynonymToConceptOperation;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
+
+/**
+ *
+ * @author pplitzner
+ * @since Aug 28, 2017
+ *
+ */
+public class ChangeToProParteSynonymHandlerE5 {
+
+    private TaxonNameEditorE4 editor;
+
+    @Execute
+    public void execute(@Named(IServiceConstants.ACTIVE_PART)MPart activePart,
+            @Named(IServiceConstants.ACTIVE_SELECTION)IStructuredSelection selection,
+            @Named(IServiceConstants.ACTIVE_SHELL)Shell shell,
+            MHandledMenuItem menuItem,
+            UISynchronize sync) {
+
+        editor = (TaxonNameEditorE4) activePart.getObject();
+
+               if (!EditorUtil.forceUserSaveE4Editor(editor, shell)){
+            return ;
+        }
+               Object selectedElement = selection.getFirstElement();
+
+               AbstractPostOperation operation = null;
+               if(selectedElement instanceof Taxon){
+               operation = new ChangeConceptRelationshipTypeOperation(menuItem.getLocalizedLabel(),
+                                                               editor.getUndoContext(), editor.getTaxon(), (Taxon) selectedElement, TaxonRelationshipType.PRO_PARTE_SYNONYM_FOR(), editor);
+        }
+        if(selectedElement instanceof Synonym){
+               operation = new ChangeSynonymToConceptOperation(menuItem.getLocalizedLabel(), editor.getUndoContext(), editor.getTaxon(), (Synonym)selectedElement, TaxonRelationshipType.PRO_PARTE_SYNONYM_FOR(), editor);
+        }
+
+
+        AbstractUtility.executeOperation(operation, sync);
+       }
+
+    @CanExecute
+    public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)IStructuredSelection selection,
+            MHandledMenuItem menuItem){
+        boolean canExecute = false;
+        Object selectedElement = selection.getFirstElement();
+        canExecute =
+                !NameEditorMenuPropertyTester.isAccepted(selectedElement)
+                && !NameEditorMenuPropertyTester.isProparteSynonym(selectedElement);
+        return canExecute;
+    }
+
+}
index f0445b43009f55e42b9fbd0d05a3fe2a89e4cbe0..1ea2190fa8a5c515152344d26e9d9bc204ccd7ea 100644 (file)
@@ -33,8 +33,11 @@ public class NameEditorMenuPropertyTester extends PropertyTester {
        private static final String ACCEPTED = "isAcceptedTaxon"; //$NON-NLS-1$
        private static final String NOT_ACCEPTED = "isNotAcceptedTaxon"; //$NON-NLS-1$
        private static final String SYNONYM = "isSynonym"; //$NON-NLS-1$
+       private static final String NOT_SYNONYM = "isNotSynonym"; //$NON-NLS-1$
        private static final String MISAPPLICATION = "isMisapplication"; //$NON-NLS-1$
        private static final String NOT_MISAPPLICATION = "isNotMisapplication"; //$NON-NLS-1$
+       private static final String PROPARTE_SYNONYM = "isProparteSynonym";//$NON-NLS-1$
+       private static final String NOT_PROPARTE_SYNONYM = "isNotProparteSynonym"; //$NON-NLS-1$
        private static final String TAXONBASE = "isTaxonBase"; //$NON-NLS-1$
        private static final String CONCEPT = "isConceptRelation"; //$NON-NLS-1$
        private static final String EMPTY_NAMES = "hasEmptyNames"; //$NON-NLS-1$
@@ -73,9 +76,18 @@ public class NameEditorMenuPropertyTester extends PropertyTester {
                        else if(SYNONYM.equals(property)){
                                return isSynonym(selectedElement);
                        }
+                       else if(NOT_SYNONYM.equals(property)){
+                return isNotSynonym(selectedElement);
+            }
                        else if(MISAPPLICATION.equals(property)){
                                return isMisapplication(selectedElement);
                        }
+                       else if(PROPARTE_SYNONYM.equals(property)){
+                return isProparteSynonym(selectedElement);
+            }
+                       else if(NOT_PROPARTE_SYNONYM.equals(property)){
+                return isNotProparteSynonym(selectedElement);
+            }
                        else if(NOT_MISAPPLICATION.equals(property)){
                 return isNotMisapplication(selectedElement);
             }
@@ -167,18 +179,37 @@ public class NameEditorMenuPropertyTester extends PropertyTester {
        }
 
        public static boolean isMisapplication(Object selectedElement) {
-               if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isMisapplication()){
+               if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isMisapplication() ){
                        return true;
                }
                return false;
        }
 
+       public static boolean isProparteSynonym(Object selectedElement) {
+        if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isProparteSynonym()){
+            return true;
+        }
+        return false;
+    }
+       public static boolean isNotProparteSynonym(Object selectedElement) {
+           if (selectedElement instanceof Synonym){
+               return true;
+           }
+        if(!((Taxon) selectedElement).isProparteSynonym() ){
+            return true;
+        }
+        return false;
+    }
+
        public static boolean isSynonym(Object selectedElement) {
                return (selectedElement instanceof Synonym) ? true : false;
        }
+       public static boolean isNotSynonym(Object selectedElement) {
+        return !isSynonym(selectedElement);
+    }
 
        public static boolean isAccepted(Object selectedElement) {
-               return (selectedElement instanceof Taxon  && ! ((Taxon) selectedElement).isMisapplication()) ? true : false;
+               return (selectedElement instanceof Taxon  && ! ((Taxon) selectedElement).isMisapplication() && ! ((Taxon) selectedElement).isProparteSynonym()) ? true : false;
        }
 
        public static boolean isOrphaned(Object selectedElement) {
index 2ef38931919ed2306568166e479dc2c74479334c..5e128443bb500e8ace4d805d8bf68fb6b18def7d 100644 (file)
@@ -46,7 +46,7 @@
             class="eu.etaxonomy.taxeditor.navigation.navigator.TaxonNodePropertyTester"
             id="eu.etaxonomy.taxeditor.navigation.navigator.navigatorPropertyTester"
             namespace="eu.etaxonomy.taxeditor.navigation.navigator.navigatorPropertyTester"
-            properties="hasSynonyms, isClassification"
+            properties="hasSynonyms,isClassification"
             type="java.lang.Object">
       </propertyTester>
       
             </reference>
          </and>
       </definition>
+       <definition
+            id="isClassification">
+         <test
+               property="eu.etaxonomy.taxeditor.navigation.navigator.TaxonNodePropertyTester.isClassification">
+         </test>
+      </definition>
    </extension>
    <extension
          id="eu.etaxonomy.taxeditor.navigation.workbench.model"