[tutti] branch develop updated (cb4c611 -> 93bdff5)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository tutti. See http://git.codelutin.com/tutti.git from cb4c611 fixes #5997 [IMPORT] Améliorer la gestion des référentiels temporaires new f123505 fixes #5038 [IMPORT] afficher le résultat de l'import d'un fichier de référence temporaire : nb lignes lues et importées new 93bdff5 refs #5038 [IMPORT] afficher le résultat de l'import d'un fichier de référence temporaire : nb lignes lues et importées refs #5997 The 2 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 93bdff5504d49a220b35430ac66eadff0947de7c Author: Kevin Morin <morin@codelutin.com> Date: Mon Nov 3 10:33:45 2014 +0100 refs #5038 [IMPORT] afficher le résultat de l'import d'un fichier de référence temporaire : nb lignes lues et importées refs #5997 commit f123505bdb387da19761c0c5f7a0c4fd1338839e Author: Kevin Morin <morin@codelutin.com> Date: Thu Oct 30 18:36:00 2014 +0100 fixes #5038 [IMPORT] afficher le résultat de l'import d'un fichier de référence temporaire : nb lignes lues et importées Summary of changes: .../entities/referential/VesselBean.java | 11 ++ .../service/ReferentialPersistenceServiceImpl.java | 65 ++++++---- .../referential/ReferentialImportResult.java | 67 +++++++++++ .../referential/ReferentialImportService.java | 132 ++++++++++++++++----- .../resources/i18n/tutti-service_en_GB.properties | 2 + .../resources/i18n/tutti-service_fr_FR.properties | 2 + .../referential/ReferentialImportServiceTest.java | 37 +++--- .../ExportExistingTemporaryVesselAction.java | 2 +- .../ui/swing/action/ImportTemporaryGearAction.java | 10 +- .../swing/action/ImportTemporaryPersonAction.java | 11 +- .../swing/action/ImportTemporarySpeciesAction.java | 11 +- .../swing/action/ImportTemporaryVesselAction.java | 11 +- .../resources/i18n/tutti-ui-swing_en_GB.properties | 8 ++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 8 ++ .../src/main/resources/icons/action-delete.png | Bin 363 -> 949 bytes 15 files changed, 304 insertions(+), 73 deletions(-) create mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/VesselBean.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportResult.java -- 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit f123505bdb387da19761c0c5f7a0c4fd1338839e Author: Kevin Morin <morin@codelutin.com> Date: Thu Oct 30 18:36:00 2014 +0100 fixes #5038 [IMPORT] afficher le résultat de l'import d'un fichier de référence temporaire : nb lignes lues et importées --- .../referential/ReferentialImportResult.java | 67 ++++++++++++++++++ .../referential/ReferentialImportService.java | 75 ++++++++++++++++----- .../referential/ReferentialImportServiceTest.java | 37 +++++----- .../ui/swing/action/ImportTemporaryGearAction.java | 10 ++- .../swing/action/ImportTemporaryPersonAction.java | 11 ++- .../swing/action/ImportTemporarySpeciesAction.java | 11 ++- .../swing/action/ImportTemporaryVesselAction.java | 11 ++- .../resources/i18n/tutti-ui-swing_en_GB.properties | 8 +++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 8 +++ .../src/main/resources/icons/action-delete.png | Bin 363 -> 949 bytes 10 files changed, 202 insertions(+), 36 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportResult.java new file mode 100644 index 0000000..6b5ae09 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportResult.java @@ -0,0 +1,67 @@ +package fr.ifremer.tutti.service.referential; + +import fr.ifremer.tutti.persistence.entities.TuttiEntity; +import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * @author Kevin Morin (Code Lutin) + * @since 3.8 + */ +public class ReferentialImportResult<E extends TuttiReferentialEntity> { + + protected List<E> refAdded = new ArrayList<>(); + protected List<E> refUpdated = new ArrayList<>(); + protected int nbRefDeleted = 0; + + public List<E> getRefAdded() { + return refAdded; + } + + public void setRefAdded(List<E> refAdded) { + this.refAdded = refAdded; + } + + public void addRefAdded(E ref) { + refAdded.add(ref); + } + + public void addAllRefsAdded(Collection<E> refs) { + refAdded.addAll(refs); + } + + public int getNbRefAdded() { + return refAdded.size(); + } + + public List<E> getRefUpdated() { + return refUpdated; + } + + public void setRefUpdated(List<E> refUpdated) { + this.refUpdated = refUpdated; + } + + public void addRefUpdated(E ref) { + refUpdated.add(ref); + } + + public void addAllRefsUpdated(Collection<E> refs) { + refUpdated.addAll(refs); + } + + public int getNbRefUpdated() { + return refUpdated.size(); + } + + public int getNbRefDeleted() { + return nbRefDeleted; + } + + public void setNbRefDeleted(int nbRefDeleted) { + this.nbRefDeleted = nbRefDeleted; + } +} 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 4c34d4e..16ff873 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 @@ -81,7 +81,9 @@ public class ReferentialImportService extends AbstractTuttiService { persistenceService = getService(PersistenceService.class); } - public List<Species> importTemporarySpecies(File file) throws IOException { + public ReferentialImportResult<Species> importTemporarySpecies(File file) throws IOException { + + ReferentialImportResult<Species> result = new ReferentialImportResult<>(); if (log.isInfoEnabled()) { log.info("Will import species from file: " + file); @@ -99,7 +101,8 @@ public class ReferentialImportService extends AbstractTuttiService { Set<Integer> existingSpeciesIds = new HashSet<>(TuttiEntities.toIntegerIds(allSpecies)); - List<Species> toImport = Lists.newArrayList(); + List<Species> toAdd = Lists.newArrayList(); + List<Species> toUpdate = Lists.newArrayList(); List<Integer> toDelete = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); @@ -132,7 +135,12 @@ public class ReferentialImportService extends AbstractTuttiService { toDelete.add(id); } else { - toImport.add(bean); + if (bean.getId() == null) { + toAdd.add(bean); + + } else { + toUpdate.add(bean); + } } } importer.close(); @@ -160,13 +168,18 @@ public class ReferentialImportService extends AbstractTuttiService { } persistenceService.deleteTemporarySpecies(toDelete, true); + result.setNbRefDeleted(toDelete.size()); - List<Species> result = persistenceService.importTemporarySpecies(toImport); + result.addAllRefsAdded(persistenceService.importTemporarySpecies(toAdd)); + result.addAllRefsUpdated(persistenceService.importTemporarySpecies(toUpdate)); return result; } - public List<Vessel> importTemporaryVessel(File file) throws IOException { + public ReferentialImportResult<Vessel> importTemporaryVessel(File file) throws IOException { + + ReferentialImportResult<Vessel> result = new ReferentialImportResult<>(); + if (log.isInfoEnabled()) { log.info("Will import vessels from file: " + file); } @@ -185,7 +198,8 @@ public class ReferentialImportService extends AbstractTuttiService { Set<String> existingIds = Sets.newHashSet( Lists.transform(existingVessels, vesselToId)); - List<Vessel> toImport = Lists.newArrayList(); + List<Vessel> toAdd = Lists.newArrayList(); + List<Vessel> toUpdate = Lists.newArrayList(); List<String> toDelete = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); @@ -216,7 +230,12 @@ public class ReferentialImportService extends AbstractTuttiService { toDelete.add(currentId); } else { - toImport.add(bean); + if (bean.getId() == null) { + toAdd.add(bean); + + } else { + toUpdate.add(bean); + } } } importer.close(); @@ -244,13 +263,18 @@ public class ReferentialImportService extends AbstractTuttiService { } persistenceService.deleteTemporaryVessels(toDelete, true); + result.setNbRefDeleted(toDelete.size()); - List<Vessel> result = persistenceService.importTemporaryVessel(toImport); + result.addAllRefsAdded(persistenceService.importTemporaryVessel(toAdd)); + result.addAllRefsUpdated(persistenceService.importTemporaryVessel(toUpdate)); return result; } - public List<Person> importTemporaryPerson(File file) throws IOException { + public ReferentialImportResult<Person> importTemporaryPerson(File file) throws IOException { + + ReferentialImportResult<Person> result = new ReferentialImportResult<>(); + if (log.isInfoEnabled()) { log.info("Will import persons from file: " + file); } @@ -259,7 +283,8 @@ public class ReferentialImportService extends AbstractTuttiService { Set<Integer> existingPersonIds = new HashSet<>(TuttiEntities.toIntegerIds(allPersons)); - List<Person> toImport = Lists.newArrayList(); + List<Person> toAdd = Lists.newArrayList(); + List<Person> toUpdate = Lists.newArrayList(); List<Integer> toDelete = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); @@ -286,7 +311,12 @@ public class ReferentialImportService extends AbstractTuttiService { toDelete.add(id); } else { - toImport.add(bean); + if (bean.getId() == null) { + toAdd.add(bean); + + } else { + toUpdate.add(bean); + } } } importer.close(); @@ -314,13 +344,18 @@ public class ReferentialImportService extends AbstractTuttiService { } persistenceService.deleteTemporaryPersons(toDelete, true); + result.setNbRefDeleted(toDelete.size()); - List<Person> result = persistenceService.importTemporaryPerson(toImport); + result.addAllRefsAdded(persistenceService.importTemporaryPerson(toAdd)); + result.addAllRefsUpdated(persistenceService.importTemporaryPerson(toUpdate)); return result; } - public List<Gear> importTemporaryGear(File file) throws IOException { + public ReferentialImportResult<Gear> importTemporaryGear(File file) throws IOException { + + ReferentialImportResult<Gear> result = new ReferentialImportResult<>(); + if (log.isInfoEnabled()) { log.info("Will import gears from file: " + file); } @@ -338,7 +373,8 @@ public class ReferentialImportService extends AbstractTuttiService { Set<Integer> existingGearIds = new HashSet<>(TuttiEntities.toIntegerIds(allGears)); - List<Gear> toImport = Lists.newArrayList(); + List<Gear> toAdd = Lists.newArrayList(); + List<Gear> toUpdate = Lists.newArrayList(); List<Integer> toDelete = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); @@ -371,7 +407,12 @@ public class ReferentialImportService extends AbstractTuttiService { toDelete.add(id); } else { - toImport.add(bean); + if (bean.getId() == null) { + toAdd.add(bean); + + } else { + toUpdate.add(bean); + } } } importer.close(); @@ -399,8 +440,10 @@ public class ReferentialImportService extends AbstractTuttiService { } persistenceService.deleteTemporaryGears(toDelete, true); + result.setNbRefDeleted(toDelete.size()); - List<Gear> result = persistenceService.importTemporaryGear(toImport); + result.addAllRefsAdded(persistenceService.importTemporaryGear(toAdd)); + result.addAllRefsUpdated(persistenceService.importTemporaryGear(toUpdate)); return result; } diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportServiceTest.java index e598395..65596e0 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportServiceTest.java @@ -178,12 +178,13 @@ public class ReferentialImportServiceTest { // successful import Files.write(SPECIES_FILE_CONTENT, file, Charsets.UTF_8); - List<Species> result = service.importTemporarySpecies(file); + ReferentialImportResult<Species> result = service.importTemporarySpecies(file); + List<Species> addedSpecies = result.getRefAdded(); Assert.assertNotNull(result); - Assert.assertEquals(3, result.size()); + Assert.assertEquals(3, addedSpecies.size()); for (int i = 1; i <= 3; i++) { - Species actual = result.get(i - 1); + Species actual = addedSpecies.get(i - 1); Assert.assertNotNull(actual); Assert.assertEquals("-" + i, actual.getId()); Assert.assertEquals("Temporary Species name " + i, actual.getName()); @@ -202,9 +203,10 @@ public class ReferentialImportServiceTest { Files.write(SPECIES_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); result = service.importTemporarySpecies(file); + List<Species> updatedSpecies = result.getRefUpdated(); Assert.assertNotNull(result); - Assert.assertEquals(1, result.size()); - Species actual = result.get(0); + Assert.assertEquals(1, updatedSpecies.size()); + Species actual = updatedSpecies.get(0); Assert.assertNotNull(actual); Assert.assertEquals("-1", actual.getId()); Assert.assertEquals("Temporary Species name 11", actual.getName()); @@ -285,12 +287,13 @@ public class ReferentialImportServiceTest { Files.write(VESSEL_FILE_CONTENT, file, Charsets.UTF_8); - List<Vessel> result = service.importTemporaryVessel(file); + ReferentialImportResult<Vessel> result = service.importTemporaryVessel(file); + List<Vessel> addedVessels = result.getRefAdded(); Assert.assertNotNull(result); - Assert.assertEquals(4, result.size()); + Assert.assertEquals(4, addedVessels.size()); for (int i = 1; i <= 2; i++) { - Vessel actual = result.get(i - 1); + Vessel actual = addedVessels.get(i - 1); Assert.assertNotNull(actual); Assert.assertEquals("#TEMP¿" + actual.getInternationalRegistrationCode(), actual.getId()); Assert.assertEquals("Temporary fishing vessel name " + i, actual.getName()); @@ -298,7 +301,7 @@ public class ReferentialImportServiceTest { Assert.assertFalse(actual.isScientificVessel()); } for (int i = 3; i <= 4; i++) { - Vessel actual = result.get(i - 1); + Vessel actual = addedVessels.get(i - 1); Assert.assertNotNull(actual); Assert.assertEquals("#TEMP¿" + actual.getInternationalRegistrationCode(), actual.getId()); Assert.assertEquals("Temporary scientific vessel name " + i, actual.getName()); @@ -341,12 +344,13 @@ public class ReferentialImportServiceTest { Files.write(PERSON_FILE_CONTENT, file, Charsets.UTF_8); // successful import - List<Person> result = service.importTemporaryPerson(file); + ReferentialImportResult<Person> result = service.importTemporaryPerson(file); + List<Person> addedPersons = result.getRefAdded(); Assert.assertNotNull(result); - Assert.assertEquals(3, result.size()); + Assert.assertEquals(3, addedPersons.size()); for (int i = 1; i <= 3; i++) { - Person actual = result.get(i - 1); + Person actual = addedPersons.get(i - 1); Assert.assertNotNull(actual); Assert.assertEquals("-" + i, actual.getId()); Assert.assertEquals("First name " + i, actual.getFirstName()); @@ -381,12 +385,13 @@ public class ReferentialImportServiceTest { Files.write(GEAR_FILE_CONTENT, file, Charsets.UTF_8); - List<Gear> result = service.importTemporaryGear(file); + ReferentialImportResult<Gear> result = service.importTemporaryGear(file); + List<Gear> addedGears = result.getRefAdded(); Assert.assertNotNull(result); - Assert.assertEquals(4, result.size()); + Assert.assertEquals(4, addedGears.size()); for (int i = 1; i <= 2; i++) { - Gear actual = result.get(i - 1); + Gear actual = addedGears.get(i - 1); Assert.assertNotNull(actual); Assert.assertTrue(actual.getId().startsWith("-")); Assert.assertEquals("Gear fishing name " + i, actual.getName()); @@ -394,7 +399,7 @@ public class ReferentialImportServiceTest { Assert.assertFalse(actual.isScientificGear()); } for (int i = 3; i <= 4; i++) { - Gear actual = result.get(i - 1); + Gear actual = addedGears.get(i - 1); Assert.assertNotNull(actual); Assert.assertTrue(actual.getId().startsWith("-")); Assert.assertEquals("Gear scientific name " + i, actual.getName()); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryGearAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryGearAction.java index ffb2617..c6e68ad 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryGearAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryGearAction.java @@ -23,6 +23,8 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.service.referential.ReferentialImportResult; import fr.ifremer.tutti.service.referential.ReferentialImportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; @@ -47,6 +49,7 @@ public class ImportTemporaryGearAction extends AbstractTuttiAction<TuttiUIContex LogFactory.getLog(ImportTemporaryGearAction.class); private File file; + private ReferentialImportResult<Gear> result; public ImportTemporaryGearAction(ManageTemporaryReferentialUIHandler handler) { super(handler, true); @@ -85,7 +88,7 @@ public class ImportTemporaryGearAction extends AbstractTuttiAction<TuttiUIContex } ReferentialImportService service = getContext().getTuttiReferentialImportService(); - service.importTemporaryGear(file); + result = service.importTemporaryGear(file); // reset ui cache getDataContext().resetGears(); @@ -97,6 +100,11 @@ public class ImportTemporaryGearAction extends AbstractTuttiAction<TuttiUIContex public void postSuccessAction() { super.postSuccessAction(); + String title = t("tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import.dialog.title"); + String message = t("tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import.dialog.message", + result.getNbRefAdded(), result.getNbRefUpdated(), result.getNbRefDeleted()); + displayInfoMessage(title, message); + sendMessage(t("tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import.success", file)); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryPersonAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryPersonAction.java index e04b90e..414a680 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryPersonAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryPersonAction.java @@ -23,6 +23,8 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.entities.referential.Person; +import fr.ifremer.tutti.service.referential.ReferentialImportResult; import fr.ifremer.tutti.service.referential.ReferentialImportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; @@ -47,6 +49,7 @@ public class ImportTemporaryPersonAction extends AbstractTuttiAction<TuttiUICont LogFactory.getLog(ImportTemporaryPersonAction.class); private File file; + private ReferentialImportResult<Person> result; public ImportTemporaryPersonAction(ManageTemporaryReferentialUIHandler handler) { super(handler, true); @@ -87,7 +90,7 @@ public class ImportTemporaryPersonAction extends AbstractTuttiAction<TuttiUICont ReferentialImportService service = getContext().getTuttiReferentialImportService(); - service.importTemporaryPerson(file); + result = service.importTemporaryPerson(file); // reset ui cache getDataContext().resetPersons(); @@ -98,6 +101,12 @@ public class ImportTemporaryPersonAction extends AbstractTuttiAction<TuttiUICont @Override public void postSuccessAction() { super.postSuccessAction(); + + String title = t("tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import.dialog.title"); + String message = t("tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import.dialog.message", + result.getNbRefAdded(), result.getNbRefUpdated(), result.getNbRefDeleted()); + displayInfoMessage(title, message); + sendMessage(t("tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import.success", file)); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporarySpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporarySpeciesAction.java index f46de21..1174984 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporarySpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporarySpeciesAction.java @@ -23,6 +23,8 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.referential.ReferentialImportResult; import fr.ifremer.tutti.service.referential.ReferentialImportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; @@ -47,6 +49,7 @@ public class ImportTemporarySpeciesAction extends AbstractTuttiAction<TuttiUICon LogFactory.getLog(ImportTemporarySpeciesAction.class); private File file; + private ReferentialImportResult<Species> result; public ImportTemporarySpeciesAction(ManageTemporaryReferentialUIHandler handler) { super(handler, true); @@ -86,7 +89,7 @@ public class ImportTemporarySpeciesAction extends AbstractTuttiAction<TuttiUICon ReferentialImportService service = getContext().getTuttiReferentialImportService(); - service.importTemporarySpecies(file); + result = service.importTemporarySpecies(file); // reset ui cache getDataContext().resetSpecies(); @@ -97,6 +100,12 @@ public class ImportTemporarySpeciesAction extends AbstractTuttiAction<TuttiUICon @Override public void postSuccessAction() { super.postSuccessAction(); + + String title = t("tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import.dialog.title"); + String message = t("tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import.dialog.message", + result.getNbRefAdded(), result.getNbRefUpdated(), result.getNbRefDeleted()); + displayInfoMessage(title, message); + sendMessage(t("tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import.success", file)); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryVesselAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryVesselAction.java index 1752611..15cb64a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryVesselAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryVesselAction.java @@ -23,6 +23,8 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.service.referential.ReferentialImportResult; import fr.ifremer.tutti.service.referential.ReferentialImportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; @@ -47,6 +49,7 @@ public class ImportTemporaryVesselAction extends AbstractTuttiAction<TuttiUICont LogFactory.getLog(ImportTemporaryVesselAction.class); private File file; + private ReferentialImportResult<Vessel> result; public ImportTemporaryVesselAction(ManageTemporaryReferentialUIHandler handler) { super(handler, true); @@ -86,7 +89,7 @@ public class ImportTemporaryVesselAction extends AbstractTuttiAction<TuttiUICont ReferentialImportService service = getContext().getTuttiReferentialImportService(); - service.importTemporaryVessel(file); + result = service.importTemporaryVessel(file); // reset ui cache getDataContext().resetVessels(); @@ -97,6 +100,12 @@ public class ImportTemporaryVesselAction extends AbstractTuttiAction<TuttiUICont @Override public void postSuccessAction() { super.postSuccessAction(); + + String title = t("tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import.dialog.title"); + String message = t("tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import.dialog.message", + result.getNbRefAdded(), result.getNbRefUpdated(), result.getNbRefDeleted()); + displayInfoMessage(title, message); + sendMessage(t("tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import.success", file)); } } diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 7ce6de1..cb488eb 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -1425,18 +1425,26 @@ tutti.manageTemporaryReferential.action.chooseExistingReferentialVesselFile.expo tutti.manageTemporaryReferential.action.chooseReferentialGearFile.export= tutti.manageTemporaryReferential.action.chooseReferentialGearFile.export.success= tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import= +tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import.dialog.message= +tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import.dialog.title= tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import.success= tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.export= tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.export.success= tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import= +tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import.dialog.message= +tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import.dialog.title= tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import.success= tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.export= tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.export.success= tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import= +tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import.dialog.message= +tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import.dialog.title= tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import.success= tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export= tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export.success= tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import= +tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import.dialog.message= +tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import.dialog.title= tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import.success= tutti.manageTemporaryReferential.action.exportExistingTemporaryGear= tutti.manageTemporaryReferential.action.exportExistingTemporaryGear.tip= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 72597ac..8c5e81e 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -1377,18 +1377,26 @@ tutti.manageTemporaryReferential.action.chooseExistingReferentialVesselFile.expo tutti.manageTemporaryReferential.action.chooseReferentialGearFile.export=Exporter tutti.manageTemporaryReferential.action.chooseReferentialGearFile.export.success=Exemple de référentiel temporaire d'engins exporté dans le fichier %s tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import=Importer +tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import.dialog.message=<html><div>Import réussi</div><ul><li>%1$s engins ajoutés</li><li>%2$s engins mis à jour</li><li>%3$s engins supprimés</li></ul> +tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import.dialog.title=Import réussi tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import.success=Référentiel temporaire d'engins importé depuis le fichier %s tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.export=Exporter tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.export.success=Exemple de référentiel temporaire de personnes exporté dans le fichier %s tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import=Importer +tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import.dialog.message=<html><div>Import réussi</div><ul><li>%1$s personnes ajoutées</li><li>%2$s personnes mises à jour</li><li>%3$s personnes supprimées</li></ul> +tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import.dialog.title=Import réussi tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import.success=Référentiel temporaire de personnes importé depuis le fichier %s tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.export=Exporter tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.export.success=Exemple de référentiel temporaire d'espèces exporté dans le fichier %s tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import=Importer +tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import.dialog.message=<html><div>Import réussi</div><ul><li>%1$s espèces ajoutées</li><li>%2$s espèces mises à jour</li><li>%3$s espèces supprimées</li></ul> +tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import.dialog.title=Import réussi tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import.success=Référentiel temporaire d'espèces importé depuis le fichier %s tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export=Exporter tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export.success=Exemple de référentiel temporaire de navires exporté dans le fichier %s tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import=Importer +tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import.dialog.message=<html><div>Import réussi</div><ul><li>%1$s navires ajoutés</li><li>%2$s navires mis à jour</li><li>%3$s navires supprimés</li></ul> +tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import.dialog.title=Import réussi tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import.success=Référentiel temporaire de navires importé depuis le fichier %s tutti.manageTemporaryReferential.action.exportExistingTemporaryGear=Exporter l'existant tutti.manageTemporaryReferential.action.exportExistingTemporaryGear.tip=Exporter le référentiel Engin existant diff --git a/tutti-ui-swing/src/main/resources/icons/action-delete.png b/tutti-ui-swing/src/main/resources/icons/action-delete.png index afe22ba..4726aa5 100644 Binary files a/tutti-ui-swing/src/main/resources/icons/action-delete.png and b/tutti-ui-swing/src/main/resources/icons/action-delete.png differ -- 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 develop in repository tutti. See http://git.codelutin.com/tutti.git commit 93bdff5504d49a220b35430ac66eadff0947de7c Author: Kevin Morin <morin@codelutin.com> Date: Mon Nov 3 10:33:45 2014 +0100 refs #5038 [IMPORT] afficher le résultat de l'import d'un fichier de référence temporaire : nb lignes lues et importées refs #5997 --- .../entities/referential/VesselBean.java | 11 ++++ .../service/ReferentialPersistenceServiceImpl.java | 65 ++++++++++++++-------- .../referential/ReferentialImportService.java | 57 +++++++++++++++---- .../resources/i18n/tutti-service_en_GB.properties | 2 + .../resources/i18n/tutti-service_fr_FR.properties | 2 + .../ExportExistingTemporaryVesselAction.java | 2 +- 6 files changed, 102 insertions(+), 37 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 new file mode 100644 index 0000000..51cff83 --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/VesselBean.java @@ -0,0 +1,11 @@ +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 1808f1f..be73b89 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 @@ -712,7 +712,10 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic Preconditions.checkNotNull(entity); Preconditions.checkNotNull(entity.getId()); Preconditions.checkNotNull(entity.getStatus()); - return StatusCode.TEMPORARY.getValue().equals(entity.getStatus().getId()) && entity.getIdAsInt() < 0; + + return StatusCode.TEMPORARY.getValue().equals(entity.getStatus().getId()) && + (entity.getIdAsInt() != null && entity.getIdAsInt() < 0 + || entity.getId() != null && entity.getId().startsWith(TemporaryDataHelper.TEMPORARY_NAME_PREFIX)); } @Override @@ -1047,21 +1050,21 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic @Override public boolean isTemporaryPersonUsed(Integer id) { - Long count = queryUniqueTyped("replaceManagerPersonInScientificCruise", "id", IntegerType.INSTANCE, id); + Long count = queryUniqueTyped("countManagerPersonInScientificCruise", "id", IntegerType.INSTANCE, id); boolean result = count > 0; if (!result) { - count = queryUniqueTyped("replaceRecorderPersonInScientificCruise", "id", IntegerType.INSTANCE, id); + count = queryUniqueTyped("countRecorderPersonInScientificCruise", "id", IntegerType.INSTANCE, id); result = count > 0; } if (!result) { - count = queryUniqueTyped("replaceRecorderPersonInFishingTrip", "id", IntegerType.INSTANCE, id); + count = queryUniqueTyped("countRecorderPersonInFishingTrip", "id", IntegerType.INSTANCE, id); result = count > 0; } if (!result) { - count = queryUniqueTyped("replacePersonInVesselPersonFeatures", "id", IntegerType.INSTANCE, id); + count = queryUniqueTyped("countPersonInVesselPersonFeatures", "id", IntegerType.INSTANCE, id); result = count > 0; } @@ -1082,11 +1085,11 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic @Override public boolean isTemporaryGearUsed(Integer id) { - Long count = queryUniqueTyped("replaceGearInGearPhysicalFeatures", "id", IntegerType.INSTANCE, id); + Long count = queryUniqueTyped("countGearInGearPhysicalFeatures", "id", IntegerType.INSTANCE, id); boolean result = count > 0; if (!result) { - count = queryUniqueTyped("replaceGearInGearUseFeatures", "id", IntegerType.INSTANCE, id); + count = queryUniqueTyped("countGearInGearUseFeatures", "id", IntegerType.INSTANCE, id); result = count > 0; } return result; @@ -1094,46 +1097,46 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic @Override public boolean isTemporaryVesselUsed(String code) { - Long count = queryUniqueTyped("replaceVesselInCruise", "id", StringType.INSTANCE, code); + Long count = queryUniqueTyped("countVesselInCruise", "id", StringType.INSTANCE, code); boolean result = count > 0; if (!result) { - count = queryUniqueTyped("replaceVesselInFishingOperation", "id", StringType.INSTANCE, code); + count = queryUniqueTyped("countVesselInFishingOperation", "id", StringType.INSTANCE, code); result = count > 0; } if (!result) { - count = queryUniqueTyped("replaceVesselInOperationVesselAssociation", "id", StringType.INSTANCE, code); + count = queryUniqueTyped("countVesselInOperationVesselAssociation", "id", StringType.INSTANCE, code); result = count > 0; } if (!result) { - count = queryUniqueTyped("replaceVesselInDailyActivityCalendar", "id", StringType.INSTANCE, code); + count = queryUniqueTyped("countVesselInDailyActivityCalendar", "id", StringType.INSTANCE, code); result = count > 0; } if (!result) { - count = queryUniqueTyped("replaceVesselInLanding", "id", StringType.INSTANCE, code); + count = queryUniqueTyped("countVesselInLanding", "id", StringType.INSTANCE, code); result = count > 0; } if (!result) { - count = queryUniqueTyped("replaceVesselInFishingtrip", "id", StringType.INSTANCE, code); + count = queryUniqueTyped("countVesselInFishingtrip", "id", StringType.INSTANCE, code); result = count > 0; } if (!result) { - count = queryUniqueTyped("replaceVesselInVesselUseFeatures", "id", StringType.INSTANCE, code); + count = queryUniqueTyped("countVesselInVesselUseFeatures", "id", StringType.INSTANCE, code); result = count > 0; } if (!result) { - count = queryUniqueTyped("replaceVesselInGearUseFeatures", "id", StringType.INSTANCE, code); + count = queryUniqueTyped("countVesselInGearUseFeatures", "id", StringType.INSTANCE, code); result = count > 0; } if (!result) { - count = queryUniqueTyped("replaceVesselInGearPhysicalFeatures", "id", StringType.INSTANCE, code); + count = queryUniqueTyped("countVesselInGearPhysicalFeatures", "id", StringType.INSTANCE, code); result = count > 0; } @@ -1180,11 +1183,19 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic Preconditions.checkNotNull(source.getFirstName()); Preconditions.checkNotNull(source.getLastName()); - fr.ifremer.adagio.core.dao.administration.user.Person target = personDao.createAsTemporary(source.getLastName(), source.getFirstName(), DepartmentId.UNKNOWN_RECORDER_DEPARTMENT.getValue()); + Person result; + if (source.getId() != null) { + result = getPerson(source.getIdAsInt()); + + } else { + fr.ifremer.adagio.core.dao.administration.user.Person target = + personDao.createAsTemporary(source.getLastName(), source.getFirstName(), + DepartmentId.UNKNOWN_RECORDER_DEPARTMENT.getValue()); + result = Persons.newPerson(); + result.setId(target.getId()); + } // Fill the result bean - Person result = Persons.newPerson(); - result.setId(target.getId()); result.setLastName(source.getLastName()); result.setFirstName(source.getFirstName()); setStatus(status, result); @@ -1197,8 +1208,8 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic Preconditions.checkArgument(source.getIdAsInt() == null || source.getIdAsInt() < 0); TaxonRefVO taxonRefVO = null; - if (source.getId() != null) { - taxonRefVO = taxonNameDao.getTaxonNameReferent(source.getIdAsInt()); + if (source.getReferenceTaxonId() != null) { + taxonRefVO = taxonNameDao.getTaxonNameReferent(source.getReferenceTaxonId()); } if (taxonRefVO == null) { taxonRefVO = new TaxonRefVO(); @@ -1236,11 +1247,17 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic gearClassificationId = GearClassificationId.FAO.getValue(); } - fr.ifremer.adagio.core.dao.referential.gear.Gear target = fishingGearDao.createAsTemporary(source.getLabel(), source.getName(), gearClassificationId); + Gear result; + if (source.getId() != null) { + result = getGear(source.getIdAsInt()); + + } else { + fr.ifremer.adagio.core.dao.referential.gear.Gear target = fishingGearDao.createAsTemporary(source.getLabel(), source.getName(), gearClassificationId); + result = Gears.newGear(); + result.setId(target.getId()); + } // Fill the result bean - Gear result = Gears.newGear(); - result.setId(target.getId()); result.setLabel(source.getLabel()); result.setName(source.getName()); result.setScientificGear(source.isScientificGear()); 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 16ff873..aee5192 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 @@ -55,8 +55,10 @@ import java.io.File; import java.io.IOException; import java.io.Reader; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -98,8 +100,8 @@ public class ReferentialImportService extends AbstractTuttiService { return input.getName(); } })); - - Set<Integer> existingSpeciesIds = new HashSet<>(TuttiEntities.toIntegerIds(allSpecies)); + Map<Integer, Species> existingSpeciesById = TuttiEntities.splitByIdAsInt(allSpecies); + Set<Integer> existingSpeciesIds = new HashSet<>(existingSpeciesById.keySet()); List<Species> toAdd = Lists.newArrayList(); List<Species> toUpdate = Lists.newArrayList(); @@ -116,6 +118,7 @@ public class ReferentialImportService extends AbstractTuttiService { Integer id = bean.getIdAsInt(); String name = bean.getName(); + Species species = existingSpeciesById.get(id); boolean delete = BooleanUtils.isTrue(bean.getToDelete()); if (id != null && existingSpeciesIds.add(id)) { @@ -124,7 +127,8 @@ public class ReferentialImportService extends AbstractTuttiService { } else if (StringUtils.isBlank(name)) { throw new IllegalArgumentException(t("tutti.service.referential.import.species.noName.error", id)); - } else if (!delete && !existingSpeciesNames.add(name)) { + } else if (!delete && !existingSpeciesNames.add(name) && + (id == null || species != null && !species.getName().equals(name))) { throw new IllegalArgumentException(t("tutti.service.referential.import.species.existingName.error", name)); } @@ -133,12 +137,14 @@ public class ReferentialImportService extends AbstractTuttiService { throw new IllegalArgumentException(t("tutti.service.referential.import.species.used.error", id)); } toDelete.add(id); + existingSpeciesNames.remove(name); } else { if (bean.getId() == null) { toAdd.add(bean); } else { + bean.setReferenceTaxonId(species.getReferenceTaxonId()); toUpdate.add(bean); } } @@ -191,12 +197,11 @@ public class ReferentialImportService extends AbstractTuttiService { Function<Vessel, String> vesselToId = new Function<Vessel, String>() { @Override public String apply(Vessel input) { - return input.getName() + "#" + input.getInternationalRegistrationCode(); + return input.getRegistrationCode(); } }; - Set<String> existingIds = Sets.newHashSet( - Lists.transform(existingVessels, vesselToId)); + Set<String> existingIds = Sets.newHashSet(Lists.transform(existingVessels, vesselToId)); List<Vessel> toAdd = Lists.newArrayList(); List<Vessel> toUpdate = Lists.newArrayList(); @@ -211,10 +216,10 @@ public class ReferentialImportService extends AbstractTuttiService { for (final VesselRow bean : importer) { - String currentId = vesselToId.apply(bean); + String currentId = bean.getId(); boolean delete = BooleanUtils.isTrue(bean.getToDelete()); - if (!existingIds.add(currentId)) { + if (existingIds.add(currentId)) { // id was already in universe throw new ApplicationTechnicalException( @@ -281,7 +286,16 @@ public class ReferentialImportService extends AbstractTuttiService { List<Person> allPersons = persistenceService.getAllPerson(); - Set<Integer> existingPersonIds = new HashSet<>(TuttiEntities.toIntegerIds(allPersons)); + // get all species names + Set<String> existingPersonFullNames = Sets.newHashSet(Iterables.transform(allPersons, new Function<Person, String>() { + @Override + public String apply(Person input) { + return getPersonFullName(input); + } + })); + Map<Integer, Person> existingPersonsById = TuttiEntities.splitByIdAsInt(allPersons); + + Set<Integer> existingPersonIds = new HashSet<>(existingPersonsById.keySet()); List<Person> toAdd = Lists.newArrayList(); List<Person> toUpdate = Lists.newArrayList(); @@ -297,11 +311,19 @@ public class ReferentialImportService extends AbstractTuttiService { for (PersonRow bean : importer) { Integer id = bean.getIdAsInt(); - String name = bean.getName(); + Person person = existingPersonsById.get(id); + String name = getPersonFullName(bean); boolean delete = BooleanUtils.isTrue(bean.getToDelete()); if (id != null && existingPersonIds.add(id)) { throw new IllegalArgumentException(t("tutti.service.referential.import.person.notExistingId.error", id)); + + } else if (StringUtils.isBlank(name)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.person.noName.error", id)); + + } else if (!delete && !existingPersonFullNames.add(name) && + (id == null || person != null && !person.getName().equals(name))) { + throw new IllegalArgumentException(t("tutti.service.referential.import.person.existingName.error", name)); } if (delete) { @@ -309,6 +331,7 @@ public class ReferentialImportService extends AbstractTuttiService { throw new IllegalArgumentException(t("tutti.service.referential.import.person.used.error", id)); } toDelete.add(id); + existingPersonFullNames.remove(name); } else { if (bean.getId() == null) { @@ -352,6 +375,12 @@ public class ReferentialImportService extends AbstractTuttiService { return result; } + protected String getPersonFullName(Person person) { + return StringUtils.lowerCase( + StringUtils.trimToEmpty(person.getFirstName()) + + StringUtils.trimToEmpty(person.getLastName())); + } + public ReferentialImportResult<Gear> importTemporaryGear(File file) throws IOException { ReferentialImportResult<Gear> result = new ReferentialImportResult<>(); @@ -371,7 +400,8 @@ public class ReferentialImportService extends AbstractTuttiService { } })); - Set<Integer> existingGearIds = new HashSet<>(TuttiEntities.toIntegerIds(allGears)); + Map<Integer, Gear> existingGearsById = TuttiEntities.splitByIdAsInt(allGears); + Set<Integer> existingGearIds = new HashSet<>(existingGearsById.keySet()); List<Gear> toAdd = Lists.newArrayList(); List<Gear> toUpdate = Lists.newArrayList(); @@ -387,6 +417,7 @@ public class ReferentialImportService extends AbstractTuttiService { for (GearRow bean : importer) { Integer id = bean.getIdAsInt(); + Gear gear = existingGearsById.get(id); String name = bean.getName(); boolean delete = BooleanUtils.isTrue(bean.getToDelete()); @@ -396,7 +427,8 @@ public class ReferentialImportService extends AbstractTuttiService { } else if (StringUtils.isBlank(name)) { throw new IllegalArgumentException(t("tutti.service.referential.import.gear.noName.error", id)); - } else if (!delete && !existingGearNames.add(name)) { + } else if (!delete && !existingGearNames.add(name) && + (id == null || gear != null && !gear.getName().equals(name))) { throw new IllegalArgumentException(t("tutti.service.referential.import.gear.existingName.error", name)); } @@ -405,6 +437,7 @@ public class ReferentialImportService extends AbstractTuttiService { throw new IllegalArgumentException(t("tutti.service.referential.import.species.used.error", id)); } toDelete.add(id); + existingGearNames.remove(name); } else { if (bean.getId() == null) { 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 7280f5c..ef1186d 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 @@ -222,7 +222,9 @@ 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.gears.error= +tutti.service.referential.import.person.existingName.error= tutti.service.referential.import.person.idNotNegative.error= +tutti.service.referential.import.person.noName.error= tutti.service.referential.import.person.notExistingId.error= tutti.service.referential.import.person.used.error= tutti.service.referential.import.persons.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 41648ed..480f3b6 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 @@ -202,7 +202,9 @@ tutti.service.referential.import.gear.idNotNegative.error=L'identifiant d'un eng tutti.service.referential.import.gear.noName.error= tutti.service.referential.import.gear.notExistingId.error=L'identifiant '%s' n'a pas été trouvé parmi les engins temporaires 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.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.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.persons.error=Erreur lors de l'import des personnes du fichier %s diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryVesselAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryVesselAction.java index 314d4f5..a759de1 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryVesselAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryVesselAction.java @@ -61,7 +61,7 @@ public class ExportExistingTemporaryVesselAction extends AbstractTuttiAction<Tut // choose file to export file = saveFile( - "exportTemporaryExample", + "exportTemporaryVessels", "csv", t("tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryVesselFile"), t("tutti.manageTemporaryReferential.action.chooseExistingReferentialVesselFile.export"), -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm