Fauna Europaea Import
authora.babadshanjan <a.babadshanjan@localhost>
Fri, 12 Jun 2009 14:23:07 +0000 (14:23 +0000)
committera.babadshanjan <a.babadshanjan@localhost>
Fri, 12 Jun 2009 14:23:07 +0000 (14:23 +0000)
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaTaxon.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaTaxonImport.java

index ff0bf45e5d2b4ed555951b07fcae4743c77797f0..2131bfebab1a0c378abd54bdf48f7dde0ec35659 100644 (file)
@@ -27,6 +27,7 @@ public class FaunaEuropaeaTaxon {
        private int year;\r
        private String author;\r
        private boolean parenthesis = false;\r
+       private boolean valid = false;\r
        \r
        /**\r
         * @return the parenthesis\r
@@ -166,4 +167,18 @@ public class FaunaEuropaeaTaxon {
                this.author = author;\r
        }\r
 \r
+       /**\r
+        * @return the valid\r
+        */\r
+       public boolean isValid() {\r
+               return valid;\r
+       }\r
+\r
+       /**\r
+        * @param valid the valid to set\r
+        */\r
+       public void setValid(boolean valid) {\r
+               this.valid = valid;\r
+       }\r
+\r
 }\r
index c2f98425deba87032d49185309d9f99688d0f83f..dda765a1532fa658a0728e2f3b7301c9059529e6 100644 (file)
@@ -13,6 +13,8 @@ import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.A_AUCT;
 import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.P_PARENTHESIS;\r
 import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.R_GENUS;\r
 import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.R_SUBGENUS;\r
+import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.R_SPECIES;\r
+import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.R_SUBSPECIES;\r
 import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.T_STATUS_ACCEPTED;\r
 import static eu.etaxonomy.cdm.io.faunaEuropaea.FaunaEuropaeaTransformer.T_STATUS_NOT_ACCEPTED;\r
 \r
