01/27: Ne pas autorisé un import d'un voyage déjà existant (clef unique name) (See #2246)
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository echobase. See https://gitlab.nuiton.org/codelutin/echobase.git commit 1541342e799e303c66794950deca07c828e724f0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon May 9 13:01:12 2016 +0200 Ne pas autorisé un import d'un voyage déjà existant (clef unique name) (See #2246) --- .../services/service/UserDbPersistenceService.java | 6 +++ .../importdata/DuplicatedVoyageException.java | 43 ++++++++++++++++++++++ .../actions/VoyageCommonsVoyageImportAction.java | 13 +++++-- .../i18n/echobase-services_en_GB.properties | 1 + .../i18n/echobase-services_fr_FR.properties | 1 + 5 files changed, 61 insertions(+), 3 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 90524e7..7a69216 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 @@ -946,6 +946,12 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { persistenceContext.getVoyageDao().delete(voyage); } + public boolean containsVoyageByName(String voyageName) { + return persistenceContext.getVoyageDao() + .forNameEquals(voyageName) + .exists(); + } + //------------------------------------------------------------------------// //--- Transversal --------------------------------------------------------// //------------------------------------------------------------------------// diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/DuplicatedVoyageException.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/DuplicatedVoyageException.java new file mode 100644 index 0000000..d6316a7 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/DuplicatedVoyageException.java @@ -0,0 +1,43 @@ +package fr.ifremer.echobase.services.service.importdata; + +/* + * #%L + * EchoBase :: Services + * %% + * Copyright (C) 2011 - 2015 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 org.nuiton.csv.ImportRuntimeException; + +import java.util.Locale; + +import static org.nuiton.i18n.I18n.l; + +/** + * Created on 1/21/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 2.9 + */ +public class DuplicatedVoyageException extends ImportRuntimeException { + + private static final long serialVersionUID = 1L; + + public DuplicatedVoyageException(Locale locale, String voyageName) { + super(l(locale, "echobase.importError.duplicate.voyage", voyageName)); + } +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCommonsVoyageImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCommonsVoyageImportAction.java index 619aa02..1d6e4a4 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCommonsVoyageImportAction.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCommonsVoyageImportAction.java @@ -5,6 +5,8 @@ import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.AreaOfOperation; import fr.ifremer.echobase.entities.references.Mission; import fr.ifremer.echobase.io.InputFile; +import fr.ifremer.echobase.services.service.UserDbPersistenceService; +import fr.ifremer.echobase.services.service.importdata.DuplicatedVoyageException; import fr.ifremer.echobase.services.service.importdata.ImportDataFileResult; import fr.ifremer.echobase.services.service.importdata.MoreThanOnceVoyageToImportException; import fr.ifremer.echobase.services.service.importdata.NoVoyageToImportException; @@ -49,8 +51,9 @@ public class VoyageCommonsVoyageImportAction extends VoyageCommonsImportDataActi log.info("Starts import of voyages from file " + inputFile.getFileName()); } - Mission mission = getPersistenceService().getMission(importDataContext.getConfiguration().getMissionId()); - AreaOfOperation areaOfOperation = getPersistenceService().getAreaOfOperation(importDataContext.getConfiguration().getAreaOfOperationId()); + UserDbPersistenceService persistenceService = getPersistenceService(); + Mission mission = persistenceService.getMission(importDataContext.getConfiguration().getMissionId()); + AreaOfOperation areaOfOperation = persistenceService.getAreaOfOperation(importDataContext.getConfiguration().getAreaOfOperationId()); String voyageDescription = getConfiguration().getVoyageDescription(); String datum = getConfiguration().getDatum(); @@ -68,12 +71,16 @@ public class VoyageCommonsVoyageImportAction extends VoyageCommonsImportDataActi doFlushTransaction(++rowNumber); + if (persistenceService.containsVoyageByName(voyage.getName())) { + throw new DuplicatedVoyageException(locale, voyage.getName()); + } + voyage.setMission(mission); voyage.setAreaOfOperation(areaOfOperation); voyage.setDescription(voyageDescription); voyage.setDatum(datum); - Voyage createdVoyage = getPersistenceService().createVoyage(voyage); + Voyage createdVoyage = persistenceService.createVoyage(voyage); if (newVoyage == null) { newVoyage = createdVoyage; } else { 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 b0141d5..67d54f5 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 @@ -33,6 +33,7 @@ echobase.exportError.toFile=An error occured while exporting file %s \:%s echobase.importError.can.only.import.one.voyage.atime=Impossible to import more that one voyage at a time echobase.importError.dataMetadata.notFound=Metadata column %s missing (existing values \:%s) echobase.importError.duplicate.sample=Operation %s cannot comprise several samples of same type, species and size category +echobase.importError.duplicate.voyage=A voyage named «%s» already exists un database. echobase.importError.elementaryCell.withMissingDepthEnd=Elementary Cell (id\: %s - name %s) does not contains data in column MOVIES_EILayer\\cellset\\depthend, this is not allowed echobase.importError.esduCell.notfound=A new « dataAquisition» entry must be created for survey %s, vessel %s, instrument %s, whereas some elementary cells are not associated to an ESDU cell (line %s) echobase.importError.esduCell.withDepthEndFilled=ESDU Cell (id\: %s - name %s) contains data in column MOVIES_EILayer\\cellset\\depthend, this is not allowed. 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 d958650..bb59c23 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 @@ -33,6 +33,7 @@ echobase.exportError.toFile=Erreur lors de l'extraction du fichier %s \: %s echobase.importError.can.only.import.one.voyage.atime=Vous ne pouvez pas importer plus d'un voyage à la fois echobase.importError.dataMetadata.notFound=Colonne de métadonnées nommée %s non trouvée (valeurs existantes \: %s) echobase.importError.duplicate.sample=L'opération %s ne peut pas contenir deux échantillons de même type %s, espèce %s et classe de taille %s +echobase.importError.duplicate.voyage=La marée nommée «%s» existe déjà dans la base. echobase.importError.elementaryCell.withMissingDepthEnd=La cellule de type élémentaire (id\: %s - nom %s) ne contient pas la colonne MOVIES_EILayer\\cellset\\depthend renseignée, ce qui n'est pas autorisé. echobase.importError.esduCell.notfound=Un nouvelle entrée « dataAquisition »doit être créée pour la campagne %s, navire %s, instrument %s, mais il reste des cellules élémentaires non rattachées à une cellule ESDU (ligne %s) echobase.importError.esduCell.withDepthEndFilled=La cellule de type ESDU (id\: %s - nom %s) contient la colonne MOVIES_EILayer\\cellset\\depthend renseignée, ce qui n'est pas autorisé. -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm