import java.sql.ResultSet;\r
import java.sql.ResultSetMetaData;\r
import java.sql.SQLException;\r
+import java.util.Collection;\r
import java.util.HashMap;\r
import java.util.Map;\r
\r
import org.apache.log4j.Logger;\r
+import org.springframework.transaction.TransactionStatus;\r
\r
import eu.etaxonomy.cdm.common.CdmUtils;\r
+import eu.etaxonomy.cdm.io.common.CdmImportBase;\r
import eu.etaxonomy.cdm.io.common.CdmIoBase;\r
import eu.etaxonomy.cdm.io.common.ICdmIO;\r
+import eu.etaxonomy.cdm.io.common.ICdmImport;\r
import eu.etaxonomy.cdm.io.common.IImportConfigurator;\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.common.Annotation;\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.taxon.TaxonBase;\r
\r
/**\r
* @author a.babadshanjan\r
* @created 11.05.2009\r
* @version 1.0\r
*/\r
-public abstract class FaunaEuropaeaImportBase extends CdmIoBase<IImportConfigurator> implements ICdmIO<IImportConfigurator> {\r
+public abstract class FaunaEuropaeaImportBase extends CdmImportBase<FaunaEuropaeaImportConfigurator, FaunaEuropaeaImportState> \r
+implements ICdmImport<FaunaEuropaeaImportConfigurator,FaunaEuropaeaImportState> {\r
private static final Logger logger = Logger.getLogger(FaunaEuropaeaImportBase.class);\r
\r
- public FaunaEuropaeaImportBase() {\r
- }\r
+// /* Max number of taxa to retrieve (for test purposes) */\r
+// protected static final int maxTaxa = 1000;\r
+// /* Max number of taxa to be saved with one service call */\r
+// protected int limit = 20000; // TODO: Make configurable\r
+// /* Interval for progress info message when retrieving taxa */\r
+// protected static final int modCount = 10000;\r
+// /* Highest taxon index in the FauEu database */\r
+// protected int highestTaxonIndex = 0;\r
\r
protected boolean resultSetHasColumn(ResultSet rs, String columnName){\r
try {\r
}\r
}\r
\r
+\r
+ protected boolean saveTaxa(Map<String, MapWrapper<? extends CdmBase>> stores,\r
+ int highestTaxonIndex, int limit) {\r
+\r
+ MapWrapper<TaxonBase> taxonStore = (MapWrapper<TaxonBase>)stores.get(ICdmIO.TAXON_STORE);\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
+ 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
+ \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
+ TransactionStatus txStatus = startTransaction();\r
+ \r
+ Collection<TaxonBase> taxonMapPart = taxonStore.objects(start, limit);\r
+ getTaxonService().saveTaxonAll(taxonMapPart);\r
+ taxonMapPart = null;\r
+ taxonStore.removeObjects(start, limit);\r
+ \r
+ commitTransaction(txStatus);\r
+\r
+ }\r
+ \r
+ return success;\r
+ }\r
}\r