This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 08e721b86ece82e5e31ba681968d951ecee15a6f Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Apr 4 05:44:01 2015 +0200 revoir la cinématique de confirmation d'écrasement des données à l'import --- .../genericformat/GenericFormatContextSupport.java | 4 - .../GenericFormatImportConfiguration.java | 13 --- .../genericformat/GenericFormatImportRequest.java | 4 - .../genericformat/GenericFormatResultSupport.java | 4 - .../consumer/CsvConsumerForSurvey.java | 6 +- .../resources/ftl/genericFormatImportReport_fr.ftl | 2 - .../GenericFormatImportServiceTest.java | 96 ---------------------- .../genericformat/GenericFormatImportUI.css | 7 -- .../genericformat/GenericFormatImportUI.jaxx | 9 -- .../GenericFormatImportUIHandler.java | 2 +- .../genericformat/GenericFormatImportUIModel.java | 20 +---- .../actions/GenericFormatImportAction.java | 40 ++++++++- .../genericformat/tree/CruiseSelectTreeNode.java | 9 ++ .../genericformat/tree/ProgramSelectTreeNode.java | 12 +++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 3 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 3 + 16 files changed, 71 insertions(+), 163 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java index 8791c98..ed2493b 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java @@ -552,10 +552,6 @@ public abstract class GenericFormatContextSupport implements Closeable, Iterable return result; } - public boolean canNotOverrideData() { - return !importRequest.isOverrideData(); - } - public interface CruiseContextAction { void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java index 1c89e4c..0f2dc3f 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportConfiguration.java @@ -60,11 +60,6 @@ public class GenericFormatImportConfiguration implements Serializable { private boolean checkWeights; /** - * Override any existing data ? (TODO Should be more specific eras cruise ? fishing operations ?...) - */ - private boolean overrideData; - - /** * Override protocol if same name ? */ private boolean overrideProtocol; @@ -154,14 +149,6 @@ public class GenericFormatImportConfiguration implements Serializable { this.checkWeights = checkWeights; } - public boolean isOverrideData() { - return overrideData; - } - - public void setOverrideData(boolean overrideData) { - this.overrideData = overrideData; - } - public void setOverrideProtocol(boolean overrideProtocol) { this.overrideProtocol = overrideProtocol; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java index a2c072f..5b64a6e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java @@ -139,10 +139,6 @@ public class GenericFormatImportRequest implements Serializable { return importConfiguration.isCheckWeights(); } - public boolean isOverrideData() { - return importConfiguration.isOverrideData(); - } - public boolean isOverrideProtocol() { return importConfiguration.isOverrideProtocol(); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java index ab85eac..622a108 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java @@ -244,10 +244,6 @@ public abstract class GenericFormatResultSupport implements Serializable { return importRequest.isCheckWeights(); } - public boolean isOverrideData() { - return importRequest.isOverrideData(); - } - public GenericFormatArchive getArchive() { return importRequest.getArchive(); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java index 0477e5e..17036a1 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java @@ -67,11 +67,7 @@ public class CsvConsumerForSurvey extends CsvComsumer<SurveyRow, SurveyModel> { boolean cruiseExist = existingCruiseData != null; - if (cruiseExist && importContext.canNotOverrideData()) { - - addCheckError(row, new CruiseAlreadyExistException(cruise)); - - } else if (importContext.isCruiseAlreadyImported(cruise)) { + if (importContext.isCruiseAlreadyImported(cruise)) { addCheckError(row, new CruiseAlreadyExistException(cruise)); diff --git a/tutti-service/src/main/resources/ftl/genericFormatImportReport_fr.ftl b/tutti-service/src/main/resources/ftl/genericFormatImportReport_fr.ftl index ede139b..9c3e628 100644 --- a/tutti-service/src/main/resources/ftl/genericFormatImportReport_fr.ftl +++ b/tutti-service/src/main/resources/ftl/genericFormatImportReport_fr.ftl @@ -348,7 +348,6 @@ <li>Nombre de traits mis à jour: ${nbOperationsUpdated}</li> </ul> -<#assign overrideData = importConfiguration.overrideData> <#assign overrideProtocol = importConfiguration.overrideProtocol> <#assign updateCruises = importConfiguration.updateCruises> <#assign updateOperations = importConfiguration.updateOperations> @@ -363,7 +362,6 @@ <h2>Configuration de l'import</h2> <ul> -<#if overrideData><li>Écraser des données existantes</li></#if> <#if overrideProtocol><li>Remplacer le protocole existant</li></#if> <#if updateCruises><li>Mettre à jour les caractéristiques des campagnes existantes</li></#if> <#if updateOperations><li>Mettre à jour les caractéristiques des traits existants</li></#if> diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceTest.java index ebac410..952e952 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportServiceTest.java @@ -25,9 +25,6 @@ package fr.ifremer.tutti.service.genericformat; */ import fr.ifremer.tutti.persistence.ProgressionModel; -import fr.ifremer.tutti.persistence.entities.CaracteristicMap; -import fr.ifremer.tutti.persistence.entities.data.Cruise; -import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrder; import fr.ifremer.tutti.persistence.model.CruiseDataModel; import fr.ifremer.tutti.persistence.model.OperationDataModel; import fr.ifremer.tutti.persistence.model.ProgramDataModel; @@ -41,12 +38,10 @@ import org.apache.commons.logging.LogFactory; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; -import org.nuiton.jaxx.application.ApplicationBusinessException; import java.io.File; import java.io.IOException; import java.util.LinkedHashSet; -import java.util.List; import java.util.Set; /** @@ -120,103 +115,12 @@ public class GenericFormatImportServiceTest extends GenericFormatImportServiceTe } - @Test - public void testImportNoOverride() throws IOException { - - StringBuilder builder = new StringBuilder(); - - { - - { - List<String> cruiseId = persistenceService.getAllCruiseId(PROGRAM_ID); - Assert.assertEquals(0, cruiseId.size()); - } - - doImport(builder, "testImportNoOverride", PROGRAM_ID, "referentials", "sampleCategory", "protocol", "empty", "onlyCruise"); - - assertCruiseInserted(); - } - - { - - try { - - doImport(builder, "testImportNoOverride", PROGRAM_ID, "referentials", "sampleCategory", "protocol", "empty", "onlyCruise"); - - Assert.fail("Can't override cruise if overrideData to false"); - } catch (ApplicationBusinessException e) { - Assert.assertTrue(true); - } - } - - { - - doImport(builder, "testImportNoOverride", true, "referentials", "sampleCategory", "protocol", "empty", "onlyCruise"); - - assertCruiseInserted(); - - } - - if (log.isInfoEnabled()) { - log.info("Report files:" + builder.toString()); - } - - } - - protected void assertCruiseInserted() { - List<String> cruiseIds = persistenceService.getAllCruiseId(PROGRAM_ID); - Assert.assertEquals(1, cruiseIds.size()); - - Cruise cruise = persistenceService.getCruise(cruiseIds.get(0)); - Assert.assertNotNull(cruise); - Assert.assertEquals(4, cruise.sizeGear()); - - { - GearWithOriginalRankOrder gear = cruise.getGear(0); - Assert.assertEquals(379, (int) gear.getIdAsInt()); - - CaracteristicMap gearCaracteristics = persistenceService.getGearCaracteristics(cruise.getId(), gear.getId(), gear.getRankOrder()); - Assert.assertEquals(0, gearCaracteristics.size()); - } - - { - GearWithOriginalRankOrder gear = cruise.getGear(1); - Assert.assertEquals(381, (int) gear.getIdAsInt()); - - CaracteristicMap gearCaracteristics = persistenceService.getGearCaracteristics(cruise.getId(), gear.getId(), gear.getRankOrder()); - Assert.assertEquals(0, gearCaracteristics.size()); - } - - { - GearWithOriginalRankOrder gear = cruise.getGear(2); - Assert.assertEquals(64, (int) gear.getIdAsInt()); - - CaracteristicMap gearCaracteristics = persistenceService.getGearCaracteristics(cruise.getId(), gear.getId(), gear.getRankOrder()); - Assert.assertEquals(2, gearCaracteristics.size()); - } - - { - GearWithOriginalRankOrder gear = cruise.getGear(3); - Assert.assertEquals(64, (int) gear.getIdAsInt()); - - CaracteristicMap gearCaracteristics = persistenceService.getGearCaracteristics(cruise.getId(), gear.getId(), gear.getRankOrder()); - Assert.assertEquals(0, gearCaracteristics.size()); - } - } - protected GenericFormatImportResult doImport(StringBuilder builder, String archivName, String... directoryies) throws IOException { - return doImport(builder, archivName, false, directoryies); - - } - - protected GenericFormatImportResult doImport(StringBuilder builder, String archivName, boolean overrideData, String... directoryies) throws IOException { - File archiveFile = createArchive(archivName + ".zip", directoryies); GenericFormatImportConfiguration importConfiguration = new GenericFormatImportConfiguration(); importConfiguration.setImportFile(archiveFile); - importConfiguration.setOverrideData(overrideData); importConfiguration.setImportSpecies(true); importConfiguration.setImportBenthos(true); importConfiguration.setImportMarineLitter(true); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css index 042e2a4..83d49ba 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css @@ -93,13 +93,6 @@ JTextField { cellRenderer: {new ImportDataSelectTreeCellRenderer()}; } -#overrideDataCheckBox { - text: "tutti.genericFormatImport.field.overrideData"; - selected: {model.isOverrideData()}; - toolTipText: "tutti.genericFormatImport.field.overrideData.tip"; - _help: {"tutti.genericFormatImport.field.overrideData.help"}; -} - #validateButton { actionIcon: validate; text: "tutti.genericFormatImport.action.validate"; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx index b51877e..0836526 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx @@ -81,15 +81,6 @@ </cell> </row> - <!-- Import options --> - <row> - <cell fill='both' columns="2"> - <JPanel layout='{new GridLayout(0, 1)}'> - <JCheckBox id='overrideDataCheckBox' onItemStateChanged='handler.setBoolean(event, "overrideData")'/> - </JPanel> - </cell> - </row> - <!-- validate action --> <row> <cell columns='2'> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java index e82937b..8d7b445 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java @@ -85,7 +85,7 @@ public class GenericFormatImportUIHandler extends AbstractTuttiUIHandler<Generic model.addPropertyChangeListener(new PropertyChangeListener() { - final Set<String> propertyNamesToCanValidate = Sets.newHashSet(GenericFormatImportUIModel.PROPERTY_IMPORT_FILE, GenericFormatImportUIModel.PROPERTY_PROGRAM, GenericFormatImportUIModel.PROPERTY_OVERRIDE_DATA); + final Set<String> propertyNamesToCanValidate = Sets.newHashSet(GenericFormatImportUIModel.PROPERTY_IMPORT_FILE, GenericFormatImportUIModel.PROPERTY_PROGRAM); final Set<String> propertyNamesToCanImport = Sets.newHashSet(GenericFormatImportUIModel.PROPERTY_VALIDATE_DONE, GenericFormatImportUIModel.PROPERTY_PROGRAM, diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java index 747591e..2ccec2c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java @@ -54,8 +54,6 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { public static final String PROPERTY_CHECK_WEIGHTS = "checkWeights"; - public static final String PROPERTY_OVERRIDE_DATA = "overrideData"; - public static final String PROPERTY_IMPORT_ATTACHMENTS = "importAttachments"; public static final String PROPERTY_IMPORT_SPECIES = "importSpecies"; @@ -114,8 +112,6 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { private boolean checkWeights; - private boolean overrideData; - private boolean canValidate; private File validateReportFile; @@ -139,8 +135,6 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { ProgramDataModel selectedDataModel = new ProgramDataModel(program, Collections.<CruiseDataModel>emptySet()); configuration.setDataToExport(selectedDataModel); - configuration.setOverrideData(overrideData); - configuration.setImportSpecies(importSpecies); configuration.setImportBenthos(importBenthos); configuration.setImportMarineLitter(importMarineLitter); @@ -177,7 +171,6 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { configuration.setCleanWeights(cleanWeights); configuration.setCheckWeights(checkWeights); - configuration.setOverrideData(overrideData); configuration.setImportFile(importFile); configuration.setReportFile(importReportFile); @@ -185,6 +178,10 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { } + public boolean isSelectedDataExists() { + return rootNode.isSelectedDataExists(); + } + public Program getProgram() { return program; } @@ -224,15 +221,6 @@ public class GenericFormatImportUIModel extends AbstractSerializableBean { firePropertyChange(PROPERTY_CHECK_WEIGHTS, null, checkWeights); } - public boolean isOverrideData() { - return overrideData; - } - - public void setOverrideData(boolean overrideData) { - this.overrideData = overrideData; - firePropertyChange(PROPERTY_OVERRIDE_DATA, null, overrideData); - } - public boolean isUpdateCruises() { return updateCruises; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatImportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatImportAction.java index 1886e91..f7b8e45 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatImportAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatImportAction.java @@ -84,8 +84,19 @@ public class GenericFormatImportAction extends LongActionSupport<GenericFormatIm } + // Check override data + if (doAction) { + + doAction = acceptOverrideData(); + + } + // Check if protocol already exist with same name - doAction &= acceptProtocol(); + if (doAction) { + + doAction = acceptProtocol(); + + } // Do a backup before import @@ -182,7 +193,7 @@ public class GenericFormatImportAction extends LongActionSupport<GenericFormatIm updateResult(importResult); - if (importResult.getProtocol()!=null) { + if (importResult.getProtocol() != null) { getDataContext().setProtocolId(importResult.getProtocol().getId()); } @@ -228,6 +239,31 @@ public class GenericFormatImportAction extends LongActionSupport<GenericFormatIm } + protected boolean acceptOverrideData() { + + boolean doAction = true; + + if (getModel().isSelectedDataExists()) { + + // Ask user to confirm to override data + String htmlMessage = String.format( + AbstractApplicationUIHandler.CONFIRMATION_FORMAT, + t("tutti.genericformat.overrideData.conflict.message"), + t("tutti.genericformat.overrideData.conflict.help")); + Component ui = getDialogParentComponent(); + int i = JOptionPane.showConfirmDialog( + ui, + htmlMessage, + t("tutti.genericformat.overrideData.conflict.title"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE); + + doAction = i == JOptionPane.OK_OPTION; + } + return doAction; + + } + protected boolean acceptProtocol() { GenericFormatValidateFileResult validateResult = getModel().getValidateResult(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/CruiseSelectTreeNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/CruiseSelectTreeNode.java index 1e93c3e..6b8cd21 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/CruiseSelectTreeNode.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/CruiseSelectTreeNode.java @@ -151,4 +151,13 @@ public class CruiseSelectTreeNode extends DataSelectTreeNodeSupport<CruiseDataMo } + public boolean isSelectedDataExists() { + + boolean result = false; + if (isSelected() || isPartialSelected()) { + result = getOptionalId() != null; + } + return result; + + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ProgramSelectTreeNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ProgramSelectTreeNode.java index c0f3fab..0bf12e5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ProgramSelectTreeNode.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/tree/ProgramSelectTreeNode.java @@ -85,4 +85,16 @@ public class ProgramSelectTreeNode extends DataSelectTreeNodeSupport<ProgramData return Iterators.forEnumeration(children()); } + public boolean isSelectedDataExists() { + + boolean result=false; + for (CruiseSelectTreeNode cruise : this) { + if (cruise.isSelectedDataExists()) { + result = true; + break; + } + } + return result; + + } } diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 1c832ae..d9daf42 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -1565,6 +1565,9 @@ tutti.genericFormatImport.validateImport.legend= tutti.genericFormatImport.validationResult.description= tutti.genericFormatImport.validationResult.description.tip= tutti.genericFormatImport.validationResult.legend= +tutti.genericformat.overrideData.conflict.help= +tutti.genericformat.overrideData.conflict.message= +tutti.genericformat.overrideData.conflict.title= tutti.genericformat.protocol.action.add= tutti.genericformat.protocol.action.cancel= tutti.genericformat.protocol.action.override= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index b44bd2b..3787664 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -1496,6 +1496,9 @@ tutti.genericFormatImport.validateReportFile.extension=pdf tutti.genericFormatImport.validateReportFile.extension.description=Rapport de validation (.pdf) tutti.genericFormatImport.validationResult.description=Résultat de la validation tutti.genericFormatImport.validationResult.description.tip=Résultat de la validation +tutti.genericformat.overrideData.conflict.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour annuler l'import</li><li><strong>Oui</strong> pour confirmer l'écrasement des données</li></ul> +tutti.genericformat.overrideData.conflict.message=Parmi les données à importer, certaines existent déjà en base, voulez-vous les écraser ? +tutti.genericformat.overrideData.conflict.title=Confirmer l'écrasement de données tutti.genericformat.protocol.action.add=Ajouter tutti.genericformat.protocol.action.cancel=Annuler tutti.genericformat.protocol.action.override=Remplacer -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.