Fauna Europaea reference import improvements
authora.babadshanjan <a.babadshanjan@localhost>
Sun, 13 Sep 2009 15:44:52 +0000 (15:44 +0000)
committera.babadshanjan <a.babadshanjan@localhost>
Sun, 13 Sep 2009 15:44:52 +0000 (15:44 +0000)
.gitattributes
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaDistribution.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaDistributionImport.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaDistributionTaxon.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaImportConfigurator.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaRefImport.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaReference.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaReferenceTaxon.java [new file with mode: 0644]

index 523c84948202b0439812d4f0cbda5ce3a6e79929..b7d740b1a1ed157928baf7a298d6bda73821ce4b 100644 (file)
@@ -1107,6 +1107,8 @@ cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaImportBas
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaImportConfigurator.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaImportState.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaRefImport.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaReference.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaReferenceTaxon.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaRelMisappNamesImport.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaRelTaxonIncludeImport.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaTaxon.java -text
index a9d9e1c4256665cf0f158fef4b934baaf126bd12..659a10d830a5a2ff9f4373a470e7033ef13a3c9b 100644 (file)
@@ -28,30 +28,30 @@ public class FaunaEuropaeaDistribution {
        private int extraLimital;\r
        \r
        \r
-       /**\r
-        * @return the taxonUuid\r
-        */\r
-       public UUID getTaxonUuid() {\r
-               return taxonUuid;\r
-       }\r
-       /**\r
-        * @param taxonUuid the taxonUuid to set\r
-        */\r
-       public void setTaxonUuid(UUID taxonUuid) {\r
-               this.taxonUuid = taxonUuid;\r
-       }\r
-       /**\r
-        * @return the taxonId\r
-        */\r
-       public int getTaxonId() {\r
-               return taxonId;\r
-       }\r
-       /**\r
-        * @param taxonId the taxonId to set\r
-        */\r
-       public void setTaxonId(int taxonId) {\r
-               this.taxonId = taxonId;\r
-       }\r
+//     /**\r
+//      * @return the taxonUuid\r
+//      */\r
+//     public UUID getTaxonUuid() {\r
+//             return taxonUuid;\r
+//     }\r
+//     /**\r
+//      * @param taxonUuid the taxonUuid to set\r
+//      */\r
+//     public void setTaxonUuid(UUID taxonUuid) {\r
+//             this.taxonUuid = taxonUuid;\r
+//     }\r
+//     /**\r
+//      * @return the taxonId\r
+//      */\r
+//     public int getTaxonId() {\r
+//             return taxonId;\r
+//     }\r
+//     /**\r
+//      * @param taxonId the taxonId to set\r
+//      */\r
+//     public void setTaxonId(int taxonId) {\r
+//             this.taxonId = taxonId;\r
+//     }\r
        /**\r
         * @return the distributionId\r
         */\r
index 2b5327385503073798548adcc1b155363a43589a..16732757230558f4a92a4e1e54df4d4c9b89d62c 100644 (file)
@@ -155,14 +155,14 @@ public class FaunaEuropaeaDistributionImport extends FaunaEuropaeaImportBase {
                                }\r
                                \r
                                FaunaEuropaeaDistribution fauEuDistribution = new FaunaEuropaeaDistribution();\r
-                               fauEuDistribution.setTaxonId(taxonId);\r
+//                             fauEuDistribution.setTaxonUuid(currentTaxonUuid);\r
+//                             fauEuDistribution.setTaxonId(taxonId);\r
                                fauEuDistribution.setDistributionId(disId);\r
                                fauEuDistribution.setOccurrenceStatusId(occStatusId);\r
                                fauEuDistribution.setAreaId(areaId);\r
                                fauEuDistribution.setAreaName(areaName);\r
                                fauEuDistribution.setAreaCode(areaCode);\r
                                fauEuDistribution.setExtraLimital(extraLimital);\r
-                               fauEuDistribution.setTaxonUuid(currentTaxonUuid);\r
                                \r
                                if (!taxonUuids.contains(currentTaxonUuid)) {\r
                                        taxonUuids.add(currentTaxonUuid);\r
index 50898fdc50bd2ef47c8d3ba798fb7871dada2b4c..bc2e7f9b36062e8b9dc8bd1f4c2ec686e484d035 100644 (file)
@@ -37,30 +37,30 @@ public class FaunaEuropaeaDistributionTaxon {
                this();\r
                this.taxonUuid = taxonUuid;\r
        }\r
-       /**\r
-        * @return the taxonUuid\r
-        */\r
-       public UUID getTaxonUuid() {\r
-               return taxonUuid;\r
-       }\r
-       /**\r
-        * @param taxonUuid the taxonUuid to set\r
-        */\r
-       public void setTaxonUuid(UUID taxonUuid) {\r
-               this.taxonUuid = taxonUuid;\r
-       }\r
-       /**\r
-        * @return the taxonId\r
-        */\r
-       public int getTaxonId() {\r
-               return taxonId;\r
-       }\r
-       /**\r
-        * @param taxonId the taxonId to set\r
-        */\r
-       public void setTaxonId(int taxonId) {\r
-               this.taxonId = taxonId;\r
-       }\r
+//     /**\r
+//      * @return the taxonUuid\r
+//      */\r
+//     public UUID getTaxonUuid() {\r
+//             return taxonUuid;\r
+//     }\r
+//     /**\r
+//      * @param taxonUuid the taxonUuid to set\r
+//      */\r
+//     public void setTaxonUuid(UUID taxonUuid) {\r
+//             this.taxonUuid = taxonUuid;\r
+//     }\r
+//     /**\r
+//      * @return the taxonId\r
+//      */\r
+//     public int getTaxonId() {\r
+//             return taxonId;\r
+//     }\r
+//     /**\r
+//      * @param taxonId the taxonId to set\r
+//      */\r
+//     public void setTaxonId(int taxonId) {\r
+//             this.taxonId = taxonId;\r
+//     }\r
        /**\r
         * @return the distributions\r
         */\r
index 8af7d5e6509507751502e9d886e2a27e82c43473..85113bf7ea1d117c80f07c35eb13a8fdacaaedb5 100644 (file)
@@ -56,8 +56,8 @@ public class FaunaEuropaeaImportConfigurator extends ImportConfiguratorBase<Faun
 //                             FaunaEuropaeaAuthorImport.class,\r
 //                             FaunaEuropaeaTaxonNameImport.class,\r
 //                             FaunaEuropaeaRelTaxonIncludeImport.class\r
-//                             FaunaEuropaeaRefImport.class,\r
-                               FaunaEuropaeaDistributionImport.class\r
+                               FaunaEuropaeaRefImport.class,\r
+//                             FaunaEuropaeaDistributionImport.class\r
                };\r
        };\r
        \r
