This is an automated email from the git hooks/post-receive script. New commit to branch feature/7909_import_generique_id_obsoletes in repository tutti. See http://git.codelutin.com/tutti.git commit 5c9c6742907dbd978857baad21691496c3748e5b Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Jan 16 09:47:02 2016 +0100 Ajout de méthodes sur la persistence pour récupérer des objets obsolètes (See #7909) --- .../tutti/persistence/TuttiPersistenceImpl.java | 47 +++++- .../persistence/TuttiPersistenceNoDbImpl.java | 40 +++++ .../tutti/persistence/dao/TaxonNameDaoTutti.java | 14 ++ .../persistence/dao/TaxonNameDaoTuttiImpl.java | 85 +++++++++++ .../service/ProgramPersistenceService.java | 1 + .../referential/GearPersistenceService.java | 15 +- .../referential/GearPersistenceServiceImpl.java | 38 +++-- .../referential/LocationPersistenceService.java | 10 +- .../LocationPersistenceServiceImpl.java | 129 +++++++++++++--- .../referential/PersonPersistenceService.java | 14 +- .../referential/PersonPersistenceServiceImpl.java | 24 ++- .../ReferentialPersistenceServiceSupport.java | 13 +- .../referential/SpeciesPersistenceService.java | 13 +- .../referential/SpeciesPersistenceServiceImpl.java | 41 +++-- .../referential/VesselPersistenceService.java | 13 +- .../referential/VesselPersistenceServiceImpl.java | 119 +++++++++++---- .../resources/applicationContext-service-tutti.xml | 32 +++- .../src/main/resources/queries-failsafe.hbm.xml | 169 ++++++++++++++++++++- .../ifremer/tutti/service/PersistenceService.java | 40 +++++ 19 files changed, 755 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 ff86ba7..587e9bb 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 @@ -493,15 +493,29 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override + public List<TuttiLocation> getAllHarbourWithObsoletes() { + return getLocationService().getAllHarbourWithObsoletes(); + } + + @Override public List<TuttiLocation> getAllFishingOperationStrata(String zoneId) { return getLocationService().getAllFishingOperationStrata(zoneId); } @Override + public List<TuttiLocation> getAllFishingOperationStrataWithObsoletes(String zoneId) { + return getLocationService().getAllFishingOperationStrataWithObsoletes(zoneId); + } + + @Override public List<TuttiLocation> getAllFishingOperationSubStrata(String zoneId, String strataId) { - return getLocationService().getAllFishingOperationSubStrata(zoneId, - strataId); + return getLocationService().getAllFishingOperationSubStrata(zoneId, strataId); + } + + @Override + public List<TuttiLocation> getAllFishingOperationSubStrataWithObsoletes(String zoneId, String strataId) { + return getLocationService().getAllFishingOperationSubStrataWithObsoletes(zoneId, strataId); } @Override @@ -514,6 +528,13 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override + public List<TuttiLocation> getAllFishingOperationLocationWithObsoletes(String zoneId, String strataId, String subStrataId) { + return getLocationService().getAllFishingOperationLocationWithObsoletes(zoneId, + strataId, + subStrataId); + } + + @Override public String getLocationLabelByLatLong(Float latitude, Float longitude) { return getLocationService().getLocationLabelByLatLong(latitude, longitude); } @@ -557,6 +578,11 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override + public List<Gear> getAllGearWithObsoletes() { + return getGearService().getAllGearWithObsoletes(); + } + + @Override public Gear getGear(Integer gearId) { return getGearService().getGear(gearId); } @@ -615,6 +641,13 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override + public List<Species> getAllReferentSpeciesWithObsoletes() { + List<Species> result = getSpeciesService().getAllReferentSpeciesWithObsoletes(); + setSpeciesSurveyCode(result, getProtocol()); + return result; + } + + @Override public Species getSpeciesByReferenceTaxonIdWithVernacularCode(Integer referenceTaxonId) { return getSpeciesService().getSpeciesByReferenceTaxonIdWithVernacularCode(referenceTaxonId); } @@ -729,6 +762,11 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override + public List<Person> getAllPersonWithObsoletes() { + return getPersonService().getAllPersonWithObsoletes(); + } + + @Override public Person getPerson(Integer personId) { return getPersonService().getPerson(personId); } @@ -783,6 +821,11 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override + public List<Vessel> getAllVesselWithObsoletes() { + return getVesselService().getAllVesselWithObsoletes(); + } + + @Override public Vessel getVessel(String vesselCode) { return getVesselService().getVessel(vesselCode); } 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 b97cca9..045bc27 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 @@ -149,21 +149,41 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override + public List<TuttiLocation> getAllHarbourWithObsoletes() { + throw notImplemented(); + } + + @Override public List<TuttiLocation> getAllFishingOperationStrata(String zoneId) { throw notImplemented(); } @Override + public List<TuttiLocation> getAllFishingOperationStrataWithObsoletes(String zoneId) { + throw notImplemented(); + } + + @Override public List<TuttiLocation> getAllFishingOperationSubStrata(String zoneId, String strataId) { throw notImplemented(); } @Override + public List<TuttiLocation> getAllFishingOperationSubStrataWithObsoletes(String zoneId, String strataId) { + throw notImplemented(); + } + + @Override public List<TuttiLocation> getAllFishingOperationLocation(String zoneId, String strataId, String subStrataId) { throw notImplemented(); } @Override + public List<TuttiLocation> getAllFishingOperationLocationWithObsoletes(String zoneId, String strataId, String subStrataId) { + throw notImplemented(); + } + + @Override public String getLocationLabelByLatLong(Float latitude, Float longitude) { throw notImplemented(); } @@ -184,6 +204,11 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override + public List<Vessel> getAllVesselWithObsoletes() { + throw notImplemented(); + } + + @Override public List<Species> getAllSpecies() { throw notImplemented(); } @@ -194,6 +219,11 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override + public List<Species> getAllReferentSpeciesWithObsoletes() { + throw notImplemented(); + } + + @Override public Species getSpeciesByReferenceTaxonIdWithVernacularCode(Integer referenceTaxonId) { throw notImplemented(); } @@ -319,11 +349,21 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override + public List<Gear> getAllGearWithObsoletes() { + throw notImplemented(); + } + + @Override public List<Person> getAllPerson() { throw notImplemented(); } @Override + public List<Person> getAllPersonWithObsoletes() { + throw notImplemented(); + } + + @Override public Person getPerson(Integer personId) { throw notImplemented(); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/dao/TaxonNameDaoTutti.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/dao/TaxonNameDaoTutti.java new file mode 100644 index 0000000..2343c65 --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/dao/TaxonNameDaoTutti.java @@ -0,0 +1,14 @@ +package fr.ifremer.tutti.persistence.dao; + +import fr.ifremer.adagio.core.dao.referential.taxon.TaxonNameExtendDao; +import fr.ifremer.adagio.core.dao.referential.taxon.TaxonRefVO; + +/** + * Created on 16/01/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public interface TaxonNameDaoTutti extends TaxonNameExtendDao { + + TaxonRefVO[] getAllTaxonNamesWithObsoletes(boolean withSynonyms, Integer transcribingId); +} diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/dao/TaxonNameDaoTuttiImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/dao/TaxonNameDaoTuttiImpl.java new file mode 100644 index 0000000..98c8387 --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/dao/TaxonNameDaoTuttiImpl.java @@ -0,0 +1,85 @@ +package fr.ifremer.tutti.persistence.dao; + +import com.google.common.base.Function; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; +import fr.ifremer.adagio.core.dao.referential.taxon.TaxonNameDaoImpl; +import fr.ifremer.adagio.core.dao.referential.taxon.TaxonRefVO; +import org.hibernate.Query; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +/** + * Created on 16/01/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +@Repository("taxonNameDaoTutti") +@Lazy +public class TaxonNameDaoTuttiImpl extends TaxonNameDaoImpl implements TaxonNameDaoTutti { + + @Autowired + public TaxonNameDaoTuttiImpl(SessionFactory sessionFactory) { + super(sessionFactory); + } + + @Override + public TaxonRefVO[] getAllTaxonNamesWithObsoletes(boolean withSynonyms, Integer transcribingId) { + + Session session = getSession(); + + Query query; + + boolean withTranscribing = transcribingId != null; + + if (withSynonyms) { + query = session.getNamedQuery("allTaxonNamesWithObsoletes"); + } else { + query = session.getNamedQuery("allTaxonNamesIsReferentWithObsoletes"); + } + + List<TaxonRefVO> results = new ArrayList<TaxonRefVO>(); + for (Iterator<Object[]> iterator = query.iterate(); iterator.hasNext(); ) { + Object[] cols = iterator.next(); + TaxonRefVO taxonNameRefTaxVO = loadTaxon(cols, false); + results.add(taxonNameRefTaxVO); + } + if (results.size() == 0) { + return null; + } + + if (withTranscribing) { + query = session.getNamedQuery("allTranscribingForAType"); + query.setInteger("transcribingTypeId", transcribingId); + + Multimap<Integer, TaxonRefVO> r = Multimaps.index(results, new Function<TaxonRefVO, Integer>() { + @Override + public Integer apply(fr.ifremer.adagio.core.dao.referential.taxon.TaxonRefVO input) { + return input.getReferenceTaxonId(); + } + }); + + for (Iterator<Object[]> iterator = query.iterate(); iterator.hasNext(); ) { + Object[] cols = iterator.next(); + Integer referencetaxonId = (Integer) cols[0]; + String externalCode = (String) cols[1]; + Collection<TaxonRefVO> taxonRefVOs = r.get(referencetaxonId); + if (taxonRefVOs != null) + for (TaxonRefVO taxonRefVO : taxonRefVOs) { + taxonRefVO.setExternalCode(externalCode); + } + } + } + + return results.toArray(new TaxonRefVO[results.size()]); + + } +} diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceService.java index 9d23cb1..53a6346 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceService.java @@ -66,4 +66,5 @@ public interface ProgramPersistenceService extends TuttiPersistenceServiceImplem @Transactional(readOnly = false) @CacheEvict(value = {"programs", "programZones"}, allEntries = true) Program saveProgram(Program bean); + } 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 5fe9497..ab0da7a 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 @@ -27,6 +27,7 @@ package fr.ifremer.tutti.persistence.service.referential; import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.referential.Gear; import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.transaction.annotation.Transactional; import java.util.Collection; @@ -45,6 +46,9 @@ public interface GearPersistenceService extends TuttiPersistenceServiceImplement List<Gear> getAllFishingGear(); + @Cacheable(value = "gearsWithObsoletes") + List<Gear> getAllGearWithObsoletes(); + Gear getGear(Integer gearId); /** @@ -63,7 +67,7 @@ public interface GearPersistenceService extends TuttiPersistenceServiceImplement * @since 3.14 */ @Transactional(readOnly = false) - @CacheEvict(value = "gears", allEntries = true) + @CacheEvict(value = {"gears", "gearsWithObsoletes"}, allEntries = true) List<Gear> addTemporaryGears(List<Gear> gears); /** @@ -74,7 +78,7 @@ public interface GearPersistenceService extends TuttiPersistenceServiceImplement * @since 3.14 */ @Transactional(readOnly = false) - @CacheEvict(value = "gears", allEntries = true) + @CacheEvict(value = {"gears", "gearsWithObsoletes"}, allEntries = true) List<Gear> updateTemporaryGears(List<Gear> gears); /** @@ -96,7 +100,7 @@ public interface GearPersistenceService extends TuttiPersistenceServiceImplement * @since 3.6 */ @Transactional(readOnly = false) - @CacheEvict(value = {"fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", "gears"}, allEntries = true) + @CacheEvict(value = {"fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", "gears", "gearsWithObsoletes"}, allEntries = true) void replaceGear(Gear source, Gear target, boolean delete); /** @@ -106,7 +110,7 @@ public interface GearPersistenceService extends TuttiPersistenceServiceImplement * @since 3.8 */ @Transactional(readOnly = false) - @CacheEvict(value = "gears", allEntries = true) + @CacheEvict(value = {"gears", "gearsWithObsoletes"}, allEntries = true) void deleteTemporaryGear(Integer id); /** @@ -116,6 +120,7 @@ public interface GearPersistenceService extends TuttiPersistenceServiceImplement * @since 3.8 */ @Transactional(readOnly = false) - @CacheEvict(value = "gears", allEntries = true) + @CacheEvict(value = {"gears", "gearsWithObsoletes"}, allEntries = true) void deleteTemporaryGears(Collection<Integer> ids); + } 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 bca672a..72d4b81 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 @@ -62,11 +62,7 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup "allGears", "gearClassificiationId", IntegerType.INSTANCE, GearClassificationId.SCIENTIFIC_CRUISE.getValue()); List<Gear> result = Lists.newArrayList(); - while (sources.hasNext()) { - Object[] source = sources.next(); - Gear target = loadGear(source); - result.add(target); - } + loadGears(sources, result); return Collections.unmodifiableList(result); } @@ -78,11 +74,25 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup "allGears", "gearClassificiationId", IntegerType.INSTANCE, GearClassificationId.FAO.getValue()); List<Gear> result = Lists.newArrayList(); - while (sources.hasNext()) { - Object[] source = sources.next(); - Gear target = loadGear(source); - result.add(target); - } + loadGears(sources, result); + return Collections.unmodifiableList(result); + + } + + @Override + public List<Gear> getAllGearWithObsoletes() { + + List<Gear> result = Lists.newArrayList(); + + Iterator<Object[]> fishingSources = queryListWithStatus2( + "allGearsWithObsoletes", + "gearClassificiationId", IntegerType.INSTANCE, GearClassificationId.FAO.getValue()); + loadGears(fishingSources, result); + + Iterator<Object[]> scientificSources = queryListWithStatus2( + "allGearsWithObsoletes", + "gearClassificiationId", IntegerType.INSTANCE, GearClassificationId.SCIENTIFIC_CRUISE.getValue()); + loadGears(scientificSources, result); return Collections.unmodifiableList(result); } @@ -99,6 +109,14 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup } + protected void loadGears(Iterator<Object[]> sources, List<Gear> result) { + while (sources.hasNext()) { + Object[] source = sources.next(); + Gear target = loadGear(source); + result.add(target); + } + } + @Override public boolean isTemporaryGearUsed(Integer id) { Long count = queryUniqueTyped("countGearInGearPhysicalFeatures", "id", IntegerType.INSTANCE, id); diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceService.java index ddf5289..fe4638d 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceService.java @@ -69,6 +69,9 @@ public interface LocationPersistenceService extends TuttiPersistenceServiceImple @Cacheable(value = "harbours") List<TuttiLocation> getAllHarbour(); + @Cacheable(value = "harboursWithObsoletes") + List<TuttiLocation> getAllHarbourWithObsoletes(); + /** * Get the list of location of type strata that match the given zone id. * @@ -78,6 +81,8 @@ public interface LocationPersistenceService extends TuttiPersistenceServiceImple */ List<TuttiLocation> getAllFishingOperationStrata(String zoneId); + List<TuttiLocation> getAllFishingOperationStrataWithObsoletes(String zoneId); + /** * Get the list of location of type substra that match the given zone id or * if not null the given strata id. @@ -89,6 +94,8 @@ public interface LocationPersistenceService extends TuttiPersistenceServiceImple */ List<TuttiLocation> getAllFishingOperationSubStrata(String zoneId, String strataId); + List<TuttiLocation> getAllFishingOperationSubStrataWithObsoletes(String zoneId, String strataId); + /** * Get the list of location of type substra that match the given zone id or * if not null the given strata id or if not null the given substrata id if @@ -102,6 +109,8 @@ public interface LocationPersistenceService extends TuttiPersistenceServiceImple */ List<TuttiLocation> getAllFishingOperationLocation(String zoneId, String strataId, String subStrataId); + List<TuttiLocation> getAllFishingOperationLocationWithObsoletes(String zoneId, String strataId, String subStrataId); + /** * Get a location by id . * @@ -130,5 +139,4 @@ public interface LocationPersistenceService extends TuttiPersistenceServiceImple */ Integer getLocationIdByLatLong(Float latitude, Float longitude); - } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceServiceImpl.java index cd70ed1..8ae68c5 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceServiceImpl.java @@ -63,11 +63,7 @@ public class LocationPersistenceServiceImpl extends ReferentialPersistenceServic "locationLevelId", IntegerType.INSTANCE, LocationLevelId.SCIENTIFIC_CRUISE_PROGRAM.getValue()); List<TuttiLocation> result = Lists.newArrayList(); - while (list.hasNext()) { - Object[] source = list.next(); - TuttiLocation target = loadLocation(source); - result.add(target); - } + loadLocations(list, result); return Collections.unmodifiableList(result); } @@ -79,11 +75,7 @@ public class LocationPersistenceServiceImpl extends ReferentialPersistenceServic "locationLevelId", IntegerType.INSTANCE, LocationLevelId.PAYS_ISO3.getValue()); List<TuttiLocation> result = Lists.newArrayList(); - while (list.hasNext()) { - Object[] source = list.next(); - TuttiLocation target = loadLocation(source); - result.add(target); - } + loadLocations(list, result); return Collections.unmodifiableList(result); } @@ -95,11 +87,19 @@ public class LocationPersistenceServiceImpl extends ReferentialPersistenceServic "locationLevelId", IntegerType.INSTANCE, LocationLevelId.PORT.getValue()); List<TuttiLocation> result = Lists.newArrayList(); - while (list.hasNext()) { - Object[] source = list.next(); - TuttiLocation target = loadLocation(source); - result.add(target); - } + loadLocations(list, result); + return Collections.unmodifiableList(result); + } + + @Override + public List<TuttiLocation> getAllHarbourWithObsoletes() { + Iterator<Object[]> list = queryListWithStatus2( + "allLocationsByLevelAndClassificiationWithObsoletes", + "locationClassificationId", IntegerType.INSTANCE, LocationClassificationId.TERRITORIAL.getValue(), + "locationLevelId", IntegerType.INSTANCE, LocationLevelId.PORT.getValue()); + + List<TuttiLocation> result = Lists.newArrayList(); + loadLocations(list, result); return Collections.unmodifiableList(result); } @@ -114,6 +114,16 @@ public class LocationPersistenceServiceImpl extends ReferentialPersistenceServic } @Override + public List<TuttiLocation> getAllFishingOperationStrataWithObsoletes(String zoneId) { + Preconditions.checkNotNull(zoneId); + List<TuttiLocation> result = getFishingOperationLocationsByParentWithObsoletes( + LocationLevelId.SCIENTIFIC_CRUISE_STRATA.getValue(), + Integer.valueOf(zoneId), + LocationLevelId.SCIENTIFIC_CRUISE_PROGRAM.getValue()); + return Collections.unmodifiableList(result); + } + + @Override public List<TuttiLocation> getAllFishingOperationSubStrata(String zoneId, String strataId) { @@ -142,6 +152,34 @@ public class LocationPersistenceServiceImpl extends ReferentialPersistenceServic } @Override + public List<TuttiLocation> getAllFishingOperationSubStrataWithObsoletes(String zoneId, String strataId) { + + String parentId; + Integer parentLocationLevelId; + + if (strataId != null) { + + // use strata as parent + parentId = strataId; + parentLocationLevelId = LocationLevelId.SCIENTIFIC_CRUISE_STRATA.getValue(); + + } else { + + // use zoneId as parent + parentId = zoneId; + parentLocationLevelId = LocationLevelId.SCIENTIFIC_CRUISE_PROGRAM.getValue(); + } + + Preconditions.checkNotNull(parentId); + List<TuttiLocation> result = getFishingOperationLocationsByParentWithObsoletes( + LocationLevelId.SCIENTIFIC_CRUISE_SUB_STRATA.getValue(), + Integer.valueOf(parentId), + parentLocationLevelId); + return Collections.unmodifiableList(result); + + } + + @Override public List<TuttiLocation> getAllFishingOperationLocation(String zoneId, String strataId, String subStrataId) { @@ -177,6 +215,40 @@ public class LocationPersistenceServiceImpl extends ReferentialPersistenceServic } @Override + public List<TuttiLocation> getAllFishingOperationLocationWithObsoletes(String zoneId, String strataId, String subStrataId) { + + String parentId; + Integer parentLocationLevelId; + + if (subStrataId != null) { + + // use substrata as parent + parentId = subStrataId; + parentLocationLevelId = LocationLevelId.SCIENTIFIC_CRUISE_SUB_STRATA.getValue(); + + } else if (strataId != null) { + + // use strata as parent + parentId = strataId; + parentLocationLevelId = LocationLevelId.SCIENTIFIC_CRUISE_STRATA.getValue(); + + } else { + + // use zoneId as parent + parentId = zoneId; + parentLocationLevelId = LocationLevelId.SCIENTIFIC_CRUISE_PROGRAM.getValue(); + } + + Preconditions.checkNotNull(parentId); + List<TuttiLocation> result = getFishingOperationLocationsByParentWithObsoletes( + LocationLevelId.SCIENTIFIC_CRUISE_LOCALITE.getValue(), + Integer.valueOf(parentId), + parentLocationLevelId); + return Collections.unmodifiableList(result); + + } + + @Override public TuttiLocation getLocation(String id) { Object[] source = queryUnique( "locationById", @@ -210,11 +282,20 @@ public class LocationPersistenceServiceImpl extends ReferentialPersistenceServic "locationLevelId", IntegerType.INSTANCE, locationLevelId ); List<TuttiLocation> result = Lists.newArrayList(); - while (sources.hasNext()) { - Object[] source = sources.next(); - TuttiLocation target = loadLocation(source); - result.add(target); - } + loadLocations(sources, result); + return result; + } + + protected List<TuttiLocation> getFishingOperationLocationsByParentWithObsoletes(Integer locationLevelId, Integer parentId, Integer parentLocationLevelId) { + Iterator<Object[]> sources = queryListWithStatus2( + "allFishingOperationLocationByParentWithObsoletes", + "parentId", IntegerType.INSTANCE, parentId, + "parentLocationLevelId", IntegerType.INSTANCE, parentLocationLevelId, + "locationClassificationId", IntegerType.INSTANCE, LocationClassificationId.SECTOR.getValue(), + "locationLevelId", IntegerType.INSTANCE, locationLevelId + ); + List<TuttiLocation> result = Lists.newArrayList(); + loadLocations(sources, result); return result; } @@ -228,4 +309,12 @@ public class LocationPersistenceServiceImpl extends ReferentialPersistenceServic return target; } + protected void loadLocations(Iterator<Object[]> list, List<TuttiLocation> result) { + while (list.hasNext()) { + Object[] source = list.next(); + TuttiLocation target = loadLocation(source); + result.add(target); + } + } + } 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 03c0965..9e184ba 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 @@ -45,6 +45,9 @@ public interface PersonPersistenceService extends TuttiPersistenceServiceImpleme @Cacheable(value = "persons") List<Person> getAllPerson(); + @Cacheable(value = "personsWithObsoletes") + List<Person> getAllPersonWithObsoletes(); + @Cacheable(value = "personById", key = "#personId") Person getPerson(Integer personId); @@ -64,7 +67,7 @@ public interface PersonPersistenceService extends TuttiPersistenceServiceImpleme * @since 3.14 */ @Transactional(readOnly = false) - @CacheEvict(value = {"persons", "personById"}, allEntries = true) + @CacheEvict(value = {"persons", "personById", "personsWithObsoletes"}, allEntries = true) List<Person> addTemporaryPersons(List<Person> persons); /** @@ -75,7 +78,7 @@ public interface PersonPersistenceService extends TuttiPersistenceServiceImpleme * @since 3.14 */ @Transactional(readOnly = false) - @CacheEvict(value = {"persons", "personById"}, allEntries = true) + @CacheEvict(value = {"persons", "personById", "personsWithObsoletes"}, allEntries = true) List<Person> updateTemporaryPersons(List<Person> persons); /** @@ -97,7 +100,7 @@ public interface PersonPersistenceService extends TuttiPersistenceServiceImpleme * @since 3.6 */ @Transactional(readOnly = false) - @CacheEvict(value = {"fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", "persons", "personById"}, + @CacheEvict(value = {"fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", "persons", "personById", "personsWithObsoletes"}, allEntries = true) void replacePerson(Person source, Person target, boolean delete); @@ -108,7 +111,7 @@ public interface PersonPersistenceService extends TuttiPersistenceServiceImpleme * @since 3.8 */ @Transactional(readOnly = false) - @CacheEvict(value = {"persons", "personById"}, allEntries = true) + @CacheEvict(value = {"persons", "personById", "personsWithObsoletes"}, allEntries = true) void deleteTemporaryPersons(Collection<Integer> ids); /** @@ -118,6 +121,7 @@ public interface PersonPersistenceService extends TuttiPersistenceServiceImpleme * @since 3.8 */ @Transactional(readOnly = false) - @CacheEvict(value = {"persons", "personById"}, allEntries = true) + @CacheEvict(value = {"persons", "personById", "personsWithObsoletes"}, allEntries = true) void deleteTemporaryPerson(Integer id); + } 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 7d9733b..1be9acd 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 @@ -69,13 +69,33 @@ public class PersonPersistenceServiceImpl extends ReferentialPersistenceServiceS ); List<Person> result = Lists.newArrayList(); + loadPersons(list, result); + return Collections.unmodifiableList(result); + + } + + @Override + public List<Person> getAllPersonWithObsoletes() { + + Iterator<Object[]> list = queryListWithStatus2( + "allPersonsWithObsoletes", + "observerProfilId", IntegerType.INSTANCE, UserProfilId.OBSERVER.getValue(), + "projectMemberProfilId", IntegerType.INSTANCE, UserProfilId.PROJECT_MEMBER.getValue(), + "userProfilId", IntegerType.INSTANCE, UserProfilId.USER.getValue(), + "departementPrefixCode", StringType.INSTANCE, DepartmentCode.INSIDE_PREFIX.getValue() + ); + + List<Person> result = Lists.newArrayList(); + loadPersons(list, result); + return Collections.unmodifiableList(result); + } + + protected void loadPersons(Iterator<Object[]> list, List<Person> result) { while (list.hasNext()) { Object[] source = list.next(); Person target = loadPerson(source); result.add(target); } - return Collections.unmodifiableList(result); - } @Override 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 278f62f..5c613b6 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 @@ -50,8 +50,7 @@ public abstract class ReferentialPersistenceServiceSupport extends AbstractPersi @Resource(name = "cacheService") protected CacheService cacheService; - protected Iterator<Object[]> queryListWithStatus(String queryName, - Object... params) { + protected Iterator<Object[]> queryListWithStatus(String queryName, Object... params) { Query query = createQuery(queryName, params); query.setString("statusValidCode", StatusCode.ENABLE.getValue()); query.setString("statusTemporaryCode", StatusCode.TEMPORARY.getValue()); @@ -60,6 +59,16 @@ public abstract class ReferentialPersistenceServiceSupport extends AbstractPersi return result; } + protected Iterator<Object[]> queryListWithStatus2(String queryName, Object... params) { + Query query = createQuery(queryName, params); + query.setString("statusValidCode", StatusCode.ENABLE.getValue()); + query.setString("statusTemporaryCode", StatusCode.TEMPORARY.getValue()); + query.setString("statusDisableCode", StatusCode.DISABLE.getValue()); + + Iterator<Object[]> result = query.iterate(); + return result; + } + protected Object[] queryUniqueWithStatus(String queryName, Object... params) { Query query = createQuery(queryName, params); 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 ead0ece..b4a455c 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 @@ -50,6 +50,9 @@ public interface SpeciesPersistenceService extends TuttiPersistenceServiceImplem @Cacheable(value = "referentSpecies") List<Species> getAllReferentSpecies(); + @Cacheable(value = "referentSpeciesWithObsoletes") + List<Species> getAllReferentSpeciesWithObsoletes(); + /** * @return all species * @since 0.3 @@ -107,7 +110,7 @@ public interface SpeciesPersistenceService extends TuttiPersistenceServiceImplem * @since 3.14 */ @Transactional(readOnly = false) - @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular", "obsoleteReferentTaxons"}, allEntries = true) + @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular", "obsoleteReferentTaxons", "referentSpeciesWithObsoletes"}, allEntries = true) List<Species> addTemporarySpecies(List<Species> species); /** @@ -118,7 +121,7 @@ public interface SpeciesPersistenceService extends TuttiPersistenceServiceImplem * @since 3.14 */ @Transactional(readOnly = false) - @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular", "obsoleteReferentTaxons"}, allEntries = true) + @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular", "obsoleteReferentTaxons", "referentSpeciesWithObsoletes"}, allEntries = true) List<Species> updateTemporarySpecies(List<Species> species); /** @@ -141,7 +144,7 @@ public interface SpeciesPersistenceService extends TuttiPersistenceServiceImplem */ @Transactional(readOnly = false) @CacheEvict(value = {"fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", - "species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular", "obsoleteReferentTaxons"}, + "species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular", "obsoleteReferentTaxons", "referentSpeciesWithObsoletes"}, allEntries = true) void replaceSpecies(Species source, Species target, boolean delete); @@ -152,7 +155,7 @@ public interface SpeciesPersistenceService extends TuttiPersistenceServiceImplem * @since 3.8 */ @Transactional(readOnly = false) - @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular", "obsoleteReferentTaxons"}, allEntries = true) + @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular", "obsoleteReferentTaxons", "referentSpeciesWithObsoletes"}, allEntries = true) void deleteTemporarySpecies(Collection<Integer> referenceTaxonIds); /** @@ -162,7 +165,7 @@ public interface SpeciesPersistenceService extends TuttiPersistenceServiceImplem * @since 3.8 */ @Transactional(readOnly = false) - @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular", "obsoleteReferentTaxons"}, allEntries = true) + @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular", "obsoleteReferentTaxons", "referentSpeciesWithObsoletes"}, allEntries = true) void deleteTemporarySpecies(Integer referenceTaxonId); } 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 a432cdf..51cc9fa 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 @@ -27,13 +27,13 @@ package fr.ifremer.tutti.persistence.service.referential; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; 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.TranscribingItemType; import fr.ifremer.adagio.core.dao.referential.transcribing.TranscribingItemTypeDao; import fr.ifremer.adagio.core.dao.referential.transcribing.TranscribingItemTypeId; import fr.ifremer.adagio.core.dao.technical.hibernate.TemporaryDataHelper; +import fr.ifremer.tutti.persistence.dao.TaxonNameDaoTutti; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; import org.apache.commons.lang3.StringUtils; @@ -68,8 +68,8 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService public static final String TAXINOMIE_COMMUN_REFERENCE_HISTORY = "TAXINOMIE-COMMUN.REFERENCE_HISTORY"; - @Resource(name = "taxonNameDao") - protected TaxonNameExtendDao taxonNameDao; + @Resource(name = "taxonNameDaoTutti") + protected TaxonNameDaoTutti taxonNameDao; @Resource(name = "transcribingItemTypeDao") protected TranscribingItemTypeDao transcribingItemTypeDao; @@ -114,19 +114,38 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService false, TranscribingItemTypeId.TAXON_NAME_REFTAX_CODE.getValue()); List<Species> result = Lists.newArrayListWithCapacity(sources.length); Cache referentSpeciesByIdCache = cacheService.getCache("referentSpeciesById"); + loadReferentSpecies(sources, result, referentSpeciesByIdCache); + + return Collections.unmodifiableList(result); + + } + + @Override + public List<Species> getAllReferentSpeciesWithObsoletes() { + + TaxonRefVO[] sources = taxonNameDao.getAllTaxonNamesWithObsoletes( + false, TranscribingItemTypeId.TAXON_NAME_REFTAX_CODE.getValue()); + List<Species> result = Lists.newArrayListWithCapacity(sources.length); + + loadReferentSpecies(sources, result, null); + return Collections.unmodifiableList(result); + + } + + protected void loadReferentSpecies(TaxonRefVO[] sources, List<Species> result, Cache referentSpeciesByIdCache) { for (TaxonRefVO source : sources) { Species target = loadSpecies(source); // FIXME kmorin 20130423 http://forge.codelutin.com/issues/2350 target.setRefTaxCode(StringUtils.trim(target.getExternalCode())); - // Add to cache : - referentSpeciesByIdCache.put(target.getReferenceTaxonId(), target); + if (referentSpeciesByIdCache != null) { + // Add to cache + referentSpeciesByIdCache.put(target.getReferenceTaxonId(), target); + } result.add(target); } - return Collections.unmodifiableList(result); - } @Override @@ -274,12 +293,12 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService Integer targetId = target.getReferenceTaxonId(); queryUpdate("replaceReferenceTaxonInSortingBatch", - "sourceId", IntegerType.INSTANCE, sourceId, - "targetId", IntegerType.INSTANCE, targetId); + "sourceId", IntegerType.INSTANCE, sourceId, + "targetId", IntegerType.INSTANCE, targetId); queryUpdate("replaceReferenceTaxonInSample", - "sourceId", IntegerType.INSTANCE, sourceId, - "targetId", IntegerType.INSTANCE, targetId); + "sourceId", IntegerType.INSTANCE, sourceId, + "targetId", IntegerType.INSTANCE, targetId); //TODO Check doublon... 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 5472d8e..5a5e89a 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 @@ -60,6 +60,9 @@ public interface VesselPersistenceService extends TuttiPersistenceServiceImpleme @Cacheable(value = "fishingVessels") List<Vessel> getAllFishingVessel(); + @Cacheable(value = "vesselsWithObsoletes") + List<Vessel> getAllVesselWithObsoletes(); + /** * @param vesselCode code of the vessel to find * @return the vessel @@ -84,7 +87,7 @@ public interface VesselPersistenceService extends TuttiPersistenceServiceImpleme * @since 3.14 */ @Transactional(readOnly = false) - @CacheEvict(value = {"fishingVessels", "vesselByCode"}, allEntries = true) + @CacheEvict(value = {"fishingVessels", "vesselByCode", "vesselsWithObsoletes"}, allEntries = true) List<Vessel> addTemporaryVessels(List<Vessel> vessels); /** @@ -95,7 +98,7 @@ public interface VesselPersistenceService extends TuttiPersistenceServiceImpleme * @since 3.14 */ @Transactional(readOnly = false) - @CacheEvict(value = {"fishingVessels", "vesselByCode"}, allEntries = true) + @CacheEvict(value = {"fishingVessels", "vesselByCode", "vesselsWithObsoletes"}, allEntries = true) List<Vessel> updateTemporaryVessels(List<Vessel> vessels); /** @@ -117,7 +120,7 @@ public interface VesselPersistenceService extends TuttiPersistenceServiceImpleme * @since 3.6 */ @Transactional(readOnly = false) - @CacheEvict(value = {"fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", "fishingVessels", "vesselByCode"}, + @CacheEvict(value = {"fr.ifremer.adagio.core.dao.data.batch.CatchBatchCache", "fishingVessels", "vesselByCode", "vesselsWithObsoletes"}, allEntries = true) void replaceVessel(Vessel source, Vessel target, boolean delete); @@ -128,7 +131,7 @@ public interface VesselPersistenceService extends TuttiPersistenceServiceImpleme * @since 3.8 */ @Transactional(readOnly = false) - @CacheEvict(value = {"fishingVessels", "vesselByCode"}, allEntries = true) + @CacheEvict(value = {"fishingVessels", "vesselByCode", "vesselsWithObsoletes"}, allEntries = true) void deleteTemporaryVessels(Collection<String> codes); /** @@ -138,7 +141,7 @@ public interface VesselPersistenceService extends TuttiPersistenceServiceImpleme * @since 3.8 */ @Transactional(readOnly = false) - @CacheEvict(value = {"fishingVessels", "vesselByCode"}, allEntries = true) + @CacheEvict(value = {"fishingVessels", "vesselByCode", "vesselsWithObsoletes"}, allEntries = true) void deleteTemporaryVessel(String code); } 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 926aace..ad0295c 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 @@ -25,7 +25,9 @@ package fr.ifremer.tutti.persistence.service.referential; */ import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import fr.ifremer.adagio.core.dao.data.vessel.VesselExtendDao; import fr.ifremer.adagio.core.dao.referential.StatusCode; import fr.ifremer.adagio.core.dao.referential.VesselTypeId; @@ -33,6 +35,7 @@ import fr.ifremer.adagio.core.dao.referential.location.LocationExtendDao; import fr.ifremer.adagio.core.dao.referential.location.LocationLabel; import fr.ifremer.adagio.core.dao.referential.location.LocationLevelId; import fr.ifremer.adagio.core.dao.technical.hibernate.TemporaryDataHelper; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.entities.referential.Vessels; import org.apache.commons.lang3.StringUtils; @@ -81,14 +84,8 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS List<Vessel> result = Lists.newArrayList(); Cache vesselByCodeCache = cacheService.getCache("vesselByCode"); + loadVessels(list, result, true, vesselByCodeCache); - while (list.hasNext()) { - Object[] source = list.next(); - Vessel target = loadVessel(source); - result.add(target); - // Add to cache - vesselByCodeCache.put(target.getId(), target); - } return Collections.unmodifiableList(result); } @@ -104,17 +101,83 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS List<Vessel> result = Lists.newArrayList(); Cache vesselByCodeCache = cacheService.getCache("vesselByCode"); + loadVessels(list, result, false, vesselByCodeCache); + + return Collections.unmodifiableList(result); + + } + @Override + public List<Vessel> getAllVesselWithObsoletes() { + + List<Vessel> result = Lists.newArrayList(); + +// // Récupération des navires actifs +// result.addAll(getAllFishingVessel()); +// result.addAll(getAllScientificVessel()); + + + Iterator<Object[]> fishingVesselList = queryListWithStatus2( + "allVesselsWithObsoletes", + "refDate", DateType.INSTANCE, new Date(), + "vesselTypeId", IntegerType.INSTANCE, VesselTypeId.FISHING_VESSEL.getValue() + ); + loadVesselsWithObsoletes(fishingVesselList, result, false); + int fishingVesselCount = result.size(); + if (log.isInfoEnabled()) { + log.info("fishing vessels: " + fishingVesselCount); + } + + Iterator<Object[]> scientificVesselList = queryListWithStatus2( + "allVesselsWithObsoletes", + "refDate", DateType.INSTANCE, new Date(), + "vesselTypeId", IntegerType.INSTANCE, VesselTypeId.SCIENTIFIC_RESEARCH_VESSEL.getValue() + ); + loadVesselsWithObsoletes(scientificVesselList, result, true); + if (log.isInfoEnabled()) { + log.info("scientific vessels: " + (result.size() - fishingVesselCount)); + } + try { + ImmutableMap<String, Vessel> index = Maps.uniqueIndex(result, TuttiEntities.GET_ID); + if (log.isInfoEnabled()) { + log.info("Total count: "+index.size()); + } + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("...", e); + } + } + + return Collections.unmodifiableList(result); + + } + + protected void loadVessels(Iterator<Object[]> list, List<Vessel> result, boolean scientificVessel, Cache vesselByCodeCache) { while (list.hasNext()) { Object[] source = list.next(); Vessel target = loadVessel(source); - target.setScientificVessel(false); + target.setScientificVessel(scientificVessel); result.add(target); - // Add to cache vesselByCodeCache.put(target.getId(), target); } - return Collections.unmodifiableList(result); + } + + protected void loadVesselsWithObsoletes(Iterator<Object[]> list, List<Vessel> result, boolean scientificVessel) { + + Vessel lastTarget = null; + while (list.hasNext()) { + Object[] source = list.next(); + Vessel target = loadVessel(source); + target.setScientificVessel(scientificVessel); + if (lastTarget != null && !target.getId().equals(lastTarget.getId())) { + + // nouveau code à traiter, on doit enregister l'ancien navire + result.add(lastTarget); + } + lastTarget = target; + } + result.add(lastTarget); } @@ -256,40 +319,40 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS String targetId = target.getId(); queryUpdate("replaceVesselInCruise", - "sourceId", StringType.INSTANCE, sourceId, - "targetId", StringType.INSTANCE, targetId); + "sourceId", StringType.INSTANCE, sourceId, + "targetId", StringType.INSTANCE, targetId); queryUpdate("replaceVesselInFishingOperation", - "sourceId", StringType.INSTANCE, sourceId, - "targetId", StringType.INSTANCE, targetId); + "sourceId", StringType.INSTANCE, sourceId, + "targetId", StringType.INSTANCE, targetId); queryUpdate("replaceVesselInOperationVesselAssociation", - "sourceId", StringType.INSTANCE, sourceId, - "targetId", StringType.INSTANCE, targetId); + "sourceId", StringType.INSTANCE, sourceId, + "targetId", StringType.INSTANCE, targetId); queryUpdate("replaceVesselInDailyActivityCalendar", - "sourceId", StringType.INSTANCE, sourceId, - "targetId", StringType.INSTANCE, targetId); + "sourceId", StringType.INSTANCE, sourceId, + "targetId", StringType.INSTANCE, targetId); queryUpdate("replaceVesselInLanding", - "sourceId", StringType.INSTANCE, sourceId, - "targetId", StringType.INSTANCE, targetId); + "sourceId", StringType.INSTANCE, sourceId, + "targetId", StringType.INSTANCE, targetId); queryUpdate("replaceVesselInFishingtrip", - "sourceId", StringType.INSTANCE, sourceId, - "targetId", StringType.INSTANCE, targetId); + "sourceId", StringType.INSTANCE, sourceId, + "targetId", StringType.INSTANCE, targetId); queryUpdate("replaceVesselInVesselUseFeatures", - "sourceId", StringType.INSTANCE, sourceId, - "targetId", StringType.INSTANCE, targetId); + "sourceId", StringType.INSTANCE, sourceId, + "targetId", StringType.INSTANCE, targetId); queryUpdate("replaceVesselInGearUseFeatures", - "sourceId", StringType.INSTANCE, sourceId, - "targetId", StringType.INSTANCE, targetId); + "sourceId", StringType.INSTANCE, sourceId, + "targetId", StringType.INSTANCE, targetId); queryUpdate("replaceVesselInGearPhysicalFeatures", - "sourceId", StringType.INSTANCE, sourceId, - "targetId", StringType.INSTANCE, targetId); + "sourceId", StringType.INSTANCE, sourceId, + "targetId", StringType.INSTANCE, targetId); //TODO Check doublon... diff --git a/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml b/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml index 76a1206..9398386 100644 --- a/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml +++ b/tutti-persistence/src/main/resources/applicationContext-service-tutti.xml @@ -39,7 +39,7 @@ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <!-- Caches management for tutti (not defined in adagio-core files) --> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> - + <!-- Session caches : --> <bean id="tuttiProgramsCache" parent="abstractEternalCache"> @@ -50,14 +50,14 @@ <property name="cacheName" value="programZones" /> </bean> - <bean id="countriesCache" parent="abstractEternalCache"> + <bean id="tuttiCountriesCache" parent="abstractEternalCache"> <property name="cacheName" value="countries" /> </bean> - <bean id="harboursCache" parent="abstractEternalCache"> + <bean id="tuttiHarboursCache" parent="abstractEternalCache"> <property name="cacheName" value="harbours" /> </bean> - + <bean id="tuttiPmfmsCache" parent="abstractEternalCache"> <property name="cacheName" value="pmfms" /> </bean> @@ -73,6 +73,7 @@ <bean id="tuttiObjectTypeCache" parent="abstractEternalCache"> <property name="cacheName" value="objectTypes" /> </bean> + <bean id="tuttiObjectTypeByCodeCache" parent="abstractEternalCache"> <property name="cacheName" value="objectTypeByCode" /> </bean> @@ -104,7 +105,7 @@ <bean id="tuttiObsoleteReferentTaxonsCache" parent="abstractEternalCache"> <property name="cacheName" value="obsoleteReferentTaxons" /> </bean> - + <bean id="tuttiGearsCache" parent="abstractEternalCache"> <property name="cacheName" value="gears" /> </bean> @@ -117,4 +118,25 @@ <property name="cacheName" value="personById" /> </bean> + <bean id="tuttiHarboursWithObsoletesCache" parent="abstractEternalCache"> + <property name="cacheName" value="harboursWithObsoletes" /> + </bean> + + <bean id="tuttiGearsWithObsoletesCache" parent="abstractEternalCache"> + <property name="cacheName" value="gearsWithObsoletes"/> + </bean> + + <bean id="tuttiPersonsWithObsoletesCache" parent="abstractEternalCache"> + <property name="cacheName" value="personsWithObsoletes" /> + </bean> + + <bean id="tuttiVesselsWithObsoletesCache" parent="abstractEternalCache"> + <property name="cacheName" value="vesselsWithObsoletes" /> + </bean> + + <bean id="tuttiReferentTaxonsWithObsoletesCache" parent="abstractEternalCache"> + <property name="cacheName" value="referentSpeciesWithObsoletes" /> + </bean> + + </beans> diff --git a/tutti-persistence/src/main/resources/queries-failsafe.hbm.xml b/tutti-persistence/src/main/resources/queries-failsafe.hbm.xml index 86c9e11..a364d7e 100644 --- a/tutti-persistence/src/main/resources/queries-failsafe.hbm.xml +++ b/tutti-persistence/src/main/resources/queries-failsafe.hbm.xml @@ -1114,6 +1114,27 @@ <query-param name="statusTemporaryCode" type="java.lang.String"/> </query> + <!-- [REF-T04-1] Get all locations by level and classification with obsoletes --> + <query cacheable="true" name="allLocationsByLevelAndClassificiationWithObsoletes"> + <![CDATA[ + SELECT + l.id as locationId, + l.label as locationLabel, + l.name as locationName, + l.status.code as statusCode + FROM LocationImpl l + WHERE + l.locationLevel.id = :locationLevelId + AND l.locationClassification.id = :locationClassificationId + AND l.status.code IN (:statusValidCode, :statusTemporaryCode, :statusDisableCode) + ]]> + <query-param name="locationLevelId" type="java.lang.Integer"/> + <query-param name="locationClassificationId" type="java.lang.Integer"/> + <query-param name="statusValidCode" type="java.lang.String"/> + <query-param name="statusTemporaryCode" type="java.lang.String"/> + <query-param name="statusDisableCode" type="java.lang.String"/> + </query> + <!-- [REF-T05] Get a location by his id --> <query cacheable="true" name="locationById"> <![CDATA[ @@ -1186,6 +1207,34 @@ <query-param name="statusTemporaryCode" type="java.lang.String"/> </query> + <!-- [REF-01-1] Get all fishing operation strata / substrata / localite with obsoletes --> + <query cacheable="true" name="allFishingOperationLocationByParentWithObsoletes"> + <![CDATA[ + SELECT + l.id as locationId, + l.label as locationLabel, + l.name as locationName, + l.status.code as statusCode + FROM + LocationImpl l, + LocationHierarchyImpl lh + WHERE + l.status.code IN (:statusValidCode, :statusTemporaryCode, :statusDisableCode) + AND l.locationLevel.id = :locationLevelId + AND l.locationClassification.id = :locationClassificationId + AND l.id = lh.locationHierarchyPk.location.id + AND lh.locationHierarchyPk.parent.id = :parentId + AND lh.locationHierarchyPk.parent.locationLevel.id = :parentLocationLevelId + ]]> + <query-param name="parentId" type="java.lang.Integer"/> + <query-param name="parentLocationLevelId" type="java.lang.Integer"/> + <query-param name="locationLevelId" type="java.lang.Integer"/> + <query-param name="locationClassificationId" type="java.lang.Integer"/> + <query-param name="statusValidCode" type="java.lang.String"/> + <query-param name="statusTemporaryCode" type="java.lang.String"/> + <query-param name="statusDisableCode" type="java.lang.String"/> + </query> + <!-- [REF-02] Get all vessel for a given vesselType --> <query cacheable="true" name="allVessels"> <![CDATA[ @@ -1271,6 +1320,40 @@ <query-param name="statusTemporaryCode" type="java.lang.String"/> </query> + <!-- [REF-02-3] Get all vessel with obsoletes for a given vesselType --> + <query cacheable="true" name="allVesselsWithObsoletes"> + <![CDATA[ + SELECT + v.code AS vesselCode, + vrp.registrationCode AS nationalRegistrationCode, + vrp.internationalRegistrationCode as internationalRegistrationCode, + vf.name AS vesselName, + v.vesselType.id AS vesselTypeId, + v.status.code AS statusCode, + vf.startDateTime AS vfStartTime, + vf.endDateTime AS vfEndTime, + vrp.vesselRegistrationPeriodPk.startDateTime AS vrpStartTime, + vrp.endDateTime AS vrpEndTime + FROM + VesselImpl v + INNER JOIN v.vesselRegistrationPeriods AS vrp + LEFT OUTER JOIN v.vesselFeatures AS vf + WHERE + v.vesselType.id = :vesselTypeId + AND v.status.code IN (:statusValidCode, :statusTemporaryCode, :statusDisableCode) + AND vrp.vesselRegistrationPeriodPk.startDateTime <= :refDate + AND vf.startDateTime <= :refDate + AND coalesce(vf.endDateTime, :refDate) >= :refDate + ORDER BY v.code, vf.startDateTime, vrp.vesselRegistrationPeriodPk.startDateTime + ]]> + <!-- FIXME le navire n'a plus de période ouverte de registre AND coalesce(vrp.endDateTime, :refDate) >= :refDate --> + <query-param name="vesselTypeId" type="java.lang.Integer"/> + <query-param name="refDate" type="java.util.Date"/> + <query-param name="statusValidCode" type="java.lang.String"/> + <query-param name="statusTemporaryCode" type="java.lang.String"/> + <query-param name="statusDisableCode" type="java.lang.String"/> + </query> + <!-- [REF-03] Get all gears for a given gearType --> <query cacheable="true" name="allGears"> <![CDATA[ @@ -1309,7 +1392,7 @@ <query-param name="statusTemporaryCode" type="java.lang.String"/> </query> - <!-- [REF-03-1] Get a gear by his name --> + <!-- [REF-03-2] Get a gear by his name --> <query cacheable="true" name="gearByName"> <![CDATA[ SELECT @@ -1328,6 +1411,26 @@ <query-param name="statusTemporaryCode" type="java.lang.String"/> </query> + <!-- [REF-03-3] Get all gears (with obsoletes) for a given gearType --> + <query cacheable="true" name="allGearsWithObsoletes"> + <![CDATA[ + SELECT + g.id, + g.label, + g.name, + g.gearClassification.id, + g.status.code AS statusCode + FROM GearImpl g + WHERE + g.gearClassification.id= :gearClassificiationId + AND g.status.code IN (:statusValidCode, :statusTemporaryCode, :statusDisableCode) + ]]> + <query-param name="gearClassificiationId" type="java.lang.Integer"/> + <query-param name="statusValidCode" type="java.lang.String"/> + <query-param name="statusTemporaryCode" type="java.lang.String"/> + <query-param name="statusDisableCode" type="java.lang.String"/> + </query> + <!-- [REF-04] Get all persons --> <query cacheable="true" name="allPersons"> <![CDATA[ @@ -1397,6 +1500,36 @@ <query-param name="statusTemporaryCode" type="java.lang.String"/> </query> + <!-- [REF-04-3] Get all persons with obsoletes--> + <query cacheable="true" name="allPersonsWithObsoletes"> + <![CDATA[ + SELECT DISTINCT + p.id, + p.lastname, + p.firstname, + p.department.code, + p.status.code as statusCode + FROM + PersonImpl p + LEFT OUTER JOIN p.profils pp + WHERE + p.status.code IN (:statusValidCode, :statusTemporaryCode, :statusDisableCode) + AND pp.id IN ( + :observerProfilId, + :projectMemberProfilId, + :userProfilId + ) + AND p.department.code LIKE concat(:departementPrefixCode , '%') + ]]> + <query-param name="observerProfilId" type="java.lang.Integer"/> + <query-param name="projectMemberProfilId" type="java.lang.Integer"/> + <query-param name="userProfilId" type="java.lang.Integer"/> + <query-param name="statusValidCode" type="java.lang.String"/> + <query-param name="statusTemporaryCode" type="java.lang.String"/> + <query-param name="statusDisableCode" type="java.lang.String"/> + <query-param name="departementPrefixCode" type="java.lang.String"/> + </query> + <!-- [REF-05-0] Get a taxon reference id by his name --> <query cacheable="true" name="taxonNameReferenceTaxonIdByName"> <![CDATA[ @@ -1412,6 +1545,40 @@ <query-param name="taxonName" type="java.lang.String"/> </query> + <!-- [REF-05-1] Get all taxons with obsoletes --> + <query cacheable="true" name="allTaxonNamesWithObsoletes"> + <![CDATA[ + SELECT + tn.referenceTaxon.id, + tn.id, + tn.isReferent, + tn.name, + tn.isTemporary + FROM + TaxonNameImpl tn + ORDER BY + tn.name + ]]> + </query> + + <!-- [REF-05-2] Get referent taxons with obsoletes --> + <query cacheable="true" name="allTaxonNamesIsReferentWithObsoletes" > + <![CDATA[ + SELECT + tn.referenceTaxon.id, + tn.id, + tn.isReferent, + tn.name, + tn.isTemporary + FROM + TaxonNameImpl tn + WHERE + tn.isReferent = true + ORDER BY + tn.name + ]]> + </query> + <!-- ===================================================================== --> <!-- === Fetch profiles === --> <!-- ===================================================================== --> 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 75cfb3b..fa867c4 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 @@ -650,6 +650,11 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override + public List<Vessel> getAllVesselWithObsoletes() { + return driver.getAllVesselWithObsoletes(); + } + + @Override public List<Species> getAllSpecies() { return driver.getAllSpecies(); } @@ -660,6 +665,11 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override + public List<Species> getAllReferentSpeciesWithObsoletes() { + return driver.getAllReferentSpeciesWithObsoletes(); + } + + @Override public Species getSpeciesByReferenceTaxonId(Integer referenceTaxonId) { return driver.getSpeciesByReferenceTaxonId(referenceTaxonId); } @@ -710,6 +720,11 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override + public List<TuttiLocation> getAllHarbourWithObsoletes() { + return driver.getAllHarbourWithObsoletes(); + } + + @Override public TuttiLocation getLocation(String id) { return driver.getLocation(id); } @@ -731,11 +746,21 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override + public List<Gear> getAllGearWithObsoletes() { + return driver.getAllGearWithObsoletes(); + } + + @Override public List<Person> getAllPerson() { return driver.getAllPerson(); } @Override + public List<Person> getAllPersonWithObsoletes() { + return driver.getAllPersonWithObsoletes(); + } + + @Override public List<ObjectType> getAllObjectType() { return driver.getAllObjectType(); } @@ -746,16 +771,31 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override + public List<TuttiLocation> getAllFishingOperationStrataWithObsoletes(String zoneId) { + return driver.getAllFishingOperationStrataWithObsoletes(zoneId); + } + + @Override public List<TuttiLocation> getAllFishingOperationSubStrata(String zoneId, String strataId) { return driver.getAllFishingOperationSubStrata(zoneId, strataId); } @Override + public List<TuttiLocation> getAllFishingOperationSubStrataWithObsoletes(String zoneId, String strataId) { + return driver.getAllFishingOperationSubStrataWithObsoletes(zoneId, strataId); + } + + @Override public List<TuttiLocation> getAllFishingOperationLocation(String zoneId, String strataId, String subStrataId) { return driver.getAllFishingOperationLocation(zoneId, strataId, subStrataId); } @Override + public List<TuttiLocation> getAllFishingOperationLocationWithObsoletes(String zoneId, String strataId, String subStrataId) { + return driver.getAllFishingOperationLocationWithObsoletes(zoneId, strataId, subStrataId); + } + + @Override public Caracteristic getSizeCategoryCaracteristic() { return driver.getSizeCategoryCaracteristic(); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.