Fauna Europaea Import
authora.babadshanjan <a.babadshanjan@localhost>
Tue, 7 Jul 2009 13:29:11 +0000 (13:29 +0000)
committera.babadshanjan <a.babadshanjan@localhost>
Tue, 7 Jul 2009 13:29:11 +0000 (13:29 +0000)
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaNameImport.java

index f2f4a616200ae06c2d33be503244b88d384c401b..8f38ed107a3e523790d16441aa5a7957b6a2c6ad 100644 (file)
@@ -431,35 +431,35 @@ public class FaunaEuropaeaNameImport extends FaunaEuropaeaImportBase  {
                                                        if (logger.isDebugEnabled()) {\r
                                                                logger.debug("Taxon created (" + taxonId + ")");\r
                                                        }\r
-                                                       \r
-                                                       if (fauEuConfig.isDoBasionyms()) {\r
-                                                               if (fauEuTaxon.isParenthesis() && (fauEuTaxon.getOriginalGenusId() != 0)\r
-                                                                               && (fauEuTaxon.getParentId() != fauEuTaxon.getOriginalGenusId())) {\r
-\r
-                                                                       // create basionym\r
-                                                                       ZoologicalName basionym = ZoologicalName.NewInstance(rank);\r
-                                                                       basionym.setNameCache(localName);\r
-                                                                       basionym.setCombinationAuthorTeam(author);\r
-                                                                       basionym.setPublicationYear(year);\r
-                                                                       zooName.addBasionym(basionym, sourceReference, null, null);\r
-                                                                       zooName.setBasionymAuthorTeam(author);\r
-                                                                       if (logger.isDebugEnabled()) {\r
-                                                                               logger.debug("Basionym created (" + taxonId + ")");\r
-                                                                       }\r
-\r
-                                                                       // create homotypic synonym\r
-                                                                       Synonym homotypicSynonym = Synonym.NewInstance(basionym, sourceReference);\r
-//                                                                     SynonymRelationship synRel = \r
-//                                                                             taxon.addSynonym(homotypicSynonym, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF(), \r
-//                                                                                             sourceReference, null);\r
-//                                                                     homotypicSynonym.addRelationship(synRel);\r
-                                                                       taxon.addHomotypicSynonym(homotypicSynonym, sourceReference, null);\r
-                                                                       if (logger.isDebugEnabled()) {\r
-                                                                               logger.debug("Homotypic synonym created (" + taxonId + ")");\r
-                                                                       }\r
-\r
-                                                               }\r
-                                                       }\r
+\r
+//                                                     if (fauEuConfig.isDoBasionyms()) {\r
+//                                                             if (fauEuTaxon.isParenthesis() && (fauEuTaxon.getOriginalGenusId() != 0)\r
+//                                                                             && (fauEuTaxon.getParentId() != fauEuTaxon.getOriginalGenusId())) {\r
+//\r
+//                                                                     // create basionym\r
+//                                                                     ZoologicalName basionym = ZoologicalName.NewInstance(rank);\r
+//                                                                     basionym.setNameCache(localName);\r
+//                                                                     basionym.setCombinationAuthorTeam(author);\r
+//                                                                     basionym.setPublicationYear(year);\r
+//                                                                     zooName.addBasionym(basionym, sourceReference, null, null);\r
+//                                                                     zooName.setBasionymAuthorTeam(author);\r
+//                                                                     if (logger.isDebugEnabled()) {\r
+//                                                                             logger.debug("Basionym created (" + taxonId + ")");\r
+//                                                                     }\r
+//\r
+//                                                                     // create homotypic synonym\r
+//                                                                     Synonym homotypicSynonym = Synonym.NewInstance(basionym, sourceReference);\r
+////                                                                   SynonymRelationship synRel = \r
+////                                                                           taxon.addSynonym(homotypicSynonym, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF(), \r
+////                                                                                           sourceReference, null);\r
+////                                                                   homotypicSynonym.addRelationship(synRel);\r
+//                                                                     taxon.addHomotypicSynonym(homotypicSynonym, sourceReference, null);\r
+//                                                                     if (logger.isDebugEnabled()) {\r
+//                                                                             logger.debug("Homotypic synonym created (" + taxonId + ")");\r
+//                                                                     }\r
+//\r
+//                                                             }\r
+//                                                     }\r
                                                        \r
                                                }\r
                                                taxonBase = taxon;\r