index fea814a6446cd252fe8b18ca9252dd760b1683c3..0f1e64c25b140655ba50d4ad3da9b58350657f11 100644 (file)
@@ -1,11 +1,11 @@
 /**\r
-* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-* \r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
+ * Copyright (C) 2007 EDIT\r
+ * European Distributed Institute of Taxonomy \r
+ * http://www.e-taxonomy.eu\r
+ \r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
 \r
 package eu.etaxonomy.cdm.io.faunaEuropaea;\r
 \r
@@ -16,6 +16,7 @@ import java.sql.ResultSet;
 import java.sql.SQLException;\r
 import java.util.Arrays;\r
 import java.util.HashMap;\r
+import java.util.HashSet;\r
 import java.util.List;\r
 import java.util.Map;\r
 import java.util.Set;\r
@@ -37,12 +38,16 @@ import eu.etaxonomy.cdm.io.common.IImportConfigurator;
 import eu.etaxonomy.cdm.io.common.ImportHelper;\r
 import eu.etaxonomy.cdm.io.common.MapWrapper;\r
 import eu.etaxonomy.cdm.io.common.Source;\r
+import eu.etaxonomy.cdm.model.agent.AgentBase;\r
 import eu.etaxonomy.cdm.model.agent.Team;\r
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.description.Distribution;\r
 import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.description.TextData;\r
+import eu.etaxonomy.cdm.model.location.NamedArea;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
@@ -70,7 +75,7 @@ public class FaunaEuropaeaRefImport extends FaunaEuropaeaImportBase {
 \r
        /* Interval for progress info message when retrieving taxa */\r
        private int modCount = 10000;\r
-       \r
+\r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
         */\r
