r698 - in trunk/echobase-services/src/main/java/fr/ifremer/echobase/services: importdata importdb/strategy
Author: tchemit Date: 2012-09-23 12:34:51 +0200 (Sun, 23 Sep 2012) New Revision: 698 Url: http://forge.codelutin.com/repositories/revision/echobase/698 Log: check if strategy exist before import it (special dirty case...) Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsEsduCellImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/DataImportDbStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/EchoBaseImportStrategy.java Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsEsduCellImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsEsduCellImportService.java 2012-09-23 09:48:45 UTC (rev 697) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsEsduCellImportService.java 2012-09-23 10:34:51 UTC (rev 698) @@ -116,7 +116,7 @@ Map<String, Cell> esduCellMap = Maps.uniqueIndex( dataProcessing.getCell(), EchoBaseFunctions.CELL_BY_NAME); - // index all echotypes of thi voyage + // index all echotypes of this voyage Map<String, Echotype> echotypeMap = Maps.uniqueIndex( voyage.getEchotype(), EchoBaseFunctions.ECHOTYPE_NAME); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/DataImportDbStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/DataImportDbStrategy.java 2012-09-23 09:48:45 UTC (rev 697) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/DataImportDbStrategy.java 2012-09-23 10:34:51 UTC (rev 698) @@ -70,7 +70,6 @@ "In data import, can not accept " + "referential type, but found some referential files: " + badTableTypes); } - } @Override Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/EchoBaseImportStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/EchoBaseImportStrategy.java 2012-09-23 09:48:45 UTC (rev 697) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/EchoBaseImportStrategy.java 2012-09-23 10:34:51 UTC (rev 698) @@ -27,8 +27,11 @@ import fr.ifremer.echobase.persistence.EchoBasePersistenceHelper; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; +import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.TopiaEntityEnum; +import org.nuiton.topia.persistence.csv.CsvProgressModel; import org.nuiton.topia.persistence.csv.in.CsvImportResult; import org.nuiton.topia.persistence.csv.in.ImportModelFactory; import org.nuiton.topia.persistence.csv.in.ImportStrategy; @@ -38,6 +41,8 @@ import org.nuiton.util.csv.Import; import org.nuiton.util.csv.ImportToMap; +import java.util.Map; + /** * How to import csv files. * @@ -74,7 +79,14 @@ CsvImportResult<EchoBaseEntityEnum> csvResult) throws TopiaException { TopiaDAO<E> dao = persistenceHelper.getDAO(tx, meta.getSource()); - TopiaCsvImports.importAllEntities(dao, meta, importer, csvResult, nbRowBuffer); + if (meta.getSource() == EchoBaseEntityEnum.Category) { + + // special case, test if exists before to add it, otherwise skip it + importAllEntitiesIfNotExisting(dao, meta, importer, csvResult, nbRowBuffer); + + } else { + TopiaCsvImports.importAllEntities(dao, meta, importer, csvResult, nbRowBuffer); + } } @Override @@ -107,6 +119,43 @@ csvResult, nbRowBuffer); } + } + public static <T extends TopiaEntityEnum, E extends TopiaEntity> void importAllEntitiesIfNotExisting(TopiaDAO<E> dao, + TableMeta<T> meta, + Import<E> importer, + CsvImportResult<T> csvResult, + int nbRowBuffer) throws TopiaException { + + TopiaContextImplementor context = dao.getContext(); + + CsvProgressModel progressModel = csvResult == null ? null : + csvResult.getProgressModel(); + + int compt = 0; + for (E entity : importer) { + + if (!dao.existByTopiaId(entity.getTopiaId())) { + + Map<String, Object> properties = meta.prepareCreate( + entity, entity.getTopiaId()); + E entityToSave = dao.create(properties); + + meta.copy(entity, entityToSave); + compt++; + if (compt % nbRowBuffer == 0) { + // flush it + context.getHibernate().flush(); + } + } + + if (csvResult != null) { + csvResult.incrementsNumberUpdated(); + if (progressModel != null) { + progressModel.incrementsProgress(); + } + } + + } } }
participants (1)
-
tchemit@users.forge.codelutin.com