/**\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
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
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
\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
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
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
--- /dev/null
+/**\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