import java.util.Collection;\r
import java.util.HashMap;\r
import java.util.Map;\r
+import java.util.UUID;\r
\r
import org.apache.log4j.Logger;\r
import org.springframework.transaction.TransactionStatus;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;\r
\r
/**\r
* @author a.babadshanjan\r
}\r
\r
\r
- protected boolean saveTaxa(FaunaEuropaeaImportState state,\r
- int highestTaxonIndex, int limit) {\r
-\r
- Map<String, MapWrapper<? extends CdmBase>> stores = state.getStores();\r
- MapWrapper<TaxonBase> taxonStore = (MapWrapper<TaxonBase>)stores.get(ICdmIO.TAXON_STORE);\r
- TransactionStatus txStatus = null;\r
-\r
- int n = 0;\r
- int nbrOfTaxa = highestTaxonIndex;\r
-// int nbrOfTaxa = taxonStore.size();\r
- boolean success = true;\r
-\r
- if(logger.isInfoEnabled()) { logger.info("Saving taxa ..."); }\r
-\r
- if (nbrOfTaxa < limit) { // TODO: test with critical values\r
- limit = nbrOfTaxa;\r
- } else {\r
- n = nbrOfTaxa / limit;\r
- }\r
-\r
- if(logger.isInfoEnabled()) { \r
- logger.info("number of taxa = " + taxonStore.size() \r
- + ", highest taxon index = " + highestTaxonIndex \r
- + ", limit = " + limit\r
- + ", n = " + n); \r
- }\r
-\r
- // save taxa in blocks of <=limit\r
+ /**\r
+ * @param state\r
+ * @param sourceRef\r
+ */\r
+ protected TaxonomicTree getTaxonomicTreeFor(FaunaEuropaeaImportState state, ReferenceBase<?> sourceRef) {\r
\r
- for (int j = 1; j <= n + 1; j++)\r
- {\r
- int offset = j - 1;\r
- int start = offset * limit;\r
-\r
- if(logger.isInfoEnabled()) { \r
- logger.info("Saving taxa: " + start + " - " + (start + limit - 1)); \r
- }\r
-\r
- if(logger.isInfoEnabled()) { \r
- logger.info("index = " + j \r
- + ", offset = " + offset\r
- + ", start = " + start); \r
- }\r
+ TaxonomicTree tree;\r
+ UUID treeUuid = state.getTreeUuid(sourceRef);\r
+ if (treeUuid == null){\r
+ if(logger.isInfoEnabled()) { logger.info(".. creating new taxonomic tree"); }\r
\r
- if (j == n + 1) {\r
- limit = nbrOfTaxa - n * limit;\r
- if(logger.isInfoEnabled()) { \r
- logger.info("n = " + n + ", limit = " + limit); \r
- }\r
- }\r
-\r
- if (state.getConfig().isUseTransactions()) {\r
- txStatus = startTransaction();\r
- }\r
- \r
- Collection<TaxonBase> taxonMapPart = taxonStore.objects(start, limit);\r
- getTaxonService().saveTaxonAll(taxonMapPart);\r
- taxonMapPart = null;\r
- taxonStore.removeObjects(start, limit);\r
+ TransactionStatus txStatus = startTransaction();\r
+ tree = makeTreeMemSave(state, sourceRef);\r
+ commitTransaction(txStatus);\r
\r
- if (state.getConfig().isUseTransactions()) {\r
- commitTransaction(txStatus);\r
- }\r
-\r
+ } else {\r
+ tree = getTaxonTreeService().getTaxonomicTreeByUuid(treeUuid);\r
}\r
- \r
- return success;\r
+ return tree;\r
}\r
+\r
}\r