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 68079f023d5b9010b6fb19f95c6366b6a56b7ca7 Author: Kevin Morin <morin@codelutin.com> Date: Mon Nov 3 14:42:52 2014 +0100 refs #5828 --- .../entities/referential/VesselBean.java | 11 ------ .../service/ReferentialPersistenceServiceImpl.java | 11 ++++-- .../referential/ReferentialExportService.java | 4 +++ .../referential/ReferentialImportService.java | 39 +++++++++++++--------- .../tutti/service/referential/VesselModel.java | 8 +++-- .../resources/i18n/tutti-service_en_GB.properties | 4 +++ .../resources/i18n/tutti-service_fr_FR.properties | 22 +++++++----- .../ManageTemporaryReferentialUIHandler.java | 2 +- 8 files changed, 58 insertions(+), 43 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/VesselBean.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/VesselBean.java deleted file mode 100644 index 51cff83..0000000 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/VesselBean.java +++ /dev/null @@ -1,11 +0,0 @@ -package fr.ifremer.tutti.persistence.entities.referential; - -/** - * @author Kevin Morin (Code Lutin) - * @since 3.8 - */ -public class VesselBean extends AbstractVesselBean { - - private static final long serialVersionUID = 7220732795288760932L; - -} diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java index be73b89..9896723 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java @@ -713,9 +713,14 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic Preconditions.checkNotNull(entity.getId()); Preconditions.checkNotNull(entity.getStatus()); - return StatusCode.TEMPORARY.getValue().equals(entity.getStatus().getId()) && - (entity.getIdAsInt() != null && entity.getIdAsInt() < 0 - || entity.getId() != null && entity.getId().startsWith(TemporaryDataHelper.TEMPORARY_NAME_PREFIX)); + boolean tempId; + if (entity instanceof Vessel) { + tempId = entity.getId() != null && entity.getId().startsWith(TemporaryDataHelper.TEMPORARY_NAME_PREFIX); + } else { + tempId = entity.getIdAsInt() != null && entity.getIdAsInt() < 0; + } + + return StatusCode.TEMPORARY.getValue().equals(entity.getStatus().getId()) && tempId; } @Override diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialExportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialExportService.java index a4e4853..35fd6c5 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialExportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialExportService.java @@ -141,24 +141,28 @@ public class ReferentialExportService extends AbstractTuttiService { Vessel v; v = Vessels.newVessel(); + v.setRegistrationCode("RegCode1"); v.setName("Temporary fishing vessel name 1"); v.setInternationalRegistrationCode("International registration code F1"); v.setScientificVessel(false); toExport.add(v); v = Vessels.newVessel(); + v.setRegistrationCode("RegCode2"); v.setName("Temporary fishing vessel name 2"); v.setInternationalRegistrationCode("International registration code F2"); v.setScientificVessel(false); toExport.add(v); v = Vessels.newVessel(); + v.setRegistrationCode("RegCode3"); v.setName("Temporary scientific vessel name 3"); v.setInternationalRegistrationCode("International registration code S3"); v.setScientificVessel(true); toExport.add(v); v = Vessels.newVessel(); + v.setRegistrationCode("RegCode4"); v.setName("Temporary scientific vessel name 4"); v.setInternationalRegistrationCode("International registration code S4"); v.setScientificVessel(true); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportService.java index aee5192..d4a40e0 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportService.java @@ -24,8 +24,11 @@ package fr.ifremer.tutti.service.referential; import com.google.common.base.Charsets; import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.common.io.Files; import fr.ifremer.tutti.persistence.entities.TuttiEntities; @@ -194,14 +197,14 @@ public class ReferentialImportService extends AbstractTuttiService { List<Vessel> existingVessels = Lists.newArrayList(persistenceService.getAllFishingVessel()); existingVessels.addAll(persistenceService.getAllScientificVessel()); - Function<Vessel, String> vesselToId = new Function<Vessel, String>() { + Set<String> existingVesselRegistrationCodes = Sets.newHashSet(Iterables.transform(existingVessels, new Function<Vessel, String>() { @Override public String apply(Vessel input) { return input.getRegistrationCode(); } - }; - - Set<String> existingIds = Sets.newHashSet(Lists.transform(existingVessels, vesselToId)); + })); + Map<String, Vessel> existingVesselsById = TuttiEntities.splitById(existingVessels); + Set<String> existingVesselIds = new HashSet<>(existingVesselsById.keySet()); List<Vessel> toAdd = Lists.newArrayList(); List<Vessel> toUpdate = Lists.newArrayList(); @@ -216,26 +219,30 @@ public class ReferentialImportService extends AbstractTuttiService { for (final VesselRow bean : importer) { - String currentId = bean.getId(); + String id = StringUtils.trimToNull(bean.getId()); + String registrationCode = bean.getRegistrationCode(); + Vessel vessel = existingVesselsById.get(id); boolean delete = BooleanUtils.isTrue(bean.getToDelete()); - if (existingIds.add(currentId)) { + if (id != null && existingVesselIds.add(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.notExistingId.error", id)); + + } else if (StringUtils.isBlank(registrationCode)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.noRegistrationCode.error", id)); - // id was already in universe - throw new ApplicationTechnicalException( - t("tutti.service.referential.import.vessels.existingValue.error", - bean.getName(), - bean.getInternationalRegistrationCode())); + } else if (!delete && !existingVesselRegistrationCodes.add(registrationCode) && + (id == null || vessel != null && !vessel.getRegistrationCode().equals(registrationCode))) { + throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.existingRegistrationCode.error", registrationCode)); } if (delete) { - if (persistenceService.isTemporaryVesselUsed(currentId)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.used.error", currentId)); + if (persistenceService.isTemporaryVesselUsed(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.used.error", id)); } - toDelete.add(currentId); + toDelete.add(id); } else { - if (bean.getId() == null) { + if (id == null) { toAdd.add(bean); } else { @@ -434,7 +441,7 @@ public class ReferentialImportService extends AbstractTuttiService { if (delete) { if (persistenceService.isTemporaryGearUsed(id)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.species.used.error", id)); + throw new IllegalArgumentException(t("tutti.service.referential.import.gear.used.error", id)); } toDelete.add(id); existingGearNames.remove(name); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java index bdcc1c5..061cfb2 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java @@ -44,7 +44,7 @@ public class VesselModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Ves // import definition - newMandatoryColumn(VesselRow.PROPERTY_ID, Vessel.PROPERTY_REGISTRATION_CODE, new Common.StringValueParser() { + newMandatoryColumn(VesselRow.PROPERTY_ID, new Common.StringValueParser() { @Override public String parse(String value) { @@ -56,7 +56,7 @@ public class VesselModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Ves // must also start with the temporary prefix if (!parse.startsWith(TemporaryDataHelper.TEMPORARY_NAME_PREFIX)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.codePrefixMissing.error", parse));//"Code of a temporary vessel must starts with " + TemporaryDataHelper.TEMPORARY_NAME_PREFIX + ", but was: " + parse); + throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.codePrefixMissing.error", TemporaryDataHelper.TEMPORARY_NAME_PREFIX, parse));//"Code of a temporary vessel must starts with " + TemporaryDataHelper.TEMPORARY_NAME_PREFIX + ", but was: " + parse); } } @@ -66,6 +66,7 @@ public class VesselModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Ves }); + newMandatoryColumn(VesselRow.PROPERTY_REGISTRATION_CODE); newMandatoryColumn(VesselRow.PROPERTY_NAME); newMandatoryColumn(VesselRow.PROPERTY_INTERNATIONAL_REGISTRATION_CODE); newMandatoryColumn(VesselRow.PROPERTY_SCIENTIFIC_VESSEL, Common.PRIMITIVE_BOOLEAN); @@ -73,7 +74,8 @@ public class VesselModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Ves // export definition - newColumnForExport(VesselRow.PROPERTY_ID, Vessel.PROPERTY_REGISTRATION_CODE); + newColumnForExport(VesselRow.PROPERTY_ID); + newColumnForExport(VesselRow.PROPERTY_REGISTRATION_CODE); newColumnForExport(VesselRow.PROPERTY_NAME); newColumnForExport(VesselRow.PROPERTY_INTERNATIONAL_REGISTRATION_CODE); newColumnForExport(VesselRow.PROPERTY_SCIENTIFIC_VESSEL, Common.PRIMITIVE_BOOLEAN); diff --git a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties index ef1186d..e5fb55e 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties @@ -221,6 +221,7 @@ tutti.service.referential.import.gear.existingName.error= tutti.service.referential.import.gear.idNotNegative.error= tutti.service.referential.import.gear.noName.error= tutti.service.referential.import.gear.notExistingId.error= +tutti.service.referential.import.gear.used.error= tutti.service.referential.import.gears.error= tutti.service.referential.import.person.existingName.error= tutti.service.referential.import.person.idNotNegative.error= @@ -235,6 +236,9 @@ tutti.service.referential.import.species.noName.error= tutti.service.referential.import.species.notExistingId.error= tutti.service.referential.import.species.used.error= tutti.service.referential.import.vessel.codePrefixMissing.error= +tutti.service.referential.import.vessel.existingRegistrationCode.error= +tutti.service.referential.import.vessel.noRegistrationCode.error= +tutti.service.referential.import.vessel.notExistingId.error= tutti.service.referential.import.vessel.used.error= tutti.service.referential.import.vessels.error= tutti.service.referential.import.vessels.existingValue.error= diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 480f3b6..455163e 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -197,25 +197,29 @@ tutti.service.referential.export.gear.error=Erreur lors de l'export des engins d tutti.service.referential.export.person.error=Erreur lors de l'export des personnes dans le fichier %s tutti.service.referential.export.species.error=Erreur lors de l'export des espèces dans le fichier %s tutti.service.referential.export.vessel.error=Erreur lors de l'export des navires dans le fichier %s -tutti.service.referential.import.gear.existingName.error=L'engin '%2$s' n'a pas été ajouté au référentiel car il est déjà présent +tutti.service.referential.import.gear.existingName.error=L'engin '%s' n'a pas été ajouté au référentiel car il est déjà présent tutti.service.referential.import.gear.idNotNegative.error=L'identifiant d'un engin temporaire doit être négatif \: %s -tutti.service.referential.import.gear.noName.error= +tutti.service.referential.import.gear.noName.error=Le nom de l'engin est obligatoire tutti.service.referential.import.gear.notExistingId.error=L'identifiant '%s' n'a pas été trouvé parmi les engins temporaires +tutti.service.referential.import.gear.used.error=L'engin temporaire %s est utilisé dans l'application. Vous devez le remplacer pour pouvoir le supprimer. tutti.service.referential.import.gears.error=Erreur lors de l'import des engins du fichier %s -tutti.service.referential.import.person.existingName.error= +tutti.service.referential.import.person.existingName.error=Une personne avec ce nom (nom + prénom) existe déjà tutti.service.referential.import.person.idNotNegative.error=L'identifiant d'une personne temporaire doit être négatif \: %s -tutti.service.referential.import.person.noName.error= +tutti.service.referential.import.person.noName.error=Le nom de la personne (prénom ou nom) est obligatoire tutti.service.referential.import.person.notExistingId.error=L'identifiant '%s' n'a pas été trouvé parmi les personnes temporaires -tutti.service.referential.import.person.used.error= +tutti.service.referential.import.person.used.error=La personne temporaire %s est utilisée dans l'application. Vous devez la remplacer pour pouvoir la supprimer. tutti.service.referential.import.persons.error=Erreur lors de l'import des personnes du fichier %s tutti.service.referential.import.species.error=Erreur lors de l'import des espèces du fichier %s -tutti.service.referential.import.species.existingName.error=L'espèce '%2$s' n'a pas été ajoutée au référentiel car elle est déjà présente +tutti.service.referential.import.species.existingName.error=L'espèce '%s' n'a pas été ajoutée au référentiel car elle est déjà présente tutti.service.referential.import.species.idNotNegative.error=L'identifiant d'une espèce temporaire doit être négatif \: %s tutti.service.referential.import.species.noName.error=Le nom pour l'espèce %s est obligatoire. tutti.service.referential.import.species.notExistingId.error=L'identifiant '%s' n'a pas été trouvé parmi les espèces temporaires -tutti.service.referential.import.species.used.error=L'espèce temporaire %s est utilisée dans l'application. Vous devez la rmeplacer avant de la supprimer. -tutti.service.referential.import.vessel.codePrefixMissing.error= -tutti.service.referential.import.vessel.used.error= +tutti.service.referential.import.species.used.error=L'espèce temporaire %s est utilisée dans l'application. Vous devez la remplacer pour pouvoir la supprimer. +tutti.service.referential.import.vessel.codePrefixMissing.error=L'identifiant d'un navire temporaire doit commencer par %1$s \: %2$s +tutti.service.referential.import.vessel.existingRegistrationCode.error=Le navire '%s' n'a pas été ajouté au référentiel car il est déjà présent +tutti.service.referential.import.vessel.noRegistrationCode.error=L'immatriculation est obligatoire +tutti.service.referential.import.vessel.notExistingId.error=L'identifiant '%s' n'a pas été trouvé parmi les navires temporaires +tutti.service.referential.import.vessel.used.error=Le navire temporaire %s est utilisé dans l'application. Vous devez le remplacer pour pouvoir le supprimer. tutti.service.referential.import.vessels.error=Erreur lors de l'import des navires du fichier %s tutti.service.referential.import.vessels.existingValue.error=Un navire avec le nom %1s et l'immatriculation %2s existe déjà dans le référentiel tutti.service.sumatra.export.error=Erreur lors de l'export Sumatra dans le fichier %s diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUIHandler.java index d25f10c..be9ba9a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUIHandler.java @@ -116,7 +116,7 @@ public class ManageTemporaryReferentialUIHandler extends AbstractTuttiUIHandler< } public void resetExportPersonAction() { - resetExportSpeciesAction = true; + resetExportPersonsAction = true; try { ui.getPersonActionComboBox().setSelectedIndex(0); } finally { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.