ref #9590 remove redundant nameUsedInSource handling code
authorAndreas Müller <a.mueller@bgbm.org>
Wed, 12 May 2021 15:00:11 +0000 (17:00 +0200)
committerAndreas Müller <a.mueller@bgbm.org>
Wed, 12 May 2021 15:00:11 +0000 (17:00 +0200)
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonServiceImpl.java

index 9cf83c7e3eb7c2c3948551787296a0fa819a62ca..d93642080057a581c4278b4d5801b67030e5212f 100644 (file)
@@ -227,28 +227,14 @@ public class TaxonServiceImpl
        acceptedTaxon.setName(synonymName);
        synonym.setName(taxonName);
 
-       for(TaxonDescription description : acceptedTaxon.getDescriptions()){
-            String message = "Description copied from former accepted taxon: %s (Old title: %s)";
-            message = String.format(message, oldTaxonTitleCache, description.getTitleCache());
-            description.setTitleCache(message, true);
-            if(setNameInSource){
-                for (DescriptionElementBase element: description.getElements()){
-                    for (DescriptionElementSource source: element.getSources()){
-                        if (source.getNameUsedInSource() == null){
-                            source.setNameUsedInSource(taxonName);
-                        }
-                    }
-                }
-            }
-
-        }
+       //nameUsedInSource
+       handleNameUsedInSourceForSwap(setNameInSource, taxonName, oldTaxonTitleCache, acceptedTaxon.getDescriptions());
 
        saveOrUpdate(acceptedTaxon);
        saveOrUpdate(synonym);
        result.setCdmEntity(acceptedTaxon);
        result.addUpdatedObject(synonym);
 
-
                return result;
     }
 
@@ -257,6 +243,7 @@ public class TaxonServiceImpl
         acceptedTaxon.removeSynonym(synonym);
         TaxonName synonymName = synonym.getName();
         TaxonName taxonName = HibernateProxyHelper.deproxy(acceptedTaxon.getName());
+        String oldTaxonTitleCache = acceptedTaxon.getTitleCache();
 
         boolean sameHomotypicGroup = synonymName.getHomotypicalGroup().equals(taxonName.getHomotypicalGroup());
         synonymName.removeTaxonBase(synonym);
@@ -271,10 +258,13 @@ public class TaxonServiceImpl
         }
         Taxon newTaxon = acceptedTaxon.clone(true, true, false, true);
 
+        //move descriptions
         Set<TaxonDescription> descriptionsToCopy = new HashSet<>(acceptedTaxon.getDescriptions());
         for (TaxonDescription description: descriptionsToCopy){
             newTaxon.addDescription(description);
         }
+        //nameUsedInSource
+        handleNameUsedInSourceForSwap(setNameInSource, taxonName, oldTaxonTitleCache, newTaxon.getDescriptions());
 
         newTaxon.setName(synonymName);
 
@@ -314,23 +304,6 @@ public class TaxonServiceImpl
             taxonRelationship.setFromTaxon(null);
         }
 
-        //Move descriptions to new taxon
-        List<TaxonDescription> descriptions = new ArrayList<>( newTaxon.getDescriptions()); //to avoid concurrent modification errors (newAcceptedTaxon.addDescription() modifies also oldtaxon.descritpions())
-        for(TaxonDescription description : descriptions){
-            String message = "Description copied from former accepted taxon: %s (Old title: %s)";
-            message = String.format(message, acceptedTaxon.getTitleCache(), description.getTitleCache());
-            description.setTitleCache(message, true);
-            if(setNameInSource){
-                for (DescriptionElementBase element: description.getElements()){
-                    for (DescriptionElementSource source: element.getSources()){
-                        if (source.getNameUsedInSource() == null){
-                            source.setNameUsedInSource(taxonName);
-                        }
-                    }
-                }
-            }
-        }
-
         //taxon nodes
         List<TaxonNode> nodes = new ArrayList<>(acceptedTaxon.getTaxonNodes());
         for (TaxonNode node: nodes){
@@ -370,6 +343,24 @@ public class TaxonServiceImpl
         return result;
     }
 
+    private void handleNameUsedInSourceForSwap(boolean setNameInSource, TaxonName taxonName, String oldTaxonTitleCache,
+            Set<TaxonDescription> descriptions) {
+        for(TaxonDescription description : descriptions){
+            String message = "Description copied from former accepted taxon: %s (Old title: %s)";
+            message = String.format(message, oldTaxonTitleCache, description.getTitleCache());
+            description.setTitleCache(message, true);
+            if(setNameInSource){
+                for (DescriptionElementBase element: description.getElements()){
+                    for (DescriptionElementSource source: element.getSources()){
+                        if (source.getNameUsedInSource() == null){
+                            source.setNameUsedInSource(taxonName);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     @Override
     @Transactional(readOnly = false)
     public UpdateResult changeSynonymToAcceptedTaxon(Synonym synonym, Taxon acceptedTaxon, Reference newSecRef, String microRef, SecReferenceHandlingEnum secHandling, boolean deleteSynonym) {