r644 - in trunk: echobase-domain/src/main/java/fr/ifremer/echobase/services echobase-domain/src/main/resources/i18n echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy echobase-services/src/main/java/fr/ifremer/echobase/services/importdb echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strateg
Author: tchemit Date: 2012-09-11 14:48:41 +0200 (Tue, 11 Sep 2012) New Revision: 644 Url: http://forge.codelutin.com/repositories/revision/echobase/644 Log: refs #1485: Permettre une import EchoBase plus cibl?\195?\169 refs #1486: Permettre un export EchoBase plus cible am?\195?\169lioration des t?\195?\162ches de fond (meilleur param?\195?\169trage) Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbMode.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/AbstractExportDbStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/AllExportDbStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/DataExportDbStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/ReferentialAndDataExportDbStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/ReferentialExportDbStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/EchoBaseImportModelFactory.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/AbstractImportDbStrategy.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 trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/FreeImportDbStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/ReferentialImportDbStrategy.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureData-validation.xml trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureFree-validation.xml trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureReferential-validation.xml trunk/src/site/en/rst/importDb.rst trunk/src/site/rst/importDb.rst Removed: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/DefaultImportStrategy.java trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-validation.xml trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importHistorical/ Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java trunk/echobase-domain/src/main/resources/i18n/echobase-domain_en_GB.properties trunk/echobase-domain/src/main/resources/i18n/echobase-domain_fr_FR.properties trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbMode.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportService.java trunk/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties trunk/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseTestServiceSupport.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EmbeddedApplicationServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ExportDbServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportDbServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/AbstractImportDataServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/AcousticImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CatchesImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CommonAllImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CommonTransectImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/OperationImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsEsduCellImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsMapCellImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsRegionCellImportServiceIT.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsVoyageImportServiceIT.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/EntityLoader.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java 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/Export.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Configure.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Import.java trunk/echobase-ui/src/main/resources/config/struts-exportDb.xml trunk/echobase-ui/src/main/resources/config/struts-importDb.xml trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties trunk/echobase-ui/src/main/webapp/WEB-INF/includes/footer.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/embeddedApplication/progress.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportDb/configure.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportDb/progress.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/home.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressAcousticImport.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressCatchesImport.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressCommonImport.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressOperationImport.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressResultsImport.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importDb/configure.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importDb/progress.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/removeData/deleteProgress.jsp trunk/echobase-ui/src/main/webapp/css/screen.css trunk/src/site/site_en.xml trunk/src/site/site_fr.xml Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java 2012-09-11 12:48:41 UTC (rev 644) @@ -109,6 +109,10 @@ return serviceContext.getInternalTransaction(); } + public final EchoBaseConfiguration getConfiguration() { + return serviceContext.getConfiguration(); + } + protected final TopiaContext getTransaction() { return serviceContext.getTransaction(); } @@ -121,10 +125,6 @@ return serviceContext.getDbMeta(); } - protected final EchoBaseConfiguration getConfiguration() { - return serviceContext.getConfiguration(); - } - protected final Date newDate() { return serviceContext.newDate(); } Modified: trunk/echobase-domain/src/main/resources/i18n/echobase-domain_en_GB.properties =================================================================== --- trunk/echobase-domain/src/main/resources/i18n/echobase-domain_en_GB.properties 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-domain/src/main/resources/i18n/echobase-domain_en_GB.properties 2012-09-11 12:48:41 UTC (rev 644) @@ -4,12 +4,12 @@ echobase.common.importType.catches=Fishing data import echobase.common.importType.commonDataAll=Voyage / Transit / Transects import echobase.common.importType.commonDataTransect=Transects import -echobase.common.importType.voyage=Voyage import echobase.common.importType.operation=Operations data import echobase.common.importType.resultsEsdu=Import the “ESDU” cells results echobase.common.importType.resultsMap=Import the “map” cells results echobase.common.importType.resultsRegion=Import the “region” cells results echobase.common.importType.resultsVoyage=Import the voyage-related results +echobase.common.importType.voyage=Voyage import echobase.config.csv.separator.description=Csv separator character echobase.config.data.directory.description=Path to application data echobase.config.documentationUrl.description=Where to find EchoBase online documentation Modified: trunk/echobase-domain/src/main/resources/i18n/echobase-domain_fr_FR.properties =================================================================== --- trunk/echobase-domain/src/main/resources/i18n/echobase-domain_fr_FR.properties 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-domain/src/main/resources/i18n/echobase-domain_fr_FR.properties 2012-09-11 12:48:41 UTC (rev 644) @@ -4,12 +4,12 @@ echobase.common.importType.catches=Import des données de pêche echobase.common.importType.commonDataAll=Import Voyage / Transit / Transects echobase.common.importType.commonDataTransect=Import Transects -echobase.common.importType.voyage=Import Campagne echobase.common.importType.operation=Import des opérations echobase.common.importType.resultsEsdu=Import des résultats des cellules de type "ESDU" echobase.common.importType.resultsMap=Import des cellules de type Carte echobase.common.importType.resultsRegion=Import des cellules de type Région echobase.common.importType.resultsVoyage=Import des résultats du voyage +echobase.common.importType.voyage=Import Campagne echobase.config.csv.separator.description=Caractère séparateur pour les fichiers csv echobase.config.data.directory.description=Répertoire des données de l'application echobase.config.documentationUrl.description=Où trouver la documentation en ligne d'EchoBase Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationConfiguration.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationConfiguration.java 2012-09-11 12:48:41 UTC (rev 644) @@ -83,6 +83,7 @@ return voyageIds; } + // Attention on ne peut pas utiliser un ... car sinon ça plante dans l'ui public void setVoyageIds(String[] voyageIds) { this.voyageIds = Arrays.copyOf(voyageIds, voyageIds.length); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationService.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/embeddedapplication/EmbeddedApplicationService.java 2012-09-11 12:48:41 UTC (rev 644) @@ -38,10 +38,13 @@ import fr.ifremer.echobase.services.EchoBaseServiceSupport; import fr.ifremer.echobase.services.UserService; import fr.ifremer.echobase.services.exportdb.ExportDbConfiguration; +import fr.ifremer.echobase.services.exportdb.ExportDbMode; import fr.ifremer.echobase.services.exportdb.ExportDbService; import fr.ifremer.echobase.services.exportquery.ExportQueryNameAlreadyExistException; import fr.ifremer.echobase.services.exportquery.ExportQueryService; +import fr.ifremer.echobase.services.importdata.ImportException; import fr.ifremer.echobase.services.importdb.ImportDbConfiguration; +import fr.ifremer.echobase.services.importdb.ImportDbMode; import fr.ifremer.echobase.services.importdb.ImportDbService; import fr.ifremer.echobase.services.workingDb.WorkingDbConfigurationAlreadyExistException; import org.apache.commons.io.FileUtils; @@ -209,7 +212,7 @@ File dir, File exportZipFile, EchoBaseServiceContext newServiceContext, - EchoBaseUser admin) throws IOException, TopiaException { + EchoBaseUser admin) throws IOException, ImportException, TopiaException { JdbcConfiguration dbConf = JdbcConfiguration.newEmbeddedConfig(dir); TopiaContext rootContext = EchobaseTopiaContexts.newWorkingDb( @@ -227,10 +230,13 @@ importConfiguration.getInput().setFile(exportZipFile); File importTempDir = new File(model.getWorkingDirectory(), "importDb"); importConfiguration.setWorkingDirectory(importTempDir); + importConfiguration.setImportDbMode(ImportDbMode.FREE); + importConfiguration.setComputeSteps(false); + importConfiguration.setCommitAfterEachFile(true); // do import to embedded working db - newServiceContext.getService(ImportDbService.class).importDb( - importConfiguration, admin, false, true); + newServiceContext.getService(ImportDbService.class).doImport( + importConfiguration, admin); } finally { // remove current transaction @@ -317,6 +323,9 @@ File exportTempDir = new File(dir, "exportDb"); exportconfiguration.setWorkingDirectory(exportTempDir); exportconfiguration.setVoyageIds(model.getVoyageIds()); + exportconfiguration.setComputeSteps(false); + exportconfiguration.setExportDbMode(ExportDbMode.REFERENTIAL_AND_DATA); + TopiaContext transaction = serviceContext.getTransaction(); TopiaContext newTx = beginTransaction( @@ -325,7 +334,7 @@ try { serviceContext.setTransaction(newTx); ExportDbService exportDbService = getService(ExportDbService.class); - exportDbService.exportPartialDb(exportconfiguration, false); + exportDbService.doExport(exportconfiguration); } catch (IOException eee) { rollbackTransaction( newTx, Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbConfiguration.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbConfiguration.java 2012-09-11 12:48:41 UTC (rev 644) @@ -46,9 +46,13 @@ private File exportFile; + private ExportDbMode exportDbMode; + /** Ids of voyages to push in embedded application (with all their datas). */ private String[] voyageIds; + private boolean computeSteps; + public ExportDbConfiguration() { } @@ -84,10 +88,27 @@ return voyageIds; } - public void setVoyageIds(String... voyageIds) { + // Attention on ne peut pas utiliser un ... car sinon ça plante dans l'ui + public void setVoyageIds(String[] voyageIds) { this.voyageIds = voyageIds; } + public ExportDbMode getExportDbMode() { + return exportDbMode; + } + + public void setExportDbMode(ExportDbMode exportDbMode) { + this.exportDbMode = exportDbMode; + } + + public boolean isComputeSteps() { + return computeSteps; + } + + public void setComputeSteps(boolean computeSteps) { + this.computeSteps = computeSteps; + } + @Override public void destroy() throws IOException { if (workingDirectory != null) { Added: 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 (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbMode.java 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,60 @@ +package fr.ifremer.echobase.services.exportdb; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import fr.ifremer.echobase.I18nAble; + +import static org.nuiton.i18n.I18n.n_; + +/** + * Db export mode. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public enum ExportDbMode implements I18nAble { + + /** Export only referential. */ + REFERENTIAL(n_("echobase.common.exportDbMode.referential")), + + /** Export only selected data. */ + DATA(n_("echobase.common.exportDbMode.data")), + + /** Export selected data + referential. */ + REFERENTIAL_AND_DATA(n_("echobase.common.exportDbMode.referentialAndData")), + + /** Export all the db. */ + ALL(n_("echobase.common.exportDbMode.all")); + + private final String i18nKey; + + ExportDbMode(String i18nKey) { + this.i18nKey = i18nKey; + } + + @Override + public String getI18nKey() { + return i18nKey; + } +} \ No newline at end of file Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbMode.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native 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-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportDbService.java 2012-09-11 12:48:41 UTC (rev 644) @@ -23,33 +23,21 @@ */ package fr.ifremer.echobase.services.exportdb; -import com.google.common.base.Preconditions; -import com.google.common.collect.Sets; +import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.io.EchoBaseIOUtil; -import fr.ifremer.echobase.persistence.EchoBaseDbMeta; -import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.entities.data.Result; -import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.services.DbEditorService; 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.ExportModelFactory; -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.List; -import java.util.Map; -import java.util.Set; /** * Service to import / export a complete db. @@ -60,208 +48,252 @@ public class ExportDbService extends EchoBaseServiceSupport { /** Logger. */ - private static final Log log = - LogFactory.getLog(ExportDbService.class); + private static final Log log = LogFactory.getLog(ExportDbService.class); - public static final TimeLog timeLog = new TimeLog(DbEditorService.class); + public static final TimeLog timeLog = new TimeLog(ExportDbService.class); - /** - * Export the complete db into csv files stored in a zip archive file. - * - * @param model file name of the zip to create - * @throws IOException if could not create or write files. - */ - public void exportDb(ExportDbConfiguration model) throws IOException { + public void doExport(ExportDbConfiguration model) throws IOException { String fileName = model.getFileName(); File tempDirectory = model.getWorkingDirectory(); - File zipFile = new File(tempDirectory, fileName + ".zip"); + File zipFile = new File(tempDirectory, fileName + ".echobase"); if (log.isInfoEnabled()) { log.info("Will export db to " + zipFile); } model.setExportFile(zipFile); - ExportService exportService = getService(ExportService.class); File dir = new File(tempDirectory, "echobase"); FileUtil.createDirectoryIfNecessary(dir); - EchoBaseDbMeta dbMeta = getDbMeta(); + ExportDbMode exportDbMode = model.getExportDbMode(); - model.setNbSteps(dbMeta.getEntriesSize()); + AbstractExportDbStrategy strategy; - for (TableMeta<EchoBaseEntityEnum> meta : dbMeta.getAllTables()) { - - model.incrementsProgression(); - - exportService.exportData(meta, new File(dir, meta.getFilename())); + 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); } - for (AssociationMeta<EchoBaseEntityEnum> meta : dbMeta.getAllAssociations()) { + strategy.doExport(model, dir); - model.incrementsProgression(); - - exportService.exportData(meta, new File(dir, meta.getFilename())); - } - if (log.isInfoEnabled()) { - log.info("Export zip file = " + zipFile); - } EchoBaseIOUtil.compressZipFile(zipFile, dir); - } - /** - * Export the partial db into csv files at the given location. - * - * @param model file name of the zip to create - * @param computeSteps flag to compute stesp inside this method - * @throws IOException if could not create or write files. - */ - public void exportPartialDb(ExportDbConfiguration model, - boolean computeSteps) throws IOException { - - String fileName = model.getFileName(); - - File tempDirectory = model.getWorkingDirectory(); - File dir = new File(tempDirectory, "echobase"); - FileUtil.createDirectoryIfNecessary(dir); - - if (log.isInfoEnabled()) { - log.info("Will export to " + dir); - } - - File zipFile = new File(tempDirectory, fileName + ".zip"); - model.setExportFile(zipFile); - - ExportService exportService = getService(ExportService.class); - - // export all referentiel - List<TableMeta<EchoBaseEntityEnum>> refEntries = getDbMeta().getReferenceTables(); - List<AssociationMeta<EchoBaseEntityEnum>> refAssocEntries = getDbMeta().getReferenceAssociations(); - - boolean withVoyages = model.getVoyageIds() != null; - - if (computeSteps) { - int nbstesp = refEntries.size(); - - if (withVoyages) { - nbstesp += model.getVoyageIds().length; - } - - model.setNbSteps(nbstesp); - } - - for (TableMeta<EchoBaseEntityEnum> meta : refEntries) { - - model.incrementsProgression(); - - File entryFile = new File(dir, meta.getFilename()); - exportService.exportData(meta, entryFile); - } - - for (AssociationMeta<EchoBaseEntityEnum> associationMeta : refAssocEntries) { - - model.incrementsProgression(); - - File entryFile = new File(dir, associationMeta.getFilename()); - exportService.exportData(associationMeta, entryFile); - } - - if (withVoyages) { - List<TableMeta<EchoBaseEntityEnum>> dataEntries = - getDbMeta().getDataTables(); - List<AssociationMeta<EchoBaseEntityEnum>> dataAssociationEntries = - getDbMeta().getDataAssociations(); - - ReplicateEntityVisitor visitor = createVisitor( - exportService.getModelFactory(false), - dataEntries, - dataAssociationEntries, - dir - ); - - try { - for (String voyageId : model.getVoyageIds()) { - - model.incrementsProgression(); - - Voyage voyage = getEntityById(Voyage.class, voyageId); - visitor.export(voyage); - } - } finally { - // close visitor to close export files - visitor.close(); - } - } - - EchoBaseIOUtil.compressZipFile(zipFile, dir); } - public ReplicateEntityVisitor createVisitor(ExportModelFactory<EchoBaseEntityEnum> modelFactory, - List<TableMeta<EchoBaseEntityEnum>> entityMetas, - List<AssociationMeta<EchoBaseEntityEnum>> associations, - File container) { +// /** +// * Export the complete db into csv files stored in a zip archive file. +// * +// * @param model file name of the zip to create +// * @throws IOException if could not create or write files. +// */ +// public void exportDb(ExportDbConfiguration model) throws IOException { +// +// String fileName = model.getFileName(); +// +// File tempDirectory = model.getWorkingDirectory(); +// +// File zipFile = new File(tempDirectory, fileName + ".zip"); +// +// if (log.isInfoEnabled()) { +// log.info("Will export db to " + zipFile); +// } +// model.setExportFile(zipFile); +// +// ExportService exportService = getService(ExportService.class); +// File dir = new File(tempDirectory, "echobase"); +// +// FileUtil.createDirectoryIfNecessary(dir); +// +// EchoBaseDbMeta dbMeta = getDbMeta(); +// +// model.setNbSteps(dbMeta.getEntriesSize()); +// +// for (TableMeta<EchoBaseEntityEnum> meta : dbMeta.getAllTables()) { +// +// model.incrementsProgression(); +// +// exportService.exportData(meta, new File(dir, meta.getFilename())); +// } +// +// for (AssociationMeta<EchoBaseEntityEnum> meta : dbMeta.getAllAssociations()) { +// +// model.incrementsProgression(); +// +// exportService.exportData(meta, new File(dir, meta.getFilename())); +// } +// if (log.isInfoEnabled()) { +// log.info("Export zip file = " + zipFile); +// } +// EchoBaseIOUtil.compressZipFile(zipFile, dir); +// } - Preconditions.checkNotNull(modelFactory); - - Map<EchoBaseEntityEnum, TopiaCsvExports.EntityExportContext<EchoBaseEntityEnum>> contexts = TopiaCsvExports.createReplicateEntityVisitorContexts( - modelFactory, entityMetas, associations, container); - - ReplicateEntityVisitor result = new ReplicateEntityVisitor( - getDbMeta().getPersistenceHelper(), contexts); - return result; - } - - /** - * entity visitor to export data to csv files. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ - public static class ReplicateEntityVisitor extends ExportEntityVisitor<EchoBaseEntityEnum> { - - protected final Set<String> categoryIds; - - @Override - protected boolean isNoChildVisit(String propertyName, TopiaEntity entity) { - return Result.PROPERTY_CATEGORY.equals(propertyName) && - entity instanceof Result; - } - - 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 - public void close() throws IOException { - categoryIds.clear(); - super.close(); - } - } +// /** +// * Export the partial db into csv files at the given location. +// * +// * @param model file name of the zip to create +// * @param computeSteps flag to compute stesp inside this method +// * @throws IOException if could not create or write files. +// */ +// public void exportPartialDb(ExportDbConfiguration model, +// boolean computeSteps) throws IOException { +// +// String fileName = model.getFileName(); +// +// File tempDirectory = model.getWorkingDirectory(); +// File dir = new File(tempDirectory, "echobase"); +// FileUtil.createDirectoryIfNecessary(dir); +// +// if (log.isInfoEnabled()) { +// log.info("Will export to " + dir); +// } +// +// File zipFile = new File(tempDirectory, fileName + ".zip"); +// model.setExportFile(zipFile); +// +// ExportService exportService = getService(ExportService.class); +// +// // export all referentiel +// List<TableMeta<EchoBaseEntityEnum>> refEntries = getDbMeta().getReferenceTables(); +// List<AssociationMeta<EchoBaseEntityEnum>> refAssocEntries = getDbMeta().getReferenceAssociations(); +// +// boolean withVoyages = model.getVoyageIds() != null; +// +// if (computeSteps) { +// int nbstesp = refEntries.size(); +// +// if (withVoyages) { +// nbstesp += model.getVoyageIds().length; +// } +// +// model.setNbSteps(nbstesp); +// } +// +// for (TableMeta<EchoBaseEntityEnum> meta : refEntries) { +// +// model.incrementsProgression(); +// +// File entryFile = new File(dir, meta.getFilename()); +// exportService.exportData(meta, entryFile); +// } +// +// for (AssociationMeta<EchoBaseEntityEnum> associationMeta : refAssocEntries) { +// +// model.incrementsProgression(); +// +// File entryFile = new File(dir, associationMeta.getFilename()); +// exportService.exportData(associationMeta, entryFile); +// } +// +// if (withVoyages) { +// List<TableMeta<EchoBaseEntityEnum>> dataEntries = +// getDbMeta().getDataTables(); +// List<AssociationMeta<EchoBaseEntityEnum>> dataAssociationEntries = +// getDbMeta().getDataAssociations(); +// +// ReplicateEntityVisitor visitor = createVisitor( +// exportService.getModelFactory(false), +// dataEntries, +// dataAssociationEntries, +// dir +// ); +// +// try { +// for (String voyageId : model.getVoyageIds()) { +// +// model.incrementsProgression(); +// +// Voyage voyage = getEntityById(Voyage.class, voyageId); +// visitor.export(voyage); +// } +// } finally { +// // close visitor to close export files +// visitor.close(); +// } +// } +// +// EchoBaseIOUtil.compressZipFile(zipFile, dir); +// } +// +// public ReplicateEntityVisitor createVisitor(ExportModelFactory<EchoBaseEntityEnum> modelFactory, +// List<TableMeta<EchoBaseEntityEnum>> entityMetas, +// List<AssociationMeta<EchoBaseEntityEnum>> associations, +// File container) { +// +// Preconditions.checkNotNull(modelFactory); +// +// Map<EchoBaseEntityEnum, TopiaCsvExports.EntityExportContext<EchoBaseEntityEnum>> contexts = TopiaCsvExports.createReplicateEntityVisitorContexts( +// modelFactory, entityMetas, associations, container); +// +// ReplicateEntityVisitor result = new ReplicateEntityVisitor( +// getDbMeta().getPersistenceHelper(), contexts); +// return result; +// } +// +// /** +// * entity visitor to export data to csv files. +// * +// * @author tchemit <chemit@codelutin.com> +// * @since 0.3 +// */ +// public static class ReplicateEntityVisitor extends ExportEntityVisitor<EchoBaseEntityEnum> { +// +// protected final Set<String> categoryIds; +// +// @Override +// protected boolean isNoChildVisit(String propertyName, TopiaEntity entity) { +// return Result.PROPERTY_CATEGORY.equals(propertyName) && +// entity instanceof Result; +// } +// +// 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 +// public void close() throws IOException { +// categoryIds.clear(); +// super.close(); +// } +// } } Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/AbstractExportDbStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/AbstractExportDbStrategy.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/AbstractExportDbStrategy.java 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,209 @@ +package fr.ifremer.echobase.services.exportdb.strategy; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import com.google.common.collect.Sets; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import fr.ifremer.echobase.services.exportdb.ExportDbConfiguration; +import fr.ifremer.echobase.services.exportdb.ExportService; +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 java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Abstract export db strategy. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public abstract class AbstractExportDbStrategy extends EchoBaseServiceSupport { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(AbstractExportDbStrategy.class); + + protected abstract boolean canExportVoyage(); + + protected abstract List<TableMeta<EchoBaseEntityEnum>> getTablesToExport(ExportDbConfiguration model); + + protected abstract List<AssociationMeta<EchoBaseEntityEnum>> getAssociationsToExport(ExportDbConfiguration model); + + public final void doExport(ExportDbConfiguration model, + File dir) throws IOException { + + List<TableMeta<EchoBaseEntityEnum>> tablesToExport = + getTablesToExport(model); + List<AssociationMeta<EchoBaseEntityEnum>> associationsToExport = + getAssociationsToExport(model); + + boolean withVoyages = canExportVoyage() && model.getVoyageIds() != null; + + if (model.isComputeSteps()) { + int nbSteps = tablesToExport.size() + associationsToExport.size(); + + if (withVoyages) { + nbSteps += model.getVoyageIds().length; + } + + if (log.isInfoEnabled()) { + log.info("NB steps: " + nbSteps); + } + + model.setNbSteps(nbSteps); + } + + ExportService exportService = getService(ExportService.class); + + exportTables(model, dir, tablesToExport, exportService); + + exportAssociations(model, dir, associationsToExport, exportService); + + if (withVoyages) { + + exportVoyages(model, dir, exportService); + } + } + + private void exportTables(ExportDbConfiguration model, + File dir, + List<TableMeta<EchoBaseEntityEnum>> tablesToExport, + ExportService exportService) { + for (TableMeta<EchoBaseEntityEnum> meta : tablesToExport) { + + model.incrementsProgression(); + + 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.incrementsProgression(); + + 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.incrementsProgression(); + + 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; + + @Override + protected boolean isNoChildVisit(String propertyName, TopiaEntity entity) { + return Result.PROPERTY_CATEGORY.equals(propertyName) && + entity instanceof Result; + } + + 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 + public void close() throws IOException { + categoryIds.clear(); + super.close(); + } + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/AbstractExportDbStrategy.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/AllExportDbStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/AllExportDbStrategy.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/AllExportDbStrategy.java 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,56 @@ +package fr.ifremer.echobase.services.exportdb.strategy; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.services.exportdb.ExportDbConfiguration; +import org.nuiton.topia.persistence.metadata.AssociationMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; + +import java.io.File; +import java.util.List; + +/** + * Export all db (referential + all data). + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public class AllExportDbStrategy extends AbstractExportDbStrategy { + + @Override + protected boolean canExportVoyage() { + return false; + } + + @Override + protected List<TableMeta<EchoBaseEntityEnum>> getTablesToExport(ExportDbConfiguration model) { + return getDbMeta().getAllTables(); + } + + @Override + protected List<AssociationMeta<EchoBaseEntityEnum>> getAssociationsToExport(ExportDbConfiguration model) { + return getDbMeta().getAllAssociations(); + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/AllExportDbStrategy.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/DataExportDbStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/DataExportDbStrategy.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/DataExportDbStrategy.java 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,56 @@ +package fr.ifremer.echobase.services.exportdb.strategy; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.services.exportdb.ExportDbConfiguration; +import org.nuiton.topia.persistence.metadata.AssociationMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; + +import java.util.Collections; +import java.util.List; + +/** + * Export only selected data. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public class DataExportDbStrategy extends AbstractExportDbStrategy { + + @Override + protected boolean canExportVoyage() { + return true; + } + + @Override + protected List<TableMeta<EchoBaseEntityEnum>> getTablesToExport(ExportDbConfiguration model) { + return Collections.emptyList(); + } + + @Override + protected List<AssociationMeta<EchoBaseEntityEnum>> getAssociationsToExport(ExportDbConfiguration model) { + return Collections.emptyList(); + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/DataExportDbStrategy.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/ReferentialAndDataExportDbStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/ReferentialAndDataExportDbStrategy.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/ReferentialAndDataExportDbStrategy.java 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,55 @@ +package fr.ifremer.echobase.services.exportdb.strategy; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.services.exportdb.ExportDbConfiguration; +import org.nuiton.topia.persistence.metadata.AssociationMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; + +import java.util.List; + +/** + * Export referential + selected data. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public class ReferentialAndDataExportDbStrategy extends AbstractExportDbStrategy { + + @Override + protected boolean canExportVoyage() { + return true; + } + + @Override + protected List<TableMeta<EchoBaseEntityEnum>> getTablesToExport(ExportDbConfiguration model) { + return getDbMeta().getReferenceTables(); + } + + @Override + protected List<AssociationMeta<EchoBaseEntityEnum>> getAssociationsToExport(ExportDbConfiguration model) { + return getDbMeta().getReferenceAssociations(); + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/ReferentialAndDataExportDbStrategy.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/ReferentialExportDbStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/ReferentialExportDbStrategy.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/ReferentialExportDbStrategy.java 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,60 @@ +package fr.ifremer.echobase.services.exportdb.strategy; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.services.exportdb.ExportDbConfiguration; +import fr.ifremer.echobase.services.exportdb.ExportDbService; +import fr.ifremer.echobase.services.exportdb.ExportService; +import org.nuiton.topia.persistence.metadata.AssociationMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +/** + * Export only referential. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public class ReferentialExportDbStrategy extends AbstractExportDbStrategy { + + @Override + protected boolean canExportVoyage() { + return false; + } + + @Override + protected List<TableMeta<EchoBaseEntityEnum>> getTablesToExport(ExportDbConfiguration model) { + return getDbMeta().getReferenceTables(); + } + + @Override + protected List<AssociationMeta<EchoBaseEntityEnum>> getAssociationsToExport(ExportDbConfiguration model) { + return getDbMeta().getReferenceAssociations(); + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/strategy/ReferentialExportDbStrategy.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/DefaultImportStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/DefaultImportStrategy.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/DefaultImportStrategy.java 2012-09-11 12:48:41 UTC (rev 644) @@ -1,111 +0,0 @@ -package fr.ifremer.echobase.services.importdb; -/* - * #%L - * EchoBase :: Services - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 - 2012 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ - -import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import fr.ifremer.echobase.persistence.EchoBasePersistenceHelper; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.persistence.TopiaDAO; -import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.csv.in.CsvImportResult; -import org.nuiton.topia.persistence.csv.in.ImportModelFactory; -import org.nuiton.topia.persistence.csv.in.ImportStrategy; -import org.nuiton.topia.persistence.csv.in.TopiaCsvImports; -import org.nuiton.topia.persistence.metadata.AssociationMeta; -import org.nuiton.topia.persistence.metadata.TableMeta; -import org.nuiton.util.csv.Import; -import org.nuiton.util.csv.ImportToMap; - -/** - * TODO - * - * @author tchemit <chemit@codelutin.com> - * @since 1.1 - */ -public class DefaultImportStrategy implements ImportStrategy<EchoBaseEntityEnum> { - - private final TopiaContext tx; - - private final EchoBasePersistenceHelper persistenceHelper; - - private final int nbRowBuffer; - - private final ImportModelFactory<EchoBaseEntityEnum> modelFactory; - - public DefaultImportStrategy(ImportModelFactory<EchoBaseEntityEnum> modelFactory, - TopiaContext tx, - EchoBasePersistenceHelper persistenceHelper, - int nbRowBuffer) { - this.tx = tx; - this.persistenceHelper = persistenceHelper; - this.nbRowBuffer = nbRowBuffer; - this.modelFactory = modelFactory; - } - - public ImportModelFactory<EchoBaseEntityEnum> getModelFactory() { - return modelFactory; - } - - @Override - public <E extends TopiaEntity> void importTable(TableMeta<EchoBaseEntityEnum> meta, - Import<E> importer, - CsvImportResult<EchoBaseEntityEnum> csvResult) throws TopiaException { - TopiaDAO<E> dao = persistenceHelper.getDAO(tx, meta.getSource()); - - TopiaCsvImports.importAllEntities(dao, meta, importer, csvResult); - } - - @Override - public <E extends TopiaEntity> Iterable<E> importTableAndReturnThem(TableMeta<EchoBaseEntityEnum> meta, - Import<E> importer, - CsvImportResult<EchoBaseEntityEnum> csvResult) throws TopiaException { - TopiaDAO<E> dao = persistenceHelper.getDAO(tx, meta.getSource()); - - Iterable<E> result = TopiaCsvImports.importAllEntitiesAndReturnThem( - dao, meta, importer, csvResult); - return result; - - } - - @Override - public void importAssociation(AssociationMeta<EchoBaseEntityEnum> meta, - ImportToMap importer, - CsvImportResult<EchoBaseEntityEnum> csvResult) throws TopiaException { - - if (getModelFactory().isNMAssociationMeta(meta)) { - TopiaCsvImports.importNMAssociation(tx, - meta, - importer, - csvResult, - nbRowBuffer); - } else { - TopiaCsvImports.importAssociation(tx, - meta, - importer, - csvResult, - nbRowBuffer); - } - - } -} Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/EchoBaseImportModelFactory.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/EchoBaseImportModelFactory.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/EchoBaseImportModelFactory.java 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,114 @@ +package fr.ifremer.echobase.services.importdb; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.services.DbEditorService; +import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.csv.EntityCsvModel; +import org.nuiton.topia.persistence.csv.in.EntityAssociationImportModel; +import org.nuiton.topia.persistence.csv.in.ImportModelFactory; +import org.nuiton.topia.persistence.metadata.AssociationMeta; +import org.nuiton.topia.persistence.metadata.ColumnMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; +import org.nuiton.util.csv.ImportModel; + +import java.util.Collection; +import java.util.Map; + +/** + * Import model factory. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public class EchoBaseImportModelFactory implements ImportModelFactory<EchoBaseEntityEnum> { + + public static ImportModelFactory<EchoBaseEntityEnum> newFactory(EchoBaseServiceSupport service) { + return new EchoBaseImportModelFactory( + service.getService(DbEditorService.class), + service.getConfiguration().getCsvSeparator() + ); + } + + protected final DbEditorService service; + + protected final char csvSeparator; + + public EchoBaseImportModelFactory(DbEditorService service, + char csvSeparator) { + this.service = service; + this.csvSeparator = csvSeparator; + } + + + @Override + public <E extends TopiaEntity> ImportModel<E> buildForImport(TableMeta<EchoBaseEntityEnum> meta) { + + EntityCsvModel<EchoBaseEntityEnum, E> model = EntityCsvModel.newModel( + csvSeparator, + meta, + TopiaEntity.TOPIA_ID + ); + + for (ColumnMeta columnMeta : meta) { + String propertyName = columnMeta.getName(); + Class<?> type = columnMeta.getType(); + if (columnMeta.isFK()) { + + Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; + Collection<TopiaEntity> universe = service.getForeignData(entityType); + model.addForeignKeyForImport(propertyName, entityType, universe); + } else { + model.addDefaultColumn(propertyName, type); + } + } + return model; + } + + @Override + public ImportModel<Map<String, Object>> buildForImport(AssociationMeta<EchoBaseEntityEnum> meta) { + + ImportModel<Map<String, Object>> model = + EntityAssociationImportModel.newImportModel( + csvSeparator, + meta + ); + return model; + } + + @Override + public boolean isNMAssociationMeta(AssociationMeta<EchoBaseEntityEnum> meta) { + EchoBaseEntityEnum source = meta.getSource(); + EchoBaseEntityEnum target = meta.getTarget(); + boolean result = false; + if (source == EchoBaseEntityEnum.Voyage && target == EchoBaseEntityEnum.Echotype || + source == EchoBaseEntityEnum.Echotype && target == EchoBaseEntityEnum.Species || + source == EchoBaseEntityEnum.Voyage && target == EchoBaseEntityEnum.Strata) { + result = true; + } + return result; + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/EchoBaseImportModelFactory.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbConfiguration.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbConfiguration.java 2012-09-11 12:48:41 UTC (rev 644) @@ -50,6 +50,10 @@ protected ImportDbMode importDbMode; + protected boolean computeSteps = true; + + protected boolean commitAfterEachFile; + public ImportDbConfiguration(ProgressionModel progressionModel, Locale locale) { super(progressionModel); @@ -80,6 +84,22 @@ this.importDbMode = importDbMode; } + public boolean isComputeSteps() { + return computeSteps; + } + + public void setComputeSteps(boolean computeSteps) { + this.computeSteps = computeSteps; + } + + public boolean isCommitAfterEachFile() { + return commitAfterEachFile; + } + + public void setCommitAfterEachFile(boolean commitAfterEachFile) { + this.commitAfterEachFile = commitAfterEachFile; + } + @Override public void destroy() throws IOException { if (workingDirectory != null) { Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbMode.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbMode.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbMode.java 2012-09-11 12:48:41 UTC (rev 644) @@ -40,7 +40,7 @@ REFERENTIAL(n_("echobase.common.importDbMode.referential")), /** Import only data. */ - VOYAGE(ImportType.VOYAGE.getI18nKey()), + DATA(n_("echobase.common.importDbMode.data")), /** Import what you want. */ FREE(n_("echobase.common.importDbMode.free")); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbService.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbService.java 2012-09-11 12:48:41 UTC (rev 644) @@ -23,37 +23,17 @@ */ package fr.ifremer.echobase.services.importdb; -import com.google.common.collect.Lists; -import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.entities.EntityModificationLog; -import fr.ifremer.echobase.entities.ImportLog; -import fr.ifremer.echobase.entities.ImportType; -import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.persistence.EchoBaseDbMeta; -import fr.ifremer.echobase.services.DecoratorService; import fr.ifremer.echobase.services.EchoBaseServiceSupport; import fr.ifremer.echobase.services.importdata.ImportException; -import org.apache.commons.io.IOUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import fr.ifremer.echobase.services.importdb.strategy.AbstractImportDbStrategy; +import fr.ifremer.echobase.services.importdb.strategy.DataImportDbStrategy; +import fr.ifremer.echobase.services.importdb.strategy.FreeImportDbStrategy; +import fr.ifremer.echobase.services.importdb.strategy.ReferentialImportDbStrategy; import org.nuiton.topia.TopiaException; -import org.nuiton.topia.persistence.TopiaDAO; -import org.nuiton.topia.persistence.csv.in.CsvImportResult; -import org.nuiton.topia.persistence.csv.in.TopiaCsvImports; -import org.nuiton.topia.persistence.metadata.AssociationMeta; -import org.nuiton.topia.persistence.metadata.TableMeta; -import org.nuiton.util.TimeLog; -import org.nuiton.util.decorator.Decorator; -import java.io.File; import java.io.IOException; -import java.io.InputStreamReader; -import java.io.Reader; -import java.util.List; -import java.util.Map; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; /** * Service to import a complete db. @@ -63,434 +43,35 @@ */ public class ImportDbService extends EchoBaseServiceSupport { - /** Logger. */ - private static final Log log = - LogFactory.getLog(ImportDbService.class); + public void doImport(ImportDbConfiguration model, + EchoBaseUser user) throws ImportException { - public static final TimeLog TIME_LOG = new TimeLog(ImportDbService.class); + ImportDbMode importDbMode = model.getImportDbMode(); - /** - * Import a referential db from the given echobase file. - * - * @param model model of the db import operation - * @param user user which perform the import - * @throws IOException if any io exception while import - * @throws TopiaException if any pb while topia treatment - * @since 1.2 - */ - public void importReferential(ImportDbConfiguration model, - EchoBaseUser user) throws IOException, TopiaException, ImportException { + AbstractImportDbStrategy strategy; + switch (importDbMode) { - File file = model.getInput().getFile(); - - ZipFile zipFile = new ZipFile(file); - try { - - List<String> missingEntries = Lists.newArrayList(); - - EchoBaseDbMeta dbMeta = getDbMeta(); - - Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = - getTables(zipFile, missingEntries, dbMeta); - - Map<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> associations = - getAssociations(zipFile, missingEntries, dbMeta); - - int size = tables.size() + associations.size(); - model.setNbSteps(size + missingEntries.size()); - - // check that contains only referential entries - List<EchoBaseEntityEnum> badTableTypes = Lists.newArrayList(); - List<TableMeta<EchoBaseEntityEnum>> dataTables = dbMeta.getDataTables(); - for (TableMeta<EchoBaseEntityEnum> tableMetas : tables.keySet()) { - if (dataTables.contains(tableMetas)) { - badTableTypes.add(tableMetas.getSource()); - } - } - - if (!badTableTypes.isEmpty()) { - throw new ImportException( - "In referential import, can not accept " + - "data type, but found some data types: " + badTableTypes); - } - - List<EchoBaseEntityEnum> badAssociationTypes = Lists.newArrayList(); - List<AssociationMeta<EchoBaseEntityEnum>> associationTables = dbMeta.getDataAssociations(); - for (AssociationMeta<EchoBaseEntityEnum> tableMetas : associations.keySet()) { - if (associationTables.contains(tableMetas)) { - badAssociationTypes.add(tableMetas.getSource()); - } - } - if (!badAssociationTypes.isEmpty()) { - throw new ImportException( - "In referential import, can not accept " + - "data type, but found some data associations files: " + - badAssociationTypes); - } - - for (String missingEntry : missingEntries) { - - // skip thoses not found entries - model.incrementsProgression(); - - if (log.isInfoEnabled()) { - log.info("Skip not found entry " + missingEntry); - } - } - - DefaultImportStrategy strategy = new DefaultImportStrategy( - getService(ImportService.class), - getTransaction(), - dbMeta.getPersistenceHelper(), - 1000 - ); - - importTables(strategy, model, zipFile, tables, false, false); - - importAssociations(strategy, model, zipFile, associations); - - // add a log entry of import db - if (log.isInfoEnabled()) { - log.info("Import done with user " + user.getEmail()); - } - TopiaDAO<EntityModificationLog> dao = - getDAO(EntityModificationLog.class); - - dao.create( - EntityModificationLog.PROPERTY_ENTITY_TYPE, "Import db", - EntityModificationLog.PROPERTY_ENTITY_ID, "Complete db", - EntityModificationLog.PROPERTY_MODIFICATION_USER, user.getEmail(), - EntityModificationLog.PROPERTY_MODIFICATION_DATE, newDate(), - EntityModificationLog.PROPERTY_MODIFICATION_TEXT, "import db from file " + file.getName() - ); - commitTransaction("Could not commit db import from file " + file); - - } finally { - zipFile.close(); + case REFERENTIAL: + strategy = getService(ReferentialImportDbStrategy.class); + break; + case DATA: + strategy = getService(DataImportDbStrategy.class); + break; + case FREE: + strategy = getService(FreeImportDbStrategy.class); + break; + default: + throw new EchoBaseTechnicalException( + "Can not deal with this importDbMode: " + importDbMode); } - } - /** - * Import a legacy data db from the given echobase file. - * - * @param model model of the db import operation - * @param user user which perform the import - * @throws IOException if any io exception while import - * @throws TopiaException if any pb while topia treatment - * @since 1.2 - */ - public void importLegacyData(ImportDbConfiguration model, - EchoBaseUser user) throws IOException, TopiaException, ImportException { - - File file = model.getInput().getFile(); - - ZipFile zipFile = new ZipFile(file); try { - - List<String> missingEntries = Lists.newArrayList(); - - EchoBaseDbMeta dbMeta = getDbMeta(); - - Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = getTables(zipFile, missingEntries, dbMeta); - - Map<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> associations = getAssociations(zipFile, missingEntries, dbMeta); - - int size = tables.size() + associations.size(); - model.setNbSteps(size + missingEntries.size()); - - // check that contains only referential entries - List<EchoBaseEntityEnum> badTableTypes = Lists.newArrayList(); - List<TableMeta<EchoBaseEntityEnum>> dataTables = dbMeta.getReferenceTables(); - for (TableMeta<EchoBaseEntityEnum> tableMetas : tables.keySet()) { - if (dataTables.contains(tableMetas)) { - badTableTypes.add(tableMetas.getSource()); - } - } - - if (!badTableTypes.isEmpty()) { - throw new ImportException( - "In data import, can not accept " + - "referential type, but found some referential files: " + badTableTypes); - } - - List<EchoBaseEntityEnum> badAssociationTypes = Lists.newArrayList(); - List<AssociationMeta<EchoBaseEntityEnum>> associationTables = dbMeta.getReferenceAssociations(); - for (AssociationMeta<EchoBaseEntityEnum> tableMetas : associations.keySet()) { - if (associationTables.contains(tableMetas)) { - badAssociationTypes.add(tableMetas.getSource()); - } - } - if (!badAssociationTypes.isEmpty()) { - throw new ImportException( - "In data import, can not accept " + - "referential type, but found some referential associations files: " + - badAssociationTypes); - } - - for (String missingEntry : missingEntries) { - - // skip thoses not found entries - model.incrementsProgression(); - - if (log.isInfoEnabled()) { - log.info("Skip not found entry " + missingEntry); - } - } - - DefaultImportStrategy strategy = new DefaultImportStrategy( - getService(ImportService.class), - getTransaction(), - dbMeta.getPersistenceHelper(), - 1000 - ); - - Iterable<Voyage> importedVoyages = - importTables(strategy, - model, - zipFile, - tables, - false, - true); - - importAssociations(strategy, model, zipFile, associations); - - // add a log entry of import db - if (log.isInfoEnabled()) { - log.info("Import done with user " + user.getEmail()); - } - - TopiaDAO<ImportLog> importLogDAO = getDAO(ImportLog.class); - - Decorator<Voyage> decorator = getService(DecoratorService.class).getDecorator(getLocale(), Voyage.class, null); - for (Voyage importedVoyage : importedVoyages) { - - // create a importLog entry - ImportLog importLog = importLogDAO.create( - ImportLog.PROPERTY_IMPORT_TYPE, ImportType.VOYAGE, - ImportLog.PROPERTY_IMPORT_USER, user.getEmail(), - ImportLog.PROPERTY_IMPORT_DATE, newDate(), - ImportLog.PROPERTY_IMPORT_TEXT, "import legacy voyage " + decorator.toString(importedVoyage) + " from file " + file.getName() - ); - importLog.addImportId(importedVoyage.getTopiaId()); - } - - TopiaDAO<EntityModificationLog> dao = - getDAO(EntityModificationLog.class); - - dao.create( - EntityModificationLog.PROPERTY_ENTITY_TYPE, "Import db", - EntityModificationLog.PROPERTY_ENTITY_ID, "Complete db", - EntityModificationLog.PROPERTY_MODIFICATION_USER, user.getEmail(), - EntityModificationLog.PROPERTY_MODIFICATION_DATE, newDate(), - EntityModificationLog.PROPERTY_MODIFICATION_TEXT, "import db from file " + file.getName() - ); - commitTransaction("Could not commit db import from file " + file); - - } finally { - zipFile.close(); + strategy.doImport(model, user); + } catch (IOException e) { + throw new ImportException("Could not import db", e); + } catch (TopiaException e) { + throw new ImportException("Could not import db", e); } } - /** - * Import a complete db from the given echobase file. - * - * @param model model of the db import operation - * @param user user which perform the import - * @param computeSteps flag to compute stesp inside this method - * @param commitAfterEachFile flag to commit after each imported file - * @throws IOException if any io exception while import - * @throws TopiaException if any pb while topia treatment - */ - public void importDb(ImportDbConfiguration model, - EchoBaseUser user, - boolean computeSteps, - boolean commitAfterEachFile) throws IOException, TopiaException { - - File file = model.getInput().getFile(); - - ZipFile zipFile = new ZipFile(file); - try { - - List<String> missingEntries = Lists.newArrayList(); - - EchoBaseDbMeta dbMeta = getDbMeta(); - - Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = getTables(zipFile, missingEntries, dbMeta); - - Map<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> associations = getAssociations(zipFile, missingEntries, dbMeta); - - if (computeSteps) { - int size = tables.size() + associations.size(); - model.setNbSteps(size + missingEntries.size()); - } - - for (String missingEntry : missingEntries) { - - // skip thoses not found entries - model.incrementsProgression(); - - if (log.isInfoEnabled()) { - log.info("Skip not found entry " + missingEntry); - } - } - - DefaultImportStrategy strategy = new DefaultImportStrategy( - getService(ImportService.class), - getTransaction(), - dbMeta.getPersistenceHelper(), - 1000 - ); - - importTables(strategy, model, zipFile, tables, commitAfterEachFile, false); - - importAssociations(strategy, model, zipFile, associations); - - // add a log entry of import db - if (log.isInfoEnabled()) { - log.info("Import done with user " + user.getEmail()); - } - TopiaDAO<EntityModificationLog> dao = - getDAO(EntityModificationLog.class); - - dao.create( - EntityModificationLog.PROPERTY_ENTITY_TYPE, "Import db", - EntityModificationLog.PROPERTY_ENTITY_ID, "Complete db", - EntityModificationLog.PROPERTY_MODIFICATION_USER, user.getEmail(), - EntityModificationLog.PROPERTY_MODIFICATION_DATE, newDate(), - EntityModificationLog.PROPERTY_MODIFICATION_TEXT, "import db from file " + file.getName() - ); - commitTransaction("Could not commit db import from file " + file); - - } finally { - zipFile.close(); - } - } - - private Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> getTables(ZipFile zipFile, - List<String> missingEntries, - EchoBaseDbMeta dbMeta) { - return TopiaCsvImports.discoverEntries( - "echobase/", dbMeta.getAllTables(), - zipFile, missingEntries); - } - - private Map<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> getAssociations(ZipFile zipFile, - List<String> missingEntries, - EchoBaseDbMeta dbMeta) { - return TopiaCsvImports.discoverEntries( - "echobase/", dbMeta.getAllAssociations(), - zipFile, missingEntries); - } - - private Iterable<Voyage> importTables(DefaultImportStrategy strategy, - ImportDbConfiguration model, - ZipFile zipFile, - Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> entriestoConsume, - boolean commitAfterEachFile, - boolean keepVoyages) throws IOException, TopiaException { - - Iterable<Voyage> result = null; - - for (Map.Entry<TableMeta<EchoBaseEntityEnum>, ZipEntry> entry : - entriestoConsume.entrySet()) { - - model.incrementsProgression(); - - TableMeta<EchoBaseEntityEnum> entryDef = entry.getKey(); - ZipEntry value = entry.getValue(); - CsvImportResult<EchoBaseEntityEnum> csvResult = CsvImportResult.newResult( - entryDef.getSource(), - value.getName(), - false - ); - - Reader reader = IOUtils.toBufferedReader( - new InputStreamReader(zipFile.getInputStream(value))); - try { - - long s0 = TimeLog.getTime(); - - if (log.isInfoEnabled()) { - log.info("Will import " + entryDef); - } - - if (EchoBaseEntityEnum.Voyage == entryDef.getSource() && - keepVoyages) { - result = TopiaCsvImports.importTableAndReturn(reader, - strategy, - entryDef, - csvResult - ); - } else { - TopiaCsvImports.importTable(reader, - strategy, - entryDef, - csvResult - ); - } - - s0 = TIME_LOG.log(s0, "importFile::done"); - - flushTransaction("Could not flush " + entryDef + " to db."); - - TIME_LOG.log(s0, "importFile::flushTransaction"); - } finally { - reader.close(); - - if (commitAfterEachFile) { - commitTransaction( - "Could not commit db import from file " + - zipFile.getName() + "#" + entryDef.getFilename()); - } - - clearCache(); - } - } - - return result; - } - - private void importAssociations(DefaultImportStrategy strategy, - ImportDbConfiguration model, - ZipFile zipFile, - Map<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> associations) throws IOException, TopiaException { - - for (Map.Entry<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> entry : - associations.entrySet()) { - - model.incrementsProgression(); - - AssociationMeta<EchoBaseEntityEnum> entryDef = entry.getKey(); - ZipEntry value = entry.getValue(); - - CsvImportResult<EchoBaseEntityEnum> csvResult = CsvImportResult.newResult( - entryDef.getSource(), - value.getName(), - false - ); - - Reader reader = IOUtils.toBufferedReader(new InputStreamReader(zipFile.getInputStream(value))); - try { - long s0 = TimeLog.getTime(); - - if (log.isInfoEnabled()) { - log.info("Will import " + entryDef); - } - - TopiaCsvImports.importAssociation(reader, - strategy, - entryDef, - csvResult); - - s0 = TIME_LOG.log(s0, "importFile::done"); - - flushTransaction("Could not flush associations to db."); - - TIME_LOG.log(s0, "importFile::flushTransaction"); - } finally { - reader.close(); - } - } - } - } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportService.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportService.java 2012-09-11 12:48:41 UTC (rev 644) @@ -33,12 +33,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.csv.EntityCsvModel; import org.nuiton.topia.persistence.csv.in.CsvImportResult; -import org.nuiton.topia.persistence.csv.in.EntityAssociationImportModel; import org.nuiton.topia.persistence.csv.in.ImportModelFactory; -import org.nuiton.topia.persistence.metadata.AssociationMeta; -import org.nuiton.topia.persistence.metadata.ColumnMeta; import org.nuiton.topia.persistence.metadata.TableMeta; import org.nuiton.util.csv.Import; import org.nuiton.util.csv.ImportModel; @@ -46,8 +42,6 @@ import java.io.BufferedReader; import java.io.File; import java.io.IOException; -import java.util.Collection; -import java.util.Map; /** * To import datas from csv files into the db. @@ -55,71 +49,24 @@ * @author tchemit <chemit@codelutin.com> * @since 0.2 */ -public class ImportService extends EchoBaseServiceSupport implements ImportModelFactory<EchoBaseEntityEnum> { +public class ImportService extends EchoBaseServiceSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ImportService.class); - @Override - public <E extends TopiaEntity> ImportModel<E> buildForImport(TableMeta<EchoBaseEntityEnum> meta) { - - DbEditorService service = getService(DbEditorService.class); - - EntityCsvModel<EchoBaseEntityEnum, E> model = EntityCsvModel.newModel( - getConfiguration().getCsvSeparator(), - meta, - TopiaEntity.TOPIA_ID - ); - - for (ColumnMeta columnMeta : meta) { - String propertyName = columnMeta.getName(); - Class<?> type = columnMeta.getType(); - if (columnMeta.isFK()) { - - Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; - Collection<TopiaEntity> universe = service.getForeignData(entityType); - model.addForeignKeyForImport(propertyName, entityType, universe); - } else { - model.addDefaultColumn(propertyName, type); - } - } - return model; - } - - @Override - public ImportModel<Map<String, Object>> buildForImport(AssociationMeta<EchoBaseEntityEnum> meta) { - - ImportModel<Map<String, Object>> model = - EntityAssociationImportModel.newImportModel( - getConfiguration().getCsvSeparator(), - meta - ); - return model; - } - - @Override - public boolean isNMAssociationMeta(AssociationMeta<EchoBaseEntityEnum> meta) { - EchoBaseEntityEnum source = meta.getSource(); - EchoBaseEntityEnum target = meta.getTarget(); - boolean result = false; - if (source == EchoBaseEntityEnum.Voyage && target == EchoBaseEntityEnum.Echotype || - source == EchoBaseEntityEnum.Echotype && target == EchoBaseEntityEnum.Species || - source == EchoBaseEntityEnum.Voyage && target == EchoBaseEntityEnum.Strata) { - result = true; - } - return result; - } - public CsvImportResult<EchoBaseEntityEnum> importDatas(EchoBaseEntityEnum entityType, String importFileName, File importFile, boolean createIfNotFound, EchoBaseUser user) throws IOException { + ImportModelFactory<EchoBaseEntityEnum> importModelFactory = + EchoBaseImportModelFactory.newFactory(this); + DbEditorService service = getService(DbEditorService.class); TableMeta<EchoBaseEntityEnum> meta = service.getTableMeta(entityType); - ImportModel<TopiaEntity> csvModel = buildForImport(meta); + ImportModel<TopiaEntity> csvModel = importModelFactory.buildForImport(meta); String messagePrefix = "Import du fichier " + importFileName + " le " + newDate(); CsvImportResult<EchoBaseEntityEnum> result = CsvImportResult.newResult( Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/AbstractImportDbStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/AbstractImportDbStrategy.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/AbstractImportDbStrategy.java 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,277 @@ +package fr.ifremer.echobase.services.importdb.strategy; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import com.google.common.collect.Lists; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.EntityModificationLog; +import fr.ifremer.echobase.entities.ImportLog; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.persistence.EchoBaseDbMeta; +import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import fr.ifremer.echobase.services.importdata.ImportException; +import fr.ifremer.echobase.services.importdb.EchoBaseImportModelFactory; +import fr.ifremer.echobase.services.importdb.ImportDbConfiguration; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.csv.in.CsvImportResult; +import org.nuiton.topia.persistence.csv.in.ImportStrategy; +import org.nuiton.topia.persistence.csv.in.TopiaCsvImports; +import org.nuiton.topia.persistence.metadata.AssociationMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; +import org.nuiton.util.TimeLog; + +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +/** + * Abstract import db strategy. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public abstract class AbstractImportDbStrategy extends EchoBaseServiceSupport { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(AbstractImportDbStrategy.class); + + public static final TimeLog TIME_LOG = + new TimeLog(AbstractImportDbStrategy.class); + + public final void doImport(ImportDbConfiguration model, + EchoBaseUser user) throws IOException, ImportException, TopiaException { + File file = model.getInput().getFile(); + + ZipFile zipFile = new ZipFile(file); + try { + + List<String> missingEntries = Lists.newArrayList(); + + EchoBaseDbMeta dbMeta = getDbMeta(); + + Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = + TopiaCsvImports.discoverEntries( + "echobase/", dbMeta.getAllTables(), + zipFile, missingEntries); + + validateTableEntries(dbMeta, tables); + + Map<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> associations = + TopiaCsvImports.discoverEntries( + "echobase/", dbMeta.getAllAssociations(), + zipFile, missingEntries); + + validateAssociationEntries(dbMeta, associations); + + if (model.isComputeSteps()) { + int size = tables.size() + associations.size(); + model.setNbSteps(size + missingEntries.size()); + } + + for (String missingEntry : missingEntries) { + + // skip thoses not found entries + model.incrementsProgression(); + + if (log.isInfoEnabled()) { + log.info("Skip not found entry " + missingEntry); + } + } + + ImportStrategy<EchoBaseEntityEnum> strategy = new EchoBaseImportStrategy( + EchoBaseImportModelFactory.newFactory(this), + getTransaction(), + dbMeta.getPersistenceHelper(), + 1000 + ); + + Iterable<Voyage> importedVoyages = importTables(strategy, + model, + zipFile, + tables + ); + + importAssociations(strategy, model, zipFile, associations); + + // add a log entry of import db + if (log.isInfoEnabled()) { + log.info("Import done with user " + user.getEmail()); + } + + createImportLogEntry(getDAO(ImportLog.class), + user, + file, + importedVoyages); + + createLogBookEntry(getDAO(EntityModificationLog.class), + user, + file, + importedVoyages); + + commitTransaction("Could not commit db import from file " + file); + + } finally { + zipFile.close(); + } + } + + + protected abstract void validateTableEntries(EchoBaseDbMeta dbMeta, + Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables) throws ImportException; + + protected abstract void validateAssociationEntries(EchoBaseDbMeta dbMeta, + Map<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> associations) throws ImportException; + + protected abstract void createImportLogEntry(TopiaDAO<ImportLog> dao, + EchoBaseUser user, + File file, + Iterable<Voyage> importedVoyages) throws TopiaException; + + protected abstract void createLogBookEntry(TopiaDAO<EntityModificationLog> dao, + EchoBaseUser user, + File file, + Iterable<Voyage> importedVoyages) throws TopiaException; + + protected Iterable<Voyage> importTables(ImportStrategy<EchoBaseEntityEnum> strategy, + ImportDbConfiguration model, + ZipFile zipFile, + Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> entriestoConsume) throws IOException, TopiaException { + + boolean commitAfterEachFile = model.isCommitAfterEachFile(); + + Iterable<Voyage> result = null; + + for (Map.Entry<TableMeta<EchoBaseEntityEnum>, ZipEntry> entry : + entriestoConsume.entrySet()) { + + model.incrementsProgression(); + + TableMeta<EchoBaseEntityEnum> entryDef = entry.getKey(); + ZipEntry value = entry.getValue(); + CsvImportResult<EchoBaseEntityEnum> csvResult = CsvImportResult.newResult( + entryDef.getSource(), + value.getName(), + false + ); + + Reader reader = IOUtils.toBufferedReader( + new InputStreamReader(zipFile.getInputStream(value))); + try { + + long s0 = TimeLog.getTime(); + + if (log.isInfoEnabled()) { + log.info("Will import " + entryDef); + } + + if (EchoBaseEntityEnum.Voyage == entryDef.getSource()) { + result = TopiaCsvImports.importTableAndReturn(reader, + strategy, + entryDef, + csvResult + ); + } else { + TopiaCsvImports.importTable(reader, + strategy, + entryDef, + csvResult + ); + } + + s0 = TIME_LOG.log(s0, "importFile::done"); + + flushTransaction("Could not flush " + entryDef + " to db."); + + TIME_LOG.log(s0, "importFile::flushTransaction"); + } finally { + reader.close(); + + if (commitAfterEachFile) { + commitTransaction( + "Could not commit db import from file " + + zipFile.getName() + "#" + entryDef.getFilename()); + } + + clearCache(); + } + } + + return result; + } + + protected void importAssociations(ImportStrategy<EchoBaseEntityEnum> strategy, + ImportDbConfiguration model, + ZipFile zipFile, + Map<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> associations) throws IOException, TopiaException { + + for (Map.Entry<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> entry : + associations.entrySet()) { + + model.incrementsProgression(); + + AssociationMeta<EchoBaseEntityEnum> entryDef = entry.getKey(); + ZipEntry value = entry.getValue(); + + CsvImportResult<EchoBaseEntityEnum> csvResult = CsvImportResult.newResult( + entryDef.getSource(), + value.getName(), + false + ); + + Reader reader = IOUtils.toBufferedReader(new InputStreamReader(zipFile.getInputStream(value))); + try { + long s0 = TimeLog.getTime(); + + if (log.isInfoEnabled()) { + log.info("Will import " + entryDef); + } + + TopiaCsvImports.importAssociation(reader, + strategy, + entryDef, + csvResult); + + s0 = TIME_LOG.log(s0, "importFile::done"); + + flushTransaction("Could not flush associations to db."); + + TIME_LOG.log(s0, "importFile::flushTransaction"); + } finally { + reader.close(); + } + } + } + +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/AbstractImportDbStrategy.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: 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 (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/DataImportDbStrategy.java 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,127 @@ +package fr.ifremer.echobase.services.importdb.strategy; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import com.google.common.collect.Lists; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.EntityModificationLog; +import fr.ifremer.echobase.entities.ImportLog; +import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.persistence.EchoBaseDbMeta; +import fr.ifremer.echobase.services.DecoratorService; +import fr.ifremer.echobase.services.importdata.ImportException; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.metadata.AssociationMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; +import org.nuiton.util.decorator.Decorator; + +import java.io.File; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipEntry; + +/** + * Data only import db strategy. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public class DataImportDbStrategy extends AbstractImportDbStrategy { + + @Override + protected void validateTableEntries(EchoBaseDbMeta dbMeta, + Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables) throws ImportException { + + // check that contains only referential entries + List<EchoBaseEntityEnum> badTableTypes = Lists.newArrayList(); + List<TableMeta<EchoBaseEntityEnum>> dataTables = dbMeta.getReferenceTables(); + for (TableMeta<EchoBaseEntityEnum> tableMetas : tables.keySet()) { + if (dataTables.contains(tableMetas)) { + badTableTypes.add(tableMetas.getSource()); + } + } + + if (!badTableTypes.isEmpty()) { + throw new ImportException( + "In data import, can not accept " + + "referential type, but found some referential files: " + badTableTypes); + } + + } + + @Override + protected void validateAssociationEntries(EchoBaseDbMeta dbMeta, + Map<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> associations) throws ImportException { + List<EchoBaseEntityEnum> badAssociationTypes = Lists.newArrayList(); + List<AssociationMeta<EchoBaseEntityEnum>> associationTables = dbMeta.getReferenceAssociations(); + for (AssociationMeta<EchoBaseEntityEnum> tableMetas : associations.keySet()) { + if (associationTables.contains(tableMetas)) { + badAssociationTypes.add(tableMetas.getSource()); + } + } + if (!badAssociationTypes.isEmpty()) { + throw new ImportException( + "In data import, can not accept " + + "referential type, but found some referential associations files: " + + badAssociationTypes); + } + } + + @Override + protected void createImportLogEntry(TopiaDAO<ImportLog> dao, + EchoBaseUser user, + File file, + Iterable<Voyage> importedVoyages) throws TopiaException { + + Decorator<Voyage> decorator = getService(DecoratorService.class).getDecorator(getLocale(), Voyage.class, null); + for (Voyage importedVoyage : importedVoyages) { + + // create a importLog entry + ImportLog importLog = dao.create( + ImportLog.PROPERTY_IMPORT_TYPE, ImportType.VOYAGE, + ImportLog.PROPERTY_IMPORT_USER, user.getEmail(), + ImportLog.PROPERTY_IMPORT_DATE, newDate(), + ImportLog.PROPERTY_IMPORT_TEXT, "import voyage " + decorator.toString(importedVoyage) + " from file " + file.getName() + ); + importLog.addImportId(importedVoyage.getTopiaId()); + } + } + + @Override + protected void createLogBookEntry(TopiaDAO<EntityModificationLog> dao, + EchoBaseUser user, + File file, + Iterable<Voyage> importedVoyages) throws TopiaException { + dao.create( + EntityModificationLog.PROPERTY_ENTITY_TYPE, "Import data only db", + EntityModificationLog.PROPERTY_ENTITY_ID, "Data only EchoBase db", + EntityModificationLog.PROPERTY_MODIFICATION_USER, user.getEmail(), + EntityModificationLog.PROPERTY_MODIFICATION_DATE, newDate(), + EntityModificationLog.PROPERTY_MODIFICATION_TEXT, "import db from file " + file.getName() + ); + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/DataImportDbStrategy.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: 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 (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/EchoBaseImportStrategy.java 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,112 @@ +package fr.ifremer.echobase.services.importdb.strategy; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.persistence.EchoBasePersistenceHelper; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.csv.in.CsvImportResult; +import org.nuiton.topia.persistence.csv.in.ImportModelFactory; +import org.nuiton.topia.persistence.csv.in.ImportStrategy; +import org.nuiton.topia.persistence.csv.in.TopiaCsvImports; +import org.nuiton.topia.persistence.metadata.AssociationMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; +import org.nuiton.util.csv.Import; +import org.nuiton.util.csv.ImportToMap; + +/** + * How to import csv files. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.1 + */ +public class EchoBaseImportStrategy implements ImportStrategy<EchoBaseEntityEnum> { + + private final TopiaContext tx; + + private final EchoBasePersistenceHelper persistenceHelper; + + private final int nbRowBuffer; + + private final ImportModelFactory<EchoBaseEntityEnum> modelFactory; + + public EchoBaseImportStrategy(ImportModelFactory<EchoBaseEntityEnum> modelFactory, + TopiaContext tx, + EchoBasePersistenceHelper persistenceHelper, + int nbRowBuffer) { + this.tx = tx; + this.persistenceHelper = persistenceHelper; + this.nbRowBuffer = nbRowBuffer; + this.modelFactory = modelFactory; + } + + public ImportModelFactory<EchoBaseEntityEnum> getModelFactory() { + return modelFactory; + } + + @Override + public <E extends TopiaEntity> void importTable(TableMeta<EchoBaseEntityEnum> meta, + Import<E> importer, + CsvImportResult<EchoBaseEntityEnum> csvResult) throws TopiaException { + TopiaDAO<E> dao = persistenceHelper.getDAO(tx, meta.getSource()); + + TopiaCsvImports.importAllEntities(dao, meta, importer, csvResult); + } + + @Override + public <E extends TopiaEntity> Iterable<E> importTableAndReturnThem(TableMeta<EchoBaseEntityEnum> meta, + Import<E> importer, + CsvImportResult<EchoBaseEntityEnum> csvResult) throws TopiaException { + TopiaDAO<E> dao = persistenceHelper.getDAO(tx, meta.getSource()); + + Iterable<E> result = TopiaCsvImports.importAllEntitiesAndReturnThem( + dao, meta, importer, csvResult); + return result; + + } + + @Override + public void importAssociation(AssociationMeta<EchoBaseEntityEnum> meta, + ImportToMap importer, + CsvImportResult<EchoBaseEntityEnum> csvResult) throws TopiaException { + + if (getModelFactory().isNMAssociationMeta(meta)) { + TopiaCsvImports.importNMAssociation(tx, + meta, + importer, + csvResult, + nbRowBuffer); + } else { + TopiaCsvImports.importAssociation(tx, + meta, + importer, + csvResult, + nbRowBuffer); + } + + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/EchoBaseImportStrategy.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/FreeImportDbStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/FreeImportDbStrategy.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/FreeImportDbStrategy.java 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,102 @@ +package fr.ifremer.echobase.services.importdb.strategy; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.EntityModificationLog; +import fr.ifremer.echobase.entities.ImportLog; +import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.persistence.EchoBaseDbMeta; +import fr.ifremer.echobase.services.DecoratorService; +import fr.ifremer.echobase.services.importdata.ImportException; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.metadata.AssociationMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; +import org.nuiton.util.decorator.Decorator; + +import java.io.File; +import java.util.Date; +import java.util.Map; +import java.util.zip.ZipEntry; + +/** + * Free import db strategy (can import either referential or/and data). + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public class FreeImportDbStrategy extends AbstractImportDbStrategy { + + @Override + protected void validateTableEntries(EchoBaseDbMeta dbMeta, + Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables) throws ImportException { + // nothing to validate + } + + @Override + protected void validateAssociationEntries(EchoBaseDbMeta dbMeta, + Map<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> associations) throws ImportException { + // nothing to validate + } + + @Override + protected void createImportLogEntry(TopiaDAO<ImportLog> dao, + EchoBaseUser user, + File file, + Iterable<Voyage> importedVoyages) throws TopiaException { + Date date = newDate(); + + Decorator<Voyage> decorator = getService(DecoratorService.class).getDecorator(getLocale(), Voyage.class, null); + for (Voyage importedVoyage : importedVoyages) { + + // create a importLog entry + ImportLog importLog = dao.create( + ImportLog.PROPERTY_IMPORT_TYPE, ImportType.VOYAGE, + ImportLog.PROPERTY_IMPORT_USER, user.getEmail(), + ImportLog.PROPERTY_IMPORT_DATE, date, + ImportLog.PROPERTY_IMPORT_TEXT, "import voyage " + decorator.toString(importedVoyage) + " from file " + file.getName() + ); + importLog.addImportId(importedVoyage.getTopiaId()); + } + } + + @Override + protected void createLogBookEntry(TopiaDAO<EntityModificationLog> dao, + EchoBaseUser user, + File file, + Iterable<Voyage> importedVoyages) throws TopiaException { + + dao.create( + EntityModificationLog.PROPERTY_ENTITY_TYPE, "Import free db", + EntityModificationLog.PROPERTY_ENTITY_ID, "Free EchoBase db", + EntityModificationLog.PROPERTY_MODIFICATION_USER, user.getEmail(), + EntityModificationLog.PROPERTY_MODIFICATION_DATE, newDate(), + EntityModificationLog.PROPERTY_MODIFICATION_TEXT, "import db from file " + file.getName() + ); + } + +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/FreeImportDbStrategy.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/ReferentialImportDbStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/ReferentialImportDbStrategy.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/ReferentialImportDbStrategy.java 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,115 @@ +package fr.ifremer.echobase.services.importdb.strategy; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import com.google.common.collect.Lists; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.EntityModificationLog; +import fr.ifremer.echobase.entities.ImportLog; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.persistence.EchoBaseDbMeta; +import fr.ifremer.echobase.services.importdata.ImportException; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.metadata.AssociationMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; + +import java.io.File; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipEntry; + +/** + * Referential only import db strategy. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public class ReferentialImportDbStrategy extends AbstractImportDbStrategy { + + @Override + protected void validateTableEntries(EchoBaseDbMeta dbMeta, + Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables) throws ImportException { + + // check that contains only referential entries + List<EchoBaseEntityEnum> badTableTypes = Lists.newArrayList(); + List<TableMeta<EchoBaseEntityEnum>> dataTables = dbMeta.getDataTables(); + for (TableMeta<EchoBaseEntityEnum> tableMetas : tables.keySet()) { + if (dataTables.contains(tableMetas)) { + badTableTypes.add(tableMetas.getSource()); + } + } + + if (!badTableTypes.isEmpty()) { + throw new ImportException( + "In referential import, can not accept " + + "data type, but found some data types: " + badTableTypes); + } + } + + @Override + protected void validateAssociationEntries(EchoBaseDbMeta dbMeta, + Map<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> associations) throws ImportException { + + List<EchoBaseEntityEnum> badAssociationTypes = Lists.newArrayList(); + List<AssociationMeta<EchoBaseEntityEnum>> associationTables = dbMeta.getDataAssociations(); + for (AssociationMeta<EchoBaseEntityEnum> tableMetas : associations.keySet()) { + if (associationTables.contains(tableMetas)) { + badAssociationTypes.add(tableMetas.getSource()); + } + } + if (!badAssociationTypes.isEmpty()) { + throw new ImportException( + "In referential import, can not accept " + + "data type, but found some data associations files: " + + badAssociationTypes); + } + } + + @Override + protected void createImportLogEntry(TopiaDAO<ImportLog> dao, + EchoBaseUser user, + File file, + Iterable<Voyage> importedVoyages) { + // no importLog entry to add + } + + @Override + protected void createLogBookEntry(TopiaDAO<EntityModificationLog> dao, + EchoBaseUser user, + File file, + Iterable<Voyage> importedVoyages) throws TopiaException { + + dao.create( + EntityModificationLog.PROPERTY_ENTITY_TYPE, "Import referential only db", + EntityModificationLog.PROPERTY_ENTITY_ID, "Referential EchoBase db", + EntityModificationLog.PROPERTY_MODIFICATION_USER, user.getEmail(), + EntityModificationLog.PROPERTY_MODIFICATION_DATE, newDate(), + EntityModificationLog.PROPERTY_MODIFICATION_TEXT, "import db from file " + file.getName() + ); + + } + +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/strategy/ReferentialImportDbStrategy.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties =================================================================== --- trunk/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties 2012-09-11 12:48:41 UTC (rev 644) @@ -11,8 +11,13 @@ echobase.common.esduByEchotypeFile=Results per ESDU / echotype file echobase.common.esduBySpeciesAndAgeCategoryFile=Results per ESDU / species / age file echobase.common.esduBySpeciesAndSizeCategoryFile=Results per ESDU / species / size file +echobase.common.exportDbMode.all=Export complete database +echobase.common.exportDbMode.data=Export only data +echobase.common.exportDbMode.referential=Export only referential +echobase.common.exportDbMode.referentialAndData=Export referential and some data echobase.common.gearMetadataFile=Gear metadata file -echobase.common.importDbFile=Import file (.zip) +echobase.common.importDbFile=Import file (.echobase) +echobase.common.importDbMode.data=Data import echobase.common.importDbMode.free=Free import echobase.common.importDbMode.referential=Referential import echobase.common.lengthAgeKeyFile=Size-age equations file Modified: trunk/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties =================================================================== --- trunk/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties 2012-09-11 12:48:41 UTC (rev 644) @@ -11,8 +11,13 @@ echobase.common.esduByEchotypeFile=Fichier de résultats par ESDU / échotype echobase.common.esduBySpeciesAndAgeCategoryFile=Fichier de résultats par ESDU / espèce / âge echobase.common.esduBySpeciesAndSizeCategoryFile=Fichier de résultats par ESDU / espèce / taille +echobase.common.exportDbMode.all=Exporter toute la base +echobase.common.exportDbMode.data=Exporter uniquement des données +echobase.common.exportDbMode.referential=Exporter uniquement le référentiel +echobase.common.exportDbMode.referentialAndData=Exporter le référentiel et des données echobase.common.gearMetadataFile=Fichier de méta-données d'engin -echobase.common.importDbFile=Fichier d'import (zip) +echobase.common.importDbFile=Fichier d'import (.echobase) +echobase.common.importDbMode.data=Import Données echobase.common.importDbMode.free=Import libre echobase.common.importDbMode.referential=Import Référentiel echobase.common.lengthAgeKeyFile=Fichier des relations taille-âge Added: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,163 @@ +package fr.ifremer.echobase.services; + +/* + * #%L + * EchoBase :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +/** + * Obtain some fixtures for service tests. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public class EchoBaseServiceFixtures { + + public String IMPORT_DATA_ECHOBASE_NO_DATA() { + return "/import-data/echobase-" + dbVersion() + "-nodata.h2.db.gz"; + } + + public String IMPORT_DATA_ECHOBASE_COMMON_DATA() { + return "/import-data/echobase-" + dbVersion() + "-commonData.h2.db.gz"; + } + + public String IMPORT_DATA_ECHOBASE_OPERATION() { + return "/import-data/echobase-" + dbVersion() + "-operation.h2.db.gz"; + } + + public String IMPORT_DATA_ECHOBASE_CATCHES() { + return "/import-data/echobase-" + dbVersion() + "-catches.h2.db.gz"; + } + + public String IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT() { + return "/import-data/echobase-" + dbVersion() + "-catches-and-voyage-result.h2.db.gz"; + } + +// public String IMPORT_DATA_ECHOBASE_CATCHES_AND_ACOUSTIC = "/import-data/echobase-" + dbVersion()+ "-catches-and-acoustic.h2.db.gz"; + +// public String IMPORT_DATA_ECHOBASE_CATCHES_AND_ACOUSTIC_AND_VOYAGE_RESULT = "/import-data/echobase-" + dbVersion()+ "-catches-and-acoustic-and-voyage-result.h2.db.gz"; + + public String VESSEL_ID() { + return "fr.ifremer.echobase.entities.references.Vessel#1323196672049#0.9790502711645855"; + } + + public String MISSION_ID() { + return "fr.ifremer.echobase.entities.references.Mission#1323127544274#0.7939481378378231"; + } + + public String AREA_OF_OPERATION_ID() { + return "fr.ifremer.echobase.entities.references.AreaOfOperation#1323128474277#0.011341599655098622"; + } + + + public String dbVersion() { + return "1.2"; + } + + public String importDbReferentialPath() { + return "/echobase-" + dbVersion() + "-importDb-referentiel.zip"; + } + + public int NB_VOYAGE() { + return 1; + } + + public int NB_TRANSIT() { + return 3; + } + + public int NB_TRANSECT() { + return 251; + } + + public int NB_OPERATION() { + return 131; + } + + public int NB_OPERATION_METADATAVALUE() { + return 393; + } + + public int NB_GEAR_METADATAVALUE() { + return 917; + } + + public int NB_SAMPLE_TOTAL() { + return 1232; + } + + public int NB_SAMPLE_DATA_TOTAL() { + return 1834; + } + + public int NB_SAMPLE_UNSORTED() { + return 14; + } + + public int NB_SAMPLE_DATA_UNSORTED() { + return 200; + } + + public int NB_SAMPLE_BIOMETRY() { + return 15; + } + + public int NB_SAMPLE_DATA_BIOMETRY() { + return 43; + } + + public int NB_SAMPLE() { + return NB_SAMPLE_TOTAL() + NB_SAMPLE_UNSORTED() + NB_SAMPLE_BIOMETRY(); + } + + public int NB_SAMPLE_DATA() { + return NB_SAMPLE_DATA_TOTAL() + NB_SAMPLE_DATA_UNSORTED() + NB_SAMPLE_DATA_BIOMETRY(); + } + + public int NB_DATA_ACQUISITION() { + return 1; + } + + public int NB_DATA_PROCESSING() { + return 1; + } + + public int NB_CELL() { + return 26668; + } + + public int NB_DATA() { + return 264478; + } + + public int NB_LENGTH_AGE_KEY() { + return 404; + } + + public int NB_LENGTH_WEIGHT_KEY() { + return 7; + } + + public int NB_ECHOTYPE() { + return 8; + } + +} Property changes on: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseTestServiceSupport.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseTestServiceSupport.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseTestServiceSupport.java 2012-09-11 12:48:41 UTC (rev 644) @@ -65,6 +65,8 @@ protected abstract FakeEchoBaseServiceContext initContext(); + protected final EchoBaseServiceFixtures fixtures = new EchoBaseServiceFixtures(); + @Rule public FakeEchoBaseServiceContext fakeServiceContext = initContext(); Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EmbeddedApplicationServiceIT.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EmbeddedApplicationServiceIT.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EmbeddedApplicationServiceIT.java 2012-09-11 12:48:41 UTC (rev 644) @@ -25,7 +25,6 @@ import fr.ifremer.echobase.services.embeddedapplication.EmbeddedApplicationConfiguration; import fr.ifremer.echobase.services.embeddedapplication.EmbeddedApplicationService; -import fr.ifremer.echobase.services.importdata.AbstractImportDataServiceIT; import org.apache.commons.io.FileUtils; import org.junit.Assert; import org.junit.Test; @@ -43,7 +42,7 @@ protected FakeEchoBaseServiceContext initContext() { return new FakeEchoBaseServiceContext( - AbstractImportDataServiceIT.IMPORT_DATA_ECHOBASE_COMMON_DATA); + fixtures.IMPORT_DATA_ECHOBASE_COMMON_DATA()); } @Test 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-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ExportDbServiceTest.java 2012-09-11 12:48:41 UTC (rev 644) @@ -24,8 +24,8 @@ package fr.ifremer.echobase.services; import fr.ifremer.echobase.services.exportdb.ExportDbConfiguration; +import fr.ifremer.echobase.services.exportdb.ExportDbMode; import fr.ifremer.echobase.services.exportdb.ExportDbService; -import fr.ifremer.echobase.services.importdata.AbstractImportDataServiceIT; import org.junit.Test; import org.nuiton.util.FileUtil; @@ -42,28 +42,45 @@ protected FakeEchoBaseServiceContext initContext() { return new FakeEchoBaseServiceContext( - AbstractImportDataServiceIT.IMPORT_DATA_ECHOBASE_COMMON_DATA); + fixtures.IMPORT_DATA_ECHOBASE_COMMON_DATA()); } @Test - public void exportDb() throws IOException { + public void exportReferential() throws IOException { ExportDbService service = getService(ExportDbService.class); ExportDbConfiguration conf = new ExportDbConfiguration(); + File workingDirectory = new File(getTestDir(), "work-dir"); + FileUtil.createDirectoryIfNecessary(workingDirectory); + conf.setWorkingDirectory(workingDirectory); + conf.setFileName("echobase"); + conf.setComputeSteps(true); + conf.setExportDbMode(ExportDbMode.REFERENTIAL); + service.doExport(conf); + } + + @Test + public void exportData() throws IOException { + + ExportDbService service = getService(ExportDbService.class); + + ExportDbConfiguration conf = new ExportDbConfiguration(); + conf.setVoyageIds(getVoyageId()); File workingDirectory = new File(getTestDir(), "work-dir"); FileUtil.createDirectoryIfNecessary(workingDirectory); conf.setWorkingDirectory(workingDirectory); conf.setFileName("echobase"); - - service.exportDb(conf); + conf.setComputeSteps(true); + conf.setExportDbMode(ExportDbMode.DATA); + service.doExport(conf); } @Test - public void exportPartialDb() throws IOException { + public void exportReferentialAndData() throws IOException { ExportDbService service = getService(ExportDbService.class); @@ -75,7 +92,41 @@ FileUtil.createDirectoryIfNecessary(workingDirectory); conf.setWorkingDirectory(workingDirectory); conf.setFileName("echobase"); + conf.setComputeSteps(true); + conf.setExportDbMode(ExportDbMode.REFERENTIAL_AND_DATA); + service.doExport(conf); + } - service.exportPartialDb(conf, true); + @Test + public void exportAll() throws IOException { + + ExportDbService service = getService(ExportDbService.class); + + ExportDbConfiguration conf = new ExportDbConfiguration(); + + File workingDirectory = new File(getTestDir(), "work-dir"); + FileUtil.createDirectoryIfNecessary(workingDirectory); + conf.setWorkingDirectory(workingDirectory); + conf.setFileName("echobase"); + conf.setComputeSteps(true); + conf.setExportDbMode(ExportDbMode.ALL); + service.doExport(conf); } +// +// @Test +// public void exportPartialDb() throws IOException { +// +// ExportDbService service = getService(ExportDbService.class); +// +// ExportDbConfiguration conf = new ExportDbConfiguration(); +// +// conf.setVoyageIds(getVoyageId()); +// +// File workingDirectory = new File(getTestDir(), "work-dir"); +// FileUtil.createDirectoryIfNecessary(workingDirectory); +// conf.setWorkingDirectory(workingDirectory); +// conf.setFileName("echobase"); +// +// service.exportPartialDb(conf, true); +// } } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportDbServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportDbServiceTest.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportDbServiceTest.java 2012-09-11 12:48:41 UTC (rev 644) @@ -25,11 +25,12 @@ import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.EchoBaseUserImpl; +import fr.ifremer.echobase.services.importdata.ImportException; import fr.ifremer.echobase.services.importdb.ImportDbConfiguration; +import fr.ifremer.echobase.services.importdb.ImportDbMode; import fr.ifremer.echobase.services.importdb.ImportDbService; import org.junit.Assert; import org.junit.Test; -import org.nuiton.topia.TopiaException; import org.nuiton.util.FileUtil; import java.io.File; @@ -51,7 +52,7 @@ } @Test - public void importDb() throws IOException, TopiaException { + public void importDb() throws IOException, ImportException { ImportDbService service = getService(ImportDbService.class); @@ -60,13 +61,15 @@ File workingDirectory = new File(getTestDir(), "work-dir"); FileUtil.createDirectoryIfNecessary(workingDirectory); conf.setWorkingDirectory(workingDirectory); + conf.setComputeSteps(true); + conf.setCommitAfterEachFile(false); + conf.setImportDbMode(ImportDbMode.REFERENTIAL); + prepareInputFile(conf.getInput(), fixtures.importDbReferentialPath()); - prepareInputFile(conf.getInput(), "/echobase-" + DB_VERSION + "-importDb-referentiel.zip"); - EchoBaseUser user = new EchoBaseUserImpl(); user.setEmail("testUser@fake.fr"); - service.importDb(conf, user, true, false); + service.doImport(conf, user); Assert.assertEquals(100f, conf.getProgression(), 1); } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/AbstractImportDataServiceIT.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/AbstractImportDataServiceIT.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/AbstractImportDataServiceIT.java 2012-09-11 12:48:41 UTC (rev 644) @@ -50,7 +50,6 @@ import fr.ifremer.echobase.entities.references.CellType; import fr.ifremer.echobase.io.InputFile; import fr.ifremer.echobase.services.EchoBaseTestServiceSupport; -import fr.ifremer.echobase.services.ImportDbServiceTest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; @@ -82,96 +81,34 @@ public static final TimeLog TIME_LOG = new TimeLog(AbstractImportDataServiceIT.class); - public static final String IMPORT_DATA_ECHOBASE_NO_DATA = "/import-data/echobase-" + ImportDbServiceTest.DB_VERSION + "-nodata.h2.db.gz"; - - public static final String IMPORT_DATA_ECHOBASE_COMMON_DATA = "/import-data/echobase-" + ImportDbServiceTest.DB_VERSION + "-commonData.h2.db.gz"; - - public static final String IMPORT_DATA_ECHOBASE_OPERATION = "/import-data/echobase-" + ImportDbServiceTest.DB_VERSION + "-operation.h2.db.gz"; - - public static final String IMPORT_DATA_ECHOBASE_CATCHES = "/import-data/echobase-" + ImportDbServiceTest.DB_VERSION + "-catches.h2.db.gz"; - - public static final String IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT = "/import-data/echobase-" + ImportDbServiceTest.DB_VERSION + "-catches-and-voyage-result.h2.db.gz"; - -// public static final String IMPORT_DATA_ECHOBASE_CATCHES_AND_ACOUSTIC = "/import-data/echobase-" + ImportDbServiceTest.DB_VERSION + "-catches-and-acoustic.h2.db.gz"; - -// public static final String IMPORT_DATA_ECHOBASE_CATCHES_AND_ACOUSTIC_AND_VOYAGE_RESULT = "/import-data/echobase-" + ImportDbServiceTest.DB_VERSION + "-catches-and-acoustic-and-voyage-result.h2.db.gz"; - - public static final String VESSEL_ID = "fr.ifremer.echobase.entities.references.Vessel#1323196672049#0.9790502711645855"; - - public static final String MISSION_ID = "fr.ifremer.echobase.entities.references.Mission#1323127544274#0.7939481378378231"; - - public static final String AREA_OF_OPERATION_ID = "fr.ifremer.echobase.entities.references.AreaOfOperation#1323128474277#0.011341599655098622"; - - public static final int NB_VOYAGE = 1; - - public static final int NB_TRANSIT = 3; - - public static final int NB_TRANSECT = 251; - - public static final int NB_OPERATION = 131; - - public static final int NB_OPERATION_METADATAVALUE = 393; - - public static final int NB_GEAR_METADATAVALUE = 917; - - public static final int NB_SAMPLE_TOTAL = 1232; - - public static final int NB_SAMPLE_DATA_TOTAL = 1834; - - public static final int NB_SAMPLE_UNSORTED = 14; - - public static final int NB_SAMPLE_DATA_UNSORTED = 200; - - public static final int NB_SAMPLE_BIOMETRY = 15; - - public static final int NB_SAMPLE_DATA_BIOMETRY = 43; - - public static final int NB_SAMPLE = NB_SAMPLE_TOTAL + NB_SAMPLE_UNSORTED + NB_SAMPLE_BIOMETRY; - - public static final int NB_SAMPLE_DATA = NB_SAMPLE_DATA_TOTAL + NB_SAMPLE_DATA_UNSORTED + NB_SAMPLE_DATA_BIOMETRY; - - public static final int NB_DATA_ACQUISITION = 1; - - public static final int NB_DATA_PROCESSING = 1; - - public static final int NB_CELL = 26668; - - public static final int NB_DATA = 264478; - - public static final int NB_LENGTH_AGE_KEY = 404; - - public static final int NB_LENGTH_WEIGHT_KEY = 7; - - public static final int NB_ECHOTYPE = 8; - public void assertImportCommonData() throws TopiaException { - assertNbEntities(Voyage.class, NB_VOYAGE); - assertNbEntities(Transit.class, NB_TRANSIT); - assertNbEntities(Transect.class, NB_TRANSECT); + assertNbEntities(Voyage.class, fixtures.NB_VOYAGE()); + assertNbEntities(Transit.class, fixtures.NB_TRANSIT()); + assertNbEntities(Transect.class, fixtures.NB_TRANSECT()); } public void assertImportOperations() throws TopiaException { - assertNbEntities(Operation.class, NB_OPERATION); - assertNbEntities(OperationMetadataValue.class, NB_OPERATION_METADATAVALUE); - assertNbEntities(GearMetadataValue.class, NB_GEAR_METADATAVALUE); + assertNbEntities(Operation.class, fixtures.NB_OPERATION()); + assertNbEntities(OperationMetadataValue.class, fixtures.NB_OPERATION_METADATAVALUE()); + assertNbEntities(GearMetadataValue.class, fixtures.NB_GEAR_METADATAVALUE()); } public void assertImportSampleDatas() throws TopiaException { - assertNbEntities(Sample.class, NB_SAMPLE); - assertNbEntities(SampleData.class, NB_SAMPLE_DATA); + assertNbEntities(Sample.class, fixtures.NB_SAMPLE()); + assertNbEntities(SampleData.class, fixtures.NB_SAMPLE_DATA()); } public void assertImportAcousticDatas() throws TopiaException { - assertNbEntities(DataAcquisition.class, NB_DATA_ACQUISITION); - assertNbEntities(DataProcessing.class, NB_DATA_PROCESSING); - assertNbEntities(Cell.class, NB_CELL); - assertNbEntities(Data.class, NB_DATA); + assertNbEntities(DataAcquisition.class, fixtures.NB_DATA_ACQUISITION()); + assertNbEntities(DataProcessing.class, fixtures.NB_DATA_PROCESSING()); + assertNbEntities(Cell.class, fixtures.NB_CELL()); + assertNbEntities(Data.class, fixtures.NB_DATA()); } public void assertImportVoyageResult() throws TopiaException { - assertNbEntities(LengthAgeKey.class, NB_LENGTH_AGE_KEY); - assertNbEntities(LengthWeightKey.class, NB_LENGTH_WEIGHT_KEY); - assertNbEntities(Echotype.class, NB_ECHOTYPE); + assertNbEntities(LengthAgeKey.class, fixtures.NB_LENGTH_AGE_KEY()); + assertNbEntities(LengthWeightKey.class, fixtures.NB_LENGTH_WEIGHT_KEY()); + assertNbEntities(Echotype.class, fixtures.NB_ECHOTYPE()); } protected <M extends AbstractImportConfiguration, S extends AbstractImportDataService<M>> Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/AcousticImportServiceIT.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/AcousticImportServiceIT.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/AcousticImportServiceIT.java 2012-09-11 12:48:41 UTC (rev 644) @@ -41,7 +41,7 @@ public class AcousticImportServiceIT extends AbstractImportDataServiceIT { protected FakeEchoBaseServiceContext initContext() { - return new FakeEchoBaseServiceContext(IMPORT_DATA_ECHOBASE_CATCHES); + return new FakeEchoBaseServiceContext(fixtures.IMPORT_DATA_ECHOBASE_CATCHES()); } protected String[] getImportPath(String filename) { @@ -62,7 +62,7 @@ new AcousticImportConfiguration(getLocale()); conf.setVoyageId(getVoyageId()); - conf.setVesselId(VESSEL_ID); + conf.setVesselId(fixtures.VESSEL_ID()); conf.setAcousticDensityUnit("acousticDensityUnit"); conf.setAcquisitionSoftwareVersionER60("acquisitionSoftwareVersionER60"); conf.setAcquisitionSoftwareVersionME70("acquisitionSoftwareVersionME70"); @@ -85,12 +85,12 @@ List<EchoBaseCsvFileImportResult> result; result = doImport(conf, AcousticImportService.class, 1); - assertNbIDs(result, 0, NB_CELL); + assertNbIDs(result, 0, fixtures.NB_CELL()); - assertCsvImportResult(result, 0, DataAcquisition.class, NB_DATA_ACQUISITION); - assertCsvImportResult(result, 0, DataProcessing.class, NB_DATA_PROCESSING); - assertCsvImportResult(result, 0, Cell.class, NB_CELL); - assertCsvImportResult(result, 0, Data.class, NB_DATA); + assertCsvImportResult(result, 0, DataAcquisition.class, fixtures.NB_DATA_ACQUISITION()); + assertCsvImportResult(result, 0, DataProcessing.class, fixtures.NB_DATA_PROCESSING()); + assertCsvImportResult(result, 0, Cell.class, fixtures.NB_CELL()); + assertCsvImportResult(result, 0, Data.class, fixtures.NB_DATA()); assertImportAcousticDatas(); } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CatchesImportServiceIT.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CatchesImportServiceIT.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CatchesImportServiceIT.java 2012-09-11 12:48:41 UTC (rev 644) @@ -41,7 +41,7 @@ public class CatchesImportServiceIT extends AbstractImportDataServiceIT { protected FakeEchoBaseServiceContext initContext() { - return new FakeEchoBaseServiceContext(IMPORT_DATA_ECHOBASE_OPERATION); + return new FakeEchoBaseServiceContext(fixtures.IMPORT_DATA_ECHOBASE_OPERATION()); } protected String[] getImportPath(String filename) { @@ -70,20 +70,20 @@ List<EchoBaseCsvFileImportResult> result; result = doImport(conf, CatchesImportService.class, 3); - assertNbIDs(result, 0, NB_SAMPLE_TOTAL); + assertNbIDs(result, 0, fixtures.NB_SAMPLE_TOTAL()); - assertCsvImportResult(result, 0, Sample.class, NB_SAMPLE_TOTAL, 0, NB_SAMPLE); - assertCsvImportResult(result, 0, SampleData.class, NB_SAMPLE_DATA_TOTAL, 0, NB_SAMPLE_DATA); + assertCsvImportResult(result, 0, Sample.class, fixtures.NB_SAMPLE_TOTAL(), 0, fixtures.NB_SAMPLE()); + assertCsvImportResult(result, 0, SampleData.class, fixtures.NB_SAMPLE_DATA_TOTAL(), 0, fixtures.NB_SAMPLE_DATA()); assertCsvImportResult(result, 0, SpeciesCategory.class, 4, 0, 456); - assertNbIDs(result, 1, NB_SAMPLE_UNSORTED); - assertCsvImportResult(result, 1, Sample.class, NB_SAMPLE_UNSORTED, 0, NB_SAMPLE); - assertCsvImportResult(result, 1, SampleData.class, NB_SAMPLE_DATA_UNSORTED, 0, NB_SAMPLE_DATA); + assertNbIDs(result, 1, fixtures.NB_SAMPLE_UNSORTED()); + assertCsvImportResult(result, 1, Sample.class, fixtures.NB_SAMPLE_UNSORTED(), 0, fixtures.NB_SAMPLE()); + assertCsvImportResult(result, 1, SampleData.class, fixtures.NB_SAMPLE_DATA_UNSORTED(), 0, fixtures.NB_SAMPLE_DATA()); assertCsvImportResult(result, 1, SpeciesCategory.class, 9, 0, 456); - assertNbIDs(result, 2, NB_SAMPLE_BIOMETRY); - assertCsvImportResult(result, 2, Sample.class, NB_SAMPLE_BIOMETRY, 0, NB_SAMPLE); - assertCsvImportResult(result, 2, SampleData.class, NB_SAMPLE_DATA_BIOMETRY, 0, NB_SAMPLE_DATA); + assertNbIDs(result, 2, fixtures.NB_SAMPLE_BIOMETRY()); + assertCsvImportResult(result, 2, Sample.class, fixtures.NB_SAMPLE_BIOMETRY(), 0, fixtures.NB_SAMPLE()); + assertCsvImportResult(result, 2, SampleData.class, fixtures.NB_SAMPLE_DATA_BIOMETRY(), 0, fixtures.NB_SAMPLE_DATA()); assertImportSampleDatas(); } @@ -107,9 +107,9 @@ List<EchoBaseCsvFileImportResult> result; result = doImport(conf, CatchesImportService.class, 1); - assertNbIDs(result, 0, NB_SAMPLE_TOTAL); - assertCsvImportResult(result, 0, Sample.class, NB_SAMPLE_TOTAL); - assertCsvImportResult(result, 0, SampleData.class, NB_SAMPLE_DATA_TOTAL); + assertNbIDs(result, 0, fixtures.NB_SAMPLE_TOTAL()); + assertCsvImportResult(result, 0, Sample.class, fixtures.NB_SAMPLE_TOTAL()); + assertCsvImportResult(result, 0, SampleData.class, fixtures.NB_SAMPLE_DATA_TOTAL()); } @Ignore @@ -131,9 +131,9 @@ List<EchoBaseCsvFileImportResult> result; result = doImport(conf, CatchesImportService.class, 1); - assertNbIDs(result, 0, NB_SAMPLE_UNSORTED); - assertCsvImportResult(result, 0, Sample.class, NB_SAMPLE_UNSORTED); - assertCsvImportResult(result, 0, SampleData.class, NB_SAMPLE_DATA_UNSORTED); + assertNbIDs(result, 0, fixtures.NB_SAMPLE_UNSORTED()); + assertCsvImportResult(result, 0, Sample.class, fixtures.NB_SAMPLE_UNSORTED()); + assertCsvImportResult(result, 0, SampleData.class, fixtures.NB_SAMPLE_DATA_UNSORTED()); } @Ignore @@ -155,9 +155,9 @@ List<EchoBaseCsvFileImportResult> result; result = doImport(conf, CatchesImportService.class, 1); - assertNbIDs(result, 0, NB_SAMPLE_BIOMETRY); - assertCsvImportResult(result, 0, Sample.class, NB_SAMPLE_BIOMETRY); - assertCsvImportResult(result, 0, SampleData.class, NB_SAMPLE_DATA_BIOMETRY); + assertNbIDs(result, 0, fixtures.NB_SAMPLE_BIOMETRY()); + assertCsvImportResult(result, 0, Sample.class, fixtures.NB_SAMPLE_BIOMETRY()); + assertCsvImportResult(result, 0, SampleData.class, fixtures.NB_SAMPLE_DATA_BIOMETRY()); } } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CommonAllImportServiceIT.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CommonAllImportServiceIT.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CommonAllImportServiceIT.java 2012-09-11 12:48:41 UTC (rev 644) @@ -43,7 +43,7 @@ @Override protected FakeEchoBaseServiceContext initContext() { return new FakeEchoBaseServiceContext( - IMPORT_DATA_ECHOBASE_NO_DATA); + fixtures.IMPORT_DATA_ECHOBASE_NO_DATA()); } protected String[] getImportPath(String filename) { @@ -62,9 +62,9 @@ CommonImportConfiguration conf = new CommonImportConfiguration(getLocale()); - conf.setAreaOfOperationId(AREA_OF_OPERATION_ID); + conf.setAreaOfOperationId(fixtures.AREA_OF_OPERATION_ID()); conf.setDatum("datum"); - conf.setMissionId(MISSION_ID); + conf.setMissionId(fixtures.MISSION_ID()); conf.setTransectBinUnitsPingAxis("transectBinUnitsPingAxis"); conf.setTransectGeospatialVerticalPositive("transectGeospatialVerticalPositive"); conf.setTransectLicence("transectLicence"); @@ -80,14 +80,14 @@ List<EchoBaseCsvFileImportResult> result; result = doImport(conf, CommonAllImportService.class, 3); - assertNbIDs(result, 0, NB_VOYAGE); - assertCsvImportResult(result, 0, Voyage.class, NB_VOYAGE); + assertNbIDs(result, 0, fixtures.NB_VOYAGE()); + assertCsvImportResult(result, 0, Voyage.class, fixtures.NB_VOYAGE()); assertNbIDs(result, 1, 0); - assertCsvImportResult(result, 1, Transit.class, NB_TRANSIT); + assertCsvImportResult(result, 1, Transit.class, fixtures.NB_TRANSIT()); assertNbIDs(result, 2, 0); - assertCsvImportResult(result, 2, Transect.class, NB_TRANSECT); + assertCsvImportResult(result, 2, Transect.class, fixtures.NB_TRANSECT()); assertImportCommonData(); } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CommonTransectImportServiceIT.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CommonTransectImportServiceIT.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/CommonTransectImportServiceIT.java 2012-09-11 12:48:41 UTC (rev 644) @@ -40,7 +40,8 @@ public class CommonTransectImportServiceIT extends AbstractImportDataServiceIT { protected FakeEchoBaseServiceContext initContext() { - return new FakeEchoBaseServiceContext(IMPORT_DATA_ECHOBASE_COMMON_DATA); + return new FakeEchoBaseServiceContext( + fixtures.IMPORT_DATA_ECHOBASE_COMMON_DATA()); } protected String[] getImportPath(String filename) { @@ -57,7 +58,7 @@ CommonImportConfiguration conf = new CommonImportConfiguration(getLocale()); - conf.setAreaOfOperationId(AREA_OF_OPERATION_ID); + conf.setAreaOfOperationId(fixtures.AREA_OF_OPERATION_ID()); conf.setDatum("datum"); conf.setVoyageId(getVoyageId()); conf.setTransectBinUnitsPingAxis("transectBinUnitsPingAxis"); @@ -76,8 +77,8 @@ List<EchoBaseCsvFileImportResult> result; result = doImport(conf, CommonTransectImportService.class, 1); - assertNbIDs(result, 0, NB_TRANSECT); - assertCsvImportResult(result, 0, Transect.class, NB_TRANSECT); + assertNbIDs(result, 0, fixtures.NB_TRANSECT()); + assertCsvImportResult(result, 0, Transect.class, fixtures.NB_TRANSECT()); assertImportCommonData(); } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/OperationImportServiceIT.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/OperationImportServiceIT.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/OperationImportServiceIT.java 2012-09-11 12:48:41 UTC (rev 644) @@ -40,7 +40,8 @@ public class OperationImportServiceIT extends AbstractImportDataServiceIT { protected FakeEchoBaseServiceContext initContext() { - return new FakeEchoBaseServiceContext(IMPORT_DATA_ECHOBASE_COMMON_DATA); + return new FakeEchoBaseServiceContext( + fixtures.IMPORT_DATA_ECHOBASE_COMMON_DATA()); } protected String[] getImportPath(String filename) { @@ -71,14 +72,14 @@ List<EchoBaseCsvFileImportResult> result; result = doImport(conf, OperationImportService.class, 3); - assertNbIDs(result, 0, NB_OPERATION); - assertCsvImportResult(result, 0, Operation.class, NB_OPERATION); + assertNbIDs(result, 0, fixtures.NB_OPERATION()); + assertCsvImportResult(result, 0, Operation.class, fixtures.NB_OPERATION()); assertNbIDs(result, 1, 0); - assertCsvImportResult(result, 1, OperationMetadataValue.class, NB_OPERATION_METADATAVALUE); + assertCsvImportResult(result, 1, OperationMetadataValue.class, fixtures.NB_OPERATION_METADATAVALUE()); assertNbIDs(result, 2, 0); - assertCsvImportResult(result, 2, GearMetadataValue.class, NB_GEAR_METADATAVALUE); + assertCsvImportResult(result, 2, GearMetadataValue.class, fixtures.NB_GEAR_METADATAVALUE()); assertImportOperations(); } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsEsduCellImportServiceIT.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsEsduCellImportServiceIT.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsEsduCellImportServiceIT.java 2012-09-11 12:48:41 UTC (rev 644) @@ -46,7 +46,7 @@ protected FakeEchoBaseServiceContext initContext() { return new FakeEchoBaseServiceContext( - IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT); + fixtures.IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT()); } protected String[] getImportPath(String filename) { Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsMapCellImportServiceIT.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsMapCellImportServiceIT.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsMapCellImportServiceIT.java 2012-09-11 12:48:41 UTC (rev 644) @@ -43,7 +43,7 @@ protected FakeEchoBaseServiceContext initContext() { return new FakeEchoBaseServiceContext( - IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT); + fixtures.IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT()); } protected String[] getImportPath(String filename) { @@ -72,7 +72,7 @@ List<EchoBaseCsvFileImportResult> result; result = doImport(conf, ResultsMapCellImportService.class, 1); - assertNbIDs(result,0,380); + assertNbIDs(result, 0, 380); assertCsvImportResult(result, 0, Cell.class, 380); assertCsvImportResult(result, 0, Data.class, 2280); Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsRegionCellImportServiceIT.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsRegionCellImportServiceIT.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsRegionCellImportServiceIT.java 2012-09-11 12:48:41 UTC (rev 644) @@ -44,7 +44,7 @@ protected FakeEchoBaseServiceContext initContext() { return new FakeEchoBaseServiceContext( - IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT); + fixtures.IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT()); } protected String[] getImportPath(String filename) { Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsVoyageImportServiceIT.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsVoyageImportServiceIT.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/ResultsVoyageImportServiceIT.java 2012-09-11 12:48:41 UTC (rev 644) @@ -42,7 +42,7 @@ public class ResultsVoyageImportServiceIT extends AbstractImportDataServiceIT { protected FakeEchoBaseServiceContext initContext() { - return new FakeEchoBaseServiceContext(IMPORT_DATA_ECHOBASE_CATCHES); + return new FakeEchoBaseServiceContext(fixtures.IMPORT_DATA_ECHOBASE_CATCHES()); } protected String[] getImportPath(String filename) { @@ -75,14 +75,14 @@ List<EchoBaseCsvFileImportResult> result; result = doImport(conf, ResultsVoyageImportService.class, 3); - assertNbIDs(result, 0, NB_LENGTH_AGE_KEY); - assertCsvImportResult(result, 0, LengthAgeKey.class, NB_LENGTH_AGE_KEY); + assertNbIDs(result, 0, fixtures.NB_LENGTH_AGE_KEY()); + assertCsvImportResult(result, 0, LengthAgeKey.class, fixtures.NB_LENGTH_AGE_KEY()); - assertNbIDs(result, 1, NB_LENGTH_WEIGHT_KEY); - assertCsvImportResult(result, 1, LengthWeightKey.class, NB_LENGTH_WEIGHT_KEY); + assertNbIDs(result, 1, fixtures.NB_LENGTH_WEIGHT_KEY()); + assertCsvImportResult(result, 1, LengthWeightKey.class, fixtures.NB_LENGTH_WEIGHT_KEY()); - assertNbIDs(result, 2, NB_ECHOTYPE); - assertCsvImportResult(result, 2, Echotype.class, NB_ECHOTYPE); + assertNbIDs(result, 2, fixtures.NB_ECHOTYPE()); + assertCsvImportResult(result, 2, Echotype.class, fixtures.NB_ECHOTYPE()); } @Ignore @@ -107,8 +107,8 @@ List<EchoBaseCsvFileImportResult> result; result = doImport(conf, ResultsVoyageImportService.class, 1); - assertNbIDs(result, 0, NB_LENGTH_AGE_KEY); - assertCsvImportResult(result, 0, LengthAgeKey.class, NB_LENGTH_AGE_KEY); + assertNbIDs(result, 0, fixtures.NB_LENGTH_AGE_KEY()); + assertCsvImportResult(result, 0, LengthAgeKey.class, fixtures.NB_LENGTH_AGE_KEY()); } @Ignore @@ -133,8 +133,8 @@ List<EchoBaseCsvFileImportResult> result; result = doImport(conf, ResultsVoyageImportService.class, 1); - assertNbIDs(result, 0, NB_LENGTH_WEIGHT_KEY); - assertCsvImportResult(result, 0, LengthWeightKey.class, NB_LENGTH_WEIGHT_KEY); + assertNbIDs(result, 0, fixtures.NB_LENGTH_WEIGHT_KEY()); + assertCsvImportResult(result, 0, LengthWeightKey.class, fixtures.NB_LENGTH_WEIGHT_KEY()); } @Ignore @@ -158,8 +158,8 @@ List<EchoBaseCsvFileImportResult> result; result = doImport(conf, ResultsVoyageImportService.class, 1); - assertNbIDs(result, 0, NB_ECHOTYPE); - assertCsvImportResult(result, 0, Echotype.class, NB_ECHOTYPE); + assertNbIDs(result, 0, fixtures.NB_ECHOTYPE()); + assertCsvImportResult(result, 0, Echotype.class, fixtures.NB_ECHOTYPE()); } } \ No newline at end of file Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/EntityLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/EntityLoader.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/EntityLoader.java 2012-09-11 12:48:41 UTC (rev 644) @@ -37,6 +37,7 @@ import fr.ifremer.echobase.services.EchoBaseServiceContext; import fr.ifremer.echobase.services.EchoBaseServiceSupport; import fr.ifremer.echobase.services.exportdb.ExportService; +import fr.ifremer.echobase.services.importdb.EchoBaseImportModelFactory; import fr.ifremer.echobase.services.importdb.ImportService; import fr.ifremer.echobase.tools.FileType; import org.apache.commons.io.IOUtils; @@ -46,11 +47,12 @@ import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaId; +import org.nuiton.topia.persistence.csv.EntityCsvModel; +import org.nuiton.topia.persistence.csv.in.CsvImportResult; +import org.nuiton.topia.persistence.csv.in.ImportModelFactory; import org.nuiton.topia.persistence.metadata.AssociationMeta; import org.nuiton.topia.persistence.metadata.MetaFilenameAware; import org.nuiton.topia.persistence.metadata.TableMeta; -import org.nuiton.topia.persistence.csv.in.CsvImportResult; -import org.nuiton.topia.persistence.csv.EntityCsvModel; import org.nuiton.util.FileUtil; import org.nuiton.util.csv.Import; import org.nuiton.util.csv.ImportModel; @@ -100,6 +102,8 @@ private final EchoBaseEntityEnum[] extraDependencies; + private ImportModelFactory<EchoBaseEntityEnum> modelFactory; + protected EntityLoader(Class<E> entityClass, FileType... fileTypes) { this(entityClass, null, null, EMPTY_DEPENDENCIES_ARRAY, fileTypes); @@ -151,6 +155,8 @@ } else { parentAssociationMeta = null; } + + modelFactory = EchoBaseImportModelFactory.newFactory(this); } protected EntityCsvModel<EchoBaseEntityEnum, E> createCsvImportModel(TableMeta<EchoBaseEntityEnum> meta) { @@ -381,10 +387,6 @@ return getDAO(entityClass); } - protected final ImportService getImportService() { - return getService(ImportService.class); - } - protected final ExportService getExportService() { return getService(ExportService.class); } @@ -423,8 +425,6 @@ Reader reader, CsvImportResult<EchoBaseEntityEnum> csvResult) throws IOException { - ImportService service = getImportService(); - if (entry instanceof AssociationMeta) { // load a association input @@ -441,7 +441,7 @@ Map<String, TopiaEntity> targetsById = Maps.uniqueIndex(targetEntities, TopiaId.GET_TOPIA_ID); - ImportModel<Map<String, Object>> model = service.buildForImport(associationMeta); + ImportModel<Map<String, Object>> model = modelFactory.buildForImport(associationMeta); EchoBaseEntityEnum sourceType = associationMeta.getSource(); @@ -480,7 +480,7 @@ log.info("Will import " + tableMeta); } - ImportModel<TopiaEntity> model = service.buildForImport(tableMeta); + ImportModel<TopiaEntity> model = modelFactory.buildForImport(tableMeta); Import<TopiaEntity> importer = Import.newImport(model, reader); Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java 2012-09-11 12:48:41 UTC (rev 644) @@ -75,6 +75,23 @@ protected static final Log log = LogFactory.getLog(EchoBaseApplicationListener.class); + static { + try { + Class.forName("org.postgresql.Driver"); + } catch (ClassNotFoundException e) { + if (log.isErrorEnabled()) { + log.error("Could not find pg driver", e); + } + } + try { + Class.forName("org.h2.Driver"); + } catch (ClassNotFoundException e) { + if (log.isErrorEnabled()) { + log.error("Could not find h2 driver", e); + } + } + } + @Override public void contextInitialized(ServletContextEvent sce) { 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-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Configure.java 2012-09-11 12:48:41 UTC (rev 644) @@ -23,7 +23,10 @@ */ package fr.ifremer.echobase.ui.actions.exportDb; +import com.opensymphony.xwork2.interceptor.annotations.InputConfig; +import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.services.exportdb.ExportDbConfiguration; +import fr.ifremer.echobase.services.exportdb.ExportDbMode; import fr.ifremer.echobase.ui.actions.AbstractConfigureAction; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; @@ -32,6 +35,7 @@ import java.io.File; import java.io.IOException; +import java.util.Map; /** * Configure the complete db export. @@ -46,19 +50,67 @@ /** Logger. */ private static final Log log = LogFactory.getLog(Configure.class); + /** Universe of possible export modes. */ + protected Map<String, String> modes; + + /** Universe of voyages to export in db. */ + protected Map<String, String> voyages; + public Configure() { super(ExportDbConfiguration.class); } + public Map<String, String> getModes() { + return modes; + } + + public Map<String, String> getVoyages() { + return voyages; + } + + public void setFileName(String fileName) { + getModel().setFileName(fileName); + } + + @InputConfig(methodName = "input") + public String configureReferential() throws Exception { + return execute(); + } + + @InputConfig(methodName = "input") + public String configureReferentialAndData() throws Exception { + return execute(); + } + + @InputConfig(methodName = "input") + public String configureData() throws Exception { + return execute(); + } + + @InputConfig(methodName = "input") + public String configureAll() throws Exception { + return execute(); + } + @Override protected ExportDbConfiguration createModel() { ExportDbConfiguration result = new ExportDbConfiguration(); result.setFileName("echobase"); + result.setComputeSteps(true); return result; } - public void setFileName(String fileName) { - getModel().setFileName(fileName); + @Override + protected void prepareInputAction(ExportDbConfiguration model) { + + modes = decorateEnums(ExportDbMode.values()); + + if (model.getExportDbMode() == null) { + + model.setExportDbMode(ExportDbMode.ALL); + } + + voyages = loadSortAndDecorate(Voyage.class); } @Override Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Export.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Export.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportDb/Export.java 2012-09-11 12:48:41 UTC (rev 644) @@ -53,7 +53,7 @@ log.info("Start export to file " + model.getFileName()); } - service.exportDb(model); + service.doExport(model); } } \ No newline at end of file Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Configure.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Configure.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Configure.java 2012-09-11 12:48:41 UTC (rev 644) @@ -23,6 +23,7 @@ */ package fr.ifremer.echobase.ui.actions.importDb; +import com.opensymphony.xwork2.interceptor.annotations.InputConfig; import fr.ifremer.echobase.io.EchoBaseIOUtil; import fr.ifremer.echobase.io.InputFile; import fr.ifremer.echobase.services.importdb.ImportDbConfiguration; @@ -50,7 +51,6 @@ /** Logger. */ private static final Log log = LogFactory.getLog(Configure.class); - /** Universe of possible import modes. */ protected Map<String, String> modes; @@ -94,15 +94,18 @@ EchoBaseIOUtil.copyFile(input, dataDirectory); } - public String execute_referential() throws Exception { + @InputConfig(methodName = "input") + public String configureReferential() throws Exception { return execute(); } - public String execute_voyage() throws Exception { + @InputConfig(methodName = "input") + public String configureData() throws Exception { return execute(); } - public String execute_free() throws Exception { + @InputConfig(methodName = "input") + public String configureFree() throws Exception { return execute(); } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Import.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Import.java 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Import.java 2012-09-11 12:48:41 UTC (rev 644) @@ -69,18 +69,18 @@ ImportDbMode importDbMode = model.getImportDbMode(); Locale locale = getLocale(); EchoBaseUser user = getEchoBaseSession().getUser(); + service.doImport(model, user); + switch (importDbMode) { case REFERENTIAL: - service.importReferential(model, user); addFlashMessage(_("echobase.info.import.succeded")); result = l_(locale, "echobase.importDb.referentialResult", model.getActionTime()); break; - case VOYAGE: - service.importLegacyData(model, user); + case DATA: addFlashMessage(_("echobase.info.import.succeded")); result = l_(locale, "echobase.importDb.legacyVoyageResult", @@ -88,7 +88,6 @@ break; case FREE: - service.importDb(model, user, true, false); addFlashMessage(_("echobase.info.import.succeded")); result = l_(locale, "echobase.importDb.freeResult", Modified: trunk/echobase-ui/src/main/resources/config/struts-exportDb.xml =================================================================== --- trunk/echobase-ui/src/main/resources/config/struts-exportDb.xml 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/resources/config/struts-exportDb.xml 2012-09-11 12:48:41 UTC (rev 644) @@ -30,8 +30,14 @@ <package name="exportDb" extends="loggued" namespace="/exportDb"> + <!-- Configure export (input) --> + <action name="configure" method="input" + class="fr.ifremer.echobase.ui.actions.exportDb.Configure"> + <result name="input">/WEB-INF/jsp/exportDb/configure.jsp</result> + </action> + <!-- Configure export --> - <action name="configure" + <action name="configure*" method="configure{1}" class="fr.ifremer.echobase.ui.actions.exportDb.Configure"> <interceptor-ref name="prepareParamsStackLoggued"/> <result name="input">/WEB-INF/jsp/exportDb/configure.jsp</result> Modified: trunk/echobase-ui/src/main/resources/config/struts-importDb.xml =================================================================== --- trunk/echobase-ui/src/main/resources/config/struts-importDb.xml 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/resources/config/struts-importDb.xml 2012-09-11 12:48:41 UTC (rev 644) @@ -30,9 +30,15 @@ <package name="importDb" extends="loggued" namespace="/importDb"> - <!-- Configure import --> - <action name="configure-*" method="execute_{1}" + <!-- Configure import (input) --> + <action name="configure" method="input" class="fr.ifremer.echobase.ui.actions.importDb.Configure"> + <result name="input">/WEB-INF/jsp/importDb/configure.jsp</result> + </action> + + <!-- Configure import (validate) --> + <action name="configure*" method="configure{1}" + class="fr.ifremer.echobase.ui.actions.importDb.Configure"> <interceptor-ref name="prepareParamsStackLoggued"/> <result name="input">/WEB-INF/jsp/importDb/configure.jsp</result> <result type="redirectAction"> Added: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureData-validation.xml =================================================================== --- trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureData-validation.xml (rev 0) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureData-validation.xml 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,35 @@ +<!-- + #%L + EchoBase :: UI + + $Id$ + $HeadURL$ + %% + Copyright (C) 2011 Ifremer, Codelutin + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + #L% + --> +<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="input"> + <field-validator type="fieldexpression"> + <param name="expression">model.input.file != null</param> + <message key="echobase.error.importDb.input.required"/> + </field-validator> + </field> + +</validators> \ No newline at end of file Property changes on: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureData-validation.xml ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureFree-validation.xml =================================================================== --- trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureFree-validation.xml (rev 0) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureFree-validation.xml 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,35 @@ +<!-- + #%L + EchoBase :: UI + + $Id$ + $HeadURL$ + %% + Copyright (C) 2011 Ifremer, Codelutin + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + #L% + --> +<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="input"> + <field-validator type="fieldexpression"> + <param name="expression">model.input.file != null</param> + <message key="echobase.error.importDb.input.required"/> + </field-validator> + </field> + +</validators> \ No newline at end of file Property changes on: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureFree-validation.xml ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureReferential-validation.xml =================================================================== --- trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureReferential-validation.xml (rev 0) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureReferential-validation.xml 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,39 @@ +<!-- + #%L + EchoBase :: UI + + $Id$ + $HeadURL$ + %% + Copyright (C) 2011 Ifremer, Codelutin + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + #L% + --> +<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="input"> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression">model.input.file != null</param> + <message key="echobase.error.importDb.input.required"/> + </field-validator> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression">model.input.fileName.endsWith(".echobase")</param> + <message key="echobase.error.importDb.input.extension.mismatch"/> + </field-validator> + </field> + +</validators> \ No newline at end of file Property changes on: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-configureReferential-validation.xml ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Deleted: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-validation.xml =================================================================== --- trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importHistorical/Configure-validation.xml 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/importDb/Configure-validation.xml 2012-09-11 12:48:41 UTC (rev 644) @@ -1,35 +0,0 @@ -<!-- - #%L - EchoBase :: UI - - $Id$ - $HeadURL$ - %% - Copyright (C) 2011 Ifremer, Codelutin - %% - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - #L% - --> -<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" - "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> -<validators> - - <field name="input"> - <field-validator type="fieldexpression"> - <param name="expression">model.input.file != null</param> - <message key="echobase.error.importHistorical.input.required"/> - </field-validator> - </field> - -</validators> \ No newline at end of file Modified: trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties =================================================================== --- trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties 2012-09-11 12:48:41 UTC (rev 644) @@ -31,8 +31,9 @@ echobase.action.save=Save echobase.action.saveSqlQuery=Update query echobase.action.show.embedded.documentation=How to use a portable database +echobase.action.show.exportDb.documentation=How to export a database echobase.action.show.import.documentation=How to import data -echobase.action.show.importDb.documentation=How to import db data +echobase.action.show.importDb.documentation=How to import a database echobase.action.showImportLogs=Liste des imports\=Show import logs echobase.action.toEnglish=English echobase.action.toFrench=French @@ -70,6 +71,7 @@ echobase.common.esduByEchotypeFile= echobase.common.esduBySpeciesAndAgeCategoryFile= echobase.common.esduBySpeciesAndSizeCategoryFile= +echobase.common.exportDbMode=Mode echobase.common.gearMetadataFile= echobase.common.id=ID echobase.common.imortType=import type @@ -196,8 +198,9 @@ echobase.error.import.voyage.required=La sélection d'une campagne est obligatoire echobase.error.import.voyageDescription.required=Description de la campagne non rengeigné echobase.error.import.voyageFile.required=La sélection d'un fichier Voyage est obligatoire +echobase.error.importDb.input.extension.mismatch=Import db file must be a .echobase file +echobase.error.importDb.input.required=Le fichier d'import est obligatoire echobase.error.importFile.required=Fichier d'import obligatoire -echobase.error.importHistorical.input.required=Le fichier d'import est obligatoire echobase.error.invalid.sql=Invalid query\: %s echobase.error.login.unknown=Unkwown user echobase.error.login.wrongLogin=Le login est déjà utilisé @@ -222,11 +225,13 @@ echobase.info.click.to.select=You can select value with a simple click then copy it (Ctrl-C) echobase.info.dbeditor.propertyDiffsResult=Data import results echobase.info.documentation=EchoBase online documentation +echobase.info.downloadFiles=Download EchoBase or some import files echobase.info.echoBaseForge=Project Forge echobase.info.echoR=EchoR project -echobase.info.exportDb.archive=Basebame of the archive, extension <strong>.zip</strong> will be added to it. +echobase.info.exportDb.archive=Basebame of the archive, extension <strong>.echobase</strong> will be added to it. echobase.info.import.failed=Import failed echobase.info.import.succeded=Successful import +echobase.info.license=License AGPL V3 echobase.info.new.sqlQuery.inprogress=Query creation in progress echobase.info.new.workingDbConfiguration.inprogress=New working database configuration in progress echobase.info.no.sqlQuery.saved=No saved SQL query @@ -235,12 +240,14 @@ echobase.info.no.voyagee.found=No survey selected echobase.info.no.workingDbConfiguration.saved=No working database configuration saved echobase.info.no.workingDbConfiguration.selected=Select a working database configuration and then connect +echobase.info.reportBug=Bug report echobase.info.sqlQuery.not.modifiable=You have not sufficient rights to update the selected query echobase.info.update.user.password=Keep empty password field to not modify it. echobase.info.usefulLinks=Some useful links echobase.info.user.create=User %s created echobase.info.user.delete=User %s deleted echobase.info.user.update=User %s updated +echobase.info.userSupport=User support echobase.info.workingDbconfiguration.connected=Connection to the working database '%s' successful echobase.info.workingDbconfiguration.created=Working database configuration '%s' created echobase.info.workingDbconfiguration.deleted=Working database configuration '%s' deleted @@ -279,10 +286,12 @@ echobase.legend.dbeditor.show=Displaying '%s' echobase.legend.embeddedApplication.configuration=Portable database configuration echobase.legend.exportDb.configuration.files=Export configuration +echobase.legend.exportDb.configuration.selectExportDbMode=Select export db mode echobase.legend.importData.configuration.selectImportType=Type of import selection echobase.legend.importData.configure=Import configuration echobase.legend.importData.createMission=Mission caracteristics echobase.legend.importData.result.resume=Results +echobase.legend.importDb.configuration=Configure import echobase.legend.importDb.configuration.files=Import file selection (.echobase file) echobase.legend.importDb.configuration.freeMode=Free import configuration echobase.legend.importDb.configuration.legacyVoyageMode=Data import configuration @@ -297,9 +306,9 @@ echobase.menu.createEmbeddedApplication=Create a portable database echobase.menu.editData=Modify data echobase.menu.export=Export data -echobase.menu.exportDb=Complete database export +echobase.menu.exportDb=Database export echobase.menu.importData=Import data -echobase.menu.importDb=Complete database import +echobase.menu.importDb=Database import echobase.menu.logs=Change log echobase.menu.removeData=Remove data echobase.menu.users=Manage users @@ -324,11 +333,11 @@ echobase.title.entityModificationLogs=Change log echobase.title.export=SQL export echobase.title.exportDb=Export a complete database -echobase.title.exportDbProgress=Export the current database -echobase.title.exportDbResult=Complete database export results +echobase.title.exportDbProgress=Export database in progress +echobase.title.exportDbResult=Database export results echobase.title.exportTable=Export a table echobase.title.importData.selectImportType=Select type of import -echobase.title.importDb=Complete database import +echobase.title.importDb=Database import echobase.title.importDbProgress=Importing data echobase.title.importDbResult=Data import results echobase.title.importLog.detail=Import detail Modified: trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties =================================================================== --- trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2012-09-11 12:48:41 UTC (rev 644) @@ -31,8 +31,9 @@ echobase.action.save=Sauvegarder echobase.action.saveSqlQuery=Mettre à jour echobase.action.show.embedded.documentation=Comment utiliser une application embarquée +echobase.action.show.exportDb.documentation=Comment exporter une base echobase.action.show.import.documentation=Comment importer des données -echobase.action.show.importDb.documentation=Comment importer des données +echobase.action.show.importDb.documentation=Comment importer une base echobase.action.showImportLogs=Liste des imports echobase.action.toEnglish=En anglais echobase.action.toFrench=En français @@ -70,6 +71,7 @@ echobase.common.esduByEchotypeFile= echobase.common.esduBySpeciesAndAgeCategoryFile= echobase.common.esduBySpeciesAndSizeCategoryFile= +echobase.common.exportDbMode=Mode echobase.common.gearMetadataFile= echobase.common.id=Identifiant echobase.common.imortType=Type d'import @@ -196,8 +198,9 @@ echobase.error.import.voyage.required=La sélection d'une campagne est obligatoire echobase.error.import.voyageDescription.required=Description de la campagne non rengeigné echobase.error.import.voyageFile.required=La sélection d'un fichier Voyage est obligatoire +echobase.error.importDb.input.extension.mismatch=Le fichier n'est pas un fichier .echobase +echobase.error.importDb.input.required=Le fichier d'import est obligatoire echobase.error.importFile.required=Fichier d'import obligatoire -echobase.error.importHistorical.input.required=Le fichier d'import est obligatoire echobase.error.invalid.sql=Requête non valide \: %s echobase.error.login.unknown=Utilisateur inconnu echobase.error.login.wrongLogin=Le login est déjà utilisé @@ -222,11 +225,13 @@ echobase.info.click.to.select=Vous pouvez sélectionner la valeur en un simple click puis la copier (Ctrl-C) echobase.info.dbeditor.propertyDiffsResult=Résultat d'import de données echobase.info.documentation=Documentation en ligne d'EchoBase +echobase.info.downloadFiles=Télécharger l'application ou des fichiers d'imports echobase.info.echoBaseForge=Gestion du projet echobase.info.echoR=Projet EchoR -echobase.info.exportDb.archive=Il s'agit du nom de l'archive, l'extension <strong>.zip</strong> sera automatiquement rajoutée. +echobase.info.exportDb.archive=Il s'agit du nom de l'archive, l'extension <strong>.echobase</strong> sera automatiquement rajoutée. echobase.info.import.failed=L'import a échoué echobase.info.import.succeded=L'import a réussi +echobase.info.license=Licence AGPL V3 echobase.info.new.sqlQuery.inprogress=Nouvelle requête en cours de création echobase.info.new.workingDbConfiguration.inprogress=Nouvelle configuration de base de travail en cours de création echobase.info.no.sqlQuery.saved=Aucune requête d'export SQL enregistrée @@ -235,12 +240,14 @@ echobase.info.no.voyagee.found=Aucune campagne à exporter echobase.info.no.workingDbConfiguration.saved=Aucune configuration de base de travail enregistrée echobase.info.no.workingDbConfiguration.selected=Sélectionner une configuration pour ensuite vous y connecter +echobase.info.reportBug=Rapport de bug echobase.info.sqlQuery.not.modifiable=Vous ne disposez pas des droits nécessaires pour modifier la requête sélectionnée echobase.info.update.user.password=Pour ne pas modifier le mot de passe laisser ce champs vide. echobase.info.usefulLinks=Quelques liens utiles echobase.info.user.create=L'utilisateur '%s' a été créé echobase.info.user.delete=L'utilisateur '%s' a été supprimé echobase.info.user.update=L'utilisateur '%s' a été mis à jour +echobase.info.userSupport=Support utilisateur echobase.info.workingDbconfiguration.connected=Connexion à la base de travail '%s' réussie echobase.info.workingDbconfiguration.created=Configuration à la base de travail '%s' créée echobase.info.workingDbconfiguration.deleted=Configuration à la base de travail '%s' supprimée @@ -279,10 +286,12 @@ echobase.legend.dbeditor.show=Visualisation de '%s' echobase.legend.embeddedApplication.configuration=Configuration de l'application embarquée echobase.legend.exportDb.configuration.files=Configuration de l'export +echobase.legend.exportDb.configuration.selectExportDbMode=Choix du mode d'export echobase.legend.importData.configuration.selectImportType=Sélection du type d'import echobase.legend.importData.configure=Configurer l'import echobase.legend.importData.createMission=Caractéristiques de la mission echobase.legend.importData.result.resume=Résultats +echobase.legend.importDb.configuration=Configuration de l'import echobase.legend.importDb.configuration.files=Choix du fichier à importer (fichier .echobase) echobase.legend.importDb.configuration.freeMode=Configuration import "libre" echobase.legend.importDb.configuration.legacyVoyageMode=Configuration import "données" @@ -297,9 +306,9 @@ echobase.menu.createEmbeddedApplication=Créer une application embarquée echobase.menu.editData=Modifier les données echobase.menu.export=Exporter des données -echobase.menu.exportDb=Exporter une base complète +echobase.menu.exportDb=Exporter une base echobase.menu.importData=Importer des données -echobase.menu.importDb=Importer une base complète +echobase.menu.importDb=Importer une base echobase.menu.logs=Journal des modifications echobase.menu.removeData=Supprimer des données echobase.menu.users=Gérer les utilisateurs @@ -324,14 +333,14 @@ echobase.title.entityModificationLogs=Journal des modifications echobase.title.export=Export SQL echobase.title.exportDb=Export complet de la base -echobase.title.exportDbProgress=Export complet de la base de données en cours -echobase.title.exportDbResult=Résultats de l'export complet de la base de données +echobase.title.exportDbProgress=Export de la base de données en cours +echobase.title.exportDbResult=Résultats de l'export de la base de données echobase.title.exportTable=Exporter une table echobase.title.importData.selectImportType=Sélection du type d'import -echobase.title.importDb=Import d'une base complète +echobase.title.importDb=Import d'une base echobase.title.importDbProgress=Import de données en cours echobase.title.importDbResult=Résultats de l'import de données -echobase.title.importLog.detail=Détil d'un import +echobase.title.importLog.detail=Détail d'un import echobase.title.importLogs=Liste des imports echobase.title.importTable=Importer une table echobase.title.login=Connexion Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/includes/footer.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/includes/footer.jsp 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/includes/footer.jsp 2012-09-11 12:48:41 UTC (rev 644) @@ -30,33 +30,31 @@ <div id='footer'> <ul class="clearfix"> <li> - <a href="http://maven-site.forge.codelutin.com/echobase/" - title="Documentation de l'application" target="_blank"> - Echobase - </a> + <span style="font-size: 140%"> + EchoBase <%=EchoBaseActionSupport.getApplicationVersion()%> + © 2011-2012 + </span> + <a href="http://www.ifremer.fr">Ifremer</a> + <a href="http://www.codelutin.com" title="Code Lutin" target="_blank">Code + Lutin</a> </li> <li> - <a href="http://forge.codelutin.com/projects/echobase/roadmap?completed=1" - title="Modifications faites pour cette version" target="_blank"> - Roadmap <%=EchoBaseActionSupport.getApplicationVersion()%> - </a> + <s:a href="http://www.gnu.org/licenses/agpl.html" target='license'> + <s:text name="echobase.info.license"/> + </s:a> </li> - <!--li> - <a href="mailto:echobase-users at " title="Contacter un responsable"> - Contact - </a> - </li--> <li> - <a href="http://www.gnu.org/licenses/agpl.html" title="Licence AGPL v3" - target="_blank"> - AGPLv3 - </a> + <s:a href="http://forge.codelutin.com/projects/echobase/issues/new" + target='#doc'> + <s:text name="echobase.info.reportBug"/> + </s:a> </li> <li> - Copyright 2011-2012 - <a href="http://www.ifremer.fr">Ifremer</a> - <a href="http://www.codelutin.com" title="Code Lutin" target="_blank">Code - Lutin</a> + <s:a + href="http://list.forge.codelutin.com/cgi-bin/mailman/listinfo/echobase-users" + target='#mailingList'> + <s:text name="echobase.info.userSupport"/> + </s:a> </li> </ul> </div> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp 2012-09-11 12:48:41 UTC (rev 644) @@ -89,13 +89,11 @@ <s:if test="%{admin}"> <s:if test="%{workingDbSelected}"> <li> - <s:a action="configure" namespace="/importDb" method="input" - cssClass="impBase"> + <s:a action="configure" namespace="/importDb" cssClass="impBase"> <span><s:text name="echobase.menu.importDb"/></s:a></span> </li> <li> - <s:a action="configure" namespace="/exportDb" method="input" - cssClass="expBase"> + <s:a action="configure" namespace="/exportDb" cssClass="expBase"> <span><s:text name="echobase.menu.exportDb"/></s:a></span> </li> <li> @@ -111,7 +109,7 @@ </li> <li> <s:a action="importLogs" namespace="/removeData" - method="input" cssClass="delDonnee"> + cssClass="delDonnee"> <span><s:text name="echobase.menu.removeData"/></s:a></span> </li> <li> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/embeddedApplication/progress.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/embeddedApplication/progress.jsp 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/embeddedApplication/progress.jsp 2012-09-11 12:48:41 UTC (rev 644) @@ -25,9 +25,10 @@ <%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sj" uri="/struts-jquery-tags" %> -<s:url id="url" action="build" namespace="/embeddedApplication"/> -<meta http-equiv="refresh" content="5;url=${url}"/> +<meta http-equiv="refresh" + content='10;url=<s:url action="build" namespace="/embeddedApplication"/>'/> + <title><s:text name="echobase.title.embeddedApplicationProgress"/></title> <%-- TODO letellier 20111104 : Add warn icon --%> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportDb/configure.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportDb/configure.jsp 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportDb/configure.jsp 2012-09-11 12:48:41 UTC (rev 644) @@ -26,13 +26,49 @@ <title><s:text name="echobase.title.exportDb"/></title> -<s:form namespace="/exportDb" method="POST"> +<script type="text/javascript"> + jQuery(document).ready(function () { + + // to change form when mode is changed + $('[name="model.exportDbMode"]').change(function (event) { + $('[class~="exportDbMode"]').hide(); + $('#' + this.value).show(); + $('#' + this.value + ' .errorMessage').hide(); + }); + + // show incoming mode + var incomingVal = $('[name="model.exportDbMode"][checked="checked"]').val(); + $('#' + incomingVal).show(); + }); +</script> + +<fieldset> + <legend> + <s:text name="echobase.legend.exportDb.configuration.selectExportDbMode"/> + </legend> + <s:radio id='mode' key='model.exportDbMode' list="modes" cssClass="cleanBoth" + label='%{getText("echobase.common.exportDbMode")}' + required="true" template="myradiomap"/> +</fieldset> + +<s:form id="REFERENTIAL" namespace="/exportDb" method="POST" + cssClass="hidden exportDbMode"> + <fieldset> <legend> <s:text name="echobase.legend.exportDb.configuration.files"/> </legend> + <div class="cleanBoth help"> + <s:a href="%{getDocumentation('importDb.html','export-referential')}" + target="doc"> + <s:text name="echobase.action.show.exportDb.documentation"/> + </s:a> + </div> + <br/> + + <s:hidden key="model.exportDbMode" value="REFERENTIAL" label=''/> <s:textfield key="model.fileName" required="true" size="100" label="%{getText('echobase.label.exportDbFileName')} (*)"/> @@ -41,6 +77,105 @@ </div> </fieldset> <br/> - <s:submit action="configure" value='%{getText("echobase.action.export")}'/> + <s:submit action="configureReferential" + value='%{getText("echobase.action.export")}'/> +</s:form> + + +<s:form id="REFERENTIAL_AND_DATA" namespace="/exportDb" method="POST" + cssClass="hidden exportDbMode"> + + <fieldset> + <legend> + <s:text name="echobase.legend.exportDb.configuration.files"/> + </legend> + + <div class="cleanBoth help"> + <s:a + href="%{getDocumentation('importDb.html','export-referential-and-data')}" + target="doc"> + <s:text name="echobase.action.show.exportDb.documentation"/> + </s:a> + </div> + <br/> + + <s:hidden key="model.exportDbMode" value="REFERENTIAL_AND_DATA" label=''/> + <s:textfield key="model.fileName" required="true" size="100" + label="%{getText('echobase.label.exportDbFileName')} (*)"/> + + <s:checkboxlist list="voyages" key="model.voyageIds" + template="mycheckboxlist" + label="%{getText('echobase.label.voyageToSelect')}"/> + + <div class="cleanBoth"> + (*) <s:text name="echobase.info.exportDb.archive"/> + </div> + </fieldset> + <br/> + <s:submit action="configureReferentialAndData" + value='%{getText("echobase.action.export")}'/> + +</s:form> + + +<s:form id="DATA" namespace="/exportDb" method="POST" + cssClass="hidden exportDbMode"> + + <fieldset> + <legend> + <s:text name="echobase.legend.exportDb.configuration.files"/> + </legend> + + <div class="cleanBoth help"> + <s:a href="%{getDocumentation('importDb.html','export-data')}" + target="doc"> + <s:text name="echobase.action.show.exportDb.documentation"/> + </s:a> + </div> + <br/> + <s:hidden key="model.exportDbMode" value="DATA" label=''/> + <s:textfield key="model.fileName" required="true" size="100" + label="%{getText('echobase.label.exportDbFileName')} (*)"/> + + <s:checkboxlist list="voyages" key="model.voyageIds" + template="mycheckboxlist" + label="%{getText('echobase.label.voyageToSelect')}"/> + + <div class="cleanBoth"> + (*) <s:text name="echobase.info.exportDb.archive"/> + </div> + </fieldset> + <br/> + <s:submit action="configureData" + value='%{getText("echobase.action.export")}'/> +</s:form> + +<s:form id="ALL" namespace="/exportDb" method="POST" + cssClass="hidden exportDbMode"> + + <fieldset> + <legend> + <s:text name="echobase.legend.exportDb.configuration.files"/> + </legend> + + <div class="cleanBoth help"> + <s:a href="%{getDocumentation('importDb.html','export-all')}" + target="doc"> + <s:text name="echobase.action.show.exportDb.documentation"/> + </s:a> + </div> + <br/> + + <s:hidden key="model.exportDbMode" value="ALL" label=''/> + <s:textfield key="model.fileName" required="true" size="100" + label="%{getText('echobase.label.exportDbFileName')} (*)"/> + + <div class="cleanBoth"> + (*) <s:text name="echobase.info.exportDb.archive"/> + </div> + </fieldset> + <br/> + <s:submit action="configureAll" value='%{getText("echobase.action.export")}'/> + </s:form> \ No newline at end of file Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportDb/progress.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportDb/progress.jsp 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportDb/progress.jsp 2012-09-11 12:48:41 UTC (rev 644) @@ -25,8 +25,8 @@ <%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sj" uri="/struts-jquery-tags" %> -<s:url id="url" action="export" namespace="/exportDb"/> -<meta http-equiv="refresh" content="5;url=${url}"/> +<meta http-equiv="refresh" + content='10;url=<s:url action="export" namespace="/exportDb"/>'/> <title><s:text name="echobase.title.exportDbProgress"/></title> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/home.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/home.jsp 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/home.jsp 2012-09-11 12:48:41 UTC (rev 644) @@ -43,22 +43,10 @@ </s:a> </li> <li> - <s:a href="http://forge.codelutin.com/projects/echobase" - target='#forge'> - <s:text name="echobase.info.echoBaseForge"/> + <s:a href="http://forge.codelutin.com/projects/echobase/files" target='#doc'> + <s:text name="echobase.info.downloadFiles"/> </s:a> </li> </ul> </fieldset> </div> - -<s:if test="!workingDbSelected"> - <s:form namespace="/workingDb" action="showList"> - <ul class="toolbar floatLeft"> - <li> - <s:submit theme="simple" action="showList" - key="echobase.action.workingDbconfiguration.connect"/> - </li> - </ul> - </s:form> -</s:if> \ No newline at end of file Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressAcousticImport.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressAcousticImport.jsp 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressAcousticImport.jsp 2012-09-11 12:48:41 UTC (rev 644) @@ -25,8 +25,8 @@ <%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sj" uri="/struts-jquery-tags" %> -<s:url id="url" action="importAcoustic" namespace="/importData"/> -<meta http-equiv="refresh" content="1;url=${url}"/> +<meta http-equiv="refresh" + content='10;url=<s:url action="importAcoustic" namespace="/importData"/>'/> <title> <s:text name="echobase.common.importType.acoustic"/> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressCatchesImport.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressCatchesImport.jsp 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressCatchesImport.jsp 2012-09-11 12:48:41 UTC (rev 644) @@ -25,8 +25,8 @@ <%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sj" uri="/struts-jquery-tags" %> -<s:url id="url" action="importCatches" namespace="/importData"/> -<meta http-equiv="refresh" content="1;url=${url}"/> +<meta http-equiv="refresh" + content='10;url=<s:url action="importCatches" namespace="/importData"/>'/> <title> <s:text name="echobase.common.importType.catches"/> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressCommonImport.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressCommonImport.jsp 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressCommonImport.jsp 2012-09-11 12:48:41 UTC (rev 644) @@ -25,8 +25,8 @@ <%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sj" uri="/struts-jquery-tags" %> -<s:url id="url" action="importCommon" namespace="/importData"/> -<meta http-equiv="refresh" content="1;url=${url}"/> +<meta http-equiv="refresh" + content='1;url=<s:url action="importCommon" namespace="/importData"/>'/> <title> <s:text name="echobase.common.importType.common"/> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressOperationImport.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressOperationImport.jsp 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressOperationImport.jsp 2012-09-11 12:48:41 UTC (rev 644) @@ -25,8 +25,8 @@ <%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sj" uri="/struts-jquery-tags" %> -<s:url id="url" action="importOperation" namespace="/importData"/> -<meta http-equiv="refresh" content="1;url=${url}"/> +<meta http-equiv="refresh" + content='10;url=<s:url action="importOperation" namespace="/importData"/>'/> <title> <s:text name="echobase.common.importType.operation"/> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressResultsImport.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressResultsImport.jsp 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/progressResultsImport.jsp 2012-09-11 12:48:41 UTC (rev 644) @@ -25,8 +25,8 @@ <%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sj" uri="/struts-jquery-tags" %> -<s:url id="url" action="importResults" namespace="/importData"/> -<meta http-equiv="refresh" content="1;url=${url}"/> +<meta http-equiv="refresh" + content='10;url=<s:url action="importResults" namespace="/importData"/>'/> <title> <s:text name="echobase.common.importType.results"/> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importDb/configure.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importDb/configure.jsp 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importDb/configure.jsp 2012-09-11 12:48:41 UTC (rev 644) @@ -26,7 +26,6 @@ <title><s:text name="echobase.title.importDb"/></title> - <script type="text/javascript"> jQuery(document).ready(function () { @@ -44,69 +43,60 @@ }); </script> -<s:form namespace="/importDb" method="POST" enctype="multipart/form-data"> +<fieldset> + <legend> + <s:text name="echobase.legend.importDb.configuration.selectImportDbMode"/> + </legend> + <s:radio id='mode' key='model.importDbMode' list="modes" cssClass="cleanBoth" + label='%{getText("echobase.common.importDbMode")}' + required="true" template="myradiomap"/> +</fieldset> - <fieldset> - <legend> - <s:text name="echobase.legend.importDb.configuration.selectImportDbMode"/> - </legend> - <s:radio key='model.importDbMode' list="modes" cssClass="cleanBoth" - label='%{getText("echobase.common.importDbMode")}' - required="true" template="myradiomap"/> - </fieldset> - -</s:form> - <s:form id="REFERENTIAL" namespace="/importDb" method="POST" enctype="multipart/form-data" cssClass="hidden importDbMode"> <fieldset> <legend> - <s:text name="echobase.legend.importDb.configuration.referentialMode"/> + <s:text name="echobase.legend.importDb.configuration"/> </legend> - <div class="cleanBoth help"> - <s:a href="%{getDocumentation('importDb.html','referential')}" + <s:a href="%{getDocumentation('importDb.html','import-referential')}" target="doc"> <s:text name="echobase.action.show.importDb.documentation"/> </s:a> </div> <br/> <s:hidden key="model.importDbMode" value="REFERENTIAL" label=''/> + <s:file name="input" required="true" key="echobase.common.importDbFile"/> - <s:file name="input" required="true" - key="echobase.common.importDbFile"/> - </fieldset> <br/> - <s:submit action="configure-referential" + <s:submit action="configureReferential" value='%{getText("echobase.action.import")}'/> </s:form> -<s:form id="VOYAGE" namespace="/importDb" method="POST" +<s:form id="DATA" namespace="/importDb" method="POST" enctype="multipart/form-data" cssClass="hidden importDbMode"> <fieldset> <legend> - <s:text name="echobase.legend.importDb.configuration.legacyVoyageMode"/> + <s:text name="echobase.legend.importDb.configuration"/> </legend> <div class="cleanBoth help"> - <s:a href="%{getDocumentation('importDb.html','voyage')}" + <s:a href="%{getDocumentation('importDb.html','data')}" target="doc"> <s:text name="echobase.action.show.importDb.documentation"/> </s:a> </div> <br/> - <s:hidden key="model.importDbMode" value="VOYAGE" label=''/> + <s:hidden key="model.importDbMode" value="DATA" label=''/> + <s:file name="input" required="true" key="echobase.common.importDbFile"/> - <s:file name="input" required="true" - key="echobase.common.importDbFile"/> - </fieldset> <br/> - <s:submit action="configure-voyage" + <s:submit action="configureData" value='%{getText("echobase.action.import")}'/> </s:form> @@ -115,7 +105,7 @@ <fieldset> <legend> - <s:text name="echobase.legend.importDb.configuration.freeMode"/> + <s:text name="echobase.legend.importDb.configuration"/> </legend> <div class="cleanBoth help"> @@ -126,11 +116,10 @@ </div> <br/> <s:hidden key="model.importDbMode" value="FREE" label=''/> - <s:file name="input" required="true" key="echobase.common.importDbFile"/> </fieldset> <br/> - <s:submit action="configure-free" + <s:submit action="configureFree" value='%{getText("echobase.action.import")}'/> </s:form> \ No newline at end of file Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importDb/progress.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importDb/progress.jsp 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importDb/progress.jsp 2012-09-11 12:48:41 UTC (rev 644) @@ -25,7 +25,8 @@ <%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sj" uri="/struts-jquery-tags" %> -<meta http-equiv="refresh" content="10;url=<s:url action="import" namespace="/importDb"/>"/> +<meta http-equiv="refresh" + content="10;url=<s:url action="import" namespace="/importDb"/>"/> <title><s:text name="echobase.title.importDbProgress"/></title> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/removeData/deleteProgress.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/removeData/deleteProgress.jsp 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/removeData/deleteProgress.jsp 2012-09-11 12:48:41 UTC (rev 644) @@ -26,7 +26,7 @@ <%@ taglib prefix="sj" uri="/struts-jquery-tags" %> <meta http-equiv="refresh" - content='5;url=<s:url action="delete" namespace="/removeData"/>'/> + content='10;url=<s:url action="delete" namespace="/removeData"/>'/> <title><s:text name="echobase.title.removeDataProgress"/></title> Modified: trunk/echobase-ui/src/main/webapp/css/screen.css =================================================================== --- trunk/echobase-ui/src/main/webapp/css/screen.css 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/echobase-ui/src/main/webapp/css/screen.css 2012-09-11 12:48:41 UTC (rev 644) @@ -406,7 +406,7 @@ } .containerHomeSize { - width:645px; + width:85%; } form#login .wwlbl { Added: trunk/src/site/en/rst/importDb.rst =================================================================== --- trunk/src/site/en/rst/importDb.rst (rev 0) +++ trunk/src/site/en/rst/importDb.rst 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,128 @@ +.. - +.. * #%L +.. * EchoBase +.. * $Id$ +.. * $HeadURL$ +.. * %% +.. * Copyright (C) 2011 - 2012 Ifremer, Codelutin +.. * %% +.. * This program is free software: you can redistribute it and/or modify +.. * it under the terms of the GNU Affero General Public License as published by +.. * the Free Software Foundation, either version 3 of the License, or +.. * (at your option) any later version. +.. * +.. * This program is distributed in the hope that it will be useful, +.. * but WITHOUT ANY WARRANTY; without even the implied warranty of +.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.. * GNU General Public License for more details. +.. * +.. * You should have received a copy of the GNU Affero General Public License +.. * along with this program. If not, see <http://www.gnu.org/licenses/>. +.. * #L% +.. - +========================== +Import / Export d'une base +========================== + +.. contents:: Table des matières + :depth: 2 + +.. sectnum:: + :start: 1 + :depth: 2 + +Abstract +======== + +Ce document explique comment importer / exporter des bases au format EchoBase. + +Export EchoBase +--------------- + +EchoBase permet d'export une partie ou l'ensemble d'une base de travial au +format *.echobase* qui est ensuite réimportable dans une autre instance d'EchoBase. + +- Cliquer sur le menu *Exporter une base*. + +- Configurer l'export + +Une fichier au format *.echobase* sera créé, il est ensuite possible de +l'importer sur une autre instance d'EchoBase. + +Il existe plusieurs modes d'export que nous détaillons ci-dessous. + +Export referential +~~~~~~~~~~~~~~~~~~ + +Dans ce mode on exporte uniquement le référentiel de la base de travail. + +Il vous suffit de renseigner le nom du fichier d'export (l'extension +*.echobase*) sera automatiquement rajoutée, puis de cliquer sur *Exporter*. + +Une fois l'export réalisé, le fichier sera téléchargeable. + +Export referential and data +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Dans ce mode on exporte le référentiel et les données sélectionnées +de la base de travail. + +Il vous suffit de renseigner le nom du fichier d'export (l'extension +*.echobase*) sera automatiquement rajoutée, de sélectionner les données +à exporter puis de cliquer sur *Exporter*. + +Une fois l'export réalisé, le fichier sera téléchargeable. + + +Export data +~~~~~~~~~~~ + +Dans ce mode on exporte uniquement les données sélectionnées de la base de +travail. + +Il vous suffit de renseigner le nom du fichier d'export (l'extension +*.echobase*) sera automatiquement rajoutée, de sélectionner les données +à exporter puis de cliquer sur *Exporter*. + +Une fois l'export réalisé, le fichier sera téléchargeable. + +Export All +~~~~~~~~~~ + +Dans ce mode, on exporte toute la base de travail. + +Il vous suffit de renseigner le nom du fichier d'export (l'extension +*.echobase*) sera automatiquement rajoutée, puis de cliquer sur *Exporter*. + +Une fois l'export réalisé, le fichier sera téléchargeable. + +Import EchoBase +--------------- + +Tout export de base au format *.echobase* est ensuite réimportable sur n'importe +qu'elle autre instance d'EchoBase. + +TODO Expliquer le fonctionnement de l'import et la politique des collisions... + +Import Referential +~~~~~~~~~~~~~~~~~~ + +Ce mode permet d'importer uniquement des données du référentiel. + +Il suffit de renseigner le fichier *.echobase* à importer et de lancer l'import. + +Import Data +~~~~~~~~~~~ + +Ce mode permet d'importer uniquement des données thématiques. + +Il suffit de renseigner le fichier *.echobase* à importer et de lancer l'import. + +Import Free +~~~~~~~~~~~ + +Ce mode permet d'importer n'importe quelle type de données (référentiel ou/et +données thématiques). + +Il suffit de renseigner le fichier *.echobase* à importer et de lancer l'import. + Property changes on: trunk/src/site/en/rst/importDb.rst ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/src/site/rst/importDb.rst =================================================================== --- trunk/src/site/rst/importDb.rst (rev 0) +++ trunk/src/site/rst/importDb.rst 2012-09-11 12:48:41 UTC (rev 644) @@ -0,0 +1,128 @@ +.. - +.. * #%L +.. * EchoBase +.. * $Id$ +.. * $HeadURL$ +.. * %% +.. * Copyright (C) 2011 - 2012 Ifremer, Codelutin +.. * %% +.. * This program is free software: you can redistribute it and/or modify +.. * it under the terms of the GNU Affero General Public License as published by +.. * the Free Software Foundation, either version 3 of the License, or +.. * (at your option) any later version. +.. * +.. * This program is distributed in the hope that it will be useful, +.. * but WITHOUT ANY WARRANTY; without even the implied warranty of +.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.. * GNU General Public License for more details. +.. * +.. * You should have received a copy of the GNU Affero General Public License +.. * along with this program. If not, see <http://www.gnu.org/licenses/>. +.. * #L% +.. - +========================== +Import / Export d'une base +========================== + +.. contents:: Table des matières + :depth: 2 + +.. sectnum:: + :start: 1 + :depth: 2 + +Abstract +======== + +Ce document explique comment importer / exporter des bases au format EchoBase. + +Export EchoBase +--------------- + +EchoBase permet d'export une partie ou l'ensemble d'une base de travial au +format *.echobase* qui est ensuite réimportable dans une autre instance d'EchoBase. + +- Cliquer sur le menu *Exporter une base*. + +- Configurer l'export + +Une fichier au format *.echobase* sera créé, il est ensuite possible de +l'importer sur une autre instance d'EchoBase. + +Il existe plusieurs modes d'export que nous détaillons ci-dessous. + +Export referential +~~~~~~~~~~~~~~~~~~ + +Dans ce mode on exporte uniquement le référentiel de la base de travail. + +Il vous suffit de renseigner le nom du fichier d'export (l'extension +*.echobase*) sera automatiquement rajoutée, puis de cliquer sur *Exporter*. + +Une fois l'export réalisé, le fichier sera téléchargeable. + +Export referential and data +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Dans ce mode on exporte le référentiel et les données sélectionnées +de la base de travail. + +Il vous suffit de renseigner le nom du fichier d'export (l'extension +*.echobase*) sera automatiquement rajoutée, de sélectionner les données +à exporter puis de cliquer sur *Exporter*. + +Une fois l'export réalisé, le fichier sera téléchargeable. + + +Export data +~~~~~~~~~~~ + +Dans ce mode on exporte uniquement les données sélectionnées de la base de +travail. + +Il vous suffit de renseigner le nom du fichier d'export (l'extension +*.echobase*) sera automatiquement rajoutée, de sélectionner les données +à exporter puis de cliquer sur *Exporter*. + +Une fois l'export réalisé, le fichier sera téléchargeable. + +Export All +~~~~~~~~~~ + +Dans ce mode, on exporte toute la base de travail. + +Il vous suffit de renseigner le nom du fichier d'export (l'extension +*.echobase*) sera automatiquement rajoutée, puis de cliquer sur *Exporter*. + +Une fois l'export réalisé, le fichier sera téléchargeable. + +Import EchoBase +--------------- + +Tout export de base au format *.echobase* est ensuite réimportable sur n'importe +qu'elle autre instance d'EchoBase. + +TODO Expliquer le fonctionnement de l'import et la politique des collisions... + +Import Referential +~~~~~~~~~~~~~~~~~~ + +Ce mode permet d'importer uniquement des données du référentiel. + +Il suffit de renseigner le fichier *.echobase* à importer et de lancer l'import. + +Import Data +~~~~~~~~~~~ + +Ce mode permet d'importer uniquement des données thématiques. + +Il suffit de renseigner le fichier *.echobase* à importer et de lancer l'import. + +Import Free +~~~~~~~~~~~ + +Ce mode permet d'importer n'importe quelle type de données (référentiel ou/et +données thématiques). + +Il suffit de renseigner le fichier *.echobase* à importer et de lancer l'import. + Property changes on: trunk/src/site/rst/importDb.rst ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/src/site/site_en.xml =================================================================== --- trunk/src/site/site_en.xml 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/src/site/site_en.xml 2012-09-11 12:48:41 UTC (rev 644) @@ -97,17 +97,20 @@ <item name="English Version" href="./index.html"/> </menu> - <menu name="Utilisateur"> + <menu name="User"> <item name="Home" href="index.html"/> <item name="Installation" href="install.html"/> <item name="Portable Application" href="embedded.html"/> <item name="Imports" href="imports.html"/> - <item name="Model" href="model.html"/> + <item name="Import/Export with EchoBase format" href="importDb.html"/> <item name="Download" href="http://forge.codelutin.com/projects/echobase/files"/> + </menu> + + <menu name="Dev"> + <item name="Model" href="model.html"/> <item name="Roadmap" href="http://forge.codelutin.com/projects/echobase/roadmap"/> - <item name="Changelogs" href="changes-report.html"/> </menu> Modified: trunk/src/site/site_fr.xml =================================================================== --- trunk/src/site/site_fr.xml 2012-09-10 16:00:37 UTC (rev 643) +++ trunk/src/site/site_fr.xml 2012-09-11 12:48:41 UTC (rev 644) @@ -103,15 +103,20 @@ <item name="Installation" href="install.html"/> <item name="Application embarquée" href="embedded.html"/> <item name="Imports" href="imports.html"/> - <item name="Modèle" href="model.html"/> + <item name="Import/Export au format EchoBase" href="importDb.html"/> <item name="Téléchargement" href="http://forge.codelutin.com/projects/echobase/files"/> + </menu> + + <menu name="Dev"> + <item name="Modèle" href="model.html"/> <item name="Roadmap" href="http://forge.codelutin.com/projects/echobase/roadmap"/> - <item name="Historique des versions" href="changes-report.html"/> </menu> + + <menu ref="reports"/> <footer>
participants (1)
-
tchemit@users.forge.codelutin.com