\r
public static final String OS_NAMESPACE_TAXON = "Taxon";\r
private static final Logger logger = Logger.getLogger(FaunaEuropaeaRelTaxonIncludeImport.class);\r
-\r
- private int limit = 5000; // TODO: Make configurable\r
- /* Max number of taxa to be retrieved from CDM DB with one service call */\r
- private ReferenceBase<?> sourceRef = null;\r
-\r
+ private static final String acceptedTaxonUUID = "A9C24E42-69F5-4681-9399-041E652CF338"; // any accepted taxon uuid, taken from original fauna europaea database\r
\r
- /**\r
- * @return the sourceRef\r
- */\r
- private ReferenceBase<?> getSourceRef() {\r
- return sourceRef;\r
- }\r
-\r
- /**\r
- * @param sourceRef the sourceRef to set\r
- */\r
- private void setSourceRef(ReferenceBase<?> sourceRef) {\r
- this.sourceRef = sourceRef;\r
- }\r
+ private ReferenceBase<?> sourceRef;\r
+ private static String ALL_SYNONYM_FROM_CLAUSE = " FROM Taxon INNER JOIN Taxon AS Parent " +\r
+ " ON Taxon.TAX_TAX_IDPARENT = Parent.TAX_ID " +\r
+ " WHERE (Taxon.TAX_VALID = 0) " +\r
+ " AND (Taxon.TAX_AUT_ID <> " + A_AUCT + " OR Taxon.TAX_AUT_ID IS NULL)";\r
\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
boolean success = true;\r
\r
Map<String, MapWrapper<? extends CdmBase>> stores = state.getStores();\r
- MapWrapper<TaxonBase> taxonStore = (MapWrapper<TaxonBase>)stores.get(ICdmIO.TAXON_STORE);\r
-// taxonStore.makeEmpty();\r
- taxonStore = null;\r
+\r
MapWrapper<TeamOrPersonBase> authorStore = (MapWrapper<TeamOrPersonBase>)stores.get(ICdmIO.TEAM_STORE);\r
authorStore.makeEmpty();\r
\r
- if(logger.isInfoEnabled()) { logger.info("Start making taxonomically included relationships..."); }\r
+ if(logger.isInfoEnabled()) { logger.info("Start making relationships..."); }\r
\r
TransactionStatus txStatus = startTransaction();\r
\r
- TaxonBase taxon = getTaxonService().getTaxonByUuid(UUID.fromString("ac7b30dc-6207-4c71-9752-ee0fb838a271"));\r
- setSourceRef(taxon.getSec());\r
+ // the uuid of an accepted taxon is needed here. any accepted taxon will do.\r
+ TaxonBase taxon = getTaxonService().find(UUID.fromString(acceptedTaxonUUID));\r
+ sourceRef = taxon.getSec();\r
\r
TaxonomicTree tree = getTaxonomicTreeFor(state, sourceRef);\r
commitTransaction(txStatus);\r
\r
- ProfilerController.memorySnapshot();\r
+ //ProfilerController.memorySnapshot();\r
if (state.getConfig().isDoTaxonomicallyIncluded()) {\r
success = processParentsChildren(state);\r
}\r
- ProfilerController.memorySnapshot();\r
+ //ProfilerController.memorySnapshot();\r
if (state.getConfig().isDoMisappliedNames()) {\r
success = processMisappliedNames(state);\r
}\r
- ProfilerController.memorySnapshot();\r
+ //ProfilerController.memorySnapshot();\r
if (state.getConfig().isDoHeterotypicSynonyms()) {\r
- success = processHeterotypicSynonyms(state);\r
+ if(logger.isInfoEnabled()) { \r
+ logger.info("Start making heterotypic synonym relationships..."); \r
+ }\r
+ success = processHeterotypicSynonyms(state, ALL_SYNONYM_FROM_CLAUSE);\r
}\r
- ProfilerController.memorySnapshot();\r
+ //ProfilerController.memorySnapshot();\r
\r
logger.info("End making taxa...");\r
\r
String selectCount = \r
" SELECT count(*) ";\r
\r
- String selectColumns = " SELECT dbo.Taxon.UUID AS ChildUuid, Parent.UUID AS ParentUuid ";\r
+ String selectColumns = " SELECT Taxon.UUID AS ChildUuid, Parent.UUID AS ParentUuid ";\r
\r
- String fromClause = " FROM dbo.Taxon INNER JOIN dbo.Taxon AS Parent " +\r
- " ON dbo.Taxon.TAX_TAX_IDPARENT = Parent.TAX_ID " +\r
- " WHERE (dbo.Taxon.TAX_VALID <> 0) AND (dbo.Taxon.TAX_AUT_ID <> " + A_AUCT + " OR dbo.Taxon.TAX_AUT_ID IS NULL )";\r
+ String fromClause = " FROM Taxon INNER JOIN Taxon AS Parent " +\r
+ " ON Taxon.TAX_TAX_IDPARENT = Parent.TAX_ID " +\r
+ " WHERE (Taxon.TAX_VALID <> 0) AND (Taxon.TAX_AUT_ID <> " + A_AUCT + " OR Taxon.TAX_AUT_ID IS NULL )";\r
\r
- String orderClause = " ORDER BY dbo.Taxon.TAX_RNK_ID ASC";\r
+ String orderClause = " ORDER BY Taxon.TAX_RNK_ID ASC";\r
\r
String countQuery = \r
selectCount + fromClause;\r
String selectQuery = \r
selectColumns + fromClause + orderClause;\r
\r
+ if(logger.isInfoEnabled()) { logger.info("Start making taxonomically included relationships..."); }\r
+ \r
try {\r
\r
ResultSet rs = source.getResultSet(countQuery);\r
}\r
return success; \r
}\r
-\r
\r
+\r
/** Retrieve misapplied name / accepted taxon uuid map from CDM DB */\r
private boolean processMisappliedNames(FaunaEuropaeaImportState state) {\r
\r
String selectQuery = \r
selectColumns + fromClause + orderClause;\r
\r
+ if(logger.isInfoEnabled()) { logger.info("Start making misapplied name relationships..."); }\r
+\r
try {\r
\r
ResultSet rs = source.getResultSet(countQuery);\r
return success; \r
}\r
\r
- \r
- /** Retrieve synonyms from FauEuDB DB */\r
- private boolean processHeterotypicSynonyms(FaunaEuropaeaImportState state) {\r
\r
- int limit = state.getConfig().getLimitSave();\r
\r
- TransactionStatus txStatus = null;\r
+ /** Retrieve synonyms from FauEuDB DB */\r
+ private boolean processHeterotypicSynonyms(FaunaEuropaeaImportState state, String fromClause) {\r
\r
- Map<UUID, UUID> childParentMap = null;\r
FaunaEuropaeaImportConfigurator fauEuConfig = state.getConfig();\r
Source source = fauEuConfig.getSource();\r
- int i = 0;\r
boolean success = true;\r
\r
String selectCount = \r
\r
String selectColumns = " SELECT Taxon.UUID AS SynonymUuid, Parent.UUID AS AcceptedUuid ";\r
\r
- String fromClause = " FROM Taxon INNER JOIN Taxon AS Parent " +\r
- " ON Taxon.TAX_TAX_IDPARENT = Parent.TAX_ID " +\r
- " WHERE (Taxon.TAX_VALID = 0) AND (Taxon.TAX_AUT_ID <> " + A_AUCT + ")";\r
- \r
String orderClause = " ORDER BY dbo.Taxon.TAX_RNK_ID ASC ";\r
\r
String countQuery = \r
\r
String selectQuery = \r
selectColumns + fromClause + orderClause;\r
+ logger.debug(selectQuery);\r
\r
try {\r
\r
logger.info("Count Query: " + countQuery);\r
logger.info("Select Query: " + selectQuery);\r
}\r
+ \r
+ success = storeSynonymRelationships(rs, count, state);\r
\r
- while (rs.next()) {\r
- \r
- if ((i++ % limit) == 0) {\r
- \r
- txStatus = startTransaction();\r
- childParentMap = new HashMap<UUID, UUID>(limit);\r
- \r
- if(logger.isInfoEnabled()) {\r
- logger.info("Synonyms retrieved: " + (i-1) ); \r
- }\r
- }\r
+ } catch (SQLException e) {\r
+ logger.error("SQLException:" + e);\r
+ success = false;\r
+ }\r
+ return success; \r
+ }\r
+ \r
+ \r
\r
- String childUuidStr = rs.getString("SynonymUuid");\r
- String parentUuidStr = rs.getString("AcceptedUuid");\r
- UUID childUuid = UUID.fromString(childUuidStr);\r
- UUID parentUuid = UUID.fromString(parentUuidStr);\r
- \r
- if (!childParentMap.containsKey(childUuid)) {\r
+ \r
+ private boolean storeSynonymRelationships(ResultSet rs, int count, FaunaEuropaeaImportState state) \r
+ throws SQLException {\r
\r
- childParentMap.put(childUuid, parentUuid);\r
+ TransactionStatus txStatus = null;\r
+ Map<UUID, UUID> synonymAcceptedMap = null;\r
+ int i = 0;\r
+ boolean success = true;\r
+ int limit = state.getConfig().getLimitSave();\r
\r
- } else {\r
- if(logger.isDebugEnabled()) {\r
- logger.debug("Duplicated child UUID (" + childUuid + ")");\r
- }\r
+ while (rs.next()) {\r
+\r
+ if ((i++ % limit) == 0) {\r
+\r
+ txStatus = startTransaction();\r
+ synonymAcceptedMap = new HashMap<UUID, UUID>(limit);\r
+\r
+ if(logger.isInfoEnabled()) {\r
+ logger.info("Synonyms retrieved: " + (i-1)); \r
}\r
+ }\r
\r
- if (((i % limit) == 0 && i != 1 ) || i == count) { \r
+ String synonymUuidStr = rs.getString("SynonymUuid");\r
+ String acceptedUuidStr = rs.getString("AcceptedUuid");\r
+ UUID synonymUuid = UUID.fromString(synonymUuidStr);\r
+ UUID acceptedUuid = UUID.fromString(acceptedUuidStr);\r
\r
- success = createHeterotypicSynonyms(state, childParentMap);\r
+ if (!synonymAcceptedMap.containsKey(synonymUuid)) {\r
\r
- childParentMap = null;\r
- commitTransaction(txStatus);\r
+ synonymAcceptedMap.put(synonymUuid, acceptedUuid);\r
\r
- if(logger.isInfoEnabled()) {\r
- logger.info("i = " + i + " - Transaction committed"); \r
- }\r
+ } else {\r
+ if(logger.isDebugEnabled()) {\r
+ logger.debug("Duplicated synonym UUID (" + synonymUuid + ")");\r
}\r
}\r
\r
- } catch (SQLException e) {\r
- logger.error("SQLException:" + e);\r
- success = false;\r
+ if (((i % limit) == 0 && i != 1 ) || i == count) { \r
+\r
+ success = createHeterotypicSynonyms(state, synonymAcceptedMap);\r
+\r
+ synonymAcceptedMap = null;\r
+ commitTransaction(txStatus);\r
+\r
+ if(logger.isInfoEnabled()) {\r
+ logger.info("i = " + i + " - Transaction committed"); \r
+ }\r
+ }\r
}\r
- return success; \r
+ return success;\r
}\r
\r
+ \r
+ \r
+ \r
+\r
/* Creates parent-child relationships.\r
* Parent-child pairs are retrieved in blocks via findByUUID(Set<UUID>) from CDM DB. \r
*/\r
private boolean createParentChildRelationships(FaunaEuropaeaImportState state, Map<UUID, UUID> childParentMap) {\r
-\r
-// TaxonBase taxon = getTaxonService().getTaxonByUuid(UUID.fromString("ac7b30dc-6207-4c71-9752-ee0fb838a271"));\r
-// ReferenceBase<?> sourceRef = taxon.getSec();\r
+ //gets the taxon "Hydroscaphidae"(family)\r
+ TaxonBase taxon = getTaxonService().find(UUID.fromString(acceptedTaxonUUID));\r
+ sourceRef = taxon.getSec();\r
boolean success = true;\r
+ int limit = state.getConfig().getLimitSave();\r
\r
- TaxonomicTree tree = getTaxonomicTreeFor(state, getSourceRef());\r
+ TaxonomicTree tree = getTaxonomicTreeFor(state, sourceRef);\r
\r
Set<TaxonBase> childSet = new HashSet<TaxonBase>(limit);\r
\r
Set<UUID> childKeysSet = childParentMap.keySet();\r
Set<UUID> parentValuesSet = new HashSet<UUID>(childParentMap.values());\r
\r
- if (logger.isInfoEnabled()) {\r
- logger.info("Start reading children and parents");\r
+ if (logger.isTraceEnabled()) {\r
+ logger.trace("Start reading children and parents");\r
}\r
- List<TaxonBase> children = getTaxonService().findByUuid(childKeysSet);\r
- List<TaxonBase> parents = getTaxonService().findByUuid(parentValuesSet);\r
+ List<TaxonBase> children = getTaxonService().find(childKeysSet);\r
+ List<TaxonBase> parents = getTaxonService().find(parentValuesSet);\r
Map<UUID, TaxonBase> parentsMap = new HashMap<UUID, TaxonBase>(parents.size());\r
for (TaxonBase taxonBase : parents){\r
parentsMap.put(taxonBase.getUuid(), taxonBase);\r
}\r
\r
- \r
- if (logger.isInfoEnabled()) {\r
- logger.info("End reading children and parents");\r
- }\r
- \r
- \r
if (logger.isTraceEnabled()) {\r
+ logger.debug("End reading children and parents");\r
for (UUID uuid : childKeysSet) {\r
logger.trace("child uuid query: " + uuid);\r
}\r
- }\r
- if (logger.isTraceEnabled()) {\r
for (UUID uuid : parentValuesSet) {\r
logger.trace("parent uuid query: " + uuid);\r
}\r
- }\r
- if (logger.isTraceEnabled()) {\r
for (TaxonBase tb : children) {\r
logger.trace("child uuid result: " + tb.getUuid());\r
}\r
- }\r
- if (logger.isTraceEnabled()) {\r
for (TaxonBase tb : parents) {\r
logger.trace("parent uuid result: " + tb.getUuid());\r
}\r
logger.debug("Parent-child (" + mappedParentUuid + "-" + childUuid + \r
") relationship created");\r
}\r
- if (!childSet.contains(childTaxon)) {\r
+ if (childTaxon != null && !childSet.contains(childTaxon)) {\r
\r
childSet.add(childTaxon);\r
\r
}\r
}\r
\r
- if (childTaxon != null && !childSet.contains(childTaxon)) {\r
- childSet.add(childTaxon);\r
- if (logger.isDebugEnabled()) {\r
- logger.debug("Child taxon (" + childUuid + ") added to Set");\r
- }\r
- } else {\r
- if (logger.isDebugEnabled()) {\r
- logger.debug("Duplicated child taxon (" + childUuid + ")");\r
- }\r
- }\r
- \r
} catch (Exception e) {\r
logger.error("Error creating taxonomically included relationship parent-child (" + \r
mappedParentUuid + "-" + childUuid + ")", e);\r
}\r
\r
}\r
- if (logger.isInfoEnabled()) {\r
- logger.info("Start saving childSet");\r
+ if (logger.isTraceEnabled()) {\r
+ logger.trace("Start saving childSet");\r
}\r
- getTaxonService().saveTaxonAll(childSet);\r
- if (logger.isInfoEnabled()) {\r
- logger.info("End saving childSet");\r
+ getTaxonService().save(childSet);\r
+ if (logger.isTraceEnabled()) {\r
+ logger.trace("End saving childSet");\r
}\r
\r
parentValuesSet = null;\r
*/\r
private boolean createMisappliedNameRelationships(FaunaEuropaeaImportState state, Map<UUID, UUID> fromToMap) {\r
\r
- TaxonBase taxon = getTaxonService().getTaxonByUuid(UUID.fromString("ac7b30dc-6207-4c71-9752-ee0fb838a271"));\r
- ReferenceBase<?> sourceRef = taxon.getSec();\r
+ //gets the taxon "Hydroscaphidae" (family)\r
+ \r
+ TaxonBase taxon = getTaxonService().find(UUID.fromString(acceptedTaxonUUID));\r
+ sourceRef = taxon.getSec();\r
boolean success = true;\r
+ int limit = state.getConfig().getLimitSave();\r
\r
Set<TaxonBase> misappliedNameSet = new HashSet<TaxonBase>(limit);\r
\r
Set<UUID> misappliedNamesSet = fromToMap.keySet();\r
Set<UUID> acceptedTaxaSet = new HashSet<UUID>(fromToMap.values());\r
\r
- if (logger.isInfoEnabled()) {\r
- logger.info("Start reading misapplied names and accepted taxa");\r
+ if (logger.isTraceEnabled()) {\r
+ logger.trace("Start reading misapplied names and accepted taxa");\r
}\r
- List<TaxonBase> misappliedNames = getTaxonService().findByUuid(misappliedNamesSet);\r
- List<TaxonBase> acceptedTaxa = getTaxonService().findByUuid(acceptedTaxaSet);\r
+ List<TaxonBase> misappliedNames = getTaxonService().find(misappliedNamesSet);\r
+ List<TaxonBase> acceptedTaxa = getTaxonService().find(acceptedTaxaSet);\r
Map<UUID, TaxonBase> acceptedTaxaMap = new HashMap<UUID, TaxonBase>(acceptedTaxa.size());\r
for (TaxonBase taxonBase : acceptedTaxa){\r
acceptedTaxaMap.put(taxonBase.getUuid(), taxonBase);\r
}\r
\r
- \r
- if (logger.isInfoEnabled()) {\r
- logger.info("End reading misapplied names and accepted taxa");\r
- }\r
- \r
- \r
if (logger.isTraceEnabled()) {\r
+ logger.info("End reading misapplied names and accepted taxa");\r
for (UUID uuid : misappliedNamesSet) {\r
logger.trace("misapplied name uuid query: " + uuid);\r
}\r
- }\r
- if (logger.isTraceEnabled()) {\r
for (UUID uuid : acceptedTaxaSet) {\r
logger.trace("accepted taxon uuid query: " + uuid);\r
}\r
- }\r
- if (logger.isTraceEnabled()) {\r
for (TaxonBase tb : misappliedNames) {\r
logger.trace("misapplied name uuid result: " + tb.getUuid());\r
}\r
- }\r
- if (logger.isTraceEnabled()) {\r
for (TaxonBase tb : acceptedTaxa) {\r
logger.trace("accepted taxon uuid result: " + tb.getUuid());\r
}\r
}\r
\r
}\r
- if (logger.isInfoEnabled()) {\r
- logger.info("Start saving misappliedNameSet");\r
+ if (logger.isTraceEnabled()) {\r
+ logger.trace("Start saving misappliedNameSet");\r
}\r
- getTaxonService().saveTaxonAll(misappliedNameSet);\r
- if (logger.isInfoEnabled()) {\r
- logger.info("End saving misappliedNameSet");\r
+ getTaxonService().save(misappliedNameSet);\r
+ if (logger.isTraceEnabled()) {\r
+ logger.trace("End saving misappliedNameSet");\r
}\r
\r
acceptedTaxaSet = null;\r
*/\r
private boolean createHeterotypicSynonyms(FaunaEuropaeaImportState state, Map<UUID, UUID> fromToMap) {\r
\r
+ int limit = state.getConfig().getLimitSave();\r
boolean success = true;\r
\r
Set<TaxonBase> synonymSet = new HashSet<TaxonBase>(limit);\r
Set<UUID> synonymUuidSet = fromToMap.keySet();\r
Set<UUID> acceptedTaxaUuidSet = new HashSet<UUID>(fromToMap.values());\r
\r
- if (logger.isInfoEnabled()) {\r
- logger.info("Start reading synonyms names and accepted taxa");\r
+ if (logger.isTraceEnabled()) {\r
+ logger.trace("Reading synonym names and accepted taxa...");\r
}\r
- List<TaxonBase> synonyms = getTaxonService().findByUuid(synonymUuidSet);\r
- List<TaxonBase> acceptedTaxa = getTaxonService().findByUuid(acceptedTaxaUuidSet);\r
+ List<TaxonBase> synonyms = getTaxonService().find(synonymUuidSet);\r
+ List<TaxonBase> acceptedTaxa = getTaxonService().find(acceptedTaxaUuidSet);\r
Map<UUID, TaxonBase> acceptedTaxaMap = new HashMap<UUID, TaxonBase>(acceptedTaxa.size());\r
for (TaxonBase taxonBase : acceptedTaxa){\r
acceptedTaxaMap.put(taxonBase.getUuid(), taxonBase);\r
}\r
\r
- if (logger.isInfoEnabled()) {\r
- logger.info("End reading synonyms names and accepted taxa");\r
- }\r
-\r
if (logger.isTraceEnabled()) {\r
+ logger.trace("End reading synonyms names and accepted taxa");\r
for (UUID uuid : synonymUuidSet) {\r
logger.trace("synonym uuid query: " + uuid);\r
}\r
- }\r
- if (logger.isTraceEnabled()) {\r
for (UUID uuid : acceptedTaxaUuidSet) {\r
logger.trace("accepted taxon uuid query: " + uuid);\r
}\r
- }\r
- if (logger.isTraceEnabled()) {\r
for (TaxonBase tb : synonyms) {\r
logger.trace("synonym uuid result: " + tb.getUuid());\r
}\r
- }\r
- if (logger.isTraceEnabled()) {\r
for (TaxonBase tb : acceptedTaxa) {\r
logger.trace("accepted taxon uuid result: " + tb.getUuid());\r
}\r
mappedAcceptedTaxonUuid + "-" + synonymUuid + ")", e);\r
}\r
}\r
- if (logger.isInfoEnabled()) {\r
- logger.info("Start saving synonymSet");\r
+ if (logger.isTraceEnabled()) {\r
+ logger.trace("Start saving synonymSet");\r
}\r
- getTaxonService().saveTaxonAll(synonymSet);\r
- if (logger.isInfoEnabled()) {\r
- logger.info("End saving synonymSet");\r
+ getTaxonService().save(synonymSet);\r
+ if (logger.isTraceEnabled()) {\r
+ logger.trace("End saving synonymSet");\r
}\r
\r
acceptedTaxaUuidSet = null;\r