@@ -80,64 +85,77 @@ public class FaunaEuropaeaRefImport extends FaunaEuropaeaImportBase {
                FaunaEuropaeaImportConfigurator fauEuConfig = state.getConfig();\r
                logger.warn("Checking for References not yet fully implemented");\r
                result &= checkReferenceStatus(fauEuConfig);\r
-               \r
+\r
                return result;\r
        }\r
-       \r
+\r
        private boolean checkReferenceStatus(FaunaEuropaeaImportConfigurator fauEuConfig) {\r
                boolean result = true;\r
 //             try {\r
-                       Source source = fauEuConfig.getSource();\r
-                       String sqlStr = "";\r
-//                     ResultSet rs = source.getResultSet(sqlStr);\r
-                       return result;\r
+               Source source = fauEuConfig.getSource();\r
+               String sqlStr = "";\r
+//             ResultSet rs = source.getResultSet(sqlStr);\r
+               return result;\r
 //             } catch (SQLException e) {\r
-//                     e.printStackTrace();\r
-//                     return false;\r
+//             e.printStackTrace();\r
+//             return false;\r
 //             }\r
        }\r
-       \r
+\r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doInvoke(eu.etaxonomy.cdm.io.common.IImportConfigurator, eu.etaxonomy.cdm.api.application.CdmApplicationController, java.util.Map)\r
         */\r
        @Override\r
        protected boolean doInvoke(FaunaEuropaeaImportState state) {                            \r
-               \r
-               Map<String, MapWrapper<? extends CdmBase>> stores = state.getStores();\r
-               MapWrapper<TeamOrPersonBase> authorStore = (MapWrapper<TeamOrPersonBase>)stores.get(ICdmIO.TEAM_STORE);\r
-               MapWrapper<ReferenceBase> refStore = (MapWrapper<ReferenceBase>)stores.get(ICdmIO.REFERENCE_STORE);\r
+\r
+//             Map<String, MapWrapper<? extends CdmBase>> stores = state.getStores();\r
+//             MapWrapper<TeamOrPersonBase> authorStore = (MapWrapper<TeamOrPersonBase>)stores.get(ICdmIO.TEAM_STORE);\r
+//             MapWrapper<ReferenceBase> refStore = (MapWrapper<ReferenceBase>)stores.get(ICdmIO.REFERENCE_STORE);\r
                TransactionStatus txStatus = null;\r
-                               \r
+               List<TaxonBase> taxonList = null;\r
+               Set<UUID> taxonUuids = null;\r
+               Set<ReferenceBase> references = null;\r
+               Set<TeamOrPersonBase> authors = null;\r
+               Map<UUID, FaunaEuropaeaReferenceTaxon> fauEuTaxonMap = null;\r
+               int limit = state.getConfig().getLimitSave();\r
+\r
                FaunaEuropaeaImportConfigurator fauEuConfig = state.getConfig();\r
                Source source = fauEuConfig.getSource();\r
-               \r
+\r
                String namespace = "Reference";\r
                boolean success = true;\r
-               \r
+\r
                if(logger.isInfoEnabled()) { logger.info("Start making References..."); }\r
-               \r
+\r
                try {\r
                        String strQuery = \r
                                " SELECT Reference.*, TaxRefs.*, Taxon.UUID " + \r
-                " FROM TaxRefs " +\r
+                               " FROM TaxRefs " +\r
                                " INNER JOIN Reference ON Reference.ref_id = TaxRefs.trf_ref_id " +\r
-                " INNER JOIN Taxon ON TaxRefs.trf_tax_id = Taxon.TAX_ID " +\r
-                " ORDER BY TaxRefs.trf_tax_id";\r
-                       \r
+                               " INNER JOIN Taxon ON TaxRefs.trf_tax_id = Taxon.TAX_ID " +\r
+                               " ORDER BY TaxRefs.trf_tax_id";\r
+\r
                        if (logger.isInfoEnabled()) {\r
                                logger.info("Query: " + strQuery);\r
                        }\r
                        ResultSet rs = source.getResultSet(strQuery) ;\r
-                       \r
+\r
                        int i = 0;\r
                        while (rs.next()) {\r
-                               \r
-                               if ((i++ % modCount) == 0 && i!= 1 ) { \r
+\r
+                               if ((i++ % limit) == 0) {\r
+\r
+                                       txStatus = startTransaction();\r
+                                       taxonUuids = new HashSet<UUID>(limit);\r
+                                       references = new HashSet<ReferenceBase>(limit);\r
+                                       authors = new HashSet<TeamOrPersonBase>(limit);\r
+                                       fauEuTaxonMap = new HashMap<UUID, FaunaEuropaeaReferenceTaxon>(limit);\r
+\r
                                        if(logger.isInfoEnabled()) {\r
-                                               logger.info("References handled: " + (i-1)); \r
+                                               logger.info("i = " + i + " - Reference import transaction started"); \r
                                        }\r
                                }\r
-                               \r
+\r
                                int taxonId = rs.getInt("trf_tax_id");\r
                                int refId = rs.getInt("ref_id");\r
                                String refAuthor = rs.getString("ref_author");\r
@@ -145,149 +163,186 @@ public class FaunaEuropaeaRefImport extends FaunaEuropaeaImportBase {
                                String title = rs.getString("ref_title");\r
                                String refSource = rs.getString("ref_source");\r
                                String page = rs.getString("trf_page");\r
-                               UUID taxonBaseUuid = null;\r
-                               if (resultSetHasColumn(rs,"UUID")){\r
-                                       taxonBaseUuid = UUID.fromString(rs.getString("UUID"));\r
+                               UUID currentTaxonUuid = null;\r
+                               if (resultSetHasColumn(rs, "UUID")){\r
+                                       currentTaxonUuid = UUID.fromString(rs.getString("UUID"));\r
                                } else {\r
-                                       taxonBaseUuid = UUID.randomUUID();\r
+                                       logger.error("Taxon (" + taxonId + ") without UUID ignored");\r
+                                       continue;\r
+                               }\r
+\r
+                               FaunaEuropaeaReference fauEuReference = new FaunaEuropaeaReference();\r
+                               fauEuReference.setTaxonUuid(currentTaxonUuid);\r
+                               fauEuReference.setReferenceId(refId);\r
+                               fauEuReference.setReferenceAuthor(refAuthor);\r
+                               fauEuReference.setReferenceYear(year);\r
+                               fauEuReference.setReferenceTitle(title);\r
+                               fauEuReference.setReferenceSource(refSource);\r
+                               fauEuReference.setPage(page);\r
+\r
+                               if (!taxonUuids.contains(currentTaxonUuid)) {\r
+                                       taxonUuids.add(currentTaxonUuid);\r
+                                       FaunaEuropaeaReferenceTaxon fauEuReferenceTaxon = \r
+                                               new FaunaEuropaeaReferenceTaxon(currentTaxonUuid);\r
+                                       fauEuTaxonMap.put(currentTaxonUuid, fauEuReferenceTaxon);\r
+                               } else {\r
+                                       if (logger.isTraceEnabled()) { \r
+                                               logger.trace("Taxon (" + currentTaxonUuid + ") already stored.");\r
+                                               continue;\r
+                                       }\r
                                }\r
-                               \r
-                               txStatus = startTransaction();\r
 \r
                                StrictReferenceBase<?> reference = null;\r
                                TeamOrPersonBase<Team> author = null;\r
-                               \r
-                               try {\r
-                                       reference = Generic.NewInstance();\r
-                                       reference.setTitleCache(title);\r
-                                       reference.setDatePublished(ImportHelper.getDatePublished(year));\r
-                                       author = Team.NewInstance();\r
-                                       author.setTitleCache(refAuthor);\r
-                                       \r
-                                       ImportHelper.setOriginalSource(reference, fauEuConfig.getSourceReference(), refId, namespace);\r
-                                       ImportHelper.setOriginalSource(author, fauEuConfig.getSourceReference(), refId, namespace);\r
-                                       \r
-                                       // Create references\r
-                                       \r
-                                       if (!refStore.containsId(refId)) {\r
-                                               if (reference == null) {\r
-                                                       logger.warn("Reference is null");\r
-                                               }\r
-                                               refStore.put(refId, reference);\r
-                                               if (logger.isDebugEnabled()) { \r
-                                                       logger.debug("Stored reference (" + refId + ") " + refAuthor); \r
-                                               }\r
-                                       } else {\r
-                                               if (logger.isDebugEnabled()) { \r
-                                                       logger.debug("Not imported reference with duplicated ref_id (" + refId + \r
-                                                                       ") " + refAuthor);\r
-                                               }\r
-                                               continue;\r
+\r
+                               reference = Generic.NewInstance();\r
+                               reference.setTitleCache(title);\r
+                               reference.setDatePublished(ImportHelper.getDatePublished(year));\r
+                               author = Team.NewInstance();\r
+                               author.setTitleCache(refAuthor);\r
+\r
+                               ImportHelper.setOriginalSource(reference, fauEuConfig.getSourceReference(), refId, namespace);\r
+                               ImportHelper.setOriginalSource(author, fauEuConfig.getSourceReference(), refId, namespace);\r
+\r
+                               // Store reference\r
+\r
+                               if (!references.contains(refId)) {\r
+                                       if (reference == null) {\r
+                                               logger.warn("Reference is null");\r
                                        }\r
-                                       \r
-                                       // Create authors\r
-                                       \r
-                                       if (!authorStore.containsId(refId)) {\r
-                                               if (refAuthor == null) {\r
-                                                       logger.warn("Reference author is null");\r
-                                               }\r
-                                               \r
-                                               List<TeamOrPersonBase<Team>> matches = getCommonService().findMatching(author, null);\r
-                                               if (matches.size() == 0) {\r
-                                                       authorStore.put(refId, author);\r
-                                                       if (logger.isDebugEnabled()) { \r
-                                                               logger.debug("Stored author (" + refId + ") " + refAuthor); \r
-                                                       }\r
-                                               } else {\r
-                                                       if (logger.isDebugEnabled()) { \r
-                                                               logger.debug("Matching authors found. Not stored author (" + refId + ") " + refAuthor); \r
-                                                       }\r
-                                               }\r
-                                       } else {\r
-                                               if (logger.isDebugEnabled()) { \r
-                                                       logger.debug("Not imported author with duplicated aut_id (" + refId + \r
-                                                                       ") " + refAuthor);\r
-                                               }\r
+                                       references.add(reference);\r
+                                       if (logger.isDebugEnabled()) { \r
+                                               logger.debug("Stored reference (" + refId + ") " + refAuthor); \r
+                                       }\r
+                               } else {\r
+                                       if (logger.isDebugEnabled()) { \r
+                                               logger.debug("Not imported reference with duplicated ref_id (" + refId + \r
+                                                               ") " + refAuthor);\r
                                        }\r
-                                       \r
-                               } catch (Exception e) {\r
-                                       logger.warn("An exception occurred when creating reference with id " + refId + \r
-                                       ". Reference could not be saved.");\r
+                                       continue;\r
                                }\r
-                               \r
-                               try {\r
-                                       // Create descriptions\r
-\r
-                                       Taxon taxon = null;\r
-                                       TaxonBase taxonBase = getTaxonService().findByUuid(taxonBaseUuid);\r
-                                       if (taxonBase == null) { \r
-                                               if (logger.isDebugEnabled()) { \r
-                                                       logger.debug("TaxonBase is null (" + taxonBaseUuid + ")");\r
-                                               }\r
-                                               continue; \r
+\r
+                               // Store author\r
+\r
+                               if (!authors.contains(refId)) {\r
+                                       if (refAuthor == null) {\r
+                                               logger.warn("Reference author is null");\r
                                        }\r
-                                       boolean isSynonym = taxonBase.isInstanceOf(Synonym.class);\r
-                                       if (isSynonym) {\r
-                                               Synonym syn = CdmBase.deproxy(taxonBase, Synonym.class);\r
-                                               Set<Taxon> acceptedTaxa = syn.getAcceptedTaxa();\r
-                                               if (acceptedTaxa.size() > 0) {\r
-                                                       taxon = syn.getAcceptedTaxa().iterator().next();\r
-                                               } else {\r
-                                                       if (logger.isDebugEnabled()) { \r
-                                                               logger.debug("Synonym (" + taxonBase.getUuid() + ") does not have accepted taxa");\r
-                                                       }\r
-                                               }\r
-                                       } else {\r
-                                               taxon = CdmBase.deproxy(taxonBase, Taxon.class);\r
+                                       authors.add(author);\r
+                                       if (logger.isDebugEnabled()) { \r
+                                               logger.debug("Stored author (" + refId + ") " + refAuthor); \r
                                        }\r
 \r
-                                       if (taxon != null) {\r
-                                               TaxonDescription taxonDescription = null;\r
-                                               Set<TaxonDescription> descriptions = taxon.getDescriptions();\r
-                                               if (descriptions.size() > 0) {\r
-                                                       taxonDescription = descriptions.iterator().next(); \r
-                                               } else {\r
-                                                       taxonDescription = TaxonDescription.NewInstance();\r
-                                                       taxon.addDescription(taxonDescription);\r
-                                               }\r
+                                       // TODO: \r
+//                                     List<TeamOrPersonBase<Team>> matches = getCommonService().findMatching(author, null);\r
+//                                     if (matches.size() == 0) {\r
+//                                     authorStore.put(refId, author);\r
+//                                     if (logger.isDebugEnabled()) { \r
+//                                     logger.debug("Stored author (" + refId + ") " + refAuthor); \r
+//                                     }\r
+//                                     } else {\r
+//                                     if (logger.isDebugEnabled()) { \r
+//                                     logger.debug("Matching authors found. Not stored author (" + refId + ") " + refAuthor); \r
+//                                     }\r
+//                                     }\r
+                               } else {\r
+                                       if (logger.isDebugEnabled()) { \r
+                                               logger.debug("Not imported author with duplicated aut_id (" + refId + \r
+                                                               ") " + refAuthor);\r
+                                       }\r
+                               }\r
+\r
+                               fauEuTaxonMap.get(currentTaxonUuid).addReference(fauEuReference);\r
+\r
+                               if ((i % limit) == 0 && i != 1 ) {\r
+\r
+                                       try {\r
 \r
-                                               TextData textData = TextData.NewInstance(Feature.CITATION());\r
-                                               if (isSynonym){\r
-                                                       Synonym syn = CdmBase.deproxy(taxonBase, Synonym.class);\r
-                                                       textData.setNameUsedInReference(syn.getName());\r
+                                               taxonList = getTaxonService().findByUuid(taxonUuids);\r
+\r
+                                               for (TaxonBase taxonBase : taxonList) {\r
+\r
+                                                       // Create descriptions\r
+\r
+                                                       Taxon taxon = null;\r
+                                                       if (taxonBase == null) { \r
+                                                               if (logger.isDebugEnabled()) { \r
+                                                                       logger.debug("TaxonBase is null (" + currentTaxonUuid + ")");\r
+                                                               }\r
+                                                               continue; \r
+                                                       }\r
+                                                       boolean isSynonym = taxonBase.isInstanceOf(Synonym.class);\r
+                                                       if (isSynonym) {\r
+                                                               Synonym syn = CdmBase.deproxy(taxonBase, Synonym.class);\r
+                                                               Set<Taxon> acceptedTaxa = syn.getAcceptedTaxa();\r
+                                                               if (acceptedTaxa.size() > 0) {\r
+                                                                       taxon = syn.getAcceptedTaxa().iterator().next();\r
+                                                               } else {\r
+                                                                       if (logger.isDebugEnabled()) { \r
+                                                                               logger.debug("Synonym (" + taxonBase.getUuid() + ") does not have accepted taxa");\r
+                                                                       }\r
+                                                               }\r
+                                                       } else {\r
+                                                               taxon = CdmBase.deproxy(taxonBase, Taxon.class);\r
+                                                       }\r
+\r
+                                                       if (taxon != null) {\r
+                                                               TaxonDescription taxonDescription = null;\r
+                                                               Set<TaxonDescription> descriptions = taxon.getDescriptions();\r
+                                                               if (descriptions.size() > 0) {\r
+                                                                       taxonDescription = descriptions.iterator().next(); \r
+                                                               } else {\r
+                                                                       taxonDescription = TaxonDescription.NewInstance();\r
+                                                                       taxon.addDescription(taxonDescription);\r
+                                                               }\r
+\r
+\r
+                                                               UUID taxonUuid = taxonBase.getUuid();\r
+                                                               FaunaEuropaeaReferenceTaxon fauEuHelperTaxon = fauEuTaxonMap.get(taxonUuid);\r
+\r
+                                                               for (FaunaEuropaeaReference storedReference : fauEuHelperTaxon.getReferences()) {\r
+\r
+                                                                       TextData textData = TextData.NewInstance(Feature.CITATION());\r
+                                                                       if (isSynonym){\r
+                                                                               Synonym syn = CdmBase.deproxy(taxonBase, Synonym.class);\r
+                                                                               textData.setNameUsedInReference(syn.getName());\r
+                                                                       }\r
+                                                                       textData.setCitation(storedReference.getCdmReference());\r
+                                                                       textData.setCitationMicroReference(storedReference.getPage());\r
+                                                                       taxonDescription.addElement(textData);\r
+                                                               }\r
+                                                       }\r
                                                }\r
-                                               textData.setCitation(reference);\r
-                                               textData.setCitationMicroReference(page);\r
-                                               taxonDescription.addElement(textData);\r
-                                       }\r
+                                               if(logger.isInfoEnabled()) { logger.info("Saving references ..."); }\r
+\r
+                                               // save taxa, references, and authors\r
+                                               getTaxonService().saveTaxonAll(taxonList);\r
+                                               getReferenceService().saveReferenceAll(references);\r
+                                               getAgentService().saveAgentAll(authors);\r
 \r
-                               } catch (Exception e) {\r
-                                       logger.warn("An exception occurred when creating description for reference " + refId + \r
-                                       ". Taxon description could not be saved.");\r
-                                       e.printStackTrace();\r
+                                               taxonUuids = null;\r
+                                               references = null;\r
+                                               authors = null;\r
+                                               taxonList = null;\r
+                                               fauEuTaxonMap = null;\r
+                                               commitTransaction(txStatus);\r
+\r
+                                       } catch (Exception e) {\r
+                                               logger.warn("An exception occurred when creating reference with id " + refId + \r
+                                               ". Reference could not be saved.");\r
+                                       }\r
                                }\r
-                               \r
                        }\r
-                       \r
-                       if(logger.isInfoEnabled()) { logger.info("Saving references ..."); }\r
-                       \r
-                       // save taxa, references, and authors\r
-                       success = saveTaxa(state, state.getHighestTaxonIndex(), state.getConfig().getLimitSave());\r
-                       getReferenceService().saveReferenceAll(refStore.objects());\r
-                       getAgentService().saveAgentAll(authorStore.objects());\r
-                       \r
-                       commitTransaction(txStatus);\r
-\r
-                       if(logger.isInfoEnabled()) { logger.info("End making references ..."); }\r
-                       \r
                } catch (SQLException e) {\r
                        logger.error("SQLException:" +  e);\r
                        success = false;\r
                }\r
+               if(logger.isInfoEnabled()) { logger.info("End making references ..."); }\r
+\r
                return success;\r
        }\r
 \r
-       \r
+\r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
         */\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaReference.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaReference.java
new file mode 100644 (file)
index 0000000..54bbb9e
--- /dev/null
@@ -0,0 +1,131 @@
+/**\r
+* Copyright (C) 2009 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.cdm.io.faunaEuropaea;\r
+\r
+import java.util.UUID;\r
+\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+\r
+/**\r
+ * @author a.babadshanjan\r
+ * @created 13.09.2009\r
+ * @version 1.0\r
+ */\r
+public class FaunaEuropaeaReference {\r
+       \r
+       private UUID taxonUuid;\r
+       private ReferenceBase cdmReference;\r
+//     private int taxonId;\r
+       private int referenceId;\r
+       private String referenceAuthor;\r
+       private String referenceYear;\r
+       private String referenceTitle;\r
+       private String referenceSource;\r
+       private String page;\r
+       \r
+       \r
+       /**\r
+        * @return the page\r
+        */\r
+       public String getPage() {\r
+               return page;\r
+       }\r
+       /**\r
+        * @param page the page to set\r
+        */\r
+       public void setPage(String page) {\r
+               this.page = page;\r
+       }\r
+       /**\r
+        * @return the taxonUuid\r
+        */\r
+       public UUID getTaxonUuid() {\r
+               return taxonUuid;\r
+       }\r
+       /**\r
+        * @param taxonUuid the taxonUuid to set\r
+        */\r
+       public void setTaxonUuid(UUID taxonUuid) {\r
+               this.taxonUuid = taxonUuid;\r
+       }\r
+       /**\r
+        * @return the referenceId\r
+        */\r
+       public int getReferenceId() {\r
+               return referenceId;\r
+       }\r
+       /**\r
+        * @param referenceId the referenceId to set\r
+        */\r
+       public void setReferenceId(int referenceId) {\r
+               this.referenceId = referenceId;\r
+       }\r
+       /**\r
+        * @return the referenceYear\r
+        */\r
+       public String getReferenceYear() {\r
+               return referenceYear;\r
+       }\r
+       /**\r
+        * @param referenceYear the referenceYear to set\r
+        */\r
+       public void setReferenceYear(String referenceYear) {\r
+               this.referenceYear = referenceYear;\r
+       }\r
+       /**\r
+        * @return the referenceTitle\r
+        */\r
+       public String getReferenceTitle() {\r
+               return referenceTitle;\r
+       }\r
+       /**\r
+        * @param referenceTitle the referenceTitle to set\r
+        */\r
+       public void setReferenceTitle(String referenceTitle) {\r
+               this.referenceTitle = referenceTitle;\r
+       }\r
+       /**\r
+        * @return the referenceSource\r
+        */\r
+       public String getReferenceSource() {\r
+               return referenceSource;\r
+       }\r
+       /**\r
+        * @param referenceSource the referenceSource to set\r
+        */\r
+       public void setReferenceSource(String referenceSource) {\r
+               this.referenceSource = referenceSource;\r
+       }\r
+       /**\r
+        * @return the referenceAuthor\r
+        */\r
+       public String getReferenceAuthor() {\r
+               return referenceAuthor;\r
+       }\r
+       /**\r
+        * @param referenceAuthor the referenceAuthor to set\r
+        */\r
+       public void setReferenceAuthor(String referenceAuthor) {\r
+               this.referenceAuthor = referenceAuthor;\r
+       }\r
+       /**\r
+        * @return the cdmReference\r
+        */\r
+       public ReferenceBase getCdmReference() {\r
+               return cdmReference;\r
+       }\r
+       /**\r
+        * @param cdmReference the cdmReference to set\r
+        */\r
+       public void setCdmReference(ReferenceBase cdmReference) {\r
+               this.cdmReference = cdmReference;\r
+       }\r
+\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaReferenceTaxon.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/faunaEuropaea/FaunaEuropaeaReferenceTaxon.java
new file mode 100644 (file)
index 0000000..01b795b
--- /dev/null
@@ -0,0 +1,68 @@
+/**\r
+* Copyright (C) 2009 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.cdm.io.faunaEuropaea;\r
+\r
+import java.util.HashSet;\r
+import java.util.Set;\r
+import java.util.UUID;\r
+\r
+/**\r
+ * @author a.babadshanjan\r
+ * @created 13.09.2009\r
+ * @version 1.0\r
+ */\r
+public class FaunaEuropaeaReferenceTaxon {\r
+       \r
+       private UUID taxonUuid;\r
+//     private int taxonId;\r
+       private Set<FaunaEuropaeaReference> references; \r
+       \r
+       /**\r
+        * @param references\r
+        */\r
+       public FaunaEuropaeaReferenceTaxon() {\r
+               this.references = new HashSet<FaunaEuropaeaReference>();\r
+       }\r
+       /**\r
+        * @param taxonUuid\r
+        */\r
+       public FaunaEuropaeaReferenceTaxon(UUID taxonUuid) {\r
+               this();\r
+               this.taxonUuid = taxonUuid;\r
+       }\r
+       /**\r
+        * @return the taxonUuid\r
+        */\r
+       public UUID getTaxonUuid() {\r
+               return taxonUuid;\r
+       }\r
+       /**\r
+        * @param taxonUuid the taxonUuid to set\r
+        */\r
+       public void setTaxonUuid(UUID taxonUuid) {\r
+               this.taxonUuid = taxonUuid;\r
+       }\r
+       /**\r
+        * @return the distributions\r
+        */\r
+       public Set<FaunaEuropaeaReference> getReferences() {\r
+               return references;\r
+       }\r
+       /**\r
+        * @param distributions the distributions to set\r
+        */\r
+       public void setReferences(Set<FaunaEuropaeaReference> references) {\r
+               this.references = references;\r
+       }\r
+       \r
+       public void addReference(FaunaEuropaeaReference fauEuReference) {\r
+               references.add(fauEuReference);\r
+       }\r
+}\r