branch feature/2246 updated (42d9dbb -> 9f72d77)
This is an automated email from the git hooks/post-receive script. New change to branch feature/2246 in repository echobase. See https://gitlab.nuiton.org/codelutin/echobase.git from 42d9dbb Tester avant de supprimer lors de la suppression d'un import new 9f72d77 Ne pas autoriser de réimporter des meta sur les opérations et engins déjà existantes (See #2246) The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 9f72d77b3ef53ef5a390f1f9c790b541c3ae5e4b Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue May 10 09:46:46 2016 +0200 Ne pas autoriser de réimporter des meta sur les opérations et engins déjà existantes (See #2246) Summary of changes: .../services/service/UserDbPersistenceService.java | 24 ++++++++++++++++++++-- ...a => DuplicatedGearMetadataValueException.java} | 13 +++++++++--- ...DuplicatedOperationMetadataValueException.java} | 7 ++++--- .../VoyageOperationsGearMetadataImportAction.java | 23 +++++++++++++++++++++ ...ageOperationsOperationMetadataImportAction.java | 13 +++++++++++- .../i18n/echobase-services_en_GB.properties | 2 ++ .../i18n/echobase-services_fr_FR.properties | 2 ++ 7 files changed, 75 insertions(+), 9 deletions(-) copy echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/{DuplicatedOperationException.java => DuplicatedGearMetadataValueException.java} (60%) copy echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/{DuplicatedOperationException.java => DuplicatedOperationMetadataValueException.java} (75%) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 9f72d77b3ef53ef5a390f1f9c790b541c3ae5e4b Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue May 10 09:46:46 2016 +0200 Ne pas autoriser de réimporter des meta sur les opérations et engins déjà existantes (See #2246) --- .../services/service/UserDbPersistenceService.java | 24 ++++++++++- .../DuplicatedGearMetadataValueException.java | 50 ++++++++++++++++++++++ .../DuplicatedOperationMetadataValueException.java | 44 +++++++++++++++++++ .../VoyageOperationsGearMetadataImportAction.java | 23 ++++++++++ ...ageOperationsOperationMetadataImportAction.java | 13 +++++- .../i18n/echobase-services_en_GB.properties | 2 + .../i18n/echobase-services_fr_FR.properties | 2 + 7 files changed, 155 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 2bd2ca8..9d160ba 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 @@ -67,7 +67,10 @@ import fr.ifremer.echobase.entities.references.CellTypes; import fr.ifremer.echobase.entities.references.DataMetadata; import fr.ifremer.echobase.entities.references.DataQuality; import fr.ifremer.echobase.entities.references.DepthStratum; +import fr.ifremer.echobase.entities.references.Gear; +import fr.ifremer.echobase.entities.references.GearMetadata; import fr.ifremer.echobase.entities.references.Mission; +import fr.ifremer.echobase.entities.references.OperationMetadata; import fr.ifremer.echobase.entities.references.SampleDataType; import fr.ifremer.echobase.entities.references.SampleType; import fr.ifremer.echobase.entities.references.SexCategory; @@ -528,6 +531,17 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { //--- GearMetadataValue --------------------------------------------------// //------------------------------------------------------------------------// + public boolean containsGearMetadataValue(Voyage voyage, Vessel vessel, DepthStratum depthStratum, String operationId, Gear gear, GearMetadata gearMetadata) { + return persistenceContext.getGearMetadataValueDao() + .forGearMetadataEquals(gearMetadata) + .addEquals(GearMetadataValue.PROPERTY_GEAR, gear) + .addEquals(GearMetadataValue.PROPERTY_OPERATION + "." + Operation.PROPERTY_ID, operationId) + .addEquals(GearMetadataValue.PROPERTY_OPERATION + "." + Operation.PROPERTY_DEPTH_STRATUM, depthStratum) + .addEquals(GearMetadataValue.PROPERTY_OPERATION + "." + Operation.PROPERTY_TRANSECT + "." + Transect.PROPERTY_VESSEL, vessel) + .addEquals(GearMetadataValue.PROPERTY_OPERATION + "." + Operation.PROPERTY_TRANSECT + "." + Transect.PROPERTY_TRANSIT + "." + Transit.PROPERTY_VOYAGE, voyage) + .exists(); + } + public GearMetadataValue createGearMetadataValue(GearMetadataValue gearMetadataValue) { return persistenceContext.getGearMetadataValueDao().create(gearMetadataValue); } @@ -722,8 +736,14 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { //--- OperationMetadataValue ---------------------------------------------// //------------------------------------------------------------------------// - public OperationMetadataValue containsOperationOperationMetadataValue(OperationMetadataValue operationMetadataValue) { - return persistenceContext.getOperationMetadataValueDao().create(operationMetadataValue); + public boolean containsOperationMetadataValue(Voyage voyage, Vessel vessel, DepthStratum depthStratum, String operationId, OperationMetadata operationMetadata) { + return persistenceContext.getOperationMetadataValueDao() + .forOperationMetadataEquals(operationMetadata) + .addEquals(OperationMetadataValue.PROPERTY_OPERATION + "." + Operation.PROPERTY_ID, operationId) + .addEquals(OperationMetadataValue.PROPERTY_OPERATION + "." + Operation.PROPERTY_DEPTH_STRATUM, depthStratum) + .addEquals(OperationMetadataValue.PROPERTY_OPERATION + "." + Operation.PROPERTY_TRANSECT + "." + Transect.PROPERTY_VESSEL, vessel) + .addEquals(OperationMetadataValue.PROPERTY_OPERATION + "." + Operation.PROPERTY_TRANSECT + "." + Transect.PROPERTY_TRANSIT + "." + Transit.PROPERTY_VOYAGE, voyage) + .exists(); } public OperationMetadataValue getOperationMetadataValue(String id) { diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/DuplicatedGearMetadataValueException.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/DuplicatedGearMetadataValueException.java new file mode 100644 index 0000000..094318f --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/DuplicatedGearMetadataValueException.java @@ -0,0 +1,50 @@ +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 5/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 4.0 + */ +public class DuplicatedGearMetadataValueException extends ImportRuntimeException { + + private static final long serialVersionUID = 1L; + + public DuplicatedGearMetadataValueException(Locale locale, + String voyageName, + String vesselName, + String depthStratumName, + String operationId, + String gearName, + String gearMetatadataName) { + super(l(locale, "echobase.importError.duplicate.gearMetataValue", gearMetatadataName, gearName, operationId, depthStratumName, vesselName, voyageName)); + } + +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/DuplicatedOperationMetadataValueException.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/DuplicatedOperationMetadataValueException.java new file mode 100644 index 0000000..f3b3e8e --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/DuplicatedOperationMetadataValueException.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.Locale; + +import static org.nuiton.i18n.I18n.l; + +/** + * Created on 5/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 4.0 + */ +public class DuplicatedOperationMetadataValueException extends ImportRuntimeException { + + private static final long serialVersionUID = 1L; + + public DuplicatedOperationMetadataValueException(Locale locale, String voyageName, String vesselName, String depthStratumName, String operationId, String operationMetatadataName) { + super(l(locale, "echobase.importError.duplicate.operationMetataValue", operationMetatadataName, operationId, depthStratumName, vesselName, voyageName)); + } + +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageOperationsGearMetadataImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageOperationsGearMetadataImportAction.java index c8f7447..f2d95d0 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageOperationsGearMetadataImportAction.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageOperationsGearMetadataImportAction.java @@ -3,7 +3,10 @@ package fr.ifremer.echobase.services.service.importdata.actions; import fr.ifremer.echobase.entities.EchoBaseUserEntityEnum; import fr.ifremer.echobase.entities.data.GearMetadataValue; import fr.ifremer.echobase.entities.data.Operation; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.Vessel; import fr.ifremer.echobase.io.InputFile; +import fr.ifremer.echobase.services.service.importdata.DuplicatedGearMetadataValueException; import fr.ifremer.echobase.services.service.importdata.ImportDataFileResult; import fr.ifremer.echobase.services.service.importdata.contexts.VoyageOperationsImportDataContext; import fr.ifremer.echobase.services.service.importdata.csv.VoyageOperationsGearMetadataValueImportExportModel; @@ -44,6 +47,8 @@ public class VoyageOperationsGearMetadataImportAction extends VoyageOperationsIm log.info("Starts import of gear metadata values from file " + inputFile.getFileName()); } + Voyage voyage = importDataContext.getVoyage(); + try (Import<VoyageOperationsGearMetadataValueImportRow> importer = open()) { int rowNumber = 0; @@ -53,7 +58,25 @@ public class VoyageOperationsGearMetadataImportAction extends VoyageOperationsIm doFlushTransaction(++rowNumber); Operation operation = row.getOperation(); + Vessel vessel = operation.getTransect().getVessel(); GearMetadataValue gearMetadataValuetoCreate = row.getGearMetadataValue(); + + boolean exists = persistenceService.containsGearMetadataValue(voyage, + vessel, + operation.getDepthStratum(), + operation.getId(), + operation.getGear(), + gearMetadataValuetoCreate.getGearMetadata()); + if (exists) { + throw new DuplicatedGearMetadataValueException(getLocale(), + voyage.getName(), + vessel.getName(), + operation.getDepthStratum().getId(), + operation.getId(), + operation.getGear().getCasinoGearName(), + gearMetadataValuetoCreate.getGearMetadata().getName()); + } + GearMetadataValue gearMetadataValue = persistenceService.createGearMetadataValue(gearMetadataValuetoCreate); operation.addGearMetadataValue(gearMetadataValue); diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageOperationsOperationMetadataImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageOperationsOperationMetadataImportAction.java index d65576c..ea057f1 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageOperationsOperationMetadataImportAction.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageOperationsOperationMetadataImportAction.java @@ -3,7 +3,10 @@ package fr.ifremer.echobase.services.service.importdata.actions; import fr.ifremer.echobase.entities.EchoBaseUserEntityEnum; import fr.ifremer.echobase.entities.data.Operation; import fr.ifremer.echobase.entities.data.OperationMetadataValue; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.Vessel; import fr.ifremer.echobase.io.InputFile; +import fr.ifremer.echobase.services.service.importdata.DuplicatedOperationMetadataValueException; import fr.ifremer.echobase.services.service.importdata.ImportDataFileResult; import fr.ifremer.echobase.services.service.importdata.contexts.VoyageOperationsImportDataContext; import fr.ifremer.echobase.services.service.importdata.csv.VoyageOperationsOperationMetadataValueImportExportModel; @@ -44,6 +47,8 @@ public class VoyageOperationsOperationMetadataImportAction extends VoyageOperati log.info("Starts import of operation metadata values from file " + inputFile.getFileName()); } + Voyage voyage = importDataContext.getVoyage(); + try (Import<VoyageOperationsOperationMetadataValueImportRow> importer = open()) { int rowNumber = 0; @@ -52,8 +57,14 @@ public class VoyageOperationsOperationMetadataImportAction extends VoyageOperati doFlushTransaction(++rowNumber); Operation operation = row.getOperation(); - + Vessel vessel = operation.getTransect().getVessel(); OperationMetadataValue operationMetadataValueToCreate = row.getOperationMetadataValue(); + + boolean exists = persistenceService.containsOperationMetadataValue(voyage, vessel, operation.getDepthStratum(), operation.getId(), operationMetadataValueToCreate.getOperationMetadata()); + if (exists) { + throw new DuplicatedOperationMetadataValueException(getLocale(), voyage.getName(), vessel.getName(), operation.getDepthStratum().getId(), operation.getId(), operationMetadataValueToCreate.getOperationMetadata().getName()); + } + OperationMetadataValue operationMetadataValue = persistenceService.createOperationMetadataValue(operationMetadataValueToCreate); operation.addOperationMetadataValue(operationMetadataValue); 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 63c6612..47c684c 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 @@ -32,7 +32,9 @@ echobase.common.voyageFile=Voyage data file 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.gearMetataValue=A gear meta data (type «%s») value on engin «%s» for operation with id «%s», on startum «%s» - vessel «%s» on voyage «%s» already exists in database. echobase.importError.duplicate.operation=An operation with id «%s», on startum «%s» - vessel «%s» on voyage «%s» already exists in database. +echobase.importError.duplicate.operationMetataValue=An operation meta data (type «%s») value for operation with id «%s», on startum «%s» - vessel «%s» on voyage «%s» already exists in database. echobase.importError.duplicate.sample=Operation %s cannot comprise several samples of same type, species and size category echobase.importError.duplicate.transect=A transect titled «%s» on voyage «%s» already exists in database. echobase.importError.duplicate.transit=A transit start «%s» - end «%s» on voyage «%s» already exists in database. 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 d898fff..9ab4be7 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 @@ -32,7 +32,9 @@ echobase.common.voyageFile=Fichier des données de voyages 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.gearMetataValue=La mise en œuvre (type %s) de l'engin «%s» (opération d'identifiant «%s» sur la strate «%s» - navire «%s» et sur la marée nommée «%s») existe déjà dans la base. echobase.importError.duplicate.operation=L'opération d'identifiant «%s» sur la strate «%s» - navire «%s» et sur la marée nommée «%s» existe déjà dans la base. +echobase.importError.duplicate.operationMetataValue=La donnée (type %s) (opération d'identifiant «%s» sur la strate «%s» - navire «%s» et sur la marée nommée «%s») existe déjà dans la base. 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.transect=Le transect nommé «%s» sur la marée nommée «%s» existe déjà dans la base. echobase.importError.duplicate.transit=Le transit début «%s» - fin «%s» sur la marée nommée «%s» existe déjà dans la base. -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm