r657 - in trunk: echobase-domain/src/main/java/fr/ifremer/echobase/entities/data echobase-domain/src/main/xmi echobase-services/src/main/java/fr/ifremer/echobase/services echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb echobase-services/src/test/java/fr/ifremer/echobase echobase-services/src/test/java/fr/ifremer/echobase/services echobase-services/src/test/java/fr/ifremer/echobase/ui echobase-services/src/test/java/fr/ifremer/echobase/ui/actions echobase-services/src
Author: tchemit Date: 2012-09-13 07:40:07 +0200 (Thu, 13 Sep 2012) New Revision: 657 Url: http://forge.codelutin.com/repositories/revision/echobase/657 Log: fixes #1490: Fix duplicated data in export refs #1437: Suppression des imports (debut des tests) refs #1486: Permettre un export EchoBase plus cible (fix all db export + simplify api (no more strategy) Added: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removeData/ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removeData/AbstractRemoveDataServiceIT.java Removed: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/ Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/CellImpl.java trunk/echobase-domain/src/main/xmi/echobase.zargo trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbMode.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbService.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ExportDbServiceTest.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Configure.java Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/CellImpl.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/CellImpl.java 2012-09-12 18:50:24 UTC (rev 656) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/CellImpl.java 2012-09-13 05:40:07 UTC (rev 657) @@ -50,7 +50,7 @@ } @Override - public void accept2(EntityVisitor visitor) { + public void acceptWithNoChild(EntityVisitor visitor) { visitor.start(this); visitor.visit(this, PROPERTY_NAME, String.class, name); visitor.visit(this, PROPERTY_DATA, Collection.class, Data.class, data); Modified: trunk/echobase-domain/src/main/xmi/echobase.zargo =================================================================== (Binary files differ) Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2012-09-12 18:50:24 UTC (rev 656) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2012-09-13 05:40:07 UTC (rev 657) @@ -298,7 +298,7 @@ if (extraWhereQuery != null) { hql += " WHERE " + extraWhereQuery; } - Iterable<E> result = dao.findAllLazyByQuery(1000, hql); + Iterable<E> result = dao.findAllLazyByQuery(5000, hql); return result; } catch (TopiaException eee) { throw new EchoBaseTechnicalException("Could not obtain data", eee); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbMode.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbMode.java 2012-09-12 18:50:24 UTC (rev 656) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbMode.java 2012-09-13 05:40:07 UTC (rev 657) @@ -36,25 +36,39 @@ public enum ExportDbMode implements I18nAble { /** Export only referential. */ - REFERENTIAL(n_("echobase.common.exportDbMode.referential")), + REFERENTIAL(n_("echobase.common.exportDbMode.referential"), true, false), /** Export only selected data. */ - DATA(n_("echobase.common.exportDbMode.data")), + DATA(n_("echobase.common.exportDbMode.data"), false, true), /** Export selected data + referential. */ - REFERENTIAL_AND_DATA(n_("echobase.common.exportDbMode.referentialAndData")), + REFERENTIAL_AND_DATA(n_("echobase.common.exportDbMode.referentialAndData"), true, true), /** Export all the db. */ - ALL(n_("echobase.common.exportDbMode.all")); + ALL(n_("echobase.common.exportDbMode.all"), true, true); private final String i18nKey; - ExportDbMode(String i18nKey) { + private final boolean exportReferential; + + private final boolean exportData; + + ExportDbMode(String i18nKey, boolean exportReferential, boolean exportData) { this.i18nKey = i18nKey; + this.exportReferential = exportReferential; + this.exportData = exportData; } @Override public String getI18nKey() { return i18nKey; } + + public boolean isExportReferential() { + return exportReferential; + } + + public boolean isExportData() { + return exportData; + } } \ No newline at end of file Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbService.java 2012-09-12 18:50:24 UTC (rev 656) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbService.java 2012-09-13 05:40:07 UTC (rev 657) @@ -23,21 +23,32 @@ */ package fr.ifremer.echobase.services.exportdb; -import fr.ifremer.echobase.EchoBaseTechnicalException; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.io.EchoBaseIOUtil; import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import fr.ifremer.echobase.services.exportdb.strategy.AbstractExportDbStrategy; -import fr.ifremer.echobase.services.exportdb.strategy.AllExportDbStrategy; -import fr.ifremer.echobase.services.exportdb.strategy.DataExportDbStrategy; -import fr.ifremer.echobase.services.exportdb.strategy.ReferentialAndDataExportDbStrategy; -import fr.ifremer.echobase.services.exportdb.strategy.ReferentialExportDbStrategy; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.TopiaPersistenceHelper; +import org.nuiton.topia.persistence.csv.out.ExportEntityVisitor; +import org.nuiton.topia.persistence.csv.out.TopiaCsvExports; +import org.nuiton.topia.persistence.metadata.AssociationMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; import org.nuiton.util.FileUtil; import org.nuiton.util.TimeLog; import java.io.File; import java.io.IOException; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; /** * Service to import / export a complete db. @@ -71,28 +82,186 @@ ExportDbMode exportDbMode = model.getExportDbMode(); - AbstractExportDbStrategy strategy; + ExportService exportService = getService(ExportService.class); - switch (exportDbMode) { - case REFERENTIAL: - strategy = getService(ReferentialExportDbStrategy.class); - break; - case DATA: - strategy = getService(DataExportDbStrategy.class); - break; - case REFERENTIAL_AND_DATA: - strategy = getService(ReferentialAndDataExportDbStrategy.class); - break; - case ALL: - strategy = getService(AllExportDbStrategy.class); - break; - default: - throw new EchoBaseTechnicalException( - "Can not deal with this exportDbMode: " + exportDbMode); + boolean exportVoyagesByVisitor = exportDbMode.isExportData(); + + if (exportVoyagesByVisitor) { + + long nbVoyages = exportService.countEntities(Voyage.class); + if (exportDbMode == ExportDbMode.ALL || + model.getVoyageIds().length == nbVoyages) { + + // no need to export via visitor, can export all data tables + exportVoyagesByVisitor = false; + } } - strategy.doExport(model, dir); + List<TableMeta<EchoBaseEntityEnum>> tablesToExport = Lists.newArrayList(); + List<AssociationMeta<EchoBaseEntityEnum>> associationsToExport = Lists.newArrayList(); + if (exportDbMode.isExportReferential()) { + + // add referential tables + tablesToExport.addAll(getDbMeta().getReferenceTables()); + associationsToExport.addAll(getDbMeta().getReferenceAssociations()); + } + + if (exportDbMode.isExportData() && !exportVoyagesByVisitor) { + + // will export complete data tables + tablesToExport.addAll(getDbMeta().getDataTables()); + associationsToExport.addAll(getDbMeta().getDataAssociations()); + } + + if (model.isComputeSteps()) { + + int nbSteps = tablesToExport.size() + associationsToExport.size(); + + if (exportVoyagesByVisitor) { + nbSteps += model.getVoyageIds().length; + } + + if (log.isInfoEnabled()) { + log.info("NB steps: " + nbSteps); + } + model.setNbSteps(nbSteps); + } + + exportTables(model, dir, tablesToExport, exportService); + + exportAssociations(model, dir, associationsToExport, exportService); + + if (exportVoyagesByVisitor) { + + exportVoyages(model, dir, exportService); + } + EchoBaseIOUtil.compressZipFile(zipFile, dir); } + + private void exportTables(ExportDbConfiguration model, + File dir, + List<TableMeta<EchoBaseEntityEnum>> tablesToExport, + ExportService exportService) { + for (TableMeta<EchoBaseEntityEnum> meta : tablesToExport) { + + model.incrementsProgress(); + + File entryFile = new File(dir, meta.getFilename()); + exportService.exportData(meta, entryFile); + } + } + + private void exportAssociations(ExportDbConfiguration model, + File dir, + List<AssociationMeta<EchoBaseEntityEnum>> associationsToExport, + ExportService exportService) { + for (AssociationMeta<EchoBaseEntityEnum> associationMeta : associationsToExport) { + + model.incrementsProgress(); + + File entryFile = new File(dir, associationMeta.getFilename()); + exportService.exportData(associationMeta, entryFile); + } + } + + private void exportVoyages(ExportDbConfiguration model, + File dir, + ExportService exportService) throws IOException { + + Map<EchoBaseEntityEnum, TopiaCsvExports.EntityExportContext<EchoBaseEntityEnum>> contexts = + TopiaCsvExports.createReplicateEntityVisitorContexts( + exportService.getModelFactory(false), + getDbMeta().getDataTables(), + getDbMeta().getDataAssociations(), + dir); + + ReplicateEntityVisitor visitor = new ReplicateEntityVisitor( + getDbMeta().getPersistenceHelper(), + contexts); + + try { + for (String voyageId : model.getVoyageIds()) { + + model.incrementsProgress(); + + Voyage voyage = getEntityById(Voyage.class, voyageId); + visitor.export(voyage); + } + } finally { + + // close visitor to close export files + visitor.close(); + } + } + + /** + * entity visitor to export data to csv files. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ + static class ReplicateEntityVisitor extends ExportEntityVisitor<EchoBaseEntityEnum> { + + protected final Set<String> categoryIds; + + public ReplicateEntityVisitor(TopiaPersistenceHelper<EchoBaseEntityEnum> typeProvider, + Map<EchoBaseEntityEnum, TopiaCsvExports.EntityExportContext<EchoBaseEntityEnum>> entityExporters) { + super(typeProvider, entityExporters); + categoryIds = Sets.newHashSet(); + } + + @Override + public void visit(TopiaEntity entity, String propertyName, + Class<?> type, Object value) { + if (Result.PROPERTY_CATEGORY.equals(propertyName) && + entity instanceof Result) { + + // export category + try { + TopiaEntity topiaEntity = (TopiaEntity) value; + if (categoryIds.add(topiaEntity.getTopiaId())) { + // add this new category + topiaEntity.accept(this); + } + + } catch (TopiaException e) { + if (log.isErrorEnabled()) { + log.error("Can not visit entity " + value, e); + } + } + } + } + + @Override + protected void visitEntityCollection(TopiaEntity entity, + String propertyName, + Class<?> collectionType, + Class<?> type, + Collection<?> cValue) { + if (Voyage.PROPERTY_POST_CELL.equals(propertyName) && entity instanceof Voyage) { + + // special case, we don not want to visit childs of cells + for (Object o : cValue) { + Cell cell = (Cell) o; + + cell.acceptWithNoChild(this); + } + } else { + // normal entity collection visit + super.visitEntityCollection(entity, + propertyName, + collectionType, + type, + cValue); + } + } + + @Override + public void close() throws IOException { + categoryIds.clear(); + super.close(); + } + } } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java 2012-09-12 18:50:24 UTC (rev 656) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java 2012-09-13 05:40:07 UTC (rev 657) @@ -31,6 +31,10 @@ */ public class EchoBaseServiceFixtures { + public String completeDb2011() { + return "/import-data/echobase-pelgas-2011.h2.db.gz"; + } + public String IMPORT_DATA_ECHOBASE_NO_DATA() { return "/import-data/echobase-" + dbVersion() + "-nodata.h2.db.gz"; } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ExportDbServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ExportDbServiceTest.java 2012-09-12 18:50:24 UTC (rev 656) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ExportDbServiceTest.java 2012-09-13 05:40:07 UTC (rev 657) @@ -23,15 +23,43 @@ */ package fr.ifremer.echobase.services; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.data.Category; +import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.data.Data; +import fr.ifremer.echobase.entities.data.DataAcquisition; +import fr.ifremer.echobase.entities.data.DataProcessing; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.data.Transect; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.AcousticInstrument; +import fr.ifremer.echobase.entities.references.CellType; +import fr.ifremer.echobase.entities.references.DataMetadata; +import fr.ifremer.echobase.entities.references.Species; +import fr.ifremer.echobase.entities.references.SpeciesCategory; +import fr.ifremer.echobase.io.EchoBaseIOUtil; import fr.ifremer.echobase.services.exportdb.ExportDbConfiguration; import fr.ifremer.echobase.services.exportdb.ExportDbMode; import fr.ifremer.echobase.services.exportdb.ExportDbService; import junit.framework.Assert; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.junit.Test; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.csv.in.TopiaCsvImports; +import org.nuiton.topia.persistence.metadata.TableMeta; import org.nuiton.util.FileUtil; import java.io.File; import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; /** * Test {@link ExportDbService}. @@ -46,6 +74,130 @@ fixtures.IMPORT_DATA_ECHOBASE_COMMON_DATA()); } + /** Logger. */ + private static final Log log = LogFactory.getLog(ExportDbServiceTest.class); + + @Override + public void setUp() throws Exception { + super.setUp(); + + TopiaDAO<Voyage> voyageDAO = getDAO(Voyage.class); + TopiaDAO<DataProcessing> dataProcessingDAO = getDAO(DataProcessing.class); + TopiaDAO<DataAcquisition> dataAcquisitionDAO = getDAO(DataAcquisition.class); + TopiaDAO<Cell> cellDAO = getDAO(Cell.class); + TopiaDAO<Category> categoryDAO = getDAO(Category.class); + TopiaDAO<Result> resultDAO = getDAO(Result.class); + TopiaDAO<SpeciesCategory> speciesCategoryDAO = getDAO(SpeciesCategory.class); + TopiaDAO<Data> dataDAO = getDAO(Data.class); + + + Voyage voyage = getEntityById(Voyage.class, getVoyageId()); + Assert.assertNotNull(voyage); + + Transect transect = voyage.getTransit().get(0).getTransect().get(0); + Assert.assertNotNull(transect); + + List<AcousticInstrument> acousticInstruments = getEntities(AcousticInstrument.class); + Assert.assertTrue(CollectionUtils.isNotEmpty(acousticInstruments)); + AcousticInstrument acousticInstrument = acousticInstruments.get(0); + DataAcquisition dataAcquisition = dataAcquisitionDAO.create( + DataAcquisition.PROPERTY_ACOUSTIC_INSTRUMENT, acousticInstrument + ); + transect.addDataAcquisition(dataAcquisition); + DataProcessing dataProcessing = dataProcessingDAO.create( + DataProcessing.PROPERTY_ID, "id", + DataProcessing.PROPERTY_PROCESSING_TEMPLATE, "processingtemplate" + ); + dataAcquisition.addDataProcessing(dataProcessing); + + List<Species> speciesList = getEntities(Species.class); + Assert.assertTrue(CollectionUtils.isNotEmpty(speciesList)); + Species species = speciesList.get(0); + + List<DataMetadata> dataMetadatas = getEntities(DataMetadata.class); + Assert.assertTrue(CollectionUtils.isNotEmpty(dataMetadatas)); + DataMetadata dataMetadata = dataMetadatas.get(0); + + SpeciesCategory speciesCategory = speciesCategoryDAO.create( + SpeciesCategory.PROPERTY_SPECIES, species + ); + + Category category = categoryDAO.create( + Category.PROPERTY_SPECIES_CATEGORY, speciesCategory + ); + + List<CellType> cellTypes = getEntities(CellType.class); + Assert.assertTrue(CollectionUtils.isNotEmpty(cellTypes)); + CellType cellType = cellTypes.get(0); + + Cell cell = cellDAO.create( + Cell.PROPERTY_NAME, "cellName", + Cell.PROPERTY_CELL_TYPE, cellType + ); + if (log.isInfoEnabled()) { + log.info("cell:" + cell.getTopiaId()); + } + dataProcessing.addCell(cell); + + Data cellData = dataDAO.create( + Data.PROPERTY_DATA_METADATA, dataMetadata, + Data.PROPERTY_DATA_VALUE, "cellDataValue" + ); + cell.addData(cellData); + Result cellResult = resultDAO.create( + Result.PROPERTY_CATEGORY, category, + Result.PROPERTY_DATA_METADATA, dataMetadata, + Result.PROPERTY_RESULT_LABEL, "cellResultLabel", + Result.PROPERTY_RESULT_VALUE, "cellResultValue" + ); + cell.addResult(cellResult); + + Cell childCell = cellDAO.create( + Cell.PROPERTY_NAME, "childCell", + Cell.PROPERTY_CELL_TYPE, cellType + ); + cell.addChilds(childCell); + + Data childCellData = dataDAO.create( + Data.PROPERTY_DATA_METADATA, dataMetadata, + Data.PROPERTY_DATA_VALUE, "childCellDataValue" + ); + childCell.addData(childCellData); + + Result childCellResult = resultDAO.create( + Result.PROPERTY_CATEGORY, category, + Result.PROPERTY_DATA_METADATA, dataMetadata, + Result.PROPERTY_RESULT_LABEL, "childCellResultLabel", + Result.PROPERTY_RESULT_VALUE, "childCellResultValue" + ); + childCell.addResult(childCellResult); + + Cell postCell = cellDAO.create( + Cell.PROPERTY_NAME, "postCellcellName", + Cell.PROPERTY_CELL_TYPE, cellType + ); + + postCell.addChilds(cell); + voyage.addPostCell(postCell); + + + Data postCellData = dataDAO.create( + Data.PROPERTY_DATA_METADATA, dataMetadata, + Data.PROPERTY_DATA_VALUE, "postCellDataValue" + ); + postCell.addData(postCellData); + + Result postCellResult = resultDAO.create( + Result.PROPERTY_CATEGORY, category, + Result.PROPERTY_DATA_METADATA, dataMetadata, + Result.PROPERTY_RESULT_LABEL, "postCellResultLabel", + Result.PROPERTY_RESULT_VALUE, "postCellResultValue" + ); + postCell.addResult(postCellResult); + + commitTransaction("Create cells"); + } + @Test public void exportReferential() throws IOException { @@ -60,12 +212,23 @@ conf.setComputeSteps(true); conf.setExportDbMode(ExportDbMode.REFERENTIAL); service.doExport(conf); - Assert.assertNotNull(conf.getExportFile()); - Assert.assertTrue(conf.getExportFile().exists()); + File exportFile = conf.getExportFile(); + Assert.assertNotNull(exportFile); + Assert.assertTrue(exportFile.exists()); + + // check all tables (referential) where exported + ZipFile zipFile = new ZipFile(exportFile); + + Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = + TopiaCsvImports.discoverEntries( + "echobase/", getDbMeta().getReferenceTables(), + zipFile, Lists.<String>newArrayList()); + + checkAllTablesExported(zipFile, tables); } @Test - public void exportData() throws IOException { + public void exportData() throws IOException, TopiaException { ExportDbService service = getService(ExportDbService.class); @@ -80,8 +243,19 @@ conf.setComputeSteps(true); conf.setExportDbMode(ExportDbMode.DATA); service.doExport(conf); - Assert.assertNotNull(conf.getExportFile()); - Assert.assertTrue(conf.getExportFile().exists()); + File exportFile = conf.getExportFile(); + Assert.assertNotNull(exportFile); + Assert.assertTrue(exportFile.exists()); + + // check all tables (referential + data) where exported + ZipFile zipFile = new ZipFile(exportFile); + + Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = + TopiaCsvImports.discoverEntries( + "echobase/", getDbMeta().getAllTables(), + zipFile, Lists.<String>newArrayList()); + + checkAllTablesExported(zipFile, tables); } @Test @@ -100,8 +274,20 @@ conf.setComputeSteps(true); conf.setExportDbMode(ExportDbMode.REFERENTIAL_AND_DATA); service.doExport(conf); - Assert.assertNotNull(conf.getExportFile()); - Assert.assertTrue(conf.getExportFile().exists()); + File exportFile = conf.getExportFile(); + Assert.assertNotNull(exportFile); + Assert.assertTrue(exportFile.exists()); + + + // check all tables (referential + data) where exported + ZipFile zipFile = new ZipFile(exportFile); + + Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = + TopiaCsvImports.discoverEntries( + "echobase/", getDbMeta().getAllTables(), + zipFile, Lists.<String>newArrayList()); + + checkAllTablesExported(zipFile, tables); } @Test @@ -110,6 +296,7 @@ ExportDbService service = getService(ExportDbService.class); ExportDbConfiguration conf = new ExportDbConfiguration(); + conf.setVoyageIds(new String[]{getVoyageId()}); File workingDirectory = new File(getTestDir(), "work-dir"); FileUtil.createDirectoryIfNecessary(workingDirectory); @@ -118,8 +305,34 @@ conf.setComputeSteps(true); conf.setExportDbMode(ExportDbMode.ALL); service.doExport(conf); - Assert.assertNotNull(conf.getExportFile()); - Assert.assertTrue(conf.getExportFile().exists()); + File exportFile = conf.getExportFile(); + Assert.assertNotNull(exportFile); + Assert.assertTrue(exportFile.exists()); + + + // check all tables (referential + data) where exported + ZipFile zipFile = new ZipFile(exportFile); + + Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = + TopiaCsvImports.discoverEntries( + "echobase/", getDbMeta().getAllTables(), + zipFile, Lists.<String>newArrayList()); + + checkAllTablesExported(zipFile, tables); } + private void checkAllTablesExported(ZipFile zipFile, Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables) throws IOException { + for (Map.Entry<TableMeta<EchoBaseEntityEnum>, ZipEntry> entry : tables.entrySet()) { + TableMeta<EchoBaseEntityEnum> type = entry.getKey(); + if (type.getSource() == EchoBaseEntityEnum.Gear) { + // there is some extra lines so can not count from here... + //FIXME should use a csv import to read entries nstead + continue; + } + ZipEntry zipEntry = entry.getValue(); + long nbCells = EchoBaseIOUtil.countLines(zipFile, Sets.newHashSet(zipEntry)); + Assert.assertEquals(1 + getEntities(type.getEntityType()).size(), nbCells); + } + } + } Added: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removeData/AbstractRemoveDataServiceIT.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removeData/AbstractRemoveDataServiceIT.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removeData/AbstractRemoveDataServiceIT.java 2012-09-13 05:40:07 UTC (rev 657) @@ -0,0 +1,54 @@ +package fr.ifremer.echobase.ui.actions.removeData; + +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.services.EchoBaseTestServiceSupport; +import fr.ifremer.echobase.services.FakeEchoBaseServiceContext; +import fr.ifremer.echobase.services.removedata.RemoveDataConfiguration; +import fr.ifremer.echobase.services.removedata.RemoveDataService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Test; +import org.nuiton.util.TimeLog; + +/** + * Abstract it form remove data feature. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public abstract class AbstractRemoveDataServiceIT extends EchoBaseTestServiceSupport { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(AbstractRemoveDataServiceIT.class); + + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext(fixtures.completeDb2011()); + } + + public static final TimeLog TIME_LOG = + new TimeLog(AbstractRemoveDataServiceIT.class); + + + protected abstract String getImportLogId(); + + @Test + public void doExport() { + + RemoveDataConfiguration conf = new RemoveDataConfiguration(); + conf.setImportLogId(getImportLogId()); + + + RemoveDataService service = getService(RemoveDataService.class); + + EchoBaseUser fakeUser = createFakeUser(); + + long s0 = TimeLog.getTime(); + + service.removeImport(conf, fakeUser); + + TIME_LOG.log(s0, "doExport"); + + } + +} Property changes on: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removeData/AbstractRemoveDataServiceIT.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Configure.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Configure.java 2012-09-12 18:50:24 UTC (rev 656) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Configure.java 2012-09-13 05:40:07 UTC (rev 657) @@ -32,10 +32,12 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.FileUtil; +import org.nuiton.util.StringUtil; import java.io.File; import java.io.IOException; import java.util.Map; +import java.util.Set; /** * Configure the complete db export. @@ -97,6 +99,7 @@ ExportDbConfiguration result = new ExportDbConfiguration(); result.setFileName("echobase"); result.setComputeSteps(true); + result.setVoyageIds(StringUtil.EMPTY_STRING_ARRAY); return result; } @@ -125,5 +128,11 @@ if (log.isInfoEnabled()) { log.info("Temporary directory to use : " + dataDirectory); } + + if (model.getExportDbMode() == ExportDbMode.ALL) { + voyages = loadSortAndDecorate(Voyage.class); + Set<String> ids = voyages.keySet(); + model.setVoyageIds(ids.toArray(new String[ids.size()])); + } } } \ No newline at end of file
participants (1)
-
tchemit@users.forge.codelutin.com