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 3982fac7e30ed6cfd9d5bbc06666765cb9aaccf9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 4 10:05:52 2014 +0100 refs #5997: [IMPORT] Améliorer la gestion des référentiels temporaires --- .../tutti/persistence/TuttiPersistenceImpl.java | 20 ++++++ .../persistence/TuttiPersistenceNoDbImpl.java | 20 ++++++ .../referential/GearPersistenceService.java | 10 +++ .../referential/GearPersistenceServiceImpl.java | 41 ++++++++--- .../referential/PersonPersistenceService.java | 38 ++++++---- .../referential/PersonPersistenceServiceImpl.java | 80 ++++++++++++--------- .../ReferentialPersistenceServiceSupport.java | 7 +- .../referential/SpeciesPersistenceService.java | 21 ++++-- .../referential/SpeciesPersistenceServiceImpl.java | 46 +++++++++--- .../referential/VesselPersistenceService.java | 21 ++++-- .../referential/VesselPersistenceServiceImpl.java | 43 +++++++++--- .../ifremer/tutti/service/PersistenceService.java | 82 +++++++++++++++++++++- .../referential/ReferentialExportService.java | 8 +-- .../referential/ReferentialImportService.java | 8 +-- tutti-service/src/test/resources/log4j.properties | 3 + .../AbstractOpenReplaceTemporaryUIAction.java | 4 +- .../action/OpenReplaceTemporaryGearUIAction.java | 5 ++ .../action/OpenReplaceTemporaryPersonUIAction.java | 5 ++ .../OpenReplaceTemporarySpeciesUIAction.java | 5 ++ .../action/OpenReplaceTemporaryVesselUIAction.java | 5 ++ .../swing/content/cruise/EditCruiseUIHandler.java | 2 +- 21 files changed, 372 insertions(+), 102 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 905ece3..3e0d79b 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 @@ -455,6 +455,11 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override + public boolean isTemporaryGear(Gear gear) { + return gearService.isTemporaryGear(gear); + } + + @Override public boolean isTemporaryGearUsed(Integer id) { return gearService.isTemporaryGearUsed(id); } @@ -508,6 +513,11 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override + public boolean isTemporarySpecies(Species species) { + return speciesService.isTemporarySpecies(species); + } + + @Override public boolean isTemporarySpeciesUsed(Integer id) { return speciesService.isTemporarySpeciesUsed(id); } @@ -547,6 +557,11 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override + public boolean isTemporaryPerson(Person person) { + return personService.isTemporaryPerson(person); + } + + @Override public boolean isTemporaryPersonUsed(Integer id) { return personService.isTemporaryPersonUsed(id); } @@ -591,6 +606,11 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override + public boolean isTemporaryVessel(Vessel vessel) { + return vesselService.isTemporaryVessel(vessel); + } + + @Override public boolean isTemporaryVesselUsed(String code) { return vesselService.isTemporaryVesselUsed(code); } 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 c851bd7..2efc8b4 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 @@ -815,6 +815,26 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { throw notImplemented(); } + @Override + public boolean isTemporaryGear(Gear gear) { + throw notImplemented(); + } + + @Override + public boolean isTemporaryPerson(Person person) { + throw notImplemented(); + } + + @Override + public boolean isTemporarySpecies(Species species) { + throw notImplemented(); + } + + @Override + public boolean isTemporaryVessel(Vessel vessel) { + throw notImplemented(); + } + protected RuntimeException notImplemented() { return new RuntimeException("method not implemented"); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/GearPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/GearPersistenceService.java index b1db9f0..ac950d4 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/GearPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/GearPersistenceService.java @@ -2,6 +2,7 @@ package fr.ifremer.tutti.persistence.service.referential; import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.Person; import org.springframework.cache.annotation.CacheEvict; import org.springframework.transaction.annotation.Transactional; @@ -24,6 +25,15 @@ public interface GearPersistenceService extends TuttiPersistenceServiceImplement Gear getGear(Integer gearId); /** + * Is the given {@code gear} a temporary data ? + * + * @param gear gear to test + * @return {@code true} if the given {@code gear} is temporary + * @since 3.8 + */ + boolean isTemporaryGear(Gear gear); + + /** * Check if the temporary gear with the given {@code id} is used. * * @param id id of the gear to remove diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/GearPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/GearPersistenceServiceImpl.java index 31b2caa..0fefca1 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/GearPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/GearPersistenceServiceImpl.java @@ -43,10 +43,12 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup result.add(target); } return Collections.unmodifiableList(result); + } @Override public List<Gear> getAllFishingGear() { + Iterator<Object[]> sources = queryListWithStatus( "allGears", "gearClassificiationId", IntegerType.INSTANCE, GearClassificationId.FAO.getValue()); @@ -57,16 +59,29 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup result.add(target); } return Collections.unmodifiableList(result); + } @Override public Gear getGear(Integer gearId) { + Object[] source = queryUnique( "gear", "gearId", IntegerType.INSTANCE, gearId); Gear result = source == null ? null : loadGear(source); return result; + + } + + @Override + public boolean isTemporaryGear(Gear entity) { + + Preconditions.checkState(isStatusTemporary(entity)); + Preconditions.checkNotNull(entity.getId()); + + return entity.getIdAsInt() < 0; + } @Override @@ -83,6 +98,7 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup @Override public List<Gear> importTemporaryGear(List<Gear> gears) { + List<Gear> result = Lists.newArrayList(); fr.ifremer.adagio.core.dao.referential.Status status = @@ -92,6 +108,7 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup result.add(source); } return Collections.unmodifiableList(result); + } @Override @@ -99,8 +116,8 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup Preconditions.checkNotNull(source); Preconditions.checkNotNull(target); - Preconditions.checkState(isTemporary(source)); - Preconditions.checkState(!isTemporary(target)); + Preconditions.checkState(isTemporaryGear(source)); + Preconditions.checkState(!isTemporaryGear(target)); Integer sourceId = source.getIdAsInt(); Integer targetId = target.getIdAsInt(); @@ -124,6 +141,15 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup } @Override + public void deleteTemporaryGears(Collection<Integer> ids, boolean checkIfUsed) { + + for (Integer id : ids) { + deleteTemporaryGear(id, checkIfUsed); + } + + } + + @Override public void deleteTemporaryGear(Integer id, boolean checkIfUsed) { Preconditions.checkNotNull(id); @@ -139,14 +165,8 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup } - @Override - public void deleteTemporaryGears(Collection<Integer> ids, boolean checkIfUsed) { - for (Integer id : ids) { - deleteTemporaryGear(id, checkIfUsed); - } - } - protected Gear importTemporaryGear(Gear source, fr.ifremer.adagio.core.dao.referential.Status status) { + Preconditions.checkNotNull(source); Preconditions.checkNotNull(source.getLabel()); Preconditions.checkNotNull(source.getName()); @@ -174,9 +194,11 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup result.setScientificGear(source.isScientificGear()); setStatus(status, result); return result; + } protected Gear loadGear(Object[] source) { + Gear result = Gears.newGear(); result.setId(String.valueOf(source[0])); result.setLabel((String) source[1]); @@ -190,5 +212,6 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup setStatus((fr.ifremer.adagio.core.dao.referential.Status) source[4], result); return result; + } } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/PersonPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/PersonPersistenceService.java index 94a920a..ae844a0 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/PersonPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/PersonPersistenceService.java @@ -25,6 +25,24 @@ public interface PersonPersistenceService extends TuttiPersistenceServiceImpleme Person getPerson(Integer personId); /** + * Is the given {@code person} a temporary data ? + * + * @param person person to test + * @return {@code true} if the given {@code person} is temporary + * @since 3.8 + */ + boolean isTemporaryPerson(Person person); + + + /** + * 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); + + /** * Import given temporary persons. * * @param persons persons to import @@ -49,32 +67,24 @@ public interface PersonPersistenceService extends TuttiPersistenceServiceImpleme void replacePerson(Person source, Person target, boolean delete); /** - * Delete the temporary person with the given {@code id}. + * Delete the temporary persons with the given {@code ids}. * - * @param id id of the person to remove + * @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 deleteTemporaryPerson(Integer id, boolean checkIfUsed); + void deleteTemporaryPersons(Collection<Integer> ids, boolean checkIfUsed); /** - * Delete the temporary persons with the given {@code ids}. + * Delete the temporary person with the given {@code id}. * - * @param ids ids of the persons to remove + * @param id id of the person 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); - - /** - * 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); + void deleteTemporaryPerson(Integer id, boolean checkIfUsed); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/PersonPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/PersonPersistenceServiceImpl.java index a3ae17e..3f1ea12 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/PersonPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/PersonPersistenceServiceImpl.java @@ -66,6 +66,39 @@ public class PersonPersistenceServiceImpl extends ReferentialPersistenceServiceS } @Override + public boolean isTemporaryPerson(Person entity) { + + Preconditions.checkState(isStatusTemporary(entity)); + Preconditions.checkNotNull(entity.getId()); + + return entity.getIdAsInt() < 0; + + } + + @Override + public boolean isTemporaryPersonUsed(Integer id) { + Long count = queryUniqueTyped("countManagerPersonInScientificCruise", "id", IntegerType.INSTANCE, id); + boolean result = count > 0; + + if (!result) { + count = queryUniqueTyped("countRecorderPersonInScientificCruise", "id", IntegerType.INSTANCE, id); + result = count > 0; + } + + if (!result) { + count = queryUniqueTyped("countRecorderPersonInFishingTrip", "id", IntegerType.INSTANCE, id); + result = count > 0; + } + + if (!result) { + count = queryUniqueTyped("countPersonInVesselPersonFeatures", "id", IntegerType.INSTANCE, id); + result = count > 0; + } + + return result; + } + + @Override public List<Person> importTemporaryPerson(List<Person> persons) { List<Person> result = Lists.newArrayList(); @@ -85,8 +118,8 @@ public class PersonPersistenceServiceImpl extends ReferentialPersistenceServiceS Preconditions.checkNotNull(source); Preconditions.checkNotNull(target); - Preconditions.checkState(isTemporary(source)); - Preconditions.checkState(!isTemporary(target)); + Preconditions.checkState(isTemporaryPerson(source)); + Preconditions.checkState(!isTemporaryPerson(target)); Integer sourceId = source.getIdAsInt(); Integer targetId = target.getIdAsInt(); @@ -120,6 +153,15 @@ public class PersonPersistenceServiceImpl extends ReferentialPersistenceServiceS } @Override + public void deleteTemporaryPersons(Collection<Integer> ids, boolean checkIfUsed) { + + for (Integer id : ids) { + deleteTemporaryPerson(id, checkIfUsed); + } + + } + + @Override public void deleteTemporaryPerson(Integer id, boolean checkIfUsed) { Preconditions.checkNotNull(id); @@ -134,37 +176,8 @@ public class PersonPersistenceServiceImpl extends ReferentialPersistenceServiceS } - @Override - public void deleteTemporaryPersons(Collection<Integer> ids, boolean checkIfUsed) { - for (Integer id : ids) { - deleteTemporaryPerson(id, checkIfUsed); - } - } - - @Override - public boolean isTemporaryPersonUsed(Integer id) { - Long count = queryUniqueTyped("countManagerPersonInScientificCruise", "id", IntegerType.INSTANCE, id); - boolean result = count > 0; - - if (!result) { - count = queryUniqueTyped("countRecorderPersonInScientificCruise", "id", IntegerType.INSTANCE, id); - result = count > 0; - } - - if (!result) { - count = queryUniqueTyped("countRecorderPersonInFishingTrip", "id", IntegerType.INSTANCE, id); - result = count > 0; - } - - if (!result) { - count = queryUniqueTyped("countPersonInVesselPersonFeatures", "id", IntegerType.INSTANCE, id); - result = count > 0; - } - - return result; - } - protected Person loadPerson(Object[] source) { + Person target = Persons.newPerson(); target.setId(String.valueOf(source[0])); target.setLastName((String) source[1]); @@ -172,9 +185,11 @@ public class PersonPersistenceServiceImpl extends ReferentialPersistenceServiceS target.setDepartment((String) source[3]); setStatus((fr.ifremer.adagio.core.dao.referential.Status) source[4], target); return target; + } protected Person importTemporaryPerson(Person source, fr.ifremer.adagio.core.dao.referential.Status status) { + Preconditions.checkNotNull(source); Preconditions.checkNotNull(source.getFirstName()); Preconditions.checkNotNull(source.getLastName()); @@ -196,6 +211,7 @@ public class PersonPersistenceServiceImpl extends ReferentialPersistenceServiceS result.setFirstName(source.getFirstName()); setStatus(status, result); return result; + } } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/ReferentialPersistenceServiceSupport.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/ReferentialPersistenceServiceSupport.java index a3bb498..8d3193b 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/ReferentialPersistenceServiceSupport.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/ReferentialPersistenceServiceSupport.java @@ -28,14 +28,11 @@ public abstract class ReferentialPersistenceServiceSupport extends AbstractPersi @Resource(name = "cacheService") protected CacheService cacheService; - public boolean isTemporary(TuttiReferentialEntity entity) { + public boolean isStatusTemporary(TuttiReferentialEntity entity) { Preconditions.checkNotNull(entity); - Preconditions.checkNotNull(entity.getId()); Preconditions.checkNotNull(entity.getStatus()); - return StatusCode.TEMPORARY.getValue().equals(entity.getStatus().getId()) && - (entity.getIdAsInt() != null && entity.getIdAsInt() < 0 - || entity.getId() != null && entity.getId().startsWith(TemporaryDataHelper.TEMPORARY_NAME_PREFIX)); + return StatusCode.TEMPORARY.getValue().equals(entity.getStatus().getId()); } protected Iterator<Object[]> queryListWithStatus(String queryName, diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/SpeciesPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/SpeciesPersistenceService.java index 892d85f..e9325a0 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/SpeciesPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/SpeciesPersistenceService.java @@ -60,6 +60,15 @@ public interface SpeciesPersistenceService extends TuttiPersistenceServiceImplem Species getSpeciesByReferenceTaxonIdWithVernacularCode(Integer referenceTaxonId); /** + * Is the given {@code species} a temporary data ? + * + * @param species species to test + * @return {@code true} if the given {@code species} is temporary + * @since 3.8 + */ + boolean isTemporarySpecies(Species species); + + /** * Check if the temporary species with the given {@code id} is used. * * @param id id of the species to check @@ -93,25 +102,25 @@ public interface SpeciesPersistenceService extends TuttiPersistenceServiceImplem void replaceSpecies(Species source, Species target, boolean delete); /** - * Delete the temporary species with the given {@code id}. + * Delete the temporary species with the given {@code ids}. * - * @param id id of the species to remove + * @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(Integer id, boolean checkIfUsed); + void deleteTemporarySpecies(Collection<Integer> ids, boolean checkIfUsed); /** - * Delete the temporary species with the given {@code ids}. + * Delete the temporary species with the given {@code id}. * - * @param ids ids of the species to remove + * @param id id 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); + void deleteTemporarySpecies(Integer id, boolean checkIfUsed); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/SpeciesPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/SpeciesPersistenceServiceImpl.java index 3377430..30fdb2e 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/SpeciesPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/SpeciesPersistenceServiceImpl.java @@ -63,6 +63,7 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService allReferentSpeciesCache.put("", referenceTaxonsOnly); return Collections.unmodifiableList(result); + } @Override @@ -84,10 +85,12 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService result.add(target); } return Collections.unmodifiableList(result); + } @Override public Species getSpeciesByReferenceTaxonId(Integer referenceTaxonId) { + Species result = getSpeciesByReferenceTaxonId( referenceTaxonId, TranscribingItemTypeId.TAXON_NAME_REFTAX_CODE.getValue()); @@ -95,10 +98,12 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService result.setRefTaxCode(result.getExternalCode()); } return result; + } @Override public Species getSpeciesByReferenceTaxonIdWithVernacularCode(Integer referenceTaxonId) { + Species result = getSpeciesByReferenceTaxonId( referenceTaxonId, TranscribingItemTypeId.TAXON_NAME_LOCAL_NAME.getValue()); @@ -106,10 +111,12 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService result.setVernacularCode(result.getExternalCode()); } return result; + } protected Species getSpeciesByReferenceTaxonId(Integer referenceTaxonId, Integer transcribingTypeId) { + Species target; try { TaxonRefVO source = taxonNameDao.getTaxonNameReferent( @@ -119,10 +126,22 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService target = null; } return target; + + } + + @Override + public boolean isTemporarySpecies(Species entity) { + + Preconditions.checkState(isStatusTemporary(entity)); + Preconditions.checkNotNull(entity.getId()); + + return entity.getIdAsInt() < 0; + } @Override public boolean isTemporarySpeciesUsed(Integer id) { + Long count = queryUniqueTyped("countReferenceTaxonInSortingBatch", "id", IntegerType.INSTANCE, id); boolean result = count > 0; @@ -131,16 +150,19 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService result = count > 0; } return result; + } @Override public List<Species> importTemporarySpecies(List<Species> species) { + List<Species> result = Lists.newArrayList(); for (Species source : species) { source = importTemporarySpecies(source); result.add(source); } return Collections.unmodifiableList(result); + } @Override @@ -148,8 +170,8 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService Preconditions.checkNotNull(source); Preconditions.checkNotNull(target); - Preconditions.checkState(isTemporary(source)); - Preconditions.checkState(!isTemporary(target)); + Preconditions.checkState(isTemporarySpecies(source)); + Preconditions.checkState(!isTemporarySpecies(target)); Integer sourceId = source.getReferenceTaxonId(); Integer targetId = target.getReferenceTaxonId(); @@ -173,6 +195,15 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService } @Override + public void deleteTemporarySpecies(Collection<Integer> ids, boolean checkIfUsed) { + + for (Integer id : ids) { + deleteTemporarySpecies(id, checkIfUsed); + } + + } + + @Override public void deleteTemporarySpecies(Integer id, boolean checkIfUsed) { Preconditions.checkNotNull(id); @@ -192,14 +223,8 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService } - @Override - public void deleteTemporarySpecies(Collection<Integer> ids, boolean checkIfUsed) { - for (Integer id : ids) { - deleteTemporarySpecies(id, checkIfUsed); - } - } - protected Species importTemporarySpecies(Species source) { + Preconditions.checkNotNull(source); Preconditions.checkNotNull(source.getName()); Preconditions.checkArgument(source.getIdAsInt() == null || source.getIdAsInt() < 0); @@ -230,9 +255,11 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService cache.put(result.getIdAsInt(), result); return result; + } protected Species loadSpecies(TaxonRefVO source) { + Species target = Speciess.newSpecies(); target.setId(source.getTaxonNameId()); target.setName(source.getName()); @@ -242,5 +269,6 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService fr.ifremer.adagio.core.dao.referential.Status status = statusDao.load(source.getStatus().getValue()); setStatus(status, target); return target; + } } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/VesselPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/VesselPersistenceService.java index 0e8986c..b08de30 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/VesselPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/VesselPersistenceService.java @@ -45,6 +45,15 @@ public interface VesselPersistenceService extends TuttiPersistenceServiceImpleme Vessel getVessel(String vesselCode); /** + * Is the given {@code vessel} a temporary data ? + * + * @param vessel vessel to test + * @return {@code true} if the given {@code vessel} is temporary + * @since 3.8 + */ + boolean isTemporaryVessel(Vessel vessel); + + /** * Check if the temporary vessel with the given {@code id} is used. * * @param code code of the vessel to remove @@ -77,25 +86,25 @@ public interface VesselPersistenceService extends TuttiPersistenceServiceImpleme void replaceVessel(Vessel source, Vessel target, boolean delete); /** - * Delete the temporary vessel with the given {@code code}. + * Delete the temporary vessels with the given {@code codes}. * - * @param code code of the vessel to remove + * @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 deleteTemporaryVessel(String code, boolean checkIfUsed); + void deleteTemporaryVessels(Collection<String> codes, boolean checkIfUsed); /** - * Delete the temporary vessels with the given {@code codes}. + * Delete the temporary vessel with the given {@code code}. * - * @param codes code of the vessels to remove + * @param code code of the vessel 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); + void deleteTemporaryVessel(String code, boolean checkIfUsed); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/VesselPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/VesselPersistenceServiceImpl.java index aa3dc4a..a136745 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/VesselPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/VesselPersistenceServiceImpl.java @@ -65,10 +65,12 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS vesselByCodeCache.put(target.getId(), target); } return Collections.unmodifiableList(result); + } @Override public List<Vessel> getAllFishingVessel() { + Iterator<Object[]> list = queryListWithStatus( "allVessels", "refDate", DateType.INSTANCE, new Date(), @@ -88,10 +90,12 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS vesselByCodeCache.put(target.getId(), target); } return Collections.unmodifiableList(result); + } @Override public Vessel getVessel(String vesselCode) { + if (log.isDebugEnabled()) { log.debug("get vessel: " + vesselCode); } @@ -108,10 +112,22 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS else result = null; return result; + + } + + @Override + public boolean isTemporaryVessel(Vessel vessel) { + + Preconditions.checkState(isStatusTemporary(vessel)); + Preconditions.checkNotNull(vessel.getId()); + + return vessel.getId().startsWith(TemporaryDataHelper.TEMPORARY_NAME_PREFIX); + } @Override public boolean isTemporaryVesselUsed(String code) { + Long count = queryUniqueTyped("countVesselInCruise", "id", StringType.INSTANCE, code); boolean result = count > 0; @@ -156,10 +172,12 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS } return result; + } @Override public List<Vessel> importTemporaryVessel(List<Vessel> vessels) { + List<Vessel> result = Lists.newArrayList(); fr.ifremer.adagio.core.dao.referential.Status status = @@ -177,6 +195,7 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS result.add(source); } return Collections.unmodifiableList(result); + } @Override @@ -184,8 +203,8 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS Preconditions.checkNotNull(source); Preconditions.checkNotNull(target); - Preconditions.checkState(isTemporary(source)); - Preconditions.checkState(!isTemporary(target)); + Preconditions.checkState(isTemporaryVessel(source)); + Preconditions.checkState(!isTemporaryVessel(target)); String sourceId = source.getId(); String targetId = target.getId(); @@ -237,6 +256,15 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS } @Override + public void deleteTemporaryVessels(Collection<String> codes, boolean checkIfUsed) { + + for (String code : codes) { + deleteTemporaryVessel(code, checkIfUsed); + } + + } + + @Override public void deleteTemporaryVessel(String code, boolean checkIfUsed) { Preconditions.checkNotNull(code); @@ -252,14 +280,8 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS } - @Override - public void deleteTemporaryVessels(Collection<String> codes, boolean checkIfUsed) { - for (String code : codes) { - deleteTemporaryVessel(code, checkIfUsed); - } - } - protected Vessel importTemporaryVessel(Vessel source, Integer registrationLocationId, fr.ifremer.adagio.core.dao.referential.Status status) { + Preconditions.checkNotNull(source); Preconditions.checkNotNull(source.getName()); Preconditions.checkNotNull(source.getInternationalRegistrationCode()); @@ -288,9 +310,11 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS result.setScientificVessel(source.isScientificVessel()); setStatus(status, result); return result; + } protected Vessel loadVessel(Object[] source, boolean scientificVessel) { + Vessel target = Vessels.newVessel(); target.setId((String) source[0]); target.setRegistrationCode((String) source[1]); @@ -299,6 +323,7 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS target.setScientificVessel(scientificVessel); setStatus((fr.ifremer.adagio.core.dao.referential.Status) source[4], target); return target; + } } 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 b9e5026..041494d 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 @@ -35,6 +35,7 @@ import fr.ifremer.tutti.persistence.TuttiPersistence; import fr.ifremer.tutti.persistence.TuttiPersistenceNoDbImpl; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.TuttiEntity; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.BatchContainer; @@ -106,6 +107,34 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer protected TuttiPersistence driver; + private final Predicate<Gear> isTemporaryGearPredicate = new Predicate<Gear>() { + @Override + public boolean apply(Gear input) { + return isTemporaryGear(input); + } + }; + + private final Predicate<Person> isTemporaryPersonPredicate = new Predicate<Person>() { + @Override + public boolean apply(Person input) { + return isTemporaryPerson(input); + } + }; + + private final Predicate<Species> isTemporarySpeciesPredicate = new Predicate<Species>() { + @Override + public boolean apply(Species input) { + return isTemporarySpecies(input); + } + }; + + private final Predicate<Vessel> isTemporaryVesselPredicate = new Predicate<Vessel>() { + @Override + public boolean apply(Vessel input) { + return isTemporaryVessel(input); + } + }; + @Override public void setServiceContext(TuttiServiceContext context) { super.setServiceContext(context); @@ -113,12 +142,40 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer init(); } - public <E extends TuttiReferentialEntity> List<E> retainTemporaryList(List<E> targetList) { + public List<Gear> retainTemporaryGearList(List<Gear> targetList) { + + List<Gear> sourceList = retainTemporaryList(isTemporaryGearPredicate, targetList); + return sourceList; + + } + + public List<Person> retainTemporaryPersonList(List<Person> targetList) { + + List<Person> sourceList = retainTemporaryList(isTemporaryPersonPredicate, targetList); + return sourceList; + + } + + public List<Species> retainTemporarySpeciesList(List<Species> targetList) { + + List<Species> sourceList = retainTemporaryList(isTemporarySpeciesPredicate, targetList); + return sourceList; + + } + + public List<Vessel> retainTemporaryVesselList(List<Vessel> targetList) { + + List<Vessel> sourceList = retainTemporaryList(isTemporaryVesselPredicate, targetList); + return sourceList; + + } + + public <E extends TuttiEntity> List<E> retainTemporaryList(Predicate<E> isTemporaryPredicate, List<E> targetList) { List<E> sourceList = new ArrayList<>(); Iterator<E> iterator = targetList.iterator(); while (iterator.hasNext()) { E next = iterator.next(); - if (isTemporary(next)) { + if (isTemporaryPredicate.apply(next)) { iterator.remove(); sourceList.add(next); } @@ -126,6 +183,7 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer return sourceList; } + public static interface FrequencyFunction<S extends SpeciesAbleBatch, F extends SpeciesAbleBatchFrequency> extends Function<S, List<F>> { } @@ -1027,6 +1085,26 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override + public boolean isTemporaryGear(Gear gear) { + return driver.isTemporaryGear(gear); + } + + @Override + public boolean isTemporaryPerson(Person person) { + return driver.isTemporaryPerson(person); + } + + @Override + public boolean isTemporarySpecies(Species species) { + return driver.isTemporarySpecies(species); + } + + @Override + public boolean isTemporaryVessel(Vessel vessel) { + return driver.isTemporaryVessel(vessel); + } + + @Override public boolean isTemporaryPersonUsed(Integer id) { return driver.isTemporaryPersonUsed(id); } 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 35fd6c5..22f82dc 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 @@ -68,7 +68,7 @@ public class ReferentialExportService extends AbstractTuttiService { List<Species> targetList = Lists.newArrayList(persistenceService.getAllReferentSpecies()); - List<Species> toExport = persistenceService.retainTemporaryList(targetList); + List<Species> toExport = persistenceService.retainTemporarySpeciesList(targetList); exportTemporarySpecies(file, toExport); @@ -128,7 +128,7 @@ public class ReferentialExportService extends AbstractTuttiService { List<Vessel> targetList = Lists.newArrayList(persistenceService.getAllFishingVessel()); targetList.addAll(persistenceService.getAllScientificVessel()); - List<Vessel> toExport = persistenceService.retainTemporaryList(targetList); + List<Vessel> toExport = persistenceService.retainTemporaryVesselList(targetList); exportTemporaryVessel(file, toExport); @@ -202,7 +202,7 @@ public class ReferentialExportService extends AbstractTuttiService { List<Person> targetList = Lists.newArrayList(persistenceService.getAllPerson()); - List<Person> toExport = persistenceService.retainTemporaryList(targetList); + List<Person> toExport = persistenceService.retainTemporaryPersonList(targetList); exportTemporaryPerson(file, toExport); @@ -264,7 +264,7 @@ public class ReferentialExportService extends AbstractTuttiService { List<Gear> targetList = Lists.newArrayList(persistenceService.getAllFishingGear()); targetList.addAll(persistenceService.getAllScientificGear()); - List<Gear> toExport = persistenceService.retainTemporaryList(targetList); + List<Gear> toExport = persistenceService.retainTemporaryGearList(targetList); exportTemporaryGear(file, toExport); 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 d63ce21..2174971 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 @@ -505,7 +505,7 @@ public class ReferentialImportService extends AbstractTuttiService { List<Species> targetList = Lists.newArrayList(persistenceService.getAllReferentSpecies()); - List<Species> toExport = persistenceService.retainTemporaryList(targetList); + List<Species> toExport = persistenceService.retainTemporarySpeciesList(targetList); exportTemporarySpecies(file, toExport); @@ -565,7 +565,7 @@ public class ReferentialImportService extends AbstractTuttiService { List<Vessel> targetList = Lists.newArrayList(persistenceService.getAllFishingVessel()); targetList.addAll(persistenceService.getAllScientificVessel()); - List<Vessel> toExport = persistenceService.retainTemporaryList(targetList); + List<Vessel> toExport = persistenceService.retainTemporaryVesselList(targetList); exportTemporaryVessel(file, toExport); @@ -635,7 +635,7 @@ public class ReferentialImportService extends AbstractTuttiService { List<Person> targetList = Lists.newArrayList(persistenceService.getAllPerson()); - List<Person> toExport = persistenceService.retainTemporaryList(targetList); + List<Person> toExport = persistenceService.retainTemporaryPersonList(targetList); exportTemporaryPerson(file, toExport); @@ -697,7 +697,7 @@ public class ReferentialImportService extends AbstractTuttiService { List<Gear> targetList = Lists.newArrayList(persistenceService.getAllFishingGear()); targetList.addAll(persistenceService.getAllScientificGear()); - List<Gear> toExport = persistenceService.retainTemporaryList(targetList); + List<Gear> toExport = persistenceService.retainTemporaryGearList(targetList); exportTemporaryGear(file, toExport); diff --git a/tutti-service/src/test/resources/log4j.properties b/tutti-service/src/test/resources/log4j.properties index 92a6861..faeb4ee 100644 --- a/tutti-service/src/test/resources/log4j.properties +++ b/tutti-service/src/test/resources/log4j.properties @@ -33,3 +33,6 @@ log4j.logger.org.nuiton.i18n=ERROR #See https://forum.hibernate.org/viewtopic.php?p=2404391 log4j.logger.org.hibernate.engine.StatefulPersistenceContext.ProxyWarnLog=ERROR +log4j.logger.org.hibernate.engine.internal.StatefulPersistenceContext=ERROR +log4j.logger.net.sf.ehcache.config.CacheConfiguration=ERROR +log4j.logger.fr.ifremer.tutti.persistence.service.util.SynchronizationStatusHelper=WARN diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/AbstractOpenReplaceTemporaryUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/AbstractOpenReplaceTemporaryUIAction.java index 0637418..c2288e0 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/AbstractOpenReplaceTemporaryUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/AbstractOpenReplaceTemporaryUIAction.java @@ -65,6 +65,8 @@ public abstract class AbstractOpenReplaceTemporaryUIAction<E extends TuttiRefere protected abstract List<E> getTargetList(PersistenceService persistenceService); + protected abstract List<E> retainTemporaryList(PersistenceService persistenceService, List<E> targetList); + protected E source; protected E target; @@ -112,7 +114,7 @@ public abstract class AbstractOpenReplaceTemporaryUIAction<E extends TuttiRefere getProgressionModel().increments(t("tutti.openReplaceTemporaryUI.loading.source", entityLabel)); // Get source list - List<E> sourceList = persistenceService.retainTemporaryList(targetList); + List<E> sourceList = retainTemporaryList(persistenceService, targetList); log.info("Loaded temporary referentials: " + sourceList.size()); log.info("Loaded official referentials: " + targetList.size()); 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 f55b66d..6893a51 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 @@ -71,6 +71,11 @@ public class OpenReplaceTemporaryGearUIAction extends AbstractOpenReplaceTempora } @Override + protected List<Gear> retainTemporaryList(PersistenceService persistenceService, List<Gear> targetList) { + return persistenceService.retainTemporaryGearList(targetList); + } + + @Override public void doAction() throws Exception { super.doAction(); getHandler().resetExportGearsAction(); 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 f594ed4..4086f0a 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 @@ -70,6 +70,11 @@ public class OpenReplaceTemporaryPersonUIAction extends AbstractOpenReplaceTempo } @Override + protected List<Person> retainTemporaryList(PersistenceService persistenceService, List<Person> targetList) { + return persistenceService.retainTemporaryPersonList(targetList); + } + + @Override public void doAction() throws Exception { super.doAction(); getHandler().resetExportPersonAction(); 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 ee8aa6f..a98df83 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 @@ -70,6 +70,11 @@ public class OpenReplaceTemporarySpeciesUIAction extends AbstractOpenReplaceTemp } @Override + protected List<Species> retainTemporaryList(PersistenceService persistenceService, List<Species> targetList) { + return persistenceService.retainTemporarySpeciesList(targetList); + } + + @Override public void doAction() throws Exception { super.doAction(); getHandler().resetExportSpeciesAction(); 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 b6e75af..e5afb4c 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 @@ -71,6 +71,11 @@ public class OpenReplaceTemporaryVesselUIAction extends AbstractOpenReplaceTempo } @Override + protected List<Vessel> retainTemporaryList(PersistenceService persistenceService, List<Vessel> targetList) { + return persistenceService.retainTemporaryVesselList(targetList); + } + + @Override public void doAction() throws Exception { super.doAction(); getHandler().resetExportVesselsAction(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java index 7bcb686..7e9ba93 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java @@ -473,7 +473,7 @@ public class EditCruiseUIHandler extends AbstractTuttiUIHandler<EditCruiseUIMode editMenuEnabled = !getModel().isCreate() && !getModel().isModify() && (!gear.isScientificGear() || - getPersistenceService().isTemporary(gear)); + getPersistenceService().isTemporaryGear(gear)); viewMenuEnabled = true; GEAR_EDIT_CONTEXT.setContextValue(ui, gear); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.