ref #9340: workflow for changing synonym to acc and acc to synonym
authorKatja Luther <k.luther@bgbm.org>
Tue, 23 Feb 2021 14:54:23 +0000 (15:54 +0100)
committerKatja Luther <k.luther@bgbm.org>
Tue, 23 Feb 2021 14:54:23 +0000 (15:54 +0100)
17 files changed:
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/Messages.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/messages.properties
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/l10n/messages_de.properties
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/operation/ChangeSynonymToAcceptedTaxonOperation.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/l10n/Messages.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/l10n/messages.properties
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/l10n/messages_de.properties
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/handler/RemotingChangeAcceptedTaxonToSynonymHandlerE4.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/e4/handler/RemotingChangeAcceptedTaxonToSynonymSetNameInSourceHandlerE5.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/RemotingChangeAcceptedTaxonToSynonymOperation.java
eu.etaxonomy.taxeditor.store/plugin.xml
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/preferencePage/SecundumReferenceHandlingAdmin.java [new file with mode: 0755]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/l10n/messages.properties
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/l10n/messages_de.properties
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/SecundumReferenceHandling.java [new file with mode: 0755]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/TaxonNavigatorTest.java

index 8cbd118854ae2f04c983a23ba2ab3b0922d129eb..4daa8f2a2ae82ff6f922235edcdd215fd7c0ad7b 100644 (file)
@@ -324,6 +324,11 @@ public class Messages extends NLS {
     public static String DeleteDescriptiveDatasetHandler_Exception_Message;
     public static String CharacterMatrix_ONLY_REMOVE;
     public static String CharacterMatrix_DELETE_DESCRIPTION;
+    public static String ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Handling_message;
+    public static String ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Handling_title;
+    public static String ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Parent;
+    public static String ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Select;
+    public static String ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Keep;
 
 
     static {
index 5643bc9c6fede1853e3d9ec36494b9302deb086b..de1ec5e4fbe6fff8c7eb38a801bbd4b711ad184f 100644 (file)
@@ -302,4 +302,9 @@ ChecklistEditor_REMOVE_DEFAULT_SOURCE=Remove Source
 FactualDataView_Lable=Factual Data
 NameFactsDataView_Lable=Name Facts
 DeleteDescriptiveDatasetHandler_Exception_Message=Descriptive Dataset could not be deleted.
-DeleteDescriptiveDatasetHandler_Warning_Message=Deletion was successful but with warnings. 
\ No newline at end of file
+DeleteDescriptiveDatasetHandler_Warning_Message=Deletion was successful but with warnings. 
+ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Handling_message=Select secundum reference
+ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Handling_title=The secundum reference of the selected parent is different to the secundum of the synonym. Please select which secundum should be used for the accepted taxon.
+ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Parent=Parent secundum
+ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Select=Select new
+ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Keep=Keep secundum
\ No newline at end of file
index cea3a4abaf67f3388f9fa5838ff4999454c6c222..fe5101d7f1844dfe34a061bc84c879353da624cc 100644 (file)
@@ -301,4 +301,9 @@ ChecklistEditor_REMOVE_DEFAULT_SOURCE=Quelle entfernen
 FactualDataView_Lable=Faktendaten
 NameFactsDataView_Lable=Namensfaktendaten
 DeleteDescriptiveDatasetHandler_Exception_Message=Das Descriptive Dataset konnte nicht gelöscht werden.
-DeleteDescriptiveDatasetHandler_Warning_Message=Das Löschen war erfolgreich, es gibt aber Warnungen.
\ No newline at end of file
+DeleteDescriptiveDatasetHandler_Warning_Message=Das Löschen war erfolgreich, es gibt aber Warnungen.
+ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Handling_message=Auswahl der Sekundum Referenz
+ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Handling_title=Die Sekundum Referenzen des gewählten Eltern und des alten akzeptierten Taxons unterscheiden sich, bitte wählen Sie welche Sekundum Referenz für das neue Synonym verwendet werden soll
+ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Parent=Eltern Secundum
+ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Select=Neue auswählen
+ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Keep=Secundum beibehalten
\ No newline at end of file
index 6dd72e000384f4627a8793c09014405bb32610af..f8d30b284795b2137cb0464166e1d2e01616bcd6 100644 (file)
@@ -10,6 +10,7 @@
 package eu.etaxonomy.taxeditor.editor.name.e4.handler;
 
 import java.util.Set;
+import java.util.UUID;
 
 import javax.inject.Named;
 
@@ -33,12 +34,15 @@ import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.e4.TaxonEditorInputE4;
 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
 import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
 import eu.etaxonomy.taxeditor.editor.name.handler.NameEditorMenuPropertyTester;
 import eu.etaxonomy.taxeditor.editor.name.operation.ChangeSynonymToAcceptedTaxonOperation;
+import eu.etaxonomy.taxeditor.event.EventUtility;
+import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
@@ -104,26 +108,42 @@ public class ChangeSynonymToAcceptedTaxonHandlerE4 implements IPostOperationEnab
 
                        //compare parentSec and synSec and ask for handling.
                        SecReferenceHandlingEnum secHandling = PreferencesUtil.getSecReferenceHandlingPreference();
-                       Reference newSec = null;
+                       UUID newSecUuid = null;
                        if ((synSecRef != parentSecRef && secHandling.equals(SecReferenceHandlingEnum.KeepWhenSame) )|| secHandling.equals(SecReferenceHandlingEnum.WarningSelect)){
-                           String message = null;
-                           if (secHandling.equals(SecReferenceHandlingEnum.KeepWhenSame)){
-                               message = "The secundum reference of the former synonym is not the same as the secundum of the new parent, therefore please select the secundum reference for the new accepted taxon.";
-                           }else{
-                               message = "Please select the secundum reference for the new accepted taxon.";
-                           }
-
-                           int result = MessagingUtils.confirmDialog("Select secundum reference for accepted taxon", message, new String[]{"OK", "Cancel"});
-                           if (result == 0){
-                               newSec = ReferenceSelectionDialog.select(shell, null);
-                           }else{
-                               return;
-                           }
+
+                   if ((parentSecRef != synSecRef && secHandling.equals(SecReferenceHandlingEnum.KeepWhenSame) )|| secHandling.equals(SecReferenceHandlingEnum.WarningSelect)){
+                       int result = MessagingUtils.confirmDialog(Messages.ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Handling_title, Messages.ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Handling_message,
+                               new String[]{Messages.ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Keep, Messages.ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Parent, Messages.ChangeSynonymToAcceptedHandler_Select_Sec_Reference_Select});
+                       if (result == 2){
+                           Reference sec = ReferenceSelectionDialog.select(shell, null);
+                           newSecUuid = sec != null? sec.getUuid(): null;
+                       }else if (result == 1){
+                           newSecUuid = parentSecRef != null? parentSecRef.getUuid(): null;
+                       }else if (result == 0){
+                           newSecUuid = synSecRef != null? synSecRef.getUuid(): null;
+                       }else{
+                           return ;
+                       }
+
+                   }
+                           //                      String message = null;
+//                         if (secHandling.equals(SecReferenceHandlingEnum.KeepWhenSame)){
+//                             message = "The secundum reference of the former synonym is not the same as the secundum of the new parent, therefore please select the secundum reference for the new accepted taxon.";
+//                         }else{
+//                             message = "Please select the secundum reference for the new accepted taxon.";
+//                         }
+//
+//                         int result = MessagingUtils.confirmDialog("Select secundum reference for accepted taxon", message, new String[]{"OK", "Cancel"});
+//                         if (result == 0){
+//                             newSec = ReferenceSelectionDialog.select(shell, null);
+//                         }else{
+//                             return;
+//                         }
 
                        }
                        ChangeSynonymToAcceptedTaxonOperation operation = new ChangeSynonymToAcceptedTaxonOperation(Messages.ChangeSynonymToAcceptedTaxonHandler_CHANGE_SYN_TO_ACC_TAXON, EditorUtil.getUndoContext(),
                                        taxon, newParentNode, synonym, namesInGroup,
-                                       newSec, secHandling,
+                                       newSecUuid, secHandling,
                                        this, editor, editor.getEditorInput()); //$NON-NLS-1$
 
                        AbstractUtility.executeOperation(operation, sync);
@@ -138,12 +158,11 @@ public class ChangeSynonymToAcceptedTaxonHandlerE4 implements IPostOperationEnab
 
                editor.save(AbstractUtility.getMonitor());
 
-               if (objectAffectedByOperation instanceof TaxonNode) {
 
-                       // Open new unsaved editor with existing taxon's parent as temporary parent
+               if (objectAffectedByOperation instanceof TaxonNode) {
                        TaxonNode newNode = (TaxonNode) objectAffectedByOperation;
-
-                       EditorUtil.openTaxonNodeE4(newNode.getUuid(), modelService, partService, application);
+                       EventUtility.postEvent(WorkbenchEventConstants.REFRESH_NAVIGATOR, new TaxonNodeDto(newNode));
+//                     EditorUtil.openTaxonNodeE4(newNode.getUuid(), modelService, partService, application);
                }
                return true;
        }
index 155aeaf884dc6250a9c597e90c6c5f8ae96427b2..aa0f531d868d52c09909b658752af0bfa65f7c81 100644 (file)
@@ -10,6 +10,7 @@
 package eu.etaxonomy.taxeditor.editor.name.operation;
 
 import java.util.Set;
+import java.util.UUID;
 
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.operations.IUndoContext;
@@ -23,7 +24,6 @@ import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.api.service.exception.HomotypicalGroupChangeException;
 import eu.etaxonomy.cdm.model.metadata.SecReferenceHandlingEnum;
 import eu.etaxonomy.cdm.model.name.TaxonName;
-import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
 import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
@@ -47,7 +47,7 @@ public class ChangeSynonymToAcceptedTaxonOperation extends AbstractPersistentPos
        private final ITaxonTreeNode parentNode;
 
        private TaxonNode newNode;
-       private Reference newSecRef;
+       private UUID newSecRefUuid;
        private SecReferenceHandlingEnum secHandling;
 
        //private final Set<TaxonName> namesInHomotypicGroup;
@@ -70,7 +70,7 @@ public class ChangeSynonymToAcceptedTaxonOperation extends AbstractPersistentPos
                        ITaxonTreeNode parentNode,
                        Synonym synonym,
                        Set<TaxonName> namesInHomotypicalGroup,
-                       Reference newSec,
+                       UUID newSecUuid,
                SecReferenceHandlingEnum secHandling,
                        IPostOperationEnabled postOperationEnabled,
                        IConversationEnabled conversationEnabled,
@@ -80,7 +80,7 @@ public class ChangeSynonymToAcceptedTaxonOperation extends AbstractPersistentPos
                this.element = taxon;
                this.parentNode = parentNode;
                this.synonym = synonym;
-               this.newSecRef = newSec;
+               this.newSecRefUuid = newSecUuid;
                this.secHandling = secHandling;
                //this.namesInHomotypicGroup = namesInHomotypicalGroup;
        }
@@ -95,7 +95,7 @@ public class ChangeSynonymToAcceptedTaxonOperation extends AbstractPersistentPos
                        result = CdmStore.getService(ITaxonService.class).changeSynonymToAcceptedTaxon(synonym.getUuid(),
                                element.getUuid(),
                                parentNode.getUuid(),
-                               newSecRef != null? newSecRef.getUuid(): null, null, secHandling,
+                               newSecRefUuid, null, secHandling,
                                true);
                        if (result.isAbort()){
 
index eb5a083accadca3330d237497110a78c60fe6646..4b7ce5b8017fcab0d497968848ab08852d503fcb 100644 (file)
@@ -93,6 +93,11 @@ public class Messages extends NLS {
     public static String RefreshPolytomousKeyNodesHandler_REFRESHING;
     public static String RemotingChangeAcceptedTaxonToSynonymHandler_CHOOSE_TAXON;
     public static String RemotingChangeAcceptedTaxonToSynonymOperation_CHANGE_OP;
+    public static String RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_title;
+    public static String RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_message;
+    public static String RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Keep;
+    public static String RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Parent;
+    public static String RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Select;
     public static String RemotingDeletePolytomousKeyOperation_DELETE_OP;
     public static String RemotingDeleteTaxonNodeHandler_NODE_DELETED;
     public static String RemotingDeleteTaxonNodeHandler_NODE_DELETED_MESSAGE;
index 52024c52929511b6eddc223d9fcbbfccea9164a3..7c07ded9c3d48eb6fe6bb1b6c9fc572fe70aaa2d 100644 (file)
@@ -74,6 +74,11 @@ RefreshPolytomousKeyNodesHandler_REFRESH=Refresh Polytomous Key Nodes
 RefreshPolytomousKeyNodesHandler_REFRESHING=Refreshing Polytomous Key Nodes
 RemotingChangeAcceptedTaxonToSynonymHandler_CHOOSE_TAXON=Choose the accepted taxon
 RemotingChangeAcceptedTaxonToSynonymOperation_CHANGE_OP=Change Accepted Taxon to Synonym operation
+RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_title=Select secundum reference
+RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_message=The secundum reference of the new and the old accepted taxa are not the same. Please select which reference should be used for the new synonym
+RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Keep=Keep
+RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Parent=Take from accepted
+RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Select=Select new
 RemotingDeletePolytomousKeyOperation_DELETE_OP=Delete Polytomous Key operation
 RemotingDeleteTaxonNodeHandler_NODE_DELETED=Node already deleted
 RemotingDeleteTaxonNodeHandler_NODE_DELETED_MESSAGE=The taxon node was already deleted. Please reopen the taxon navigator to refresh the view.
index 408accb5157e5ba9b78eff7180878558c1113b32..99ffd2d84bcb963dc4726c903ecbb599d3a43180 100644 (file)
@@ -74,6 +74,11 @@ RefreshPolytomousKeyNodesHandler_REFRESH=Polytome Schl
 RefreshPolytomousKeyNodesHandler_REFRESHING=Polytome Schlüssel aktualisieren
 RemotingChangeAcceptedTaxonToSynonymHandler_CHOOSE_TAXON=Wählen Sie das akzeptierte Taxon
 RemotingChangeAcceptedTaxonToSynonymOperation_CHANGE_OP=Akzeptiertes Taxon in Synonym umwandeln
+RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_title=Auswahl der Sekundum Referenz
+RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_message=Die Sekundum Referenzen des neuen und des alten akzeptierten Taxons unterscheiden sich, bitte wählen Sie welche Sekundum Referenz für das neue Synonym verwendet werden soll
+RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Keep=Beibehalten
+RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Parent=Übernehme vom akzeptierten
+RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Select=Neue auswählen
 RemotingDeletePolytomousKeyOperation_DELETE_OP=Polytomen Schlüssel löschen
 RemotingDeleteTaxonNodeHandler_NODE_DELETED=Taxonknoten schon gelöscht
 RemotingDeleteTaxonNodeHandler_NODE_DELETED_MESSAGE=Der Taxonknoten wurde schon gelöscht. Bitte Öffnen Sie den Taxonnavigator erneut um die Anzeige zu aktualisieren.
index 73b24632ed766bdda3df9663028d514296533a05..84eaf198dfdc13f25f6538f1e8704666c3d9b8da 100644 (file)
@@ -22,15 +22,20 @@ import org.eclipse.jface.viewers.TreeSelection;
 import org.eclipse.swt.widgets.Shell;
 
 import eu.etaxonomy.cdm.api.service.IClassificationService;
+import eu.etaxonomy.cdm.model.metadata.SecReferenceHandlingEnum;
+import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
 import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigatorLabels;
 import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingChangeAcceptedTaxonToSynonymOperation;
 import eu.etaxonomy.taxeditor.operation.e4.RemotingCdmHandlerE4;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.dialog.selection.ReferenceSelectionDialog;
 import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
 
 /**
@@ -44,6 +49,7 @@ public class RemotingChangeAcceptedTaxonToSynonymHandlerE4 extends RemotingCdmHa
 
     private Set<TaxonNodeDto> oldTaxonNodes = new HashSet();
     private Classification classification;
+    protected boolean isSetSource = false;
 
     public RemotingChangeAcceptedTaxonToSynonymHandlerE4() {
         super(TaxonNavigatorLabels.CHANGE_ACCEPTED_TAXON_TO_SYNONYM_LABEL);
@@ -114,8 +120,13 @@ public class RemotingChangeAcceptedTaxonToSynonymHandlerE4 extends RemotingCdmHa
             MPart activePart,
             MHandledMenuItem menuItem) {
         Set<UUID> excludeTaxa = new HashSet<>();
+        Set<UUID> secUuids = new HashSet<>();
+        Set<UUID> nodeUuids = new HashSet();
+
         for (TaxonNodeDto oldNode:oldTaxonNodes){
                excludeTaxa.add(oldNode.getTaxonUuid());
+               secUuids.add(oldNode.getSecUuid());
+               nodeUuids.add(oldNode.getUuid());
         }
         TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(shell,
 //                new ConversationHolderMock(),
@@ -127,15 +138,51 @@ public class RemotingChangeAcceptedTaxonToSynonymHandlerE4 extends RemotingCdmHa
         if (newAcceptedTaxonNode == null) {
             return null;
         }
-        Set<UUID> nodeUuids = new HashSet();
-        for (TaxonNodeDto node: oldTaxonNodes){
-               nodeUuids.add(node.getUuid());
+
+        SecReferenceHandlingEnum secHandling = PreferencesUtil.getSecReferenceHandlingPreference();
+        UUID newSecUuid = null;
+        UUID newTaxonUuid = newAcceptedTaxonNode.getTaxon() != null && newAcceptedTaxonNode.getTaxon().getSec() != null ? newAcceptedTaxonNode.getTaxon().getSec().getUuid(): null;
+        if (secUuids.size() > 1 && !(secHandling.equals(SecReferenceHandlingEnum.KeepAlways) || secHandling.equals(SecReferenceHandlingEnum.AlwaysDelete))){
+            int result = MessagingUtils.confirmDialog(Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_title, Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_message,
+                    new String[]{Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Keep, Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Parent, Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Select});
+            if (result == 2){
+                Reference sec = ReferenceSelectionDialog.select(shell, null);
+                newSecUuid = sec != null? sec.getUuid(): null;
+            }else if (result == 1){
+                newSecUuid = newTaxonUuid;
+            }else if (result == 0){
+                secHandling = SecReferenceHandlingEnum.UseNewParentSec;
+            }else{
+                return null;
+            }
+
+        }else{
+
+
+            UUID oldSecUuid = secUuids.iterator().next();
+            if ((secUuids.size() > 0 && newTaxonUuid != oldSecUuid && secHandling.equals(SecReferenceHandlingEnum.KeepWhenSame) )|| secHandling.equals(SecReferenceHandlingEnum.WarningSelect)){
+                int result = MessagingUtils.confirmDialog(Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_title, Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_message,
+                        new String[]{Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Keep, Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Parent, Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Select});
+                if (result == 2){
+                    Reference sec = ReferenceSelectionDialog.select(shell, null);
+                    newSecUuid = sec != null? sec.getUuid(): null;
+                }else if (result == 1){
+                    newSecUuid = newTaxonUuid;
+                }else if (result == 0){
+                    newSecUuid = oldSecUuid;
+                }else{
+                    return null;
+                }
+
+            }
         }
+
+
         RemotingChangeAcceptedTaxonToSynonymOperation rcattso =
                 new RemotingChangeAcceptedTaxonToSynonymOperation(getTrigger(),
                         false,
                         nodeUuids,
-                        newAcceptedTaxonNode.getUuid(), partService, activePart, application, false);
+                        newAcceptedTaxonNode.getUuid(), newSecUuid, secHandling, partService, activePart, application, isSetSource);
 
         return rcattso;
     }
index ef69141af110a67d1eaf054454c5e05e8e77f11a..842ec7b5541153f874595ca1c3f3ec0416841ad3 100755 (executable)
  */
 package eu.etaxonomy.taxeditor.navigation.navigator.e4.handler;
 
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.UUID;
-
-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.IStructuredSelection;
-import org.eclipse.jface.viewers.TreeSelection;
-import org.eclipse.swt.widgets.Shell;
-
-import eu.etaxonomy.cdm.api.service.IClassificationService;
-import eu.etaxonomy.cdm.model.taxon.Classification;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
-import eu.etaxonomy.taxeditor.editor.EditorUtil;
-import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
-import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigatorLabels;
-import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingChangeAcceptedTaxonToSynonymOperation;
-import eu.etaxonomy.taxeditor.operation.e4.RemotingCdmHandlerE4;
-import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
-
 /**
  *
  * @author pplitzner
  * @since Sep 6, 2017
  *
  */
-public class RemotingChangeAcceptedTaxonToSynonymSetNameInSourceHandlerE5 extends RemotingCdmHandlerE4 {
-
+public class RemotingChangeAcceptedTaxonToSynonymSetNameInSourceHandlerE5 extends RemotingChangeAcceptedTaxonToSynonymHandlerE4 {
 
-    private Set<TaxonNodeDto> oldTaxonNodes = new HashSet();
-    private Classification classification;
 
     public RemotingChangeAcceptedTaxonToSynonymSetNameInSourceHandlerE5() {
-        super(TaxonNavigatorLabels.CHANGE_ACCEPTED_TAXON_TO_SYNONYM_LABEL);
+        super();
+        isSetSource = true;
     }
 
-    @Override
-    public IStatus allowOperations(IStructuredSelection selection,
-            Shell shell,
-            MPart activePart,
-            MHandledMenuItem menuItem) {
-        // check that only a single taxon tree node has been selected
-//        if(selection.size() > 1) {
-//            return new Status(IStatus.ERROR,
-//                    "unknown", //$NON-NLS-1$
-//                    TaxonNavigatorLabels.SINGLE_TAXON_SELECTION_MESSAGE);
-//        }
-
-        // check for no taxon tree node selected
-        if(selection.size() == 0) {
-            return new Status(IStatus.ERROR,
-                    "unknown", //$NON-NLS-1$
-                    TaxonNavigatorLabels.NO_TAXON_SELECTION_MESSAGE);
-        }
-
-        // check that selected object is a taxon node
-        Iterator it = selection.iterator();
-        Classification nextClassification;
-        oldTaxonNodes = new HashSet<>();
-        while(it.hasNext()){
-               Object obj = it.next();
-               if(obj instanceof TaxonNodeDto) {
-                   oldTaxonNodes.add((TaxonNodeDto)obj);
-                   nextClassification = CdmStore.getService(IClassificationService.class).find(((TaxonNodeDto)obj).getClassificationUUID());
-                   if (classification == null){
-                       classification = nextClassification;
-                   }else if (!classification.equals(nextClassification)){
-                       return new Status(IStatus.ERROR,
-                               "unknown", //$NON-NLS-1$
-                               TaxonNavigatorLabels.ACCEPTED_TAXA_NEED_TO_BE_FROM_SAME_CLASSIFICATION);
-                   }
-               } else {
-                       if (obj instanceof TaxonNode && !((TaxonNode)obj).hasTaxon()){
-                               return new Status(IStatus.ERROR,
-                               "Operation not available for Classifications", //$NON-NLS-1$
-                               TaxonNavigatorLabels.SELECTED_OBJECT_NOT_TREE_NODE_MESSAGE);
-                       }
-                   return new Status(IStatus.ERROR,
-                           "unknown", //$NON-NLS-1$
-                           TaxonNavigatorLabels.SELECTED_OBJECT_NOT_TREE_NODE_MESSAGE);
-               }
-               // check that the source taxon node does not have children
-               if(((TaxonNodeDto)obj).getTaxonomicChildrenCount() > 0) {
-                   return new Status(IStatus.ERROR,
-                           "unknown", //$NON-NLS-1$
-                           TaxonNavigatorLabels.SOURCE_TAXON_HAS_CHILDREN_MESSAGE);
-
-               }
-
-               // check if corresponding name editor is closed
-               EditorUtil.closeObsoleteEditor((TaxonNodeDto)obj, partService);
-        }
-        return Status.OK_STATUS;
-    }
 
-    @Override
-    public AbstractOperation prepareOperation(IStructuredSelection selection,
-            Shell shell,
-            MPart activePart,
-            MHandledMenuItem menuItem) {
-        Set<UUID> excludeTaxa = new HashSet<>();
-        for (TaxonNodeDto oldNode:oldTaxonNodes){
-               excludeTaxa.add(oldNode.getTaxonUuid());
-        }
-        TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(shell,
-//                new ConversationHolderMock(),
-                Messages.RemotingChangeAcceptedTaxonToSynonymHandler_CHOOSE_TAXON,
-                excludeTaxa,
-                null,
-                classification.getUuid());
-
-        if (newAcceptedTaxonNode == null) {
-            return null;
-        }
-        Set<UUID> nodeUuids = new HashSet();
-        for (TaxonNodeDto node: oldTaxonNodes){
-               nodeUuids.add(node.getUuid());
-        }
-        RemotingChangeAcceptedTaxonToSynonymOperation rcattso =
-                new RemotingChangeAcceptedTaxonToSynonymOperation(getTrigger(),
-                        false,
-                        nodeUuids,
-                        newAcceptedTaxonNode.getUuid(), partService, activePart, application, true);
-
-        return rcattso;
-    }
-
-    @CanExecute
-    private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection, MHandledMenuItem menuItem){
-        boolean canExecute = !selection.isEmpty();
-        Object[] array = selection.toArray();
-        for (Object object : array) {
-            canExecute &= (object instanceof TaxonNodeDto) && ((TaxonNodeDto)selection.getFirstElement()).getTaxonUuid() != null;
-        }
-        menuItem.setVisible(canExecute);
-        return canExecute;
-    }
-
-    @Override
-    public void onComplete() {
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected Object getTrigger() {
-        return this;
-    }
 }
index b9e52f80c529ff6dc01c55006478967dd3d9ede9..7d8d729c77126c0bac83d02045c37771675899a8 100644 (file)
@@ -23,6 +23,7 @@ import eu.etaxonomy.cdm.api.application.CdmApplicationState;
 import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
+import eu.etaxonomy.cdm.model.metadata.SecReferenceHandlingEnum;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
@@ -39,7 +40,9 @@ public class RemotingChangeAcceptedTaxonToSynonymOperation extends RemotingCdmUp
 
     private Set<UUID> oldTaxonNodeUuids = new HashSet();
     private final UUID newAcceptedTaxonNodeUuid;
+    private UUID secundumUuid;
     private boolean setNameInSource ;
+    private SecReferenceHandlingEnum secHandling;
 
 
     private final static String LABEL = Messages.RemotingChangeAcceptedTaxonToSynonymOperation_CHANGE_OP;
@@ -51,6 +54,8 @@ public class RemotingChangeAcceptedTaxonToSynonymOperation extends RemotingCdmUp
             boolean async,
             Set<UUID> oldTaxonNodeUuids,
             UUID newAcceptedTaxonNodeUuid,
+            UUID newSecUuid,
+            SecReferenceHandlingEnum secHandling,
             EPartService partService,
             MPart activePart,
             MApplication application,
@@ -59,6 +64,8 @@ public class RemotingChangeAcceptedTaxonToSynonymOperation extends RemotingCdmUp
         this.oldTaxonNodeUuids.addAll(oldTaxonNodeUuids);
         this.newAcceptedTaxonNodeUuid = newAcceptedTaxonNodeUuid;
         this.setNameInSource = setNameInSource;
+        this.secundumUuid = newSecUuid;
+        this.secHandling = secHandling;
 
     }
 
@@ -69,6 +76,8 @@ public class RemotingChangeAcceptedTaxonToSynonymOperation extends RemotingCdmUp
             boolean async,
             UUID oldTaxonNodeUuid,
             UUID newAcceptedTaxonNodeUuid,
+            UUID newSecUuid,
+            SecReferenceHandlingEnum secHandling,
             EPartService partService,
                MPart activePart,
                MApplication application,
@@ -77,6 +86,8 @@ public class RemotingChangeAcceptedTaxonToSynonymOperation extends RemotingCdmUp
         this.oldTaxonNodeUuids.add(oldTaxonNodeUuid);
         this.newAcceptedTaxonNodeUuid = newAcceptedTaxonNodeUuid;
         this.setNameInSource = setNameInSource;
+        this.secundumUuid = newSecUuid;
+        this.secHandling = secHandling;
     }
 
     /**
@@ -86,11 +97,15 @@ public class RemotingChangeAcceptedTaxonToSynonymOperation extends RemotingCdmUp
             boolean async,
             UUID oldTaxonNodeUuid,
             UUID newAcceptedTaxonNodeUuid,
+            UUID newSecUuid,
+            SecReferenceHandlingEnum secHandling,
             boolean setNameInSource) {
         super(LABEL, Action.Update, source, async);
         this.oldTaxonNodeUuids.add(oldTaxonNodeUuid);
         this.newAcceptedTaxonNodeUuid = newAcceptedTaxonNodeUuid;
         this.setNameInSource = setNameInSource;
+        this.secundumUuid = newSecUuid;
+        this.secHandling = secHandling;
     }
 
     /* (non-Javadoc)
@@ -103,15 +118,17 @@ public class RemotingChangeAcceptedTaxonToSynonymOperation extends RemotingCdmUp
                updateResult = CdmApplicationState.getService(ITaxonNodeService.class).makeTaxonNodeASynonymOfAnotherTaxonNode(oldTaxonNodeUuids.iterator().next(),
                     newAcceptedTaxonNodeUuid,
                     null,
+                    secundumUuid,
                     null,
-                    null,
+                    secHandling,
                     setNameInSource);//TODO
        }else{
                updateResult = CdmApplicationState.getService(ITaxonNodeService.class).makeTaxonNodeSynonymsOfAnotherTaxonNode(oldTaxonNodeUuids,
                     newAcceptedTaxonNodeUuid,
                     null,
+                    secundumUuid,
                     null,
-                    null,
+                    secHandling,
                     setNameInSource);//TODO
        }
        updateNameEditor();
@@ -131,10 +148,13 @@ public class RemotingChangeAcceptedTaxonToSynonymOperation extends RemotingCdmUp
                                        if (part == activePart){
                                            setFocus = true;
                                        }
-                                       if (object instanceof TaxonNameEditorE4){
+                                       if (part.getContributionURI().endsWith("TaxonNameEditorE4")){
+
+                                       }
+                                       if (object instanceof TaxonNameEditorE4 ){
                                                Set<TaxonNode> nodes = ((TaxonNameEditorE4)object).getTaxon().getTaxonNodes();
                                                for (TaxonNode node: nodes){
-                                                       if (node.getTaxon().getUuid().equals(newAcceptedTaxonNodeUuid)){
+                                                       if (node.getUuid().equals(newAcceptedTaxonNodeUuid)){
                                                                EditorUtil.updateEditor(node, (TaxonNameEditorE4)object);
                                                        }
 
index 3cb5f4e2c2f28e32d03081b75a74b6f848cd6f82..5b1689bc175e5aa6b8878103968cc48c0fb92fce 100755 (executable)
         type="org.eclipse.jface.viewers.IStructuredSelection">
    </propertyTester>
    <propertyTester
-         class="eu.etaxonomy.taxeditor.featuretree.FeatureTreePropertyTester"
-         id="eu.etaxonomy.taxeditor.featuretree.FeatureTreePropertyTester"
-         namespace="eu.etaxonomy.taxeditor.featuretree.FeatureTreePropertyTester"
-         properties="isFeatureTree"
+         class="eu.etaxonomy.taxeditor.featuretree.TermTreePropertyTester"
+         id="eu.etaxonomy.taxeditor.featuretree.TermTreePropertyTester"
+         namespace="eu.etaxonomy.taxeditor.featuretree.TermTreePropertyTester"
+         properties="isTermTree"
          type="org.eclipse.jface.viewers.IStructuredSelection">
    </propertyTester>
 </extension>
          selection="eu.etaxonomy.cdm.model.taxon.TaxonNode"
          viewerName="%viewCommandMapping.viewerName.TAXON_NODE_WIZARD">
    </viewCommandMapping>
+    <viewCommandMapping
+         commandId="eu.etaxonomy.taxeditor.store.openDefinedTermEditor"
+         selection="eu.etaxonomy.cdm.persistence.dto.TermNodeDto"
+         viewerName="Vocabulary">
+   </viewCommandMapping>
 </extension>
 <extension
       id="eu.etaxonomy.taxeditor.store.workbench.model"
          id="eu.etaxonomy.taxeditor.preferences.taxonPreferences"
          name="%page.name.52">
    </page>
-       <page
+   <page
         category="eu.etaxonomy.taxeditor.preferences.taxonPreferences"
          class="eu.etaxonomy.taxeditor.preference.PublishFlagLocalPreference"
          id="eu.etaxonomy.taxeditor.preferences.publishFlagPreference"
          name="%page.name.46">
    </page>
+   <page
+        category="eu.etaxonomy.taxeditor.preferences.taxonPreferences"
+         class="eu.etaxonomy.taxeditor.preference.SecundumReferenceHandling"
+         id="eu.etaxonomy.taxeditor.preferences.secundumPreference"
+         name="Secundum Reference">
+   </page>
    <page
          category="eu.etaxonomy.taxeditor.preferences.general"
          class="eu.etaxonomy.taxeditor.preference.UIPreferences"
             name="%page.name.42">
       </page>
       <page
-            category="eu.etaxonomy.taxeditor.preferences.general"
+         category="eu.etaxonomy.taxeditor.preferences.general"
+         class="eu.etaxonomy.taxeditor.preference.TaxonPreferences"
+         id="eu.etaxonomy.taxeditor.preferences.taxonPreferences"
+         name="%page.name.52">
+      </page>
+      <page
+            category="eu.etaxonomy.taxeditor.preferences.taxonPreferences"
             class="eu.etaxonomy.taxeditor.databaseAdmin.preferencePage.PublishFlagPreference"
             id="eu.etaxonomy.taxeditor.preferences.publishFlagPreference"
             name="%page.name.46">
+      </page>
+       <page
+            category="eu.etaxonomy.taxeditor.preferences.taxonPreferences"
+            class="eu.etaxonomy.taxeditor.databaseAdmin.preferencePage.SecundumReferenceHandlingAdmin"
+            id="eu.etaxonomy.taxeditor.preferences.secRefHandling"
+            name="Secundum Reference">
       </page>
       <page
            category="eu.etaxonomy.taxeditor.preferences.namePreferences"
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/preferencePage/SecundumReferenceHandlingAdmin.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/databaseAdmin/preferencePage/SecundumReferenceHandlingAdmin.java
new file mode 100755 (executable)
index 0000000..a42daf7
--- /dev/null
@@ -0,0 +1,80 @@
+/**
+* Copyright (C) 2020 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.databaseAdmin.preferencePage;
+
+import eu.etaxonomy.cdm.api.application.ICdmRepository;
+import eu.etaxonomy.cdm.api.service.IPreferenceService;
+import eu.etaxonomy.cdm.model.metadata.CdmPreference;
+import eu.etaxonomy.cdm.model.metadata.SecReferenceHandlingEnum;
+import eu.etaxonomy.taxeditor.l10n.Messages;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.preference.SecundumReferenceHandling;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author k.luther
+ * @since Dec 1, 2020
+ */
+public class SecundumReferenceHandlingAdmin extends SecundumReferenceHandling {
+
+    @Override
+    public void init() {
+        super.init();
+
+
+    }
+
+
+
+     @Override
+     public boolean performOk() {
+         if (!isApply()){
+             return true;
+         }
+         ICdmRepository controller = CdmStore.getCurrentApplicationConfiguration();
+         if (controller == null){
+             return false;
+         }
+         IPreferenceService service = controller.getPreferenceService();
+         String textCombo = synonymSecundumBehaviour.getText();
+         String text = null;
+         // default -> delete preference
+         if(textCombo.startsWith(Messages.Preference_Use_Default) && allowOverride){
+             service.remove(pref.getKey());
+             PreferencesUtil.updateDBPreferences();
+             return true;
+         }else if (textCombo.startsWith(Messages.Preference_Use_Default)){
+             text = null;
+         }else{
+             for (SecReferenceHandlingEnum display: SecReferenceHandlingEnum.values()){
+                 if (display.getLabel().equals(textCombo)){
+                     text = display.getKey();
+                     break;
+                 }
+             }
+         }
+         CdmPreference preference = CdmPreference.NewInstance(pref.getKey(), text);
+         preference.setAllowOverride(allowOverride);
+
+         service.set(preference);
+         PreferencesUtil.updateDBPreferences();
+
+         return true;
+     }
+
+
+
+     @Override
+     public void getValues() {
+         super.getValues();
+         isAdminPreference = true;
+
+
+     }
+}
index 08cea49ac29897782e0b5fa7ff4fdf299b790967..dd8eb148d9c7f40df54046a9f60b11ab5a400a16 100644 (file)
@@ -612,5 +612,5 @@ CdmLightPreference_description=Default settings for CdmLight export
 CdmLightPreference_distributionString=Export of condensed distribution string
 CdmLightPreference_distributionString_tooltip=Distributions of a taxon are exported as condensed string, created by the selected algorithm. 
 
-SecundumPreference_description=Default settings of secundum reference handling for move synonym to accepted taxon.
+SecundumPreference_description=Default settings of secundum reference handling for change synonym to accepted taxon and changing an accepted taxon to synonym.
 Tree= Tree
\ No newline at end of file
index 1c22c3b6e1c6c6b2dc69ca0e76495c18453106ac..169ba76a92e55c12920bbd44f2fe32e1d09a8e15 100644 (file)
@@ -612,5 +612,5 @@ CdmLightPreference_description=Default Einstellungen f
 CdmLightPreference_distributionString=Export eines Condensed Distribution Strings
 CdmLightPreference_distributionString_tooltip=Für jedes Taxon wird aus den Verbreitungsdaten ein kompakter String exportiert, der entsprechend dem ausgewählten Algorithmus erzeugt wird.
 
-SecundumPreference_description=Default Einstellungen für das Setzen der Secundum Referenz beim Verschieben eines Synonyms zu einem akzeptierten Taxon.
+SecundumPreference_description=Default Einstellungen für das Setzen der Secundum Referenz beim Ändern eines Synonyms in ein akzeptierten Taxon und anders herum.
 Tree=-Baum
\ No newline at end of file
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/SecundumReferenceHandling.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/SecundumReferenceHandling.java
new file mode 100755 (executable)
index 0000000..e1560f4
--- /dev/null
@@ -0,0 +1,189 @@
+/**
+* Copyright (C) 2020 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.preference;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+import eu.etaxonomy.cdm.model.metadata.CdmPreference;
+import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey;
+import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
+import eu.etaxonomy.cdm.model.metadata.PreferenceSubject;
+import eu.etaxonomy.cdm.model.metadata.SecReferenceHandlingEnum;
+import eu.etaxonomy.taxeditor.l10n.Messages;
+import eu.etaxonomy.taxeditor.preference.menu.CdmPreferencePage;
+
+/**
+ * @author k.luther
+ * @since Dec 1, 2020
+ */
+public class SecundumReferenceHandling extends CdmPreferencePage {
+
+    protected SecReferenceHandlingEnum secundumBehaviour;
+
+    protected Combo synonymSecundumBehaviour;
+    protected CdmPreference pref = null;
+    Button allowOverrideButton;
+
+    protected boolean allowOverride;
+    private boolean override = true;
+
+
+   @Override
+   public void init() {
+       super.init();
+
+
+   }
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected Control createContents(Composite parent) {
+        getValues();
+
+        Composite composite = createComposite(parent);
+
+        if (!allowOverride && !isAdminPreference){
+            final CLabel description = new CLabel(composite, SWT.NULL);
+            description.setText(Messages.PublishFlagPreference_description_not_allowed);
+            description.setLayoutData(createTextGridData());
+            return composite;
+        }
+
+        synonymSecundumBehaviour = createCombo(composite, SecReferenceHandlingEnum.values(), PreferencePredicate.DefaultBehaviourForSecundum, Messages.SecundumPreference_description, isAdminPreference);
+        synonymSecundumBehaviour.addSelectionListener(new SelectionListener() {
+
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                setApply(true);
+                if (!synonymSecundumBehaviour.getText().startsWith(Messages.Preference_Use_Default)){
+                    secundumBehaviour = (SecReferenceHandlingEnum)synonymSecundumBehaviour.getData(synonymSecundumBehaviour.getText());
+                }else{
+                    secundumBehaviour = null;
+                }
+
+            }
+
+            @Override
+            public void widgetDefaultSelected(SelectionEvent e) {
+                // TODO Auto-generated method stub
+
+                }
+            });
+            if (this.isAdminPreference){
+                allowOverrideButton = createAllowOverrideButton(composite);
+                allowOverrideButton.setSelection(allowOverride);
+                allowOverrideButton.addSelectionListener(new SelectionAdapter(){
+                    @Override
+                    public void widgetSelected(SelectionEvent e) {
+                        allowOverride = !allowOverride;
+                        setApply(true);
+                        }
+                });
+            }
+            int index = 0;
+
+            if(secundumBehaviour==null){
+                synonymSecundumBehaviour.select(0);
+            }
+            else{
+                for (String itemLabel : synonymSecundumBehaviour.getItems()){
+                    if (itemLabel.startsWith(secundumBehaviour.getLabel())){
+                        synonymSecundumBehaviour.select(index);
+                        break;
+                    }
+                    index++;
+                }
+            }
+
+            return composite;
+
+        }
+
+
+        @Override
+        public boolean performOk() {
+            if (isApply()){
+                if (secundumBehaviour != null){
+                    String text = synonymSecundumBehaviour.getText();
+                    for (SecReferenceHandlingEnum display: SecReferenceHandlingEnum.values()){
+                        if (text.startsWith(display.getLabel())){
+                            text = display.getKey();
+                            break;
+                        }
+                    }
+                    PreferencesUtil.setStringValue(PreferencePredicate.DefaultBehaviourForSecundum.getKey(), text);
+                    if (pref == null || !pref.getValue().equals(text)){
+                        PreferencesUtil.setBooleanValue(PreferencesUtil.prefOverrideKey(PreferencePredicate.DefaultBehaviourForSecundum.getKey()), true);
+                    }
+                }else{
+                    PreferencesUtil.setBooleanValue(PreferencesUtil.prefOverrideKey(PreferencePredicate.DefaultBehaviourForSecundum.getKey()), false);
+                }
+            }
+            return true;
+        }
+
+        @Override
+        public void getValues(){
+            secundumBehaviour = null;
+            PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewInstance("/MoveSynToAccepted/"), PreferencePredicate.DefaultBehaviourForSecundum);
+            pref = PreferencesUtil.getPreferenceFromDB(key);
+            if (pref == null){
+                pref = CdmPreference.NewInstance(key, PreferencePredicate.DefaultBehaviourForSecundum.getDefaultValue().toString());
+            }
+            allowOverride = pref.isAllowOverride();
+            try{
+                String secundumString = PreferencesUtil.getStringValue(PreferencePredicate.DefaultBehaviourForSecundum.getKey(), true);
+
+                if (secundumString != null){
+                    secundumBehaviour = SecReferenceHandlingEnum.valueOf(secundumString);
+                }
+            }catch (IllegalArgumentException e){
+                secundumBehaviour = SecReferenceHandlingEnum.KeepWhenSame;
+            }
+            String prefString = PreferencesUtil.prefOverrideKey(PreferencePredicate.DefaultBehaviourForSecundum.getKey());
+            override = PreferencesUtil.getBooleanValue(PreferencesUtil.prefOverrideKey(PreferencePredicate.DefaultBehaviourForSecundum.getKey()), true);
+            if (!override){
+                secundumBehaviour = null;
+            }
+        }
+
+        @Override
+        protected void performDefaults() {
+            secundumBehaviour = null;
+            allowOverride = true;
+            int index = 0;
+
+            for (String itemLabel : synonymSecundumBehaviour.getItems()){
+                if (itemLabel.startsWith(Messages.Preference_Use_Default)){
+                    synonymSecundumBehaviour.select(index);
+                    break;
+                }
+                index++;
+            }
+            if (isAdminPreference){
+                allowOverrideButton.setSelection(allowOverride);
+            }
+            setApply(true);
+            super.performDefaults();
+        }
+
+
+
+
+
+}
index 6c11332e9e9b755db6353c4feb809b6e80a177ed..a4aeb9573e0489cf2ab9676a164091edfe82a8d9 100644 (file)
@@ -76,7 +76,7 @@ public class TaxonNavigatorTest extends BaseOperationTest {
         operation =  new RemotingChangeAcceptedTaxonToSynonymOperation(sessionOwner,
                 false,
                 oldTaxonNode.getUuid(),
-                newAcceptedTaxonNode.getUuid(), true);
+                newAcceptedTaxonNode.getUuid(), null, null, true);
         operation.execute(monitor, info);
         newAcceptedTaxonNode = taxonNodeService.load(newAcceptedTaxonNodeUuid);
         oldTaxonNode = taxonNodeService.load(oldTaxonNodeNodeUuid);