@@ -60,10 +62,12 @@ import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
 public class FaunaEuropaeaTaxonImport extends FaunaEuropaeaImportBase  {\r
        private static final Logger logger = Logger.getLogger(FaunaEuropaeaTaxonImport.class);\r
 \r
-       /* Interval for progress info message when retrieving taxa */\r
-       private int modCount = 10000;\r
+       /* Max number of taxa to retrieve (for test purposes) */\r
+       private int maxTaxa = 5000;\r
        /* Max number of taxa to be saved with one service call */\r
        private int limit = 10000; // TODO: Make configurable\r
+       /* Interval for progress info message when retrieving taxa */\r
+       private int modCount = 10000;\r
        /* The highest taxon index in the FauEu database */\r
        private int highestTaxonIndex = 0;\r
        private Map<Integer, FaunaEuropaeaTaxon> fauEuTaxonMap = new HashMap();\r
@@ -155,12 +159,20 @@ public class FaunaEuropaeaTaxonImport extends FaunaEuropaeaImportBase  {
 //                             " FROM dbo.Taxon INNER JOIN dbo.rank ON dbo.Taxon.TAX_RNK_ID = dbo.rank.rnk_id " +\r
 //                             " WHERE (1=1)";\r
 \r
+            String top = "";\r
+                       if (maxTaxa > 0) {\r
+                               top = "TOP " + maxTaxa;\r
+                       }\r
+                       \r
                        strQuery = \r
-                               " SELECT Taxon.*, rank.*, author.* " + \r
-                               " FROM dbo.Taxon INNER JOIN dbo.rank ON dbo.Taxon.TAX_RNK_ID = dbo.rank.rnk_id " +\r
-                               " INNER JOIN dbo.author ON dbo.Taxon.TAX_AUT_ID = dbo.author.aut_id " +\r
+                               " SELECT " + top + " Taxon.*, rank.*, author.* " + \r
+                               " FROM dbo.Taxon LEFT OUTER JOIN dbo.rank ON dbo.Taxon.TAX_RNK_ID = dbo.rank.rnk_id " +\r
+                               " LEFT OUTER JOIN dbo.author ON dbo.Taxon.TAX_AUT_ID = dbo.author.aut_id " +\r
                                " WHERE (1=1)";\r
 \r
+                       if (logger.isInfoEnabled()) {\r
+                               logger.info("Query: " + strQuery);\r
+                       }\r
                        rs = source.getResultSet(strQuery);\r
                        \r
 \r
@@ -191,7 +203,12 @@ public class FaunaEuropaeaTaxonImport extends FaunaEuropaeaImportBase  {
                                        rank = FaunaEuropaeaTransformer.rankId2Rank(rs, false);\r
                                } catch (UnknownCdmTypeException e) {\r
                                        logger.warn("Taxon (" + taxonId + ") has unknown rank (" + rankId + ") and could not be saved.");\r
-                                       success = false; \r
+//                                     success = false; \r
+                                       continue;\r
+                               } catch (NullPointerException e) {\r
+                                       logger.warn("Taxon (" + taxonId + ") has rank null and could not be saved.");\r
+//                                     success = false;\r
+                                       continue;\r
                                }\r
                                \r
                                ReferenceBase<?> reference = null;\r
@@ -255,6 +272,11 @@ public class FaunaEuropaeaTaxonImport extends FaunaEuropaeaImportBase  {
                                        } else {\r
                                                fauEuTaxon.setParenthesis(false);\r
                                        }\r
+                                       if (status == T_STATUS_ACCEPTED) {\r
+                                               fauEuTaxon.setValid(true);\r
+                                       } else {\r
+                                               fauEuTaxon.setValid(false);\r
+                                       }\r
 \r
                                        ImportHelper.setOriginalSource(taxonBase, fauEuConfig.getSourceReference(), taxonId, namespace);\r
                                        \r
@@ -317,6 +339,26 @@ public class FaunaEuropaeaTaxonImport extends FaunaEuropaeaImportBase  {
        }\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
+               }\r
+               return subString;\r
+               \r
+//             String[] tokens = nameString.split("[\\s]+");\r
+//             StringBuilder stringBuilder = \r
+//             int len = tokens.length - 1;\r
+//             for (int i = 0; i < len - 1; i++) {\r
+//              String lastToken = tokens[len];\r
+//             }\r
+//             return lastToken;\r
+       }\r
+       \r
+       \r
        /* Build name title cache */\r
        private String buildNameTitleCache(String nameString, FaunaEuropaeaTaxon fauEuTaxon) {\r
                \r
@@ -344,25 +386,28 @@ public class FaunaEuropaeaTaxonImport extends FaunaEuropaeaImportBase  {
 \r
                String localString = "";\r
                String parentString = "";\r
+               String parentNameCache = null;\r
                \r
                FaunaEuropaeaTaxon parent = null;\r
-               TaxonNameBase<?,?> parentName = null;\r
+               \r
+               TaxonNameBase<?,?> taxonName = taxonBase.getName();\r
                TaxonBase<?> parentTaxonBase = null;\r
-               String parentNameCache = null;\r
-               boolean parentComplete = false;\r
 \r
-               TaxonNameBase<?,?> taxonName = taxonBase.getName();\r
                ZoologicalName zooName = (ZoologicalName)taxonName;\r
+               TaxonNameBase<?,?> parentName = null;\r
                \r
+               boolean parentComplete = false;\r
+\r
                if (zooName != null) {\r
                        localString = zooName.getNameCache();\r
                }\r
 \r
                int rank = fauEuTaxon.getRankId();\r
-               if (rank > R_GENUS) { \r
+               if (rank == R_SPECIES || rank == R_SUBSPECIES) { // For Species, Subspecies\r
+               //if (rank > R_GENUS) {\r
                        StringBuilder parentStringBuilder = new StringBuilder();\r
-                       if(logger.isDebugEnabled()) { \r
-                               logger.debug("Local taxon name: (rank = " + rank + ") " + localString); \r
+                       if(logger.isInfoEnabled()) { \r
+                               logger.info("Local taxon name (rank = " + rank + "): " + localString); \r
                        }\r
 \r
                        // The scientific name in FaunaEuropaeaTaxon is set only once it has been built completely,\r
@@ -398,11 +443,11 @@ public class FaunaEuropaeaTaxonImport extends FaunaEuropaeaImportBase  {
 //                                             parentStringBuilder.append(" ");\r
 //                                             parentStringBuilder.append(((ZoologicalName)taxonName).getNameCache());\r
                                                parentString = parentStringBuilder.toString();\r
-                                               logger.info("Parent name part built: " + parentString);\r
-                                       } else {\r
+                                               if (logger.isInfoEnabled()) { logger.info("Parent name part built: " + parentString); }\r
+                                       } else { // parent name is already complete\r
                                                parentComplete = true;\r
                                                parentString = parent.getScientificName();\r
-                                               logger.info("Parent name is complete: " + parentString);\r
+                                               if (logger.isInfoEnabled()) { logger.info("Parent name is complete: " + parentString); }\r
                                        }\r
                                } else {\r
                                        logger.warn("Parent uuid of " + localString + " is null");\r
@@ -410,13 +455,20 @@ public class FaunaEuropaeaTaxonImport extends FaunaEuropaeaImportBase  {
                        } else {\r
                                logger.warn("Parent of " + localString + " is null");\r
                        }\r
-                       if (parent != null && parent.getRankId() > R_GENUS  && parentComplete == false) { \r
+                       if (parent != null && parent.getRankId() >= R_GENUS  && parentComplete == false) { \r
                                parentString = buildTaxonName(parent, parentTaxonBase, taxonStore);\r
                        }\r
                }\r
+               \r
                StringBuilder concatStringBuilder = new StringBuilder(parentString);\r
-//             if (!concatStringBuilder.equals("")) { concatStringBuilder.append(" "); }\r
-               concatStringBuilder.append(" ");\r
+               if (!parentString.equals("")) {\r
+                       \r
+                       if (!fauEuTaxon.isValid()) { // for synonyms remove the local name of the parent (accepted taxon)\r
+                               parentString = removeEpithet(parentString);\r
+                       }\r
+                       concatStringBuilder.append(" ");\r
+               }\r
+               \r
                concatStringBuilder.append(localString);\r
                String concatString = concatStringBuilder.toString();\r
                concatString = (String) CdmUtils.removeDuplicateWhitespace(concatString.trim());\r