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 5170fca59d28077ef7475496af637ac790a78379 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Feb 15 13:49:24 2015 +0100 split import referential method in add and update method introduce link referential concept (for generic import) --- .../tutti/persistence/TuttiPersistenceImpl.java | 56 +++++++++-- .../persistence/TuttiPersistenceNoDbImpl.java | 48 ++++++++- .../referential/GearPersistenceService.java | 29 +++++- .../referential/GearPersistenceServiceImpl.java | 99 ++++++++++++++++++- .../referential/PersonPersistenceService.java | 29 +++++- .../referential/PersonPersistenceServiceImpl.java | 108 ++++++++++++++++----- .../referential/SpeciesPersistenceService.java | 29 +++++- .../referential/SpeciesPersistenceServiceImpl.java | 86 +++++++++++++++- .../referential/VesselPersistenceService.java | 29 +++++- .../referential/VesselPersistenceServiceImpl.java | 99 ++++++++++++++++--- 10 files changed, 536 insertions(+), 76 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 1dda3e4..0fc00c0 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 @@ -465,8 +465,18 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override - public Collection<Gear> importTemporaryGear(Collection<Gear> gears) { - return getGearService().importTemporaryGear(gears); + public List<Gear> addTemporaryGears(List<Gear> gears) { + return getGearService().addTemporaryGears(gears); + } + + @Override + public List<Gear> updateTemporaryGears(List<Gear> gears) { + return getGearService().updateTemporaryGears(gears); + } + + @Override + public List<Gear> linkTemporaryGears(List<Gear> gears) { + return getGearService().linkTemporaryGears(gears); } @Override @@ -533,8 +543,18 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override - public Collection<Species> importTemporarySpecies(Collection<Species> species) { - return getSpeciesService().importTemporarySpecies(species); + public List<Species> addTemporarySpecies(List<Species> species) { + return getSpeciesService().addTemporarySpecies(species); + } + + @Override + public List<Species> updateTemporarySpecies(List<Species> species) { + return getSpeciesService().updateTemporarySpecies(species); + } + + @Override + public List<Species> linkTemporarySpecies(List<Species> species) { + return getSpeciesService().linkTemporarySpecies(species); } @Override @@ -592,8 +612,18 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override - public Collection<Person> importTemporaryPerson(Collection<Person> persons) { - return getPersonService().importTemporaryPerson(persons); + public List<Person> addTemporaryPersons(List<Person> persons) { + return getPersonService().addTemporaryPersons(persons); + } + + @Override + public List<Person> updateTemporaryPersons(List<Person> persons) { + return getPersonService().updateTemporaryPersons(persons); + } + + @Override + public List<Person> linkTemporaryPersons(List<Person> persons) { + return getPersonService().linkTemporaryPersons(persons); } @Override @@ -636,8 +666,18 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override - public Collection<Vessel> importTemporaryVessel(Collection<Vessel> vessels) { - return getVesselService().importTemporaryVessel(vessels); + public List<Vessel> addTemporaryVessels(List<Vessel> vessels) { + return getVesselService().addTemporaryVessels(vessels); + } + + @Override + public List<Vessel> updateTemporaryVessels(List<Vessel> vessels) { + return getVesselService().updateTemporaryVessels(vessels); + } + + @Override + public List<Vessel> linkTemporaryVessels(List<Vessel> vessels) { + return getVesselService().linkTemporaryVessels(vessels); } @Override 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 0e21672..1aa18f6 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 @@ -317,22 +317,62 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override - public Collection<Species> importTemporarySpecies(Collection<Species> species) { + public List<Species> addTemporarySpecies(List<Species> species) { throw notImplemented(); } @Override - public Collection<Vessel> importTemporaryVessel(Collection<Vessel> vessels) { + public List<Species> updateTemporarySpecies(List<Species> species) { throw notImplemented(); } @Override - public Collection<Person> importTemporaryPerson(Collection<Person> persons) { + public List<Species> linkTemporarySpecies(List<Species> specieses) { throw notImplemented(); } @Override - public Collection<Gear> importTemporaryGear(Collection<Gear> gears) { + public List<Vessel> addTemporaryVessels(List<Vessel> vessels) { + throw notImplemented(); + } + + @Override + public List<Vessel> updateTemporaryVessels(List<Vessel> vessels) { + throw notImplemented(); + } + + @Override + public List<Vessel> linkTemporaryVessels(List<Vessel> vessels) { + throw notImplemented(); + } + + @Override + public List<Person> addTemporaryPersons(List<Person> persons) { + throw notImplemented(); + } + + @Override + public List<Person> updateTemporaryPersons(List<Person> persons) { + throw notImplemented(); + } + + @Override + public List<Person> linkTemporaryPersons(List<Person> persons) { + throw notImplemented(); + } + + @Override + public List<Gear> addTemporaryGears(List<Gear> gears) { + throw notImplemented(); + } + + @Override + public List<Gear> updateTemporaryGears(List<Gear> gears) { + throw notImplemented(); + } + + @Override + public List<Gear> linkTemporaryGears(List<Gear> gears) { throw notImplemented(); } 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 d0499fd..5fe9497 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 @@ -56,14 +56,35 @@ public interface GearPersistenceService extends TuttiPersistenceServiceImplement boolean isTemporaryGearUsed(Integer id); /** - * Import given temporary gears. + * Add given temporary gears. * - * @param gears gears to import - * @since 1.0 + * @param gears gears to add + * @return added gears + * @since 3.14 */ @Transactional(readOnly = false) @CacheEvict(value = "gears", allEntries = true) - Collection<Gear> importTemporaryGear(Collection<Gear> gears); + List<Gear> addTemporaryGears(List<Gear> gears); + + /** + * Update given temporary gears. + * + * @param gears gears to update + * @return updated gears + * @since 3.14 + */ + @Transactional(readOnly = false) + @CacheEvict(value = "gears", allEntries = true) + List<Gear> updateTemporaryGears(List<Gear> gears); + + /** + * Link temporary gears. (Means get existing references using gears natural ids). + * + * @param gears gears to link + * @return linked gears + * @since 3.14 + */ + List<Gear> linkTemporaryGears(List<Gear> gears); /** * Replace the {@code source} gear by 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 04e6673..0c9d64b 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 @@ -90,7 +90,7 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup public Gear getGear(Integer gearId) { Object[] source = queryUnique( - "gear", + "gearById", "gearId", IntegerType.INSTANCE, gearId); Gear result = source == null ? null : loadGear(source); @@ -111,15 +111,42 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup } @Override - public Collection<Gear> importTemporaryGear(Collection<Gear> gears) { + public List<Gear> addTemporaryGears(List<Gear> gears) { + + fr.ifremer.adagio.core.dao.referential.Status status = + statusDao.load(StatusCode.TEMPORARY.getValue()); List<Gear> result = Lists.newArrayList(); + for (Gear source : gears) { + Gear added = addTemporaryGear(source, status); + result.add(added); + } + return Collections.unmodifiableList(result); + + } + + @Override + public List<Gear> updateTemporaryGears(List<Gear> gears) { fr.ifremer.adagio.core.dao.referential.Status status = statusDao.load(StatusCode.TEMPORARY.getValue()); + + List<Gear> result = Lists.newArrayList(); for (Gear source : gears) { - source = importTemporaryGear(source, status); - result.add(source); + Gear updated = updateTemporaryGear(source, status); + result.add(updated); + } + return Collections.unmodifiableList(result); + + } + + @Override + public List<Gear> linkTemporaryGears(List<Gear> gears) { + + List<Gear> result = Lists.newArrayList(); + for (Gear source : gears) { + Gear linked = linkTemporaryGear(source); + result.add(linked); } return Collections.unmodifiableList(result); @@ -211,6 +238,70 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup } + protected Gear addTemporaryGear(Gear source, fr.ifremer.adagio.core.dao.referential.Status status) { + + Preconditions.checkNotNull(source); + Preconditions.checkNotNull(source.getLabel()); + Preconditions.checkNotNull(source.getName()); + Preconditions.checkArgument(source.getId() == null || Gears.isTemporaryId(source.getIdAsInt())); + + Integer gearClassificationId; + if (source.isScientificGear()) { + gearClassificationId = GearClassificationId.SCIENTIFIC_CRUISE.getValue(); + } else { + gearClassificationId = GearClassificationId.FAO.getValue(); + } + + fr.ifremer.adagio.core.dao.referential.gear.Gear target = fishingGearDao.createAsTemporary(source.getLabel(), source.getName(), gearClassificationId); + Gear result = Gears.newGear(); + result.setId(target.getId()); + + // Fill the result bean + result.setLabel(source.getLabel()); + result.setName(source.getName()); + result.setScientificGear(source.isScientificGear()); + setStatus(status, result); + return result; + + } + + protected Gear updateTemporaryGear(Gear source, fr.ifremer.adagio.core.dao.referential.Status status) { + + Preconditions.checkNotNull(source); + Preconditions.checkNotNull(source.getId()); + Preconditions.checkNotNull(source.getLabel()); + Preconditions.checkNotNull(source.getName()); + Preconditions.checkArgument(Gears.isTemporaryId(source.getIdAsInt())); + + Gear result = getGear(source.getIdAsInt()); + + // Fill the result bean + result.setLabel(source.getLabel()); + result.setName(source.getName()); + result.setScientificGear(source.isScientificGear()); + setStatus(status, result); + return result; + + } + + protected Gear linkTemporaryGear(Gear source) { + + Preconditions.checkNotNull(source); + Preconditions.checkNotNull(source.getId()); + Preconditions.checkNotNull(source.getLabel()); + Preconditions.checkNotNull(source.getName()); + Preconditions.checkArgument(Gears.isTemporaryId(source.getIdAsInt())); + + + Object[] row = queryUnique( + "gearById", + "gearId", IntegerType.INSTANCE, source.getName()); + + Gear result = row == null ? null : loadGear(row); + return result; + + } + protected Gear loadGear(Object[] source) { Gear result = Gears.newGear(); 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 7d51ee8..03c0965 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 @@ -57,14 +57,35 @@ public interface PersonPersistenceService extends TuttiPersistenceServiceImpleme boolean isTemporaryPersonUsed(Integer id); /** - * Import given temporary persons. + * Add temporary persons. * - * @param persons persons to import - * @since 1.0 + * @param persons persons to add + * @return added persons + * @since 3.14 */ @Transactional(readOnly = false) @CacheEvict(value = {"persons", "personById"}, allEntries = true) - Collection<Person> importTemporaryPerson(Collection<Person> persons); + List<Person> addTemporaryPersons(List<Person> persons); + + /** + * Update temporary persons. + * + * @param persons persons to update + * @return updated persons + * @since 3.14 + */ + @Transactional(readOnly = false) + @CacheEvict(value = {"persons", "personById"}, allEntries = true) + List<Person> updateTemporaryPersons(List<Person> persons); + + /** + * Link temporary persons. (Means get existing references using persons natural ids). + * + * @param persons persons to link + * @return linked persons + * @since 3.14 + */ + List<Person> linkTemporaryPersons(List<Person> persons); /** * Replace the {@code source} person by 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 44e6798..6e2081f 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 @@ -80,8 +80,8 @@ public class PersonPersistenceServiceImpl extends ReferentialPersistenceServiceS @Override public Person getPerson(Integer personId) { - Object[] source = queryUnique( - "person", + Object[] source = queryUniqueWithStatus( + "personById", "personId", IntegerType.INSTANCE, personId); Person result = source == null ? null : loadPerson(source); @@ -113,15 +113,42 @@ public class PersonPersistenceServiceImpl extends ReferentialPersistenceServiceS } @Override - public Collection<Person> importTemporaryPerson(Collection<Person> persons) { + public List<Person> addTemporaryPersons(List<Person> persons) { + + fr.ifremer.adagio.core.dao.referential.Status status = + statusDao.load(StatusCode.TEMPORARY.getValue()); List<Person> result = Lists.newArrayList(); + for (Person source : persons) { + Person added = addTemporaryPerson(source, status); + result.add(added); + } + return Collections.unmodifiableList(result); + + } + + @Override + public List<Person> updateTemporaryPersons(List<Person> persons) { fr.ifremer.adagio.core.dao.referential.Status status = statusDao.load(StatusCode.TEMPORARY.getValue()); + + List<Person> result = Lists.newArrayList(); + for (Person source : persons) { + Person updated = updateTemporaryPerson(source, status); + result.add(updated); + } + return Collections.unmodifiableList(result); + + } + + @Override + public List<Person> linkTemporaryPersons(List<Person> persons) { + + List<Person> result = Lists.newArrayList(); for (Person source : persons) { - source = importTemporaryPerson(source, status); - result.add(source); + Person linked = linkTemporaryPerson(source); + result.add(linked); } return Collections.unmodifiableList(result); @@ -190,35 +217,36 @@ public class PersonPersistenceServiceImpl extends ReferentialPersistenceServiceS } - protected Person loadPerson(Object[] source) { + protected Person addTemporaryPerson(Person source, fr.ifremer.adagio.core.dao.referential.Status status) { - Person target = Persons.newPerson(); - target.setId(String.valueOf(source[0])); - target.setLastName((String) source[1]); - target.setFirstName((String) source[2]); - target.setDepartment((String) source[3]); - setStatus((fr.ifremer.adagio.core.dao.referential.Status) source[4], target); - return target; + Preconditions.checkNotNull(source); + Preconditions.checkNotNull(source.getFirstName()); + Preconditions.checkNotNull(source.getLastName()); + Preconditions.checkArgument(source.getIdAsInt() == null || Persons.isTemporaryId(source.getIdAsInt())); + + fr.ifremer.adagio.core.dao.administration.user.Person target = + personDao.createAsTemporary(source.getLastName(), source.getFirstName(), + DepartmentId.UNKNOWN_RECORDER_DEPARTMENT.getValue()); + Person result = Persons.newPerson(); + result.setId(target.getId()); + + // Fill the result bean + result.setLastName(source.getLastName()); + result.setFirstName(source.getFirstName()); + setStatus(status, result); + return result; } - protected Person importTemporaryPerson(Person source, fr.ifremer.adagio.core.dao.referential.Status status) { + protected Person updateTemporaryPerson(Person source, fr.ifremer.adagio.core.dao.referential.Status status) { Preconditions.checkNotNull(source); Preconditions.checkNotNull(source.getFirstName()); Preconditions.checkNotNull(source.getLastName()); + Preconditions.checkNotNull(source.getId()); + Preconditions.checkArgument(Persons.isTemporaryId(source.getIdAsInt())); - Person result; - if (source.getId() != null) { - result = getPerson(source.getIdAsInt()); - - } else { - fr.ifremer.adagio.core.dao.administration.user.Person target = - personDao.createAsTemporary(source.getLastName(), source.getFirstName(), - DepartmentId.UNKNOWN_RECORDER_DEPARTMENT.getValue()); - result = Persons.newPerson(); - result.setId(target.getId()); - } + Person result = getPerson(source.getIdAsInt()); // Fill the result bean result.setLastName(source.getLastName()); @@ -228,4 +256,34 @@ public class PersonPersistenceServiceImpl extends ReferentialPersistenceServiceS } + protected Person linkTemporaryPerson(Person source) { + + Preconditions.checkNotNull(source); + Preconditions.checkNotNull(source.getFirstName()); + Preconditions.checkNotNull(source.getLastName()); + Preconditions.checkNotNull(source.getId()); + Preconditions.checkArgument(Persons.isTemporaryId(source.getIdAsInt())); + + Object[] row = queryUniqueWithStatus( + "personByFullName", + "personFirstName", StringType.INSTANCE, source.getFirstName(), + "personLastName", StringType.INSTANCE, source.getLastName()); + + Person result = row == null ? null : loadPerson(row); + return result; + + } + + protected Person loadPerson(Object[] source) { + + Person target = Persons.newPerson(); + target.setId(String.valueOf(source[0])); + target.setLastName((String) source[1]); + target.setFirstName((String) source[2]); + target.setDepartment((String) source[3]); + setStatus((fr.ifremer.adagio.core.dao.referential.Status) source[4], target); + return target; + + } + } 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 8b79ff0..3cd3750 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 @@ -92,14 +92,35 @@ public interface SpeciesPersistenceService extends TuttiPersistenceServiceImplem boolean isTemporarySpeciesUsed(Integer referenceTaxonId); /** - * Import given temporary species. + * Add temporary species. * - * @param species species to import - * @since 1.0 + * @param species species to add + * @return added species + * @since 3.14 */ @Transactional(readOnly = false) @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular"}, allEntries = true) - Collection<Species> importTemporarySpecies(Collection<Species> species); + List<Species> addTemporarySpecies(List<Species> species); + + /** + * Update temporary species. + * + * @param species species to update + * @return updated species + * @since 3.14 + */ + @Transactional(readOnly = false) + @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular"}, allEntries = true) + List<Species> updateTemporarySpecies(List<Species> species); + + /** + * Link temporary species. (Means get existing references using species natural ids). + * + * @param species species to link + * @return linked species + * @since 3.14 + */ + List<Species> linkTemporarySpecies(List<Species> species); /** * Replace the {@code source} species by 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 e2d5e80..482f950 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 @@ -26,15 +26,18 @@ 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.ReferenceTaxonDao; import fr.ifremer.adagio.core.dao.referential.taxon.TaxonName; import fr.ifremer.adagio.core.dao.referential.taxon.TaxonNameExtendDao; import fr.ifremer.adagio.core.dao.referential.taxon.TaxonNameImpl; import fr.ifremer.adagio.core.dao.referential.taxon.TaxonRefVO; import fr.ifremer.adagio.core.dao.referential.transcribing.TranscribingItemTypeId; +import fr.ifremer.adagio.core.dao.technical.hibernate.TemporaryDataHelper; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; import org.apache.commons.lang3.StringUtils; import org.hibernate.type.IntegerType; +import org.hibernate.type.StringType; import org.nuiton.jaxx.application.ApplicationBusinessException; import org.springframework.cache.Cache; import org.springframework.dao.DataRetrievalFailureException; @@ -57,6 +60,9 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService @Resource(name = "taxonNameDao") protected TaxonNameExtendDao taxonNameDao; + @Resource(name = "referenceTaxonDao") + protected ReferenceTaxonDao referenceTaxonDao; + @Override public List<Species> getAllSpecies() { @@ -168,12 +174,36 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService } @Override - public Collection<Species> importTemporarySpecies(Collection<Species> species) { + public List<Species> addTemporarySpecies(List<Species> species) { + + List<Species> result = Lists.newArrayList(); + for (Species source : species) { + Species added = addTemporarySpecies(source); + result.add(added); + } + return Collections.unmodifiableList(result); + + } + + @Override + public List<Species> updateTemporarySpecies(List<Species> species) { List<Species> result = Lists.newArrayList(); for (Species source : species) { - source = importTemporarySpecies(source); - result.add(source); + Species updated = updateTemporarySpecies(source); + result.add(updated); + } + return Collections.unmodifiableList(result); + + } + + @Override + public List<Species> linkTemporarySpecies(List<Species> species) { + + List<Species> result = Lists.newArrayList(); + for (Species source : species) { + Species linked = linkTemporarySpecies(source); + result.add(linked); } return Collections.unmodifiableList(result); @@ -233,11 +263,11 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService } - protected Species importTemporarySpecies(Species source) { + protected Species addTemporarySpecies(Species source) { Preconditions.checkNotNull(source); Preconditions.checkNotNull(source.getName()); - Preconditions.checkArgument(source.getIdAsInt() == null || source.getIdAsInt() < 0); + Preconditions.checkArgument(source.getId() == null || Speciess.isTemporaryId(source.getIdAsInt())); TaxonRefVO taxonRefVO = null; if (source.getReferenceTaxonId() != null) { @@ -268,6 +298,52 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService } + protected Species updateTemporarySpecies(Species source) { + + Preconditions.checkNotNull(source); + Preconditions.checkNotNull(source.getName()); + Preconditions.checkNotNull(source.getId()); + Preconditions.checkNotNull(source.getReferenceTaxonId()); + Preconditions.checkArgument(Speciess.isTemporaryId(source.getIdAsInt())); + + TaxonRefVO taxonRefVO = taxonNameDao.getTaxonNameReferent(source.getReferenceTaxonId()); + + TaxonName taxonName = load(TaxonNameImpl.class, taxonRefVO.getTaxonNameId()); + taxonName.setName(source.getName()); + taxonRefVO.setName(source.getName()); + taxonNameDao.update(taxonName); + + // update the source + Species result = loadSpecies(taxonRefVO); + result.setRefTaxCode(result.getExternalCode()); + + // Add to cache + Cache cache = cacheService.getCache("referentSpeciesById"); + cache.put(result.getIdAsInt(), result); + + return result; + + } + + protected Species linkTemporarySpecies(Species source) { + + Preconditions.checkNotNull(source); + Preconditions.checkNotNull(source.getName()); + Preconditions.checkNotNull(source.getId()); + Preconditions.checkNotNull(source.getReferenceTaxonId()); + Preconditions.checkArgument(Speciess.isTemporaryId(source.getIdAsInt())); + + String taxonName =TemporaryDataHelper.TEMPORARY_NAME_PREFIX + source.getName(); + Object[] row = queryUnique( + "taxonNameReferenceTaxonId", + "taxonName", StringType.INSTANCE, taxonName); + + Integer referenceTaxonId = (Integer) row[0]; + Species result = getSpeciesByReferenceTaxonId(referenceTaxonId); + return result; + + } + protected Species loadSpecies(TaxonRefVO source) { Species target = Speciess.newSpecies(); 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 370fa8f..5472d8e 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 @@ -77,14 +77,35 @@ public interface VesselPersistenceService extends TuttiPersistenceServiceImpleme boolean isTemporaryVesselUsed(String code); /** - * Import given temporary vessels. + * Add temporary vessels. * - * @param vessels vessels to import - * @since 1.0 + * @param vessels vessels to add + * @return added vessels + * @since 3.14 */ @Transactional(readOnly = false) @CacheEvict(value = {"fishingVessels", "vesselByCode"}, allEntries = true) - Collection<Vessel> importTemporaryVessel(Collection<Vessel> vessels); + List<Vessel> addTemporaryVessels(List<Vessel> vessels); + + /** + * Update temporary vessels. + * + * @param vessels vessels to update + * @return updated vessels + * @since 3.14 + */ + @Transactional(readOnly = false) + @CacheEvict(value = {"fishingVessels", "vesselByCode"}, allEntries = true) + List<Vessel> updateTemporaryVessels(List<Vessel> vessels); + + /** + * Link temporary vessels. (Means get existing references using vessels natural ids). + * + * @param vessels vessels to link + * @return linked vessels + * @since 3.14 + */ + List<Vessel> linkTemporaryVessels(List<Vessel> vessels); /** * Replace the {@code source} vessel by 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 82673d7..e77f8d8 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 @@ -27,6 +27,7 @@ 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.data.vessel.VesselExtendDao; +import fr.ifremer.adagio.core.dao.referential.Status; import fr.ifremer.adagio.core.dao.referential.StatusCode; import fr.ifremer.adagio.core.dao.referential.VesselTypeId; import fr.ifremer.adagio.core.dao.referential.location.LocationExtendDao; @@ -35,6 +36,7 @@ import fr.ifremer.adagio.core.dao.referential.location.LocationLevelId; import fr.ifremer.adagio.core.dao.technical.hibernate.TemporaryDataHelper; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.entities.referential.Vessels; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.type.DateType; @@ -83,7 +85,7 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS while (list.hasNext()) { Object[] source = list.next(); - Vessel target = loadVessel(source, true); + Vessel target = loadVessel(source); result.add(target); // Add to cache vesselByCodeCache.put(target.getId(), target); @@ -106,7 +108,7 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS while (list.hasNext()) { Object[] source = list.next(); - Vessel target = loadVessel(source, true); + Vessel target = loadVessel(source); target.setScientificVessel(false); result.add(target); @@ -126,13 +128,13 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS // Warning : return a list because more than one line could be found, // but 'order by' assume that the first one in the good row Iterator<Object[]> source = queryListWithStatus( - "vessel", + "vesselByCode", "vesselCode", StringType.INSTANCE, vesselCode, "refDate", DateType.INSTANCE, new Date() ); Vessel result; if (source.hasNext()) - result = loadVessel(source.next(), false); + result = loadVessel(source.next()); else result = null; return result; @@ -190,12 +192,8 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS } @Override - public Collection<Vessel> importTemporaryVessel(Collection<Vessel> vessels) { + public List<Vessel> addTemporaryVessels(List<Vessel> vessels) { - List<Vessel> result = Lists.newArrayList(); - - fr.ifremer.adagio.core.dao.referential.Status status = - statusDao.load(StatusCode.TEMPORARY.getValue()); Integer countryLocationId = locationDao.getLocationIdByLabelAndLocationLevel( LocationLabel.FRANCE.getValue(), @@ -204,9 +202,40 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS throw new DataIntegrityViolationException("Default country location not found, with label=" + LocationLabel.FRANCE.getValue()); } + fr.ifremer.adagio.core.dao.referential.Status status = + statusDao.load(StatusCode.TEMPORARY.getValue()); + + List<Vessel> result = Lists.newArrayList(); + for (Vessel source : vessels) { + Vessel added = addTemporaryVessel(source, countryLocationId, status); + result.add(added); + } + return Collections.unmodifiableList(result); + + } + + @Override + public List<Vessel> updateTemporaryVessels(List<Vessel> vessels) { + + fr.ifremer.adagio.core.dao.referential.Status status = + statusDao.load(StatusCode.TEMPORARY.getValue()); + + List<Vessel> result = Lists.newArrayList(); + for (Vessel source : vessels) { + Vessel updated = updateTemporaryVessel(source, status); + result.add(updated); + } + return Collections.unmodifiableList(result); + + } + + @Override + public List<Vessel> linkTemporaryVessels(List<Vessel> vessels) { + + List<Vessel> result = Lists.newArrayList(); for (Vessel source : vessels) { - source = importTemporaryVessel(source, countryLocationId, status); - result.add(source); + Vessel linked = linkTemporaryVessel(source); + result.add(linked); } return Collections.unmodifiableList(result); @@ -294,11 +323,12 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS } - protected Vessel importTemporaryVessel(Vessel source, Integer registrationLocationId, fr.ifremer.adagio.core.dao.referential.Status status) { + protected Vessel addTemporaryVessel(Vessel source, Integer registrationLocationId, fr.ifremer.adagio.core.dao.referential.Status status) { Preconditions.checkNotNull(source); Preconditions.checkNotNull(source.getName()); Preconditions.checkNotNull(source.getInternationalRegistrationCode()); + Preconditions.checkArgument(StringUtils.isBlank(source.getId()) || Vessels.isTemporaryId(source.getId())); Integer vesselTypeId; if (source.isScientificVessel()) { @@ -327,15 +357,56 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS } - protected Vessel loadVessel(Object[] source, boolean scientificVessel) { + protected Vessel updateTemporaryVessel(Vessel source, Status status) { + + Preconditions.checkNotNull(source); + Preconditions.checkNotNull(source.getId()); + Preconditions.checkNotNull(source.getName()); + Preconditions.checkNotNull(source.getInternationalRegistrationCode()); + Preconditions.checkArgument(Vessels.isTemporaryId(source.getId())); + + // Fill the result bean + Vessel result = getVessel(source.getId()); + result.setName(source.getName()); + result.setRegistrationCode(source.getRegistrationCode()); + result.setInternationalRegistrationCode(source.getInternationalRegistrationCode()); + result.setScientificVessel(source.isScientificVessel()); + setStatus(status, result); + return result; + + } + + protected Vessel linkTemporaryVessel(Vessel source) { + + Preconditions.checkNotNull(source); + Preconditions.checkNotNull(source.getId()); + Preconditions.checkNotNull(source.getName()); + Preconditions.checkNotNull(source.getInternationalRegistrationCode()); + Preconditions.checkArgument(Vessels.isTemporaryId(source.getId())); + + // Warning : return a list because more than one line could be found, + // but 'order by' assume that the first one in the good row + Iterator<Object[]> row = queryListWithStatus( + "vesselByInternationalRegistrationCode", + "vesselInternationalRegistrationCode", StringType.INSTANCE, source.getInternationalRegistrationCode(), + "refDate", DateType.INSTANCE, new Date() + ); + Vessel result = row.hasNext() ? loadVessel(row.next()) : null; + return result; + + } + + protected Vessel loadVessel(Object[] source) { Vessel target = Vessels.newVessel(); target.setId((String) source[0]); target.setRegistrationCode((String) source[1]); target.setInternationalRegistrationCode((String) source[2]); target.setName((String) source[3]); + Integer vesselTypeId = (Integer) source[4]; + boolean scientificVessel = VesselTypeId.SCIENTIFIC_RESEARCH_VESSEL.getValue().equals(vesselTypeId); target.setScientificVessel(scientificVessel); - setStatus((fr.ifremer.adagio.core.dao.referential.Status) source[4], target); + setStatus((fr.ifremer.adagio.core.dao.referential.Status) source[5], target); return target; } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.