This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository echobase. See http://git.codelutin.com/echobase.git commit f0bfb8ae4b2c5ea19a072a3f1df699ea6400cf3e Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Jan 21 19:49:25 2015 +0100 fixes #6053: On peut importer plusieurs fois les mêmes résultats voyage pour un même voyage --- .../services/service/UserDbPersistenceService.java | 7 ++++ .../ResultsVoyageImportAlreadyExistException.java | 16 ++++++++ .../importdata/ResultsVoyageImportService.java | 48 +++++++++++----------- .../i18n/echobase-services_en_GB.properties | 1 + .../i18n/echobase-services_fr_FR.properties | 1 + 5 files changed, 49 insertions(+), 24 deletions(-) diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java index 7e4939d..46c321c 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java @@ -33,6 +33,7 @@ import fr.ifremer.echobase.entities.EchoBaseUserPersistenceContext; import fr.ifremer.echobase.entities.EntityModificationLog; import fr.ifremer.echobase.entities.ImportFile; import fr.ifremer.echobase.entities.ImportLog; +import fr.ifremer.echobase.entities.ImportLogTopiaDao; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Category; import fr.ifremer.echobase.entities.data.Cell; @@ -77,6 +78,7 @@ import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.persistence.TopiaIdFactory; import org.nuiton.topia.persistence.TopiaNotFoundException; +import org.nuiton.topia.persistence.internal.AbstractTopiaDao; import org.nuiton.topia.persistence.support.TopiaSqlQuery; import javax.inject.Inject; @@ -559,6 +561,11 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { } + public boolean isImportLogForVoyageExists(String voyageId) { + ImportLogTopiaDao importLogDao = persistenceContext.getImportLogDao(); + return importLogDao.forVoyageIdEquals(voyageId).addEquals(ImportLog.PROPERTY_IMPORT_TYPE, ImportType.RESULT_VOYAGE).exists(); + } + //------------------------------------------------------------------------// //--- LengthAgeKey -------------------------------------------------------// //------------------------------------------------------------------------// diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportAlreadyExistException.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportAlreadyExistException.java new file mode 100644 index 0000000..ee1230a --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportAlreadyExistException.java @@ -0,0 +1,16 @@ +package fr.ifremer.echobase.services.service.importdata; + +/** + * Created on 1/21/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 2.9 + */ +public class ResultsVoyageImportAlreadyExistException extends ImportException { + + private static final long serialVersionUID = 1L; + + public ResultsVoyageImportAlreadyExistException(String message) { + super(message); + } +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportService.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportService.java index d30c53f..95c90aa 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportService.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportService.java @@ -57,6 +57,8 @@ import java.util.Arrays; import java.util.Collection; import java.util.Map; +import static org.nuiton.i18n.I18n.l; + /** * To import results attached to a voyage (but not cells). * @@ -66,12 +68,10 @@ import java.util.Map; public class ResultsVoyageImportService extends AbstractImportDataService<ResultsImportConfiguration> { /** Logger. */ - private static final Log log = - LogFactory.getLog(ResultsVoyageImportService.class); + private static final Log log = LogFactory.getLog(ResultsVoyageImportService.class); @Override - public void startImport(ResultsImportConfiguration configuration, - EchoBaseUser user) throws ImportException { + public void startImport(ResultsImportConfiguration configuration, EchoBaseUser user) throws ImportException { Map<String, Species> speciesMap = persistenceService.getEntitiesMap( Species.class, @@ -81,23 +81,25 @@ public class ResultsVoyageImportService extends AbstractImportDataService<Result Strata.class, Stratas.STRATA_BY_NAME); // get selected voyage - Voyage voyage = persistenceService.getVoyage( - configuration.getVoyageId()); - - // authorize only the selected voyage to be imported - Map<String, Voyage> voyageMap = Maps.uniqueIndex(Arrays.asList( - voyage), Voyages.VOYAGE_NAME); + Voyage voyage = persistenceService.getVoyage(configuration.getVoyageId()); - InputFile inputFile; + // check if there is a such same import on this voyage + boolean importExists = persistenceService.isImportLogForVoyageExists(configuration.getVoyageId()); + if (importExists) { + if (log.isWarnEnabled()) { + log.warn("there is already a voyage result import for this voyage, won't import."); + } + throw new ResultsVoyageImportAlreadyExistException(l(getLocale(), "echobase.importError.voyageResultImport.alreadyDone")); + } - EchoBaseCsvFileImportResult importResult; + // authorize only the selected voyage to be imported + Map<String, Voyage> voyageMap = Maps.uniqueIndex(Arrays.asList(voyage), Voyages.VOYAGE_NAME); - inputFile = configuration.getLengthAgeKeyFile(); - if (inputFile.hasFile()) { + if (configuration.getLengthAgeKeyFile().hasFile()) { - importResult = importLenthAgeKey( + EchoBaseCsvFileImportResult importResult = importLenthAgeKey( configuration, - inputFile, + configuration.getLengthAgeKeyFile(), voyageMap, strataMap, speciesMap @@ -105,12 +107,11 @@ public class ResultsVoyageImportService extends AbstractImportDataService<Result configuration.addResult(importResult); } - inputFile = configuration.getLengthWeightKeyFile(); - if (inputFile.hasFile()) { + if (configuration.getLengthWeightKeyFile().hasFile()) { - importResult = importLenghtWeightKey( + EchoBaseCsvFileImportResult importResult = importLenghtWeightKey( configuration, - inputFile, + configuration.getLengthWeightKeyFile(), voyageMap, strataMap, speciesMap @@ -118,12 +119,11 @@ public class ResultsVoyageImportService extends AbstractImportDataService<Result configuration.addResult(importResult); } - inputFile = configuration.getEchotypeFile(); - if (inputFile.hasFile()) { + if (configuration.getEchotypeFile().hasFile()) { - importResult = importEchotypeFile( + EchoBaseCsvFileImportResult importResult = importEchotypeFile( configuration, - inputFile, + configuration.getEchotypeFile(), voyageMap, speciesMap ); diff --git a/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties b/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties index 86b2e28..184fa24 100644 --- a/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties +++ b/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties @@ -38,6 +38,7 @@ echobase.importError.no.transit.between.date=No transit associated to voyage %s echobase.importError.no.voyage.imported=No voyage imported echobase.importError.transect.notfound=No parent transit for date %s and vessel %s in cruise %s (line %s) echobase.importError.transit.notfound=No parent transit for date %s in cruise %s (line %s) +echobase.importError.voyageResultImport.alreadyDone=There is already a such import (Voyage result) for the given voyage. echobase.importLabel.withFile=%s with file %s echobase.info.modifiedProperty=Property '%s', old value\: '%s', new value\: '%s' echobase.info.newEntityCreated=A new entity was created (%s) diff --git a/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties b/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties index d7b28bb..63b83dd 100644 --- a/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties +++ b/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties @@ -38,6 +38,7 @@ echobase.importError.no.transit.between.date=Pas de transit attribué au voyage echobase.importError.no.voyage.imported=Aucun voyage importé echobase.importError.transect.notfound=Pas de transit auquel rattacher la date %s et le navire %s dans la campagne %s (ligne %s) echobase.importError.transit.notfound=Pas de transit auquel rattacher la date %s dans la campagne %s (ligne %s) +echobase.importError.voyageResultImport.alreadyDone=Il existe déjà un import de type Résultat voyage pour le voyage sélectionné. echobase.importLabel.withFile=%s avec le fichier %s echobase.info.modifiedProperty=Propriété '%s', ancienne valeur \: '%s', nouvelle valeur \: '%s' echobase.info.newEntityCreated=Une nouvelle entité a été créée (%s) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.