This is an automated email from the git hooks/post-receive script. New commit to branch feature/2246 in repository echobase. See https://gitlab.nuiton.org/codelutin/echobase.git commit 73ff8998bbea1e78b5e9f802361b1289bb973868 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon May 9 14:49:36 2016 +0200 Ne pas autoriser de réimporter des transits déjà existants (See #2246) --- .../services/service/UserDbPersistenceService.java | 10 +++++ .../importdata/DuplicatedTransitException.java | 44 ++++++++++++++++++++++ .../actions/VoyageCommonsTransitImportAction.java | 6 +++ .../i18n/echobase-services_en_GB.properties | 1 + .../i18n/echobase-services_fr_FR.properties | 1 + 5 files changed, 62 insertions(+) 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 7a69216..435c166 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 @@ -898,6 +898,16 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { return persistenceContext.getTransitDao().forTopiaIdEquals(id).findUnique(); } + public boolean containsTransit(Voyage voyage, Date startTime, Date endTime) { + + return persistenceContext.getTransitDao() + .forVoyageEquals(voyage) + .addEquals(Transit.PROPERTY_START_TIME, startTime) + .addEquals(Transit.PROPERTY_END_TIME, endTime) + .exists(); + + } + public Transit getTransitContainsTransect(Transect transect) { return persistenceContext.getTransitDao().forTransectContains(transect).findAnyOrNull(); } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/DuplicatedTransitException.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/DuplicatedTransitException.java new file mode 100644 index 0000000..faa1111 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/DuplicatedTransitException.java @@ -0,0 +1,44 @@ +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.Date; +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 DuplicatedTransitException extends ImportRuntimeException { + + private static final long serialVersionUID = 1L; + + public DuplicatedTransitException(Locale locale, String voyageName, Date startTime, Date endTime) { + super(l(locale, "echobase.importError.duplicate.transit", voyageName, startTime, endTime)); + } +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCommonsTransitImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCommonsTransitImportAction.java index 28539a8..1ace01d 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCommonsTransitImportAction.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCommonsTransitImportAction.java @@ -4,6 +4,7 @@ import fr.ifremer.echobase.entities.EchoBaseUserEntityEnum; import fr.ifremer.echobase.entities.data.Transit; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.io.InputFile; +import fr.ifremer.echobase.services.service.importdata.DuplicatedTransitException; import fr.ifremer.echobase.services.service.importdata.ImportDataFileResult; import fr.ifremer.echobase.services.service.importdata.contexts.VoyageCommonsImportDataContext; import fr.ifremer.echobase.services.service.importdata.csv.VoyageCommonsTransitImportExportModel; @@ -62,6 +63,11 @@ public class VoyageCommonsTransitImportAction extends VoyageCommonsImportDataAct transit.setVoyage(voyage); transit.setRelatedActivity(relatedActivity); + boolean exists = persistenceService.containsTransit(voyage, transit.getStartTime(), transit.getEndTime()); + if (exists) { + throw new DuplicatedTransitException(getLocale(), voyage.getName(), transit.getStartTime(), transit.getEndTime()); + } + Transit createdTransit = persistenceService.createTransit(transit); voyage.addTransit(createdTransit); 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 67d54f5..b4759c4 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.transit=A transit with voyage named «%s», start «%s» - end «%s» already exists un database. 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) 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 bb59c23..c69df8c 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.transit=Le transit de marée nommée «%s», début «%s» - fin «%s» existe déjà dans la base. 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) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.