ref #10393: fix handling of specimen determined to synonyms in two
authorKatja Luther <k.luther@bgbm.org>
Tue, 12 Sep 2023 11:45:00 +0000 (13:45 +0200)
committerKatja Luther <k.luther@bgbm.org>
Tue, 12 Sep 2023 11:45:24 +0000 (13:45 +0200)
classifications

cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/SpecimenImportBase.java

index 387c8202bd96237fdf5a898e2bffaec40edce136..72276e4d3d6c4d13255a6e14171bd1632a70f63e 100755 (executable)
@@ -192,22 +192,27 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                Set<TaxonName> namesWithAcceptedTaxa = new HashSet<>();
                List<TaxonName> namesWithAcceptedTaxaInClassification = new ArrayList<>();
                for (TaxonName name : names) {
-                   if(!name.getTaxa().isEmpty()){
-                       Set<Taxon> taxa = name.getTaxa();
-                       for (Taxon taxon:taxa){
-                           if (!taxon.getTaxonNodes().isEmpty()){
+                   if(!name.getTaxonBases().isEmpty()){
+                       Set<TaxonBase> taxa = name.getTaxonBases();
+                       for (TaxonBase taxonBase:taxa){
+                           Taxon acceptedTaxon= null;
+                           if (taxonBase instanceof Synonym) {
+                               Synonym syn = (Synonym) taxonBase;
+                               acceptedTaxon = syn.getAcceptedTaxon();
+                           }else {
+                               acceptedTaxon = (Taxon)taxonBase;
+                           }
+                           if (!(acceptedTaxon).getTaxonNodes().isEmpty()){
                                //use only taxa included in a classification
-                               for (TaxonNode node:taxon.getTaxonNodes()){
+                               for (TaxonNode node:(acceptedTaxon).getTaxonNodes()){
                                    if (state.getClassification() != null && node.getClassification().equals(state.getClassification())){
                                        namesWithAcceptedTaxaInClassification.add(name);
                                    }else {
                                        namesWithAcceptedTaxa.add(name);
                                    }
                                }
-
                            }
                        }
-
                    }
                }
                String message = String.format("More than one taxon name was found for %s, maybe in other classifications!", scientificName);
@@ -231,25 +236,25 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                    }
                    return namesWithAcceptedTaxa.iterator().next();
                }
-               //no names with accepted taxa found -> check accepted taxa of synonyms
-               List<Taxon> taxaFromSynonyms = new ArrayList<>();
-               for (TaxonName name : names) {
-                   Set<TaxonBase> taxonBases = name.getTaxonBases();
-                   for (TaxonBase taxonBase : taxonBases) {
-                       if(taxonBase.isInstanceOf(Synonym.class)){
-                           Synonym synonym = HibernateProxyHelper.deproxy(taxonBase, Synonym.class);
-                           taxaFromSynonyms.add(synonym.getAcceptedTaxon());
-                       }
-                   }
-               }
-               if(taxaFromSynonyms.size()>0){
-                   if(taxaFromSynonyms.size()>1){
-                       state.getReport().addInfoMessage(message);
-                       logger.warn(message);
-                       return null;
-                   }
-                   return taxaFromSynonyms.iterator().next().getName();
-               }
+//             //no names with accepted taxa found -> check accepted taxa of synonyms -> this is handled in the first block now!
+//             List<Taxon> taxaFromSynonyms = new ArrayList<>();
+//             for (TaxonName name : names) {
+//                 Set<TaxonBase> taxonBases = name.getTaxonBases();
+//                 for (TaxonBase taxonBase : taxonBases) {
+//                     if(taxonBase.isInstanceOf(Synonym.class)){
+//                         Synonym synonym = HibernateProxyHelper.deproxy(taxonBase, Synonym.class);
+//                         taxaFromSynonyms.add(synonym.getAcceptedTaxon());
+//                     }
+//                 }
+//             }
+//             if(taxaFromSynonyms.size()>0){
+//                 if(taxaFromSynonyms.size()>1){
+//                     state.getReport().addInfoMessage(message);
+//                     logger.warn(message);
+//                     return null;
+//                 }
+//                 return taxaFromSynonyms.iterator().next().getName();
+//             }
                //no accepted and no synonyms -> return one of the names and create a new taxon
                if (names.isEmpty()){
                    return null;