@@ -509,30 +509,6 @@ public class FaunaEuropaeaNameImport extends FaunaEuropaeaImportBase  {
        }\r
        \r
        \r
-//     private boolean createAdditionalObjects(FaunaEuropaeaTaxon fauEuTaxon,\r
-//                     TaxonBase<?> taxonBase, ZoologicalName zooName,\r
-//                     FaunaEuropaeaImportState state) { \r
-//\r
-//             Map<String, MapWrapper<? extends CdmBase>> stores = state.getStores();\r
-//             MapWrapper<TaxonBase> taxonStore = (MapWrapper<TaxonBase>)stores.get(ICdmIO.TAXON_STORE);\r
-//             FaunaEuropaeaImportConfigurator fauEuConfig = state.getConfig();\r
-//             ReferenceBase<?> sourceRef = fauEuConfig.getSourceReference();\r
-//             MapWrapper<TeamOrPersonBase> authorStore = (MapWrapper<TeamOrPersonBase>)stores.get(ICdmIO.TEAM_STORE);\r
-//\r
-//             // create basionym\r
-//             if (fauEuTaxon.isParenthesis() && (fauEuTaxon.getOriginalGenusId() != 0)\r
-//                             && (fauEuTaxon.getParentId() != fauEuTaxon.getOriginalGenusId())) {\r
-//                     TeamOrPersonBase<?> author = authorStore.get(fauEuTaxon.getAuthorId());\r
-//                     ZoologicalName basionym = ZoologicalName.NewInstance(fauEuTaxon.getRankId());\r
-//                     basionym.setNameCache(fauEuTaxon.getLocalName());\r
-//                     basionym.setCombinationAuthorTeam(author);\r
-//                     basionym.setPublicationYear(fauEuTaxon.getYear());\r
-//                     // TODO: add microcitation, rule considered\r
-//                     zooName.addBasionym(basionym, sourceRef, null, null);\r
-//                     zooName.setBasionymAuthorTeam(author);\r
-//             }\r
-//     }\r
-       \r
        /**\r
         * Processes taxa from complete taxon store\r
         */\r
@@ -569,28 +545,61 @@ public class FaunaEuropaeaNameImport extends FaunaEuropaeaImportBase  {
                                        if (logger.isDebugEnabled()) { \r
                                                logger.debug("Original genus FauEu taxon is null"); \r
                                        }\r
-\r
                                }\r
                        }\r
                        \r
-//                     String nameString = calculateTaxonName(fauEuTaxon, taxonBase, taxonName, taxonStore, fauEuTaxonMap);\r
                        String nameString = \r
-                               buildTaxonName(fauEuTaxon, taxonBase, taxonName, taxonStore, fauEuTaxonMap, fauEuConfig);\r
-//                     setTaxonName(nameString, fauEuTaxon, taxonBase, fauEuConfig);\r
+                               buildTaxonName(fauEuTaxon, taxonBase, taxonName, fauEuTaxonMap, fauEuConfig);\r
+                       if (fauEuConfig.isDoBasionyms() && (fauEuTaxon.getParentId() != fauEuTaxon.getOriginalGenusId())) {\r
+                               success = createBasionym(fauEuTaxon, taxonBase, taxonName, fauEuTaxonMap, fauEuConfig);\r
+                       }\r
                }\r
                return success; \r
        }\r
+\r
        \r
