Author: tchemit Date: 2012-09-10 16:06:45 +0200 (Mon, 10 Sep 2012) New Revision: 641 Url: http://forge.codelutin.com/repositories/revision/echobase/641 Log: refs #1437: Suppression des imports (revue des algorithmes de suppression) refs #1485: Permettre une import EchoBase plus cibl?\195?\169 Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbMode.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/LegacyVoyageRemoveDataStrategy.java Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/ImportType.java 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/exportdb/ExportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AbstractImportDataService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/DefaultImportStrategy.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/ImportDbService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AbstractRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AcousticRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CatchesRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonAllRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonTransectRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/OperationRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultEsduRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultMapRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultRegionRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultVoyageRemoveDataStrategy.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/importdata/AbstractImportDataServiceIT.java trunk/echobase-ui/pom.xml 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/java/fr/ifremer/echobase/ui/actions/removeData/ConfirmDelete.java 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/header.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/home.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/importDb/result.jsp trunk/echobase-ui/src/main/webapp/css/screen.css Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/ImportType.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/ImportType.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/ImportType.java 2012-09-10 14:06:45 UTC (rev 641) @@ -35,6 +35,9 @@ */ public enum ImportType implements I18nAble { + /** Import a legacy Voyage with all his data. */ + LEGACY_VOYAGE(n_("echobase.common.importType.legacyVoyage")), + /** Import Voyage / Transit / Transect. */ COMMON_ALL(n_("echobase.common.importType.commonDataAll")), 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 10:00:46 UTC (rev 640) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java 2012-09-10 14:06:45 UTC (rev 641) @@ -223,11 +223,23 @@ } } - protected final void flushTransaction() throws TopiaException { + protected final void flushTransaction(String errorMessage) { TopiaContextImplementor tx = (TopiaContextImplementor) getTransaction(); - tx.getHibernate().flush(); + try { + tx.getHibernate().flush(); + } catch (TopiaException e) { + throw new EchoBaseTechnicalException(errorMessage, e); + } } + protected final void clearCache() { + try { + getTransaction().clearCache(); + } catch (TopiaException e) { + throw new EchoBaseTechnicalException("Could not clear hibernate cache", e); + } + } + protected <E extends TopiaEntity> TopiaContext getTransaction(Class<E> entitytype) { TopiaContext result; if (EchobaseInternalEntity.class.isAssignableFrom(entitytype)) { 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 10:00:46 UTC (rev 640) +++ trunk/echobase-domain/src/main/resources/i18n/echobase-domain_en_GB.properties 2012-09-10 14:06:45 UTC (rev 641) @@ -4,6 +4,7 @@ echobase.common.importType.catches=Fishing data import echobase.common.importType.commonDataAll=Voyage / Transit / Transects import echobase.common.importType.commonDataTransect=Transects import +echobase.common.importType.legacyVoyage=Legacy 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 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 10:00:46 UTC (rev 640) +++ trunk/echobase-domain/src/main/resources/i18n/echobase-domain_fr_FR.properties 2012-09-10 14:06:45 UTC (rev 641) @@ -4,8 +4,9 @@ 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.legacyVoyage=Import Campagne "ancienne" echobase.common.importType.operation=Import des opérations -echobase.common.importType.resultsEsdu=Import des résultats des cellules de type «ESDU” +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 Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportService.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/exportdb/ExportService.java 2012-09-10 14:06:45 UTC (rev 641) @@ -23,14 +23,12 @@ */ package fr.ifremer.echobase.services.exportdb; -import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.services.DbEditorService; import fr.ifremer.echobase.services.DecoratorService; import fr.ifremer.echobase.services.EchoBaseServiceSupport; 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.csv.EntityCsvModel; import org.nuiton.topia.persistence.csv.out.EntityAssociationExportModel; @@ -56,74 +54,6 @@ /** Logger. */ private static final Log log = LogFactory.getLog(ExportService.class); -// public static final TimeLog TIME_LOG = new TimeLog(ExportService.class); - -// public ExportModelFactory<EchoBaseEntityEnum> getDefaultExportFactory() { -// return defaultExportFactory; -// } - -// public ExportModelFactory<EchoBaseEntityEnum> getAsSeenExportFactory() { -// return asSeenExportFactory; -// } - -// @Override -// public <E extends TopiaEntity> ExportModel<E> buildForExport(AssociationMeta<EchoBaseEntityEnum> associationMeta) { -// -// ExportModel<E> model = EntityAssociationExportModel.newExportModel( -// getConfiguration().getCsvSeparator(), -// associationMeta -// ); -// return model; -// } -// -// @Override -// public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta<EchoBaseEntityEnum> meta, boolean asSeen) { -// -// EntityCsvModel<EchoBaseEntityEnum, E> model; -// -// if (asSeen) { -// -// // no need to have topiaId as first column -// model = EntityCsvModel.newModel( -// getConfiguration().getCsvSeparator(), -// meta -// ); -// } else { -// -// // normla export add topiaId column -// model = EntityCsvModel.newModel( -// getConfiguration().getCsvSeparator(), -// meta, -// TopiaEntity.TOPIA_ID -// ); -// } -// -// DecoratorService service = getService(DecoratorService.class); -// -// for (ColumnMeta columnMeta : meta) { -// String propertyName = columnMeta.getName(); -// Class<?> type = columnMeta.getType(); -// if (columnMeta.isFK()) { -// -// Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; -// if (asSeen) { -// -// // export decorated foreign key value -// Decorator<TopiaEntity> decorator = -// service.getDecorator(getLocale(), entityType, null); -// model.addDecoratedForeignKeyForExport(propertyName, propertyName, decorator); -// } else { -// -// // export foreign key value as his topiaId -// model.addForeignKeyForExport(propertyName, entityType); -// } -// } else { -// model.addDefaultColumn(propertyName, type); -// } -// } -// return model; -// } - public String exportData(TableMeta<EchoBaseEntityEnum> meta, boolean asSeen) { if (log.isInfoEnabled()) { @@ -133,14 +63,6 @@ getModelFactory(asSeen), defaultPrepareDataForExport); return result; -// -// Export<TopiaEntity> export = prepareExport(tableMeta, asSeen); -// -// try { -// return export.toString(Charsets.UTF_8); -// } catch (Exception eee) { -// throw new EchoBaseTechnicalException("Can not export datas", eee); -// } } public void exportData(TableMeta<EchoBaseEntityEnum> meta, File file) { @@ -155,19 +77,6 @@ file); clearCache(); -// if (log.isInfoEnabled()) { -// log.info("Export table " + tableMeta + " to " + file); -// } -// long s1 = TimeLog.getTime(); -// Export<TopiaEntity> export = prepareExport(tableMeta, false); -// TIME_LOG.log(s1, "exportData::prepareExport"); -// long s2 = TimeLog.getTime(); -// try { -// export.write(file, Charsets.UTF_8); -// } catch (Exception eee) { -// throw new EchoBaseTechnicalException("Can not export datas", eee); -// } -// TIME_LOG.log(s2, "exportData::exportToFile"); } @@ -182,20 +91,6 @@ file); clearCache(); -// if (log.isInfoEnabled()) { -// log.info("Export association " + associationMeta + " to " + file); -// } -// long s1 = TimeLog.getTime(); -// Export<TopiaEntity> export = prepareExport(associationMeta); -// TIME_LOG.log(s1, "exportData::prepareExport"); -// -// long s2 = TimeLog.getTime(); -// try { -// export.write(file, Charsets.UTF_8); -// } catch (Exception eee) { -// throw new EchoBaseTechnicalException("Can not export datas", eee); -// } -// TIME_LOG.log(s2, "exportData::exportToFile"); } public ExportModelFactory<EchoBaseEntityEnum> getModelFactory(boolean asSeen) { @@ -208,35 +103,6 @@ return result; } -// protected Export<TopiaEntity> prepareExport(TableMeta<EchoBaseEntityEnum> tableMeta, boolean asSeen) { -// -// List<TopiaEntity> datas = defaultPrepareDataForExport.prepareData(tableMeta); -// -// ExportModel<TopiaEntity> model; -// if (asSeen) { -// model = asSeenExportFactory.buildForExport(tableMeta); -// } else { -// model = defaultExportFactory.buildForExport(tableMeta); -// -// } -// return Export.newExport(model, datas); -// } - -// protected Export<TopiaEntity> prepareExport(AssociationMeta<EchoBaseEntityEnum> associationMeta) { -// -// List<TopiaEntity> datas = defaultPrepareDataForExport.prepareExport(associationMeta); -// ExportModel<TopiaEntity> model = defaultExportFactory.buildForExport(associationMeta); -// return Export.newExport(model, datas); -// } - - protected void clearCache() { - try { - getTransaction().clearCache(); - } catch (TopiaException e) { - throw new EchoBaseTechnicalException("Could not clear db cache", e); - } - } - private ExportModelFactory<EchoBaseEntityEnum> defaultExportFactory = new ExportModelFactory<EchoBaseEntityEnum>() { @Override Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AbstractImportDataService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AbstractImportDataService.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AbstractImportDataService.java 2012-09-10 14:06:45 UTC (rev 641) @@ -282,14 +282,10 @@ if (rowNumber % 1000 == 0) { // flush each 1000 imported rows String message = getImportMessage(configuration, inputFile); - try { - long s0 = TimeLog.getTime(); - flushTransaction(); - TIME_LOG.log(s0, message); - } catch (TopiaException e) { - throw new EchoBaseTechnicalException( - "Could not flush transaction " + message, e); - } + long s0 = TimeLog.getTime(); + flushTransaction("Could not flush transaction " + message); + TIME_LOG.log(s0, message); + } } Modified: 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 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/DefaultImportStrategy.java 2012-09-10 14:06:45 UTC (rev 641) @@ -68,7 +68,8 @@ } @Override - public <E extends TopiaEntity> void importTable(TableMeta<EchoBaseEntityEnum> meta, Import<E> importer, + 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()); @@ -76,6 +77,18 @@ } @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 { 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 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbConfiguration.java 2012-09-10 14:06:45 UTC (rev 641) @@ -48,6 +48,8 @@ protected final InputFile input; + protected ImportDbMode importDbMode; + public ImportDbConfiguration(ProgressionModel progressionModel, Locale locale) { super(progressionModel); @@ -66,10 +68,18 @@ return input; } + public ImportDbMode getImportDbMode() { + return importDbMode; + } + public void setWorkingDirectory(File workingDirectory) { this.workingDirectory = workingDirectory; } + public void setImportDbMode(ImportDbMode importDbMode) { + this.importDbMode = importDbMode; + } + @Override public void destroy() throws IOException { if (workingDirectory != null) { Added: 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 (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbMode.java 2012-09-10 14:06:45 UTC (rev 641) @@ -0,0 +1,58 @@ +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.I18nAble; +import fr.ifremer.echobase.entities.ImportType; + +import static org.nuiton.i18n.I18n.n_; + +/** + * Select import db mode. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public enum ImportDbMode implements I18nAble { + + /** Import only referential. */ + REFERENTIAL(n_("echobase.common.importDbMode.referential")), + + /** Import only data. */ + LEGACY_VOYAGE(ImportType.LEGACY_VOYAGE.getI18nKey()), + + /** Import what you want. */ + FREE(n_("echobase.common.importDbMode.free")); + + private final String i18nKey; + + ImportDbMode(String i18nKey) { + this.i18nKey = i18nKey; + } + + @Override + public String getI18nKey() { + return i18nKey; + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbMode.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/ImportDbService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbService.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdb/ImportDbService.java 2012-09-10 14:06:45 UTC (rev 641) @@ -24,11 +24,16 @@ package fr.ifremer.echobase.services.importdb; import com.google.common.collect.Lists; -import fr.ifremer.echobase.persistence.EchoBaseDbMeta; 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.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; @@ -39,6 +44,7 @@ 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; @@ -64,8 +70,230 @@ public static final TimeLog TIME_LOG = new TimeLog(ImportDbService.class); /** - * Import a complete db from the given zip file. + * 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 { + + 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(); + } + } + + /** + * 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.LEGACY_VOYAGE, + ImportLog.PROPERTY_IMPORT_USER, user.getEmail(), + ImportLog.PROPERTY_IMPORT_DATE, newDate(), + ImportLog.PROPERTY_IMPORT_TYPE, "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(); + } + } + + /** + * 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 @@ -87,13 +315,9 @@ EchoBaseDbMeta dbMeta = getDbMeta(); - Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = TopiaCsvImports.discoverEntries( - "echobase/", dbMeta.getAllTables(), - zipFile, missingEntries); + Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> tables = getTables(zipFile, missingEntries, dbMeta); - Map<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> associations = TopiaCsvImports.discoverEntries( - "echobase/", dbMeta.getAllAssociations(), - zipFile, missingEntries); + Map<AssociationMeta<EchoBaseEntityEnum>, ZipEntry> associations = getAssociations(zipFile, missingEntries, dbMeta); if (computeSteps) { int size = tables.size() + associations.size(); @@ -117,7 +341,7 @@ 1000 ); - importTables(strategy, model, zipFile, tables, commitAfterEachFile); + importTables(strategy, model, zipFile, tables, commitAfterEachFile, false); importAssociations(strategy, model, zipFile, associations); @@ -142,12 +366,31 @@ } } - private void importTables(DefaultImportStrategy strategy, - ImportDbConfiguration model, - ZipFile zipFile, - Map<TableMeta<EchoBaseEntityEnum>, ZipEntry> entriestoConsume, - boolean commitAfterEachFile) throws IOException, TopiaException { + 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()) { @@ -161,7 +404,8 @@ false ); - Reader reader = IOUtils.toBufferedReader(new InputStreamReader(zipFile.getInputStream(value))); + Reader reader = IOUtils.toBufferedReader( + new InputStreamReader(zipFile.getInputStream(value))); try { long s0 = TimeLog.getTime(); @@ -169,15 +413,25 @@ if (log.isInfoEnabled()) { log.info("Will import " + entryDef); } - TopiaCsvImports.importTable(reader, - strategy, - entryDef, - csvResult - ); + 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(); + flushTransaction("Could not flush " + entryDef + " to db."); TIME_LOG.log(s0, "importFile::flushTransaction"); } finally { @@ -188,8 +442,12 @@ "Could not commit db import from file " + zipFile.getName() + "#" + entryDef.getFilename()); } + + clearCache(); } } + + return result; } private void importAssociations(DefaultImportStrategy strategy, @@ -226,7 +484,7 @@ s0 = TIME_LOG.log(s0, "importFile::done"); - flushTransaction(); + flushTransaction("Could not flush associations to db."); TIME_LOG.log(s0, "importFile::flushTransaction"); } finally { Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataService.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataService.java 2012-09-10 14:06:45 UTC (rev 641) @@ -38,6 +38,7 @@ import fr.ifremer.echobase.services.removedata.strategy.CatchesRemoveDataStrategy; import fr.ifremer.echobase.services.removedata.strategy.CommonAllRemoveDataStrategy; import fr.ifremer.echobase.services.removedata.strategy.CommonTransectRemoveDataStrategy; +import fr.ifremer.echobase.services.removedata.strategy.LegacyVoyageRemoveDataStrategy; import fr.ifremer.echobase.services.removedata.strategy.OperationRemoveDataStrategy; import fr.ifremer.echobase.services.removedata.strategy.ResultEsduRemoveDataStrategy; import fr.ifremer.echobase.services.removedata.strategy.ResultMapRemoveDataStrategy; @@ -74,6 +75,7 @@ public static Class<? extends AbstractRemoveDataStrategy> getStrategy(ImportType importType) { if (strategies == null) { strategies = Maps.newEnumMap(ImportType.class); + strategies.put(ImportType.LEGACY_VOYAGE, LegacyVoyageRemoveDataStrategy.class); strategies.put(ImportType.COMMON_ALL, CommonAllRemoveDataStrategy.class); strategies.put(ImportType.COMMON_TRANSECT, CommonTransectRemoveDataStrategy.class); strategies.put(ImportType.OPERATION, OperationRemoveDataStrategy.class); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AbstractRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AbstractRemoveDataStrategy.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AbstractRemoveDataStrategy.java 2012-09-10 14:06:45 UTC (rev 641) @@ -23,15 +23,25 @@ * #L% */ +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.entities.data.Category; +import fr.ifremer.echobase.entities.data.CategoryDAO; +import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.entities.data.LengthAgeKey; +import fr.ifremer.echobase.entities.data.LengthWeightKey; +import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.services.EchoBaseServiceSupport; import fr.ifremer.echobase.services.removedata.RemoveDataConfiguration; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; +import java.util.Collection; +import java.util.List; import java.util.Set; /** @@ -48,7 +58,7 @@ return importLabel; } - protected abstract void removeData(String id); + protected abstract void removeData(String id) throws TopiaException; public abstract Set<ImportType> getPossibleSubImportType(); @@ -60,16 +70,15 @@ currentIndex++; if (currentIndex % 1000 == 0) { - try { - flushTransaction(); - } catch (TopiaException e) { - throw new EchoBaseTechnicalException( - "Could not flush transaction", e); - } + flushTransaction("Could not flush transaction"); } model.incrementsProgression(); - removeData(importId); + try { + removeData(importId); + } catch (TopiaException e) { + throw new EchoBaseTechnicalException(e); + } } } @@ -103,4 +112,79 @@ " from service " + this); } + protected void removeLengthWeightKey(LengthWeightKey lengthWeightKey, + Voyage entity) throws TopiaException { + TopiaDAO<LengthWeightKey> dao = getDAO(LengthWeightKey.class); + dao.delete(lengthWeightKey); + + if (entity != null) { + + // remove it from the voyage + entity.removeLengthWeightKey(lengthWeightKey); + } + } + + protected void removeLengthAgeKey(LengthAgeKey lengthAgeKey, + Voyage entity) throws TopiaException { + TopiaDAO<LengthAgeKey> dao = getDAO(LengthAgeKey.class); + dao.delete(lengthAgeKey); + + if (entity != null) { + + // remove it from the voyage + entity.removeLengthAgeKey(lengthAgeKey); + } + } + + protected void removeEchotype(Echotype echotype, + Voyage entity) throws TopiaException { + + // delete all category + CategoryDAO categoryDAO = getDAO(Category.class, CategoryDAO.class); + List<Category> allByEchotype = categoryDAO.findAllByEchotype(echotype); + categoryDAO.deleteAll(allByEchotype); + + // delete echotype + TopiaDAO<Echotype> dao = getDAO(Echotype.class); + dao.delete(echotype); + + if (entity != null) { + + // remove it from the voyage + entity.removeEchotype(echotype); + } + } + + protected void removeVoyage(TopiaDAO<Voyage> dao, Voyage entity) throws TopiaException { + + Collection<LengthWeightKey> lengthWeightKeys = Lists.newArrayList(entity.getLengthWeightKey()); + Collection<LengthAgeKey> lengthAgeKeys = Lists.newArrayList(entity.getLengthAgeKey()); + Set<Echotype> echotypes = Sets.newHashSet(entity.getEchotype()); + + // clean this data + entity.clearLengthWeightKey(); + entity.clearLengthAgeKey(); + entity.clearEchotype(); + + // delete voyage + delete(dao, entity); + + flushTransaction("Could not flush voyage deletion"); + + // delete all lengthWeightKeys + for (LengthWeightKey lengthWeightKey : lengthWeightKeys) { + removeLengthWeightKey(lengthWeightKey, null); + } + + // delete all lengthAgeKeys + for (LengthAgeKey lengthAgeKey : lengthAgeKeys) { + removeLengthAgeKey(lengthAgeKey, null); + } + + // delete all echotypes + for (Echotype echotype : echotypes) { + removeEchotype(echotype, null); + } + } + } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AcousticRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AcousticRemoveDataStrategy.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AcousticRemoveDataStrategy.java 2012-09-10 14:06:45 UTC (rev 641) @@ -30,7 +30,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.util.HashSet; import java.util.Set; /** @@ -79,12 +78,10 @@ @Override public Set<ImportType> getPossibleSubImportType() { - HashSet<ImportType> result = Sets.newHashSet(ImportType.values()); - result.remove(ImportType.COMMON_ALL); - result.remove(ImportType.COMMON_TRANSECT); - result.remove(ImportType.OPERATION); - result.remove(ImportType.CATCHES); - result.remove(ImportType.ACOUSTIC); + Set<ImportType> result = Sets.newHashSet(ImportType.RESULT_VOYAGE, + ImportType.RESULT_ESDU, + ImportType.RESULT_MAP, + ImportType.RESULT_REGION); return result; } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CatchesRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CatchesRemoveDataStrategy.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CatchesRemoveDataStrategy.java 2012-09-10 14:06:45 UTC (rev 641) @@ -23,13 +23,12 @@ * #L% */ -import com.google.common.collect.Sets; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Sample; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.util.HashSet; +import java.util.Collections; import java.util.Set; /** @@ -67,11 +66,7 @@ @Override public Set<ImportType> getPossibleSubImportType() { - HashSet<ImportType> result = Sets.newHashSet(ImportType.values()); - result.remove(ImportType.COMMON_ALL); - result.remove(ImportType.COMMON_TRANSECT); - result.remove(ImportType.OPERATION); - result.remove(ImportType.CATCHES); + Set<ImportType> result = Collections.emptySet(); return result; } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonAllRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonAllRemoveDataStrategy.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonAllRemoveDataStrategy.java 2012-09-10 14:06:45 UTC (rev 641) @@ -28,8 +28,9 @@ import fr.ifremer.echobase.entities.data.Voyage; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaDAO; -import java.util.HashSet; import java.util.Set; /** @@ -47,7 +48,7 @@ LogFactory.getLog(CommonAllRemoveDataStrategy.class); @Override - protected void removeData(String id) { + protected void removeData(String id) throws TopiaException { if (id.startsWith(Voyage.class.getName())) { @@ -58,18 +59,33 @@ } } - protected void removeVoyage(String id) { - Voyage entity = removeEntity(id); + protected void removeVoyage(String id) throws TopiaException { + + // get dao + TopiaDAO<Voyage> dao = getDAOFromId(id); + + // get entity to delete + Voyage entity = findById(dao, id); + + // delete it + removeVoyage(dao, entity); + if (log.isInfoEnabled()) { log.info("Voyage " + entity.getTopiaId() + " was removed"); } } + @Override public Set<ImportType> getPossibleSubImportType() { - HashSet<ImportType> result = Sets.newHashSet(ImportType.values()); - result.remove(ImportType.COMMON_ALL); - result.remove(ImportType.COMMON_TRANSECT); + Set<ImportType> result = Sets.newHashSet(ImportType.COMMON_TRANSECT, + ImportType.OPERATION, + ImportType.CATCHES, + ImportType.ACOUSTIC, + ImportType.RESULT_VOYAGE, + ImportType.RESULT_ESDU, + ImportType.RESULT_MAP, + ImportType.RESULT_REGION); return result; } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonTransectRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonTransectRemoveDataStrategy.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonTransectRemoveDataStrategy.java 2012-09-10 14:06:45 UTC (rev 641) @@ -29,7 +29,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.util.HashSet; import java.util.Set; /** @@ -67,9 +66,13 @@ @Override public Set<ImportType> getPossibleSubImportType() { - HashSet<ImportType> result = Sets.newHashSet(ImportType.values()); - result.remove(ImportType.COMMON_ALL); - result.remove(ImportType.COMMON_TRANSECT); + Set<ImportType> result = Sets.newHashSet(ImportType.OPERATION, + ImportType.CATCHES, + ImportType.ACOUSTIC, + ImportType.RESULT_VOYAGE, + ImportType.RESULT_ESDU, + ImportType.RESULT_MAP, + ImportType.RESULT_REGION); return result; } } Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/LegacyVoyageRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/LegacyVoyageRemoveDataStrategy.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/LegacyVoyageRemoveDataStrategy.java 2012-09-10 14:06:45 UTC (rev 641) @@ -0,0 +1,92 @@ +package fr.ifremer.echobase.services.removedata.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.ImportType; +import fr.ifremer.echobase.entities.data.Voyage; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaDAO; + +import java.util.Set; + +/** + * Remove a {@link ImportType#LEGACY_VOYAGE} import. + * <p/> + * Can remove only {@link Voyage}. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +public class LegacyVoyageRemoveDataStrategy extends AbstractRemoveDataStrategy { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(LegacyVoyageRemoveDataStrategy.class); + + @Override + protected void removeData(String id) throws TopiaException { + + if (id.startsWith(Voyage.class.getName())) { + + // remove voyage + removeVoyage(id); + } else { + canNotDealWithId(id); + } + } + + protected void removeVoyage(String id) throws TopiaException { + + // get dao + TopiaDAO<Voyage> dao = getDAOFromId(id); + + // get entity to delete + Voyage entity = findById(dao, id); + + // delete it + removeVoyage(dao, entity); + + if (log.isInfoEnabled()) { + log.info("Voyage " + entity.getTopiaId() + " was removed"); + } + } + + + @Override + public Set<ImportType> getPossibleSubImportType() { + Set<ImportType> result = Sets.newHashSet(ImportType.COMMON_TRANSECT, + ImportType.OPERATION, + ImportType.CATCHES, + ImportType.ACOUSTIC, + ImportType.RESULT_VOYAGE, + ImportType.RESULT_ESDU, + ImportType.RESULT_MAP, + ImportType.RESULT_REGION); + return result; + } + +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/LegacyVoyageRemoveDataStrategy.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/removedata/strategy/OperationRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/OperationRemoveDataStrategy.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/OperationRemoveDataStrategy.java 2012-09-10 14:06:45 UTC (rev 641) @@ -29,7 +29,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.util.HashSet; import java.util.Set; /** @@ -67,10 +66,7 @@ @Override public Set<ImportType> getPossibleSubImportType() { - HashSet<ImportType> result = Sets.newHashSet(ImportType.values()); - result.remove(ImportType.COMMON_ALL); - result.remove(ImportType.COMMON_TRANSECT); - result.remove(ImportType.OPERATION); + Set<ImportType> result = Sets.newHashSet(ImportType.CATCHES); return result; } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultEsduRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultEsduRemoveDataStrategy.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultEsduRemoveDataStrategy.java 2012-09-10 14:06:45 UTC (rev 641) @@ -23,13 +23,12 @@ * #L% */ -import com.google.common.collect.Sets; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Result; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.util.HashSet; +import java.util.Collections; import java.util.Set; /** @@ -67,14 +66,7 @@ @Override public Set<ImportType> getPossibleSubImportType() { - HashSet<ImportType> result = Sets.newHashSet(ImportType.values()); - result.remove(ImportType.COMMON_ALL); - result.remove(ImportType.COMMON_TRANSECT); - result.remove(ImportType.OPERATION); - result.remove(ImportType.CATCHES); - result.remove(ImportType.ACOUSTIC); - result.remove(ImportType.RESULT_VOYAGE); - result.remove(ImportType.RESULT_ESDU); + Set<ImportType> result = Collections.emptySet(); return result; } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultMapRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultMapRemoveDataStrategy.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultMapRemoveDataStrategy.java 2012-09-10 14:06:45 UTC (rev 641) @@ -23,13 +23,12 @@ * #L% */ -import com.google.common.collect.Sets; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Cell; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.util.HashSet; +import java.util.Collections; import java.util.Set; /** @@ -67,7 +66,7 @@ @Override public Set<ImportType> getPossibleSubImportType() { - HashSet<ImportType> result = Sets.newHashSet(); + Set<ImportType> result = Collections.emptySet(); return result; } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultRegionRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultRegionRemoveDataStrategy.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultRegionRemoveDataStrategy.java 2012-09-10 14:06:45 UTC (rev 641) @@ -23,13 +23,12 @@ * #L% */ -import com.google.common.collect.Sets; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Cell; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.util.HashSet; +import java.util.Collections; import java.util.Set; /** @@ -67,15 +66,7 @@ @Override public Set<ImportType> getPossibleSubImportType() { - HashSet<ImportType> result = Sets.newHashSet(ImportType.values()); - result.remove(ImportType.COMMON_ALL); - result.remove(ImportType.COMMON_TRANSECT); - result.remove(ImportType.OPERATION); - result.remove(ImportType.CATCHES); - result.remove(ImportType.ACOUSTIC); - result.remove(ImportType.RESULT_VOYAGE); - result.remove(ImportType.RESULT_ESDU); - result.remove(ImportType.RESULT_VOYAGE); + Set<ImportType> result = Collections.emptySet(); return result; } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultVoyageRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultVoyageRemoveDataStrategy.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultVoyageRemoveDataStrategy.java 2012-09-10 14:06:45 UTC (rev 641) @@ -25,17 +25,30 @@ import com.google.common.collect.Sets; import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.Echotype; import fr.ifremer.echobase.entities.data.LengthAgeKey; import fr.ifremer.echobase.entities.data.LengthWeightKey; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.data.VoyageDAO; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.framework.TopiaContextImplementor; +import org.nuiton.topia.framework.TopiaSQLQuery; +import org.nuiton.topia.persistence.TopiaDAO; -import java.util.HashSet; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Collection; +import java.util.List; import java.util.Set; /** - * remove a {@link ImportType#OPERATION} import. + * Remove a {@link ImportType#OPERATION} import. * <p/> * Can remove only {@link Echotype}, {@link LengthAgeKey} or * {@link LengthWeightKey}. @@ -49,42 +62,154 @@ private static final Log log = LogFactory.getLog(ResultVoyageRemoveDataStrategy.class); + protected Voyage voyage; + @Override - protected void removeData(String id) { + protected void removeData(String id) throws TopiaException { if (id.startsWith(Echotype.class.getName())) { + // get dao + TopiaDAO<Echotype> dao = getDAOFromId(id); + + // get entity to delete + Echotype entity = findById(dao, id); + + if (voyage == null) { + + // load voyage + VoyageDAO voyageDao = getDAO(Voyage.class, VoyageDAO.class); + voyage = voyageDao.findContainsEchotype(entity); + + // remove data from voyage + removeVoyageData(voyage); + } + // remove echotype - removeEchotype(id); + removeEchotype(entity); } else if (id.startsWith(LengthAgeKey.class.getName())) { + // get dao + TopiaDAO<LengthAgeKey> dao = getDAOFromId(id); + + // get entity to delete + LengthAgeKey entity = findById(dao, id); + + if (voyage == null) { + + // load voyage + VoyageDAO voyageDao = getDAO(Voyage.class, VoyageDAO.class); + voyage = voyageDao.findContainsLengthAgeKey(entity); + + // remove data from voyage + removeVoyageData(voyage); + } + // remove lengthAgeKey - removeLengthAgeKey(id); + removeLengthAgeKey(entity); } else if (id.startsWith(LengthWeightKey.class.getName())) { + // get dao + TopiaDAO<LengthWeightKey> dao = getDAOFromId(id); + + // get entity to delete + LengthWeightKey entity = findById(dao, id); + + if (voyage == null) { + + // load voyage + VoyageDAO voyageDao = getDAO(Voyage.class, VoyageDAO.class); + voyage = voyageDao.findContainsLengthWeightKey(entity); + + // remove data from voyage + removeVoyageData(voyage); + } + // remove lengthAgeKey - removeLengthWeightKey(id); + removeLengthWeightKey(entity); } else { canNotDealWithId(id); } } - protected void removeEchotype(String id) { - Echotype entity = removeEntity(id); + protected void removeVoyageData(final Voyage voyage) throws TopiaException { + + // suppress all postCell from the voyage + TopiaDAO<Cell> cellDAO = getDAO(Cell.class); + for (Cell postCell : voyage.getPostCell()) { + voyage.removePostCell(postCell); + delete(cellDAO, postCell); + } + + flushTransaction("Could not flush transaction after removing postCells"); + + // Get all cells of the voyage + TopiaSQLQuery<String> query = new TopiaSQLQuery<String>() { + @Override + protected PreparedStatement prepareQuery(Connection connection) throws SQLException { + String hql = "SELECT c.topiaid FROM TransitImpl ta, " + + " TransectImpl te, " + + " DataAcquisitionImpl da, " + + " DataProcessingImpl dp, " + + " CellImpl c " + + "WHERE ta.voyage = ? " + + "AND ta.topiaId = te.transit " + + "AND te.topiaId = da.transect " + + "AND da.topiaId = dp.dataacquisition" + + "AND dp.topiaId = c.dataprocessing"; + PreparedStatement result = connection.prepareStatement(hql); + result.setString(1, voyage.getTopiaId()); + return result; + } + + @Override + protected String prepareResult(ResultSet set) throws SQLException { + return set.getString(1); + } + }; + + List<String> cellIds = query.findMultipleResult( + (TopiaContextImplementor) getTransaction()); + + // remove all result of cells + + TopiaDAO<Result> resultDAO = getDAO(Result.class); + + for (String cellId : cellIds) { + Cell cell = findById(cellDAO, cellId); + Collection<Result> cellResult = cell.getResult(); + for (Result result : cellResult) { + cell.removeResult(result); + } + resultDAO.deleteAll(cellResult); + } + + flushTransaction( + "Could not flush transaction after deleting data from voyage"); + } + + protected void removeEchotype(Echotype entity) throws TopiaException { + + removeEchotype(entity, voyage); + if (log.isInfoEnabled()) { log.info("Echotype " + entity.getTopiaId() + " was removed"); } } - protected void removeLengthAgeKey(String id) { - LengthAgeKey entity = removeEntity(id); + protected void removeLengthAgeKey(LengthAgeKey entity) throws TopiaException { + + removeLengthAgeKey(entity, voyage); + if (log.isInfoEnabled()) { log.info("LengthAgeKey " + entity.getTopiaId() + " was removed"); } } - protected void removeLengthWeightKey(String id) { - LengthWeightKey entity = removeEntity(id); + protected void removeLengthWeightKey(LengthWeightKey entity) throws TopiaException { + + removeLengthWeightKey(entity, voyage); + if (log.isInfoEnabled()) { log.info("LengthWeightKey " + entity.getTopiaId() + " was removed"); } @@ -92,13 +217,9 @@ @Override public Set<ImportType> getPossibleSubImportType() { - HashSet<ImportType> result = Sets.newHashSet(ImportType.values()); - result.remove(ImportType.COMMON_ALL); - result.remove(ImportType.COMMON_TRANSECT); - result.remove(ImportType.OPERATION); - result.remove(ImportType.CATCHES); - result.remove(ImportType.ACOUSTIC); - result.remove(ImportType.RESULT_VOYAGE); + Set<ImportType> result = Sets.newHashSet(ImportType.RESULT_ESDU, + ImportType.RESULT_MAP, + ImportType.RESULT_REGION); return result; } } 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 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties 2012-09-10 14:06:45 UTC (rev 641) @@ -13,6 +13,8 @@ echobase.common.esduBySpeciesAndSizeCategoryFile=Results per ESDU / species / size file echobase.common.gearMetadataFile=Gear metadata file echobase.common.importDbFile=Import file (.zip) +echobase.common.importDbMode.free=Free import +echobase.common.importDbMode.referential=Referential import echobase.common.lengthAgeKeyFile=Size-age equations file echobase.common.lengthWeightKeyFile=Size-weight equations file echobase.common.moviesFile=Acoustic data 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 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties 2012-09-10 14:06:45 UTC (rev 641) @@ -13,6 +13,8 @@ echobase.common.esduBySpeciesAndSizeCategoryFile=Fichier de résultats par ESDU / espèce / taille echobase.common.gearMetadataFile=Fichier de méta-données d'engin echobase.common.importDbFile=Fichier d'import (zip) +echobase.common.importDbMode.free=Import libre +echobase.common.importDbMode.referential=Import Référentiel echobase.common.lengthAgeKeyFile=Fichier des relations taille-âge echobase.common.lengthWeightKeyFile=Fichier des relations taille-poids echobase.common.moviesFile=Fichier des données acoustiques 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 10:00:46 UTC (rev 640) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/importdata/AbstractImportDataServiceIT.java 2012-09-10 14:06:45 UTC (rev 641) @@ -313,7 +313,7 @@ } } - flushTransaction(); + flushTransaction("Could not flush transaction of esdu cells."); } finally { Modified: trunk/echobase-ui/pom.xml =================================================================== --- trunk/echobase-ui/pom.xml 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-ui/pom.xml 2012-09-10 14:06:45 UTC (rev 641) @@ -120,7 +120,7 @@ <webAppConfig> <contextPath>/echobase</contextPath> </webAppConfig> - <jvmArgs>-Xms512m -Xmx1512m</jvmArgs> + <jvmArgs>-Xms512m -Xmx2048m</jvmArgs> <systemProperties> <systemProperty> <name>echobase.log.dir</name> 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 10:00:46 UTC (rev 640) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Configure.java 2012-09-10 14:06:45 UTC (rev 641) @@ -26,6 +26,7 @@ import fr.ifremer.echobase.io.EchoBaseIOUtil; import fr.ifremer.echobase.io.InputFile; import fr.ifremer.echobase.services.importdb.ImportDbConfiguration; +import fr.ifremer.echobase.services.importdb.ImportDbMode; import fr.ifremer.echobase.ui.actions.AbstractConfigureAction; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; @@ -34,6 +35,7 @@ import java.io.File; import java.io.IOException; +import java.util.Map; /** * Configure a db import. @@ -48,6 +50,14 @@ /** Logger. */ private static final Log log = LogFactory.getLog(Configure.class); + + /** Universe of possible import modes. */ + protected Map<String, String> modes; + + public Map<String, String> getModes() { + return modes; + } + public Configure() { super(ImportDbConfiguration.class); } @@ -58,6 +68,16 @@ } @Override + protected void prepareInputAction(ImportDbConfiguration model) { + modes = decorateEnums(ImportDbMode.values()); + + if (model.getImportDbMode() == null) { + + model.setImportDbMode(ImportDbMode.REFERENTIAL); + } + } + + @Override protected void prepareExecuteAction(ImportDbConfiguration model) throws IOException { File tempDirectory = FileUtils.getTempDirectory(); @@ -74,6 +94,18 @@ EchoBaseIOUtil.copyFile(input, dataDirectory); } + public String execute_referential() throws Exception { + return execute(); + } + + public String execute_legacyVoyage() throws Exception { + return execute(); + } + + public String execute_free() throws Exception { + return execute(); + } + public void setInputFileName(String fileName) { getModel().getInput().setFileName(fileName); } 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 10:00:46 UTC (rev 640) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Import.java 2012-09-10 14:06:45 UTC (rev 641) @@ -23,12 +23,18 @@ */ package fr.ifremer.echobase.ui.actions.importDb; +import fr.ifremer.echobase.entities.EchoBaseUser; 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.ui.actions.AbstractWaitAndExecAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.util.Locale; + +import static org.nuiton.i18n.I18n.l_; + /** * Start the import db. * @@ -42,6 +48,12 @@ /** Logger. */ private static final Log log = LogFactory.getLog(Import.class); + protected String result; + + public String getResult() { + return result; + } + public Import() { super(ImportDbConfiguration.class, ImportDbService.class); } @@ -54,12 +66,39 @@ model.getInput().getFileName()); } - service.importDb(model, getEchoBaseSession().getUser(), true, false); + ImportDbMode importDbMode = model.getImportDbMode(); + Locale locale = getLocale(); + EchoBaseUser user = getEchoBaseSession().getUser(); + switch (importDbMode) { + + case REFERENTIAL: + service.importReferential(model, user); + + addFlashMessage(_("echobase.info.import.succeded")); + result = l_(locale, "echobase.importDb.referentialResult", + model.getActionTime()); + + break; + case LEGACY_VOYAGE: + service.importLegacyData(model, user); + + addFlashMessage(_("echobase.info.import.succeded")); + result = l_(locale, "echobase.importDb.legacyVoyageResult", + model.getActionTime()); + + break; + case FREE: + service.importDb(model, user, true, false); + + addFlashMessage(_("echobase.info.import.succeded")); + result = l_(locale, "echobase.importDb.freeResult", + model.getActionTime()); + break; + } } @Override protected void closeAction(ImportDbConfiguration model) throws Exception { - destroyModel(model); } } \ No newline at end of file Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/ConfirmDelete.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/ConfirmDelete.java 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/removeData/ConfirmDelete.java 2012-09-10 14:06:45 UTC (rev 641) @@ -75,6 +75,7 @@ // nothing special to do here } + @Override protected void prepareInputAction(RemoveDataConfiguration model) { String importLogId = model.getImportLogId(); Modified: trunk/echobase-ui/src/main/resources/config/struts-importDb.xml =================================================================== --- trunk/echobase-ui/src/main/resources/config/struts-importDb.xml 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-ui/src/main/resources/config/struts-importDb.xml 2012-09-10 14:06:45 UTC (rev 641) @@ -31,7 +31,7 @@ <package name="importDb" extends="loggued" namespace="/importDb"> <!-- Configure import --> - <action name="configure" + <action name="configure-*" method="execute_{1}" class="fr.ifremer.echobase.ui.actions.importDb.Configure"> <interceptor-ref name="prepareParamsStackLoggued"/> <result name="input">/WEB-INF/jsp/importDb/configure.jsp</result> 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 10:00:46 UTC (rev 640) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties 2012-09-10 14:06:45 UTC (rev 641) @@ -32,6 +32,7 @@ echobase.action.saveSqlQuery=Update query echobase.action.show.embedded.documentation=How to use a portable database echobase.action.show.import.documentation=How to import data +echobase.action.show.importDb.documentation=How to import db data echobase.action.showImportLogs=Liste des imports\=Show import logs echobase.action.toEnglish=English echobase.action.toFrench=French @@ -75,6 +76,7 @@ echobase.common.importDataMode=Import type echobase.common.importDate=Import date echobase.common.importDbFile= +echobase.common.importDbMode=Import db mode echobase.common.importError=Error\: echobase.common.importLogActions=Actions echobase.common.importNotes=Import notes @@ -214,6 +216,9 @@ echobase.error.workingDbConfiguration.url.already.exists=A configuration with same url already exists echobase.error.workingDbConfiguration.url.required=Mandatory jdbc url echobase.header.request.result=SQL query result +echobase.importDb.freeResult=Free db import was succesful in %s. +echobase.importDb.legacyVoyageResult=Legacy voyage db import was sucessful in %s. +echobase.importDb.referentialResult=Referential db import was succesul in %s. 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 @@ -278,7 +283,11 @@ echobase.legend.importData.configure=Import configuration echobase.legend.importData.createMission=Mission caracteristics echobase.legend.importData.result.resume=Results -echobase.legend.importDb.configuration.files=Import file selection (.zip file) +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 +echobase.legend.importDb.configuration.referentialMode=Referential import configuration +echobase.legend.importDb.configuration.selectImportDbMode=Select import db mode echobase.legend.libreOfficeQuery=Translate a SQL query from Libre Office echobase.legend.sqlQuery.configuration=Query definition echobase.legend.sqlQuery.result=Query results @@ -292,6 +301,7 @@ echobase.menu.importData=Import data echobase.menu.importDb=Complete database import echobase.menu.logs=Change log +echobase.menu.removeData=Remove data echobase.menu.users=Manage users echobase.menu.viewData=Display data echobase.message.no.row.selected=No data selected 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 10:00:46 UTC (rev 640) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2012-09-10 14:06:45 UTC (rev 641) @@ -32,6 +32,7 @@ echobase.action.saveSqlQuery=Mettre à jour echobase.action.show.embedded.documentation=Comment utiliser une application embarquée echobase.action.show.import.documentation=Comment importer des données +echobase.action.show.importDb.documentation=Comment importer des données echobase.action.showImportLogs=Liste des imports echobase.action.toEnglish=En anglais echobase.action.toFrench=En français @@ -75,6 +76,7 @@ echobase.common.importDataMode=Type d'import echobase.common.importDate=Date de l'import echobase.common.importDbFile= +echobase.common.importDbMode=Mode d'import echobase.common.importError=Une erreur est survenue pendant l'import \: echobase.common.importLogActions=Actions echobase.common.importNotes=Remarques sur l'import @@ -214,6 +216,9 @@ echobase.error.workingDbConfiguration.url.already.exists=Une configuration existe déjà avec cette url echobase.error.workingDbConfiguration.url.required=Url jdbc obligatoire echobase.header.request.result=Résultat de la requête SQL +echobase.importDb.freeResult=L'import de type libre s'est déroulé avec succès en %s. +echobase.importDb.legacyVoyageResult=L'import de type données ancienne s'est déroulé abec succès en %s. +echobase.importDb.referentialResult=L'import de type référentiel s'est déroulé avec succès en %s. 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 @@ -278,7 +283,11 @@ 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.files=Choix du fichier à importer (fichier .zip) +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" +echobase.legend.importDb.configuration.referentialMode=Configuration import "référentiel" +echobase.legend.importDb.configuration.selectImportDbMode=Choix du mode d'import echobase.legend.libreOfficeQuery=Traduire une requête SQL issue de Libre Office echobase.legend.sqlQuery.configuration=Définition de la requête echobase.legend.sqlQuery.result=Résultats de la requête @@ -292,6 +301,7 @@ echobase.menu.importData=Importer des données echobase.menu.importDb=Importer une base complète echobase.menu.logs=Journal des modifications +echobase.menu.removeData=Supprimer des données echobase.menu.users=Gérer les utilisateurs echobase.menu.viewData=Visualiser les données echobase.message.no.row.selected=Aucune donnée sélectionnée 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 10:00:46 UTC (rev 640) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp 2012-09-10 14:06:45 UTC (rev 641) @@ -110,6 +110,11 @@ </s:a> </li> <li> + <s:a action="importLogs" namespace="/removeData" + method="input" cssClass="delDonnee"> + <span><s:text name="echobase.menu.removeData"/></s:a></span> + </li> + <li> <s:a action="dbeditor" namespace="/dbeditor" cssClass="modif"> <span><s:text name="echobase.menu.editData"/></span> </s:a> 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 10:00:46 UTC (rev 640) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/home.jsp 2012-09-10 14:06:45 UTC (rev 641) @@ -61,14 +61,4 @@ </li> </ul> </s:form> -</s:if> -<s:else> - <s:form namespace="/removeData" action="importLogs"> - <ul class="toolbar floatLeft"> - <li> - <s:submit theme="simple" action="importLogs" - key="echobase.action.showImportLogs"/> - </li> - </ul> - </s:form> -</s:else> \ No newline at end of file +</s:if> \ No newline at end of file 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 10:00:46 UTC (rev 640) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importDb/configure.jsp 2012-09-10 14:06:45 UTC (rev 641) @@ -26,20 +26,111 @@ <title><s:text name="echobase.title.importDb"/></title> + +<script type="text/javascript"> + + jQuery(document).ready(function () { + + // to change form when mode is changed + $('[name="model.importDbMode"]').change(function (event) { + $('[class~="importDbMode"]').hide(); + $('#' + this.value).show(); + $('#' + this.value + ' .errorMessage').hide(); + }); + + // show incoming mode + var incomingVal = $('[name="model.importDbMode"][checked="checked"]').val(); + $('#' + incomingVal).show(); + }); +</script> + <s:form namespace="/importDb" method="POST" enctype="multipart/form-data"> <fieldset> <legend> - <s:text name="echobase.legend.importDb.configuration.files"/> + <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"/> + </legend> + + + <div class="cleanBoth help"> + <s:a href="%{getDocumentation('importDb.html','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"/> </fieldset> <br/> - <s:submit action="configure" + <s:submit action="configure-referential" value='%{getText("echobase.action.import")}'/> +</s:form> +<s:form id="LEGACY_VOYAGE" namespace="/importDb" method="POST" + enctype="multipart/form-data" cssClass="hidden importDbMode"> + <fieldset> + <legend> + <s:text name="echobase.legend.importDb.configuration.legacyVoyageMode"/> + </legend> + + <div class="cleanBoth help"> + <s:a href="%{getDocumentation('importDb.html','legacy-voyage')}" + target="doc"> + <s:text name="echobase.action.show.importDb.documentation"/> + </s:a> + </div> + <br/> + <s:hidden key="model.importDbMode" value="LEGACY_VOYAGE" label=''/> + + <s:file name="input" required="true" + key="echobase.common.importDbFile"/> + + </fieldset> + <br/> + <s:submit action="configure-legacyVoyage" + value='%{getText("echobase.action.import")}'/> +</s:form> + +<s:form id="FREE" namespace="/importDb" method="POST" + enctype="multipart/form-data" cssClass="hidden importDbMode"> + + <fieldset> + <legend> + <s:text name="echobase.legend.importDb.configuration.freeMode"/> + </legend> + + <div class="cleanBoth help"> + <s:a href="%{getDocumentation('importDb.html','free')}" + target="doc"> + <s:text name="echobase.action.show.importDb.documentation"/> + </s:a> + </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" + 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 10:00:46 UTC (rev 640) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importDb/progress.jsp 2012-09-10 14:06:45 UTC (rev 641) @@ -26,7 +26,7 @@ <%@ taglib prefix="sj" uri="/struts-jquery-tags" %> <s:url id="url" action="import" namespace="/importDb"/> -<meta http-equiv="refresh" content="5;url=${url}"/> +<meta http-equiv="refresh" content="10;url=${url}"/> <title><s:text name="echobase.title.importDbProgress"/></title> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importDb/result.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importDb/result.jsp 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/importDb/result.jsp 2012-09-10 14:06:45 UTC (rev 641) @@ -27,10 +27,6 @@ <title><s:text name="echobase.title.importDbResult"/></title> <div> - L'import de la base complête a réussi en <s:property value="model.actionTime"/>. + <s:property value="%{result}"/> </div> -<div> - EchoBase possède désormais un référentiel et les campagnes contenues dans - la sauvegarde importée. -</div> Modified: trunk/echobase-ui/src/main/webapp/css/screen.css =================================================================== --- trunk/echobase-ui/src/main/webapp/css/screen.css 2012-09-10 10:00:46 UTC (rev 640) +++ trunk/echobase-ui/src/main/webapp/css/screen.css 2012-09-10 14:06:45 UTC (rev 641) @@ -632,6 +632,14 @@ .menu .expDonnee:hover{ background-position:-144px -48px; } +.menu .delDonnee{ + background-position:-144px 0; +} + +.menu .delDonnee:hover{ + background-position:-144px -48px; +} + .menu .modif{ background-position:-192px 0; }