ref #9340, #9734, #9668: further improvements for configurable sec handling during...
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / e4 / handler / ChangeAcceptedTaxonToSynonymHandlerE4.java
index 303493a1a80f7376ea65fed0c7deab90d695b2d0..6dcb1fc1f9bdc365827a4b5d102e1f56d095bf2f 100644 (file)
@@ -145,21 +145,37 @@ public class ChangeAcceptedTaxonToSynonymHandlerE4 extends CdmHandlerE4 {
 
         SecReferenceHandlingEnum secHandling = PreferencesUtil.getSecReferenceHandlingPreference();
         UUID newSecUuid = null;
-        UUID newTaxonUuid = newAcceptedTaxonNode.getTaxon() != null && newAcceptedTaxonNode.getTaxon().getSec() != null ? newAcceptedTaxonNode.getTaxon().getSec().getUuid(): null;
+        UUID newTaxonSecUuid = newAcceptedTaxonNode.getTaxon() != null && newAcceptedTaxonNode.getTaxon().getSec() != null ? newAcceptedTaxonNode.getTaxon().getSec().getUuid(): null;
+        if (newTaxonSecUuid != null){
+            secUuids.add(newTaxonSecUuid);
+        }
         //the moved taxa have different secundum references
-        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){
+        if (secUuids.size() > 1 && secHandling.equals(SecReferenceHandlingEnum.KeepOrWarn)){
+            MessagingUtils.warningDialog(Messages.SecundumReference,this, Messages.ChangeAcceptedTaxonToSynonymHandler_Different_Secundum_references);
+        }else if (secUuids.size() > 1 && !(secHandling.equals(SecReferenceHandlingEnum.AlwaysDelete) || secHandling.equals(SecReferenceHandlingEnum.UseNewParentSec))){
+            String message = null;
+            String[] options = null;
+            if (secHandling.equals(SecReferenceHandlingEnum.AlwaysSelect) && (newTaxonSecUuid != null && secUuids.contains(newTaxonSecUuid))){
+                message = Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_message_always_select;
+                options = new String[]{Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Keep, Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Select};
+            }else {
+                message = Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_message;
+                options = new String[]{Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Keep,  Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Select, Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Parent, };
+            }
+            int result = MessagingUtils.confirmDialog(Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_title, message, options);
+
+//            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 == 1){
                 //select new reference
                 Reference sec = ReferenceSelectionDialog.select(shell, null);
                 newSecUuid = sec != null? sec.getUuid(): null;
-            }else if (result == 1){
+            }else if (result == 2){
                 //use parent sec
-                newSecUuid = newTaxonUuid;
+                newSecUuid = newTaxonSecUuid;
             }else if (result == 0){
                 //keep sec (also homotypic synonyms with different sec will keep the secundum)
-                secHandling = SecReferenceHandlingEnum.KeepAlways;
+                secHandling = SecReferenceHandlingEnum.KeepOrWarn;
             }else{
                 return null;
             }
@@ -167,19 +183,27 @@ public class ChangeAcceptedTaxonToSynonymHandlerE4 extends CdmHandlerE4 {
             UUID oldSecUuid = secUuids.iterator().next();
             //the nodes moved have all the same sec, but the accepted taxon has a different one
             if ((secUuids.size() > 0 &&
-                    ((newTaxonUuid != null && oldSecUuid != null && !newTaxonUuid.equals(oldSecUuid))
-                            || (newTaxonUuid != null && oldSecUuid == null) ||(newTaxonUuid == null && oldSecUuid != null))
-                    && 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});
+                    ((newTaxonSecUuid != null && oldSecUuid != null && !newTaxonSecUuid.equals(oldSecUuid))
+                            || (newTaxonSecUuid != null && oldSecUuid == null) ||(newTaxonSecUuid == null && oldSecUuid != null))
+                    && secHandling.equals(SecReferenceHandlingEnum.KeepOrSelect) )|| secHandling.equals(SecReferenceHandlingEnum.AlwaysSelect)){
+                String message = null;
+                String[] options = null;
+                // always select but all secundum references are the same
+                if (secHandling.equals(SecReferenceHandlingEnum.AlwaysSelect) && (newTaxonSecUuid != null && secUuids.contains(newTaxonSecUuid))){
+                    message = Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_message_always_select;
+                    options = new String[]{Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Keep, Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Select};
+                }else {
+                    message = Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_message;
+                    options = new String[]{Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Keep,  Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Select, Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Parent, };
+                }
+                int result = MessagingUtils.confirmDialog(Messages.RemotingChangeAcceptedTaxonToSynonymHandler_Select_Sec_Reference_Handling_title, message, options);
                 if (result == 2){
+                    newSecUuid = newTaxonSecUuid;
+                }else if (result == 1){
                     Reference sec = ReferenceSelectionDialog.select(shell, null);
                     newSecUuid = sec != null? sec.getUuid(): null;
-                }else if (result == 1){
-                    newSecUuid = newTaxonUuid;
                 }else if (result == 0){
-                    secHandling = SecReferenceHandlingEnum.KeepAlways;
-
+                    secHandling = SecReferenceHandlingEnum.KeepOrWarn;
                 }else{
                     return null;
                 }