-       \r
-       /* Remove last part of name */\r
-       private String removeEpithet(String nameString) {\r
-               \r
-               String subString = nameString;\r
-               int index = nameString.lastIndexOf(" ");\r
-               if (index > 0) {\r
-                       subString = nameString.substring(0, index);\r
+       private boolean createBasionym(FaunaEuropaeaTaxon fauEuTaxon, TaxonBase<?> taxonBase, TaxonNameBase<?,?>taxonName, \r
+                       Map<Integer, FaunaEuropaeaTaxon> fauEuTaxonMap, FaunaEuropaeaImportConfigurator fauEuConfig) {\r
+\r
+//             if (fauEuTaxon.isParenthesis() && (fauEuTaxon.getOriginalGenusId() != 0)\r
+//             && (fauEuTaxon.getParentId() != fauEuTaxon.getOriginalGenusId())) {\r
+\r
+               boolean success = true;\r
+\r
+               try {\r
+                       ZoologicalName zooName = taxonName.deproxy(taxonName, ZoologicalName.class);\r
+                       Taxon taxon = taxonBase.deproxy(taxonBase, Taxon.class);\r
+                       \r
+                       // create basionym\r
+                       ZoologicalName basionym = ZoologicalName.NewInstance(taxonName.getRank());\r
+                       basionym.setCombinationAuthorTeam(zooName.getCombinationAuthorTeam());\r
+                       basionym.setPublicationYear(zooName.getPublicationYear());\r
+                       zooName.addBasionym(basionym, fauEuConfig.getSourceReference(), null, null);\r
+                       zooName.setBasionymAuthorTeam(zooName.getCombinationAuthorTeam());\r
+                       if (logger.isDebugEnabled()) {\r
+                               logger.debug("Basionym created (" + fauEuTaxon.getId() + ")");\r
+                       }\r
+\r
+                       // create homotypic synonym\r
+                       Synonym homotypicSynonym = Synonym.NewInstance(basionym, fauEuConfig.getSourceReference());\r
+//                     SynonymRelationship synRel = \r
+//                     taxon.addSynonym(homotypicSynonym, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF(), \r
+//                     sourceReference, null);\r
+//                     homotypicSynonym.addRelationship(synRel);\r
+                       taxon.addHomotypicSynonym(homotypicSynonym, fauEuConfig.getSourceReference(), null);\r
+                       if (logger.isDebugEnabled()) {\r
+                               logger.debug("Homotypic synonym created (" + fauEuTaxon.getId() + ")");\r
+                       }\r
+                       \r
+                       buildTaxonName(fauEuTaxon, homotypicSynonym, basionym, fauEuTaxonMap, fauEuConfig);\r
+                       \r
+               } catch (Exception e) {\r
+                       logger.warn("Exception occurred when creating basionym for " + fauEuTaxon.getId());\r
+                       e.printStackTrace();\r
                }\r
-               return subString;\r
+               \r
+               \r
+               return success;\r
        }\r
        \r
        \r
@@ -615,6 +624,16 @@ public class FaunaEuropaeaNameImport extends FaunaEuropaeaImportBase  {
        }\r
 \r
 \r
+       /* Build taxon title cache */\r
+       private String buildTaxonTitleCache(String nameCache, String referenceCache) {\r
+               \r
+               StringBuilder titleCacheStringBuilder = new StringBuilder(nameCache);\r
+               titleCacheStringBuilder.append(" sec. ");\r
+               titleCacheStringBuilder.append(referenceCache);\r
+               return titleCacheStringBuilder.toString();\r
+       }\r
+\r
+       \r
        /* Build name full title cache */\r
        private String buildNameFullTitleCache(String titleCache, FaunaEuropaeaImportConfigurator fauEuConfig) {\r
                \r
@@ -666,6 +685,117 @@ public class FaunaEuropaeaNameImport extends FaunaEuropaeaImportBase  {
                \r
                StringBuilder nameCacheStringBuilder = new StringBuilder();\r
 \r
+               int rank = fauEuTaxon.getRankId();\r
+               int parentId = fauEuTaxon.getParentId();\r
+               FaunaEuropaeaTaxon parent = fauEuTaxonMap.get(parentId);\r
+               int grandParentId = parent.getParentId();\r
+               FaunaEuropaeaTaxon grandParent = fauEuTaxonMap.get(grandParentId);\r
+               int greatGrandParentId = grandParent.getParentId();\r
+               FaunaEuropaeaTaxon greatGrandParent = fauEuTaxonMap.get(greatGrandParentId);\r
+\r
+               \r
+               if (fauEuTaxon.isValid()) { // Taxon\r
+                       \r
+                       if (rank == R_SPECIES) {\r
+\r
+                               if(parent.getRankId() == R_SUBGENUS) {\r
+\r
+                                       String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
+                                                       genusOrUninomial.append(grandParent.getLocalName()), \r
+                                                       infraGenericEpithet.append(parent.getLocalName()));\r
+                                       nameCacheStringBuilder.append(genusSubGenusPart);\r
+\r
+                               } else if(parent.getRankId() == R_GENUS) {\r
+\r
+                                       String genusPart = genusPart(originalGenus, useOriginalGenus, \r
+                                                       genusOrUninomial.append(parent.getLocalName()));\r
+                                       nameCacheStringBuilder.append(genusPart);\r
+                               }\r
+                               nameCacheStringBuilder.append(fauEuTaxon.getLocalName());\r
+                               specificEpithet.append(fauEuTaxon.getLocalName());\r
+\r
+                       } else if (rank == R_SUBSPECIES) {\r
+\r
+                               if(grandParent.getRankId() == R_SUBGENUS) {\r
+\r
+                                       String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
+                                                       genusOrUninomial.append(greatGrandParent.getLocalName()), \r
+                                                       infraGenericEpithet.append(grandParent.getLocalName()));\r
+                                       nameCacheStringBuilder.append(genusSubGenusPart);\r
+\r
+                               } else if (grandParent.getRankId() == R_GENUS) {\r
+\r
+                                       String genusPart = genusPart(originalGenus, useOriginalGenus, \r
+                                                       genusOrUninomial.append(grandParent.getLocalName()));\r
+                                       nameCacheStringBuilder.append(genusPart);\r
+\r
+                               }\r
+                               nameCacheStringBuilder.append(parent.getLocalName());\r
+                               nameCacheStringBuilder.append(" ");\r
+                               nameCacheStringBuilder.append(fauEuTaxon.getLocalName());\r
+                               specificEpithet.append(parent.getLocalName());\r
+                               infraSpecificEpithet.append(fauEuTaxon.getLocalName());\r
+                       }\r
+               } else { // Synonym\r
+                       \r
+                       if (rank == R_SPECIES) {\r
+\r
+                               if(grandParent.getRankId() == R_SUBGENUS) {\r
+                                       \r
+                                       String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
+                                                       genusOrUninomial.append(greatGrandParent.getLocalName()), \r
+                                                       infraGenericEpithet.append(grandParent.getLocalName()));\r
+                                       nameCacheStringBuilder.append(genusSubGenusPart);\r
+\r
+                               } else if (grandParent.getRankId() == R_GENUS) {\r
+                                       \r
+                                       String genusPart = genusPart(originalGenus, useOriginalGenus, \r
+                                                       genusOrUninomial.append(grandParent.getLocalName()));\r
+                                       nameCacheStringBuilder.append(genusPart);\r
+\r
+                               }\r
+\r
+                       } else if (rank == R_SUBSPECIES) {\r
+                               \r
+                               int greatGreatGrandParentId = grandParent.getParentId();\r
+                               FaunaEuropaeaTaxon greatGreatGrandParent = fauEuTaxonMap.get(greatGreatGrandParentId);\r
+                               \r
+                               if(greatGrandParent.getRankId() == R_SUBGENUS) {\r
+                                       \r
+                                       String genusSubGenusPart = genusSubGenusPart(originalGenus, useOriginalGenus, \r
+                                                       genusOrUninomial.append(greatGreatGrandParent.getLocalName()), \r
+                                                       infraGenericEpithet.append(greatGrandParent.getLocalName()));\r
+                                       nameCacheStringBuilder.append(genusSubGenusPart);\r
+                                       \r
+                               } else if (greatGrandParent.getRankId() == R_GENUS) {\r
+                                       \r
+                                       String genusPart = genusPart(originalGenus, useOriginalGenus, \r
+                                                       genusOrUninomial.append(greatGreatGrandParent.getLocalName()));\r
+                                       nameCacheStringBuilder.append(genusPart);\r
+                               }\r
+                               \r
+                               nameCacheStringBuilder.append(grandParent.getLocalName());\r
+                               nameCacheStringBuilder.append(" ");\r
+                               specificEpithet.append(grandParent.getLocalName());\r
+                       }\r
+                       \r
+                       nameCacheStringBuilder.append(fauEuTaxon.getLocalName());\r
+                       infraSpecificEpithet.append(fauEuTaxon.getLocalName());\r
+                       \r
+               }\r
+               \r
+               return nameCacheStringBuilder.toString();\r
+       }\r
+       \r
+       \r
+       /** Build species and subspecies names */\r
+       private String buildLowerTaxonName_(StringBuilder originalGenus, boolean useOriginalGenus,\r
+                       StringBuilder genusOrUninomial, StringBuilder infraGenericEpithet, \r
+                       StringBuilder specificEpithet, StringBuilder infraSpecificEpithet,\r
+                       FaunaEuropaeaTaxon fauEuTaxon, Map<Integer, FaunaEuropaeaTaxon> fauEuTaxonMap) {\r
+               \r
+               StringBuilder nameCacheStringBuilder = new StringBuilder();\r
+\r
                int rank = fauEuTaxon.getRankId();\r
                int parentId = fauEuTaxon.getParentId();\r
                FaunaEuropaeaTaxon parent = fauEuTaxonMap.get(parentId);\r
@@ -721,8 +851,7 @@ public class FaunaEuropaeaNameImport extends FaunaEuropaeaImportBase  {
        \r
        \r
        /** Build taxon's name parts and caches */\r
-       private String buildTaxonName(FaunaEuropaeaTaxon fauEuTaxon,\r
-                       TaxonBase<?> taxonBase, TaxonNameBase<?,?>taxonName, MapWrapper<TaxonBase> taxonStore,\r
+       private String buildTaxonName(FaunaEuropaeaTaxon fauEuTaxon, TaxonBase<?> taxonBase, TaxonNameBase<?,?>taxonName,\r
                        Map<Integer, FaunaEuropaeaTaxon> fauEuTaxonMap, FaunaEuropaeaImportConfigurator fauEuConfig) {\r
 \r
                /* Local taxon name string */\r
@@ -753,27 +882,29 @@ public class FaunaEuropaeaNameImport extends FaunaEuropaeaImportBase  {
                        taxonBase = taxonBase.deproxy(taxonBase, TaxonBase.class);\r
 \r
                        // for the homotypic synonyms / basionyms build the name with the original genus\r
-                       if (taxonBase.isInstanceOf(Synonym.class)) {\r
-\r
-                               Synonym synonym = (Synonym)taxonBase;\r
-                               Set<SynonymRelationship> relships = synonym.getSynonymRelations();\r
-                               if (relships != null && relships.size() > 0) {\r
-                                       SynonymRelationship relship = (SynonymRelationship)relships.toArray()[0];\r
-                                       if (relship.equals(SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF())) {\r
-                                               completeString = \r
-                                                       buildLowerTaxonName(originalGenus, true,\r
-                                                                       genusOrUninomial, infraGenericEpithet, specificEpithet, infraSpecificEpithet,\r
-                                                                       fauEuTaxon, fauEuTaxonMap);\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       if (completeString.equals("")) {\r
-                               completeString = \r
-                                       buildLowerTaxonName(originalGenus, false,\r
-                                                       genusOrUninomial, infraGenericEpithet, specificEpithet, infraSpecificEpithet,\r
-                                                       fauEuTaxon, fauEuTaxonMap);\r
-                       }\r
+//                     if (taxonBase.isInstanceOf(Synonym.class)) {\r
+//\r
+//                             Synonym synonym = (Synonym)taxonBase;\r
+//                             Set<SynonymRelationship> relships = synonym.getSynonymRelations();\r
+//                             if (relships != null && relships.size() > 0) {\r
+//                                     SynonymRelationship relship = (SynonymRelationship)relships.toArray()[0];\r
+//                                     if (relship.equals(SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF())) {\r
+//                                             completeString = \r
+//                                                     buildLowerTaxonName(originalGenus, true,\r
+//                                                                     genusOrUninomial, infraGenericEpithet, specificEpithet, infraSpecificEpithet,\r
+//                                                                     fauEuTaxon, fauEuTaxonMap);\r
+//                                     }\r
+//                             }\r
+//                     }\r
+\r
+//                     if (completeString.equals("")) {\r
+                       \r
+                       completeString = \r
+                               buildLowerTaxonName(originalGenus, false,\r
+                                               genusOrUninomial, infraGenericEpithet, specificEpithet, infraSpecificEpithet,\r
+                                               fauEuTaxon, fauEuTaxonMap);\r
+                       \r
+//                     }\r
 \r
                        completeString = (String) CdmUtils.removeDuplicateWhitespace(completeString.trim());\r
 \r