[tutti] branch develop updated (025896a -> cb4c611)
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 025896a Fixes #6008 : Specifications update & Syntaxical corrections new 3aba570 refs #5997 split import - export service + begin of implements delete and other stuff... new f08a90a refs #5997 adapt import - export models new cb2c598 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires add export existing data buttons (and replace button rows by combobox) new 8a34ee5 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires new 10f59f1 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires new 3165a31 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires new 75d0348 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires new cb4c611 fixes #5997 [IMPORT] Améliorer la gestion des référentiels temporaires The 8 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 cb4c611f5866f6b20108f532f3d3547a11a6c0fb Author: Kevin Morin <morin@codelutin.com> Date: Tue Oct 28 10:28:17 2014 +0100 fixes #5997 [IMPORT] Améliorer la gestion des référentiels temporaires commit 75d034868f81adea31fa77afc1cdb65744b5e3e5 Author: Kevin Morin <morin@codelutin.com> Date: Mon Oct 27 17:29:24 2014 +0100 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires commit 3165a319f5b8f1635dff0870f3429d0a4997d07c Author: Kevin Morin <morin@codelutin.com> Date: Mon Oct 27 16:56:27 2014 +0100 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires commit 10f59f14423b8eb8395f436e79049253aef373dd Author: Kevin Morin <morin@codelutin.com> Date: Fri Oct 24 17:38:58 2014 +0200 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires commit 8a34ee5e8816dcfbe8a7a470bc1c8f28338fa788 Author: Kevin Morin <morin@codelutin.com> Date: Thu Oct 23 18:13:22 2014 +0200 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires commit cb2c5986bb53108357b1ae0e78e34fa622af9757 Author: Kevin Morin <morin@codelutin.com> Date: Thu Oct 23 12:13:31 2014 +0200 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires add export existing data buttons (and replace button rows by combobox) commit f08a90aaa61173b5aa3b512ef973b3b80dff6f7f Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Oct 21 18:35:06 2014 +0200 refs #5997 adapt import - export models commit 3aba570d9b5400698d0554947486f488b444a490 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Oct 21 18:11:58 2014 +0200 refs #5997 split import - export service + begin of implements delete and other stuff... Summary of changes: .../tutti/persistence/TuttiPersistenceImpl.java | 76 +- .../persistence/TuttiPersistenceNoDbImpl.java | 68 +- .../tutti/persistence/entities/TuttiEntity.java | 4 + .../persistence/entities/TuttiEntityBean.java | 5 + .../entities/data/SpeciesAbleBatch.java | 63 -- .../service/ReferentialPersistenceService.java | 145 +++- .../service/ReferentialPersistenceServiceImpl.java | 257 ++++++- .../src/main/resources/queries-failsafe.hbm.xml | 153 ++++ .../ifremer/tutti/service/PersistenceService.java | 76 +- .../catches/WeightComputingService.java.orig | 778 --------------------- .../tutti/service/referential/GearModel.java | 47 +- .../ifremer/tutti/service/referential/GearRow.java | 37 + .../tutti/service/referential/PersonModel.java | 43 +- .../tutti/service/referential/PersonRow.java | 36 + .../referential/ReferentialExportService.java | 329 +++++++++ ...tService.java => ReferentialImportService.java} | 302 +++++++- .../tutti/service/referential/SpeciesModel.java | 43 +- .../tutti/service/referential/SpeciesRow.java | 35 + .../tutti/service/referential/VesselModel.java | 47 +- .../tutti/service/referential/VesselRow.java | 38 + .../resources/i18n/tutti-service_en_GB.properties | 12 + .../resources/i18n/tutti-service_fr_FR.properties | 12 + .../tutti/service/PersistenceServiceTest.java | 20 +- .../referential/ReferentialExportServiceTest.java | 139 ++++ .../ReferentialImportExportServiceTest.java | 285 -------- .../referential/ReferentialImportServiceTest.java | 458 ++++++++++++ .../filtered-resources/tutti-help-fr.properties | 29 +- .../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 11 +- .../action/AbstractReplaceTemporaryUIAction.java | 17 +- ...java => ExportExistingTemporaryGearAction.java} | 24 +- ...va => ExportExistingTemporaryPersonAction.java} | 27 +- ...a => ExportExistingTemporarySpeciesAction.java} | 24 +- ...va => ExportExistingTemporaryVesselAction.java} | 24 +- .../action/ExportTemporaryGearExampleAction.java | 5 +- .../action/ExportTemporaryPersonExampleAction.java | 7 +- .../ExportTemporarySpeciesExampleAction.java | 7 +- .../action/ExportTemporaryVesselExampleAction.java | 7 +- .../ui/swing/action/ImportTemporaryGearAction.java | 7 +- .../swing/action/ImportTemporaryPersonAction.java | 7 +- .../swing/action/ImportTemporarySpeciesAction.java | 7 +- .../swing/action/ImportTemporaryVesselAction.java | 7 +- .../action/OpenReplaceTemporaryGearUIAction.java | 5 + .../action/OpenReplaceTemporaryPersonUIAction.java | 6 +- .../OpenReplaceTemporarySpeciesUIAction.java | 5 + .../action/OpenReplaceTemporaryVesselUIAction.java | 5 + .../swing/action/ReplaceTemporaryGearAction.java | 4 +- .../swing/action/ReplaceTemporaryPersonAction.java | 4 +- .../action/ReplaceTemporarySpeciesAction.java | 4 +- .../swing/action/ReplaceTemporaryVesselAction.java | 4 +- .../swing/content/home/SelectCruiseUIHandler.java | 11 +- .../catches/species/SpeciesBatchRowModel.java | 1 - .../referential/ManageTemporaryReferentialUI.css | 52 ++ .../referential/ManageTemporaryReferentialUI.jaxx | 54 +- .../ManageTemporaryReferentialUIHandler.java | 108 ++- .../replace/AbstractReplaceTemporaryUI.css | 7 + .../replace/AbstractReplaceTemporaryUI.jaxx | 7 + .../replace/AbstractReplaceTemporaryUIModel.java | 13 + .../ui/swing/util/AbstractTuttiBeanUIModel.java | 5 + .../ifremer/tutti/ui/swing/util/TuttiUIUtil.java | 13 +- .../resources/i18n/tutti-ui-swing_en_GB.properties | 23 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 31 +- 61 files changed, 2682 insertions(+), 1398 deletions(-) delete mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SpeciesAbleBatch.java delete mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/catches/WeightComputingService.java.orig create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearRow.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonRow.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialExportService.java rename tutti-service/src/main/java/fr/ifremer/tutti/service/referential/{ReferentialImportExportService.java => ReferentialImportService.java} (55%) create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesRow.java create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselRow.java create mode 100644 tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java delete mode 100644 tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportExportServiceTest.java create mode 100644 tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportServiceTest.java copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/{ExportTemporaryGearExampleAction.java => ExportExistingTemporaryGearAction.java} (74%) copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/{ExportTemporarySpeciesExampleAction.java => ExportExistingTemporaryPersonAction.java} (76%) copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/{ExportTemporaryVesselExampleAction.java => ExportExistingTemporarySpeciesAction.java} (74%) copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/{ExportTemporarySpeciesExampleAction.java => ExportExistingTemporaryVesselAction.java} (78%) -- 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 3aba570d9b5400698d0554947486f488b444a490 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Oct 21 18:11:58 2014 +0200 refs #5997 split import - export service + begin of implements delete and other stuff... --- .../tutti/persistence/TuttiPersistenceImpl.java | 36 +- .../persistence/TuttiPersistenceNoDbImpl.java | 28 +- .../service/ReferentialPersistenceService.java | 56 +- .../service/ReferentialPersistenceServiceImpl.java | 97 ++- .../ifremer/tutti/service/PersistenceService.java | 36 +- .../catches/WeightComputingService.java.orig | 778 --------------------- ...tService.java => ReferentialExportService.java} | 276 ++------ ...tService.java => ReferentialImportService.java} | 75 +- .../tutti/service/PersistenceServiceTest.java | 20 +- .../referential/ReferentialExportServiceTest.java | 139 ++++ ...Test.java => ReferentialImportServiceTest.java} | 69 +- .../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 11 +- .../action/AbstractReplaceTemporaryUIAction.java | 17 +- ...java => ExportExistingTemporaryGearAction.java} | 19 +- ...va => ExportExistingTemporaryPersonAction.java} | 19 +- ...a => ExportExistingTemporarySpeciesAction.java} | 19 +- ...va => ExportExistingTemporaryVesselAction.java} | 23 +- .../action/ExportTemporaryGearExampleAction.java | 5 +- .../action/ExportTemporaryPersonExampleAction.java | 7 +- .../ExportTemporarySpeciesExampleAction.java | 7 +- .../action/ExportTemporaryVesselExampleAction.java | 7 +- .../ui/swing/action/ImportTemporaryGearAction.java | 6 +- .../swing/action/ImportTemporaryPersonAction.java | 6 +- .../swing/action/ImportTemporarySpeciesAction.java | 6 +- .../swing/action/ImportTemporaryVesselAction.java | 6 +- .../swing/action/ReplaceTemporaryGearAction.java | 4 +- .../swing/action/ReplaceTemporaryPersonAction.java | 4 +- .../action/ReplaceTemporarySpeciesAction.java | 4 +- .../swing/action/ReplaceTemporaryVesselAction.java | 4 +- .../replace/AbstractReplaceTemporaryUIModel.java | 13 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 1 + 31 files changed, 622 insertions(+), 1176 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java index a53de84..5a41454 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java @@ -462,23 +462,43 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override - public void replaceGear(Gear source, Gear target) { - referentialService.replaceGear(source, target); + public void replaceGear(Gear source, Gear target, boolean delete) { + referentialService.replaceGear(source, target, delete); } @Override - public void replacePerson(Person source, Person target) { - referentialService.replacePerson(source, target); + public void replacePerson(Person source, Person target, boolean delete) { + referentialService.replacePerson(source, target, delete); } @Override - public void replaceSpecies(Species source, Species target) { - referentialService.replaceSpecies(source, target); + public void replaceSpecies(Species source, Species target, boolean delete) { + referentialService.replaceSpecies(source, target, delete); } @Override - public void replaceVessel(Vessel source, Vessel target) { - referentialService.replaceVessel(source, target); + public void replaceVessel(Vessel source, Vessel target, boolean delete) { + referentialService.replaceVessel(source, target, delete); + } + + @Override + public void deleteTemporaryGear(Integer id, boolean checkIfUsed) { + referentialService.deleteTemporaryGear(id, checkIfUsed); + } + + @Override + public void deleteTemporarySpecies(Integer id, boolean checkIfUsed) { + referentialService.deleteTemporarySpecies(id, checkIfUsed); + } + + @Override + public void deleteTemporaryPerson(Integer id, boolean checkIfUsed) { + referentialService.deleteTemporaryPerson(id, checkIfUsed); + } + + @Override + public void deleteTemporaryVessel(String code, boolean checkIfUsed) { + referentialService.deleteTemporaryVessel(code, checkIfUsed); } //------------------------------------------------------------------------// diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java index df5d7eb..4ca7737 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java @@ -726,22 +726,42 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override - public void replaceGear(Gear source, Gear target) { + public void replaceGear(Gear source, Gear target, boolean delete) { throw notImplemented(); } @Override - public void replacePerson(Person source, Person target) { + public void replacePerson(Person source, Person target, boolean delete) { throw notImplemented(); } @Override - public void replaceSpecies(Species source, Species target) { + public void replaceSpecies(Species source, Species target, boolean delete) { throw notImplemented(); } @Override - public void replaceVessel(Vessel source, Vessel target) { + public void replaceVessel(Vessel source, Vessel target, boolean delete) { + throw notImplemented(); + } + + @Override + public void deleteTemporaryGear(Integer id, boolean checkIfUsed) { + throw notImplemented(); + } + + @Override + public void deleteTemporarySpecies(Integer id, boolean checkIfUsed) { + throw notImplemented(); + } + + @Override + public void deleteTemporaryPerson(Integer id, boolean checkIfUsed) { + throw notImplemented(); + } + + @Override + public void deleteTemporaryVessel(String code, boolean checkIfUsed) { throw notImplemented(); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java index 88c23f2..a21b100 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java @@ -321,11 +321,12 @@ public interface ReferentialPersistenceService extends TuttiPersistenceServiceIm * * @param source the source gear to replace * @param target the target gear to use + * @param delete flag to delete the temporary vessel after replacement * @since 3.6 */ @Transactional(readOnly = false) @CacheEvict(value = "fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", allEntries = true) - void replaceGear(Gear source, Gear target); + void replaceGear(Gear source, Gear target, boolean delete); /** * Replace the {@code source} species by @@ -333,11 +334,12 @@ public interface ReferentialPersistenceService extends TuttiPersistenceServiceIm * * @param source the source species to replace * @param target the target species to use + * @param delete flag to delete the temporary vessel after replacement * @since 3.6 */ @Transactional(readOnly = false) @CacheEvict(value = "fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", allEntries = true) - void replaceSpecies(Species source, Species target); + void replaceSpecies(Species source, Species target, boolean delete); /** * Replace the {@code source} person by @@ -345,11 +347,12 @@ public interface ReferentialPersistenceService extends TuttiPersistenceServiceIm * * @param source the source person to replace * @param target the target person to use + * @param delete flag to delete the temporary vessel after replacement * @since 3.6 */ @Transactional(readOnly = false) @CacheEvict(value = "fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", allEntries = true) - void replacePerson(Person source, Person target); + void replacePerson(Person source, Person target, boolean delete); /** * Replace the {@code source} vessel by @@ -357,10 +360,55 @@ public interface ReferentialPersistenceService extends TuttiPersistenceServiceIm * * @param source the source vessel to replace * @param target the target vessel to use + * @param delete flag to delete the temporary vessel after replacement * @since 3.6 */ @Transactional(readOnly = false) @CacheEvict(value = "fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", allEntries = true) - void replaceVessel(Vessel source, Vessel target); + void replaceVessel(Vessel source, Vessel target, boolean delete); + + /** + * Delete the temporary gear with the given {@code id}. + * + * @param id id of the gear to remove + * @param checkIfUsed to check if gear is used before trying to delete it + * @since 3.9 + */ + @Transactional(readOnly = false) + @CacheEvict(value = "gears", allEntries = true) + void deleteTemporaryGear(Integer id, boolean checkIfUsed); + + /** + * Delete the temporary species with the given {@code id}. + * + * @param id id of the species to remove + * @param checkIfUsed to check if species is used before trying to delete it + * @since 3.9 + */ + @Transactional(readOnly = false) + @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular"}, allEntries = true) + void deleteTemporarySpecies(Integer id, boolean checkIfUsed); + + /** + * Delete the temporary person with the given {@code id}. + * + * @param id id of the person to remove + * @param checkIfUsed to check if person is used before trying to delete it + * @since 3.9 + */ + @Transactional(readOnly = false) + @CacheEvict(value = {"persons", "personById"}, allEntries = true) + void deleteTemporaryPerson(Integer id, boolean checkIfUsed); + + /** + * Delete the temporary vessel with the given {@code code}. + * + * @param code code of the vessel to remove + * @param checkIfUsed to check if vessel is used before trying to delete it + * @since 3.9 + */ + @Transactional(readOnly = false) + @CacheEvict(value = {"fishingVessels", "vesselByCode"}, allEntries = true) + void deleteTemporaryVessel(String code, boolean checkIfUsed); } 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 8c0447a..2db70c7 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 @@ -48,6 +48,7 @@ import fr.ifremer.adagio.core.dao.referential.pmfm.UnitId; import fr.ifremer.adagio.core.dao.referential.taxon.TaxonNameExtendDao; import fr.ifremer.adagio.core.dao.referential.taxon.TaxonRefVO; import fr.ifremer.adagio.core.dao.referential.transcribing.TranscribingItemTypeId; +import fr.ifremer.adagio.core.dao.technical.hibernate.TemporaryDataHelper; import fr.ifremer.adagio.core.service.technical.CacheService; import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatchs; @@ -78,6 +79,7 @@ import org.hibernate.Query; import org.hibernate.type.DateType; import org.hibernate.type.IntegerType; import org.hibernate.type.StringType; +import org.nuiton.jaxx.application.ApplicationBusinessException; import org.springframework.cache.Cache; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DataRetrievalFailureException; @@ -790,7 +792,7 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic } @Override - public void replaceGear(Gear source, Gear target) { + public void replaceGear(Gear source, Gear target, boolean delete) { Preconditions.checkNotNull(source); Preconditions.checkNotNull(target); @@ -810,10 +812,16 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic //TODO Check doublon... + if (delete) { + + deleteTemporaryGear(sourceId, false); + + } + } @Override - public void replacePerson(Person source, Person target) { + public void replacePerson(Person source, Person target, boolean delete) { Preconditions.checkNotNull(source); Preconditions.checkNotNull(target); @@ -843,10 +851,16 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic //TODO Check doublon... + if (delete) { + + deleteTemporaryPerson(sourceId, false); + + } + } @Override - public void replaceSpecies(Species source, Species target) { + public void replaceSpecies(Species source, Species target, boolean delete) { Preconditions.checkNotNull(source); Preconditions.checkNotNull(target); @@ -866,10 +880,16 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic //TODO Check doublon... + if (delete) { + + deleteTemporarySpecies(sourceId, false); + + } + } @Override - public void replaceVessel(Vessel source, Vessel target) { + public void replaceVessel(Vessel source, Vessel target, boolean delete) { Preconditions.checkNotNull(source); Preconditions.checkNotNull(target); @@ -917,6 +937,75 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic //TODO Check doublon... + if (delete) { + + deleteTemporaryVessel(sourceId, false); + + } + + } + + @Override + public void deleteTemporaryGear(Integer id, boolean checkIfUsed) { + + Preconditions.checkNotNull(id); + if (id > 0) { + throw new ApplicationBusinessException(String.format("Can't delete a Gear with a positive id %d.", id)); + } + Gear gear = getGear(id); + if (gear == null) { + throw new ApplicationBusinessException(String.format("Gear with id %d does not exists", id)); + } + + fishingGearDao.remove(id); + + } + + @Override + public void deleteTemporarySpecies(Integer id, boolean checkIfUsed) { + + Preconditions.checkNotNull(id); + if (id > 0) { + throw new ApplicationBusinessException(String.format("Can't delete a Species with a positive id %d.", id)); + } + Species species = getSpeciesByReferenceTaxonId(id); + if (species == null) { + throw new ApplicationBusinessException(String.format("Species with id %d does not exists", id)); + } + + taxonNameDao.remove(id); + + } + + @Override + public void deleteTemporaryPerson(Integer id, boolean checkIfUsed) { + + Preconditions.checkNotNull(id); + if (id > 0) { + throw new ApplicationBusinessException(String.format("Can't delete a Gear with a positive id %d.", id)); + } + Gear gear = getGear(id); + if (gear == null) { + throw new ApplicationBusinessException(String.format("Gear with id %d does not exists", id)); + } + personDao.remove(id); + + } + + @Override + public void deleteTemporaryVessel(String code, boolean checkIfUsed) { + + Preconditions.checkNotNull(code); + if (!code.startsWith(TemporaryDataHelper.TEMPORARY_NAME_PREFIX)) { + throw new ApplicationBusinessException(String.format("Can't delete a Vessel with a code %s not beginning with %s.", code, TemporaryDataHelper.TEMPORARY_NAME_PREFIX)); + } + Vessel vessel = getVessel(code); + if (vessel == null) { + throw new ApplicationBusinessException(String.format("Vessel with code %s does not exists", code)); + } + + vesselExtendDao.remove(code); + } //------------------------------------------------------------------------// diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java index f010359..3e3b874 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java @@ -967,23 +967,43 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override - public void replaceGear(Gear source, Gear target) { - driver.replaceGear(source, target); + public void replaceGear(Gear source, Gear target, boolean delete) { + driver.replaceGear(source, target, delete); } @Override - public void replacePerson(Person source, Person target) { - driver.replacePerson(source, target); + public void replacePerson(Person source, Person target, boolean delete) { + driver.replacePerson(source, target, delete); } @Override - public void replaceSpecies(Species source, Species target) { - driver.replaceSpecies(source, target); + public void replaceSpecies(Species source, Species target, boolean delete) { + driver.replaceSpecies(source, target, delete); } @Override - public void replaceVessel(Vessel source, Vessel target) { - driver.replaceVessel(source, target); + public void replaceVessel(Vessel source, Vessel target, boolean delete) { + driver.replaceVessel(source, target, delete); + } + + @Override + public void deleteTemporaryGear(Integer id, boolean checkIfUsed) { + driver.deleteTemporaryGear(id, checkIfUsed); + } + + @Override + public void deleteTemporarySpecies(Integer id, boolean checkIfUsed) { + driver.deleteTemporarySpecies(id, checkIfUsed); + } + + @Override + public void deleteTemporaryPerson(Integer id, boolean checkIfUsed) { + driver.deleteTemporaryPerson(id, checkIfUsed); + } + + @Override + public void deleteTemporaryVessel(String code, boolean checkIfUsed) { + driver.deleteTemporaryVessel(code, checkIfUsed); } //------------------------------------------------------------------------// diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/WeightComputingService.java.orig b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/WeightComputingService.java.orig deleted file mode 100644 index dbedc61..0000000 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/WeightComputingService.java.orig +++ /dev/null @@ -1,778 +0,0 @@ -package fr.ifremer.tutti.service.catches; - -/* - * #%L - * Tutti :: Service - * %% - * Copyright (C) 2012 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import fr.ifremer.tutti.util.Numbers; -import fr.ifremer.tutti.util.Weights; -import fr.ifremer.tutti.persistence.entities.data.BatchContainer; -import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; -import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; -import fr.ifremer.tutti.persistence.entities.data.CatchBatch; -import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; -import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.AbstractTuttiService; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.TuttiServiceContext; -import fr.ifremer.tutti.service.ValidationService; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.jaxx.application.ApplicationBusinessException; -import org.nuiton.validator.NuitonValidatorResult; - -import java.util.List; -import java.util.Map; - -import static org.nuiton.i18n.I18n.t; - -/** - * @author kmorin <kmorin@codelutin.com> - * @since 1.3 - */ -public class WeightComputingService extends AbstractTuttiService { - - private static final Log log = - LogFactory.getLog(WeightComputingService.class); - - protected PersistenceService persistenceService; - - protected ValidationService validationService; - - protected DecoratorService decoratorService; - - protected SampleCategoryModel sampleCategoryModel; - - @Override - public void setServiceContext(TuttiServiceContext context) { - super.setServiceContext(context); - persistenceService = getService(PersistenceService.class); - validationService = getService(ValidationService.class); - decoratorService = getService(DecoratorService.class); - sampleCategoryModel = context.getSampleCategoryModel(); - } - - /** - * To check if can compute for any fishing operation of the cruise given - * by his id. - * <p/> - * If no error found, then return is a empty map, otherwise the first error - * found for any bad fishing operation. - * <p/> - * Result keys are fishing operation id, values the first error for - * the fishing operation. - * - * @param cruiseId id of the cruise to check. - * @param uniqueFishingOperationId optional unique fishing operation to check - * @return map of errors, or empty map if no error found. - * @since 1.4 - */ - public Map<String, String> checkCruise(String cruiseId, - String uniqueFishingOperationId) { - - if (log.isDebugEnabled()) { - log.debug("Will check cruise: " + cruiseId); - } - Map<String, String> result = Maps.newTreeMap(); - - List<String> allFishingOperation; - - if (StringUtils.isNotBlank(uniqueFishingOperationId)) { - allFishingOperation = Lists.newArrayList(uniqueFishingOperationId); - } else { - allFishingOperation = persistenceService.getAllFishingOperationIds(cruiseId); - } - - for (String fishingOperationId : allFishingOperation) { - - boolean withCatchBatch = - persistenceService.isFishingOperationWithCatchBatch( - fishingOperationId); - - if (!withCatchBatch) { - if (log.isWarnEnabled()) { - log.warn("Skip fishing operation " + fishingOperationId + - " since no catchBatch associated."); - } - continue; - } - CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(fishingOperationId); - - BatchContainer<SpeciesBatch> rootSpeciesBatch; - try { - rootSpeciesBatch = getComputedSpeciesBatches(fishingOperationId); - - } catch (ApplicationBusinessException e) { - result.put(fishingOperationId, e.getMessage()); - rootSpeciesBatch = persistenceService.getRootSpeciesBatch(fishingOperationId, false); - } - - BatchContainer<BenthosBatch> rootBenthosBatch; - try { - rootBenthosBatch = getComputedBenthosBatches(fishingOperationId); - - } catch (ApplicationBusinessException e) { - result.put(fishingOperationId, e.getMessage()); - rootBenthosBatch = persistenceService.getRootBenthosBatch(fishingOperationId, false); - } - - BatchContainer<MarineLitterBatch> rootMarineLitterBatch; - try { - Float weight = catchBatch == null ? null : catchBatch.getMarineLitterTotalWeight(); - rootMarineLitterBatch = getComputedMarineLitterBatches(fishingOperationId, weight); - - } catch (ApplicationBusinessException e) { - result.put(fishingOperationId, e.getMessage()); - rootMarineLitterBatch = persistenceService.getRootMarineLitterBatch(fishingOperationId); - } - - try { - if (catchBatch != null) { - computeCatchBatchWeights(catchBatch, - rootSpeciesBatch, - rootBenthosBatch, - rootMarineLitterBatch); - } - } catch (ApplicationBusinessException e) { - result.put(fishingOperationId, e.getMessage()); - } - } - return result; - } - - /** - * Compute the weights of the catch batch (not the ones of the species, benthos nor marine litter batches) - * - * @param catchBatch the catch batch with the weights to compute - * @param rootSpeciesBatch the species batches with already computed weights - * @param rootBenthosBatch the benthos batches with already computed weights - * @param rootMarineLitterBatch the marine litter batches with already computed weights - */ - public void computeCatchBatchWeights(CatchBatch catchBatch, - BatchContainer<SpeciesBatch> rootSpeciesBatch, - BatchContainer<BenthosBatch> rootBenthosBatch, - BatchContainer<MarineLitterBatch> rootMarineLitterBatch) { - - // Species - Float speciesTotalComputedSortedWeight = 0f; - Float speciesTotalComputedUnsortedWeight = 0f; - - if (rootSpeciesBatch != null) { - List<SpeciesBatch> speciesBatches = rootSpeciesBatch.getChildren(); - for (SpeciesBatch row : speciesBatches) { - Float weight = Numbers.getValueOrComputedValue( - row.getSampleCategoryWeight(), - row.getSampleCategoryComputedWeight()); - if (weight == null) { - break; - } - - if (persistenceService.isVracBatch(row)) { - speciesTotalComputedSortedWeight += weight; - } else { - speciesTotalComputedUnsortedWeight += weight; - } - } - } - - Number inertWeight = catchBatch.getSpeciesTotalInertWeight(); - if (inertWeight != null) { - speciesTotalComputedSortedWeight += inertWeight.floatValue(); - } else { - catchBatch.setSpeciesTotalInertComputedWeight(0f); - } - - Number livingNotItemizedWeight = catchBatch.getSpeciesTotalLivingNotItemizedWeight(); - if (livingNotItemizedWeight != null) { - speciesTotalComputedSortedWeight += livingNotItemizedWeight.floatValue(); - } else { - catchBatch.setSpeciesTotalLivingNotItemizedComputedWeight(0f); - } - - catchBatch.setSpeciesTotalSampleSortedComputedWeight(speciesTotalComputedSortedWeight); - - Float speciesTotalSortedWeight = catchBatch.getSpeciesTotalSortedWeight(); - if (speciesTotalSortedWeight == null) { - speciesTotalSortedWeight = speciesTotalComputedSortedWeight; - catchBatch.setSpeciesTotalSortedComputedWeight( - Weights.roundKiloGram(speciesTotalSortedWeight)); - - } else if (speciesTotalSortedWeight < speciesTotalComputedSortedWeight) { - throw new ApplicationBusinessException(t("tutti.service.operations.computeWeights.error.species.incoherentTotalSorted")); - } - catchBatch.setSpeciesTotalUnsortedComputedWeight( - Weights.roundKiloGram(speciesTotalComputedUnsortedWeight)); - - if (speciesTotalSortedWeight == null) { - speciesTotalSortedWeight = catchBatch.getSpeciesTotalSortedComputedWeight(); - } - Float speciesTotalWeight = speciesTotalComputedUnsortedWeight + speciesTotalSortedWeight; - catchBatch.setSpeciesTotalComputedWeight( - Weights.roundKiloGram(speciesTotalWeight)); - - // Benthos - Float benthosTotalComputedSortedWeight = 0f; - Float benthosTotalComputedUnsortedWeight = 0f; - - if (rootBenthosBatch != null) { - List<BenthosBatch> benthosBatches = rootBenthosBatch.getChildren(); - for (BenthosBatch row : benthosBatches) { - Float weight = Numbers.getValueOrComputedValue( - row.getSampleCategoryWeight(), - row.getSampleCategoryComputedWeight()); - if (weight == null) { - break; - } - - if (persistenceService.isVracBatch(row)) { - benthosTotalComputedSortedWeight += weight; - } else { - benthosTotalComputedUnsortedWeight += weight; - } - } - } - - inertWeight = catchBatch.getBenthosTotalInertWeight(); - if (inertWeight != null) { - benthosTotalComputedSortedWeight += inertWeight.floatValue(); - } else { - catchBatch.setBenthosTotalInertComputedWeight(0f); - } - - livingNotItemizedWeight = catchBatch.getBenthosTotalLivingNotItemizedWeight(); - if (livingNotItemizedWeight != null) { - benthosTotalComputedSortedWeight += livingNotItemizedWeight.floatValue(); - } else { - catchBatch.setBenthosTotalLivingNotItemizedComputedWeight(0f); - } - - catchBatch.setBenthosTotalSampleSortedComputedWeight( - Weights.roundKiloGram(benthosTotalComputedSortedWeight)); - - Float benthosTotalSortedWeight = catchBatch.getBenthosTotalSortedWeight(); - if (benthosTotalSortedWeight == null) { - benthosTotalSortedWeight = benthosTotalComputedSortedWeight; - catchBatch.setBenthosTotalSortedComputedWeight( - Weights.roundKiloGram(benthosTotalSortedWeight)); - - } else if (benthosTotalSortedWeight < benthosTotalComputedSortedWeight) { - throw new ApplicationBusinessException(t("tutti.service.operations.computeWeights.error.benthos.incoherentTotalSorted")); - } - catchBatch.setBenthosTotalUnsortedComputedWeight( - Weights.roundKiloGram(benthosTotalComputedUnsortedWeight)); - - if (benthosTotalSortedWeight == null) { - benthosTotalSortedWeight = catchBatch.getBenthosTotalSortedComputedWeight(); - } - Float benthosTotalWeight = benthosTotalComputedUnsortedWeight + benthosTotalSortedWeight; - catchBatch.setBenthosTotalComputedWeight( - Weights.roundKiloGram(benthosTotalWeight)); - - // Marine litter - Float marineLitterTotalComputedWeight = 0f; - - if (rootMarineLitterBatch != null) { - List<MarineLitterBatch> marineLitterBatches = rootMarineLitterBatch.getChildren(); - for (MarineLitterBatch row : marineLitterBatches) { - Float rowWeight = row.getWeight(); - if (rowWeight == null) { - marineLitterTotalComputedWeight = null; - break; - } - marineLitterTotalComputedWeight += rowWeight; - } - } - if (marineLitterTotalComputedWeight != null) { - catchBatch.setMarineLitterTotalComputedWeight( - Weights.roundKiloGram(marineLitterTotalComputedWeight)); - } - - Float marineLitterTotalWeight = catchBatch.getMarineLitterTotalWeight(); - if (marineLitterTotalWeight == null) { - marineLitterTotalWeight = marineLitterTotalComputedWeight; - - } else if (marineLitterTotalComputedWeight != null && marineLitterTotalWeight < marineLitterTotalComputedWeight) { - throw new ApplicationBusinessException(t("tutti.service.operations.computeWeights.error.marineLitter.incoherentTotal")); - } - // nothing to do with the marine litter weight, it is an isolated weight - - // Catch - Float totalUnsortedWeight = catchBatch.getSpeciesTotalUnsortedComputedWeight() + - catchBatch.getBenthosTotalUnsortedComputedWeight(); - - Float totalSortedWeight = speciesTotalSortedWeight + benthosTotalSortedWeight; - - catchBatch.setCatchTotalSortedComputedWeight(Weights.roundKiloGram(totalSortedWeight)); - catchBatch.setCatchTotalUnsortedComputedWeight(Weights.roundKiloGram(totalUnsortedWeight)); - - Float totalWeight = catchBatch.getCatchTotalWeight(); - Float rejectedWeight = catchBatch.getCatchTotalRejectedWeight(); - - if (rejectedWeight == null && totalWeight != null) { -<<<<<<< HEAD - if (totalWeight.compareTo(totalUnsortedWeight + totalSortedWeight) < 1) { - throw new ApplicationBusinessException(t("tutti.service.operations.computeWeights.error.totalLessThanSortedAndUnsorted")); -// -======= - if (Weights.isNotEqualWeight(totalWeight, totalUnsortedWeight + totalSortedWeight)) { - throw new ApplicationBusinessException(t("tutti.service.operations.computeWeights.error.incoherentTotal")); - ->>>>>>> fixes #5139 [CAPTURE] répéter le champ "poids sous échantillon" dans la fenêtre de saisie des mensurations - } else { - catchBatch.setCatchTotalRejectedComputedWeight( - Weights.roundKiloGram(totalWeight - - totalUnsortedWeight - - totalSortedWeight)); - } - - } else if (totalWeight == null) { - if (rejectedWeight == null) { - rejectedWeight = 0f; - catchBatch.setCatchTotalRejectedComputedWeight(0f); - } - catchBatch.setCatchTotalComputedWeight( - Weights.roundKiloGram(totalUnsortedWeight - + totalSortedWeight - + rejectedWeight)); - - } else if (Weights.isNotEqualWeight(totalWeight, totalUnsortedWeight + totalSortedWeight + rejectedWeight)) { - throw new ApplicationBusinessException(t("tutti.service.operations.computeWeights.error.incoherentTotal")); - } - } - - private int currentSpeciesRowIndex; - - public BatchContainer<SpeciesBatch> getComputedSpeciesBatches(String operationId) { - - BatchContainer<SpeciesBatch> rootSpeciesBatch = null; - - if (persistenceService.isFishingOperationWithCatchBatch(operationId)) { - rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operationId, false); - - currentSpeciesRowIndex = 0; - if (rootSpeciesBatch != null) { - List<SpeciesBatch> roots = rootSpeciesBatch.getChildren(); - - for (SpeciesBatch batch : roots) { - computeSpeciesBatch(batch); - } - } - } - - return rootSpeciesBatch; - } - - protected String getCategoryLabel(Integer sampleCategoryId) { - SampleCategoryModelEntry category = - sampleCategoryModel.getCategoryById(sampleCategoryId); - String result = category.getLabel(); - return result; - } - - public Float computeSpeciesBatch(SpeciesBatch batch) { - Float result = null; - int thisIndex = currentSpeciesRowIndex++; - Float categoryWeight = batch.getSampleCategoryWeight(); - Float rowWeight = batch.getWeight(); - String species = decoratorService.getDecoratorByType(Species.class).toString(batch.getSpecies()); - String categoryValue = decoratorService.getDecorator(batch.getSampleCategoryValue()) - .toString(batch.getSampleCategoryValue()); - - NuitonValidatorResult validation = validationService.validateEditSpeciesBatch(batch); - if (!validation.isValid()) { - List<String> messages = validation.getErrorMessages(SpeciesBatch.PROPERTY_WEIGHT); - String categoryLabel = getCategoryLabel(batch.getSampleCategoryId()); - throw new TuttiWeightComputingException(t(messages.get(0), - species, - categoryLabel, - categoryValue, - batch.getWeight(), - batch.getSampleCategoryWeight()), - SpeciesBatch.PROPERTY_WEIGHT, - thisIndex); - } - - List<SpeciesBatch> children = batch.getChildBatchs(); - // if the row is not a leaf - if (batch.sizeChildBatchs() > 0) { - Float sum = 0f; - // make the sum of the children weights - for (SpeciesBatch child : children) { - Float weight = computeSpeciesBatch(child); - if (weight == null) { - sum = null; - break; - } - sum += weight; - } - - if (sum != null) { - if (categoryWeight == null) { - batch.setSampleCategoryComputedWeight(Weights.roundKiloGram(sum)); - - } else if (Weights.isSmallerWeight(categoryWeight, sum)) { - String categoryLabel = getCategoryLabel(batch.getSampleCategoryId()); - throw new TuttiWeightComputingException( - t("tutti.service.operations.computeWeights.error.species.incoherentParentCategoryWeight", - species, - categoryLabel, - categoryValue, - categoryWeight, - sum), - SpeciesBatch.PROPERTY_SAMPLE_CATEGORY_WEIGHT, - thisIndex); - - } else { - sum = categoryWeight; - } - result = sum; - } - - } else {// the row is a leaf - - batch.setComputedWeight(null); - - List<SpeciesBatchFrequency> frequencies = persistenceService.getAllSpeciesBatchFrequency(batch.getId()); - - if (CollectionUtils.isNotEmpty(frequencies)) { - // if there are frequencies, then compute their weight - Float frequencyWeight = 0f; - for (SpeciesBatchFrequency frequency : frequencies) { - Float w = frequency.getWeight(); - if (w == null) { - - // can't sum when a null value appears - frequencyWeight = null; - break; - - } else if (frequencyWeight != null) { - - // still can sum weights - frequencyWeight += w; - } - } - - if (categoryWeight == null && rowWeight != null) { -// throw new TuttiBusinessException(t("tutti.service.operations.computeWeights.error.incoherentRowWeightCategory")); - - } else if (rowWeight != null && frequencyWeight != null - && Weights.isNotEqualWeight(rowWeight, frequencyWeight)) { - - String categoryLabel = getCategoryLabel(batch.getSampleCategoryId()); - - throw new TuttiWeightComputingException( - t("tutti.service.operations.computeWeights.error.species.incoherentRowWeightFrequency", - species, - categoryLabel, - categoryValue, - frequencyWeight, - rowWeight), - SpeciesBatch.PROPERTY_WEIGHT, - thisIndex); - - } else if (categoryWeight == null && frequencyWeight != null) { - // if the category weight is null and the frequencies have a weight, - // then this weight is the result - batch.setSampleCategoryComputedWeight(Weights.roundKiloGram(frequencyWeight)); - result = frequencyWeight; - - } else if (frequencyWeight != null - && Weights.isNotEqualWeight(frequencyWeight, categoryWeight)) { - - // if the weight of the frequencies is different from the category - // weight, then set the weight of the sample - if (Weights.isGreaterWeight(frequencyWeight, categoryWeight)) { - - String categoryLabel = getCategoryLabel(batch.getSampleCategoryId()); - - throw new TuttiWeightComputingException( - t("tutti.service.operations.computeWeights.error.species.incoherentCategoryWeight", - species, - categoryLabel, - categoryValue, - frequencyWeight, - categoryWeight), - SpeciesBatch.PROPERTY_SAMPLE_CATEGORY_WEIGHT, - thisIndex); - - } else if (rowWeight == null) { - batch.setComputedWeight(Weights.roundKiloGram(frequencyWeight)); - - } - result = categoryWeight; - - } else { - result = categoryWeight; - } - - // compute number from frequencies - Integer frequencyNumber = 0; - for (SpeciesBatchFrequency frequency : frequencies) { - Integer c = frequency.getNumber(); - frequencyNumber += c; - } - batch.setComputedNumber(frequencyNumber); - - } else { - result = categoryWeight; - } - } - if (result == null) { - - String categoryLabel = getCategoryLabel(batch.getSampleCategoryId()); - - throw new TuttiWeightComputingException( - t("tutti.service.operations.computeWeights.error.species.noWeight", - species, - categoryLabel, - categoryValue), - SpeciesBatch.PROPERTY_SAMPLE_CATEGORY_WEIGHT, - thisIndex); - } - - return Weights.roundKiloGram(result); - } - - private int currentBenthosRowIndex; - - public BatchContainer<BenthosBatch> getComputedBenthosBatches(String operationId) { - - BatchContainer<BenthosBatch> rootBenthosBatch = null; - - if (persistenceService.isFishingOperationWithCatchBatch(operationId)) { - rootBenthosBatch = persistenceService.getRootBenthosBatch(operationId, false); - - currentBenthosRowIndex = 0; - if (rootBenthosBatch != null) { - List<BenthosBatch> roots = rootBenthosBatch.getChildren(); - - for (BenthosBatch batch : roots) { - computeBenthosBatch(batch); - } - } - } - - return rootBenthosBatch; - } - - public Float computeBenthosBatch(BenthosBatch batch) { - Float result = null; - int thisIndex = currentBenthosRowIndex++; - Float categoryWeight = batch.getSampleCategoryWeight(); - Float rowWeight = batch.getWeight(); - String species = decoratorService.getDecoratorByType(Species.class).toString(batch.getSpecies()); - String categoryValue = decoratorService.getDecorator(batch.getSampleCategoryValue()) - .toString(batch.getSampleCategoryValue()); - - NuitonValidatorResult validation = validationService.validateEditBenthosBatch(batch); - if (!validation.isValid()) { - List<String> messages = validation.getErrorMessages(BenthosBatch.PROPERTY_WEIGHT); - - String categoryLabel = getCategoryLabel(batch.getSampleCategoryId()); - throw new TuttiWeightComputingException(t(messages.get(0), - species, - categoryLabel, - categoryValue, - batch.getWeight(), - batch.getSampleCategoryWeight()), - BenthosBatch.PROPERTY_WEIGHT, - thisIndex); - } - - List<BenthosBatch> children = batch.getChildBatchs(); - // if the row is not a leaf - if (!batch.isChildBatchsEmpty()) { - Float sum = 0f; - // make the sum of the children weights - for (BenthosBatch child : children) { - Float weight = computeBenthosBatch(child); - if (weight == null) { - sum = null; - break; - } - sum += weight; - } - - if (sum != null) { - if (categoryWeight == null) { - batch.setSampleCategoryComputedWeight(Weights.roundKiloGram(sum)); - - } else if (Weights.isSmallerWeight(categoryWeight, sum)) { - String categoryLabel = - getCategoryLabel(batch.getSampleCategoryId()); - - throw new TuttiWeightComputingException( - t("tutti.service.operations.computeWeights.error.benthos.incoherentParentCategoryWeight", - species, - categoryLabel, - categoryValue, - categoryWeight, - sum), - BenthosBatch.PROPERTY_SAMPLE_CATEGORY_WEIGHT, - thisIndex); - - } else { - sum = categoryWeight; - } - result = sum; - - } - - } else {// the row is a leaf - - batch.setComputedWeight(null); - - List<BenthosBatchFrequency> frequencies = persistenceService.getAllBenthosBatchFrequency(batch.getId()); - - if (CollectionUtils.isNotEmpty(frequencies)) { - // if there are frequencies, then compute their weight - Float frequencyWeight = 0f; - for (BenthosBatchFrequency frequency : frequencies) { - Float w = frequency.getWeight(); - if (w == null) { - - // can't sum when a null value appears - frequencyWeight = null; - break; - - } else if (frequencyWeight != null) { - - // still can sum weights - frequencyWeight += w; - } - } - - if (categoryWeight == null && rowWeight != null) { -// throw new TuttiBusinessException(t("tutti.service.operations.computeWeights.error.incoherentRowWeightCategory")); - - } else if (rowWeight != null && frequencyWeight != null - && Weights.isNotEqualWeight(rowWeight, frequencyWeight)) { - - String categoryLabel = - getCategoryLabel(batch.getSampleCategoryId()); - - throw new TuttiWeightComputingException( - t("tutti.service.operations.computeWeights.error.benthos.incoherentRowWeightFrequency", - species, - categoryLabel, - categoryValue, - rowWeight, - categoryWeight), - BenthosBatch.PROPERTY_WEIGHT, - thisIndex); - - } else if (categoryWeight == null && frequencyWeight != null) { - // if the category weight is null and the frequencies have a weight, - // then this weight is the result - batch.setSampleCategoryComputedWeight(Weights.roundKiloGram(frequencyWeight)); - result = frequencyWeight; - - } else if (frequencyWeight != null - && Weights.isNotEqualWeight(frequencyWeight, categoryWeight)) { - - // if the weight of the frequencies is different from the category - // weight, then set the weight of the sample - if (Weights.isGreaterWeight(frequencyWeight, categoryWeight)) { - - String categoryLabel = - getCategoryLabel(batch.getSampleCategoryId()); - - throw new TuttiWeightComputingException( - t("tutti.service.operations.computeWeights.error.benthos.incoherentCategoryWeight", - species, - categoryLabel, - categoryValue, - frequencyWeight, - categoryWeight), - BenthosBatch.PROPERTY_SAMPLE_CATEGORY_WEIGHT, - thisIndex); - - } else if (rowWeight == null) { - batch.setComputedWeight(Weights.roundKiloGram(frequencyWeight)); - - } - result = categoryWeight; - - } else { - result = categoryWeight; - } - - // compute number from frequencies - Integer frequencyNumber = 0; - for (BenthosBatchFrequency frequency : frequencies) { - Integer c = frequency.getNumber(); - frequencyNumber += c; - } - batch.setComputedNumber(frequencyNumber); - } else { - result = categoryWeight; - } - } - if (result == null) { - - String categoryLabel = - getCategoryLabel(batch.getSampleCategoryId()); - - throw new TuttiWeightComputingException( - t("tutti.service.operations.computeWeights.error.benthos.noWeight", - species, - categoryLabel, - categoryValue), - BenthosBatch.PROPERTY_SAMPLE_CATEGORY_WEIGHT, - thisIndex); - } - - return Weights.roundKiloGram(result); - } - - public BatchContainer<MarineLitterBatch> getComputedMarineLitterBatches(String fishingOperationId, - Float marineLitterweight) { - - BatchContainer<MarineLitterBatch> rootMarineLitterBatch = - persistenceService.getRootMarineLitterBatch(fishingOperationId); - - if (rootMarineLitterBatch != null) { - boolean checkWeight = marineLitterweight == null; - - List<MarineLitterBatch> children = rootMarineLitterBatch.getChildren(); - for (int i = 0; i < children.size(); i++) { - MarineLitterBatch batch = children.get(i); - if (checkWeight && batch.getWeight() == null) { - throw new TuttiWeightComputingException( - t("tutti.validator.warning.marineLitter.weight.required"), - MarineLitterBatch.PROPERTY_WEIGHT, - i); - } - } - } - - return rootMarineLitterBatch; - } -} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportExportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialExportService.java similarity index 50% copy from tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportExportService.java copy to tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialExportService.java index 4d8fede..1e69ee9 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportExportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialExportService.java @@ -23,12 +23,8 @@ package fr.ifremer.tutti.service.referential; */ import com.google.common.base.Charsets; -import com.google.common.base.Function; -import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import com.google.common.collect.Sets; import com.google.common.io.Files; -import org.nuiton.jaxx.application.ApplicationTechnicalException; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Gears; import fr.ifremer.tutti.persistence.entities.referential.Person; @@ -41,32 +37,23 @@ import fr.ifremer.tutti.service.AbstractTuttiService; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiServiceContext; import org.apache.commons.io.IOUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Export; -import org.nuiton.csv.Import; -import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; -import java.io.Reader; import java.util.List; -import java.util.Set; import static org.nuiton.i18n.I18n.t; /** - * Service to import or export referential. + * Service to export temporary referential. * * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class ReferentialImportExportService extends AbstractTuttiService { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(ReferentialImportExportService.class); +public class ReferentialExportService extends AbstractTuttiService { protected PersistenceService persistenceService; @@ -76,206 +63,14 @@ public class ReferentialImportExportService extends AbstractTuttiService { persistenceService = getService(PersistenceService.class); } - public List<Species> importTemporarySpecies(File file) throws IOException { - - if (log.isInfoEnabled()) { - log.info("Will import species from file: " + file); - } - - // get all species names - Set<String> existingSpeciesName = Sets.newHashSet(Iterables.transform(persistenceService.getAllSpecies(), new Function<Species, String>() { - @Override - public String apply(Species input) { - return input.getName(); - } - })); - - List<Species> toImport = Lists.newArrayList(); - - Reader reader = Files.newReader(file, Charsets.UTF_8); - SpeciesModel csvModel = new SpeciesModel(getCsvSeparator(), existingSpeciesName); - try { - Import<Species> importer = Import.newImport(csvModel, reader); - - try { - - for (Species bean : importer) { - toImport.add(bean); - } - importer.close(); - } finally { - IOUtils.closeQuietly(importer); - } - reader.close(); - - } catch (IOException e) { - throw new IOException(t("tutti.service.referential.import.species.error", file), e); - - } catch (ImportRuntimeException e) { - String message; - if (e.getCause() != null) { - message = e.getCause().getMessage(); - } else { - message = e.getMessage(); - } - throw new ApplicationTechnicalException(message, e); - - } finally { - - IOUtils.closeQuietly(reader); - } - - List<Species> result = - persistenceService.importTemporarySpecies(toImport); - return result; - } - - public List<Vessel> importTemporaryVessel(File file) throws IOException { - if (log.isInfoEnabled()) { - log.info("Will import vessels from file: " + file); - } - - // get all vessels - List<Vessel> existingVessels = Lists.newArrayList(persistenceService.getAllFishingVessel()); - existingVessels.addAll(persistenceService.getAllScientificVessel()); + public void exportExistingTemporarySpecies(File file) throws IOException { - Function<Vessel, String> vesselToId = new Function<Vessel, String>() { - @Override - public String apply(Vessel input) { - return input.getName() + "#" + input.getInternationalRegistrationCode(); - } - }; + List<Species> targetList = Lists.newArrayList(persistenceService.getAllReferentSpecies()); - Set<String> existingIds = Sets.newHashSet( - Lists.transform(existingVessels, vesselToId)); + List<Species> toExport = persistenceService.retainTemporaryList(targetList); - List<Vessel> toImport = Lists.newArrayList(); + exportTemporarySpecies(file, toExport); - Reader reader = Files.newReader(file, Charsets.UTF_8); - VesselModel csvModel = new VesselModel(getCsvSeparator()); - try { - Import<Vessel> importer = Import.newImport(csvModel, reader); - - try { - - for (final Vessel bean : importer) { - - String currentId = vesselToId.apply(bean); - - if (!existingIds.add(currentId)) { - - // id was already in universe - throw new ApplicationTechnicalException( - t("tutti.service.referential.import.vessels.existingValue.error", - bean.getName(), - bean.getInternationalRegistrationCode())); - } - toImport.add(bean); - } - importer.close(); - } finally { - IOUtils.closeQuietly(importer); - } - reader.close(); - } catch (IOException e) { - throw new IOException(t("tutti.service.referential.import.vessels.error", file), e); - } finally { - - IOUtils.closeQuietly(reader); - } - List<Vessel> result = - persistenceService.importTemporaryVessel(toImport); - return result; - } - - public List<Person> importTemporaryPerson(File file) throws IOException { - if (log.isInfoEnabled()) { - log.info("Will import persons from file: " + file); - } - - List<Person> toImport = Lists.newArrayList(); - - Reader reader = Files.newReader(file, Charsets.UTF_8); - PersonModel csvModel = new PersonModel(getCsvSeparator()); - try { - Import<Person> importer = Import.newImport(csvModel, reader); - - try { - - for (Person bean : importer) { - toImport.add(bean); - } - importer.close(); - } finally { - IOUtils.closeQuietly(importer); - } - reader.close(); - } catch (IOException e) { - throw new IOException(t("tutti.service.referential.import.persons.error", file), e); - } finally { - - IOUtils.closeQuietly(reader); - } - List<Person> result = - persistenceService.importTemporaryPerson(toImport); - return result; - } - - public List<Gear> importTemporaryGear(File file) throws IOException { - if (log.isInfoEnabled()) { - log.info("Will import gears from file: " + file); - } - - // get all vessel names - Set<String> existingGearName = Sets.newHashSet(Iterables.transform(persistenceService.getAllFishingGear(), new Function<Gear, String>() { - @Override - public String apply(Gear input) { - return input.getName(); - } - })); - - existingGearName.addAll(Lists.transform(persistenceService.getAllScientificGear(), new Function<Gear, String>() { - @Override - public String apply(Gear input) { - return input.getName(); - } - })); - - List<Gear> toImport = Lists.newArrayList(); - - Reader reader = Files.newReader(file, Charsets.UTF_8); - GearModel csvModel = new GearModel(getCsvSeparator(), existingGearName); - try { - Import<Gear> importer = Import.newImport(csvModel, reader); - - try { - - for (Gear bean : importer) { - toImport.add(bean); - } - importer.close(); - } finally { - IOUtils.closeQuietly(importer); - } - reader.close(); - } catch (IOException e) { - throw new IOException(t("tutti.service.referential.import.gears.error", file), e); - - } catch (ImportRuntimeException e) { - String message; - if (e.getCause() != null) { - message = e.getCause().getMessage(); - } else { - message = e.getMessage(); - } - throw new ApplicationTechnicalException(message, e); - - } finally { - - IOUtils.closeQuietly(reader); - } - List<Gear> result = persistenceService.importTemporaryGear(toImport); - return result; } public void exportTemporarySpeciesExample(File file) throws IOException { @@ -296,6 +91,12 @@ public class ReferentialImportExportService extends AbstractTuttiService { s.setName("Temporary Species name 3"); toExport.add(s); + exportTemporarySpecies(file, toExport); + + } + + protected void exportTemporarySpecies(File file, List<Species> toExport) throws IOException { + SpeciesModel csvModel = new SpeciesModel(getCsvSeparator(), null); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); @@ -313,7 +114,19 @@ public class ReferentialImportExportService extends AbstractTuttiService { } + public void exportExistingTemporaryVessel(File file) throws IOException { + + List<Vessel> targetList = Lists.newArrayList(persistenceService.getAllFishingVessel()); + targetList.addAll(persistenceService.getAllScientificVessel()); + + List<Vessel> toExport = persistenceService.retainTemporaryList(targetList); + + exportTemporaryVessel(file, toExport); + + } + public void exportTemporaryVesselExample(File file) throws IOException { + List<Vessel> toExport = Lists.newArrayList(); Vessel v; @@ -342,6 +155,12 @@ public class ReferentialImportExportService extends AbstractTuttiService { v.setScientificVessel(true); toExport.add(v); + exportTemporaryVessel(file, toExport); + + } + + protected void exportTemporaryVessel(File file, List<Vessel> toExport) throws IOException { + VesselModel csvModel = new VesselModel(getCsvSeparator()); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); @@ -358,7 +177,18 @@ public class ReferentialImportExportService extends AbstractTuttiService { } } + public void exportExistingTemporaryPerson(File file) throws IOException { + + List<Person> targetList = Lists.newArrayList(persistenceService.getAllPerson()); + + List<Person> toExport = persistenceService.retainTemporaryList(targetList); + + exportTemporaryPerson(file, toExport); + + } + public void exportTemporaryPersonExample(File file) throws IOException { + List<Person> toExport = Lists.newArrayList(); Person p; @@ -378,6 +208,11 @@ public class ReferentialImportExportService extends AbstractTuttiService { p.setLastName("Last name 3"); toExport.add(p); + exportTemporaryPerson(file, toExport); + + } + + protected void exportTemporaryPerson(File file, List<Person> toExport) throws IOException { PersonModel csvModel = new PersonModel(getCsvSeparator()); @@ -395,6 +230,17 @@ public class ReferentialImportExportService extends AbstractTuttiService { } } + public void exportExistingTemporaryGear(File file) throws IOException { + + List<Gear> targetList = Lists.newArrayList(persistenceService.getAllFishingGear()); + targetList.addAll(persistenceService.getAllScientificGear()); + + List<Gear> toExport = persistenceService.retainTemporaryList(targetList); + + exportTemporaryGear(file, toExport); + + } + public void exportTemporaryGearExample(File file) throws IOException { List<Gear> toExport = Lists.newArrayList(); @@ -422,6 +268,12 @@ public class ReferentialImportExportService extends AbstractTuttiService { g.setScientificGear(true); toExport.add(g); + exportTemporaryGear(file, toExport); + + } + + protected void exportTemporaryGear(File file, List<Gear> toExport) throws IOException { + GearModel csvModel = new GearModel(getCsvSeparator(), null); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportExportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportService.java similarity index 87% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportExportService.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportService.java index 4d8fede..46ff4cd 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportExportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportService.java @@ -28,7 +28,6 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.common.io.Files; -import org.nuiton.jaxx.application.ApplicationTechnicalException; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Gears; import fr.ifremer.tutti.persistence.entities.referential.Person; @@ -46,6 +45,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Export; import org.nuiton.csv.Import; import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.BufferedWriter; import java.io.File; @@ -57,16 +57,16 @@ import java.util.Set; import static org.nuiton.i18n.I18n.t; /** - * Service to import or export referential. + * Service to import temporary referential. * * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class ReferentialImportExportService extends AbstractTuttiService { +public class ReferentialImportService extends AbstractTuttiService { /** Logger. */ private static final Log log = - LogFactory.getLog(ReferentialImportExportService.class); + LogFactory.getLog(ReferentialImportService.class); protected PersistenceService persistenceService; @@ -278,6 +278,16 @@ public class ReferentialImportExportService extends AbstractTuttiService { return result; } + public void exportExistingTemporarySpecies(File file) throws IOException { + + List<Species> targetList = Lists.newArrayList(persistenceService.getAllReferentSpecies()); + + List<Species> toExport = persistenceService.retainTemporaryList(targetList); + + exportTemporarySpecies(file, toExport); + + } + public void exportTemporarySpeciesExample(File file) throws IOException { List<Species> toExport = Lists.newArrayList(); @@ -296,6 +306,12 @@ public class ReferentialImportExportService extends AbstractTuttiService { s.setName("Temporary Species name 3"); toExport.add(s); + exportTemporarySpecies(file, toExport); + + } + + protected void exportTemporarySpecies(File file, List<Species> toExport) throws IOException { + SpeciesModel csvModel = new SpeciesModel(getCsvSeparator(), null); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); @@ -313,7 +329,19 @@ public class ReferentialImportExportService extends AbstractTuttiService { } + public void exportExistingTemporaryVessel(File file) throws IOException { + + List<Vessel> targetList = Lists.newArrayList(persistenceService.getAllFishingVessel()); + targetList.addAll(persistenceService.getAllScientificVessel()); + + List<Vessel> toExport = persistenceService.retainTemporaryList(targetList); + + exportTemporaryVessel(file, toExport); + + } + public void exportTemporaryVesselExample(File file) throws IOException { + List<Vessel> toExport = Lists.newArrayList(); Vessel v; @@ -342,6 +370,12 @@ public class ReferentialImportExportService extends AbstractTuttiService { v.setScientificVessel(true); toExport.add(v); + exportTemporaryVessel(file, toExport); + + } + + protected void exportTemporaryVessel(File file, List<Vessel> toExport) throws IOException { + VesselModel csvModel = new VesselModel(getCsvSeparator()); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); @@ -358,7 +392,18 @@ public class ReferentialImportExportService extends AbstractTuttiService { } } + public void exportExistingTemporaryPerson(File file) throws IOException { + + List<Person> targetList = Lists.newArrayList(persistenceService.getAllPerson()); + + List<Person> toExport = persistenceService.retainTemporaryList(targetList); + + exportTemporaryPerson(file, toExport); + + } + public void exportTemporaryPersonExample(File file) throws IOException { + List<Person> toExport = Lists.newArrayList(); Person p; @@ -378,6 +423,11 @@ public class ReferentialImportExportService extends AbstractTuttiService { p.setLastName("Last name 3"); toExport.add(p); + exportTemporaryPerson(file, toExport); + + } + + protected void exportTemporaryPerson(File file, List<Person> toExport) throws IOException { PersonModel csvModel = new PersonModel(getCsvSeparator()); @@ -395,6 +445,17 @@ public class ReferentialImportExportService extends AbstractTuttiService { } } + public void exportExistingTemporaryGear(File file) throws IOException { + + List<Gear> targetList = Lists.newArrayList(persistenceService.getAllFishingGear()); + targetList.addAll(persistenceService.getAllScientificGear()); + + List<Gear> toExport = persistenceService.retainTemporaryList(targetList); + + exportTemporaryGear(file, toExport); + + } + public void exportTemporaryGearExample(File file) throws IOException { List<Gear> toExport = Lists.newArrayList(); @@ -422,6 +483,12 @@ public class ReferentialImportExportService extends AbstractTuttiService { g.setScientificGear(true); toExport.add(g); + exportTemporaryGear(file, toExport); + + } + + protected void exportTemporaryGear(File file, List<Gear> toExport) throws IOException { + GearModel csvModel = new GearModel(getCsvSeparator(), null); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/PersistenceServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/PersistenceServiceTest.java index fede063..0915db0 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/PersistenceServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/PersistenceServiceTest.java @@ -91,7 +91,7 @@ public class PersistenceServiceTest { Gear source = service.getGear(-3); Gear target = service.getGear(377); - service.replaceGear(source, target); + service.replaceGear(source, target, ); } { @@ -110,7 +110,7 @@ public class PersistenceServiceTest { Gear source = service.getGear(-4); Gear target = service.getGear(378); - service.replaceGear(source, target); + service.replaceGear(source, target, ); } { @@ -152,7 +152,7 @@ public class PersistenceServiceTest { Person source = service.getPerson(-1); Person target = service.getPerson(1); - service.replacePerson(source, target); + service.replacePerson(source, target, ); } { service = dbResource.getServiceContext().getService(PersistenceService.class); @@ -169,7 +169,7 @@ public class PersistenceServiceTest { Person source = service.getPerson(-2); Person target = service.getPerson(2); - service.replacePerson(source, target); + service.replacePerson(source, target, ); } { Cruise cruise = service.getCruise("0"); @@ -184,7 +184,7 @@ public class PersistenceServiceTest { Person source = service.getPerson(-3); Person target = service.getPerson(3); - service.replacePerson(source, target); + service.replacePerson(source, target, ); } { Cruise cruise = service.getCruise("0"); @@ -225,7 +225,7 @@ public class PersistenceServiceTest { Species source = service.getSpeciesByReferenceTaxonId(-1); Species target = service.getSpeciesByReferenceTaxonId(1); - service.replaceSpecies(source, target); + service.replaceSpecies(source, target, ); } { @@ -246,7 +246,7 @@ public class PersistenceServiceTest { Species source = service.getSpeciesByReferenceTaxonId(-2); Species target = service.getSpeciesByReferenceTaxonId(2); - service.replaceSpecies(source, target); + service.replaceSpecies(source, target, ); } { @@ -266,7 +266,7 @@ public class PersistenceServiceTest { Species source = service.getSpeciesByReferenceTaxonId(-3); Species target = service.getSpeciesByReferenceTaxonId(3); - service.replaceSpecies(source, target); + service.replaceSpecies(source, target, ); } { @@ -307,7 +307,7 @@ public class PersistenceServiceTest { Vessel source = service.getVessel("#TEMP¿International registration code S3"); Vessel target = service.getVessel("267206"); - service.replaceVessel(source, target); + service.replaceVessel(source, target, ); } { Cruise cruise = service.getCruise("0"); @@ -322,7 +322,7 @@ public class PersistenceServiceTest { Vessel source = service.getVessel("#TEMP¿International registration code S4"); Vessel target = service.getVessel("278970"); - service.replaceVessel(source, target); + service.replaceVessel(source, target, ); } { Cruise cruise = service.getCruise("0"); diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java new file mode 100644 index 0000000..8c5f62e --- /dev/null +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java @@ -0,0 +1,139 @@ +package fr.ifremer.tutti.service.referential; + +/* + * #%L + * Tutti :: Service + * %% + * Copyright (C) 2012 - 2014 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import fr.ifremer.tutti.service.ServiceDbResource; +import fr.ifremer.tutti.service.TuttiServiceContext; +import org.junit.Assert; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; + +import java.io.File; + +/** + * @author tchemit <chemit@codelutin.com> + * @since 1.0 + */ +public class ReferentialExportServiceTest { + + @ClassRule + public static final ServiceDbResource dbResource = + ServiceDbResource.writeDb("dbCGFS"); + + protected File dataDirectory; + + private static final String SPECIES_FILE_CONTENT = + "name\n" + + "Temporary Species name 1\n" + + "Temporary Species name 2\n" + + "Temporary Species name 3"; + + private static final String GEAR_FILE_CONTENT = + "name;label;scientificGear\n" + + "Gear fishing name 1;Gear fishing label 1;N\n" + + "Gear fishing name 2;Gear fishing label 2;N\n" + + "Gear scientific name 3;Gear scientific label 3;Y\n" + + "Gear scientific name 4;Gear scientific label 4;Y"; + + private static final String PERSON_FILE_CONTENT = + "firstName;lastName\n" + + "First name 1;Last name 1\n" + + "First name 2;Last name 2\n" + + "First name 3;Last name 3"; + + private static final String VESSEL_FILE_CONTENT = + "name;internationalRegistrationCode;scientificVessel\n" + + "Temporary fishing vessel name 1;International registration code F1;N\n" + + "Temporary fishing vessel name 2;International registration code F2;N\n" + + "Temporary scientific vessel name 3;International registration code S3;Y\n" + + "Temporary scientific vessel name 4;International registration code S4;Y"; + + protected ReferentialImportService service; + + @Before + public void setUp() throws Exception { + + dataDirectory = dbResource.getConfig().getDataDirectory(); + + TuttiServiceContext serviceContext = dbResource.getServiceContext(); + + serviceContext.getConfig().setCsvSeparator(';'); + + service = serviceContext.getService(ReferentialImportService.class); + } + + @Test + public void exportTemporarySpeciesExample() throws Exception { + + File file = new File(dataDirectory, "exportSpecies.csv"); + + Assert.assertFalse(file.exists()); + service.exportTemporarySpeciesExample(file); + Assert.assertTrue(file.exists()); + + String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); + Assert.assertEquals(SPECIES_FILE_CONTENT, exportFileToString); + } + + @Test + public void exportTemporaryVesselExample() throws Exception { + File file = new File(dataDirectory, "exportVessel.csv"); + + Assert.assertFalse(file.exists()); + service.exportTemporaryVesselExample(file); + Assert.assertTrue(file.exists()); + + String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); + Assert.assertEquals(VESSEL_FILE_CONTENT, exportFileToString); + } + + @Test + public void exportTemporaryPersonExample() throws Exception { + + File file = new File(dataDirectory, "exportPerson.csv"); + + Assert.assertFalse(file.exists()); + service.exportTemporaryPersonExample(file); + Assert.assertTrue(file.exists()); + + String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); + Assert.assertEquals(PERSON_FILE_CONTENT, exportFileToString); + } + + @Test + public void exportTemporaryGearExample() throws Exception { + + File file = new File(dataDirectory, "exportGear.csv"); + + Assert.assertFalse(file.exists()); + service.exportTemporaryGearExample(file); + Assert.assertTrue(file.exists()); + + String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); + Assert.assertEquals(GEAR_FILE_CONTENT, exportFileToString); + } + +} diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportExportServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportServiceTest.java similarity index 79% rename from tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportExportServiceTest.java rename to tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportServiceTest.java index 1902dc5..3a840b3 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportExportServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportServiceTest.java @@ -24,7 +24,6 @@ package fr.ifremer.tutti.service.referential; import com.google.common.base.Charsets; import com.google.common.io.Files; -import org.nuiton.jaxx.application.ApplicationTechnicalException; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; @@ -35,6 +34,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; +import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.File; import java.util.List; @@ -43,7 +43,7 @@ import java.util.List; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class ReferentialImportExportServiceTest { +public class ReferentialImportServiceTest { @ClassRule public static final ServiceDbResource dbResource = @@ -51,33 +51,33 @@ public class ReferentialImportExportServiceTest { protected File dataDirectory; - public static final String SPECIES_FILE_CONTENT = + private static final String SPECIES_FILE_CONTENT = "name\n" + "Temporary Species name 1\n" + "Temporary Species name 2\n" + "Temporary Species name 3"; - public static final String GEAR_FILE_CONTENT = + private static final String GEAR_FILE_CONTENT = "name;label;scientificGear\n" + "Gear fishing name 1;Gear fishing label 1;N\n" + "Gear fishing name 2;Gear fishing label 2;N\n" + "Gear scientific name 3;Gear scientific label 3;Y\n" + "Gear scientific name 4;Gear scientific label 4;Y"; - public static final String PERSON_FILE_CONTENT = + private static final String PERSON_FILE_CONTENT = "firstName;lastName\n" + "First name 1;Last name 1\n" + "First name 2;Last name 2\n" + "First name 3;Last name 3"; - public static final String VESSEL_FILE_CONTENT = + private static final String VESSEL_FILE_CONTENT = "name;internationalRegistrationCode;scientificVessel\n" + "Temporary fishing vessel name 1;International registration code F1;N\n" + "Temporary fishing vessel name 2;International registration code F2;N\n" + "Temporary scientific vessel name 3;International registration code S3;Y\n" + "Temporary scientific vessel name 4;International registration code S4;Y"; - public static final String DUPLICATE_VESSEL_FILE_CONTENT = + private static final String DUPLICATE_VESSEL_FILE_CONTENT = "name;internationalRegistrationCode;scientificVessel\n" + "Temporary fishing vessel name 1;International registration code F1;N\n" + "Temporary fishing vessel name 1;International registration code F1;N\n" + @@ -85,7 +85,7 @@ public class ReferentialImportExportServiceTest { "Temporary scientific vessel name 3;International registration code S3;Y\n" + "Temporary scientific vessel name 4;International registration code S4;Y"; - protected ReferentialImportExportService service; + protected ReferentialImportService service; @Before public void setUp() throws Exception { @@ -96,7 +96,7 @@ public class ReferentialImportExportServiceTest { serviceContext.getConfig().setCsvSeparator(';'); - service = serviceContext.getService(ReferentialImportExportService.class); + service = serviceContext.getService(ReferentialImportService.class); } @Test @@ -231,55 +231,4 @@ public class ReferentialImportExportServiceTest { } } - @Test - public void exportTemporarySpeciesExample() throws Exception { - - File file = new File(dataDirectory, "exportSpecies.csv"); - - Assert.assertFalse(file.exists()); - service.exportTemporarySpeciesExample(file); - Assert.assertTrue(file.exists()); - - String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); - Assert.assertEquals(SPECIES_FILE_CONTENT, exportFileToString); - } - - @Test - public void exportTemporaryVesselExample() throws Exception { - File file = new File(dataDirectory, "exportVessel.csv"); - - Assert.assertFalse(file.exists()); - service.exportTemporaryVesselExample(file); - Assert.assertTrue(file.exists()); - - String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); - Assert.assertEquals(VESSEL_FILE_CONTENT, exportFileToString); - } - - @Test - public void exportTemporaryPersonExample() throws Exception { - - File file = new File(dataDirectory, "exportPerson.csv"); - - Assert.assertFalse(file.exists()); - service.exportTemporaryPersonExample(file); - Assert.assertTrue(file.exists()); - - String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); - Assert.assertEquals(PERSON_FILE_CONTENT, exportFileToString); - } - - @Test - public void exportTemporaryGearExample() throws Exception { - - File file = new File(dataDirectory, "exportGear.csv"); - - Assert.assertFalse(file.exists()); - service.exportTemporaryGearExample(file); - Assert.assertTrue(file.exists()); - - String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); - Assert.assertEquals(GEAR_FILE_CONTENT, exportFileToString); - } - } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java index 5997762..b2309b7 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java @@ -45,7 +45,8 @@ import fr.ifremer.tutti.service.export.sumatra.CatchesSumatraExportService; import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; import fr.ifremer.tutti.service.psionimport.PsionImportService; import fr.ifremer.tutti.service.pupitri.PupitriImportExportService; -import fr.ifremer.tutti.service.referential.ReferentialImportExportService; +import fr.ifremer.tutti.service.referential.ReferentialExportService; +import fr.ifremer.tutti.service.referential.ReferentialImportService; import fr.ifremer.tutti.service.referential.TuttiReferentialSynchronizeService; import fr.ifremer.tutti.service.report.ReportService; import fr.ifremer.tutti.ui.swing.content.MainUI; @@ -676,8 +677,12 @@ public class TuttiUIContext extends AbstractBean implements Closeable, UIMessage return serviceContext.getService(BigfinImportService.class); } - public ReferentialImportExportService getTuttiReferentialImportExportService() { - return serviceContext.getService(ReferentialImportExportService.class); + public ReferentialImportService getTuttiReferentialImportService() { + return serviceContext.getService(ReferentialImportService.class); + } + + public ReferentialExportService getTuttiReferentialExportService() { + return serviceContext.getService(ReferentialExportService.class); } public WeightComputingService getWeightComputingService() { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/AbstractReplaceTemporaryUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/AbstractReplaceTemporaryUIAction.java index c4e6c2e..4fb3794 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/AbstractReplaceTemporaryUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/AbstractReplaceTemporaryUIAction.java @@ -53,7 +53,9 @@ public abstract class AbstractReplaceTemporaryUIAction<E extends TuttiReferentia protected E target; - protected abstract void replaceReferentialEntity(PersistenceService persistenceService, E source, E target); + protected Boolean delete; + + protected abstract void replaceReferentialEntity(PersistenceService persistenceService, E source, E target, boolean delete); protected abstract void resetCaches(); @@ -75,6 +77,7 @@ public abstract class AbstractReplaceTemporaryUIAction<E extends TuttiReferentia if (doAction) { source = model.getSelectedSource(); target = model.getSelectedTarget(); + delete = model.isDelete(); } } @@ -88,6 +91,7 @@ public abstract class AbstractReplaceTemporaryUIAction<E extends TuttiReferentia Preconditions.checkNotNull(source); Preconditions.checkNotNull(target); + Preconditions.checkNotNull(delete); String entityLabel = getEntityLabel(); @@ -96,7 +100,7 @@ public abstract class AbstractReplaceTemporaryUIAction<E extends TuttiReferentia entityLabel, source.getName(), target.getName())); } - replaceReferentialEntity(getContext().getPersistenceService(), source, target); + replaceReferentialEntity(getContext().getPersistenceService(), source, target, delete); // reset cache resetCaches(); @@ -106,6 +110,7 @@ public abstract class AbstractReplaceTemporaryUIAction<E extends TuttiReferentia @Override public void releaseAction() { source = target = null; + delete = null; super.releaseAction(); } @@ -113,7 +118,13 @@ public abstract class AbstractReplaceTemporaryUIAction<E extends TuttiReferentia @Override public void postSuccessAction() { super.postSuccessAction(); - sendMessage(t("tutti.replaceTemporary.done", getEntityLabel(), decorate(source), decorate(target))); + + if (delete) { + sendMessage(t("tutti.replaceTemporaryAndDelete.done", getEntityLabel(), decorate(source), decorate(target))); + } else { + sendMessage(t("tutti.replaceTemporary.done", getEntityLabel(), decorate(source), decorate(target))); + } + } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryGearExampleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java similarity index 78% copy from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryGearExampleAction.java copy to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java index 6a59e8f..3f03f94 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryGearExampleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java @@ -23,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialImportExportService; +import fr.ifremer.tutti.service.referential.ReferentialExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; @@ -40,15 +40,15 @@ import static org.nuiton.i18n.I18n.t; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class ExportTemporaryGearExampleAction extends AbstractTuttiAction<TuttiUIContext, ManageTemporaryReferentialUI, ManageTemporaryReferentialUIHandler> { +public class ExportExistingTemporaryGearAction extends AbstractTuttiAction<TuttiUIContext, ManageTemporaryReferentialUI, ManageTemporaryReferentialUIHandler> { /** Logger. */ private static final Log log = - LogFactory.getLog(ExportTemporaryGearExampleAction.class); + LogFactory.getLog(ExportExistingTemporaryGearAction.class); private File file; - public ExportTemporaryGearExampleAction(ManageTemporaryReferentialUIHandler handler) { + public ExportExistingTemporaryGearAction(ManageTemporaryReferentialUIHandler handler) { super(handler, true); } @@ -61,9 +61,9 @@ public class ExportTemporaryGearExampleAction extends AbstractTuttiAction<TuttiU // choose file to export file = saveFile( - "exportGearExample", + "exportTemporaryGear", "csv", - t("tutti.manageTemporaryReferential.title.choose.exportTemporaryGearExampleFile"), + t("tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryGearFile"), t("tutti.manageTemporaryReferential.action.chooseReferentialGearFile.export"), "^.*\\.csv", t("tutti.common.file.csv") ); @@ -82,13 +82,12 @@ public class ExportTemporaryGearExampleAction extends AbstractTuttiAction<TuttiU public void doAction() throws Exception { Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { - log.info("Will export example gears temporary " + + log.info("Will export existing gears temporary " + "referential to file: " + file); } - ReferentialImportExportService service = - getContext().getTuttiReferentialImportExportService(); - service.exportTemporaryGearExample(file); + ReferentialExportService service = getContext().getTuttiReferentialExportService(); + service.exportExistingTemporaryGear(file); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryPersonExampleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java similarity index 77% copy from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryPersonExampleAction.java copy to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java index 2d112e2..40ff64f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryPersonExampleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java @@ -23,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialImportExportService; +import fr.ifremer.tutti.service.referential.ReferentialExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; @@ -40,16 +40,16 @@ import static org.nuiton.i18n.I18n.t; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class ExportTemporaryPersonExampleAction extends AbstractTuttiAction<TuttiUIContext, ManageTemporaryReferentialUI, ManageTemporaryReferentialUIHandler> { +public class ExportExistingTemporaryPersonAction extends AbstractTuttiAction<TuttiUIContext, ManageTemporaryReferentialUI, ManageTemporaryReferentialUIHandler> { /** Logger. */ private static final Log log = - LogFactory.getLog(ExportTemporaryPersonExampleAction.class); + LogFactory.getLog(ExportExistingTemporaryPersonAction.class); private File file; - public ExportTemporaryPersonExampleAction(ManageTemporaryReferentialUIHandler handler) { + public ExportExistingTemporaryPersonAction(ManageTemporaryReferentialUIHandler handler) { super(handler, true); } @@ -62,9 +62,9 @@ public class ExportTemporaryPersonExampleAction extends AbstractTuttiAction<Tutt // choose file to export file = saveFile( - "exportPersonExample", + "exportTemporaryPerson", "csv", - t("tutti.manageTemporaryReferential.title.choose.exportTemporaryPersonExampleFile"), + t("tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryPersonFile"), t("tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.export"), "^.*\\.csv", t("tutti.common.file.csv") ); @@ -83,14 +83,13 @@ public class ExportTemporaryPersonExampleAction extends AbstractTuttiAction<Tutt public void doAction() throws Exception { Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { - log.info("Will export example persons temporary " + + log.info("Will export existing persons temporary " + "referential to file: " + file); } - ReferentialImportExportService service = - getContext().getTuttiReferentialImportExportService(); + ReferentialExportService service = getContext().getTuttiReferentialExportService(); + service.exportExistingTemporaryPerson(file); - service.exportTemporaryPersonExample(file); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporarySpeciesExampleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java similarity index 77% copy from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporarySpeciesExampleAction.java copy to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java index 83ac232..aed0f77 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporarySpeciesExampleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java @@ -23,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialImportExportService; +import fr.ifremer.tutti.service.referential.ReferentialExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; @@ -40,15 +40,15 @@ import static org.nuiton.i18n.I18n.t; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class ExportTemporarySpeciesExampleAction extends AbstractTuttiAction<TuttiUIContext, ManageTemporaryReferentialUI, ManageTemporaryReferentialUIHandler> { +public class ExportExistingTemporarySpeciesAction extends AbstractTuttiAction<TuttiUIContext, ManageTemporaryReferentialUI, ManageTemporaryReferentialUIHandler> { /** Logger. */ private static final Log log = - LogFactory.getLog(ExportTemporarySpeciesExampleAction.class); + LogFactory.getLog(ExportExistingTemporarySpeciesAction.class); private File file; - public ExportTemporarySpeciesExampleAction(ManageTemporaryReferentialUIHandler handler) { + public ExportExistingTemporarySpeciesAction(ManageTemporaryReferentialUIHandler handler) { super(handler, true); } @@ -61,9 +61,9 @@ public class ExportTemporarySpeciesExampleAction extends AbstractTuttiAction<Tut // choose file to export file = saveFile( - "exportSpeciesExample", + "exportTemporarySpecies", "csv", - t("tutti.manageTemporaryReferential.title.choose.exportTemporarySpeciesExampleFile"), + t("tutti.manageTemporaryReferential.title.choose.exportExistingTemporarySpeciesFile"), t("tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.export"), "^.*\\.csv", t("tutti.common.file.csv") ); @@ -82,14 +82,13 @@ public class ExportTemporarySpeciesExampleAction extends AbstractTuttiAction<Tut public void doAction() throws Exception { Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { - log.info("Will export example species temporary " + + log.info("Will export existing species temporary " + "referential to file: " + file); } - ReferentialImportExportService service = - getContext().getTuttiReferentialImportExportService(); + ReferentialExportService service = getContext().getTuttiReferentialExportService(); + service.exportExistingTemporarySpecies(file); - service.exportTemporarySpeciesExample(file); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporarySpeciesExampleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryVesselAction.java similarity index 79% copy from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporarySpeciesExampleAction.java copy to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryVesselAction.java index 83ac232..267d803 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporarySpeciesExampleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryVesselAction.java @@ -23,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialImportExportService; +import fr.ifremer.tutti.service.referential.ReferentialExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; @@ -40,15 +40,15 @@ import static org.nuiton.i18n.I18n.t; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class ExportTemporarySpeciesExampleAction extends AbstractTuttiAction<TuttiUIContext, ManageTemporaryReferentialUI, ManageTemporaryReferentialUIHandler> { +public class ExportExistingTemporaryVesselAction extends AbstractTuttiAction<TuttiUIContext, ManageTemporaryReferentialUI, ManageTemporaryReferentialUIHandler> { /** Logger. */ private static final Log log = - LogFactory.getLog(ExportTemporarySpeciesExampleAction.class); + LogFactory.getLog(ExportExistingTemporaryVesselAction.class); private File file; - public ExportTemporarySpeciesExampleAction(ManageTemporaryReferentialUIHandler handler) { + public ExportExistingTemporaryVesselAction(ManageTemporaryReferentialUIHandler handler) { super(handler, true); } @@ -61,10 +61,10 @@ public class ExportTemporarySpeciesExampleAction extends AbstractTuttiAction<Tut // choose file to export file = saveFile( - "exportSpeciesExample", + "exportTemporaryExample", "csv", - t("tutti.manageTemporaryReferential.title.choose.exportTemporarySpeciesExampleFile"), - t("tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.export"), + t("tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryVesselFile"), + t("tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export"), "^.*\\.csv", t("tutti.common.file.csv") ); doAction = file != null; @@ -82,19 +82,18 @@ public class ExportTemporarySpeciesExampleAction extends AbstractTuttiAction<Tut public void doAction() throws Exception { Preconditions.checkNotNull(file); if (log.isInfoEnabled()) { - log.info("Will export example species temporary " + + log.info("Will export existing vessels temporary " + "referential to file: " + file); } - ReferentialImportExportService service = - getContext().getTuttiReferentialImportExportService(); + ReferentialExportService service = getContext().getTuttiReferentialExportService(); + service.exportExistingTemporaryVessel(file); - service.exportTemporarySpeciesExample(file); } @Override public void postSuccessAction() { super.postSuccessAction(); - sendMessage(t("tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.export.success", file)); + sendMessage(t("tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export.success", file)); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryGearExampleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryGearExampleAction.java index 6a59e8f..f407390 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryGearExampleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryGearExampleAction.java @@ -23,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialImportExportService; +import fr.ifremer.tutti.service.referential.ReferentialExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; @@ -86,8 +86,7 @@ public class ExportTemporaryGearExampleAction extends AbstractTuttiAction<TuttiU "referential to file: " + file); } - ReferentialImportExportService service = - getContext().getTuttiReferentialImportExportService(); + ReferentialExportService service = getContext().getTuttiReferentialExportService(); service.exportTemporaryGearExample(file); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryPersonExampleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryPersonExampleAction.java index 2d112e2..68bc2b1 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryPersonExampleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryPersonExampleAction.java @@ -23,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialImportExportService; +import fr.ifremer.tutti.service.referential.ReferentialExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; @@ -87,10 +87,9 @@ public class ExportTemporaryPersonExampleAction extends AbstractTuttiAction<Tutt "referential to file: " + file); } - ReferentialImportExportService service = - getContext().getTuttiReferentialImportExportService(); - + ReferentialExportService service = getContext().getTuttiReferentialExportService(); service.exportTemporaryPersonExample(file); + } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporarySpeciesExampleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporarySpeciesExampleAction.java index 83ac232..5760244 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporarySpeciesExampleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporarySpeciesExampleAction.java @@ -23,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialImportExportService; +import fr.ifremer.tutti.service.referential.ReferentialExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; @@ -86,10 +86,9 @@ public class ExportTemporarySpeciesExampleAction extends AbstractTuttiAction<Tut "referential to file: " + file); } - ReferentialImportExportService service = - getContext().getTuttiReferentialImportExportService(); - + ReferentialExportService service = getContext().getTuttiReferentialExportService(); service.exportTemporarySpeciesExample(file); + } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryVesselExampleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryVesselExampleAction.java index 92b7fbb..24389de 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryVesselExampleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryVesselExampleAction.java @@ -23,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialImportExportService; +import fr.ifremer.tutti.service.referential.ReferentialExportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; @@ -86,10 +86,9 @@ public class ExportTemporaryVesselExampleAction extends AbstractTuttiAction<Tutt "referential to file: " + file); } - ReferentialImportExportService service = - getContext().getTuttiReferentialImportExportService(); - + ReferentialExportService service = getContext().getTuttiReferentialExportService(); service.exportTemporaryVesselExample(file); + } @Override 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 b9f1f7c..775c0ca 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,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialImportExportService; +import fr.ifremer.tutti.service.referential.ReferentialImportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; @@ -84,9 +84,7 @@ public class ImportTemporaryGearAction extends AbstractTuttiAction<TuttiUIContex "referential from file: " + file); } - ReferentialImportExportService service = - getContext().getTuttiReferentialImportExportService(); - + ReferentialImportService service = getContext().getTuttiReferentialImportService(); service.importTemporaryGear(file); // reset ui cache 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 fdcbb00..3ed7033 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,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialImportExportService; +import fr.ifremer.tutti.service.referential.ReferentialImportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; @@ -84,8 +84,8 @@ public class ImportTemporaryPersonAction extends AbstractTuttiAction<TuttiUICont "referential from file: " + file); } - ReferentialImportExportService service = - getContext().getTuttiReferentialImportExportService(); + ReferentialImportService service = + getContext().getTuttiReferentialImportService(); service.importTemporaryPerson(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 926d450..a3d9107 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,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialImportExportService; +import fr.ifremer.tutti.service.referential.ReferentialImportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; @@ -83,8 +83,8 @@ public class ImportTemporarySpeciesAction extends AbstractTuttiAction<TuttiUICon "referential from file: " + file); } - ReferentialImportExportService service = - getContext().getTuttiReferentialImportExportService(); + ReferentialImportService service = + getContext().getTuttiReferentialImportService(); service.importTemporarySpecies(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 b1348d7..1c9aac0 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,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialImportExportService; +import fr.ifremer.tutti.service.referential.ReferentialImportService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; @@ -83,8 +83,8 @@ public class ImportTemporaryVesselAction extends AbstractTuttiAction<TuttiUICont "referential from file: " + file); } - ReferentialImportExportService service = - getContext().getTuttiReferentialImportExportService(); + ReferentialImportService service = + getContext().getTuttiReferentialImportService(); service.importTemporaryVessel(file); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporaryGearAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporaryGearAction.java index bc8d48b..bbb9d16 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporaryGearAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporaryGearAction.java @@ -50,9 +50,9 @@ public class ReplaceTemporaryGearAction extends AbstractReplaceTemporaryUIAction } @Override - protected void replaceReferentialEntity(PersistenceService persistenceService, Gear source, Gear target) { + protected void replaceReferentialEntity(PersistenceService persistenceService, Gear source, Gear target, boolean delete) { - persistenceService.replaceGear(source, target); + persistenceService.replaceGear(source, target, delete); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporaryPersonAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporaryPersonAction.java index cb06143..5874645 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporaryPersonAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporaryPersonAction.java @@ -50,9 +50,9 @@ public class ReplaceTemporaryPersonAction extends AbstractReplaceTemporaryUIActi } @Override - protected void replaceReferentialEntity(PersistenceService persistenceService, Person source, Person target) { + protected void replaceReferentialEntity(PersistenceService persistenceService, Person source, Person target, boolean delete) { - persistenceService.replacePerson(source, target); + persistenceService.replacePerson(source, target, delete); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporarySpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporarySpeciesAction.java index 6130830..ef1bba3 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporarySpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporarySpeciesAction.java @@ -50,9 +50,9 @@ public class ReplaceTemporarySpeciesAction extends AbstractReplaceTemporaryUIAct } @Override - protected void replaceReferentialEntity(PersistenceService persistenceService, Species source, Species target) { + protected void replaceReferentialEntity(PersistenceService persistenceService, Species source, Species target, boolean delete) { - persistenceService.replaceSpecies(source, target); + persistenceService.replaceSpecies(source, target, delete); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporaryVesselAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporaryVesselAction.java index 10ad939..98bad85 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporaryVesselAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporaryVesselAction.java @@ -50,9 +50,9 @@ public class ReplaceTemporaryVesselAction extends AbstractReplaceTemporaryUIActi } @Override - protected void replaceReferentialEntity(PersistenceService persistenceService, Vessel source, Vessel target) { + protected void replaceReferentialEntity(PersistenceService persistenceService, Vessel source, Vessel target, boolean delete) { - persistenceService.replaceVessel(source, target); + persistenceService.replaceVessel(source, target, delete); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/replace/AbstractReplaceTemporaryUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/replace/AbstractReplaceTemporaryUIModel.java index 0eaac62..b4e2fef 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/replace/AbstractReplaceTemporaryUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/replace/AbstractReplaceTemporaryUIModel.java @@ -47,6 +47,8 @@ public class AbstractReplaceTemporaryUIModel<E extends TuttiReferentialEntity> e public static final String PROPERTY_SELECTED_TARGET = "selectedTarget"; + public static final String PROPERTY_DELETE = "delete"; + protected List<E> sourceList; protected List<E> targetList; @@ -55,6 +57,8 @@ public class AbstractReplaceTemporaryUIModel<E extends TuttiReferentialEntity> e protected E selectedTarget; + protected boolean delete = true; + public AbstractReplaceTemporaryUIModel() { super(null, null); } @@ -97,6 +101,15 @@ public class AbstractReplaceTemporaryUIModel<E extends TuttiReferentialEntity> e firePropertyChange(PROPERTY_SELECTED_SOURCE, oldvalue, selectedSource); } + public boolean isDelete() { + return delete; + } + + public void setDelete(boolean delete) { + this.delete = delete; + firePropertyChange(PROPERTY_DELETE, null/*force boolean propagation*/, delete); + } + @Override protected E newEntity() { return null; 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 dfaf1e0..fb8f70d 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 @@ -1461,6 +1461,7 @@ tutti.reimport.step.reloadApplication=Redémarrage de l'application... tutti.reinstallDb.step.backupDb=Sauvegarde de la base dans l'archive %s tutti.reinstallDb.step.closeDb=Fermeture de la base <strong>%s</strong> tutti.reinstallDb.step.reloadApplication=Redémarrage de l'application... +tutti.replaceTemporaryAndDelete.done=<html><body>Le référentiel temporaire de type %s <strong>%s</strong> a été remplacée par <strong>%s</strong> puis supprimé. tutti.replaceTemporary.done=<html><body>Le référentiel temporaire de type %s <strong>%s</strong> a été remplacée par <strong>%s</strong> tutti.replaceTemporaryGear.title=Remplacer un engin temporaire tutti.replaceTemporaryPerson.title=Remplacer un utilisateur temporaire -- 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 f08a90aaa61173b5aa3b512ef973b3b80dff6f7f Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Oct 21 18:35:06 2014 +0200 refs #5997 adapt import - export models --- .../entities/data/SpeciesAbleBatch.java | 63 ---------------------- .../tutti/service/referential/GearModel.java | 24 +++++++++ .../tutti/service/referential/PersonModel.java | 25 +++++++++ .../tutti/service/referential/SpeciesModel.java | 24 +++++++++ .../tutti/service/referential/VesselModel.java | 25 +++++++++ .../tutti/service/PersistenceServiceTest.java | 20 +++---- .../referential/ReferentialExportServiceTest.java | 36 ++++++------- .../referential/ReferentialImportServiceTest.java | 48 ++++++++--------- 8 files changed, 150 insertions(+), 115 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SpeciesAbleBatch.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SpeciesAbleBatch.java deleted file mode 100644 index 9f6fc1e..0000000 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SpeciesAbleBatch.java +++ /dev/null @@ -1,63 +0,0 @@ -package fr.ifremer.tutti.persistence.entities.data; - -import fr.ifremer.tutti.persistence.entities.CommentAware; -import fr.ifremer.tutti.persistence.entities.TuttiEntity; -import fr.ifremer.tutti.persistence.entities.referential.Species; -import java.io.Serializable; -import java.util.List; -import javax.annotation.Generated; - -@Generated(value = "org.nuiton.eugene.java.JavaInterfaceTransformer", date = "Mon Oct 20 10:51:27 CEST 2014") -public interface SpeciesAbleBatch extends TuttiEntity, CommentAware { - - Species getSpecies(); - - void setSpecies(Species species); - - Integer getSampleCategoryId(); - - Serializable getSampleCategoryValue(); - - Float getSampleCategoryWeight(); - - Integer getNumber(); - - boolean isSpeciesToConfirm(); - - Float getSampleCategoryComputedWeight(); - - Integer getComputedNumber(); - - Float getComputedWeight(); - - void setSampleCategoryId(Integer categoryId); - - void setSampleCategoryValue(Serializable categoryValue); - - void setSampleCategoryWeight(Float categoryWeight); - - void setNumber(Integer number); - - void setSpeciesToConfirm(boolean speciesToConfirm); - - void setSampleCategoryComputedWeight(Float sampleCategoryComputedWeight); - - void setComputedNumber(Integer computedNumber); - - void setComputedWeight(Float computedWeight); - - SpeciesAbleBatch getParentBatch(); - - boolean isChildBatchsEmpty(); - - List<? extends SpeciesAbleBatch> getChildBatchs(); - - Float getWeight(); - - void setWeight(Float weight); - - Integer getRankOrder(); - - void setRankOrder(Integer rankOrder); - -} //SpeciesAbleBatch diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java index 1ad905f..b52faef 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java @@ -24,9 +24,11 @@ package fr.ifremer.tutti.service.referential; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Gears; +import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.TuttiCsvUtil; import org.nuiton.csv.Common; +import java.text.ParseException; import java.util.Set; import static org.nuiton.i18n.I18n.n; @@ -44,12 +46,34 @@ public class GearModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Gear> // import definition + newMandatoryColumn(Gear.PROPERTY_ID, new Common.IntegerParserFormatter(null, true) { + + @Override + public Integer parse(String value) throws ParseException { + + // must be an integer + Integer parse = super.parse(value); + + if (parse != null) { + + // must also be negative value + if (parse >= 0) { + throw new IllegalArgumentException("Id of a temporary gear must be negative, but was: " + parse); + } + } + + return parse; + + } + + }); newNotExistingValueColumn(Gear.PROPERTY_NAME, existingGearName, n("tutti.service.referential.import.gear.existingName.error")); newMandatoryColumn(Gear.PROPERTY_LABEL); newMandatoryColumn(Gear.PROPERTY_SCIENTIFIC_GEAR, Common.PRIMITIVE_BOOLEAN); // export definition + newColumnForExport(Gear.PROPERTY_ID); newColumnForExport(Gear.PROPERTY_NAME); newColumnForExport(Gear.PROPERTY_LABEL); newColumnForExport(Gear.PROPERTY_SCIENTIFIC_GEAR, Common.PRIMITIVE_BOOLEAN); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java index 5fc670d..6c9a4e7 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java @@ -25,6 +25,9 @@ package fr.ifremer.tutti.service.referential; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Persons; import fr.ifremer.tutti.service.TuttiCsvUtil; +import org.nuiton.csv.Common; + +import java.text.ParseException; /** * Model to import / export {@link Person} in csv format. @@ -39,11 +42,33 @@ public class PersonModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Per // import definition + newMandatoryColumn(Person.PROPERTY_ID, new Common.IntegerParserFormatter(null, true) { + + @Override + public Integer parse(String value) throws ParseException { + + // must be an integer + Integer parse = super.parse(value); + + if (parse != null) { + + // must also be negative value + if (parse >= 0) { + throw new IllegalArgumentException("Id of a temporary person must be negative, but was: " + parse); + } + } + + return parse; + + } + + }); newMandatoryColumn(Person.PROPERTY_FIRST_NAME); newMandatoryColumn(Person.PROPERTY_LAST_NAME); // export definition + newColumnForExport(Person.PROPERTY_ID); newColumnForExport(Person.PROPERTY_FIRST_NAME); newColumnForExport(Person.PROPERTY_LAST_NAME); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java index 019af0b..8ef2174 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java @@ -25,7 +25,9 @@ package fr.ifremer.tutti.service.referential; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; import fr.ifremer.tutti.service.TuttiCsvUtil; +import org.nuiton.csv.Common; +import java.text.ParseException; import java.util.Set; import static org.nuiton.i18n.I18n.n; @@ -43,10 +45,32 @@ public class SpeciesModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Sp // import definition + newMandatoryColumn(Species.PROPERTY_ID, new Common.IntegerParserFormatter(null, true) { + + @Override + public Integer parse(String value) throws ParseException { + + // must be an integer + Integer parse = super.parse(value); + + if (parse != null) { + + // must also be negative value + if (parse >= 0) { + throw new IllegalArgumentException("Id of a temporary species must be negative, but was: " + parse); + } + } + + return parse; + + } + + }); newNotExistingValueColumn(Species.PROPERTY_NAME, existingSpeciesName, n("tutti.service.referential.import.species.existingName.error")); // export definition + newColumnForExport(Species.PROPERTY_ID); newColumnForExport(Species.PROPERTY_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 94b3a3f..5547b46 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 @@ -22,9 +22,11 @@ package fr.ifremer.tutti.service.referential; * #L% */ +import fr.ifremer.adagio.core.dao.technical.hibernate.TemporaryDataHelper; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.entities.referential.Vessels; import fr.ifremer.tutti.service.TuttiCsvUtil; +import org.apache.commons.lang3.StringUtils; import org.nuiton.csv.Common; /** @@ -40,12 +42,35 @@ public class VesselModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Ves // import definition + newMandatoryColumn("id", Vessel.PROPERTY_REGISTRATION_CODE, new Common.StringValueParser() { + + @Override + public String parse(String value) { + + // must be an integer + String parse = super.parse(value); + + if (StringUtils.isNotBlank(parse)) { + + // must also start with the temporary prefix + if (!parse.startsWith(TemporaryDataHelper.TEMPORARY_NAME_PREFIX)) { + throw new IllegalArgumentException("Code of a temporary vessel must starts with " + TemporaryDataHelper.TEMPORARY_NAME_PREFIX + ", but was: " + parse); + } + } + + return parse; + + } + + }); + newMandatoryColumn(Vessel.PROPERTY_NAME); newMandatoryColumn(Vessel.PROPERTY_INTERNATIONAL_REGISTRATION_CODE); newMandatoryColumn(Vessel.PROPERTY_SCIENTIFIC_VESSEL, Common.PRIMITIVE_BOOLEAN); // export definition + newColumnForExport("id", Vessel.PROPERTY_REGISTRATION_CODE); newColumnForExport(Vessel.PROPERTY_NAME); newColumnForExport(Vessel.PROPERTY_INTERNATIONAL_REGISTRATION_CODE); newColumnForExport(Vessel.PROPERTY_SCIENTIFIC_VESSEL, Common.PRIMITIVE_BOOLEAN); diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/PersistenceServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/PersistenceServiceTest.java index 0915db0..098b3d4 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/PersistenceServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/PersistenceServiceTest.java @@ -91,7 +91,7 @@ public class PersistenceServiceTest { Gear source = service.getGear(-3); Gear target = service.getGear(377); - service.replaceGear(source, target, ); + service.replaceGear(source, target, false); } { @@ -110,7 +110,7 @@ public class PersistenceServiceTest { Gear source = service.getGear(-4); Gear target = service.getGear(378); - service.replaceGear(source, target, ); + service.replaceGear(source, target,false ); } { @@ -152,7 +152,7 @@ public class PersistenceServiceTest { Person source = service.getPerson(-1); Person target = service.getPerson(1); - service.replacePerson(source, target, ); + service.replacePerson(source, target, false); } { service = dbResource.getServiceContext().getService(PersistenceService.class); @@ -169,7 +169,7 @@ public class PersistenceServiceTest { Person source = service.getPerson(-2); Person target = service.getPerson(2); - service.replacePerson(source, target, ); + service.replacePerson(source, target, false); } { Cruise cruise = service.getCruise("0"); @@ -184,7 +184,7 @@ public class PersistenceServiceTest { Person source = service.getPerson(-3); Person target = service.getPerson(3); - service.replacePerson(source, target, ); + service.replacePerson(source, target, false); } { Cruise cruise = service.getCruise("0"); @@ -225,7 +225,7 @@ public class PersistenceServiceTest { Species source = service.getSpeciesByReferenceTaxonId(-1); Species target = service.getSpeciesByReferenceTaxonId(1); - service.replaceSpecies(source, target, ); + service.replaceSpecies(source, target, false); } { @@ -246,7 +246,7 @@ public class PersistenceServiceTest { Species source = service.getSpeciesByReferenceTaxonId(-2); Species target = service.getSpeciesByReferenceTaxonId(2); - service.replaceSpecies(source, target, ); + service.replaceSpecies(source, target,false ); } { @@ -266,7 +266,7 @@ public class PersistenceServiceTest { Species source = service.getSpeciesByReferenceTaxonId(-3); Species target = service.getSpeciesByReferenceTaxonId(3); - service.replaceSpecies(source, target, ); + service.replaceSpecies(source, target, false); } { @@ -307,7 +307,7 @@ public class PersistenceServiceTest { Vessel source = service.getVessel("#TEMP¿International registration code S3"); Vessel target = service.getVessel("267206"); - service.replaceVessel(source, target, ); + service.replaceVessel(source, target, false); } { Cruise cruise = service.getCruise("0"); @@ -322,7 +322,7 @@ public class PersistenceServiceTest { Vessel source = service.getVessel("#TEMP¿International registration code S4"); Vessel target = service.getVessel("278970"); - service.replaceVessel(source, target, ); + service.replaceVessel(source, target, false); } { Cruise cruise = service.getCruise("0"); diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java index 8c5f62e..c708391 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java @@ -46,30 +46,30 @@ public class ReferentialExportServiceTest { protected File dataDirectory; private static final String SPECIES_FILE_CONTENT = - "name\n" + - "Temporary Species name 1\n" + - "Temporary Species name 2\n" + - "Temporary Species name 3"; + "id;name\n" + + ";Temporary Species name 1\n" + + ";Temporary Species name 2\n" + + ";Temporary Species name 3"; private static final String GEAR_FILE_CONTENT = - "name;label;scientificGear\n" + - "Gear fishing name 1;Gear fishing label 1;N\n" + - "Gear fishing name 2;Gear fishing label 2;N\n" + - "Gear scientific name 3;Gear scientific label 3;Y\n" + - "Gear scientific name 4;Gear scientific label 4;Y"; + "id;name;label;scientificGear\n" + + ";Gear fishing name 1;Gear fishing label 1;N\n" + + ";Gear fishing name 2;Gear fishing label 2;N\n" + + ";Gear scientific name 3;Gear scientific label 3;Y\n" + + ";Gear scientific name 4;Gear scientific label 4;Y"; private static final String PERSON_FILE_CONTENT = - "firstName;lastName\n" + - "First name 1;Last name 1\n" + - "First name 2;Last name 2\n" + - "First name 3;Last name 3"; + "id;firstName;lastName\n" + + ";First name 1;Last name 1\n" + + ";First name 2;Last name 2\n" + + ";First name 3;Last name 3"; private static final String VESSEL_FILE_CONTENT = - "name;internationalRegistrationCode;scientificVessel\n" + - "Temporary fishing vessel name 1;International registration code F1;N\n" + - "Temporary fishing vessel name 2;International registration code F2;N\n" + - "Temporary scientific vessel name 3;International registration code S3;Y\n" + - "Temporary scientific vessel name 4;International registration code S4;Y"; + "id;name;internationalRegistrationCode;scientificVessel\n" + + ";Temporary fishing vessel name 1;International registration code F1;N\n" + + ";Temporary fishing vessel name 2;International registration code F2;N\n" + + ";Temporary scientific vessel name 3;International registration code S3;Y\n" + + ";Temporary scientific vessel name 4;International registration code S4;Y"; protected ReferentialImportService service; 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 3a840b3..a4fcd68 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 @@ -52,38 +52,38 @@ public class ReferentialImportServiceTest { protected File dataDirectory; private static final String SPECIES_FILE_CONTENT = - "name\n" + - "Temporary Species name 1\n" + - "Temporary Species name 2\n" + - "Temporary Species name 3"; + "id;name\n" + + ";Temporary Species name 1\n" + + ";Temporary Species name 2\n" + + ";Temporary Species name 3"; private static final String GEAR_FILE_CONTENT = - "name;label;scientificGear\n" + - "Gear fishing name 1;Gear fishing label 1;N\n" + - "Gear fishing name 2;Gear fishing label 2;N\n" + - "Gear scientific name 3;Gear scientific label 3;Y\n" + - "Gear scientific name 4;Gear scientific label 4;Y"; + "id;name;label;scientificGear\n" + + ";Gear fishing name 1;Gear fishing label 1;N\n" + + ";Gear fishing name 2;Gear fishing label 2;N\n" + + ";Gear scientific name 3;Gear scientific label 3;Y\n" + + ";Gear scientific name 4;Gear scientific label 4;Y"; private static final String PERSON_FILE_CONTENT = - "firstName;lastName\n" + - "First name 1;Last name 1\n" + - "First name 2;Last name 2\n" + - "First name 3;Last name 3"; + "id;firstName;lastName\n" + + ";First name 1;Last name 1\n" + + ";First name 2;Last name 2\n" + + ";First name 3;Last name 3"; private static final String VESSEL_FILE_CONTENT = - "name;internationalRegistrationCode;scientificVessel\n" + - "Temporary fishing vessel name 1;International registration code F1;N\n" + - "Temporary fishing vessel name 2;International registration code F2;N\n" + - "Temporary scientific vessel name 3;International registration code S3;Y\n" + - "Temporary scientific vessel name 4;International registration code S4;Y"; + "id;name;internationalRegistrationCode;scientificVessel\n" + + ";Temporary fishing vessel name 1;International registration code F1;N\n" + + ";Temporary fishing vessel name 2;International registration code F2;N\n" + + ";Temporary scientific vessel name 3;International registration code S3;Y\n" + + ";Temporary scientific vessel name 4;International registration code S4;Y"; private static final String DUPLICATE_VESSEL_FILE_CONTENT = - "name;internationalRegistrationCode;scientificVessel\n" + - "Temporary fishing vessel name 1;International registration code F1;N\n" + - "Temporary fishing vessel name 1;International registration code F1;N\n" + - "Temporary fishing vessel name 2;International registration code F2;N\n" + - "Temporary scientific vessel name 3;International registration code S3;Y\n" + - "Temporary scientific vessel name 4;International registration code S4;Y"; + "id;name;internationalRegistrationCode;scientificVessel\n" + + ";Temporary fishing vessel name 1;International registration code F1;N\n" + + ";Temporary fishing vessel name 1;International registration code F1;N\n" + + ";Temporary fishing vessel name 2;International registration code F2;N\n" + + ";Temporary scientific vessel name 3;International registration code S3;Y\n" + + ";Temporary scientific vessel name 4;International registration code S4;Y"; protected ReferentialImportService service; -- 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 cb2c5986bb53108357b1ae0e78e34fa622af9757 Author: Kevin Morin <morin@codelutin.com> Date: Thu Oct 23 12:13:31 2014 +0200 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires add export existing data buttons (and replace button rows by combobox) --- .../filtered-resources/tutti-help-fr.properties | 29 +----- .../action/ExportExistingTemporaryGearAction.java | 1 + .../ExportExistingTemporaryPersonAction.java | 1 + .../ExportExistingTemporarySpeciesAction.java | 1 + .../ExportExistingTemporaryVesselAction.java | 1 + .../ui/swing/action/ImportTemporaryGearAction.java | 1 + .../swing/action/ImportTemporaryPersonAction.java | 1 + .../swing/action/ImportTemporarySpeciesAction.java | 1 + .../swing/action/ImportTemporaryVesselAction.java | 1 + .../action/OpenReplaceTemporaryGearUIAction.java | 5 + .../action/OpenReplaceTemporaryPersonUIAction.java | 6 +- .../OpenReplaceTemporarySpeciesUIAction.java | 5 + .../action/OpenReplaceTemporaryVesselUIAction.java | 5 + .../swing/content/home/SelectCruiseUIHandler.java | 11 +-- .../referential/ManageTemporaryReferentialUI.css | 52 ++++++++++ .../referential/ManageTemporaryReferentialUI.jaxx | 54 +++++++---- .../ManageTemporaryReferentialUIHandler.java | 108 ++++++++++++++++++++- .../ifremer/tutti/ui/swing/util/TuttiUIUtil.java | 13 ++- .../resources/i18n/tutti-ui-swing_en_GB.properties | 13 +++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 14 ++- 20 files changed, 266 insertions(+), 57 deletions(-) diff --git a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties index 27f7d63..960983d 100644 --- a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties +++ b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties @@ -1,28 +1,5 @@ -### -# #%L -# Tutti :: UI -# $Id:$ -# $HeadURL:$ -# %% -# Copyright (C) 2012 - 2014 Ifremer -# %% -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU 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 General Public -# License along with this program. If not, see -# <http://www.gnu.org/licenses/gpl-3.0.html>. -# #L% -### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Tue Sep 02 15:54:43 CEST 2014 +#Thu Oct 23 12:12:24 CEST 2014 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -357,6 +334,10 @@ tutti.main.menu.action.updateReport.help=menu.html\#menu_fichier tutti.main.menu.action.validateCatches.help=menu.html\#menu_action tutti.main.status.ichtyometer.help=menu.html\#status tutti.main.status.validation.help=menu.html\#status +tutti.manageTemporaryReferential.action.exportExistingTemporaryGear.help= +tutti.manageTemporaryReferential.action.exportExistingTemporaryPerson.help= +tutti.manageTemporaryReferential.action.exportExistingTemporarySpecies.help= +tutti.manageTemporaryReferential.action.exportExistingTemporaryVessel.help= tutti.manageTemporaryReferential.action.exportTemporaryGearExample.help=menu.html\#menu_administration_referentiel tutti.manageTemporaryReferential.action.exportTemporaryPersonExample.help=menu.html\#menu_administration_referentiel tutti.manageTemporaryReferential.action.exportTemporarySpeciesExample.help=menu.html\#menu_administration_referentiel diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java index 3f03f94..c29a55e 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java @@ -89,6 +89,7 @@ public class ExportExistingTemporaryGearAction extends AbstractTuttiAction<Tutti ReferentialExportService service = getContext().getTuttiReferentialExportService(); service.exportExistingTemporaryGear(file); + getHandler().resetExportGearsAction(); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java index 40ff64f..c7b5419 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java @@ -90,6 +90,7 @@ public class ExportExistingTemporaryPersonAction extends AbstractTuttiAction<Tut ReferentialExportService service = getContext().getTuttiReferentialExportService(); service.exportExistingTemporaryPerson(file); + getHandler().resetExportPersonAction(); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java index aed0f77..3a8fa82 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java @@ -89,6 +89,7 @@ public class ExportExistingTemporarySpeciesAction extends AbstractTuttiAction<Tu ReferentialExportService service = getContext().getTuttiReferentialExportService(); service.exportExistingTemporarySpecies(file); + getHandler().resetExportSpeciesAction(); } @Override 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 267d803..60acd90 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 @@ -89,6 +89,7 @@ public class ExportExistingTemporaryVesselAction extends AbstractTuttiAction<Tut ReferentialExportService service = getContext().getTuttiReferentialExportService(); service.exportExistingTemporaryVessel(file); + getHandler().resetExportVesselsAction(); } @Override 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 775c0ca..ffb2617 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 @@ -90,6 +90,7 @@ public class ImportTemporaryGearAction extends AbstractTuttiAction<TuttiUIContex // reset ui cache getDataContext().resetGears(); + getHandler().resetExportGearsAction(); } @Override 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 3ed7033..e04b90e 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 @@ -92,6 +92,7 @@ public class ImportTemporaryPersonAction extends AbstractTuttiAction<TuttiUICont // reset ui cache getDataContext().resetPersons(); + getHandler().resetExportPersonAction(); } @Override 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 a3d9107..f46de21 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 @@ -91,6 +91,7 @@ public class ImportTemporarySpeciesAction extends AbstractTuttiAction<TuttiUICon // reset ui cache getDataContext().resetSpecies(); + getHandler().resetExportSpeciesAction(); } @Override 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 1c9aac0..1752611 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 @@ -91,6 +91,7 @@ public class ImportTemporaryVesselAction extends AbstractTuttiAction<TuttiUICont // reset ui cache getDataContext().resetVessels(); + getHandler().resetExportVesselsAction(); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporaryGearUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporaryGearUIAction.java index 4a6f2d9..f55b66d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporaryGearUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporaryGearUIAction.java @@ -70,4 +70,9 @@ public class OpenReplaceTemporaryGearUIAction extends AbstractOpenReplaceTempora return targetList; } + @Override + public void doAction() throws Exception { + super.doAction(); + getHandler().resetExportGearsAction(); + } } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporaryPersonUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporaryPersonUIAction.java index b2f0a20..f594ed4 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporaryPersonUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporaryPersonUIAction.java @@ -69,5 +69,9 @@ public class OpenReplaceTemporaryPersonUIAction extends AbstractOpenReplaceTempo return targetList; } - + @Override + public void doAction() throws Exception { + super.doAction(); + getHandler().resetExportPersonAction(); + } } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporarySpeciesUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporarySpeciesUIAction.java index 0215077..ee8aa6f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporarySpeciesUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporarySpeciesUIAction.java @@ -69,4 +69,9 @@ public class OpenReplaceTemporarySpeciesUIAction extends AbstractOpenReplaceTemp return targetList; } + @Override + public void doAction() throws Exception { + super.doAction(); + getHandler().resetExportSpeciesAction(); + } } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporaryVesselUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporaryVesselUIAction.java index 8d87ba7..b6e75af 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporaryVesselUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenReplaceTemporaryVesselUIAction.java @@ -70,4 +70,9 @@ public class OpenReplaceTemporaryVesselUIAction extends AbstractOpenReplaceTempo return targetList; } + @Override + public void doAction() throws Exception { + super.doAction(); + getHandler().resetExportVesselsAction(); + } } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java index 1545c9d..65c8bcc 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java @@ -28,6 +28,7 @@ import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections4.CollectionUtils; @@ -58,14 +59,6 @@ public class SelectCruiseUIHandler extends AbstractTuttiUIHandler<SelectCruiseUI private static final Log log = LogFactory.getLog(SelectCruiseUIHandler.class); - public static final MouseListener GRAB_FOCUS_ON_ENTER_LISTENER = new MouseAdapter() { - @Override - public void mouseEntered(MouseEvent e) { - JComponent source = (JComponent) e.getSource(); - source.grabFocus(); - } - }; - @Override public SwingValidator<SelectCruiseUIModel> getValidator() { return ui.getValidator(); @@ -350,6 +343,6 @@ public class SelectCruiseUIHandler extends AbstractTuttiUIHandler<SelectCruiseUI protected void initActionComboBox(JComboBox combo) { combo.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); - combo.addMouseListener(GRAB_FOCUS_ON_ENTER_LISTENER); + combo.addMouseListener(TuttiUIUtil.GRAB_FOCUS_ON_ENTER_LISTENER); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.css index 02691e9..e340a55 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.css @@ -35,6 +35,11 @@ icon: {SwingUtil.createImageIcon("action-species.gif")}; } +#speciesActionComboBox { + model: {SwingUtil.newComboModel(exportSpeciesExampleButton, exportExistingSpeciesButton, importSpeciesButton, replaceSpeciesButton)}; + renderer: {new ActionListCellRenderer()}; +} + #exportSpeciesExampleButton { actionIcon: export; text: "tutti.manageTemporaryReferential.action.exportTemporarySpeciesExample"; @@ -43,6 +48,14 @@ _help: {"tutti.manageTemporaryReferential.action.exportTemporarySpeciesExample.help"}; } +#exportExistingSpeciesButton { + actionIcon: export; + text: "tutti.manageTemporaryReferential.action.exportExistingTemporarySpecies"; + _applicationAction: {fr.ifremer.tutti.ui.swing.action.ExportExistingTemporarySpeciesAction.class}; + toolTipText: "tutti.manageTemporaryReferential.action.exportExistingTemporarySpecies.tip"; + _help: {"tutti.manageTemporaryReferential.action.exportExistingTemporarySpecies.help"}; +} + #importSpeciesButton { actionIcon: import; text: "tutti.manageTemporaryReferential.action.importTemporarySpecies"; @@ -65,6 +78,11 @@ actionIcon: vessel; } +#vesselActionComboBox { + model: {SwingUtil.newComboModel(exportVesselExampleButton, exportExistingVesselButton, importVesselButton, replaceVesselButton)}; + renderer: {new ActionListCellRenderer()}; +} + #exportVesselExampleButton { actionIcon: export; text: "tutti.manageTemporaryReferential.action.exportTemporaryVesselExample"; @@ -73,6 +91,14 @@ _help: {"tutti.manageTemporaryReferential.action.exportTemporaryVesselExample.help"}; } +#exportExistingVesselButton { + actionIcon: export; + text: "tutti.manageTemporaryReferential.action.exportExistingTemporaryVessel"; + _applicationAction: {fr.ifremer.tutti.ui.swing.action.ExportExistingTemporaryVesselAction.class}; + toolTipText: "tutti.manageTemporaryReferential.action.exportExistingTemporaryVessel.tip"; + _help: {"tutti.manageTemporaryReferential.action.exportExistingTemporaryVessel.help"}; +} + #importVesselButton { actionIcon: import; text: "tutti.manageTemporaryReferential.action.importTemporaryVessel"; @@ -95,6 +121,11 @@ actionIcon: gear; } +#gearActionComboBox { + model: {SwingUtil.newComboModel(exportGearExampleButton, exportExistingGearButton, importGearButton, replaceGearButton)}; + renderer: {new ActionListCellRenderer()}; +} + #exportGearExampleButton { actionIcon: export; text: "tutti.manageTemporaryReferential.action.exportTemporaryGearExample"; @@ -103,6 +134,14 @@ _help: {"tutti.manageTemporaryReferential.action.exportTemporaryGearExample.help"}; } +#exportExistingGearButton { + actionIcon: export; + text: "tutti.manageTemporaryReferential.action.exportExistingTemporaryGear"; + _applicationAction: {fr.ifremer.tutti.ui.swing.action.ExportExistingTemporaryGearAction.class}; + toolTipText: "tutti.manageTemporaryReferential.action.exportExistingTemporaryGear.tip"; + _help: {"tutti.manageTemporaryReferential.action.exportExistingTemporaryGear.help"}; +} + #importGearButton { actionIcon: import; text: "tutti.manageTemporaryReferential.action.importTemporaryGear"; @@ -125,6 +164,19 @@ actionIcon: person; } +#personActionComboBox { + model: {SwingUtil.newComboModel(exportPersonExampleButton, exportExistingPersonButton, importPersonButton, replacePersonButton)}; + renderer: {new ActionListCellRenderer()}; +} + +#exportExistingPersonButton { + actionIcon: export; + text: "tutti.manageTemporaryReferential.action.exportExistingTemporaryPerson"; + _applicationAction: {fr.ifremer.tutti.ui.swing.action.ExportExistingTemporaryPersonAction.class}; + toolTipText: "tutti.manageTemporaryReferential.action.exportExistingTemporaryPerson.tip"; + _help: {"tutti.manageTemporaryReferential.action.exportExistingTemporaryPerson.help"}; +} + #exportPersonExampleButton { actionIcon: export; text: "tutti.manageTemporaryReferential.action.exportTemporaryPersonExample"; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.jaxx index 4b1bfbb..d4a1164 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.jaxx @@ -29,6 +29,7 @@ fr.ifremer.tutti.ui.swing.TuttiUIContext fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil + org.nuiton.jaxx.application.swing.util.ActionListCellRenderer static org.nuiton.i18n.I18n.t </import> @@ -46,17 +47,33 @@ <TuttiHelpBroker id='broker' constructorParams='"tutti.manageTemporaryReferential.help"'/> + <JButton id='exportSpeciesExampleButton'/> + <JButton id='exportExistingSpeciesButton'/> + <JButton id='importSpeciesButton'/> + <JButton id='replaceSpeciesButton'/> + <JButton id='exportVesselExampleButton'/> + <JButton id='exportExistingVesselButton'/> + <JButton id='importVesselButton'/> + <JButton id='replaceVesselButton'/> + <JButton id='exportGearExampleButton'/> + <JButton id='exportExistingGearButton'/> + <JButton id='importGearButton'/> + <JButton id='replaceGearButton'/> + <JButton id='exportPersonExampleButton'/> + <JButton id='exportExistingPersonButton'/> + <JButton id='importPersonButton'/> + <JButton id='replacePersonButton'/> + <Table constraints='BorderLayout.CENTER'> <row> <cell> <JLabel id='speciesLabel'/> </cell> <cell> - <JPanel layout='{new GridLayout(1,0)}'> - <JButton id='exportSpeciesExampleButton'/> - <JButton id='importSpeciesButton'/> - <JButton id='replaceSpeciesButton'/> - </JPanel> + <JComboBox id='speciesActionComboBox' + onMouseEntered='speciesActionComboBox.showPopup()' + onMouseClicked='handler.startExportSpeciesAction(event)' + onActionPerformed='handler.startExportSpeciesAction(event)'/> </cell> </row> @@ -71,11 +88,10 @@ <JLabel id='vesselLabel'/> </cell> <cell> - <JPanel layout='{new GridLayout(1,0)}'> - <JButton id='exportVesselExampleButton'/> - <JButton id='importVesselButton'/> - <JButton id='replaceVesselButton'/> - </JPanel> + <JComboBox id='vesselActionComboBox' + onMouseEntered='vesselActionComboBox.showPopup()' + onMouseClicked='handler.startExportVesselsAction(event)' + onActionPerformed='handler.startExportVesselsAction(event)'/> </cell> </row> @@ -90,11 +106,10 @@ <JLabel id='gearLabel'/> </cell> <cell> - <JPanel layout='{new GridLayout(1,0)}'> - <JButton id='exportGearExampleButton'/> - <JButton id='importGearButton'/> - <JButton id='replaceGearButton'/> - </JPanel> + <JComboBox id='gearActionComboBox' + onMouseEntered='gearActionComboBox.showPopup()' + onMouseClicked='handler.startExportGearsAction(event)' + onActionPerformed='handler.startExportGearsAction(event)'/> </cell> </row> @@ -109,11 +124,10 @@ <JLabel id='personLabel'/> </cell> <cell> - <JPanel layout='{new GridLayout(1,0)}'> - <JButton id='exportPersonExampleButton'/> - <JButton id='importPersonButton'/> - <JButton id='replacePersonButton'/> - </JPanel> + <JComboBox id='personActionComboBox' + onMouseEntered='personActionComboBox.showPopup()' + onMouseClicked='handler.startExportPersonsAction(event)' + onActionPerformed='handler.startExportPersonsAction(event)'/> </cell> </row> 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 db7edb9..d25f10c 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 @@ -24,11 +24,14 @@ package fr.ifremer.tutti.ui.swing.content.referential; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.JComponent; +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.MouseEvent; /** * @author tchemit <chemit@codelutin.com> @@ -55,6 +58,11 @@ public class ManageTemporaryReferentialUIHandler extends AbstractTuttiUIHandler< public void afterInit(ManageTemporaryReferentialUI ui) { initUI(ui); + + initActionComboBox(ui.getSpeciesActionComboBox()); + initActionComboBox(ui.getVesselActionComboBox()); + initActionComboBox(ui.getGearActionComboBox()); + initActionComboBox(ui.getPersonActionComboBox()); } @Override @@ -73,4 +81,102 @@ public class ManageTemporaryReferentialUIHandler extends AbstractTuttiUIHandler< public SwingValidator<TuttiUIContext> getValidator() { return null; } + + + protected boolean resetExportSpeciesAction; + protected boolean resetExportVesselsAction; + protected boolean resetExportGearsAction; + protected boolean resetExportPersonsAction; + + public void resetExportSpeciesAction() { + resetExportSpeciesAction = true; + try { + ui.getSpeciesActionComboBox().setSelectedIndex(0); + } finally { + resetExportSpeciesAction = false; + } + } + + public void resetExportVesselsAction() { + resetExportVesselsAction = true; + try { + ui.getVesselActionComboBox().setSelectedIndex(0); + } finally { + resetExportVesselsAction = false; + } + } + + public void resetExportGearsAction() { + resetExportGearsAction = true; + try { + ui.getGearActionComboBox().setSelectedIndex(0); + } finally { + resetExportGearsAction = false; + } + } + + public void resetExportPersonAction() { + resetExportSpeciesAction = true; + try { + ui.getPersonActionComboBox().setSelectedIndex(0); + } finally { + resetExportPersonsAction = false; + } + } + + public void startExportSpeciesAction(MouseEvent event) { + startComboFirstAction(event); + } + + public void startExportSpeciesAction(ActionEvent event) { + startEditAction(!resetExportSpeciesAction, event); + } + + public void startExportVesselsAction(MouseEvent event) { + startComboFirstAction(event); + } + + public void startExportVesselsAction(ActionEvent event) { + startEditAction(!resetExportVesselsAction, event); + } + + public void startExportGearsAction(MouseEvent event) { + startComboFirstAction(event); + } + + public void startExportGearsAction(ActionEvent event) { + startEditAction(!resetExportGearsAction, event); + } + + public void startExportPersonsAction(MouseEvent event) { + startComboFirstAction(event); + } + + public void startExportPersonsAction(ActionEvent event) { + startEditAction(!resetExportPersonsAction, event); + } + + protected void startComboFirstAction(MouseEvent event) { + JComboBox combo = (JComboBox) event.getSource(); + getContext().getActionEngine().runAction((AbstractButton) combo.getItemAt(0)); + } + + protected void startEditAction(boolean canEdit, ActionEvent event) { + if (canEdit) { + JComboBox existingCombo = (JComboBox) event.getSource(); + JButton selectedAction = (JButton) existingCombo.getSelectedItem(); + // hide popup before performing the action, otherwise, if the action + // opens a popup, the user must click a first time to hide the combobox + // popup to then interact with the popup opened by the action + // (see http://forge.codelutin.com/issues/2032) + existingCombo.setSelectedIndex(0); + existingCombo.hidePopup(); + getContext().getActionEngine().runAction(selectedAction); + } + } + + protected void initActionComboBox(JComboBox combo) { + combo.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); + combo.addMouseListener(TuttiUIUtil.GRAB_FOCUS_ON_ENTER_LISTENER); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java index 503f2c8..4f2b2b5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java @@ -34,7 +34,10 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.ImageIcon; +import javax.swing.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; @@ -57,6 +60,14 @@ public final class TuttiUIUtil extends ApplicationUIUtil { // never instanciate util class } + public static final MouseListener GRAB_FOCUS_ON_ENTER_LISTENER = new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + JComponent source = (JComponent) e.getSource(); + source.grabFocus(); + } + }; + public static TuttiUIContext getApplicationContext(JAXXObject ui) { return (TuttiUIContext) ApplicationUIUtil.getApplicationContext(ui); } 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 2133567..9bb9f24 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 @@ -1430,6 +1430,14 @@ tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export= tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export.success= tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import= tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import.success= +tutti.manageTemporaryReferential.action.exportExistingTemporaryGear= +tutti.manageTemporaryReferential.action.exportExistingTemporaryGear.tip= +tutti.manageTemporaryReferential.action.exportExistingTemporaryPerson= +tutti.manageTemporaryReferential.action.exportExistingTemporaryPerson.tip= +tutti.manageTemporaryReferential.action.exportExistingTemporarySpecies= +tutti.manageTemporaryReferential.action.exportExistingTemporarySpecies.tip= +tutti.manageTemporaryReferential.action.exportExistingTemporaryVessel= +tutti.manageTemporaryReferential.action.exportExistingTemporaryVessel.tip= tutti.manageTemporaryReferential.action.exportTemporaryGearExample= tutti.manageTemporaryReferential.action.exportTemporaryGearExample.tip= tutti.manageTemporaryReferential.action.exportTemporaryPersonExample= @@ -1467,6 +1475,10 @@ tutti.manageTemporaryReferential.passwordDialog.error.title= tutti.manageTemporaryReferential.passwordDialog.message= tutti.manageTemporaryReferential.passwordDialog.title= tutti.manageTemporaryReferential.title= +tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryGearFile= +tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryPersonFile= +tutti.manageTemporaryReferential.title.choose.exportExistingTemporarySpeciesFile= +tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryVesselFile= tutti.manageTemporaryReferential.title.choose.exportTemporaryGearExampleFile= tutti.manageTemporaryReferential.title.choose.exportTemporaryPersonExampleFile= tutti.manageTemporaryReferential.title.choose.exportTemporarySpeciesExampleFile= @@ -1530,6 +1542,7 @@ tutti.reinstallDb.step.backupDb= tutti.reinstallDb.step.closeDb= tutti.reinstallDb.step.reloadApplication= tutti.replaceTemporary.done= +tutti.replaceTemporaryAndDelete.done= tutti.replaceTemporaryGear.done= tutti.replaceTemporaryGear.title= tutti.replaceTemporaryPerson.done= 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 fb8f70d..ae28f8f 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 @@ -1382,6 +1382,14 @@ tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export=Expor 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.success=Référentiel temporaire de navires importé depuis le fichier %s +tutti.manageTemporaryReferential.action.exportExistingTemporaryGear= +tutti.manageTemporaryReferential.action.exportExistingTemporaryGear.tip= +tutti.manageTemporaryReferential.action.exportExistingTemporaryPerson= +tutti.manageTemporaryReferential.action.exportExistingTemporaryPerson.tip= +tutti.manageTemporaryReferential.action.exportExistingTemporarySpecies= +tutti.manageTemporaryReferential.action.exportExistingTemporarySpecies.tip= +tutti.manageTemporaryReferential.action.exportExistingTemporaryVessel= +tutti.manageTemporaryReferential.action.exportExistingTemporaryVessel.tip= tutti.manageTemporaryReferential.action.exportTemporaryGearExample=Exporter tutti.manageTemporaryReferential.action.exportTemporaryGearExample.tip=Exporter un exemple de référentiel Engin tutti.manageTemporaryReferential.action.exportTemporaryPersonExample=Exporter @@ -1419,6 +1427,10 @@ tutti.manageTemporaryReferential.passwordDialog.error.title=Mot de passe incorre tutti.manageTemporaryReferential.passwordDialog.message=Vous souhaitez entrer dans une partie sensible de l'application tutti.manageTemporaryReferential.passwordDialog.title=Zone sensible tutti.manageTemporaryReferential.title=importer des référentiels temporaires +tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryGearFile= +tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryPersonFile= +tutti.manageTemporaryReferential.title.choose.exportExistingTemporarySpeciesFile= +tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryVesselFile= tutti.manageTemporaryReferential.title.choose.exportTemporaryGearExampleFile=Exporter un exemple de référentiel Engin tutti.manageTemporaryReferential.title.choose.exportTemporaryPersonExampleFile=Exporter un exemple de référentiel Personne tutti.manageTemporaryReferential.title.choose.exportTemporarySpeciesExampleFile=Exporter un exemple de référentiel Espèce @@ -1461,8 +1473,8 @@ tutti.reimport.step.reloadApplication=Redémarrage de l'application... tutti.reinstallDb.step.backupDb=Sauvegarde de la base dans l'archive %s tutti.reinstallDb.step.closeDb=Fermeture de la base <strong>%s</strong> tutti.reinstallDb.step.reloadApplication=Redémarrage de l'application... -tutti.replaceTemporaryAndDelete.done=<html><body>Le référentiel temporaire de type %s <strong>%s</strong> a été remplacée par <strong>%s</strong> puis supprimé. tutti.replaceTemporary.done=<html><body>Le référentiel temporaire de type %s <strong>%s</strong> a été remplacée par <strong>%s</strong> +tutti.replaceTemporaryAndDelete.done=<html><body>Le référentiel temporaire de type %s <strong>%s</strong> a été remplacée par <strong>%s</strong> puis supprimé. tutti.replaceTemporaryGear.title=Remplacer un engin temporaire tutti.replaceTemporaryPerson.title=Remplacer un utilisateur temporaire tutti.replaceTemporaryReferential.action.cancel=Annuler -- 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 8a34ee5e8816dcfbe8a7a470bc1c8f28338fa788 Author: Kevin Morin <morin@codelutin.com> Date: Thu Oct 23 18:13:22 2014 +0200 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires --- .../resources/i18n/tutti-ui-swing_fr_FR.properties | 32 +++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) 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 ae28f8f..b3b5bc0 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 @@ -1382,21 +1382,21 @@ tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export=Expor 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.success=Référentiel temporaire de navires importé depuis le fichier %s -tutti.manageTemporaryReferential.action.exportExistingTemporaryGear= -tutti.manageTemporaryReferential.action.exportExistingTemporaryGear.tip= -tutti.manageTemporaryReferential.action.exportExistingTemporaryPerson= -tutti.manageTemporaryReferential.action.exportExistingTemporaryPerson.tip= -tutti.manageTemporaryReferential.action.exportExistingTemporarySpecies= -tutti.manageTemporaryReferential.action.exportExistingTemporarySpecies.tip= -tutti.manageTemporaryReferential.action.exportExistingTemporaryVessel= -tutti.manageTemporaryReferential.action.exportExistingTemporaryVessel.tip= -tutti.manageTemporaryReferential.action.exportTemporaryGearExample=Exporter +tutti.manageTemporaryReferential.action.exportExistingTemporaryGear=Exporter l'existant +tutti.manageTemporaryReferential.action.exportExistingTemporaryGear.tip=Exporter le référentiel Engin existant +tutti.manageTemporaryReferential.action.exportExistingTemporaryPerson=Exporter l'existant +tutti.manageTemporaryReferential.action.exportExistingTemporaryPerson.tip=Exporter le référentiel Personne existant +tutti.manageTemporaryReferential.action.exportExistingTemporarySpecies=Exporter l'existant +tutti.manageTemporaryReferential.action.exportExistingTemporarySpecies.tip=Exporter le référentiel Espèces existant +tutti.manageTemporaryReferential.action.exportExistingTemporaryVessel=Exporter l'existant +tutti.manageTemporaryReferential.action.exportExistingTemporaryVessel.tip=Exporter le référentiel Navire existant +tutti.manageTemporaryReferential.action.exportTemporaryGearExample=Exporter un exemple tutti.manageTemporaryReferential.action.exportTemporaryGearExample.tip=Exporter un exemple de référentiel Engin -tutti.manageTemporaryReferential.action.exportTemporaryPersonExample=Exporter +tutti.manageTemporaryReferential.action.exportTemporaryPersonExample=Exporter un exemple tutti.manageTemporaryReferential.action.exportTemporaryPersonExample.tip=Exporter un exemple de référentiel Personne -tutti.manageTemporaryReferential.action.exportTemporarySpeciesExample=Exporter +tutti.manageTemporaryReferential.action.exportTemporarySpeciesExample=Exporter un exemple tutti.manageTemporaryReferential.action.exportTemporarySpeciesExample.tip=Exporter un exemple de référentiel Espèces -tutti.manageTemporaryReferential.action.exportTemporaryVesselExample=Exporter +tutti.manageTemporaryReferential.action.exportTemporaryVesselExample=Exporter un exemple tutti.manageTemporaryReferential.action.exportTemporaryVesselExample.tip=Exporter un exemple de référentiel Navire tutti.manageTemporaryReferential.action.importTemporaryGear=Importer tutti.manageTemporaryReferential.action.importTemporaryGear.tip=Importer un référentiel temporaire d'engins @@ -1427,10 +1427,10 @@ tutti.manageTemporaryReferential.passwordDialog.error.title=Mot de passe incorre tutti.manageTemporaryReferential.passwordDialog.message=Vous souhaitez entrer dans une partie sensible de l'application tutti.manageTemporaryReferential.passwordDialog.title=Zone sensible tutti.manageTemporaryReferential.title=importer des référentiels temporaires -tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryGearFile= -tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryPersonFile= -tutti.manageTemporaryReferential.title.choose.exportExistingTemporarySpeciesFile= -tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryVesselFile= +tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryGearFile=Exporter le référentiel Engin existant +tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryPersonFile=Exporter le référentiel Personne existant +tutti.manageTemporaryReferential.title.choose.exportExistingTemporarySpeciesFile=Exporter le référentiel Espèce existant +tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryVesselFile=Exporter le référentiel Navire existant tutti.manageTemporaryReferential.title.choose.exportTemporaryGearExampleFile=Exporter un exemple de référentiel Engin tutti.manageTemporaryReferential.title.choose.exportTemporaryPersonExampleFile=Exporter un exemple de référentiel Personne tutti.manageTemporaryReferential.title.choose.exportTemporarySpeciesExampleFile=Exporter un exemple de référentiel Espèce -- 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 10f59f14423b8eb8395f436e79049253aef373dd Author: Kevin Morin <morin@codelutin.com> Date: Fri Oct 24 17:38:58 2014 +0200 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires --- .../tutti/persistence/entities/TuttiEntity.java | 4 ++ .../persistence/entities/TuttiEntityBean.java | 5 +++ .../service/ReferentialPersistenceServiceImpl.java | 30 ++++++++++---- .../tutti/service/referential/GearModel.java | 5 ++- .../tutti/service/referential/PersonModel.java | 6 ++- .../referential/ReferentialImportService.java | 48 ++++++++++++++++++++-- .../tutti/service/referential/SpeciesModel.java | 9 +++- .../tutti/service/referential/VesselModel.java | 4 +- .../resources/i18n/tutti-service_en_GB.properties | 2 + .../resources/i18n/tutti-service_fr_FR.properties | 2 + .../referential/ReferentialImportServiceTest.java | 24 +++++++++++ .../action/ExportExistingTemporaryGearAction.java | 4 +- .../ExportExistingTemporaryPersonAction.java | 4 +- .../ExportExistingTemporarySpeciesAction.java | 4 +- .../ExportExistingTemporaryVesselAction.java | 4 +- .../catches/species/SpeciesBatchRowModel.java | 1 - .../ui/swing/util/AbstractTuttiBeanUIModel.java | 5 +++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 8 ++++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 8 ++++ 19 files changed, 150 insertions(+), 27 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntity.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntity.java index c2136a8..edacfe2 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntity.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntity.java @@ -34,12 +34,16 @@ public interface TuttiEntity extends Serializable { public static final String PROPERTY_ID = "id"; + public static final String PROPERTY_ID_AS_INT = "idAsInt"; + String getId(); void setId(String id); Integer getIdAsInt(); + void setIdAsInt(Integer idAsInt); + void setId(Integer id); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntityBean.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntityBean.java index b110487..7cae605 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntityBean.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntityBean.java @@ -70,6 +70,11 @@ public abstract class TuttiEntityBean implements Serializable, TuttiEntity { } @Override + public void setIdAsInt(Integer idAsInt) { + setId(idAsInt); + } + + @Override public boolean equals(Object o) { if (this == o) { return true; 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 2db70c7..005d110 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 @@ -45,7 +45,9 @@ import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmId; import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmId2; import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueId; import fr.ifremer.adagio.core.dao.referential.pmfm.UnitId; +import fr.ifremer.adagio.core.dao.referential.taxon.TaxonName; import fr.ifremer.adagio.core.dao.referential.taxon.TaxonNameExtendDao; +import fr.ifremer.adagio.core.dao.referential.taxon.TaxonNameImpl; import fr.ifremer.adagio.core.dao.referential.taxon.TaxonRefVO; import fr.ifremer.adagio.core.dao.referential.transcribing.TranscribingItemTypeId; import fr.ifremer.adagio.core.dao.technical.hibernate.TemporaryDataHelper; @@ -705,9 +707,9 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic @Override public boolean isTemporary(TuttiReferentialEntity entity) { Preconditions.checkNotNull(entity); + Preconditions.checkNotNull(entity.getId()); Preconditions.checkNotNull(entity.getStatus()); - return StatusCode.TEMPORARY.getValue().equals( - entity.getStatus().getId()); + return StatusCode.TEMPORARY.getValue().equals(entity.getStatus().getId()) && entity.getIdAsInt() < 0; } @Override @@ -1062,15 +1064,27 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic protected Species importTemporarySpecies(Species source) { Preconditions.checkNotNull(source); Preconditions.checkNotNull(source.getName()); + Preconditions.checkArgument(source.getIdAsInt() == null || source.getIdAsInt() < 0); - TaxonRefVO taxonName = new TaxonRefVO(); - taxonName.setName(source.getName()); - taxonName = taxonNameDao.createAsTemporary( - taxonName, - "Added by tutti (file import)."); + TaxonRefVO taxonRefVO = null; + if (source.getId() != null) { + taxonRefVO = taxonNameDao.getTaxonNameReferent(source.getIdAsInt()); + } + if (taxonRefVO == null) { + taxonRefVO = new TaxonRefVO(); + taxonRefVO.setName(source.getName()); + taxonRefVO = taxonNameDao.createAsTemporary( + taxonRefVO, + "Added by tutti (file import)."); + } else { + TaxonName taxonName = load(TaxonNameImpl.class, taxonRefVO.getTaxonNameId()); + taxonName.setName(source.getName()); + taxonRefVO.setName(source.getName()); + taxonNameDao.update(taxonName); + } // update the source - Species result = loadSpecies(taxonName); + Species result = loadSpecies(taxonRefVO); result.setRefTaxCode(result.getExternalCode()); // Add to cache diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java index b52faef..cef5773 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java @@ -32,6 +32,7 @@ import java.text.ParseException; import java.util.Set; import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; /** * Model to import / export {@link Gear} in csv format. @@ -46,7 +47,7 @@ public class GearModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Gear> // import definition - newMandatoryColumn(Gear.PROPERTY_ID, new Common.IntegerParserFormatter(null, true) { + newMandatoryColumn(Gear.PROPERTY_ID, Gear.PROPERTY_ID_AS_INT, new Common.IntegerParserFormatter(null, true) { @Override public Integer parse(String value) throws ParseException { @@ -58,7 +59,7 @@ public class GearModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Gear> // must also be negative value if (parse >= 0) { - throw new IllegalArgumentException("Id of a temporary gear must be negative, but was: " + parse); + throw new IllegalArgumentException(t("tutti.service.referential.import.gear.idNotNegative.error", parse)); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java index 6c9a4e7..80b4530 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java @@ -29,6 +29,8 @@ import org.nuiton.csv.Common; import java.text.ParseException; +import static org.nuiton.i18n.I18n.t; + /** * Model to import / export {@link Person} in csv format. * @@ -42,7 +44,7 @@ public class PersonModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Per // import definition - newMandatoryColumn(Person.PROPERTY_ID, new Common.IntegerParserFormatter(null, true) { + newMandatoryColumn(Person.PROPERTY_ID, Person.PROPERTY_ID_AS_INT, new Common.IntegerParserFormatter(null, true) { @Override public Integer parse(String value) throws ParseException { @@ -54,7 +56,7 @@ public class PersonModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Per // must also be negative value if (parse >= 0) { - throw new IllegalArgumentException("Id of a temporary person must be negative, but was: " + parse); + throw new IllegalArgumentException(t("tutti.service.referential.import.person.idNotNegative.error", parse)); } } 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 46ff4cd..7f58bed 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 @@ -28,6 +28,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.common.io.Files; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Gears; import fr.ifremer.tutti.persistence.entities.referential.Person; @@ -46,11 +47,13 @@ import org.nuiton.csv.Export; import org.nuiton.csv.Import; import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; +import org.springframework.dao.DataRetrievalFailureException; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.io.Reader; +import java.util.HashSet; import java.util.List; import java.util.Set; @@ -82,14 +85,18 @@ public class ReferentialImportService extends AbstractTuttiService { log.info("Will import species from file: " + file); } + List<Species> allSpecies = persistenceService.getAllSpecies(); + // get all species names - Set<String> existingSpeciesName = Sets.newHashSet(Iterables.transform(persistenceService.getAllSpecies(), new Function<Species, String>() { + Set<String> existingSpeciesName = Sets.newHashSet(Iterables.transform(allSpecies, new Function<Species, String>() { @Override public String apply(Species input) { return input.getName(); } })); + List<String> existingSpeciesIds = TuttiEntities.toIds(allSpecies); + List<Species> toImport = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); @@ -100,6 +107,12 @@ public class ReferentialImportService extends AbstractTuttiService { try { for (Species bean : importer) { + + String id = bean.getId(); + if (id != null && !existingSpeciesIds.add(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.species.notExistingId.error", id)); + } + toImport.add(bean); } importer.close(); @@ -125,8 +138,7 @@ public class ReferentialImportService extends AbstractTuttiService { IOUtils.closeQuietly(reader); } - List<Species> result = - persistenceService.importTemporarySpecies(toImport); + List<Species> result = persistenceService.importTemporarySpecies(toImport); return result; } @@ -193,6 +205,9 @@ public class ReferentialImportService extends AbstractTuttiService { log.info("Will import persons from file: " + file); } + List<Person> allPersons = persistenceService.getAllPerson(); + List<String> existingPersonIds = TuttiEntities.toIds(allPersons); + List<Person> toImport = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); @@ -203,13 +218,21 @@ public class ReferentialImportService extends AbstractTuttiService { try { for (Person bean : importer) { + + String id = bean.getId(); + if (id != null && !existingPersonIds.add(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.person.notExistingId.error", id)); + } + toImport.add(bean); } importer.close(); + } finally { IOUtils.closeQuietly(importer); } reader.close(); + } catch (IOException e) { throw new IOException(t("tutti.service.referential.import.persons.error", file), e); } finally { @@ -241,6 +264,20 @@ public class ReferentialImportService extends AbstractTuttiService { } })); + Set<String> existingGearIds = Sets.newHashSet(Iterables.transform(persistenceService.getAllFishingGear(), new Function<Gear, String>() { + @Override + public String apply(Gear input) { + return input.getId(); + } + })); + + existingGearIds.addAll(Lists.transform(persistenceService.getAllScientificGear(), new Function<Gear, String>() { + @Override + public String apply(Gear input) { + return input.getId(); + } + })); + List<Gear> toImport = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); @@ -251,6 +288,11 @@ public class ReferentialImportService extends AbstractTuttiService { try { for (Gear bean : importer) { + String id = bean.getId(); + if (id != null && !existingGearIds.add(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.gear.notExistingId.error", id)); + } + toImport.add(bean); } importer.close(); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java index 8ef2174..80c271d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java @@ -22,15 +22,20 @@ package fr.ifremer.tutti.service.referential; * #L% */ +import com.google.common.base.Function; +import com.google.common.collect.Iterables; +import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; import fr.ifremer.tutti.service.TuttiCsvUtil; import org.nuiton.csv.Common; import java.text.ParseException; +import java.util.Collection; import java.util.Set; import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; /** * Model to import / export {@link Species} in csv format. @@ -45,7 +50,7 @@ public class SpeciesModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Sp // import definition - newMandatoryColumn(Species.PROPERTY_ID, new Common.IntegerParserFormatter(null, true) { + newMandatoryColumn(Species.PROPERTY_ID, Species.PROPERTY_ID_AS_INT, new Common.IntegerParserFormatter(null, true) { @Override public Integer parse(String value) throws ParseException { @@ -57,7 +62,7 @@ public class SpeciesModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Sp // must also be negative value if (parse >= 0) { - throw new IllegalArgumentException("Id of a temporary species must be negative, but was: " + parse); + throw new IllegalArgumentException(t("tutti.service.referential.import.species.idNotNegative.error", parse)); } } 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 5547b46..a3f63d3 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 @@ -29,6 +29,8 @@ import fr.ifremer.tutti.service.TuttiCsvUtil; import org.apache.commons.lang3.StringUtils; import org.nuiton.csv.Common; +import static org.nuiton.i18n.I18n.t; + /** * Model to import / export {@link Vessel} in csv format. * @@ -54,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("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", parse));//"Code of a temporary vessel must starts with " + TemporaryDataHelper.TEMPORARY_NAME_PREFIX + ", but was: " + parse); } } 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 bbb970e..22a326c 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,6 +222,8 @@ tutti.service.referential.import.gears.error= tutti.service.referential.import.persons.error= tutti.service.referential.import.species.error= tutti.service.referential.import.species.existingName.error= +tutti.service.referential.import.species.idNotNegative.error= +tutti.service.referential.import.species.notExistingId.error= tutti.service.referential.import.vessels.error= tutti.service.referential.import.vessels.existingValue.error= tutti.service.sumatra.export.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 a870c3c..b7ed291 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,6 +202,8 @@ tutti.service.referential.import.gears.error=Erreur lors de l'import des engins 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.idNotNegative.error=L'identifiant d'une espèce temporaire doit être négatif : %s +tutti.service.referential.import.species.notExistingId.error=L'identifiant '%s' n'a pas été trouvé parmi les espèces temporaires 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-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 a4fcd68..8a70284 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 @@ -57,6 +57,10 @@ public class ReferentialImportServiceTest { ";Temporary Species name 2\n" + ";Temporary Species name 3"; + private static final String SPECIES_UPDATE_FILE_CONTENT = + "id;name\n" + + "-1;Temporary Species name 11"; + private static final String GEAR_FILE_CONTENT = "id;name;label;scientificGear\n" + ";Gear fishing name 1;Gear fishing label 1;N\n" + @@ -106,6 +110,16 @@ public class ReferentialImportServiceTest { Files.createParentDirs(file); + Files.write(SPECIES_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); + // try to import not existing id + try { + service.importTemporarySpecies(file); + Assert.fail(); + } catch (ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + + // successful import Files.write(SPECIES_FILE_CONTENT, file, Charsets.UTF_8); List<Species> result = service.importTemporarySpecies(file); @@ -125,6 +139,16 @@ public class ReferentialImportServiceTest { } catch (ApplicationTechnicalException e) { Assert.assertTrue(true); } + + // try to update species with id -1 + Files.write(SPECIES_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); + result = service.importTemporarySpecies(file); + Assert.assertNotNull(result); + Assert.assertEquals(1, result.size()); + Species actual = result.get(0); + Assert.assertNotNull(actual); + Assert.assertEquals("-1", actual.getId()); + Assert.assertEquals("Temporary Species name 11", actual.getName()); } @Test diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java index c29a55e..61b834c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java @@ -64,7 +64,7 @@ public class ExportExistingTemporaryGearAction extends AbstractTuttiAction<Tutti "exportTemporaryGear", "csv", t("tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryGearFile"), - t("tutti.manageTemporaryReferential.action.chooseReferentialGearFile.export"), + t("tutti.manageTemporaryReferential.action.chooseExistingReferentialGearFile.export"), "^.*\\.csv", t("tutti.common.file.csv") ); doAction = file != null; @@ -95,6 +95,6 @@ public class ExportExistingTemporaryGearAction extends AbstractTuttiAction<Tutti @Override public void postSuccessAction() { super.postSuccessAction(); - sendMessage(t("tutti.manageTemporaryReferential.action.chooseReferentialGearFile.export.success", file)); + sendMessage(t("tutti.manageTemporaryReferential.action.chooseExistingReferentialGearFile.export.success", file)); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java index c7b5419..3bc6ca4 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java @@ -65,7 +65,7 @@ public class ExportExistingTemporaryPersonAction extends AbstractTuttiAction<Tut "exportTemporaryPerson", "csv", t("tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryPersonFile"), - t("tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.export"), + t("tutti.manageTemporaryReferential.action.chooseExistingReferentialPersonFile.export"), "^.*\\.csv", t("tutti.common.file.csv") ); doAction = file != null; @@ -96,6 +96,6 @@ public class ExportExistingTemporaryPersonAction extends AbstractTuttiAction<Tut @Override public void postSuccessAction() { super.postSuccessAction(); - sendMessage(t("tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.export.success", file)); + sendMessage(t("tutti.manageTemporaryReferential.action.chooseExistingReferentialPersonFile.export.success", file)); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java index 3a8fa82..fa6da80 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java @@ -64,7 +64,7 @@ public class ExportExistingTemporarySpeciesAction extends AbstractTuttiAction<Tu "exportTemporarySpecies", "csv", t("tutti.manageTemporaryReferential.title.choose.exportExistingTemporarySpeciesFile"), - t("tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.export"), + t("tutti.manageTemporaryReferential.action.chooseExistingReferentialSpeciesFile.export"), "^.*\\.csv", t("tutti.common.file.csv") ); doAction = file != null; @@ -95,6 +95,6 @@ public class ExportExistingTemporarySpeciesAction extends AbstractTuttiAction<Tu @Override public void postSuccessAction() { super.postSuccessAction(); - sendMessage(t("tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.export.success", file)); + sendMessage(t("tutti.manageTemporaryReferential.action.chooseExistingReferentialSpeciesFile.export.success", file)); } } 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 60acd90..314d4f5 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 @@ -64,7 +64,7 @@ public class ExportExistingTemporaryVesselAction extends AbstractTuttiAction<Tut "exportTemporaryExample", "csv", t("tutti.manageTemporaryReferential.title.choose.exportExistingTemporaryVesselFile"), - t("tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export"), + t("tutti.manageTemporaryReferential.action.chooseExistingReferentialVesselFile.export"), "^.*\\.csv", t("tutti.common.file.csv") ); doAction = file != null; @@ -95,6 +95,6 @@ public class ExportExistingTemporaryVesselAction extends AbstractTuttiAction<Tut @Override public void postSuccessAction() { super.postSuccessAction(); - sendMessage(t("tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.export.success", file)); + sendMessage(t("tutti.manageTemporaryReferential.action.chooseExistingReferentialVesselFile.export.success", file)); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java index 83abebf..710cf51 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java @@ -30,7 +30,6 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.SampleCategory; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; -import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchs; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiBeanUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiBeanUIModel.java index 8a240b8..bf71bee 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiBeanUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiBeanUIModel.java @@ -117,6 +117,11 @@ public abstract class AbstractTuttiBeanUIModel<E, B extends AbstractTuttiBeanUIM } @Override + public void setIdAsInt(Integer idAsInt) { + setId(idAsInt); + } + + @Override public void setId(Integer id) { if (id == null) { this.id = null; 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 9bb9f24..b9b2c86 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 @@ -1414,6 +1414,14 @@ tutti.main.title.nodb= tutti.main.title.selectedCruise= tutti.main.title.selectedProgram= tutti.main.title.selectedProtocol= +tutti.manageTemporaryReferential.action.chooseExistingReferentialGearFile.export= +tutti.manageTemporaryReferential.action.chooseExistingReferentialGearFile.export.success= +tutti.manageTemporaryReferential.action.chooseExistingReferentialPersonFile.export= +tutti.manageTemporaryReferential.action.chooseExistingReferentialPersonFile.export.success= +tutti.manageTemporaryReferential.action.chooseExistingReferentialSpeciesFile.export= +tutti.manageTemporaryReferential.action.chooseExistingReferentialSpeciesFile.export.success= +tutti.manageTemporaryReferential.action.chooseExistingReferentialVesselFile.export= +tutti.manageTemporaryReferential.action.chooseExistingReferentialVesselFile.export.success= tutti.manageTemporaryReferential.action.chooseReferentialGearFile.export= tutti.manageTemporaryReferential.action.chooseReferentialGearFile.export.success= tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import= 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 b3b5bc0..25d0ee6 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 @@ -1366,6 +1366,14 @@ tutti.main.title.nodb=Pas de base chargée tutti.main.title.selectedCruise=Campagne %s tutti.main.title.selectedProgram=Série de campagne %s tutti.main.title.selectedProtocol=Protocole %s +tutti.manageTemporaryReferential.action.chooseExistingReferentialGearFile.export= +tutti.manageTemporaryReferential.action.chooseExistingReferentialGearFile.export.success= +tutti.manageTemporaryReferential.action.chooseExistingReferentialPersonFile.export= +tutti.manageTemporaryReferential.action.chooseExistingReferentialPersonFile.export.success= +tutti.manageTemporaryReferential.action.chooseExistingReferentialSpeciesFile.export= +tutti.manageTemporaryReferential.action.chooseExistingReferentialSpeciesFile.export.success= +tutti.manageTemporaryReferential.action.chooseExistingReferentialVesselFile.export= +tutti.manageTemporaryReferential.action.chooseExistingReferentialVesselFile.export.success= 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 -- 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 3165a319f5b8f1635dff0870f3429d0a4997d07c Author: Kevin Morin <morin@codelutin.com> Date: Mon Oct 27 16:56:27 2014 +0100 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires --- .../tutti/persistence/TuttiPersistenceImpl.java | 40 +++ .../persistence/TuttiPersistenceNoDbImpl.java | 40 +++ .../service/ReferentialPersistenceService.java | 85 ++++++- .../service/ReferentialPersistenceServiceImpl.java | 138 ++++++++++- .../src/main/resources/queries-failsafe.hbm.xml | 153 ++++++++++++ .../ifremer/tutti/service/PersistenceService.java | 40 +++ .../tutti/service/referential/GearModel.java | 26 +- .../ifremer/tutti/service/referential/GearRow.java | 37 +++ .../tutti/service/referential/PersonModel.java | 20 +- .../tutti/service/referential/PersonRow.java | 36 +++ .../referential/ReferentialExportService.java | 45 +++- .../referential/ReferentialImportService.java | 225 +++++++++++++---- .../tutti/service/referential/SpeciesModel.java | 18 +- .../tutti/service/referential/SpeciesRow.java | 35 +++ .../tutti/service/referential/VesselModel.java | 24 +- .../tutti/service/referential/VesselRow.java | 38 +++ .../resources/i18n/tutti-service_en_GB.properties | 10 + .../resources/i18n/tutti-service_fr_FR.properties | 12 +- .../referential/ReferentialExportServiceTest.java | 36 +-- .../referential/ReferentialImportServiceTest.java | 275 ++++++++++++++++++--- .../resources/i18n/tutti-ui-swing_fr_FR.properties | 16 +- 21 files changed, 1175 insertions(+), 174 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java index 5a41454..c47ee26 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java @@ -487,20 +487,60 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override + public void deleteTemporaryGears(Collection<Integer> id, boolean checkIfUsed) { + referentialService.deleteTemporaryGears(id, checkIfUsed); + } + + @Override public void deleteTemporarySpecies(Integer id, boolean checkIfUsed) { referentialService.deleteTemporarySpecies(id, checkIfUsed); } @Override + public void deleteTemporarySpecies(Collection<Integer> ids, boolean checkIfUsed) { + referentialService.deleteTemporarySpecies(ids, checkIfUsed); + } + + @Override public void deleteTemporaryPerson(Integer id, boolean checkIfUsed) { referentialService.deleteTemporaryPerson(id, checkIfUsed); } @Override + public void deleteTemporaryPersons(Collection<Integer> ids, boolean checkIfUsed) { + referentialService.deleteTemporaryPersons(ids, checkIfUsed); + } + + @Override public void deleteTemporaryVessel(String code, boolean checkIfUsed) { referentialService.deleteTemporaryVessel(code, checkIfUsed); } + @Override + public void deleteTemporaryVessels(Collection<String> codes, boolean checkIfUsed) { + referentialService.deleteTemporaryVessels(codes, checkIfUsed); + } + + @Override + public boolean isTemporaryPersonUsed(Integer id) { + return referentialService.isTemporaryPersonUsed(id); + } + + @Override + public boolean isTemporarySpeciesUsed(Integer id) { + return referentialService.isTemporarySpeciesUsed(id); + } + + @Override + public boolean isTemporaryGearUsed(Integer id) { + return referentialService.isTemporaryGearUsed(id); + } + + @Override + public boolean isTemporaryVesselUsed(String code) { + return referentialService.isTemporaryVesselUsed(code); + } + //------------------------------------------------------------------------// //-- Attachment methods --// //------------------------------------------------------------------------// diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java index 4ca7737..fa96069 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java @@ -751,20 +751,60 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override + public void deleteTemporaryGears(Collection<Integer> id, boolean checkIfUsed) { + throw notImplemented(); + } + + @Override public void deleteTemporarySpecies(Integer id, boolean checkIfUsed) { throw notImplemented(); } @Override + public void deleteTemporarySpecies(Collection<Integer> ids, boolean checkIfUsed) { + throw notImplemented(); + } + + @Override public void deleteTemporaryPerson(Integer id, boolean checkIfUsed) { throw notImplemented(); } @Override + public void deleteTemporaryPersons(Collection<Integer> ids, boolean checkIfUsed) { + throw notImplemented(); + } + + @Override public void deleteTemporaryVessel(String code, boolean checkIfUsed) { throw notImplemented(); } + @Override + public void deleteTemporaryVessels(Collection<String> codes, boolean checkIfUsed) { + throw notImplemented(); + } + + @Override + public boolean isTemporaryPersonUsed(Integer id) { + throw notImplemented(); + } + + @Override + public boolean isTemporarySpeciesUsed(Integer id) { + throw notImplemented(); + } + + @Override + public boolean isTemporaryGearUsed(Integer id) { + throw notImplemented(); + } + + @Override + public boolean isTemporaryVesselUsed(String code) { + throw notImplemented(); + } + protected RuntimeException notImplemented() { return new RuntimeException("method not implemented"); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java index a21b100..d7a2795 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java @@ -40,6 +40,7 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.transaction.annotation.Transactional; +import java.util.Collection; import java.util.List; /** @@ -372,43 +373,119 @@ public interface ReferentialPersistenceService extends TuttiPersistenceServiceIm * * @param id id of the gear to remove * @param checkIfUsed to check if gear is used before trying to delete it - * @since 3.9 + * @since 3.8 */ @Transactional(readOnly = false) @CacheEvict(value = "gears", allEntries = true) void deleteTemporaryGear(Integer id, boolean checkIfUsed); /** + * Delete the temporary gears with the given {@code idss}. + * + * @param id ids of the gears to remove + * @param checkIfUsed to check if gear is used before trying to delete it + * @since 3.8 + */ + @Transactional(readOnly = false) + @CacheEvict(value = "gears", allEntries = true) + void deleteTemporaryGears(Collection<Integer> ids, boolean checkIfUsed); + + /** * Delete the temporary species with the given {@code id}. * * @param id id of the species to remove * @param checkIfUsed to check if species is used before trying to delete it - * @since 3.9 + * @since 3.8 */ @Transactional(readOnly = false) @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular"}, allEntries = true) void deleteTemporarySpecies(Integer id, boolean checkIfUsed); /** + * Delete the temporary species with the given {@code ids}. + * + * @param ids ids of the species to remove + * @param checkIfUsed to check if species is used before trying to delete it + * @since 3.8 + */ + @Transactional(readOnly = false) + @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular"}, allEntries = true) + void deleteTemporarySpecies(Collection<Integer> ids, boolean checkIfUsed); + + /** * Delete the temporary person with the given {@code id}. * * @param id id of the person to remove * @param checkIfUsed to check if person is used before trying to delete it - * @since 3.9 + * @since 3.8 */ @Transactional(readOnly = false) @CacheEvict(value = {"persons", "personById"}, allEntries = true) void deleteTemporaryPerson(Integer id, boolean checkIfUsed); /** + * Delete the temporary persons with the given {@code ids}. + * + * @param ids ids of the persons to remove + * @param checkIfUsed to check if person is used before trying to delete it + * @since 3.8 + */ + @Transactional(readOnly = false) + @CacheEvict(value = {"persons", "personById"}, allEntries = true) + void deleteTemporaryPersons(Collection<Integer> ids, boolean checkIfUsed); + + /** * Delete the temporary vessel with the given {@code code}. * * @param code code of the vessel to remove * @param checkIfUsed to check if vessel is used before trying to delete it - * @since 3.9 + * @since 3.8 */ @Transactional(readOnly = false) @CacheEvict(value = {"fishingVessels", "vesselByCode"}, allEntries = true) void deleteTemporaryVessel(String code, boolean checkIfUsed); + /** + * Delete the temporary vessels with the given {@code codes}. + * + * @param codes code of the vessels to remove + * @param checkIfUsed to check if vessel is used before trying to delete it + * @since 3.8 + */ + @Transactional(readOnly = false) + @CacheEvict(value = {"fishingVessels", "vesselByCode"}, allEntries = true) + void deleteTemporaryVessels(Collection<String> codes, boolean checkIfUsed); + + /** + * Check if the temporary person with the given {@code id} is used. + * + * @param id id of the person to check + * @since 3.8 + */ + boolean isTemporaryPersonUsed(Integer id); + + /** + * Check if the temporary species with the given {@code id} is used. + * + * @param id id of the species to check + * @since 3.8 + */ + boolean isTemporarySpeciesUsed(Integer id); + + /** + * Check if the temporary gear with the given {@code id} is used. + * + * @param id id of the gear to remove + * @since 3.8 + */ + boolean isTemporaryGearUsed(Integer id); + + /** + * Check if the temporary vessel with the given {@code id} is used. + * + * @param code code of the vessel to remove + * @since 3.8 + */ + boolean isTemporaryVesselUsed(String code); + } 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 005d110..1808f1f 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 @@ -34,6 +34,7 @@ import fr.ifremer.adagio.core.dao.data.vessel.VesselExtendDao; import fr.ifremer.adagio.core.dao.referential.StatusCode; import fr.ifremer.adagio.core.dao.referential.StatusDao; import fr.ifremer.adagio.core.dao.referential.VesselTypeId; +import fr.ifremer.adagio.core.dao.referential.gear.FishingGear; import fr.ifremer.adagio.core.dao.referential.gear.FishingGearExtendDao; import fr.ifremer.adagio.core.dao.referential.gear.GearClassification; import fr.ifremer.adagio.core.dao.referential.gear.GearClassificationId; @@ -88,8 +89,10 @@ import org.springframework.dao.DataRetrievalFailureException; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Collection; import java.util.Collections; import java.util.Date; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; @@ -964,6 +967,13 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic } @Override + public void deleteTemporaryGears(Collection<Integer> ids, boolean checkIfUsed) { + for (Integer id : ids) { + deleteTemporaryGear(id, checkIfUsed); + } + } + + @Override public void deleteTemporarySpecies(Integer id, boolean checkIfUsed) { Preconditions.checkNotNull(id); @@ -975,26 +985,44 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic throw new ApplicationBusinessException(String.format("Species with id %d does not exists", id)); } + if (checkIfUsed) { + isTemporarySpeciesUsed(id); + } + taxonNameDao.remove(id); } @Override + public void deleteTemporarySpecies(Collection<Integer> ids, boolean checkIfUsed) { + for (Integer id : ids) { + deleteTemporarySpecies(id, checkIfUsed); + } + } + + @Override public void deleteTemporaryPerson(Integer id, boolean checkIfUsed) { Preconditions.checkNotNull(id); if (id > 0) { - throw new ApplicationBusinessException(String.format("Can't delete a Gear with a positive id %d.", id)); + throw new ApplicationBusinessException(String.format("Can't delete a Person with a positive id %d.", id)); } - Gear gear = getGear(id); - if (gear == null) { - throw new ApplicationBusinessException(String.format("Gear with id %d does not exists", id)); + Person person = getPerson(id); + if (person == null) { + throw new ApplicationBusinessException(String.format("Person with id %d does not exists", id)); } personDao.remove(id); } @Override + public void deleteTemporaryPersons(Collection<Integer> ids, boolean checkIfUsed) { + for (Integer id : ids) { + deleteTemporaryPerson(id, checkIfUsed); + } + } + + @Override public void deleteTemporaryVessel(String code, boolean checkIfUsed) { Preconditions.checkNotNull(code); @@ -1010,6 +1038,108 @@ public class ReferentialPersistenceServiceImpl extends AbstractPersistenceServic } + @Override + public void deleteTemporaryVessels(Collection<String> codes, boolean checkIfUsed) { + for (String code : codes) { + deleteTemporaryVessel(code, checkIfUsed); + } + } + + @Override + public boolean isTemporaryPersonUsed(Integer id) { + Long count = queryUniqueTyped("replaceManagerPersonInScientificCruise", "id", IntegerType.INSTANCE, id); + boolean result = count > 0; + + if (!result) { + count = queryUniqueTyped("replaceRecorderPersonInScientificCruise", "id", IntegerType.INSTANCE, id); + result = count > 0; + } + + if (!result) { + count = queryUniqueTyped("replaceRecorderPersonInFishingTrip", "id", IntegerType.INSTANCE, id); + result = count > 0; + } + + if (!result) { + count = queryUniqueTyped("replacePersonInVesselPersonFeatures", "id", IntegerType.INSTANCE, id); + result = count > 0; + } + + return result; + } + + @Override + public boolean isTemporarySpeciesUsed(Integer id) { + Long count = queryUniqueTyped("countReferenceTaxonInSortingBatch", "id", IntegerType.INSTANCE, id); + boolean result = count > 0; + + if (!result) { + count = queryUniqueTyped("countReferenceTaxonInSample", "id", IntegerType.INSTANCE, id); + result = count > 0; + } + return result; + } + + @Override + public boolean isTemporaryGearUsed(Integer id) { + Long count = queryUniqueTyped("replaceGearInGearPhysicalFeatures", "id", IntegerType.INSTANCE, id); + boolean result = count > 0; + + if (!result) { + count = queryUniqueTyped("replaceGearInGearUseFeatures", "id", IntegerType.INSTANCE, id); + result = count > 0; + } + return result; + } + + @Override + public boolean isTemporaryVesselUsed(String code) { + Long count = queryUniqueTyped("replaceVesselInCruise", "id", StringType.INSTANCE, code); + boolean result = count > 0; + + if (!result) { + count = queryUniqueTyped("replaceVesselInFishingOperation", "id", StringType.INSTANCE, code); + result = count > 0; + } + + if (!result) { + count = queryUniqueTyped("replaceVesselInOperationVesselAssociation", "id", StringType.INSTANCE, code); + result = count > 0; + } + + if (!result) { + count = queryUniqueTyped("replaceVesselInDailyActivityCalendar", "id", StringType.INSTANCE, code); + result = count > 0; + } + + if (!result) { + count = queryUniqueTyped("replaceVesselInLanding", "id", StringType.INSTANCE, code); + result = count > 0; + } + + if (!result) { + count = queryUniqueTyped("replaceVesselInFishingtrip", "id", StringType.INSTANCE, code); + result = count > 0; + } + + if (!result) { + count = queryUniqueTyped("replaceVesselInVesselUseFeatures", "id", StringType.INSTANCE, code); + result = count > 0; + } + + if (!result) { + count = queryUniqueTyped("replaceVesselInGearUseFeatures", "id", StringType.INSTANCE, code); + result = count > 0; + } + + if (!result) { + count = queryUniqueTyped("replaceVesselInGearPhysicalFeatures", "id", StringType.INSTANCE, code); + result = count > 0; + } + + return result; + } + //------------------------------------------------------------------------// //-- Internal methods --// //------------------------------------------------------------------------// diff --git a/tutti-persistence/src/main/resources/queries-failsafe.hbm.xml b/tutti-persistence/src/main/resources/queries-failsafe.hbm.xml index b5f412b..80cb2b4 100644 --- a/tutti-persistence/src/main/resources/queries-failsafe.hbm.xml +++ b/tutti-persistence/src/main/resources/queries-failsafe.hbm.xml @@ -680,6 +680,42 @@ <query-param name="targetId" type="java.lang.Integer"/> </query> + <query cacheable="true" name="countManagerPersonInScientificCruise"> + <![CDATA[ + SELECT count(*) + FROM ScientificCruiseImpl sc + WHERE sc.managerPerson.id = :id + ]]> + <query-param name="id" type="java.lang.Integer"/> + </query> + + <query cacheable="true" name="countRecorderPersonInScientificCruise"> + <![CDATA[ + SELECT count(*) + FROM ScientificCruiseImpl sc + WHERE sc.recorderPerson.id = :id + ]]> + <query-param name="id" type="java.lang.Integer"/> + </query> + + <query cacheable="true" name="countRecorderPersonInFishingTrip"> + <![CDATA[ + SELECT count(*) + FROM FishingTripImpl ft + WHERE ft.recorderPerson.id = :id + ]]> + <query-param name="id" type="java.lang.Integer"/> + </query> + + <query cacheable="true" name="countPersonInVesselPersonFeatures"> + <![CDATA[ + SELECT count(*) + FROM VesselPersonFeaturesImpl vpf + WHERE vpf.person.id = :id + ]]> + <query-param name="id" type="java.lang.Integer"/> + </query> + <query cacheable="true" name="replaceGearInGearPhysicalFeatures"> <![CDATA[ UPDATE GearPhysicalFeaturesImpl gpf @@ -700,6 +736,24 @@ <query-param name="targetId" type="java.lang.Integer"/> </query> + <query cacheable="true" name="countGearInGearPhysicalFeatures"> + <![CDATA[ + SELECT count(*) + FROM GearPhysicalFeaturesImpl gpf + WHERE gpf.gear.id = :id + ]]> + <query-param name="id" type="java.lang.Integer"/> + </query> + + <query cacheable="true" name="countGearInGearUseFeatures"> + <![CDATA[ + SELECT count(*) + FROM GearUseFeaturesImpl gpf + WHERE gpf.gear.id = :id + ]]> + <query-param name="id" type="java.lang.Integer"/> + </query> + <query cacheable="true" name="getReferenceTaxonInSortingBatch"> <![CDATA[ Select b.id From BatchImpl b @@ -738,6 +792,24 @@ <query-param name="targetId" type="java.lang.Integer"/> </query> + <query cacheable="true" name="countReferenceTaxonInSortingBatch"> + <![CDATA[ + SELECT count(*) + FROM BatchImpl b + WHERE b.referenceTaxon.id = :id + ]]> + <query-param name="id" type="java.lang.Integer"/> + </query> + + <query cacheable="true" name="countReferenceTaxonInSample"> + <![CDATA[ + SELECT count(*) + FROM SampleImpl s + WHERE s.referenceTaxon.id = :id + ]]> + <query-param name="id" type="java.lang.Integer"/> + </query> + <query cacheable="true" name="replaceVesselInCruise"> <![CDATA[ UPDATE ScientificCruiseImpl sc @@ -828,6 +900,87 @@ <query-param name="targetId" type="java.lang.String"/> </query> + <query cacheable="true" name="countVesselInCruise"> + <![CDATA[ + SELECT count(*) + FROM ScientificCruiseImpl sc + WHERE sc.vessel.code = :id + ]]> + <query-param name="id" type="java.lang.String"/> + </query> + + <query cacheable="true" name="countVesselInOperationVesselAssociation"> + <![CDATA[ + SELECT count(*) + FROM OperationVesselAssociationImpl va + WHERE va.operationVesselAssociationPk.vessel.code = :id + ]]> + <query-param name="id" type="java.lang.String"/> + </query> + + <query cacheable="true" name="countVesselInFishingOperation"> + <![CDATA[ + SELECT count(*) + FROM FishingOperationImpl fo + WHERE fo.vessel.code = :id + ]]> + <query-param name="id" type="java.lang.String"/> + </query> + + <query name="countVesselInDailyActivityCalendar"> + <![CDATA[ + SELECT count(*) + FROM DailyActivityCalendarImpl ac + WHERE ac.vessel.code = :id + ]]> + <query-param name="id" type="java.lang.String"/> + </query> + + <query name="countVesselInLanding"> + <![CDATA[ + SELECT count(*) + FROM LandingImpl l + WHERE l.vessel.code = :id + ]]> + <query-param name="id" type="java.lang.String"/> + </query> + + <query name="countVesselInFishingtrip"> + <![CDATA[ + SELECT count(*) + FROM FishingTripImpl ft + WHERE ft.vessel.code = :id + ]]> + <query-param name="id" type="java.lang.String"/> + </query> + + <query name="countVesselInVesselUseFeatures"> + <![CDATA[ + SELECT count(*) + FROM VesselUseFeaturesImpl vuf + WHERE vuf.vessel.code = :id + ]]> + <query-param name="id" type="java.lang.String"/> + </query> + + <query name="countVesselInGearUseFeatures"> + <![CDATA[ + SELECT count(*) + FROM GearUseFeaturesImpl guf + WHERE guf.vessel.code = :id + ]]> + <query-param name="id" type="java.lang.String"/> + </query> + + <query name="countVesselInGearPhysicalFeatures"> + <![CDATA[ + SELECT count(*) + FROM GearPhysicalFeaturesImpl gpf + WHERE gpf.vessel.code = :id + ]]> + <query-param name="id" type="java.lang.String"/> + </query> + <!-- ===================================================================== --> <!-- === Requete techniques sur référentiels [REF-TXXX] === --> <!-- ===================================================================== --> diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java index 3e3b874..86700fb 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java @@ -992,20 +992,60 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override + public void deleteTemporaryGears(Collection<Integer> id, boolean checkIfUsed) { + driver.deleteTemporaryGears(id, checkIfUsed); + } + + @Override public void deleteTemporarySpecies(Integer id, boolean checkIfUsed) { driver.deleteTemporarySpecies(id, checkIfUsed); } @Override + public void deleteTemporarySpecies(Collection<Integer> ids, boolean checkIfUsed) { + driver.deleteTemporarySpecies(ids, checkIfUsed); + } + + @Override public void deleteTemporaryPerson(Integer id, boolean checkIfUsed) { driver.deleteTemporaryPerson(id, checkIfUsed); } @Override + public void deleteTemporaryPersons(Collection<Integer> ids, boolean checkIfUsed) { + driver.deleteTemporaryPersons(ids, checkIfUsed); + } + + @Override public void deleteTemporaryVessel(String code, boolean checkIfUsed) { driver.deleteTemporaryVessel(code, checkIfUsed); } + @Override + public void deleteTemporaryVessels(Collection<String> codes, boolean checkIfUsed) { + driver.deleteTemporaryVessels(codes, checkIfUsed); + } + + @Override + public boolean isTemporaryPersonUsed(Integer id) { + return driver.isTemporaryPersonUsed(id); + } + + @Override + public boolean isTemporarySpeciesUsed(Integer id) { + return driver.isTemporarySpeciesUsed(id); + } + + @Override + public boolean isTemporaryGearUsed(Integer id) { + return driver.isTemporaryGearUsed(id); + } + + @Override + public boolean isTemporaryVesselUsed(String code) { + return driver.isTemporaryVesselUsed(code); + } + //------------------------------------------------------------------------// //-- Attachment methods --// //------------------------------------------------------------------------// diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java index cef5773..64a9e8d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java @@ -40,14 +40,14 @@ import static org.nuiton.i18n.I18n.t; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class GearModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Gear> { +public class GearModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<GearRow> { - public GearModel(char separator, Set<String> existingGearName) { + public GearModel(char separator) { super(separator); // import definition - newMandatoryColumn(Gear.PROPERTY_ID, Gear.PROPERTY_ID_AS_INT, new Common.IntegerParserFormatter(null, true) { + newMandatoryColumn(GearRow.PROPERTY_ID, GearRow.PROPERTY_ID_AS_INT, new Common.IntegerParserFormatter(null, true) { @Override public Integer parse(String value) throws ParseException { @@ -68,21 +68,23 @@ public class GearModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Gear> } }); - newNotExistingValueColumn(Gear.PROPERTY_NAME, existingGearName, n("tutti.service.referential.import.gear.existingName.error")); - newMandatoryColumn(Gear.PROPERTY_LABEL); - newMandatoryColumn(Gear.PROPERTY_SCIENTIFIC_GEAR, Common.PRIMITIVE_BOOLEAN); + newMandatoryColumn(GearRow.PROPERTY_NAME); + newMandatoryColumn(GearRow.PROPERTY_LABEL); + newMandatoryColumn(GearRow.PROPERTY_SCIENTIFIC_GEAR, Common.PRIMITIVE_BOOLEAN); + newMandatoryColumn(GearRow.PROPERTY_TO_DELETE, TuttiCsvUtil.BOOLEAN); // export definition - newColumnForExport(Gear.PROPERTY_ID); - newColumnForExport(Gear.PROPERTY_NAME); - newColumnForExport(Gear.PROPERTY_LABEL); - newColumnForExport(Gear.PROPERTY_SCIENTIFIC_GEAR, Common.PRIMITIVE_BOOLEAN); + newColumnForExport(GearRow.PROPERTY_ID); + newColumnForExport(GearRow.PROPERTY_NAME); + newColumnForExport(GearRow.PROPERTY_LABEL); + newColumnForExport(GearRow.PROPERTY_SCIENTIFIC_GEAR, Common.PRIMITIVE_BOOLEAN); + newColumnForExport(GearRow.PROPERTY_TO_DELETE); } @Override - public Gear newEmptyInstance() { - return Gears.newGear(); + public GearRow newEmptyInstance() { + return new GearRow(); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearRow.java new file mode 100644 index 0000000..1c35d5d --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearRow.java @@ -0,0 +1,37 @@ +package fr.ifremer.tutti.service.referential; + +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.GearBean; + +/** + * @author Kevin Morin (Code Lutin) + * @since 3.8 + */ +public class GearRow extends GearBean { + + public static final String PROPERTY_TO_DELETE = "toDelete"; + + protected Boolean toDelete; + + public GearRow() { + super(); + } + + public GearRow(Gear gear) { + super(); + Preconditions.checkNotNull(gear); + setId(gear.getId()); + setName(gear.getName()); + setLabel(gear.getLabel()); + setScientificGear(gear.isScientificGear()); + } + + public Boolean getToDelete() { + return toDelete; + } + + public void setToDelete(Boolean toDelete) { + this.toDelete = toDelete; + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java index 80b4530..a5a4d7b 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java @@ -37,14 +37,14 @@ import static org.nuiton.i18n.I18n.t; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class PersonModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Person> { +public class PersonModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<PersonRow> { public PersonModel(char separator) { super(separator); // import definition - newMandatoryColumn(Person.PROPERTY_ID, Person.PROPERTY_ID_AS_INT, new Common.IntegerParserFormatter(null, true) { + newMandatoryColumn(PersonRow.PROPERTY_ID, PersonRow.PROPERTY_ID_AS_INT, new Common.IntegerParserFormatter(null, true) { @Override public Integer parse(String value) throws ParseException { @@ -65,19 +65,21 @@ public class PersonModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Per } }); - newMandatoryColumn(Person.PROPERTY_FIRST_NAME); - newMandatoryColumn(Person.PROPERTY_LAST_NAME); + newMandatoryColumn(PersonRow.PROPERTY_FIRST_NAME); + newMandatoryColumn(PersonRow.PROPERTY_LAST_NAME); + newMandatoryColumn(PersonRow.PROPERTY_TO_DELETE, TuttiCsvUtil.BOOLEAN); // export definition - newColumnForExport(Person.PROPERTY_ID); - newColumnForExport(Person.PROPERTY_FIRST_NAME); - newColumnForExport(Person.PROPERTY_LAST_NAME); + newColumnForExport(PersonRow.PROPERTY_ID); + newColumnForExport(PersonRow.PROPERTY_FIRST_NAME); + newColumnForExport(PersonRow.PROPERTY_LAST_NAME); + newColumnForExport(PersonRow.PROPERTY_TO_DELETE); } @Override - public Person newEmptyInstance() { - return Persons.newPerson(); + public PersonRow newEmptyInstance() { + return new PersonRow(); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonRow.java new file mode 100644 index 0000000..8bc69e4 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonRow.java @@ -0,0 +1,36 @@ +package fr.ifremer.tutti.service.referential; + +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.entities.referential.Person; +import fr.ifremer.tutti.persistence.entities.referential.PersonBean; + +/** + * @author Kevin Morin (Code Lutin) + * @since 3.8 + */ +public class PersonRow extends PersonBean { + + public static final String PROPERTY_TO_DELETE = "toDelete"; + + protected Boolean toDelete; + + public PersonRow() { + super(); + } + + public PersonRow(Person person) { + super(); + Preconditions.checkNotNull(person); + setId(person.getId()); + setFirstName(person.getFirstName()); + setLastName(person.getLastName()); + } + + public Boolean getToDelete() { + return toDelete; + } + + public void setToDelete(Boolean toDelete) { + this.toDelete = toDelete; + } +} 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 1e69ee9..a4e4853 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 @@ -23,6 +23,7 @@ package fr.ifremer.tutti.service.referential; */ import com.google.common.base.Charsets; +import com.google.common.base.Function; import com.google.common.collect.Lists; import com.google.common.io.Files; import fr.ifremer.tutti.persistence.entities.referential.Gear; @@ -97,11 +98,19 @@ public class ReferentialExportService extends AbstractTuttiService { protected void exportTemporarySpecies(File file, List<Species> toExport) throws IOException { - SpeciesModel csvModel = new SpeciesModel(getCsvSeparator(), null); + SpeciesModel csvModel = new SpeciesModel(getCsvSeparator()); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); + + List<SpeciesRow> toExportRows = Lists.transform(toExport, new Function<Species, SpeciesRow>() { + @Override + public SpeciesRow apply(Species species) { + return new SpeciesRow(species); + } + }); + try { - Export export = Export.newExport(csvModel, toExport); + Export export = Export.newExport(csvModel, toExportRows); export.write(writer); writer.close(); } catch (IOException e) { @@ -164,8 +173,16 @@ public class ReferentialExportService extends AbstractTuttiService { VesselModel csvModel = new VesselModel(getCsvSeparator()); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); + + List<VesselRow> toExportRows = Lists.transform(toExport, new Function<Vessel, VesselRow>() { + @Override + public VesselRow apply(Vessel vessel) { + return new VesselRow(vessel); + } + }); + try { - Export export = Export.newExport(csvModel, toExport); + Export export = Export.newExport(csvModel, toExportRows); export.write(writer); writer.close(); } catch (IOException e) { @@ -217,8 +234,16 @@ public class ReferentialExportService extends AbstractTuttiService { PersonModel csvModel = new PersonModel(getCsvSeparator()); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); + + List<PersonRow> toExportRows = Lists.transform(toExport, new Function<Person, PersonRow>() { + @Override + public PersonRow apply(Person person) { + return new PersonRow(person); + } + }); + try { - Export export = Export.newExport(csvModel, toExport); + Export export = Export.newExport(csvModel, toExportRows); export.write(writer); writer.close(); } catch (IOException e) { @@ -274,11 +299,19 @@ public class ReferentialExportService extends AbstractTuttiService { protected void exportTemporaryGear(File file, List<Gear> toExport) throws IOException { - GearModel csvModel = new GearModel(getCsvSeparator(), null); + GearModel csvModel = new GearModel(getCsvSeparator()); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); + + List<GearRow> toExportRows = Lists.transform(toExport, new Function<Gear, GearRow>() { + @Override + public GearRow apply(Gear gear) { + return new GearRow(gear); + } + }); + try { - Export export = Export.newExport(csvModel, toExport); + Export export = Export.newExport(csvModel, toExportRows); export.write(writer); writer.close(); } catch (IOException e) { 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 7f58bed..4c34d4e 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 @@ -41,18 +41,20 @@ import fr.ifremer.tutti.service.AbstractTuttiService; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiServiceContext; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Export; import org.nuiton.csv.Import; import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; -import org.springframework.dao.DataRetrievalFailureException; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.io.Reader; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -88,34 +90,53 @@ public class ReferentialImportService extends AbstractTuttiService { List<Species> allSpecies = persistenceService.getAllSpecies(); // get all species names - Set<String> existingSpeciesName = Sets.newHashSet(Iterables.transform(allSpecies, new Function<Species, String>() { + Set<String> existingSpeciesNames = Sets.newHashSet(Iterables.transform(allSpecies, new Function<Species, String>() { @Override public String apply(Species input) { return input.getName(); } })); - List<String> existingSpeciesIds = TuttiEntities.toIds(allSpecies); + Set<Integer> existingSpeciesIds = new HashSet<>(TuttiEntities.toIntegerIds(allSpecies)); List<Species> toImport = Lists.newArrayList(); + List<Integer> toDelete = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); - SpeciesModel csvModel = new SpeciesModel(getCsvSeparator(), existingSpeciesName); + SpeciesModel csvModel = new SpeciesModel(getCsvSeparator()); try { - Import<Species> importer = Import.newImport(csvModel, reader); + Import<SpeciesRow> importer = Import.newImport(csvModel, reader); try { - for (Species bean : importer) { + for (SpeciesRow bean : importer) { - String id = bean.getId(); - if (id != null && !existingSpeciesIds.add(id)) { + Integer id = bean.getIdAsInt(); + String name = bean.getName(); + boolean delete = BooleanUtils.isTrue(bean.getToDelete()); + + if (id != null && existingSpeciesIds.add(id)) { throw new IllegalArgumentException(t("tutti.service.referential.import.species.notExistingId.error", id)); + + } else if (StringUtils.isBlank(name)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.species.noName.error", id)); + + } else if (!delete && !existingSpeciesNames.add(name)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.species.existingName.error", name)); } - toImport.add(bean); + if (delete) { + if (persistenceService.isTemporarySpeciesUsed(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.species.used.error", id)); + } + toDelete.add(id); + + } else { + toImport.add(bean); + } } importer.close(); + } finally { IOUtils.closeQuietly(importer); } @@ -138,7 +159,10 @@ public class ReferentialImportService extends AbstractTuttiService { IOUtils.closeQuietly(reader); } + persistenceService.deleteTemporarySpecies(toDelete, true); + List<Species> result = persistenceService.importTemporarySpecies(toImport); + return result; } @@ -162,17 +186,19 @@ public class ReferentialImportService extends AbstractTuttiService { Lists.transform(existingVessels, vesselToId)); List<Vessel> toImport = Lists.newArrayList(); + List<String> toDelete = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); VesselModel csvModel = new VesselModel(getCsvSeparator()); try { - Import<Vessel> importer = Import.newImport(csvModel, reader); + Import<VesselRow> importer = Import.newImport(csvModel, reader); try { - for (final Vessel bean : importer) { + for (final VesselRow bean : importer) { String currentId = vesselToId.apply(bean); + boolean delete = BooleanUtils.isTrue(bean.getToDelete()); if (!existingIds.add(currentId)) { @@ -182,21 +208,45 @@ public class ReferentialImportService extends AbstractTuttiService { bean.getName(), bean.getInternationalRegistrationCode())); } - toImport.add(bean); + + if (delete) { + if (persistenceService.isTemporaryVesselUsed(currentId)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.used.error", currentId)); + } + toDelete.add(currentId); + + } else { + toImport.add(bean); + } } importer.close(); + } finally { IOUtils.closeQuietly(importer); } reader.close(); + } catch (IOException e) { throw new IOException(t("tutti.service.referential.import.vessels.error", file), e); + + } catch (ImportRuntimeException e) { + String message; + if (e.getCause() != null) { + message = e.getCause().getMessage(); + } else { + message = e.getMessage(); + } + throw new ApplicationTechnicalException(message, e); + } finally { IOUtils.closeQuietly(reader); } - List<Vessel> result = - persistenceService.importTemporaryVessel(toImport); + + persistenceService.deleteTemporaryVessels(toDelete, true); + + List<Vessel> result = persistenceService.importTemporaryVessel(toImport); + return result; } @@ -206,25 +256,38 @@ public class ReferentialImportService extends AbstractTuttiService { } List<Person> allPersons = persistenceService.getAllPerson(); - List<String> existingPersonIds = TuttiEntities.toIds(allPersons); + + Set<Integer> existingPersonIds = new HashSet<>(TuttiEntities.toIntegerIds(allPersons)); List<Person> toImport = Lists.newArrayList(); + List<Integer> toDelete = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); PersonModel csvModel = new PersonModel(getCsvSeparator()); try { - Import<Person> importer = Import.newImport(csvModel, reader); + Import<PersonRow> importer = Import.newImport(csvModel, reader); try { - for (Person bean : importer) { + for (PersonRow bean : importer) { - String id = bean.getId(); - if (id != null && !existingPersonIds.add(id)) { + Integer id = bean.getIdAsInt(); + String name = bean.getName(); + boolean delete = BooleanUtils.isTrue(bean.getToDelete()); + + if (id != null && existingPersonIds.add(id)) { throw new IllegalArgumentException(t("tutti.service.referential.import.person.notExistingId.error", id)); } - toImport.add(bean); + if (delete) { + if (persistenceService.isTemporaryPersonUsed(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.person.used.error", id)); + } + toDelete.add(id); + + } else { + toImport.add(bean); + } } importer.close(); @@ -235,12 +298,25 @@ public class ReferentialImportService extends AbstractTuttiService { } catch (IOException e) { throw new IOException(t("tutti.service.referential.import.persons.error", file), e); + + } catch (ImportRuntimeException e) { + String message; + if (e.getCause() != null) { + message = e.getCause().getMessage(); + } else { + message = e.getMessage(); + } + throw new ApplicationTechnicalException(message, e); + } finally { IOUtils.closeQuietly(reader); } - List<Person> result = - persistenceService.importTemporaryPerson(toImport); + + persistenceService.deleteTemporaryPersons(toDelete, true); + + List<Person> result = persistenceService.importTemporaryPerson(toImport); + return result; } @@ -250,56 +326,61 @@ public class ReferentialImportService extends AbstractTuttiService { } // get all vessel names - Set<String> existingGearName = Sets.newHashSet(Iterables.transform(persistenceService.getAllFishingGear(), new Function<Gear, String>() { - @Override - public String apply(Gear input) { - return input.getName(); - } - })); + List<Gear> allGears = new ArrayList<>(persistenceService.getAllFishingGear()); + allGears.addAll(persistenceService.getAllScientificGear()); - existingGearName.addAll(Lists.transform(persistenceService.getAllScientificGear(), new Function<Gear, String>() { + Set<String> existingGearNames = Sets.newHashSet(Iterables.transform(allGears, new Function<Gear, String>() { @Override public String apply(Gear input) { return input.getName(); } })); - Set<String> existingGearIds = Sets.newHashSet(Iterables.transform(persistenceService.getAllFishingGear(), new Function<Gear, String>() { - @Override - public String apply(Gear input) { - return input.getId(); - } - })); - - existingGearIds.addAll(Lists.transform(persistenceService.getAllScientificGear(), new Function<Gear, String>() { - @Override - public String apply(Gear input) { - return input.getId(); - } - })); + Set<Integer> existingGearIds = new HashSet<>(TuttiEntities.toIntegerIds(allGears)); List<Gear> toImport = Lists.newArrayList(); + List<Integer> toDelete = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); - GearModel csvModel = new GearModel(getCsvSeparator(), existingGearName); + GearModel csvModel = new GearModel(getCsvSeparator()); try { - Import<Gear> importer = Import.newImport(csvModel, reader); + Import<GearRow> importer = Import.newImport(csvModel, reader); try { - for (Gear bean : importer) { - String id = bean.getId(); - if (id != null && !existingGearIds.add(id)) { + for (GearRow bean : importer) { + + Integer id = bean.getIdAsInt(); + String name = bean.getName(); + boolean delete = BooleanUtils.isTrue(bean.getToDelete()); + + if (id != null && existingGearIds.add(id)) { throw new IllegalArgumentException(t("tutti.service.referential.import.gear.notExistingId.error", id)); + + } else if (StringUtils.isBlank(name)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.gear.noName.error", id)); + + } else if (!delete && !existingGearNames.add(name)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.gear.existingName.error", name)); } - toImport.add(bean); + if (delete) { + if (persistenceService.isTemporaryGearUsed(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.species.used.error", id)); + } + toDelete.add(id); + + } else { + toImport.add(bean); + } } importer.close(); + } finally { IOUtils.closeQuietly(importer); } reader.close(); + } catch (IOException e) { throw new IOException(t("tutti.service.referential.import.gears.error", file), e); @@ -316,7 +397,11 @@ public class ReferentialImportService extends AbstractTuttiService { IOUtils.closeQuietly(reader); } + + persistenceService.deleteTemporaryGears(toDelete, true); + List<Gear> result = persistenceService.importTemporaryGear(toImport); + return result; } @@ -354,11 +439,19 @@ public class ReferentialImportService extends AbstractTuttiService { protected void exportTemporarySpecies(File file, List<Species> toExport) throws IOException { - SpeciesModel csvModel = new SpeciesModel(getCsvSeparator(), null); + SpeciesModel csvModel = new SpeciesModel(getCsvSeparator()); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); + + List<SpeciesRow> toExportRows = Lists.transform(toExport, new Function<Species, SpeciesRow>() { + @Override + public SpeciesRow apply(Species species) { + return new SpeciesRow(species); + } + }); + try { - Export export = Export.newExport(csvModel, toExport); + Export export = Export.newExport(csvModel, toExportRows); export.write(writer); writer.close(); } catch (IOException e) { @@ -421,8 +514,16 @@ public class ReferentialImportService extends AbstractTuttiService { VesselModel csvModel = new VesselModel(getCsvSeparator()); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); + + List<VesselRow> toExportRows = Lists.transform(toExport, new Function<Vessel, VesselRow>() { + @Override + public VesselRow apply(Vessel vessel) { + return new VesselRow(vessel); + } + }); + try { - Export export = Export.newExport(csvModel, toExport); + Export export = Export.newExport(csvModel, toExportRows); export.write(writer); writer.close(); } catch (IOException e) { @@ -474,8 +575,16 @@ public class ReferentialImportService extends AbstractTuttiService { PersonModel csvModel = new PersonModel(getCsvSeparator()); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); + + List<PersonRow> toExportRows = Lists.transform(toExport, new Function<Person, PersonRow>() { + @Override + public PersonRow apply(Person person) { + return new PersonRow(person); + } + }); + try { - Export export = Export.newExport(csvModel, toExport); + Export export = Export.newExport(csvModel, toExportRows); export.write(writer); writer.close(); } catch (IOException e) { @@ -531,11 +640,19 @@ public class ReferentialImportService extends AbstractTuttiService { protected void exportTemporaryGear(File file, List<Gear> toExport) throws IOException { - GearModel csvModel = new GearModel(getCsvSeparator(), null); + GearModel csvModel = new GearModel(getCsvSeparator()); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); + + List<GearRow> toExportRows = Lists.transform(toExport, new Function<Gear, GearRow>() { + @Override + public GearRow apply(Gear gear) { + return new GearRow(gear); + } + }); + try { - Export export = Export.newExport(csvModel, toExport); + Export export = Export.newExport(csvModel, toExportRows); export.write(writer); writer.close(); } catch (IOException e) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java index 80c271d..a602edf 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java @@ -43,14 +43,14 @@ import static org.nuiton.i18n.I18n.t; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class SpeciesModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Species> { +public class SpeciesModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<SpeciesRow> { - public SpeciesModel(char separator, Set<String> existingSpeciesName) { + public SpeciesModel(char separator) { super(separator); // import definition - newMandatoryColumn(Species.PROPERTY_ID, Species.PROPERTY_ID_AS_INT, new Common.IntegerParserFormatter(null, true) { + newMandatoryColumn(SpeciesRow.PROPERTY_ID, SpeciesRow.PROPERTY_ID_AS_INT, new Common.IntegerParserFormatter(null, true) { @Override public Integer parse(String value) throws ParseException { @@ -71,17 +71,19 @@ public class SpeciesModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Sp } }); - newNotExistingValueColumn(Species.PROPERTY_NAME, existingSpeciesName, n("tutti.service.referential.import.species.existingName.error")); + newMandatoryColumn(SpeciesRow.PROPERTY_NAME); + newMandatoryColumn(SpeciesRow.PROPERTY_TO_DELETE, TuttiCsvUtil.BOOLEAN); // export definition - newColumnForExport(Species.PROPERTY_ID); - newColumnForExport(Species.PROPERTY_NAME); + newColumnForExport(SpeciesRow.PROPERTY_ID); + newColumnForExport(SpeciesRow.PROPERTY_NAME); + newColumnForExport(SpeciesRow.PROPERTY_TO_DELETE); } @Override - public Species newEmptyInstance() { - return Speciess.newSpecies(); + public SpeciesRow newEmptyInstance() { + return new SpeciesRow(); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesRow.java new file mode 100644 index 0000000..7d31e56 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesRow.java @@ -0,0 +1,35 @@ +package fr.ifremer.tutti.service.referential; + +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.persistence.entities.referential.SpeciesBean; + +/** + * @author Kevin Morin (Code Lutin) + * @since 3.8 + */ +public class SpeciesRow extends SpeciesBean { + + public static final String PROPERTY_TO_DELETE = "toDelete"; + + protected Boolean toDelete; + + public SpeciesRow() { + super(); + } + + public SpeciesRow(Species species) { + super(); + Preconditions.checkNotNull(species); + setId(species.getId()); + setName(species.getName()); + } + + public Boolean getToDelete() { + return toDelete; + } + + public void setToDelete(Boolean toDelete) { + this.toDelete = toDelete; + } +} 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 a3f63d3..bdcc1c5 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 @@ -37,14 +37,14 @@ import static org.nuiton.i18n.I18n.t; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class VesselModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Vessel> { +public class VesselModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<VesselRow> { public VesselModel(char separator) { super(separator); // import definition - newMandatoryColumn("id", Vessel.PROPERTY_REGISTRATION_CODE, new Common.StringValueParser() { + newMandatoryColumn(VesselRow.PROPERTY_ID, Vessel.PROPERTY_REGISTRATION_CODE, new Common.StringValueParser() { @Override public String parse(String value) { @@ -66,21 +66,23 @@ public class VesselModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Ves }); - newMandatoryColumn(Vessel.PROPERTY_NAME); - newMandatoryColumn(Vessel.PROPERTY_INTERNATIONAL_REGISTRATION_CODE); - newMandatoryColumn(Vessel.PROPERTY_SCIENTIFIC_VESSEL, Common.PRIMITIVE_BOOLEAN); + newMandatoryColumn(VesselRow.PROPERTY_NAME); + newMandatoryColumn(VesselRow.PROPERTY_INTERNATIONAL_REGISTRATION_CODE); + newMandatoryColumn(VesselRow.PROPERTY_SCIENTIFIC_VESSEL, Common.PRIMITIVE_BOOLEAN); + newMandatoryColumn(VesselRow.PROPERTY_TO_DELETE, TuttiCsvUtil.BOOLEAN); // export definition - newColumnForExport("id", Vessel.PROPERTY_REGISTRATION_CODE); - newColumnForExport(Vessel.PROPERTY_NAME); - newColumnForExport(Vessel.PROPERTY_INTERNATIONAL_REGISTRATION_CODE); - newColumnForExport(Vessel.PROPERTY_SCIENTIFIC_VESSEL, Common.PRIMITIVE_BOOLEAN); + newColumnForExport(VesselRow.PROPERTY_ID, Vessel.PROPERTY_REGISTRATION_CODE); + newColumnForExport(VesselRow.PROPERTY_NAME); + newColumnForExport(VesselRow.PROPERTY_INTERNATIONAL_REGISTRATION_CODE); + newColumnForExport(VesselRow.PROPERTY_SCIENTIFIC_VESSEL, Common.PRIMITIVE_BOOLEAN); + newColumnForExport(VesselRow.PROPERTY_TO_DELETE); } @Override - public Vessel newEmptyInstance() { - return Vessels.newVessel(); + public VesselRow newEmptyInstance() { + return new VesselRow(); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselRow.java new file mode 100644 index 0000000..7210e95 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselRow.java @@ -0,0 +1,38 @@ +package fr.ifremer.tutti.service.referential; + +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.persistence.entities.referential.VesselBean; + +/** + * @author Kevin Morin (Code Lutin) + * @since 3.8 + */ +public class VesselRow extends VesselBean { + + public static final String PROPERTY_TO_DELETE = "toDelete"; + + protected Boolean toDelete; + + public VesselRow() { + super(); + } + + public VesselRow(Vessel vessel) { + super(); + Preconditions.checkNotNull(vessel); + setId(vessel.getId()); + setRegistrationCode(vessel.getRegistrationCode()); + setName(vessel.getName()); + setInternationalRegistrationCode(vessel.getInternationalRegistrationCode()); + setScientificVessel(vessel.isScientificVessel()); + } + + public Boolean getToDelete() { + return toDelete; + } + + public void setToDelete(Boolean toDelete) { + this.toDelete = toDelete; + } +} 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 22a326c..7280f5c 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 @@ -218,12 +218,22 @@ tutti.service.referential.export.person.error= tutti.service.referential.export.species.error= tutti.service.referential.export.vessel.error= 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.gears.error= +tutti.service.referential.import.person.idNotNegative.error= +tutti.service.referential.import.person.notExistingId.error= +tutti.service.referential.import.person.used.error= tutti.service.referential.import.persons.error= tutti.service.referential.import.species.error= tutti.service.referential.import.species.existingName.error= tutti.service.referential.import.species.idNotNegative.error= +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.used.error= tutti.service.referential.import.vessels.error= tutti.service.referential.import.vessels.existingValue.error= tutti.service.sumatra.export.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 b7ed291..41648ed 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 @@ -198,12 +198,22 @@ tutti.service.referential.export.person.error=Erreur lors de l'export des person 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.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.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.idNotNegative.error=L'identifiant d'une personne temporaire doit être négatif \: %s +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 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.idNotNegative.error=L'identifiant d'une espèce temporaire doit être négatif : %s +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.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-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java index c708391..4861779 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java @@ -46,30 +46,30 @@ public class ReferentialExportServiceTest { protected File dataDirectory; private static final String SPECIES_FILE_CONTENT = - "id;name\n" + - ";Temporary Species name 1\n" + - ";Temporary Species name 2\n" + - ";Temporary Species name 3"; + "id;name;toDelete\n" + + ";Temporary Species name 1;\n" + + ";Temporary Species name 2;\n" + + ";Temporary Species name 3;"; private static final String GEAR_FILE_CONTENT = - "id;name;label;scientificGear\n" + - ";Gear fishing name 1;Gear fishing label 1;N\n" + - ";Gear fishing name 2;Gear fishing label 2;N\n" + - ";Gear scientific name 3;Gear scientific label 3;Y\n" + - ";Gear scientific name 4;Gear scientific label 4;Y"; + "id;name;label;scientificGear;toDelete\n" + + ";Gear fishing name 1;Gear fishing label 1;N;\n" + + ";Gear fishing name 2;Gear fishing label 2;N;\n" + + ";Gear scientific name 3;Gear scientific label 3;Y;\n" + + ";Gear scientific name 4;Gear scientific label 4;Y;"; private static final String PERSON_FILE_CONTENT = - "id;firstName;lastName\n" + - ";First name 1;Last name 1\n" + - ";First name 2;Last name 2\n" + - ";First name 3;Last name 3"; + "id;firstName;lastName;toDelete\n" + + ";First name 1;Last name 1;\n" + + ";First name 2;Last name 2;\n" + + ";First name 3;Last name 3;"; private static final String VESSEL_FILE_CONTENT = - "id;name;internationalRegistrationCode;scientificVessel\n" + - ";Temporary fishing vessel name 1;International registration code F1;N\n" + - ";Temporary fishing vessel name 2;International registration code F2;N\n" + - ";Temporary scientific vessel name 3;International registration code S3;Y\n" + - ";Temporary scientific vessel name 4;International registration code S4;Y"; + "id;name;internationalRegistrationCode;scientificVessel;toDelete\n" + + ";Temporary fishing vessel name 1;International registration code F1;N;\n" + + ";Temporary fishing vessel name 2;International registration code F2;N;\n" + + ";Temporary scientific vessel name 3;International registration code S3;Y;\n" + + ";Temporary scientific vessel name 4;International registration code S4;Y;"; protected ReferentialImportService service; 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 8a70284..6c8c4ce 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 @@ -24,10 +24,20 @@ package fr.ifremer.tutti.service.referential; import com.google.common.base.Charsets; import com.google.common.io.Files; +import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmId; +import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueId; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.Cruises; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.FishingOperations; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchs; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.ServiceDbResource; import fr.ifremer.tutti.service.TuttiServiceContext; import org.junit.Assert; @@ -51,46 +61,99 @@ public class ReferentialImportServiceTest { protected File dataDirectory; + // SPECIES FILES + private static final String SPECIES_FILE_CONTENT = - "id;name\n" + - ";Temporary Species name 1\n" + - ";Temporary Species name 2\n" + - ";Temporary Species name 3"; + "id;name;toDelete\n" + + ";Temporary Species name 1;\n" + + ";Temporary Species name 2;\n" + + ";Temporary Species name 3;"; + + private static final String SPECIES_DUPLICATE_NAME_FILE_CONTENT = + "id;name;toDelete\n" + + ";Temporary Species name 1;\n" + + ";Temporary Species name 1;"; + + private static final String SPECIES_BLANK_NAME_FILE_CONTENT = + "id;name;toDelete\n" + + "; ;"; private static final String SPECIES_UPDATE_FILE_CONTENT = - "id;name\n" + - "-1;Temporary Species name 11"; + "id;name;toDelete\n" + + "-1;Temporary Species name 11;N\n" + + "-2;Temporary Species name 2;Y"; + + private static final String SPECIES_DELETE_USED_FILE_CONTENT = + "id;name;toDelete\n" + + "-1;Temporary Species name 11;Y"; + + // GEAR FILES private static final String GEAR_FILE_CONTENT = - "id;name;label;scientificGear\n" + - ";Gear fishing name 1;Gear fishing label 1;N\n" + - ";Gear fishing name 2;Gear fishing label 2;N\n" + - ";Gear scientific name 3;Gear scientific label 3;Y\n" + - ";Gear scientific name 4;Gear scientific label 4;Y"; + "id;name;label;scientificGear;toDelete\n" + + ";Gear fishing name 1;Gear fishing label 1;N;\n" + + ";Gear fishing name 2;Gear fishing label 2;N;\n" + + ";Gear scientific name 3;Gear scientific label 3;Y;\n" + + ";Gear scientific name 4;Gear scientific label 4;Y;"; + + private static final String GEAR_DUPLICATE_NAME_FILE_CONTENT = + "id;name;label;scientificGear;toDelete\n" + + ";Temporary Gear name 1;;;\n" + + ";Temporary Gear name 1;;;"; + + private static final String GEAR_BLANK_NAME_FILE_CONTENT = + "id;name;label;scientificGear;toDelete\n" + + "; ;;;"; + + private static final String GEAR_UPDATE_FILE_CONTENT = + "id;name;label;scientificGear;toDelete\n" + + "-1;Temporary Gear name 11;;N;N\n" + + "-2;Temporary Gear name 2;;;Y"; + + private static final String GEAR_DELETE_USED_FILE_CONTENT = + "id;name;label;scientificGear;toDelete\n" + + "-1;Temporary Gear name 11;;;Y"; + + // PERSON FILES private static final String PERSON_FILE_CONTENT = - "id;firstName;lastName\n" + - ";First name 1;Last name 1\n" + - ";First name 2;Last name 2\n" + - ";First name 3;Last name 3"; + "id;firstName;lastName;toDelete\n" + + ";First name 1;Last name 1;\n" + + ";First name 2;Last name 2;\n" + + ";First name 3;Last name 3;"; + + private static final String PERSON_UPDATE_FILE_CONTENT = + "id;firstName;lastName;toDelete\n" + + "-1;First name 11;Last name 11;N\n" + + "-2;;;Y"; + + private static final String PERSON_DELETE_USED_FILE_CONTENT = + "id;firstName;lastName;toDelete\n" + + "-1;First name 11;Last name 11;Y"; + + // VESSEL FILES private static final String VESSEL_FILE_CONTENT = - "id;name;internationalRegistrationCode;scientificVessel\n" + - ";Temporary fishing vessel name 1;International registration code F1;N\n" + - ";Temporary fishing vessel name 2;International registration code F2;N\n" + - ";Temporary scientific vessel name 3;International registration code S3;Y\n" + - ";Temporary scientific vessel name 4;International registration code S4;Y"; + "id;name;internationalRegistrationCode;scientificVessel;toDelete\n" + + ";Temporary fishing vessel name 1;International registration code F1;N;\n" + + ";Temporary fishing vessel name 2;International registration code F2;N;\n" + + ";Temporary scientific vessel name 3;International registration code S3;Y;\n" + + ";Temporary scientific vessel name 4;International registration code S4;Y;"; private static final String DUPLICATE_VESSEL_FILE_CONTENT = - "id;name;internationalRegistrationCode;scientificVessel\n" + - ";Temporary fishing vessel name 1;International registration code F1;N\n" + - ";Temporary fishing vessel name 1;International registration code F1;N\n" + - ";Temporary fishing vessel name 2;International registration code F2;N\n" + - ";Temporary scientific vessel name 3;International registration code S3;Y\n" + - ";Temporary scientific vessel name 4;International registration code S4;Y"; + "id;name;internationalRegistrationCode;scientificVessel;toDelete\n" + + ";Temporary fishing vessel name 1;International registration code F1;N;\n" + + ";Temporary fishing vessel name 1;International registration code F1;N;\n" + + ";Temporary fishing vessel name 2;International registration code F2;N;\n" + + ";Temporary scientific vessel name 3;International registration code S3;Y;\n" + + ";Temporary scientific vessel name 4;International registration code S4;Y;"; protected ReferentialImportService service; + protected PersistenceService persistenceService; + + public static final String OPERATION_1_ID = "100108"; + @Before public void setUp() throws Exception { @@ -101,6 +164,9 @@ public class ReferentialImportServiceTest { serviceContext.getConfig().setCsvSeparator(';'); service = serviceContext.getService(ReferentialImportService.class); + + persistenceService = serviceContext.getService(PersistenceService.class); + } @Test @@ -110,15 +176,6 @@ public class ReferentialImportServiceTest { Files.createParentDirs(file); - Files.write(SPECIES_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); - // try to import not existing id - try { - service.importTemporarySpecies(file); - Assert.fail(); - } catch (ApplicationTechnicalException e) { - Assert.assertTrue(true); - } - // successful import Files.write(SPECIES_FILE_CONTENT, file, Charsets.UTF_8); @@ -136,11 +193,14 @@ public class ReferentialImportServiceTest { try { service.importTemporarySpecies(file); Assert.fail(); - } catch (ApplicationTechnicalException e) { + } catch (IllegalArgumentException | ApplicationTechnicalException e) { Assert.assertTrue(true); } - // try to update species with id -1 + // try to update species with id -1 and remove id -2 + Assert.assertNotNull(persistenceService.getSpeciesByReferenceTaxonId(-1)); + Assert.assertNotNull(persistenceService.getSpeciesByReferenceTaxonId(-2)); + Files.write(SPECIES_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); result = service.importTemporarySpecies(file); Assert.assertNotNull(result); @@ -149,6 +209,75 @@ public class ReferentialImportServiceTest { Assert.assertNotNull(actual); Assert.assertEquals("-1", actual.getId()); Assert.assertEquals("Temporary Species name 11", actual.getName()); + + Assert.assertNull(persistenceService.getSpeciesByReferenceTaxonId(-2)); + + // try to delete used species +// SpeciesBatch batch = SpeciesBatchs.newSpeciesBatch(); +// batch.setSampleCategoryId(PmfmId.SORTED_UNSORTED.getValue()); +// batch.setSampleCategoryValue(persistenceService.getSortedUnsortedCaracteristic().getQualitativeValue(0)); +// batch.setFishingOperation(persistenceService.getFishingOperation(OPERATION_1_ID)); +// batch.setSpecies(persistenceService.getSpeciesByReferenceTaxonId(-1)); +// persistenceService.createSpeciesBatch(batch, null); +// +// Files.write(SPECIES_DELETE_USED_FILE_CONTENT, file, Charsets.UTF_8); +// try { +// service.importTemporarySpecies(file); +// Assert.fail(); +// } catch (IllegalArgumentException | ApplicationTechnicalException e) { +// Assert.assertTrue(true); +// } + + } + + @Test + public void importNotExistingIdTemporarySpecies() throws Exception { + + File file = new File(dataDirectory, "importSpecies.csv"); + + Files.createParentDirs(file); + + // try to import not existing id + Files.write(SPECIES_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporarySpecies(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + } + + @Test + public void importBlankNameTemporarySpecies() throws Exception { + + File file = new File(dataDirectory, "importSpecies.csv"); + + Files.createParentDirs(file); + // try to import blank name + Files.write(SPECIES_BLANK_NAME_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporarySpecies(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + } + + @Test + public void importDuplicateTemporarySpecies() throws Exception { + + File file = new File(dataDirectory, "importSpecies.csv"); + + Files.createParentDirs(file); + + // try to import duplicate names + Files.write(SPECIES_DUPLICATE_NAME_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporarySpecies(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } } @Test @@ -183,7 +312,7 @@ public class ReferentialImportServiceTest { try { service.importTemporaryVessel(file); Assert.fail(); - } catch (ApplicationTechnicalException e) { + } catch (IllegalArgumentException | ApplicationTechnicalException e) { Assert.assertTrue(true); } } @@ -199,7 +328,7 @@ public class ReferentialImportServiceTest { try { service.importTemporaryVessel(file); Assert.fail(); - } catch (ApplicationTechnicalException e) { + } catch (IllegalArgumentException | ApplicationTechnicalException e) { // good duplicate vessel } } @@ -212,6 +341,7 @@ public class ReferentialImportServiceTest { Files.write(PERSON_FILE_CONTENT, file, Charsets.UTF_8); + // successful import List<Person> result = service.importTemporaryPerson(file); Assert.assertNotNull(result); @@ -226,6 +356,23 @@ public class ReferentialImportServiceTest { } @Test + public void importNotExistingIdTemporaryPerson() throws Exception { + + File file = new File(dataDirectory, "importPerson.csv"); + + Files.createParentDirs(file); + + // try to import not existing id + Files.write(PERSON_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporaryPerson(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + } + + @Test public void importTemporaryGear() throws Exception { File file = new File(dataDirectory, "importGear.csv"); @@ -255,4 +402,54 @@ public class ReferentialImportServiceTest { } } + @Test + public void importNotExistingIdTemporaryGear() throws Exception { + + File file = new File(dataDirectory, "importGear.csv"); + + Files.createParentDirs(file); + + // try to import not existing id + Files.write(GEAR_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporaryGear(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + } + + @Test + public void importBlankNameTemporaryGear() throws Exception { + + File file = new File(dataDirectory, "importGear.csv"); + + Files.createParentDirs(file); + // try to import blank name + Files.write(GEAR_BLANK_NAME_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporaryGear(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + } + + @Test + public void importDuplicateTemporaryGear() throws Exception { + + File file = new File(dataDirectory, "importGear.csv"); + + Files.createParentDirs(file); + + // try to import duplicate names + Files.write(GEAR_DUPLICATE_NAME_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporaryGear(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + } + } 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 25d0ee6..fe489f8 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 @@ -1366,14 +1366,14 @@ tutti.main.title.nodb=Pas de base chargée tutti.main.title.selectedCruise=Campagne %s tutti.main.title.selectedProgram=Série de campagne %s tutti.main.title.selectedProtocol=Protocole %s -tutti.manageTemporaryReferential.action.chooseExistingReferentialGearFile.export= -tutti.manageTemporaryReferential.action.chooseExistingReferentialGearFile.export.success= -tutti.manageTemporaryReferential.action.chooseExistingReferentialPersonFile.export= -tutti.manageTemporaryReferential.action.chooseExistingReferentialPersonFile.export.success= -tutti.manageTemporaryReferential.action.chooseExistingReferentialSpeciesFile.export= -tutti.manageTemporaryReferential.action.chooseExistingReferentialSpeciesFile.export.success= -tutti.manageTemporaryReferential.action.chooseExistingReferentialVesselFile.export= -tutti.manageTemporaryReferential.action.chooseExistingReferentialVesselFile.export.success= +tutti.manageTemporaryReferential.action.chooseExistingReferentialGearFile.export=Exporter +tutti.manageTemporaryReferential.action.chooseExistingReferentialGearFile.export.success=Référentiel temporaire des engins existants exporté dans le fichier %s +tutti.manageTemporaryReferential.action.chooseExistingReferentialPersonFile.export=Exporter +tutti.manageTemporaryReferential.action.chooseExistingReferentialPersonFile.export.success=Référentiel temporaire des personnes existantes exporté dans le fichier %s +tutti.manageTemporaryReferential.action.chooseExistingReferentialSpeciesFile.export=Exporter +tutti.manageTemporaryReferential.action.chooseExistingReferentialSpeciesFile.export.success=Référentiel temporaire des espèces existantes exporté dans le fichier %s +tutti.manageTemporaryReferential.action.chooseExistingReferentialVesselFile.export=Exporter +tutti.manageTemporaryReferential.action.chooseExistingReferentialVesselFile.export.success=Référentiel temporaire des navires existants exporté dans le fichier %s 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 -- 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 75d034868f81adea31fa77afc1cdb65744b5e3e5 Author: Kevin Morin <morin@codelutin.com> Date: Mon Oct 27 17:29:24 2014 +0100 refs #5997 [IMPORT] Améliorer la gestion des référentiels temporaires --- .../persistence/service/ReferentialPersistenceService.java | 14 +++++++++----- .../referential/replace/AbstractReplaceTemporaryUI.css | 7 +++++++ .../referential/replace/AbstractReplaceTemporaryUI.jaxx | 7 +++++++ .../main/resources/i18n/tutti-ui-swing_en_GB.properties | 2 ++ .../main/resources/i18n/tutti-ui-swing_fr_FR.properties | 2 ++ 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java index d7a2795..4bdcc19 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java @@ -326,7 +326,7 @@ public interface ReferentialPersistenceService extends TuttiPersistenceServiceIm * @since 3.6 */ @Transactional(readOnly = false) - @CacheEvict(value = "fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", allEntries = true) + @CacheEvict(value = {"fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", "gears"}, allEntries = true) void replaceGear(Gear source, Gear target, boolean delete); /** @@ -339,7 +339,9 @@ public interface ReferentialPersistenceService extends TuttiPersistenceServiceIm * @since 3.6 */ @Transactional(readOnly = false) - @CacheEvict(value = "fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", allEntries = true) + @CacheEvict(value = {"fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", + "species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular"}, + allEntries = true) void replaceSpecies(Species source, Species target, boolean delete); /** @@ -352,7 +354,8 @@ public interface ReferentialPersistenceService extends TuttiPersistenceServiceIm * @since 3.6 */ @Transactional(readOnly = false) - @CacheEvict(value = "fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", allEntries = true) + @CacheEvict(value = {"fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", "persons", "personById"}, + allEntries = true) void replacePerson(Person source, Person target, boolean delete); /** @@ -365,7 +368,8 @@ public interface ReferentialPersistenceService extends TuttiPersistenceServiceIm * @since 3.6 */ @Transactional(readOnly = false) - @CacheEvict(value = "fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", allEntries = true) + @CacheEvict(value = {"fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", "fishingVessels", "vesselByCode"}, + allEntries = true) void replaceVessel(Vessel source, Vessel target, boolean delete); /** @@ -382,7 +386,7 @@ public interface ReferentialPersistenceService extends TuttiPersistenceServiceIm /** * Delete the temporary gears with the given {@code idss}. * - * @param id ids of the gears to remove + * @param ids ids of the gears to remove * @param checkIfUsed to check if gear is used before trying to delete it * @since 3.8 */ diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/replace/AbstractReplaceTemporaryUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/replace/AbstractReplaceTemporaryUI.css index de63f29..82bcf0c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/replace/AbstractReplaceTemporaryUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/replace/AbstractReplaceTemporaryUI.css @@ -59,6 +59,13 @@ BeanFilterableComboBox { _help: {"tutti.replaceTemporaryReferential.field.targetList.help"}; } +#deleteCheckBox { + text: "tutti.replaceTemporaryReferential.field.delete"; + selected: {model.isDelete()}; + toolTipText: "tutti.replaceTemporaryReferential.field.delete.tip"; + _help: {"tutti.replaceTemporaryReferential.field.delete.help"}; +} + #replaceButton { actionIcon: replace; text: "tutti.replaceTemporaryReferential.action.replace"; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/replace/AbstractReplaceTemporaryUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/replace/AbstractReplaceTemporaryUI.jaxx index f9c0e40..18e8810 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/replace/AbstractReplaceTemporaryUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/replace/AbstractReplaceTemporaryUI.jaxx @@ -71,6 +71,13 @@ </row> <row> + <cell anchor="west" fill="both" columns="2"> + <JCheckBox id='deleteCheckBox' + onItemStateChanged='model.setDelete(event.getStateChange() == ItemEvent.SELECTED)'/> + </cell> + </row> + + <row> <cell columns='2' fill='both'> <JSeparator/> </cell> 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 b9b2c86..7ce6de1 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 @@ -1561,6 +1561,8 @@ tutti.replaceTemporaryReferential.action.cancel.tip= tutti.replaceTemporaryReferential.action.replace= tutti.replaceTemporaryReferential.action.replace.mnemonic= tutti.replaceTemporaryReferential.action.replace.tip= +tutti.replaceTemporaryReferential.field.delete= +tutti.replaceTemporaryReferential.field.delete.tip= tutti.replaceTemporaryReferential.field.sourceList= tutti.replaceTemporaryReferential.field.sourceList.tip= tutti.replaceTemporaryReferential.field.targetList= 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 fe489f8..72597ac 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 @@ -1491,6 +1491,8 @@ tutti.replaceTemporaryReferential.action.cancel.tip=Annuler le remplacement tutti.replaceTemporaryReferential.action.replace=Remplacer tutti.replaceTemporaryReferential.action.replace.mnemonic=R tutti.replaceTemporaryReferential.action.replace.tip=Remplacer le référentiel temporaire sélectionné +tutti.replaceTemporaryReferential.field.delete=Supprimer la donnée temporaire après le remplacement +tutti.replaceTemporaryReferential.field.delete.tip=Supprimer la donnée temporaire après le remplacement tutti.replaceTemporaryReferential.field.sourceList=Référentiel temporaire tutti.replaceTemporaryReferential.field.sourceList.tip=Sélectionner le référentiel temporaire à remplacer tutti.replaceTemporaryReferential.field.targetList=Référentiel officiel -- 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 cb4c611f5866f6b20108f532f3d3547a11a6c0fb Author: Kevin Morin <morin@codelutin.com> Date: Tue Oct 28 10:28:17 2014 +0100 fixes #5997 [IMPORT] Améliorer la gestion des référentiels temporaires --- .../referential/ReferentialImportServiceTest.java | 35 ++++++++++++---------- 1 file changed, 19 insertions(+), 16 deletions(-) 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 6c8c4ce..e598395 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 @@ -56,8 +56,7 @@ import java.util.List; public class ReferentialImportServiceTest { @ClassRule - public static final ServiceDbResource dbResource = - ServiceDbResource.writeDb("dbCGFS"); + public static final ServiceDbResource dbResource = ServiceDbResource.writeDb("dbCGFS"); protected File dataDirectory; @@ -213,20 +212,18 @@ public class ReferentialImportServiceTest { Assert.assertNull(persistenceService.getSpeciesByReferenceTaxonId(-2)); // try to delete used species -// SpeciesBatch batch = SpeciesBatchs.newSpeciesBatch(); -// batch.setSampleCategoryId(PmfmId.SORTED_UNSORTED.getValue()); -// batch.setSampleCategoryValue(persistenceService.getSortedUnsortedCaracteristic().getQualitativeValue(0)); -// batch.setFishingOperation(persistenceService.getFishingOperation(OPERATION_1_ID)); -// batch.setSpecies(persistenceService.getSpeciesByReferenceTaxonId(-1)); -// persistenceService.createSpeciesBatch(batch, null); -// -// Files.write(SPECIES_DELETE_USED_FILE_CONTENT, file, Charsets.UTF_8); -// try { -// service.importTemporarySpecies(file); -// Assert.fail(); -// } catch (IllegalArgumentException | ApplicationTechnicalException e) { -// Assert.assertTrue(true); -// } + SpeciesBatch batch = persistenceService.getRootSpeciesBatch(OPERATION_1_ID, false).getChildren().get(0); + batch.setFishingOperation(persistenceService.getFishingOperation(OPERATION_1_ID)); + batch.setSpecies(persistenceService.getSpeciesByReferenceTaxonId(-1)); + persistenceService.saveSpeciesBatch(batch); + + Files.write(SPECIES_DELETE_USED_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporarySpecies(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } } @@ -315,6 +312,8 @@ public class ReferentialImportServiceTest { } catch (IllegalArgumentException | ApplicationTechnicalException e) { Assert.assertTrue(true); } + + // TODO test to replace a used vessel } @Test @@ -353,6 +352,8 @@ public class ReferentialImportServiceTest { Assert.assertEquals("First name " + i, actual.getFirstName()); Assert.assertEquals("Last name " + i, actual.getLastName()); } + + // TODO test to replace a used person } @Test @@ -400,6 +401,8 @@ public class ReferentialImportServiceTest { Assert.assertEquals("Gear scientific label " + i, actual.getLabel()); Assert.assertTrue(actual.isScientificGear()); } + + // TODO test to replace a used gear } @Test -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm