return tree;\r
}\r
\r
+ \r
+ /**\r
+ * Alternative memory saving method variant of\r
+ * {@link #makeTree(STATE state, ReferenceBase ref)} which stores only the\r
+ * UUID instead of the full tree in the <code>ImportStateBase</code> by \r
+ * using <code>state.putTreeUuid(ref, tree);</code>\r
+ * \r
+ * @param state\r
+ * @param ref\r
+ * @return\r
+ */\r
+ protected TaxonomicTree makeTreeMemSave(STATE state, ReferenceBase ref){\r
+ String treeName = "TaxonTree (Import)";\r
+ if (ref != null && CdmUtils.isNotEmpty(ref.getTitleCache())){\r
+ treeName = ref.getTitleCache();\r
+ }\r
+ TaxonomicTree tree = TaxonomicTree.NewInstance(treeName);\r
+ tree.setReference(ref);\r
+ \r
+\r
+ // use defined uuid for first tree\r
+ CONFIG config = (CONFIG)state.getConfig();\r
+ if (state.countTrees() < 1 ){\r
+ tree.setUuid(config.getTreeUuid());\r
+ }\r
+ getTaxonService().saveTaxonomicTree(tree);\r
+ state.putTreeUuid(ref, tree);\r
+ return tree;\r
+ }\r
+ \r
}\r
\r
import java.util.HashMap;\r
import java.util.Map;\r
+import java.util.UUID;\r
\r
import org.apache.log4j.Logger;\r
\r
\r
private Map<ReferenceBase,TaxonomicTree> treeMap = new HashMap<ReferenceBase,TaxonomicTree>();\r
\r
+ private Map<ReferenceBase,UUID> treeUuidMap = new HashMap<ReferenceBase,UUID>();\r
+\r
+ \r
protected ImportStateBase(CONFIG config){\r
this.config = config;\r
stores.put(ICdmIO.USER_STORE, new MapWrapper<User>(service));\r
}\r
\r
public int countTrees(){\r
- return treeMap.size();\r
+ return treeUuidMap.size();\r
+ }\r
+ \r
+ /**\r
+ * @return the treeUuid\r
+ */\r
+ public UUID getTreeUuid(ReferenceBase ref) {\r
+ return treeUuidMap.get(ref);\r
+ }\r
+\r
+ public void putTreeUuid(ReferenceBase ref, TaxonomicTree tree) {\r
+ if (tree != null){\r
+ this.treeUuidMap.put(ref, tree.getUuid());\r
+ }\r
+ }\r
+ \r
+ public int countTreeUuids(){\r
+ return treeUuidMap.size();\r
}\r
}\r
@SuppressWarnings("unchecked")\r
protected void makeIoClassList() {\r
ioClassList = new Class[] {\r
- FaunaEuropaeaAuthorImport.class,\r
- FaunaEuropaeaTaxonNameImport.class,\r
-// FaunaEuropaeaRelTaxonIncludeImport.class\r
+// FaunaEuropaeaAuthorImport.class,\r
+// FaunaEuropaeaTaxonNameImport.class,\r
+ FaunaEuropaeaRelTaxonIncludeImport.class\r
// FaunaEuropaeaRefImport.class,\r
// FaunaEuropaeaDistributionImport.class\r
};\r
" SELECT dbo.Taxon.UUID AS ChildUuid, Parent.UUID AS ParentUuid " +\r
" 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 + ")";\r
+ " WHERE (dbo.Taxon.TAX_VALID <> 0) AND (dbo.Taxon.TAX_AUT_ID <> " + A_AUCT + ")" +\r
+ " ORDER BY dbo.Taxon.TAX_RNK_ID ASC";\r
\r
if (logger.isInfoEnabled()) {\r
logger.info("Query: " + strQuery);\r
\r
while (rs.next()) {\r
\r
+ // take memory snapshot every 10000 relations\r
+ if((i % 10000) == 0){\r
+ ProfilerController.memorySnapshot(); \r
+ }\r
+ \r
if ((i++ % limit) == 0) { \r
\r
- ProfilerController.memorySnapshot();\r
txStatus = startTransaction();\r
childParentMap = new HashMap<UUID, UUID>(limit);\r
\r
boolean success = true;\r
\r
//add tree to new session\r
- TaxonomicTree tree = state.getTree(sourceRef);\r
- if (tree == null){\r
- tree = makeTree(state, sourceRef);\r
+ \r
+ UUID treeUuid = state.getTreeUuid(sourceRef);\r
+ TaxonomicTree tree;\r
+ if (treeUuid == null){\r
+ tree = makeTreeMemSave(state, sourceRef);\r
+ } else {\r
+ tree = getTaxonService().getTaxonomicTreeByUuid(treeUuid); \r
}\r
- getTaxonService().saveTaxonomicTree(tree);\r
\r
Set<TaxonBase> childSet = new HashSet<TaxonBase>(limit);\r
\r
}\r
List<TaxonBase> children = getTaxonService().findByUuid(childKeysSet);\r
List<TaxonBase> parents = getTaxonService().findByUuid(parentValuesSet);\r
- Map<UUID, TaxonBase> parentsMap = new HashMap<UUID, TaxonBase>();\r
+ Map<UUID, TaxonBase> parentsMap = new HashMap<UUID, TaxonBase>(parents.size());\r
for (TaxonBase taxonBase : parents){\r
parentsMap.put(taxonBase.getUuid(), taxonBase);\r
}\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.io.profiler.ProfilerController;\r
import eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportState;\r
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
\r
success = retrieveTaxa(state, fauEuTaxonMap, Q_NO_RESTRICTION);\r
// success = processTaxa(state);\r
+// ProfilerController.memorySnapshot();\r
success = processTaxaFromDatabase(state, fauEuTaxonMap);\r
\r
commitTransaction(txStatus);\r
\r
for (int j = 1; j <= n + 1; j++)\r
{\r
-\r
- ProfilerController.memorySnapshot();\r
\r
int offset = j - 1;\r
int start = offset * limit;\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.io.profiler.ProfilerController;\r
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
import eu.etaxonomy.cdm.model.common.OriginalSource;\r
*/\r
protected boolean doInvoke(FaunaEuropaeaImportState state) { \r
\r
- ProfilerController.memorySnapshot();\r
boolean success = true;\r
if(logger.isInfoEnabled()) { logger.info("Start making taxa..."); }\r
\r
success = processTaxa(state);\r
\r
logger.info("End making taxa...");\r
- ProfilerController.memorySnapshot();\r
return success;\r
}\r
\r
\r
if ((i++ % limit) == 0) {\r
\r
- ProfilerController.memorySnapshot();\r
txStatus = startTransaction();\r
taxonMap = new HashMap<Integer, TaxonBase<?>>(limit);\r
fauEuTaxonMap = new HashMap<Integer, FaunaEuropaeaTaxon>(limit);\r
\r
success = processTaxaSecondPass(state, taxonMap, fauEuTaxonMap);\r
saveTaxa(state, taxonMap);\r
-\r
- ProfilerController.memorySnapshot();\r
\r
taxonMap = null;\r
fauEuTaxonMap = null;\r