(no commit message)
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / faunaEuropaea / FaunaEuropaeaTaxonNameImport.java
index ab2cf698bcb76b5a6c794b59357facc1c0178cdc..1355d67867f0258c7cbf87e0afc6ebe3ac326a22 100644 (file)
@@ -405,9 +405,9 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
                        TaxonNameBase<?,?> taxonName = taxonBase.getName();\r
                        FaunaEuropaeaTaxon fauEuTaxon = fauEuTaxonMap.get(id);\r
                        boolean useOriginalGenus = false;\r
-//                     if (taxonBase instanceof Synonym){\r
-//                             useOriginalGenus = true;\r
-//                     }\r
+                       if (taxonBase instanceof Synonym){\r
+                               useOriginalGenus = true;\r
+                       }\r
                        \r
                        String nameString = \r
                                buildTaxonName(fauEuTaxon, taxonBase, taxonName, useOriginalGenus, fauEuConfig);\r
@@ -416,12 +416,6 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
                                logger.info("Name of Synonym: " + nameString);\r
                        }\r
                        \r
-                       // TEST\r
-                       if (nameString.startsWith("Anoecia vagans")) {\r
-                               logger.error("Anoecia vagans (Koch, 1856)");\r
-                       }\r
-                       // TEST\r
-\r
                        if (fauEuConfig.isDoBasionyms() \r
                                        && fauEuTaxon.getRankId() > R_SUBGENUS\r
                                        && (fauEuTaxon.getOriginalGenusId() != 0)) {\r
@@ -433,9 +427,9 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
                                        logger.debug("actual genus id = " + actualGenusId + ", original genus id = " + originalGenusId);\r
                                }\r
                                \r
-                               if (fauEuTaxon.isParenthesis() && actualGenusId != originalGenusId && taxonBase.isInstanceOf(Taxon.class)) { \r
+                               if (actualGenusId != originalGenusId && taxonBase.isInstanceOf(Taxon.class)) {\r
                                        success = createBasionym(fauEuTaxon, taxonBase, taxonName, fauEuConfig, synonymSet);\r
-                               } else if (fauEuTaxon.isParenthesis()){\r
+                               } else if (fauEuTaxon.isParenthesis()) {\r
                                        //the authorteam should be set in parenthesis because there should be a basionym, but we do not know it?\r
                                        ZoologicalName zooName = taxonName.deproxy(taxonName, ZoologicalName.class);\r
                                        zooName.setBasionymAuthorTeam(zooName.getCombinationAuthorTeam());\r
@@ -451,7 +445,8 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
 \r
        \r
        private boolean createBasionym(FaunaEuropaeaTaxon fauEuTaxon, TaxonBase<?> taxonBase, \r
-                       TaxonNameBase<?,?>taxonName, FaunaEuropaeaImportConfigurator fauEuConfig, Set<Synonym> synonymSet) {\r
+                       TaxonNameBase<?,?>taxonName, FaunaEuropaeaImportConfigurator fauEuConfig,\r
+                       Set<Synonym> synonymSet) {\r
 \r
                boolean success = true;\r
 \r
@@ -466,10 +461,13 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
                        basionym.setPublicationYear(zooName.getPublicationYear());\r
 \r
                        // add originalGenusId as source\r
-                       String originalGenusIdString = "" + fauEuTaxon.getOriginalGenusId();\r
+                       String originalGenusIdString = "" + fauEuTaxon.getId();\r
                        IdentifiableSource basionymSource = IdentifiableSource.NewInstance(originalGenusIdString, "originalGenusId");\r
                        basionym.addSource(basionymSource);\r
                        \r
+                       // add original database reference\r
+                       ImportHelper.setOriginalSource(basionym, fauEuConfig.getSourceReference(), fauEuTaxon.getId(), "TaxonName");\r
+                       \r
                        zooName.addBasionym(basionym, fauEuConfig.getSourceReference(), null, null);\r
                        zooName.setBasionymAuthorTeam(zooName.getCombinationAuthorTeam());\r
                        zooName.setCombinationAuthorTeam(null);\r
@@ -560,7 +558,7 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
 \r
                StringBuilder stringBuilder = new StringBuilder();\r
                \r
-               if(useOriginalGenus == true) {\r
+               if(useOriginalGenus) {\r
                        stringBuilder.append(originalGenusName);\r
                        genusOrUninomial.delete(0, genusOrUninomial.length());\r
                        genusOrUninomial.append(originalGenusName);\r
@@ -573,15 +571,24 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
        }\r
 \r
        \r
-       private String genusSubGenusPart(StringBuilder originalGenusName, boolean useOriginalGenus,\r
+       private String genusSubGenusPart(StringBuilder originalGenusName, boolean useOriginalGenus, \r
                        StringBuilder genusOrUninomial,\r
-                       StringBuilder infraGenericEpithet) {\r
+                       StringBuilder infraGenericEpithet,\r
+                       FaunaEuropaeaTaxon fauEuTaxon) {\r
 \r
                StringBuilder stringBuilder = new StringBuilder();\r
                \r
                stringBuilder.append(genusPart(originalGenusName, useOriginalGenus, genusOrUninomial));\r
 \r
-               if (useOriginalGenus == true) {\r
+               // The infraGenericEpithet is set to empty only if the original genus should be used and\r
+               // the actualGenusId is not the originalGenusId.\r
+               // This differentiation is relevant for synonyms and for basionyms.\r
+               // InfraGenericEpithets of accepted taxa are not touched at all.\r
+               Integer originalGenusId = fauEuTaxon.getOriginalGenusId();\r
+               Integer actualGenusId = getActualGenusId(fauEuTaxon);\r
+               if (useOriginalGenus && originalGenusId != actualGenusId && \r
+                               originalGenusId.intValue() > 0 &&\r
+                               actualGenusId.intValue() > 0) {\r
                        infraGenericEpithet.delete(0, infraGenericEpithet.length());\r
                        stringBuilder.append(" ");\r
                        return stringBuilder.toString();\r
@@ -608,70 +615,11 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
                actualGenusId = ranks.get(R_GENUS);\r
 \r
                return actualGenusId;\r
-\r
-/*             int actualGenusId = -1;\r
-               int rank = fauEuTaxon.getRankId();\r
-               int parentRankId = fauEuTaxon.getParentRankId();\r
-               int grandParentRankId = fauEuTaxon.getGrandParentRankId();\r
-               int greatGrandParentRankId = fauEuTaxon.getGreatGrandParentRankId();\r
-               \r
-               if (fauEuTaxon.isValid()) { // Taxon\r
-                       \r
-                       if (rank == R_SPECIES) {\r
-\r
-                               if(parentRankId == R_SUBGENUS) {\r
-\r
-                                       actualGenusId = fauEuTaxon.getGrandParentId();\r
-       \r
-                               } else if(parentRankId == R_GENUS) {\r
-\r
-                                       actualGenusId = fauEuTaxon.getParentId();\r
-                               }\r
-\r
-                       } else if (rank == R_SUBSPECIES) {\r
-\r
-                               if(grandParentRankId == R_SUBGENUS) {\r
-\r
-                                       actualGenusId = fauEuTaxon.getGreatGrandParentId();\r
-                                       \r
-                               } else if (grandParentRankId == R_GENUS) {\r
-\r
-                                       actualGenusId = fauEuTaxon.getGrandParentId();\r
-\r
-                               }\r
-                       }\r
-               } else { // Synonym\r
-                       \r
-                       if (rank == R_SPECIES) {\r
-\r
-                               if(grandParentRankId == R_SUBGENUS) {\r
-                                       \r
-                                       actualGenusId = fauEuTaxon.getGreatGrandParentId();\r
-                                       \r
-                               } else if (grandParentRankId == R_GENUS) {\r
-                                       \r
-                                       actualGenusId = fauEuTaxon.getGrandParentId();\r
-\r
-                               }\r
-\r
-                       } else if (rank == R_SUBSPECIES) {\r
-                               \r
-                               if(greatGrandParentRankId == R_SUBGENUS) {\r
-                                       \r
-                                       actualGenusId = fauEuTaxon.getGreatGreatGrandParentId();\r
-                                       \r
-                               } else if (greatGrandParentRankId == R_GENUS) {\r
-                                       \r
-                                       actualGenusId = fauEuTaxon.getGreatGrandParentId();\r
-                               }\r
-                       }\r
-               }\r
-               return actualGenusId;*/\r
        }\r
        \r
        \r
        /** Build species and subspecies names */\r
-       private String buildLowerTaxonName(StringBuilder originalGenus, boolean useOriginalGenus,\r
+       private String buildLowerTaxonName(StringBuilder originalGenus, boolean useOriginalGenus, \r
                        StringBuilder genusOrUninomial, StringBuilder infraGenericEpithet, \r
                        StringBuilder specificEpithet, StringBuilder infraSpecificEpithet,\r
                        FaunaEuropaeaTaxon fauEuTaxon) {\r
@@ -710,7 +658,8 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
                                        //differ between isParanthesis= true and false\r
                                        String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
                                                        genusOrUninomial.append(grandParentName), \r
-                                                       infraGenericEpithet.append(parentName));\r
+                                                       infraGenericEpithet.append(parentName),\r
+                                                       fauEuTaxon);\r
                                                nameCacheStringBuilder.append(genusSubGenusPart);\r
                                        \r
 \r
@@ -729,7 +678,8 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
 \r
                                        String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
                                                        genusOrUninomial.append(greatGrandParentName), \r
-                                                       infraGenericEpithet.append(grandParentName));\r
+                                                       infraGenericEpithet.append(grandParentName),\r
+                                                       fauEuTaxon);\r
                                        nameCacheStringBuilder.append(genusSubGenusPart);\r
 \r
                                } else if (grandParentRankId == R_GENUS) {\r
@@ -753,7 +703,8 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
                                        \r
                                        String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
                                                        genusOrUninomial.append(greatGrandParentName), \r
-                                                       infraGenericEpithet.append(grandParentName));\r
+                                                       infraGenericEpithet.append(grandParentName),\r
+                                                       fauEuTaxon);\r
                                        nameCacheStringBuilder.append(genusSubGenusPart);\r
 \r
                                } else if (grandParentRankId == R_GENUS) {\r
@@ -774,7 +725,8 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
                                        \r
                                        String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
                                                        genusOrUninomial.append(greatGreatGrandParentName), \r
-                                                       infraGenericEpithet.append(greatGrandParentName));\r
+                                                       infraGenericEpithet.append(greatGrandParentName),\r
+                                                       fauEuTaxon);\r
                                        nameCacheStringBuilder.append(genusSubGenusPart);\r
                                        \r
                                } else if (greatGrandParentRankId == R_GENUS) {\r
@@ -808,8 +760,7 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
                /* Concatenated taxon name string */\r
                String completeString = "";\r
 \r
-               StringBuilder originalGenus = null;\r
-               \r
+               StringBuilder originalGenus = new StringBuilder("");\r
                \r
                StringBuilder genusOrUninomial = new StringBuilder();\r
                StringBuilder infraGenericEpithet = new StringBuilder(); \r
@@ -821,7 +772,7 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
                \r
                // determine genus: this also works for cases of synonyms since the accepted taxon is its parent\r
                String originalGenusString = null;\r
-               if (useOriginalGenus) {\r
+               if (useOriginalGenus && ! "".equals(fauEuTaxon.getOriginalGenusName())) {\r
                        originalGenusString  = fauEuTaxon.getOriginalGenusName();\r
                } else {\r
                        originalGenusString = determineOriginalGenus(fauEuTaxon);\r
@@ -830,7 +781,7 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
                if (originalGenusString != null) {\r
                        originalGenus = new StringBuilder(originalGenusString);\r
                }\r
-               \r
+\r
                if(logger.isDebugEnabled()) { \r
                        logger.debug("Local taxon name (rank = " + rank + "): " + localString); \r
                }\r
@@ -858,7 +809,7 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
                        taxonBase = taxonBase.deproxy(taxonBase, TaxonBase.class);\r
 \r
                        completeString = \r
-                               buildLowerTaxonName(originalGenus, useOriginalGenus,\r
+                               buildLowerTaxonName(originalGenus, useOriginalGenus, \r
                                                genusOrUninomial, infraGenericEpithet, specificEpithet, infraSpecificEpithet,\r
                                                fauEuTaxon);\r
                        \r
@@ -874,7 +825,7 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
        \r
        \r
        /**\r
-        * Determines the original genus name by searching the taxon with rank R_GENUS.\r
+        * Determines the original genus name by searching the taxon with rank Genus.\r
         * @param fauEuTaxon\r
         * @return\r
         */\r
@@ -911,8 +862,8 @@ public class FaunaEuropaeaTaxonNameImport extends FaunaEuropaeaImportBase  {
                }\r
                \r
                //if ((!infraGenericEpithet.equals("") && fauEuTaxon.isParenthesis()) || (!infraGenericEpithet.equals("") && fauEuTaxon.)) {\r
-               if (fauEuTaxon.getParentRankId() == R_SUBGENUS || (fauEuTaxon.getRankId() == R_SUBGENUS) ||\r
-                               fauEuTaxon.getGrandParentRankId() == R_SUBGENUS){\r
+               if (fauEuTaxon.getParentRankId() == R_SUBGENUS || fauEuTaxon.getRankId() == R_SUBGENUS ||\r
+                               fauEuTaxon.getGrandParentRankId() == R_SUBGENUS || fauEuTaxon.getGreatGrandParentRankId() == R_SUBGENUS) {\r
                        zooName.setInfraGenericEpithet(emptyToNull(infraGenericEpithet));\r
                        if (logger.isDebugEnabled()) { \r
                                logger.debug("infraGenericEpithet: " + infraGenericEpithet); \r