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 07a06d9cf3c2321809395ea38207cfa2f286f0c0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Nov 16 21:31:53 2014 +0100 review referential import services --- .../tutti/persistence/TuttiPersistenceImpl.java | 42 +- .../persistence/TuttiPersistenceNoDbImpl.java | 14 +- .../tutti/persistence/entities/TuttiEntities.java | 12 +- .../entities/protocol/TuttiProtocols.java | 41 +- .../persistence/entities/referential/Gears.java | 8 + .../persistence/entities/referential/Persons.java | 11 + .../persistence/entities/referential/Speciess.java | 7 + .../persistence/entities/referential/Vessels.java | 8 + .../referential/GearPersistenceService.java | 2 +- .../referential/GearPersistenceServiceImpl.java | 2 +- .../referential/PersonPersistenceService.java | 2 +- .../referential/PersonPersistenceServiceImpl.java | 2 +- .../referential/SpeciesPersistenceService.java | 24 +- .../referential/SpeciesPersistenceServiceImpl.java | 28 +- .../referential/VesselPersistenceService.java | 2 +- .../referential/VesselPersistenceServiceImpl.java | 2 +- .../GearPersistenceServiceWriteTest.java | 8 +- .../PersonPersistenceServiceWriteTest.java | 8 +- .../SpeciesPersistenceServiceWriteTest.java | 8 +- .../VesselPersistenceServiceWriteTest.java | 8 +- .../ifremer/tutti/service/PersistenceService.java | 40 +- .../tutti/service/referential/GearModel.java | 6 - .../ifremer/tutti/service/referential/GearRow.java | 71 +- .../service/referential/ImportRequestResult.java | 95 +++ .../tutti/service/referential/PersonModel.java | 5 - .../tutti/service/referential/PersonRow.java | 58 +- .../referential/ReferentialExportService.java | 375 ---------- .../referential/ReferentialImportService.java | 832 ++++++++++----------- .../ReferentialTemporaryGearService.java | 249 ++++++ .../ReferentialTemporaryPersonService.java | 244 ++++++ .../ReferentialTemporarySpeciesService.java | 239 ++++++ .../ReferentialTemporaryVesselService.java | 255 +++++++ .../tutti/service/referential/SpeciesModel.java | 10 - .../tutti/service/referential/SpeciesRow.java | 45 +- .../tutti/service/referential/VesselModel.java | 1 - .../tutti/service/referential/VesselRow.java | 73 +- .../pupitri/PupitriImportServiceAno5079Test.java | 7 +- .../referential/ReferentialImportServiceTest.java | 464 ------------ ... => ReferentialTemporaryExportServiceTest.java} | 71 +- .../ReferentialTemporaryGearServiceTest.java | 148 ++++ .../ReferentialTemporaryPersonServiceTest.java | 98 +++ .../ReferentialTemporarySpeciesServiceTest.java | 183 +++++ .../ReferentialTemporaryVesselServiceTest.java | 113 +++ .../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 22 +- .../action/ExportExistingTemporaryGearAction.java | 5 +- .../ExportExistingTemporaryPersonAction.java | 4 +- .../ExportExistingTemporarySpeciesAction.java | 4 +- .../ExportExistingTemporaryVesselAction.java | 4 +- .../action/ExportTemporaryGearExampleAction.java | 5 +- .../action/ExportTemporaryPersonExampleAction.java | 5 +- .../ExportTemporarySpeciesExampleAction.java | 5 +- .../action/ExportTemporaryVesselExampleAction.java | 5 +- .../ui/swing/action/ImportTemporaryGearAction.java | 4 +- .../swing/action/ImportTemporaryPersonAction.java | 4 +- .../swing/action/ImportTemporarySpeciesAction.java | 6 +- .../swing/action/ImportTemporaryVesselAction.java | 6 +- .../action/ReplaceTemporarySpeciesAction.java | 1 + 57 files changed, 2546 insertions(+), 1455 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java index 905ece3..d4920e8 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 @@ -43,6 +43,7 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.ObjectType; @@ -460,7 +461,7 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override - public List<Gear> importTemporaryGear(List<Gear> gears) { + public Collection<Gear> importTemporaryGear(Collection<Gear> gears) { return gearService.importTemporaryGear(gears); } @@ -508,12 +509,33 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override - public boolean isTemporarySpeciesUsed(Integer id) { - return speciesService.isTemporarySpeciesUsed(id); + public boolean isTemporarySpeciesUsed(Integer referenceTaxonId) { + + TuttiProtocol protocol = getProtocol(); + + if (protocol != null) { + + // check first if species is used in protocol + + SpeciesProtocol speciesProtocol = TuttiProtocols.getSpeciesProtocol(protocol, referenceTaxonId); + if (speciesProtocol != null) { + + // used in species protocol + return true; + } + SpeciesProtocol benthosProtocol = TuttiProtocols.getBenthosProtocol(protocol, referenceTaxonId); + if (benthosProtocol != null) { + + // use in benthos protocol + return true; + } + + } + return speciesService.isTemporarySpeciesUsed(referenceTaxonId); } @Override - public List<Species> importTemporarySpecies(List<Species> species) { + public Collection<Species> importTemporarySpecies(Collection<Species> species) { return speciesService.importTemporarySpecies(species); } @@ -523,13 +545,13 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override - public void deleteTemporarySpecies(Integer id, boolean checkIfUsed) { - speciesService.deleteTemporarySpecies(id, checkIfUsed); + public void deleteTemporarySpecies(Integer referenceTaxonId, boolean checkIfUsed) { + speciesService.deleteTemporarySpecies(referenceTaxonId, checkIfUsed); } @Override - public void deleteTemporarySpecies(Collection<Integer> ids, boolean checkIfUsed) { - speciesService.deleteTemporarySpecies(ids, checkIfUsed); + public void deleteTemporarySpecies(Collection<Integer> referenceTaxonIds, boolean checkIfUsed) { + speciesService.deleteTemporarySpecies(referenceTaxonIds, checkIfUsed); } //------------------------------------------------------------------------// @@ -552,7 +574,7 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override - public List<Person> importTemporaryPerson(List<Person> persons) { + public Collection<Person> importTemporaryPerson(Collection<Person> persons) { return personService.importTemporaryPerson(persons); } @@ -596,7 +618,7 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override - public List<Vessel> importTemporaryVessel(List<Vessel> vessels) { + public Collection<Vessel> importTemporaryVessel(Collection<Vessel> vessels) { return vesselService.importTemporaryVessel(vessels); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java index c851bd7..b935f6a 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 @@ -306,22 +306,22 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override - public List<Species> importTemporarySpecies(List<Species> species) { + public Collection<Species> importTemporarySpecies(Collection<Species> species) { throw notImplemented(); } @Override - public List<Vessel> importTemporaryVessel(List<Vessel> vessels) { + public Collection<Vessel> importTemporaryVessel(Collection<Vessel> vessels) { throw notImplemented(); } @Override - public List<Person> importTemporaryPerson(List<Person> persons) { + public Collection<Person> importTemporaryPerson(Collection<Person> persons) { throw notImplemented(); } @Override - public List<Gear> importTemporaryGear(List<Gear> gears) { + public Collection<Gear> importTemporaryGear(Collection<Gear> gears) { throw notImplemented(); } @@ -766,12 +766,12 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override - public void deleteTemporarySpecies(Integer id, boolean checkIfUsed) { + public void deleteTemporarySpecies(Integer referenceTaxonId, boolean checkIfUsed) { throw notImplemented(); } @Override - public void deleteTemporarySpecies(Collection<Integer> ids, boolean checkIfUsed) { + public void deleteTemporarySpecies(Collection<Integer> referenceTaxonIds, boolean checkIfUsed) { throw notImplemented(); } @@ -801,7 +801,7 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override - public boolean isTemporarySpeciesUsed(Integer id) { + public boolean isTemporarySpeciesUsed(Integer referenceTaxonId) { throw notImplemented(); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java index 5d2cbd8..96186e3 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java @@ -71,14 +71,22 @@ public class TuttiEntities { return bean.getId() == null; } - protected static final Function<TuttiEntity, String> GET_ID = new Function<TuttiEntity, String>() { + public static final Function<TuttiEntity, String> GET_ID = new Function<TuttiEntity, String>() { @Override public String apply(TuttiEntity input) { return input.getId(); } }; - protected static final Function<TuttiEntity, Integer> GET_ID_AS_INT = new Function<TuttiEntity, Integer>() { + public static <E extends TuttiEntity> Function<E, String> newIdFunction() { + return (Function<E, String>) GET_ID; + } + + public static <E extends TuttiEntity> Function<E, Integer> newIdAstIntFunction() { + return (Function<E, Integer>) GET_ID_AS_INT; + } + + public static final Function<TuttiEntity, Integer> GET_ID_AS_INT = new Function<TuttiEntity, Integer>() { @Override public Integer apply(TuttiEntity input) { return input.getIdAsInt(); diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java index 1ee7ef4..17fd573 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java @@ -317,19 +317,31 @@ public class TuttiProtocols extends AbstractTuttiProtocols { } /** - * Return the speciesProtocol corresponding to the species of the given protocol. + * Return the species Protocol corresponding to the species of the given protocol. * - * @param protocol protocol to scan - * @param species species filter + * @param protocol protocol to scan + * @param speciesReferenceTaxonId species referenceTaxonId filter * @return the species protocol for the given species * @since 2.5 */ - public static SpeciesProtocol getSpeciesProtocol(TuttiProtocol protocol, Species species) { - return getSpeciesProtocol(species, protocol.getSpecies()); + public static SpeciesProtocol getSpeciesProtocol(TuttiProtocol protocol, Integer speciesReferenceTaxonId) { + return getSpeciesProtocol(speciesReferenceTaxonId, protocol.getSpecies()); } /** - * Return the speciesProtocol corresponding to the species of the species protocols. + * Return the benthos Protocol corresponding to the species of the given protocol. + * + * @param protocol protocol to scan + * @param speciesReferenceTaxonId species referenceTaxonId filter + * @return the benthos protocol for the given species + * @since 3.9 + */ + public static SpeciesProtocol getBenthosProtocol(TuttiProtocol protocol, Integer speciesReferenceTaxonId) { + return getSpeciesProtocol(speciesReferenceTaxonId, protocol.getBenthos()); + } + + /** + * Return the speciesProtocol row corresponding to the species of the species protocols. * * @param speciesProtocols species protocols to scan * @param species species filter @@ -337,9 +349,22 @@ public class TuttiProtocols extends AbstractTuttiProtocols { */ public static SpeciesProtocol getSpeciesProtocol(Species species, List<SpeciesProtocol> speciesProtocols) { + + return getSpeciesProtocol(species.getReferenceTaxonId(), speciesProtocols); + + } + + /** + * Return the speciesProtocol row corresponding to the species of the species protocols. + * + * @param speciesProtocols species protocols to scan + * @param speciesReferenceTaxonId speciesReferenceTaxonId filter + * @return the species protocol for the given species + */ + public static SpeciesProtocol getSpeciesProtocol(Integer speciesReferenceTaxonId, + List<SpeciesProtocol> speciesProtocols) { for (SpeciesProtocol speciesProtocol : speciesProtocols) { - if (species.getReferenceTaxonId().equals( - speciesProtocol.getSpeciesReferenceTaxonId())) { + if (speciesReferenceTaxonId.equals(speciesProtocol.getSpeciesReferenceTaxonId())) { return speciesProtocol; } } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Gears.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Gears.java index 4fd0d36..9382d1e 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Gears.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Gears.java @@ -25,6 +25,7 @@ package fr.ifremer.tutti.persistence.entities.referential; */ +import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.base.Predicate; @@ -52,6 +53,13 @@ public class Gears extends AbstractGears { } }; + public static final Function<Gear, String> GET_NAME = new Function<Gear, String>() { + @Override + public String apply(Gear input) { + return input.getName(); + } + }; + /** * Is the given {@code gear} a temporary data ? * diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Persons.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Persons.java index b25ae47..68abb6e 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Persons.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Persons.java @@ -24,8 +24,10 @@ package fr.ifremer.tutti.persistence.entities.referential; * #L% */ +import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.base.Predicate; +import org.apache.commons.lang3.StringUtils; public class Persons extends AbstractPersons { @@ -51,4 +53,13 @@ public class Persons extends AbstractPersons { return Persons.isTemporary(input); } }; + + public static final Function<Person, String> GET_FULL_NAME = new Function<Person, String>() { + @Override + public String apply(Person input) { + return StringUtils.lowerCase( + StringUtils.trimToEmpty(input.getFirstName()) + + StringUtils.trimToEmpty(input.getLastName())); + } + }; } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Speciess.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Speciess.java index e378151..4c21a37 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Speciess.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Speciess.java @@ -99,6 +99,13 @@ public class Speciess extends AbstractSpeciess { } }; + public static final Function<Species, String> GET_NAME= new Function<Species, String>() { + @Override + public String apply(Species input) { + return input.getName(); + } + }; + public static Map<String, Species> splitByTaxonId(Iterable<Species> list) { return Maps.uniqueIndex(list, GET_TAXON_ID); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Vessels.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Vessels.java index 86276ef..be0feb0 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Vessels.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/referential/Vessels.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.persistence.entities.referential; * #L% */ +import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.base.Predicate; import fr.ifremer.adagio.core.dao.technical.hibernate.TemporaryDataHelper; @@ -37,6 +38,13 @@ public class Vessels extends AbstractVessels { } }; + public static final Function<Vessel, String> GET_INTERNAL_REGISTRATION_CODE = new Function<Vessel, String>() { + @Override + public String apply(Vessel input) { + return input.getInternationalRegistrationCode(); + } + }; + /** * Is the given {@code vessel} a temporary data ? * 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 2c052c8..79d9b8d 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 @@ -63,7 +63,7 @@ public interface GearPersistenceService extends TuttiPersistenceServiceImplement */ @Transactional(readOnly = false) @CacheEvict(value = "gears", allEntries = true) - List<Gear> importTemporaryGear(List<Gear> gears); + Collection<Gear> importTemporaryGear(Collection<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 98e8f2d..3e719e1 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 @@ -111,7 +111,7 @@ public class GearPersistenceServiceImpl extends ReferentialPersistenceServiceSup } @Override - public List<Gear> importTemporaryGear(List<Gear> gears) { + public Collection<Gear> importTemporaryGear(Collection<Gear> gears) { List<Gear> result = Lists.newArrayList(); 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 f121654..cdc75f2 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 @@ -64,7 +64,7 @@ public interface PersonPersistenceService extends TuttiPersistenceServiceImpleme */ @Transactional(readOnly = false) @CacheEvict(value = {"persons", "personById"}, allEntries = true) - List<Person> importTemporaryPerson(List<Person> persons); + Collection<Person> importTemporaryPerson(Collection<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 7fa213f..fce34fc 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 @@ -113,7 +113,7 @@ public class PersonPersistenceServiceImpl extends ReferentialPersistenceServiceS } @Override - public List<Person> importTemporaryPerson(List<Person> persons) { + public Collection<Person> importTemporaryPerson(Collection<Person> persons) { List<Person> result = Lists.newArrayList(); 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 56f31c9..173c5f4 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 @@ -84,12 +84,12 @@ public interface SpeciesPersistenceService extends TuttiPersistenceServiceImplem Species getSpeciesByReferenceTaxonIdWithVernacularCode(Integer referenceTaxonId); /** - * Check if the temporary species with the given {@code id} is used. + * Check if the temporary species with the given {@code referenceTaxonId} is used. * - * @param id id of the species to check + * @param referenceTaxonId referenceTaxonId of the species to check * @since 3.8 */ - boolean isTemporarySpeciesUsed(Integer id); + boolean isTemporarySpeciesUsed(Integer referenceTaxonId); /** * Import given temporary species. @@ -99,7 +99,7 @@ public interface SpeciesPersistenceService extends TuttiPersistenceServiceImplem */ @Transactional(readOnly = false) @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular"}, allEntries = true) - List<Species> importTemporarySpecies(List<Species> species); + Collection<Species> importTemporarySpecies(Collection<Species> species); /** * Replace the {@code source} species by @@ -117,25 +117,25 @@ public interface SpeciesPersistenceService extends TuttiPersistenceServiceImplem void replaceSpecies(Species source, Species target, boolean delete); /** - * Delete the temporary species with the given {@code ids}. + * Delete the temporary species with the given {@code referenceTaxonId}. * - * @param ids ids of the species to remove - * @param checkIfUsed to check if species is used before trying to delete it + * @param referenceTaxonIds referenceTaxonId of the species to remove + * @param checkIfUsed to check if species is used before trying to delete it * @since 3.8 */ @Transactional(readOnly = false) @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular"}, allEntries = true) - void deleteTemporarySpecies(Collection<Integer> ids, boolean checkIfUsed); + void deleteTemporarySpecies(Collection<Integer> referenceTaxonIds, boolean checkIfUsed); /** - * Delete the temporary species with the given {@code id}. + * Delete the temporary species with the given {@code referenceTaxonId}. * - * @param id id of the species to remove - * @param checkIfUsed to check if species is used before trying to delete it + * @param referenceTaxonId reference taxonId of the species to remove + * @param checkIfUsed to check if species is used before trying to delete it * @since 3.8 */ @Transactional(readOnly = false) @CacheEvict(value = {"species", "referentSpecies", "referentSpeciesById", "referentSpeciesByIdVernacular"}, allEntries = true) - void deleteTemporarySpecies(Integer id, boolean checkIfUsed); + void deleteTemporarySpecies(Integer referenceTaxonId, boolean checkIfUsed); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/SpeciesPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/SpeciesPersistenceServiceImpl.java index fbe6d8a..a2b294e 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 @@ -154,13 +154,13 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService } @Override - public boolean isTemporarySpeciesUsed(Integer id) { + public boolean isTemporarySpeciesUsed(Integer referenceTaxonId) { - Long count = queryUniqueTyped("countReferenceTaxonInSortingBatch", "id", IntegerType.INSTANCE, id); + Long count = queryUniqueTyped("countReferenceTaxonInSortingBatch", "id", IntegerType.INSTANCE, referenceTaxonId); boolean result = count > 0; if (!result) { - count = queryUniqueTyped("countReferenceTaxonInSample", "id", IntegerType.INSTANCE, id); + count = queryUniqueTyped("countReferenceTaxonInSample", "id", IntegerType.INSTANCE, referenceTaxonId); result = count > 0; } return result; @@ -168,7 +168,7 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService } @Override - public List<Species> importTemporarySpecies(List<Species> species) { + public Collection<Species> importTemporarySpecies(Collection<Species> species) { List<Species> result = Lists.newArrayList(); for (Species source : species) { @@ -209,31 +209,31 @@ public class SpeciesPersistenceServiceImpl extends ReferentialPersistenceService } @Override - public void deleteTemporarySpecies(Collection<Integer> ids, boolean checkIfUsed) { + public void deleteTemporarySpecies(Collection<Integer> referenceTaxonIds, boolean checkIfUsed) { - for (Integer id : ids) { + for (Integer id : referenceTaxonIds) { deleteTemporarySpecies(id, checkIfUsed); } } @Override - public void deleteTemporarySpecies(Integer id, boolean checkIfUsed) { + public void deleteTemporarySpecies(Integer referenceTaxonId, boolean checkIfUsed) { - Preconditions.checkNotNull(id); - if (id > 0) { - throw new ApplicationBusinessException(String.format("Can't delete a Species with a positive id %d.", id)); + Preconditions.checkNotNull(referenceTaxonId); + if (referenceTaxonId > 0) { + throw new ApplicationBusinessException(String.format("Can't delete a Species with a positive id %d.", referenceTaxonId)); } - Species species = getSpeciesByReferenceTaxonId(id); + Species species = getSpeciesByReferenceTaxonId(referenceTaxonId); if (species == null) { - throw new ApplicationBusinessException(String.format("Species with id %d does not exists", id)); + throw new ApplicationBusinessException(String.format("Species with id %d does not exists", referenceTaxonId)); } if (checkIfUsed) { - isTemporarySpeciesUsed(id); + isTemporarySpeciesUsed(referenceTaxonId); } - taxonNameDao.remove(id); + taxonNameDao.remove(species.getIdAsInt()); } 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 a29a8a9..adb6e13 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 @@ -84,7 +84,7 @@ public interface VesselPersistenceService extends TuttiPersistenceServiceImpleme */ @Transactional(readOnly = false) @CacheEvict(value = {"fishingVessels", "vesselByCode"}, allEntries = true) - List<Vessel> importTemporaryVessel(List<Vessel> vessels); + Collection<Vessel> importTemporaryVessel(Collection<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 ddf2b58..df29132 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 @@ -190,7 +190,7 @@ public class VesselPersistenceServiceImpl extends ReferentialPersistenceServiceS } @Override - public List<Vessel> importTemporaryVessel(List<Vessel> vessels) { + public Collection<Vessel> importTemporaryVessel(Collection<Vessel> vessels) { List<Vessel> result = Lists.newArrayList(); diff --git a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/GearPersistenceServiceWriteTest.java b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/GearPersistenceServiceWriteTest.java index 2968a27..2de94cf 100644 --- a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/GearPersistenceServiceWriteTest.java +++ b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/GearPersistenceServiceWriteTest.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.persistence.service.referential; * #L% */ +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Gears; @@ -32,6 +33,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import java.util.Collection; import java.util.List; /** @@ -74,12 +76,12 @@ public class GearPersistenceServiceWriteTest extends ReferentialPersistenceServi gears.add(g2); - List<Gear> gearList = service.importTemporaryGear(gears); + Collection<Gear> gearList = service.importTemporaryGear(gears); List<Gear> allScientificGear = service.getAllScientificGear(); List<Gear> allFishingGear = service.getAllFishingGear(); - Gear createdG1 = gearList.get(0); + Gear createdG1 = Iterables.get(gearList, 0); Assert.assertNotNull(createdG1); Assert.assertEquals(g1.getName(), createdG1.getName()); Assert.assertEquals(g1.getLabel(), createdG1.getLabel()); @@ -90,7 +92,7 @@ public class GearPersistenceServiceWriteTest extends ReferentialPersistenceServi Assert.assertTrue(allScientificGear.contains(createdG1)); Assert.assertFalse(allFishingGear.contains(createdG1)); - Gear createdG2 = gearList.get(1); + Gear createdG2 = Iterables.get(gearList, 1); Assert.assertNotNull(createdG2); Assert.assertEquals(g2.getName(), createdG2.getName()); Assert.assertEquals(g2.getLabel(), createdG2.getLabel()); diff --git a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/PersonPersistenceServiceWriteTest.java b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/PersonPersistenceServiceWriteTest.java index 175d33f..7f9f140 100644 --- a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/PersonPersistenceServiceWriteTest.java +++ b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/PersonPersistenceServiceWriteTest.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.persistence.service.referential; * #L% */ +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Persons; @@ -32,6 +33,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import java.util.Collection; import java.util.List; /** @@ -73,12 +75,12 @@ public class PersonPersistenceServiceWriteTest extends ReferentialPersistenceSer p2.setDepartment("Don't care" + timestamp2); persons.add(p2); - List<Person> personList = service.importTemporaryPerson(persons); + Collection<Person> personList = service.importTemporaryPerson(persons); Assert.assertNotNull(personList); Assert.assertEquals(2, personList.size()); - Person createdP1 = personList.get(0); + Person createdP1 = Iterables.get(personList, 0); Assert.assertNotNull(createdP1); Assert.assertEquals(p1.getFirstName(), createdP1.getFirstName()); Assert.assertEquals(p1.getLastName(), createdP1.getLastName()); @@ -93,7 +95,7 @@ public class PersonPersistenceServiceWriteTest extends ReferentialPersistenceSer Assert.assertEquals(createdP1, service.getPerson(Integer.valueOf(createdP1.getId()))); - Person createdP2 = personList.get(1); + Person createdP2 = Iterables.get(personList, 1); Assert.assertNotNull(createdP2); Assert.assertEquals(p2.getFirstName(), createdP2.getFirstName()); Assert.assertEquals(p2.getLastName(), createdP2.getLastName()); diff --git a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/SpeciesPersistenceServiceWriteTest.java b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/SpeciesPersistenceServiceWriteTest.java index b42ebc1..fb4846e 100644 --- a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/SpeciesPersistenceServiceWriteTest.java +++ b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/SpeciesPersistenceServiceWriteTest.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.persistence.service.referential; * #L% */ +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; @@ -32,6 +33,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import java.util.Collection; import java.util.List; /** @@ -74,11 +76,11 @@ public class SpeciesPersistenceServiceWriteTest extends ReferentialPersistenceSe Assert.assertNull(service.getSpeciesByReferenceTaxonId(sp1.getReferenceTaxonId())); //Assert.assertNull(service.getSpecies(sp2.getId())); - List<Species> speciesList = service.importTemporarySpecies(species); + Collection<Species> speciesList = service.importTemporarySpecies(species); Assert.assertNotNull(speciesList); Assert.assertEquals(2, speciesList.size()); - Species createdSp1 = speciesList.get(0); + Species createdSp1 = Iterables.get(speciesList, 0); Assert.assertNotNull(createdSp1); Assert.assertEquals(sp1.getName(), createdSp1.getName()); // TODO TC :question pour TC pourquoi faire le test suivant NotNull, car tu n'a rien mis en entree de ce code ? @@ -90,7 +92,7 @@ public class SpeciesPersistenceServiceWriteTest extends ReferentialPersistenceSe Assert.assertNotSame(sp1.getId(), createdSp1.getId()); Assert.assertEquals(createdSp1, service.getSpeciesByReferenceTaxonId(createdSp1.getReferenceTaxonId())); - Species createdSp2 = speciesList.get(1); + Species createdSp2 = Iterables.get(speciesList, 1); Assert.assertNotNull(createdSp2); Assert.assertEquals(sp2.getName(), createdSp2.getName()); Assert.assertTrue(createdSp2.isReferenceTaxon()); diff --git a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/VesselPersistenceServiceWriteTest.java b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/VesselPersistenceServiceWriteTest.java index 087b6ad..5ba2705 100644 --- a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/VesselPersistenceServiceWriteTest.java +++ b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/referential/VesselPersistenceServiceWriteTest.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.persistence.service.referential; * #L% */ +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.entities.referential.Vessels; @@ -32,6 +33,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import java.util.Collection; import java.util.List; /** @@ -74,7 +76,7 @@ public class VesselPersistenceServiceWriteTest extends ReferentialPersistenceSer Assert.assertNull(service.getVessel(v1.getId())); Assert.assertNull(service.getVessel(v2.getId())); - List<Vessel> vesselList = service.importTemporaryVessel(vessels); + Collection<Vessel> vesselList = service.importTemporaryVessel(vessels); Assert.assertNotNull(vesselList); Assert.assertEquals(2, vesselList.size()); @@ -82,7 +84,7 @@ public class VesselPersistenceServiceWriteTest extends ReferentialPersistenceSer List<Vessel> allScientificVessel = service.getAllScientificVessel(); List<Vessel> allFishingVessel = service.getAllFishingVessel(); - Vessel createdV1 = vesselList.get(0); + Vessel createdV1 = Iterables.get(vesselList, 0); Assert.assertNotNull(createdV1); Assert.assertEquals(v1.getName(), createdV1.getName()); Assert.assertEquals(v1.getInternationalRegistrationCode(), createdV1.getInternationalRegistrationCode()); @@ -93,7 +95,7 @@ public class VesselPersistenceServiceWriteTest extends ReferentialPersistenceSer Assert.assertTrue(allScientificVessel.contains(createdV1)); Assert.assertFalse(allFishingVessel.contains(createdV1)); - Vessel createdV2 = vesselList.get(1); + Vessel createdV2 = Iterables.get(vesselList, 1); Assert.assertNotNull(createdV2); Assert.assertEquals(v2.getName(), createdV2.getName()); Assert.assertEquals(v2.getInternationalRegistrationCode(), createdV2.getInternationalRegistrationCode()); 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 2d999f3..e28ce9a 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 @@ -980,22 +980,22 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override - public List<Species> importTemporarySpecies(List<Species> species) { + public Collection<Species> importTemporarySpecies(Collection<Species> species) { return driver.importTemporarySpecies(species); } @Override - public List<Vessel> importTemporaryVessel(List<Vessel> vessels) { + public Collection<Vessel> importTemporaryVessel(Collection<Vessel> vessels) { return driver.importTemporaryVessel(vessels); } @Override - public List<Person> importTemporaryPerson(List<Person> persons) { + public Collection<Person> importTemporaryPerson(Collection<Person> persons) { return driver.importTemporaryPerson(persons); } @Override - public List<Gear> importTemporaryGear(List<Gear> gears) { + public Collection<Gear> importTemporaryGear(Collection<Gear> gears) { return driver.importTemporaryGear(gears); } @@ -1030,13 +1030,13 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override - public void deleteTemporarySpecies(Integer id, boolean checkIfUsed) { - driver.deleteTemporarySpecies(id, checkIfUsed); + public void deleteTemporarySpecies(Integer referenceTaxonId, boolean checkIfUsed) { + driver.deleteTemporarySpecies(referenceTaxonId, checkIfUsed); } @Override - public void deleteTemporarySpecies(Collection<Integer> ids, boolean checkIfUsed) { - driver.deleteTemporarySpecies(ids, checkIfUsed); + public void deleteTemporarySpecies(Collection<Integer> referenceTaxonIds, boolean checkIfUsed) { + driver.deleteTemporarySpecies(referenceTaxonIds, checkIfUsed); } @Override @@ -1059,34 +1059,14 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer driver.deleteTemporaryVessels(codes, checkIfUsed); } -// @Override -// public boolean isTemporary(Gear gear) { -// return driver.isTemporary(gear); -// } - -// @Override -// public boolean isTemporary(Person person) { -// return driver.isTemporary(person); -// } - -// @Override -// public boolean isTemporary(Species species) { -// return driver.isTemporary(species); -// } - -// @Override -// public boolean isTemporary(Vessel vessel) { -// return driver.isTemporary(vessel); -// } - @Override public boolean isTemporaryPersonUsed(Integer id) { return driver.isTemporaryPersonUsed(id); } @Override - public boolean isTemporarySpeciesUsed(Integer id) { - return driver.isTemporarySpeciesUsed(id); + public boolean isTemporarySpeciesUsed(Integer referenceTaxonId) { + return driver.isTemporarySpeciesUsed(referenceTaxonId); } @Override diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java index 6574232..9ef9c6b 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java @@ -23,16 +23,10 @@ package fr.ifremer.tutti.service.referential; */ import fr.ifremer.tutti.persistence.entities.referential.Gear; -import fr.ifremer.tutti.persistence.entities.referential.Gears; -import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.TuttiCsvUtil; import org.nuiton.csv.Common; -import java.text.ParseException; -import java.util.Set; - import static org.nuiton.i18n.I18n.n; -import static org.nuiton.i18n.I18n.t; /** * Model to import / export {@link Gear} in csv format. diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearRow.java index 5bce4f6..0a709bc 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearRow.java @@ -26,16 +26,32 @@ package fr.ifremer.tutti.service.referential; import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.referential.Gear; -import fr.ifremer.tutti.persistence.entities.referential.GearBean; +import fr.ifremer.tutti.persistence.entities.referential.Gears; /** * @author Kevin Morin (Code Lutin) * @since 3.8 */ -public class GearRow extends GearBean { +public class GearRow { + + public static final String PROPERTY_ID = "id"; + + public static final String PROPERTY_NAME = "name"; public static final String PROPERTY_TO_DELETE = "toDelete"; + public static final String PROPERTY_LABEL = "label"; + + public static final String PROPERTY_SCIENTIFIC_GEAR = "scientificGear"; + + protected String id; + + protected String name; + + protected String label; + + protected boolean scientificGear; + protected Boolean toDelete; public GearRow() { @@ -51,6 +67,38 @@ public class GearRow extends GearBean { setScientificGear(gear.isScientificGear()); } + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public boolean isScientificGear() { + return scientificGear; + } + + public void setScientificGear(boolean scientificGear) { + this.scientificGear = scientificGear; + } + public Boolean getToDelete() { return toDelete; } @@ -58,4 +106,23 @@ public class GearRow extends GearBean { public void setToDelete(Boolean toDelete) { this.toDelete = toDelete; } + + public Gear toEntity() { + + Gear gear = Gears.newGear(); + gear.setId(getId()); + gear.setName(getName()); + gear.setLabel(getLabel()); + gear.setScientificGear(isScientificGear()); + return gear; + + } + + public Integer getIdAsInt() { + Integer idAsInt = null; + if (id != null) { + idAsInt = Integer.valueOf(id); + } + return idAsInt; + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ImportRequestResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ImportRequestResult.java new file mode 100644 index 0000000..8abc642 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ImportRequestResult.java @@ -0,0 +1,95 @@ +package fr.ifremer.tutti.service.referential; + +import com.google.common.base.Function; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity; + +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Created on 11/16/14. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.10 + */ +public class ImportRequestResult<E extends TuttiReferentialEntity, K> { + + private final List<E> toAdd = Lists.newArrayList(); + + private final List<E> toUpdate = Lists.newArrayList(); + + private final List<K> toDelete = Lists.newArrayList(); + + private final Map<K, E> existingEntitiesById; + + private final Set<K> existingIds; + + private final Set<String> existingNaturalIds; + + public ImportRequestResult(List<E> existingEntities, Function<E, K> entityToIdFunction, Function<E, String> naturalIdFunction) { + + this.existingEntitiesById = Maps.uniqueIndex(existingEntities, entityToIdFunction); + this.existingIds = new HashSet<>(existingEntitiesById.keySet()); + this.existingNaturalIds = Sets.newHashSet(Iterables.transform(existingEntities, naturalIdFunction)); + + } + + public void addEntityToAdd(E entityToAdd) { + toAdd.add(entityToAdd); + } + + public void addEntityToUpdate(E entityToUpdate) { + toUpdate.add(entityToUpdate); + } + + public void addIdToDelete(K entityToDelete) { + toDelete.add(entityToDelete); + } + + public boolean withToAdd() { + return !toAdd.isEmpty(); + } + + public boolean withToupdate() { + return !toUpdate.isEmpty(); + } + + public boolean withToDelete() { + return !toDelete.isEmpty(); + } + + public Collection<K> getIdsToDelete() { + return Lists.newArrayList(toDelete); + } + + public Collection<E> getEntitiesToAdd() { + return Lists.newArrayList(toAdd); + } + + public Collection<E> getEntitiesToUpdate() { + return Lists.newArrayList(toUpdate); + } + + public E getExistingEntityById(K id) { + return existingEntitiesById.get(id); + } + + public boolean addExistingEntityId(K id) { + return existingIds.add(id); + } + + public boolean addExistingNaturalId(String naturalId) { + return existingNaturalIds.add(naturalId); + } + + public void removeExistingNaturalId(String naturalId) { + existingNaturalIds.remove(naturalId); + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java index 1fcd1c5..bb11c1e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java @@ -23,14 +23,9 @@ package fr.ifremer.tutti.service.referential; */ import fr.ifremer.tutti.persistence.entities.referential.Person; -import fr.ifremer.tutti.persistence.entities.referential.Persons; import fr.ifremer.tutti.service.TuttiCsvUtil; -import org.nuiton.csv.Common; - -import java.text.ParseException; import static org.nuiton.i18n.I18n.n; -import static org.nuiton.i18n.I18n.t; /** * Model to import / export {@link Person} in csv format. diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonRow.java index 3a0b108..8326aa7 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonRow.java @@ -26,16 +26,28 @@ package fr.ifremer.tutti.service.referential; import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.referential.Person; -import fr.ifremer.tutti.persistence.entities.referential.PersonBean; +import fr.ifremer.tutti.persistence.entities.referential.Persons; /** * @author Kevin Morin (Code Lutin) * @since 3.8 */ -public class PersonRow extends PersonBean { +public class PersonRow { + + public static final String PROPERTY_ID = "id"; + + public static final String PROPERTY_FIRST_NAME = "firstName"; + + public static final String PROPERTY_LAST_NAME = "lastName"; public static final String PROPERTY_TO_DELETE = "toDelete"; + protected String id; + + protected String firstName; + + protected String lastName; + protected Boolean toDelete; public PersonRow() { @@ -50,6 +62,30 @@ public class PersonRow extends PersonBean { setLastName(person.getLastName()); } + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + public Boolean getToDelete() { return toDelete; } @@ -57,4 +93,22 @@ public class PersonRow extends PersonBean { public void setToDelete(Boolean toDelete) { this.toDelete = toDelete; } + + public Person toEntity() { + + Person person = Persons.newPerson(); + person.setId(getId()); + person.setFirstName(getFirstName()); + person.setLastName(getLastName()); + return person; + + } + + public Integer getIdAsInt() { + Integer idAsInt = null; + if (id != null) { + idAsInt = Integer.valueOf(id); + } + return idAsInt; + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialExportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialExportService.java deleted file mode 100644 index be34c35..0000000 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialExportService.java +++ /dev/null @@ -1,375 +0,0 @@ -package fr.ifremer.tutti.service.referential; - -/* - * #%L - * Tutti :: Service - * %% - * Copyright (C) 2012 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Charsets; -import com.google.common.base.Function; -import com.google.common.collect.Lists; -import com.google.common.io.Files; -import fr.ifremer.tutti.persistence.entities.referential.Gear; -import fr.ifremer.tutti.persistence.entities.referential.Gears; -import fr.ifremer.tutti.persistence.entities.referential.Person; -import fr.ifremer.tutti.persistence.entities.referential.Persons; -import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.persistence.entities.referential.Speciess; -import fr.ifremer.tutti.persistence.entities.referential.Vessel; -import fr.ifremer.tutti.persistence.entities.referential.Vessels; -import fr.ifremer.tutti.service.AbstractTuttiService; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.TuttiServiceContext; -import org.apache.commons.io.IOUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.csv.Export; -import org.nuiton.jaxx.application.ApplicationTechnicalException; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.IOException; -import java.util.List; - -import static org.nuiton.i18n.I18n.t; - -/** - * Service to export temporary referential. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.0 - */ -public class ReferentialExportService extends AbstractTuttiService { - - /** Logger. */ - private static final Log log = LogFactory.getLog(ReferentialExportService.class); - - protected PersistenceService persistenceService; - - @Override - public void setServiceContext(TuttiServiceContext context) { - super.setServiceContext(context); - persistenceService = getService(PersistenceService.class); - } - - public void exportExistingTemporarySpecies(File file) throws IOException { - - if (log.isInfoEnabled()) { - log.info("Getting all species from database"); - } - List<Species> targetList = Lists.newArrayList(persistenceService.getAllReferentSpecies()); - - if (log.isInfoEnabled()) { - log.info("Got " + targetList.size() + " species"); - } - List<Species> toExport = persistenceService.retainTemporarySpeciesList(targetList); - if (log.isInfoEnabled()) { - log.info("Got " + toExport.size() + " temporary species"); - } - exportTemporarySpecies(file, toExport); - - } - - public void exportTemporarySpeciesExample(File file) throws IOException { - - List<Species> toExport = Lists.newArrayList(); - - { - Species s = Speciess.newSpecies(); - s.setName("Temporary Species name 1"); - toExport.add(s); - } - { - Species s = Speciess.newSpecies(); - s.setName("Temporary Species name 2"); - toExport.add(s); - } - { - Species s = Speciess.newSpecies(); - s.setName("Temporary Species name 3"); - toExport.add(s); - } - exportTemporarySpecies(file, toExport); - - } - - protected void exportTemporarySpecies(File file, List<Species> toExport) throws IOException { - - SpeciesModel csvModel = new SpeciesModel(getCsvSeparator()); - - BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); - - List<SpeciesRow> toExportRows = Lists.transform(toExport, new Function<Species, SpeciesRow>() { - @Override - public SpeciesRow apply(Species species) { - return new SpeciesRow(species); - } - }); - - try { - Export export = Export.newExport(csvModel, toExportRows); - export.write(writer); - writer.close(); - } catch (IOException e) { - throw e; - } catch (Exception e) { - throw new ApplicationTechnicalException(t("tutti.service.referential.export.species.error", file), e); - } finally { - IOUtils.closeQuietly(writer); - } - - } - - public void exportExistingTemporaryVessel(File file) throws IOException { - - if (log.isInfoEnabled()) { - log.info("Getting all vessels from database"); - } - List<Vessel> targetList = Lists.newArrayList(persistenceService.getAllFishingVessel()); - targetList.addAll(persistenceService.getAllScientificVessel()); - if (log.isInfoEnabled()) { - log.info("Got " + targetList.size() + " vessels"); - } - List<Vessel> toExport = persistenceService.retainTemporaryVesselList(targetList); - - if (log.isInfoEnabled()) { - log.info("Got " + toExport.size() + " temporary vessels"); - } - exportTemporaryVessel(file, toExport); - - } - - public void exportTemporaryVesselExample(File file) throws IOException { - - List<Vessel> toExport = Lists.newArrayList(); - - { - Vessel v = Vessels.newVessel(); - v.setRegistrationCode("RegCode1"); - v.setName("Temporary fishing vessel name 1"); - v.setInternationalRegistrationCode("International registration code F1"); - v.setScientificVessel(false); - toExport.add(v); - } - { - Vessel v = Vessels.newVessel(); - v.setRegistrationCode("RegCode2"); - v.setName("Temporary fishing vessel name 2"); - v.setInternationalRegistrationCode("International registration code F2"); - v.setScientificVessel(false); - toExport.add(v); - } - { - Vessel v = Vessels.newVessel(); - v.setRegistrationCode("RegCode3"); - v.setName("Temporary scientific vessel name 3"); - v.setInternationalRegistrationCode("International registration code S3"); - v.setScientificVessel(true); - toExport.add(v); - } - { - Vessel v = Vessels.newVessel(); - v.setRegistrationCode("RegCode4"); - v.setName("Temporary scientific vessel name 4"); - v.setInternationalRegistrationCode("International registration code S4"); - v.setScientificVessel(true); - toExport.add(v); - } - exportTemporaryVessel(file, toExport); - - } - - protected void exportTemporaryVessel(File file, List<Vessel> toExport) throws IOException { - - VesselModel csvModel = new VesselModel(getCsvSeparator()); - - BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); - - List<VesselRow> toExportRows = Lists.transform(toExport, new Function<Vessel, VesselRow>() { - @Override - public VesselRow apply(Vessel vessel) { - return new VesselRow(vessel); - } - }); - - try { - Export export = Export.newExport(csvModel, toExportRows); - export.write(writer); - writer.close(); - } catch (IOException e) { - throw e; - } catch (Exception e) { - throw new ApplicationTechnicalException(t("tutti.service.referential.export.vessel.error", file), e); - } finally { - IOUtils.closeQuietly(writer); - } - } - - public void exportExistingTemporaryPerson(File file) throws IOException { - - if (log.isInfoEnabled()) { - log.info("Getting all persons from database"); - } - List<Person> targetList = Lists.newArrayList(persistenceService.getAllPerson()); - if (log.isInfoEnabled()) { - log.info("Got " + targetList.size() + " persons"); - } - List<Person> toExport = persistenceService.retainTemporaryPersonList(targetList); - if (log.isInfoEnabled()) { - log.info("Got " + toExport.size() + " temporary persons"); - } - exportTemporaryPerson(file, toExport); - - } - - public void exportTemporaryPersonExample(File file) throws IOException { - - List<Person> toExport = Lists.newArrayList(); - - Person p; - - p = Persons.newPerson(); - p.setFirstName("First name 1"); - p.setLastName("Last name 1"); - toExport.add(p); - - p = Persons.newPerson(); - p.setFirstName("First name 2"); - p.setLastName("Last name 2"); - toExport.add(p); - - p = Persons.newPerson(); - p.setFirstName("First name 3"); - p.setLastName("Last name 3"); - toExport.add(p); - - exportTemporaryPerson(file, toExport); - - } - - protected void exportTemporaryPerson(File file, List<Person> toExport) throws IOException { - - PersonModel csvModel = new PersonModel(getCsvSeparator()); - - BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); - - List<PersonRow> toExportRows = Lists.transform(toExport, new Function<Person, PersonRow>() { - @Override - public PersonRow apply(Person person) { - return new PersonRow(person); - } - }); - - try { - Export export = Export.newExport(csvModel, toExportRows); - export.write(writer); - writer.close(); - } catch (IOException e) { - throw e; - } catch (Exception e) { - throw new ApplicationTechnicalException(t("tutti.service.referential.export.person.error", file), e); - } finally { - IOUtils.closeQuietly(writer); - } - } - - public void exportExistingTemporaryGear(File file) throws IOException { - - if (log.isInfoEnabled()) { - log.info("Getting all gears from database"); - } - - List<Gear> targetList = Lists.newArrayList(persistenceService.getAllFishingGear()); - targetList.addAll(persistenceService.getAllScientificGear()); - if (log.isInfoEnabled()) { - log.info("Got " + targetList.size() + " gears"); - } - List<Gear> toExport = persistenceService.retainTemporaryGearList(targetList); - if (log.isInfoEnabled()) { - log.info("Got " + toExport.size() + " temporary gears"); - } - exportTemporaryGear(file, toExport); - - } - - public void exportTemporaryGearExample(File file) throws IOException { - - List<Gear> toExport = Lists.newArrayList(); - - { - Gear g = Gears.newGear(); - g.setName("Gear fishing name 1"); - g.setLabel("Gear fishing label 1"); - toExport.add(g); - } - { - Gear g = Gears.newGear(); - g.setName("Gear fishing name 2"); - g.setLabel("Gear fishing label 2"); - toExport.add(g); - } - { - Gear g = Gears.newGear(); - g.setName("Gear scientific name 3"); - g.setLabel("Gear scientific label 3"); - g.setScientificGear(true); - toExport.add(g); - } - { - Gear g = Gears.newGear(); - g.setName("Gear scientific name 4"); - g.setLabel("Gear scientific label 4"); - g.setScientificGear(true); - toExport.add(g); - } - exportTemporaryGear(file, toExport); - - } - - protected void exportTemporaryGear(File file, List<Gear> toExport) throws IOException { - - GearModel csvModel = new GearModel(getCsvSeparator()); - - BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); - - List<GearRow> toExportRows = Lists.transform(toExport, new Function<Gear, GearRow>() { - @Override - public GearRow apply(Gear gear) { - return new GearRow(gear); - } - }); - - try { - Export export = Export.newExport(csvModel, toExportRows); - export.write(writer); - writer.close(); - } catch (IOException e) { - throw e; - } catch (Exception e) { - throw new ApplicationTechnicalException(t("tutti.service.referential.export.gear.error", file), e); - } finally { - IOUtils.closeQuietly(writer); - } - } - - protected char getCsvSeparator() { - return context.getConfig().getCsvSeparator(); - } -} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportService.java index 24962ee..ea953fb 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialImportService.java @@ -82,422 +82,422 @@ public class ReferentialImportService extends AbstractTuttiService { persistenceService = getService(PersistenceService.class); } - public ReferentialImportResult<Species> importTemporarySpecies(File file) throws IOException { - - ReferentialImportResult<Species> result = new ReferentialImportResult<>(); - - if (log.isInfoEnabled()) { - log.info("Will import species from file: " + file); - } - - List<Species> allSpecies = persistenceService.getAllSpecies(); - - // get all species names - Set<String> existingSpeciesNames = Sets.newHashSet(Iterables.transform(allSpecies, new Function<Species, String>() { - @Override - public String apply(Species input) { - return input.getName(); - } - })); - Map<Integer, Species> existingSpeciesById = TuttiEntities.splitByIdAsInt(allSpecies); - Set<Integer> existingSpeciesIds = new HashSet<>(existingSpeciesById.keySet()); - - List<Species> toAdd = Lists.newArrayList(); - List<Species> toUpdate = Lists.newArrayList(); - List<Integer> toDelete = Lists.newArrayList(); - - Reader reader = Files.newReader(file, Charsets.UTF_8); - SpeciesModel csvModel = new SpeciesModel(getCsvSeparator()); - try { - Import<SpeciesRow> importer = Import.newImport(csvModel, reader); - - try { - - for (SpeciesRow bean : importer) { - - Integer id = bean.getIdAsInt(); - String name = bean.getName(); - Species species = existingSpeciesById.get(id); - boolean delete = BooleanUtils.isTrue(bean.getToDelete()); - - if (id != null && existingSpeciesIds.add(id)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.species.notExistingId.error", id)); - } - if (StringUtils.isBlank(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.species.noName.error", id)); - } - if (!delete && !existingSpeciesNames.add(name) && - (id == null || species != null && !species.getName().equals(name))) { - throw new IllegalArgumentException(t("tutti.service.referential.import.species.existingName.error", name)); - } - - if (delete) { - if (id == null) { - throw new IllegalArgumentException(t("tutti.service.referential.import.species.cannotDeleteWithoutId.error")); - } - if (persistenceService.isTemporarySpeciesUsed(id)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.species.used.error", id)); - } - toDelete.add(species.getReferenceTaxonId()); - existingSpeciesNames.remove(name); - - } else { - if (bean.getId() == null) { - toAdd.add(bean); - - } else { - bean.setReferenceTaxonId(species.getReferenceTaxonId()); - toUpdate.add(bean); - } - } - } - importer.close(); - - } finally { - IOUtils.closeQuietly(importer); - } - reader.close(); - - } catch (IOException e) { - throw new IOException(t("tutti.service.referential.import.species.error", file), e); - - } catch (ImportRuntimeException e) { - String message; - if (e.getCause() != null) { - message = e.getCause().getMessage(); - } else { - message = e.getMessage(); - } - throw new ApplicationTechnicalException(message, e); - - } finally { - - IOUtils.closeQuietly(reader); - } - - persistenceService.deleteTemporarySpecies(toDelete, true); - result.setNbRefDeleted(toDelete.size()); - - result.addAllRefsAdded(persistenceService.importTemporarySpecies(toAdd)); - result.addAllRefsUpdated(persistenceService.importTemporarySpecies(toUpdate)); - - return result; - } - - public ReferentialImportResult<Vessel> importTemporaryVessel(File file) throws IOException { - - ReferentialImportResult<Vessel> result = new ReferentialImportResult<>(); - - if (log.isInfoEnabled()) { - log.info("Will import vessels from file: " + file); - } - - // get all vessels - List<Vessel> existingVessels = Lists.newArrayList(persistenceService.getAllFishingVessel()); - existingVessels.addAll(persistenceService.getAllScientificVessel()); - - Set<String> existingVesselInternationalRegistrationCodes = - Sets.newHashSet(Iterables.transform(existingVessels, new Function<Vessel, String>() { - @Override - public String apply(Vessel input) { - return input.getInternationalRegistrationCode(); - } - })); - Map<String, Vessel> existingVesselsById = TuttiEntities.splitById(existingVessels); - Set<String> existingVesselIds = new HashSet<>(existingVesselsById.keySet()); - - List<Vessel> toAdd = Lists.newArrayList(); - List<Vessel> toUpdate = Lists.newArrayList(); - List<String> toDelete = Lists.newArrayList(); - - Reader reader = Files.newReader(file, Charsets.UTF_8); - VesselModel csvModel = new VesselModel(getCsvSeparator()); - try { - Import<VesselRow> importer = Import.newImport(csvModel, reader); - - try { - - for (final VesselRow bean : importer) { - - String id = StringUtils.trimToNull(bean.getId()); - String internationalRegistrationCode = bean.getInternationalRegistrationCode(); - Vessel vessel = existingVesselsById.get(id); - boolean delete = BooleanUtils.isTrue(bean.getToDelete()); - - if (id != null && existingVesselIds.add(id)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.notExistingId.error", id)); - } - if (StringUtils.isBlank(internationalRegistrationCode)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.noInternationalRegistrationCode.error", id)); - } - if (!delete && !existingVesselInternationalRegistrationCodes.add(internationalRegistrationCode) && - (id == null || vessel != null && !vessel.getRegistrationCode().equals(internationalRegistrationCode))) { - throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.existingInternationalRegistrationCode.error", - internationalRegistrationCode)); - } - - if (delete) { - if (id == null) { - throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.cannotDeleteWithoutId.error")); - } - if (persistenceService.isTemporaryVesselUsed(id)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.used.error", id)); - } - toDelete.add(id); - existingVesselInternationalRegistrationCodes.remove(internationalRegistrationCode); - - } else { - if (id == null) { - toAdd.add(bean); - - } else { - toUpdate.add(bean); - } - } - } - importer.close(); - - } finally { - IOUtils.closeQuietly(importer); - } - reader.close(); - - } catch (IOException e) { - throw new IOException(t("tutti.service.referential.import.vessels.error", file), e); - - } catch (ImportRuntimeException e) { - String message; - if (e.getCause() != null) { - message = e.getCause().getMessage(); - } else { - message = e.getMessage(); - } - throw new ApplicationTechnicalException(message, e); - - } finally { - - IOUtils.closeQuietly(reader); - } - - persistenceService.deleteTemporaryVessels(toDelete, true); - result.setNbRefDeleted(toDelete.size()); - - result.addAllRefsAdded(persistenceService.importTemporaryVessel(toAdd)); - result.addAllRefsUpdated(persistenceService.importTemporaryVessel(toUpdate)); - - return result; - } - - public ReferentialImportResult<Person> importTemporaryPerson(File file) throws IOException { - - ReferentialImportResult<Person> result = new ReferentialImportResult<>(); - - if (log.isInfoEnabled()) { - log.info("Will import persons from file: " + file); - } - - List<Person> allPersons = persistenceService.getAllPerson(); - - // get all species names - Set<String> existingPersonFullNames = Sets.newHashSet(Iterables.transform(allPersons, new Function<Person, String>() { - @Override - public String apply(Person input) { - return getPersonFullName(input); - } - })); - Map<Integer, Person> existingPersonsById = TuttiEntities.splitByIdAsInt(allPersons); - - Set<Integer> existingPersonIds = new HashSet<>(existingPersonsById.keySet()); - - List<Person> toAdd = Lists.newArrayList(); - List<Person> toUpdate = Lists.newArrayList(); - List<Integer> toDelete = Lists.newArrayList(); - - Reader reader = Files.newReader(file, Charsets.UTF_8); - PersonModel csvModel = new PersonModel(getCsvSeparator()); - try { - Import<PersonRow> importer = Import.newImport(csvModel, reader); - - try { - - for (PersonRow bean : importer) { - - Integer id = bean.getIdAsInt(); - Person person = existingPersonsById.get(id); - String name = getPersonFullName(bean); - boolean delete = BooleanUtils.isTrue(bean.getToDelete()); - - if (id != null && existingPersonIds.add(id)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.person.notExistingId.error", id)); - } - if (StringUtils.isBlank(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.person.noName.error", id)); - } - if (!delete && !existingPersonFullNames.add(name) && - (id == null || person != null && !person.getName().equals(name))) { - throw new IllegalArgumentException(t("tutti.service.referential.import.person.existingName.error", name)); - } - - if (delete) { - if (id == null) { - throw new IllegalArgumentException(t("tutti.service.referential.import.person.cannotDeleteWithoutId.error")); - } - if (persistenceService.isTemporaryPersonUsed(id)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.person.used.error", id)); - } - toDelete.add(id); - existingPersonFullNames.remove(name); - - } else { - if (bean.getId() == null) { - toAdd.add(bean); - - } else { - toUpdate.add(bean); - } - } - } - importer.close(); - - } finally { - IOUtils.closeQuietly(importer); - } - reader.close(); - - } catch (IOException e) { - throw new IOException(t("tutti.service.referential.import.persons.error", file), e); - - } catch (ImportRuntimeException e) { - String message; - if (e.getCause() != null) { - message = e.getCause().getMessage(); - } else { - message = e.getMessage(); - } - throw new ApplicationTechnicalException(message, e); - - } finally { - - IOUtils.closeQuietly(reader); - } - - persistenceService.deleteTemporaryPersons(toDelete, true); - result.setNbRefDeleted(toDelete.size()); - - result.addAllRefsAdded(persistenceService.importTemporaryPerson(toAdd)); - result.addAllRefsUpdated(persistenceService.importTemporaryPerson(toUpdate)); - - return result; - } - - protected String getPersonFullName(Person person) { - return StringUtils.lowerCase( - StringUtils.trimToEmpty(person.getFirstName()) + - StringUtils.trimToEmpty(person.getLastName())); - } - - public ReferentialImportResult<Gear> importTemporaryGear(File file) throws IOException { - - ReferentialImportResult<Gear> result = new ReferentialImportResult<>(); - - if (log.isInfoEnabled()) { - log.info("Will import gears from file: " + file); - } - - // get all vessel names - List<Gear> allGears = new ArrayList<>(persistenceService.getAllFishingGear()); - allGears.addAll(persistenceService.getAllScientificGear()); - - Set<String> existingGearNames = Sets.newHashSet(Iterables.transform(allGears, new Function<Gear, String>() { - @Override - public String apply(Gear input) { - return input.getName(); - } - })); - - Map<Integer, Gear> existingGearsById = TuttiEntities.splitByIdAsInt(allGears); - Set<Integer> existingGearIds = new HashSet<>(existingGearsById.keySet()); - - List<Gear> toAdd = Lists.newArrayList(); - List<Gear> toUpdate = Lists.newArrayList(); - List<Integer> toDelete = Lists.newArrayList(); - - Reader reader = Files.newReader(file, Charsets.UTF_8); - GearModel csvModel = new GearModel(getCsvSeparator()); - try { - Import<GearRow> importer = Import.newImport(csvModel, reader); - - try { - - for (GearRow bean : importer) { - - Integer id = bean.getIdAsInt(); - Gear gear = existingGearsById.get(id); - String name = bean.getName(); - boolean delete = BooleanUtils.isTrue(bean.getToDelete()); - - if (id != null && existingGearIds.add(id)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.gear.notExistingId.error", id)); - } - if (StringUtils.isBlank(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.gear.noName.error", id)); - } - if (!delete && !existingGearNames.add(name) && - (id == null || gear != null && !gear.getName().equals(name))) { - throw new IllegalArgumentException(t("tutti.service.referential.import.gear.existingName.error", name)); - } - - if (delete) { - if (id == null) { - throw new IllegalArgumentException(t("tutti.service.referential.import.gear.cannotDeleteWithoutId.error")); - } - if (persistenceService.isTemporaryGearUsed(id)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.gear.used.error", id)); - } - toDelete.add(id); - existingGearNames.remove(name); - - } else { - if (bean.getId() == null) { - toAdd.add(bean); - - } else { - toUpdate.add(bean); - } - } - } - importer.close(); - - } finally { - IOUtils.closeQuietly(importer); - } - reader.close(); - - } catch (IOException e) { - throw new IOException(t("tutti.service.referential.import.gears.error", file), e); - - } catch (ImportRuntimeException e) { - String message; - if (e.getCause() != null) { - message = e.getCause().getMessage(); - } else { - message = e.getMessage(); - } - throw new ApplicationTechnicalException(message, e); - - } finally { - - IOUtils.closeQuietly(reader); - } - - persistenceService.deleteTemporaryGears(toDelete, true); - result.setNbRefDeleted(toDelete.size()); - - result.addAllRefsAdded(persistenceService.importTemporaryGear(toAdd)); - result.addAllRefsUpdated(persistenceService.importTemporaryGear(toUpdate)); - - return result; - } +// public ReferentialImportResult<Species> importTemporarySpecies(File file) throws IOException { +// +// ReferentialImportResult<Species> result = new ReferentialImportResult<>(); +// +// if (log.isInfoEnabled()) { +// log.info("Will import species from file: " + file); +// } +// +// List<Species> allSpecies = persistenceService.getAllSpecies(); +// +// // get all species names +// Set<String> existingSpeciesNames = Sets.newHashSet(Iterables.transform(allSpecies, new Function<Species, String>() { +// @Override +// public String apply(Species input) { +// return input.getName(); +// } +// })); +// Map<Integer, Species> existingSpeciesById = TuttiEntities.splitByIdAsInt(allSpecies); +// Set<Integer> existingSpeciesIds = new HashSet<>(existingSpeciesById.keySet()); +// +// List<Species> toAdd = Lists.newArrayList(); +// List<Species> toUpdate = Lists.newArrayList(); +// List<Integer> toDelete = Lists.newArrayList(); +// +// Reader reader = Files.newReader(file, Charsets.UTF_8); +// SpeciesModel csvModel = new SpeciesModel(getCsvSeparator()); +// try { +// Import<SpeciesRow> importer = Import.newImport(csvModel, reader); +// +// try { +// +// for (SpeciesRow bean : importer) { +// +// Integer id = bean.getIdAsInt(); +// String name = bean.getName(); +// Species species = existingSpeciesById.get(id); +// boolean delete = BooleanUtils.isTrue(bean.getToDelete()); +// +// if (id != null && existingSpeciesIds.add(id)) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.species.notExistingId.error", id)); +// } +// if (StringUtils.isBlank(name)) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.species.noName.error", id)); +// } +// if (!delete && !existingSpeciesNames.add(name) && +// (id == null || species != null && !species.getName().equals(name))) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.species.existingName.error", name)); +// } +// +// if (delete) { +// if (id == null) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.species.cannotDeleteWithoutId.error")); +// } +// if (persistenceService.isTemporarySpeciesUsed(id)) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.species.used.error", id)); +// } +// toDelete.add(species.getReferenceTaxonId()); +// existingSpeciesNames.remove(name); +// +// } else { +// if (bean.getId() == null) { +// toAdd.add(bean); +// +// } else { +// bean.setReferenceTaxonId(species.getReferenceTaxonId()); +// toUpdate.add(bean); +// } +// } +// } +// importer.close(); +// +// } finally { +// IOUtils.closeQuietly(importer); +// } +// reader.close(); +// +// } catch (IOException e) { +// throw new IOException(t("tutti.service.referential.import.species.error", file), e); +// +// } catch (ImportRuntimeException e) { +// String message; +// if (e.getCause() != null) { +// message = e.getCause().getMessage(); +// } else { +// message = e.getMessage(); +// } +// throw new ApplicationTechnicalException(message, e); +// +// } finally { +// +// IOUtils.closeQuietly(reader); +// } +// +// persistenceService.deleteTemporarySpecies(toDelete, true); +// result.setNbRefDeleted(toDelete.size()); +// +// result.addAllRefsAdded(persistenceService.importTemporarySpecies(toAdd)); +// result.addAllRefsUpdated(persistenceService.importTemporarySpecies(toUpdate)); +// +// return result; +// } +// +// public ReferentialImportResult<Vessel> importTemporaryVessel(File file) throws IOException { +// +// ReferentialImportResult<Vessel> result = new ReferentialImportResult<>(); +// +// if (log.isInfoEnabled()) { +// log.info("Will import vessels from file: " + file); +// } +// +// // get all vessels +// List<Vessel> existingVessels = Lists.newArrayList(persistenceService.getAllFishingVessel()); +// existingVessels.addAll(persistenceService.getAllScientificVessel()); +// +// Set<String> existingVesselInternationalRegistrationCodes = +// Sets.newHashSet(Iterables.transform(existingVessels, new Function<Vessel, String>() { +// @Override +// public String apply(Vessel input) { +// return input.getInternationalRegistrationCode(); +// } +// })); +// Map<String, Vessel> existingVesselsById = TuttiEntities.splitById(existingVessels); +// Set<String> existingVesselIds = new HashSet<>(existingVesselsById.keySet()); +// +// List<Vessel> toAdd = Lists.newArrayList(); +// List<Vessel> toUpdate = Lists.newArrayList(); +// List<String> toDelete = Lists.newArrayList(); +// +// Reader reader = Files.newReader(file, Charsets.UTF_8); +// VesselModel csvModel = new VesselModel(getCsvSeparator()); +// try { +// Import<VesselRow> importer = Import.newImport(csvModel, reader); +// +// try { +// +// for (final VesselRow bean : importer) { +// +// String id = StringUtils.trimToNull(bean.getId()); +// String internationalRegistrationCode = bean.getInternationalRegistrationCode(); +// Vessel vessel = existingVesselsById.get(id); +// boolean delete = BooleanUtils.isTrue(bean.getToDelete()); +// +// if (id != null && existingVesselIds.add(id)) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.notExistingId.error", id)); +// } +// if (StringUtils.isBlank(internationalRegistrationCode)) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.noInternationalRegistrationCode.error", id)); +// } +// if (!delete && !existingVesselInternationalRegistrationCodes.add(internationalRegistrationCode) && +// (id == null || vessel != null && !vessel.getRegistrationCode().equals(internationalRegistrationCode))) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.existingInternationalRegistrationCode.error", +// internationalRegistrationCode)); +// } +// +// if (delete) { +// if (id == null) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.cannotDeleteWithoutId.error")); +// } +// if (persistenceService.isTemporaryVesselUsed(id)) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.used.error", id)); +// } +// toDelete.add(id); +// existingVesselInternationalRegistrationCodes.remove(internationalRegistrationCode); +// +// } else { +// if (id == null) { +// toAdd.add(bean); +// +// } else { +// toUpdate.add(bean); +// } +// } +// } +// importer.close(); +// +// } finally { +// IOUtils.closeQuietly(importer); +// } +// reader.close(); +// +// } catch (IOException e) { +// throw new IOException(t("tutti.service.referential.import.vessels.error", file), e); +// +// } catch (ImportRuntimeException e) { +// String message; +// if (e.getCause() != null) { +// message = e.getCause().getMessage(); +// } else { +// message = e.getMessage(); +// } +// throw new ApplicationTechnicalException(message, e); +// +// } finally { +// +// IOUtils.closeQuietly(reader); +// } +// +// persistenceService.deleteTemporaryVessels(toDelete, true); +// result.setNbRefDeleted(toDelete.size()); +// +// result.addAllRefsAdded(persistenceService.importTemporaryVessel(toAdd)); +// result.addAllRefsUpdated(persistenceService.importTemporaryVessel(toUpdate)); +// +// return result; +// } +// +// public ReferentialImportResult<Person> importTemporaryPerson(File file) throws IOException { +// +// ReferentialImportResult<Person> result = new ReferentialImportResult<>(); +// +// if (log.isInfoEnabled()) { +// log.info("Will import persons from file: " + file); +// } +// +// List<Person> allPersons = persistenceService.getAllPerson(); +// +// // get all species names +// Set<String> existingPersonFullNames = Sets.newHashSet(Iterables.transform(allPersons, new Function<Person, String>() { +// @Override +// public String apply(Person input) { +// return getPersonFullName(input); +// } +// })); +// Map<Integer, Person> existingPersonsById = TuttiEntities.splitByIdAsInt(allPersons); +// +// Set<Integer> existingPersonIds = new HashSet<>(existingPersonsById.keySet()); +// +// List<Person> toAdd = Lists.newArrayList(); +// List<Person> toUpdate = Lists.newArrayList(); +// List<Integer> toDelete = Lists.newArrayList(); +// +// Reader reader = Files.newReader(file, Charsets.UTF_8); +// PersonModel csvModel = new PersonModel(getCsvSeparator()); +// try { +// Import<PersonRow> importer = Import.newImport(csvModel, reader); +// +// try { +// +// for (PersonRow bean : importer) { +// +// Integer id = bean.getIdAsInt(); +// Person person = existingPersonsById.get(id); +// String name = getPersonFullName(bean); +// boolean delete = BooleanUtils.isTrue(bean.getToDelete()); +// +// if (id != null && existingPersonIds.add(id)) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.person.notExistingId.error", id)); +// } +// if (StringUtils.isBlank(name)) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.person.noName.error", id)); +// } +// if (!delete && !existingPersonFullNames.add(name) && +// (id == null || person != null && !person.getName().equals(name))) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.person.existingName.error", name)); +// } +// +// if (delete) { +// if (id == null) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.person.cannotDeleteWithoutId.error")); +// } +// if (persistenceService.isTemporaryPersonUsed(id)) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.person.used.error", id)); +// } +// toDelete.add(id); +// existingPersonFullNames.remove(name); +// +// } else { +// if (bean.getId() == null) { +// toAdd.add(bean); +// +// } else { +// toUpdate.add(bean); +// } +// } +// } +// importer.close(); +// +// } finally { +// IOUtils.closeQuietly(importer); +// } +// reader.close(); +// +// } catch (IOException e) { +// throw new IOException(t("tutti.service.referential.import.persons.error", file), e); +// +// } catch (ImportRuntimeException e) { +// String message; +// if (e.getCause() != null) { +// message = e.getCause().getMessage(); +// } else { +// message = e.getMessage(); +// } +// throw new ApplicationTechnicalException(message, e); +// +// } finally { +// +// IOUtils.closeQuietly(reader); +// } +// +// persistenceService.deleteTemporaryPersons(toDelete, true); +// result.setNbRefDeleted(toDelete.size()); +// +// result.addAllRefsAdded(persistenceService.importTemporaryPerson(toAdd)); +// result.addAllRefsUpdated(persistenceService.importTemporaryPerson(toUpdate)); +// +// return result; +// } +// +// protected String getPersonFullName(Person person) { +// return StringUtils.lowerCase( +// StringUtils.trimToEmpty(person.getFirstName()) + +// StringUtils.trimToEmpty(person.getLastName())); +// } +// +// public ReferentialImportResult<Gear> importTemporaryGear(File file) throws IOException { +// +// ReferentialImportResult<Gear> result = new ReferentialImportResult<>(); +// +// if (log.isInfoEnabled()) { +// log.info("Will import gears from file: " + file); +// } +// +// // get all vessel names +// List<Gear> allGears = new ArrayList<>(persistenceService.getAllFishingGear()); +// allGears.addAll(persistenceService.getAllScientificGear()); +// +// Set<String> existingGearNames = Sets.newHashSet(Iterables.transform(allGears, new Function<Gear, String>() { +// @Override +// public String apply(Gear input) { +// return input.getName(); +// } +// })); +// +// Map<Integer, Gear> existingGearsById = TuttiEntities.splitByIdAsInt(allGears); +// Set<Integer> existingGearIds = new HashSet<>(existingGearsById.keySet()); +// +// List<Gear> toAdd = Lists.newArrayList(); +// List<Gear> toUpdate = Lists.newArrayList(); +// List<Integer> toDelete = Lists.newArrayList(); +// +// Reader reader = Files.newReader(file, Charsets.UTF_8); +// GearModel csvModel = new GearModel(getCsvSeparator()); +// try { +// Import<GearRow> importer = Import.newImport(csvModel, reader); +// +// try { +// +// for (GearRow bean : importer) { +// +// Integer id = bean.getIdAsInt(); +// Gear gear = existingGearsById.get(id); +// String name = bean.getName(); +// boolean delete = BooleanUtils.isTrue(bean.getToDelete()); +// +// if (id != null && existingGearIds.add(id)) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.gear.notExistingId.error", id)); +// } +// if (StringUtils.isBlank(name)) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.gear.noName.error", id)); +// } +// if (!delete && !existingGearNames.add(name) && +// (id == null || gear != null && !gear.getName().equals(name))) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.gear.existingName.error", name)); +// } +// +// if (delete) { +// if (id == null) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.gear.cannotDeleteWithoutId.error")); +// } +// if (persistenceService.isTemporaryGearUsed(id)) { +// throw new IllegalArgumentException(t("tutti.service.referential.import.gear.used.error", id)); +// } +// toDelete.add(id); +// existingGearNames.remove(name); +// +// } else { +// if (bean.getId() == null) { +// toAdd.add(bean); +// +// } else { +// toUpdate.add(bean); +// } +// } +// } +// importer.close(); +// +// } finally { +// IOUtils.closeQuietly(importer); +// } +// reader.close(); +// +// } catch (IOException e) { +// throw new IOException(t("tutti.service.referential.import.gears.error", file), e); +// +// } catch (ImportRuntimeException e) { +// String message; +// if (e.getCause() != null) { +// message = e.getCause().getMessage(); +// } else { +// message = e.getMessage(); +// } +// throw new ApplicationTechnicalException(message, e); +// +// } finally { +// +// IOUtils.closeQuietly(reader); +// } +// +// persistenceService.deleteTemporaryGears(toDelete, true); +// result.setNbRefDeleted(toDelete.size()); +// +// result.addAllRefsAdded(persistenceService.importTemporaryGear(toAdd)); +// result.addAllRefsUpdated(persistenceService.importTemporaryGear(toUpdate)); +// +// return result; +// } public void exportExistingTemporarySpecies(File file) throws IOException { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryGearService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryGearService.java new file mode 100644 index 0000000..c2a0646 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryGearService.java @@ -0,0 +1,249 @@ +package fr.ifremer.tutti.service.referential; + +import com.google.common.base.Charsets; +import com.google.common.base.Function; +import com.google.common.collect.Lists; +import com.google.common.io.Files; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.Gears; +import fr.ifremer.tutti.service.AbstractTuttiService; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.TuttiServiceContext; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.Export; +import org.nuiton.csv.Import; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.IOException; +import java.io.Reader; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 11/16/14. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.10 + */ +public class ReferentialTemporaryGearService extends AbstractTuttiService { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(ReferentialTemporaryGearService.class); + + protected PersistenceService persistenceService; + + @Override + public void setServiceContext(TuttiServiceContext context) { + super.setServiceContext(context); + persistenceService = getService(PersistenceService.class); + } + + public ReferentialImportResult<Gear> importTemporaryGear(File file) throws IOException { + + if (log.isInfoEnabled()) { + log.info("Will import gears from file: " + file); + } + + // get all vessel names + List<Gear> allGears = new ArrayList<>(persistenceService.getAllFishingGear()); + allGears.addAll(persistenceService.getAllScientificGear()); + + ImportRequestResult<Gear, Integer> requestResult = processImportFile(file, allGears); + + ReferentialImportResult<Gear> result = new ReferentialImportResult<>(); + + if (requestResult.withToDelete()) { + + Collection<Integer> idsToDelete = requestResult.getIdsToDelete(); + persistenceService.deleteTemporaryGears(idsToDelete, true); + result.setNbRefDeleted(idsToDelete.size()); + + } + + if (requestResult.withToAdd()) { + + Collection<Gear> entitiesToAdd = requestResult.getEntitiesToAdd(); + Collection<Gear> entitiesAdded = persistenceService.importTemporaryGear(entitiesToAdd); + result.addAllRefsAdded(entitiesAdded); + + } + + if (requestResult.withToupdate()) { + + Collection<Gear> entitiesToUpdate = requestResult.getEntitiesToUpdate(); + Collection<Gear> entitiesUpdated = persistenceService.importTemporaryGear(entitiesToUpdate); + result.addAllRefsUpdated(entitiesUpdated); + + } + + return result; + } + + public void exportExistingTemporaryGear(File file) throws IOException { + + if (log.isInfoEnabled()) { + log.info("Getting all gears from database"); + } + + List<Gear> targetList = Lists.newArrayList(persistenceService.getAllFishingGear()); + targetList.addAll(persistenceService.getAllScientificGear()); + if (log.isInfoEnabled()) { + log.info("Got " + targetList.size() + " gears"); + } + List<Gear> toExport = persistenceService.retainTemporaryGearList(targetList); + if (log.isInfoEnabled()) { + log.info("Got " + toExport.size() + " temporary gears"); + } + exportTemporaryGear(file, toExport); + + } + + public void exportTemporaryGearExample(File file) throws IOException { + + List<Gear> toExport = Lists.newArrayList(); + + { + Gear g = Gears.newGear(); + g.setName("Gear fishing name 1"); + g.setLabel("Gear fishing label 1"); + toExport.add(g); + } + { + Gear g = Gears.newGear(); + g.setName("Gear fishing name 2"); + g.setLabel("Gear fishing label 2"); + toExport.add(g); + } + { + Gear g = Gears.newGear(); + g.setName("Gear scientific name 3"); + g.setLabel("Gear scientific label 3"); + g.setScientificGear(true); + toExport.add(g); + } + { + Gear g = Gears.newGear(); + g.setName("Gear scientific name 4"); + g.setLabel("Gear scientific label 4"); + g.setScientificGear(true); + toExport.add(g); + } + exportTemporaryGear(file, toExport); + + } + + protected ImportRequestResult<Gear, Integer> processImportFile(File file, List<Gear> existingEntities) { + + ImportRequestResult<Gear, Integer> requestResult = new ImportRequestResult<>(existingEntities, TuttiEntities.<Gear>newIdAstIntFunction(), Gears.GET_NAME); + + try (Reader reader = Files.newReader(file, Charsets.UTF_8)) { + + GearModel csvModel = new GearModel(getCsvSeparator()); + try (Import<GearRow> importer = Import.newImport(csvModel, reader)) { + + for (GearRow bean : importer) { + + importGear(bean, requestResult); + + } + + } + + } catch (IOException e) { + throw new ApplicationTechnicalException(t("tutti.service.referential.import.vessels.error", file), e); + + } catch (ImportRuntimeException e) { + String message; + if (e.getCause() != null) { + message = e.getCause().getMessage(); + } else { + message = e.getMessage(); + } + throw new ApplicationTechnicalException(message, e); + + } + + return requestResult; + + } + + private void importGear(GearRow bean, ImportRequestResult<Gear, Integer> requestResult) { + + Integer id = bean.getIdAsInt(); + Gear gear = requestResult.getExistingEntityById(id); + String name = bean.getName(); + boolean delete = BooleanUtils.isTrue(bean.getToDelete()); + + if (id != null && requestResult.addExistingEntityId(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.gear.notExistingId.error", id)); + } + if (StringUtils.isBlank(name)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.gear.noName.error", id)); + } + if (!delete && !requestResult.addExistingNaturalId(name) && + (id == null || gear != null && !gear.getName().equals(name))) { + throw new IllegalArgumentException(t("tutti.service.referential.import.gear.existingName.error", name)); + } + + if (delete) { + if (id == null) { + throw new IllegalArgumentException(t("tutti.service.referential.import.gear.cannotDeleteWithoutId.error")); + } + if (persistenceService.isTemporaryGearUsed(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.gear.used.error", id)); + } + requestResult.addIdToDelete(id); + requestResult.removeExistingNaturalId(name); + + } else { + if (bean.getId() == null) { + requestResult.addEntityToAdd(bean.toEntity()); + + } else { + requestResult.addEntityToUpdate(bean.toEntity()); + } + } + } + + protected void exportTemporaryGear(File file, List<Gear> toExport) throws IOException { + + GearModel csvModel = new GearModel(getCsvSeparator()); + + BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); + + List<GearRow> toExportRows = Lists.transform(toExport, new Function<Gear, GearRow>() { + @Override + public GearRow apply(Gear gear) { + return new GearRow(gear); + } + }); + + try { + Export export = Export.newExport(csvModel, toExportRows); + export.write(writer); + writer.close(); + } catch (IOException e) { + throw e; + } catch (Exception e) { + throw new ApplicationTechnicalException(t("tutti.service.referential.export.gear.error", file), e); + } finally { + IOUtils.closeQuietly(writer); + } + } + + protected char getCsvSeparator() { + return context.getConfig().getCsvSeparator(); + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryPersonService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryPersonService.java new file mode 100644 index 0000000..1fa0e0a --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryPersonService.java @@ -0,0 +1,244 @@ +package fr.ifremer.tutti.service.referential; + +import com.google.common.base.Charsets; +import com.google.common.base.Function; +import com.google.common.collect.Lists; +import com.google.common.io.Files; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.referential.Person; +import fr.ifremer.tutti.persistence.entities.referential.Persons; +import fr.ifremer.tutti.service.AbstractTuttiService; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.TuttiServiceContext; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.Export; +import org.nuiton.csv.Import; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.IOException; +import java.io.Reader; +import java.util.Collection; +import java.util.List; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 11/16/14. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.10 + */ +public class ReferentialTemporaryPersonService extends AbstractTuttiService { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(ReferentialTemporaryPersonService.class); + + protected PersistenceService persistenceService; + + @Override + public void setServiceContext(TuttiServiceContext context) { + super.setServiceContext(context); + persistenceService = getService(PersistenceService.class); + } + + public ReferentialImportResult<Person> importTemporaryPerson(File file) throws IOException { + + if (log.isInfoEnabled()) { + log.info("Will import persons from file: " + file); + } + + List<Person> allPersons = persistenceService.getAllPerson(); + + ImportRequestResult<Person, Integer> requestResult = processImportFile(file, allPersons); + + ReferentialImportResult<Person> result = new ReferentialImportResult<>(); + + if (requestResult.withToDelete()) { + + Collection<Integer> idsToDelete = requestResult.getIdsToDelete(); + + persistenceService.deleteTemporaryPersons(idsToDelete, true); + result.setNbRefDeleted(idsToDelete.size()); + + } + + if (requestResult.withToAdd()) { + + Collection<Person> entitiesToAdd = requestResult.getEntitiesToAdd(); + + Collection<Person> entitiesAdded = persistenceService.importTemporaryPerson(entitiesToAdd); + result.addAllRefsAdded(entitiesAdded); + } + + if (requestResult.withToupdate()) { + + Collection<Person> entitiesToUpdate = requestResult.getEntitiesToUpdate(); + Collection<Person> entitiesUpdated = persistenceService.importTemporaryPerson(entitiesToUpdate); + result.addAllRefsUpdated(entitiesUpdated); + + } + + return result; + } + + public void exportExistingTemporaryPerson(File file) throws IOException { + + if (log.isInfoEnabled()) { + log.info("Getting all persons from database"); + } + List<Person> targetList = Lists.newArrayList(persistenceService.getAllPerson()); + if (log.isInfoEnabled()) { + log.info("Got " + targetList.size() + " persons"); + } + List<Person> toExport = persistenceService.retainTemporaryPersonList(targetList); + if (log.isInfoEnabled()) { + log.info("Got " + toExport.size() + " temporary persons"); + } + exportTemporaryPerson(file, toExport); + + } + + public void exportTemporaryPersonExample(File file) throws IOException { + + List<Person> toExport = Lists.newArrayList(); + + Person p; + + p = Persons.newPerson(); + p.setFirstName("First name 1"); + p.setLastName("Last name 1"); + toExport.add(p); + + p = Persons.newPerson(); + p.setFirstName("First name 2"); + p.setLastName("Last name 2"); + toExport.add(p); + + p = Persons.newPerson(); + p.setFirstName("First name 3"); + p.setLastName("Last name 3"); + toExport.add(p); + + exportTemporaryPerson(file, toExport); + + } + + protected ImportRequestResult<Person, Integer> processImportFile(File file, List<Person> existingEntities) { + + ImportRequestResult<Person, Integer> requestResult = new ImportRequestResult<>(existingEntities, TuttiEntities.<Person>newIdAstIntFunction(), Persons.GET_FULL_NAME); + + try (Reader reader = Files.newReader(file, Charsets.UTF_8)) { + + PersonModel csvModel = new PersonModel(getCsvSeparator()); + try (Import<PersonRow> importer = Import.newImport(csvModel, reader)) { + + for (PersonRow bean : importer) { + + importPerson(bean, requestResult); + + } + + } + + } catch (IOException e) { + throw new ApplicationTechnicalException(t("tutti.service.referential.import.persons.error", file), e); + + } catch (ImportRuntimeException e) { + String message; + if (e.getCause() != null) { + message = e.getCause().getMessage(); + } else { + message = e.getMessage(); + } + throw new ApplicationTechnicalException(message, e); + + } + + return requestResult; + + } + + private void importPerson(PersonRow bean, ImportRequestResult<Person, Integer> requestResult) { + + Integer id = bean.getIdAsInt(); + Person person = requestResult.getExistingEntityById(id); + String name = Persons.GET_FULL_NAME.apply(bean.toEntity()); + + boolean delete = BooleanUtils.isTrue(bean.getToDelete()); + + if (id != null && requestResult.addExistingEntityId(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.person.notExistingId.error", id)); + } + if (StringUtils.isBlank(name)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.person.noName.error", id)); + } + if (!delete && !requestResult.addExistingNaturalId(name) && + (id == null || person != null && !person.getName().equals(name))) { + throw new IllegalArgumentException(t("tutti.service.referential.import.person.existingName.error", name)); + } + + if (delete) { + if (id == null) { + throw new IllegalArgumentException(t("tutti.service.referential.import.person.cannotDeleteWithoutId.error")); + } + if (persistenceService.isTemporaryPersonUsed(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.person.used.error", id)); + } + requestResult.addIdToDelete(id); + requestResult.removeExistingNaturalId(name); + + } else { + if (bean.getId() == null) { + requestResult.addEntityToAdd(bean.toEntity()); + + } else { + requestResult.addEntityToUpdate(bean.toEntity()); + } + } + + } + +// protected String getPersonFullName(Person person) { +// return StringUtils.lowerCase( +// StringUtils.trimToEmpty(person.getFirstName()) + +// StringUtils.trimToEmpty(person.getLastName())); +// } + + protected void exportTemporaryPerson(File file, List<Person> toExport) throws IOException { + + PersonModel csvModel = new PersonModel(getCsvSeparator()); + + BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); + + List<PersonRow> toExportRows = Lists.transform(toExport, new Function<Person, PersonRow>() { + @Override + public PersonRow apply(Person person) { + return new PersonRow(person); + } + }); + + try { + Export export = Export.newExport(csvModel, toExportRows); + export.write(writer); + writer.close(); + } catch (IOException e) { + throw e; + } catch (Exception e) { + throw new ApplicationTechnicalException(t("tutti.service.referential.export.person.error", file), e); + } finally { + IOUtils.closeQuietly(writer); + } + } + + protected char getCsvSeparator() { + return context.getConfig().getCsvSeparator(); + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialTemporarySpeciesService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialTemporarySpeciesService.java new file mode 100644 index 0000000..0b76233 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialTemporarySpeciesService.java @@ -0,0 +1,239 @@ +package fr.ifremer.tutti.service.referential; + +import com.google.common.base.Charsets; +import com.google.common.base.Function; +import com.google.common.collect.Lists; +import com.google.common.io.Files; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.persistence.entities.referential.Speciess; +import fr.ifremer.tutti.service.AbstractTuttiService; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.TuttiServiceContext; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.Export; +import org.nuiton.csv.Import; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.IOException; +import java.io.Reader; +import java.util.Collection; +import java.util.List; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 11/16/14. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.10 + */ +public class ReferentialTemporarySpeciesService extends AbstractTuttiService { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(ReferentialTemporarySpeciesService.class); + + protected PersistenceService persistenceService; + + @Override + public void setServiceContext(TuttiServiceContext context) { + super.setServiceContext(context); + persistenceService = getService(PersistenceService.class); + } + + public ReferentialImportResult<Species> importTemporarySpecies(File file) { + + if (log.isInfoEnabled()) { + log.info("Will import species from file: " + file); + } + + List<Species> allSpecies = persistenceService.getAllSpecies(); + + ImportRequestResult<Species, Integer> requestResult = processImportFile(file, allSpecies); + + ReferentialImportResult<Species> result = new ReferentialImportResult<>(); + + if (requestResult.withToDelete()) { + + Collection<Integer> idsToDelete = requestResult.getIdsToDelete(); + persistenceService.deleteTemporarySpecies(idsToDelete, true); + result.setNbRefDeleted(idsToDelete.size()); + + } + + if (requestResult.withToAdd()) { + + Collection<Species> entitiesToAdd = requestResult.getEntitiesToAdd(); + Collection<Species> entitiesAdded = persistenceService.importTemporarySpecies(entitiesToAdd); + result.addAllRefsAdded(entitiesAdded); + } + + if (requestResult.withToupdate()) { + + Collection<Species> entitiesToUpdate = requestResult.getEntitiesToUpdate(); + Collection<Species> entitiesUpdated = persistenceService.importTemporarySpecies(entitiesToUpdate); + result.addAllRefsUpdated(entitiesUpdated); + + } + + return result; + } + + public void exportExistingTemporarySpecies(File file) throws IOException { + + if (log.isInfoEnabled()) { + log.info("Getting all species from database"); + } + List<Species> targetList = Lists.newArrayList(persistenceService.getAllReferentSpecies()); + + if (log.isInfoEnabled()) { + log.info("Got " + targetList.size() + " species"); + } + List<Species> toExport = persistenceService.retainTemporarySpeciesList(targetList); + if (log.isInfoEnabled()) { + log.info("Got " + toExport.size() + " temporary species"); + } + exportTemporarySpecies(file, toExport); + + } + + public void exportTemporarySpeciesExample(File file) throws IOException { + + List<Species> toExport = Lists.newArrayList(); + + { + Species s = Speciess.newSpecies(); + s.setName("Temporary Species name 1"); + toExport.add(s); + } + { + Species s = Speciess.newSpecies(); + s.setName("Temporary Species name 2"); + toExport.add(s); + } + { + Species s = Speciess.newSpecies(); + s.setName("Temporary Species name 3"); + toExport.add(s); + } + exportTemporarySpecies(file, toExport); + + } + + protected ImportRequestResult<Species, Integer> processImportFile(File file, List<Species> existingEntities) { + + ImportRequestResult<Species, Integer> requestResult = new ImportRequestResult<>(existingEntities, TuttiEntities.<Species>newIdAstIntFunction(), Speciess.GET_NAME); + + try (Reader reader = Files.newReader(file, Charsets.UTF_8)) { + + SpeciesModel csvModel = new SpeciesModel(getCsvSeparator()); + try (Import<SpeciesRow> importer = Import.newImport(csvModel, reader)) { + + for (SpeciesRow bean : importer) { + + importSpecies(bean, requestResult); + + } + + } + + } catch (IOException e) { + throw new ApplicationTechnicalException(t("tutti.service.referential.import.species.error", file), e); + + } catch (ImportRuntimeException e) { + String message; + if (e.getCause() != null) { + message = e.getCause().getMessage(); + } else { + message = e.getMessage(); + } + throw new ApplicationTechnicalException(message, e); + + } + + return requestResult; + + } + + protected void exportTemporarySpecies(File file, List<Species> toExport) throws IOException { + + SpeciesModel csvModel = new SpeciesModel(getCsvSeparator()); + + BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); + + List<SpeciesRow> toExportRows = Lists.transform(toExport, new Function<Species, SpeciesRow>() { + @Override + public SpeciesRow apply(Species species) { + return new SpeciesRow(species); + } + }); + + try { + Export export = Export.newExport(csvModel, toExportRows); + export.write(writer); + writer.close(); + } catch (IOException e) { + throw e; + } catch (Exception e) { + throw new ApplicationTechnicalException(t("tutti.service.referential.export.species.error", file), e); + } finally { + IOUtils.closeQuietly(writer); + } + + } + + protected void importSpecies(SpeciesRow bean, ImportRequestResult<Species, Integer> requestResult) { + + Integer id = bean.getIdAsInt(); + String name = bean.getName(); + Species species = requestResult.getExistingEntityById(id); + boolean delete = BooleanUtils.isTrue(bean.getToDelete()); + + if (id != null && requestResult.addExistingEntityId(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.species.notExistingId.error", id)); + } + if (StringUtils.isBlank(name)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.species.noName.error", id)); + } + if (!delete && !requestResult.addExistingNaturalId(name) && + (id == null || species != null && !species.getName().equals(name))) { + throw new IllegalArgumentException(t("tutti.service.referential.import.species.existingName.error", name)); + } + + if (delete) { + if (id == null) { + throw new IllegalArgumentException(t("tutti.service.referential.import.species.cannotDeleteWithoutId.error")); + } + if (persistenceService.isTemporarySpeciesUsed(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.species.used.error", id)); + } + requestResult.addIdToDelete(species.getReferenceTaxonId()); + requestResult.removeExistingNaturalId(name); + + } else { + if (bean.getId() == null) { + + requestResult.addEntityToAdd(bean.toEntity(null)); + + } else { + + requestResult.addEntityToUpdate(bean.toEntity(species.getReferenceTaxonId())); + + } + } + + } + + protected char getCsvSeparator() { + return context.getConfig().getCsvSeparator(); + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryVesselService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryVesselService.java new file mode 100644 index 0000000..f5cef17 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryVesselService.java @@ -0,0 +1,255 @@ +package fr.ifremer.tutti.service.referential; + +import com.google.common.base.Charsets; +import com.google.common.base.Function; +import com.google.common.collect.Lists; +import com.google.common.io.Files; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.persistence.entities.referential.Vessels; +import fr.ifremer.tutti.service.AbstractTuttiService; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.TuttiServiceContext; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.Export; +import org.nuiton.csv.Import; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.IOException; +import java.io.Reader; +import java.util.Collection; +import java.util.List; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 11/16/14. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.10 + */ +public class ReferentialTemporaryVesselService extends AbstractTuttiService { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(ReferentialTemporaryVesselService.class); + + protected PersistenceService persistenceService; + + @Override + public void setServiceContext(TuttiServiceContext context) { + super.setServiceContext(context); + persistenceService = getService(PersistenceService.class); + } + + public ReferentialImportResult<Vessel> importTemporaryVessel(File file) throws IOException { + + if (log.isInfoEnabled()) { + log.info("Will import vessels from file: " + file); + } + + // get all vessels + List<Vessel> existingVessels = Lists.newArrayList(persistenceService.getAllFishingVessel()); + existingVessels.addAll(persistenceService.getAllScientificVessel()); + + ImportRequestResult<Vessel, String> requestResult = processImportFile(file, existingVessels); + + ReferentialImportResult<Vessel> result = new ReferentialImportResult<>(); + + if (requestResult.withToDelete()) { + + Collection<String> idsToDelete = requestResult.getIdsToDelete(); + persistenceService.deleteTemporaryVessels(idsToDelete, true); + result.setNbRefDeleted(idsToDelete.size()); + + } + + if (requestResult.withToAdd()) { + + Collection<Vessel> entitiesToAdd = requestResult.getEntitiesToAdd(); + Collection<Vessel> entitiesAdded = persistenceService.importTemporaryVessel(entitiesToAdd); + result.addAllRefsAdded(entitiesAdded); + } + + if (requestResult.withToupdate()) { + + Collection<Vessel> entitiesToUpdate = requestResult.getEntitiesToUpdate(); + Collection<Vessel> entitiesUpdated = persistenceService.importTemporaryVessel(entitiesToUpdate); + result.addAllRefsUpdated(entitiesUpdated); + + } + + return result; + } + + public void exportExistingTemporaryVessel(File file) throws IOException { + + if (log.isInfoEnabled()) { + log.info("Getting all vessels from database"); + } + List<Vessel> targetList = Lists.newArrayList(persistenceService.getAllFishingVessel()); + targetList.addAll(persistenceService.getAllScientificVessel()); + if (log.isInfoEnabled()) { + log.info("Got " + targetList.size() + " vessels"); + } + List<Vessel> toExport = persistenceService.retainTemporaryVesselList(targetList); + + if (log.isInfoEnabled()) { + log.info("Got " + toExport.size() + " temporary vessels"); + } + exportTemporaryVessel(file, toExport); + + } + + public void exportTemporaryVesselExample(File file) throws IOException { + + List<Vessel> toExport = Lists.newArrayList(); + + { + Vessel v = Vessels.newVessel(); + v.setRegistrationCode("RegCode1"); + v.setName("Temporary fishing vessel name 1"); + v.setInternationalRegistrationCode("International registration code F1"); + v.setScientificVessel(false); + toExport.add(v); + } + { + Vessel v = Vessels.newVessel(); + v.setRegistrationCode("RegCode2"); + v.setName("Temporary fishing vessel name 2"); + v.setInternationalRegistrationCode("International registration code F2"); + v.setScientificVessel(false); + toExport.add(v); + } + { + Vessel v = Vessels.newVessel(); + v.setRegistrationCode("RegCode3"); + v.setName("Temporary scientific vessel name 3"); + v.setInternationalRegistrationCode("International registration code S3"); + v.setScientificVessel(true); + toExport.add(v); + } + { + Vessel v = Vessels.newVessel(); + v.setRegistrationCode("RegCode4"); + v.setName("Temporary scientific vessel name 4"); + v.setInternationalRegistrationCode("International registration code S4"); + v.setScientificVessel(true); + toExport.add(v); + } + exportTemporaryVessel(file, toExport); + + } + + protected ImportRequestResult<Vessel, String> processImportFile(File file, List<Vessel> existingEntities) { + + ImportRequestResult<Vessel, String> requestResult = new ImportRequestResult<>(existingEntities, TuttiEntities.<Vessel>newIdFunction(), Vessels.GET_INTERNAL_REGISTRATION_CODE); + + try (Reader reader = Files.newReader(file, Charsets.UTF_8)) { + + VesselModel csvModel = new VesselModel(getCsvSeparator()); + try (Import<VesselRow> importer = Import.newImport(csvModel, reader)) { + + for (VesselRow bean : importer) { + + importVessel(bean, requestResult); + + } + + } + + } catch (IOException e) { + throw new ApplicationTechnicalException(t("tutti.service.referential.import.vessels.error", file), e); + + } catch (ImportRuntimeException e) { + String message; + if (e.getCause() != null) { + message = e.getCause().getMessage(); + } else { + message = e.getMessage(); + } + throw new ApplicationTechnicalException(message, e); + + } + + return requestResult; + + } + + private void importVessel(VesselRow bean, ImportRequestResult<Vessel, String> requestResult) { + + String id = StringUtils.trimToNull(bean.getId()); + String internationalRegistrationCode = bean.getInternationalRegistrationCode(); + Vessel vessel = requestResult.getExistingEntityById(id); + boolean delete = BooleanUtils.isTrue(bean.getToDelete()); + + if (id != null && requestResult.addExistingEntityId(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.notExistingId.error", id)); + } + if (StringUtils.isBlank(internationalRegistrationCode)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.noInternationalRegistrationCode.error", id)); + } + if (!delete && !requestResult.addExistingNaturalId(internationalRegistrationCode) && + (id == null || vessel != null && !vessel.getRegistrationCode().equals(internationalRegistrationCode))) { + throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.existingInternationalRegistrationCode.error", + internationalRegistrationCode)); + } + + if (delete) { + if (id == null) { + throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.cannotDeleteWithoutId.error")); + } + if (persistenceService.isTemporaryVesselUsed(id)) { + throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.used.error", id)); + } + requestResult.addIdToDelete(id); + requestResult.removeExistingNaturalId(internationalRegistrationCode); + + } else { + if (id == null) { + requestResult.addEntityToAdd(bean.toEntity()); + + } else { + requestResult.addEntityToUpdate(bean.toEntity()); + } + } + } + + protected void exportTemporaryVessel(File file, List<Vessel> toExport) throws IOException { + + VesselModel csvModel = new VesselModel(getCsvSeparator()); + + BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); + + List<VesselRow> toExportRows = Lists.transform(toExport, new Function<Vessel, VesselRow>() { + @Override + public VesselRow apply(Vessel vessel) { + return new VesselRow(vessel); + } + }); + + try { + Export export = Export.newExport(csvModel, toExportRows); + export.write(writer); + writer.close(); + } catch (IOException e) { + throw e; + } catch (Exception e) { + throw new ApplicationTechnicalException(t("tutti.service.referential.export.vessel.error", file), e); + } finally { + IOUtils.closeQuietly(writer); + } + } + + + protected char getCsvSeparator() { + return context.getConfig().getCsvSeparator(); + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java index 3de629f..ebfe0db 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java @@ -22,20 +22,10 @@ package fr.ifremer.tutti.service.referential; * #L% */ -import com.google.common.base.Function; -import com.google.common.collect.Iterables; -import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.persistence.entities.referential.Speciess; import fr.ifremer.tutti.service.TuttiCsvUtil; -import org.nuiton.csv.Common; - -import java.text.ParseException; -import java.util.Collection; -import java.util.Set; import static org.nuiton.i18n.I18n.n; -import static org.nuiton.i18n.I18n.t; /** * Model to import / export {@link Species} in csv format. diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesRow.java index f6ed807..ffd1511 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesRow.java @@ -26,16 +26,24 @@ package fr.ifremer.tutti.service.referential; import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.persistence.entities.referential.SpeciesBean; +import fr.ifremer.tutti.persistence.entities.referential.Speciess; /** * @author Kevin Morin (Code Lutin) * @since 3.8 */ -public class SpeciesRow extends SpeciesBean { +public class SpeciesRow { + + public static final String PROPERTY_ID = "id"; + + public static final String PROPERTY_NAME = "name"; public static final String PROPERTY_TO_DELETE = "toDelete"; + protected String id; + + protected String name; + protected Boolean toDelete; public SpeciesRow() { @@ -49,6 +57,22 @@ public class SpeciesRow extends SpeciesBean { setName(species.getName()); } + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + public Boolean getToDelete() { return toDelete; } @@ -56,4 +80,21 @@ public class SpeciesRow extends SpeciesBean { public void setToDelete(Boolean toDelete) { this.toDelete = toDelete; } + + public Species toEntity(Integer referenceTaxonId) { + Species species = Speciess.newSpecies(); + species.setId(getId()); + species.setName(getName()); + species.setReferenceTaxonId(referenceTaxonId); + return species; + } + + public Integer getIdAsInt() { + Integer idAsInt = null; + if (id != null) { + idAsInt = Integer.valueOf(id); + } + return idAsInt; + } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java index b39b6c6..5c14ed9 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java @@ -24,7 +24,6 @@ package fr.ifremer.tutti.service.referential; import fr.ifremer.adagio.core.dao.technical.hibernate.TemporaryDataHelper; import fr.ifremer.tutti.persistence.entities.referential.Vessel; -import fr.ifremer.tutti.persistence.entities.referential.Vessels; import fr.ifremer.tutti.service.TuttiCsvUtil; import org.apache.commons.lang3.StringUtils; import org.nuiton.csv.Common; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselRow.java index 0863607..e6d6908 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselRow.java @@ -26,16 +26,32 @@ package fr.ifremer.tutti.service.referential; import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.referential.Vessel; -import fr.ifremer.tutti.persistence.entities.referential.VesselBean; +import fr.ifremer.tutti.persistence.entities.referential.Vessels; /** * @author Kevin Morin (Code Lutin) * @since 3.8 */ -public class VesselRow extends VesselBean { +public class VesselRow { + + public static final String PROPERTY_ID = "id"; + + public static final String PROPERTY_NAME = "name"; + + public static final String PROPERTY_SCIENTIFIC_VESSEL = "scientificVessel"; + + public static final String PROPERTY_INTERNATIONAL_REGISTRATION_CODE = "internationalRegistrationCode"; public static final String PROPERTY_TO_DELETE = "toDelete"; + protected String id; + + protected String name; + + protected boolean scientificVessel; + + protected String internationalRegistrationCode; + protected Boolean toDelete; public VesselRow() { @@ -46,12 +62,44 @@ public class VesselRow extends VesselBean { super(); Preconditions.checkNotNull(vessel); setId(vessel.getId()); - setRegistrationCode(vessel.getRegistrationCode()); +// setRegistrationCode(vessel.getRegistrationCode()); setName(vessel.getName()); setInternationalRegistrationCode(vessel.getInternationalRegistrationCode()); setScientificVessel(vessel.isScientificVessel()); } + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isScientificVessel() { + return scientificVessel; + } + + public void setScientificVessel(boolean scientificVessel) { + this.scientificVessel = scientificVessel; + } + + public String getInternationalRegistrationCode() { + return internationalRegistrationCode; + } + + public void setInternationalRegistrationCode(String internationalRegistrationCode) { + this.internationalRegistrationCode = internationalRegistrationCode; + } + public Boolean getToDelete() { return toDelete; } @@ -59,4 +107,23 @@ public class VesselRow extends VesselBean { public void setToDelete(Boolean toDelete) { this.toDelete = toDelete; } + + public Vessel toEntity() { + + Vessel vessel = Vessels.newVessel(); + vessel.setId(getId()); + vessel.setName(getName()); + vessel.setScientificVessel(isScientificVessel()); + vessel.setInternationalRegistrationCode(getInternationalRegistrationCode()); + return vessel; + + } + + public Integer getIdAsInt() { + Integer idAsInt = null; + if (id != null) { + idAsInt = Integer.valueOf(id); + } + return idAsInt; + } } diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno5079Test.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno5079Test.java index e53c9f0..b51c1d8 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno5079Test.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/PupitriImportServiceAno5079Test.java @@ -22,6 +22,7 @@ package fr.ifremer.tutti.service.pupitri; * #L% */ +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.tutti.TuttiConfigurationOption; @@ -46,7 +47,7 @@ import org.nuiton.decorator.Decorator; import java.io.File; import java.io.IOException; -import java.util.List; +import java.util.Collection; import java.util.Set; /** @@ -105,8 +106,8 @@ public class PupitriImportServiceAno5079Test { // Import MELA-NGE species SpeciesBean melagSpecies = new SpeciesBean(); melagSpecies.setName("MELA-NGE"); - List<Species> specieses = persistenceService.importTemporarySpecies(Lists.<Species>newArrayList(melagSpecies)); - specieses.get(0).setRefTaxCode(melagSpecies.getName()); + Collection<Species> specieses = persistenceService.importTemporarySpecies(Lists.<Species>newArrayList(melagSpecies)); + Iterables.get(specieses, 0).setRefTaxCode(melagSpecies.getName()); File trunk = dbResource.copyClassPathResource("pupitri/ano-5079.tnk", "pupitri.tnk"); File carroussel = dbResource.copyClassPathResource("pupitri/ano-5079.car", "pupitri.car"); diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportServiceTest.java deleted file mode 100644 index a8b8bab..0000000 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialImportServiceTest.java +++ /dev/null @@ -1,464 +0,0 @@ -package fr.ifremer.tutti.service.referential; - -/* - * #%L - * Tutti :: Service - * %% - * Copyright (C) 2012 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Charsets; -import com.google.common.io.Files; -import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmId; -import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueId; -import fr.ifremer.tutti.persistence.entities.data.Cruise; -import fr.ifremer.tutti.persistence.entities.data.Cruises; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.data.FishingOperations; -import fr.ifremer.tutti.persistence.entities.data.Program; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchs; -import fr.ifremer.tutti.persistence.entities.referential.Gear; -import fr.ifremer.tutti.persistence.entities.referential.Person; -import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.persistence.entities.referential.Vessel; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.ServiceDbResource; -import fr.ifremer.tutti.service.TuttiServiceContext; -import org.junit.Assert; -import org.junit.Before; -import org.junit.ClassRule; -import org.junit.Test; -import org.nuiton.jaxx.application.ApplicationTechnicalException; - -import java.io.File; -import java.util.List; - -/** - * @author tchemit <chemit@codelutin.com> - * @since 1.0 - */ -public class ReferentialImportServiceTest { - - @ClassRule - public static final ServiceDbResource dbResource = ServiceDbResource.writeDb("dbCGFS"); - - protected File dataDirectory; - - // SPECIES FILES - - private static final String SPECIES_FILE_CONTENT = - "id;name;toDelete\n" + - ";Temporary Species name 1;\n" + - ";Temporary Species name 2;\n" + - ";Temporary Species name 3;"; - - private static final String SPECIES_DUPLICATE_NAME_FILE_CONTENT = - "id;name;toDelete\n" + - ";Temporary Species name 1;\n" + - ";Temporary Species name 1;"; - - private static final String SPECIES_BLANK_NAME_FILE_CONTENT = - "id;name;toDelete\n" + - "; ;"; - - private static final String SPECIES_UPDATE_FILE_CONTENT = - "id;name;toDelete\n" + - "-1;Temporary Species name 11;N\n" + - "-2;Temporary Species name 2;Y"; - - private static final String SPECIES_DELETE_USED_FILE_CONTENT = - "id;name;toDelete\n" + - "-1;Temporary Species name 11;Y"; - - // GEAR FILES - - private static final String GEAR_FILE_CONTENT = - "id;name;label;scientificGear;toDelete\n" + - ";Gear fishing name 1;Gear fishing label 1;N;\n" + - ";Gear fishing name 2;Gear fishing label 2;N;\n" + - ";Gear scientific name 3;Gear scientific label 3;Y;\n" + - ";Gear scientific name 4;Gear scientific label 4;Y;"; - - private static final String GEAR_DUPLICATE_NAME_FILE_CONTENT = - "id;name;label;scientificGear;toDelete\n" + - ";Temporary Gear name 1;;;\n" + - ";Temporary Gear name 1;;;"; - - private static final String GEAR_BLANK_NAME_FILE_CONTENT = - "id;name;label;scientificGear;toDelete\n" + - "; ;;;"; - - private static final String GEAR_UPDATE_FILE_CONTENT = - "id;name;label;scientificGear;toDelete\n" + - "-1;Temporary Gear name 11;;N;N\n" + - "-2;Temporary Gear name 2;;;Y"; - - private static final String GEAR_DELETE_USED_FILE_CONTENT = - "id;name;label;scientificGear;toDelete\n" + - "-1;Temporary Gear name 11;;;Y"; - - // PERSON FILES - - private static final String PERSON_FILE_CONTENT = - "id;firstName;lastName;toDelete\n" + - ";First name 1;Last name 1;\n" + - ";First name 2;Last name 2;\n" + - ";First name 3;Last name 3;"; - - private static final String PERSON_UPDATE_FILE_CONTENT = - "id;firstName;lastName;toDelete\n" + - "-1;First name 11;Last name 11;N\n" + - "-2;;;Y"; - - private static final String PERSON_DELETE_USED_FILE_CONTENT = - "id;firstName;lastName;toDelete\n" + - "-1;First name 11;Last name 11;Y"; - - // VESSEL FILES - - private static final String VESSEL_FILE_CONTENT = - "id;name;internationalRegistrationCode;scientificVessel;toDelete\n" + - ";Temporary fishing vessel name 1;International registration code F1;N;\n" + - ";Temporary fishing vessel name 2;International registration code F2;N;\n" + - ";Temporary scientific vessel name 3;International registration code S3;Y;\n" + - ";Temporary scientific vessel name 4;International registration code S4;Y;"; - - private static final String DUPLICATE_VESSEL_FILE_CONTENT = - "id;name;internationalRegistrationCode;scientificVessel;toDelete\n" + - ";Temporary fishing vessel name 1;International registration code F1;N;\n" + - ";Temporary fishing vessel name 1;International registration code F1;N;\n" + - ";Temporary fishing vessel name 2;International registration code F2;N;\n" + - ";Temporary scientific vessel name 3;International registration code S3;Y;\n" + - ";Temporary scientific vessel name 4;International registration code S4;Y;"; - - protected ReferentialImportService service; - - protected PersistenceService persistenceService; - - public static final String OPERATION_1_ID = "100108"; - - @Before - public void setUp() throws Exception { - - dataDirectory = dbResource.getConfig().getDataDirectory(); - - TuttiServiceContext serviceContext = dbResource.getServiceContext(); - - serviceContext.getConfig().setCsvSeparator(';'); - - service = serviceContext.getService(ReferentialImportService.class); - - persistenceService = serviceContext.getService(PersistenceService.class); - - } - - @Test - public void importTemporarySpecies() throws Exception { - - File file = new File(dataDirectory, "importSpecies.csv"); - - Files.createParentDirs(file); - - // successful import - Files.write(SPECIES_FILE_CONTENT, file, Charsets.UTF_8); - - ReferentialImportResult<Species> result = service.importTemporarySpecies(file); - List<Species> addedSpecies = result.getRefAdded(); - - Assert.assertNotNull(result); - Assert.assertEquals(3, addedSpecies.size()); - for (int i = 1; i <= 3; i++) { - Species actual = addedSpecies.get(i - 1); - Assert.assertNotNull(actual); - Assert.assertEquals("-" + i, actual.getId()); - Assert.assertEquals("Temporary Species name " + i, actual.getName()); - } - // try to reimport them - try { - service.importTemporarySpecies(file); - Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { - Assert.assertTrue(true); - } - - // try to update species with id -1 and remove id -2 - Assert.assertNotNull(persistenceService.getSpeciesByReferenceTaxonId(-1)); - Assert.assertNotNull(persistenceService.getSpeciesByReferenceTaxonId(-2)); - - Files.write(SPECIES_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); - result = service.importTemporarySpecies(file); - List<Species> updatedSpecies = result.getRefUpdated(); - Assert.assertNotNull(result); - Assert.assertEquals(1, updatedSpecies.size()); - Species actual = updatedSpecies.get(0); - Assert.assertNotNull(actual); - Assert.assertEquals("-1", actual.getId()); - Assert.assertEquals("Temporary Species name 11", actual.getName()); - - Assert.assertNull(persistenceService.getSpeciesByReferenceTaxonId(-2)); - - // try to delete used species - SpeciesBatch batch = persistenceService.getRootSpeciesBatch(OPERATION_1_ID, false).getChildren().get(0); - batch.setFishingOperation(persistenceService.getFishingOperation(OPERATION_1_ID)); - batch.setSpecies(persistenceService.getSpeciesByReferenceTaxonId(-1)); - persistenceService.saveSpeciesBatch(batch); - - Files.write(SPECIES_DELETE_USED_FILE_CONTENT, file, Charsets.UTF_8); - try { - service.importTemporarySpecies(file); - Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { - Assert.assertTrue(true); - } - - } - - @Test - public void importNotExistingIdTemporarySpecies() throws Exception { - - File file = new File(dataDirectory, "importSpecies.csv"); - - Files.createParentDirs(file); - - // try to import not existing id - Files.write(SPECIES_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); - try { - service.importTemporarySpecies(file); - Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { - Assert.assertTrue(true); - } - } - - @Test - public void importBlankNameTemporarySpecies() throws Exception { - - File file = new File(dataDirectory, "importSpecies.csv"); - - Files.createParentDirs(file); - // try to import blank name - Files.write(SPECIES_BLANK_NAME_FILE_CONTENT, file, Charsets.UTF_8); - try { - service.importTemporarySpecies(file); - Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { - Assert.assertTrue(true); - } - } - - @Test - public void importDuplicateTemporarySpecies() throws Exception { - - File file = new File(dataDirectory, "importSpecies.csv"); - - Files.createParentDirs(file); - - // try to import duplicate names - Files.write(SPECIES_DUPLICATE_NAME_FILE_CONTENT, file, Charsets.UTF_8); - try { - service.importTemporarySpecies(file); - Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { - Assert.assertTrue(true); - } - } - - @Test - public void importTemporaryVessel() throws Exception { - File file = new File(dataDirectory, "importVessel.csv"); - - Files.createParentDirs(file); - - Files.write(VESSEL_FILE_CONTENT, file, Charsets.UTF_8); - - ReferentialImportResult<Vessel> result = service.importTemporaryVessel(file); - List<Vessel> addedVessels = result.getRefAdded(); - - Assert.assertNotNull(result); - Assert.assertEquals(4, addedVessels.size()); - for (int i = 1; i <= 2; i++) { - Vessel actual = addedVessels.get(i - 1); - Assert.assertNotNull(actual); - Assert.assertEquals("#TEMP¿" + actual.getInternationalRegistrationCode(), actual.getId()); - Assert.assertEquals("Temporary fishing vessel name " + i, actual.getName()); - Assert.assertEquals("International registration code F" + i, actual.getInternationalRegistrationCode()); - Assert.assertFalse(actual.isScientificVessel()); - } - for (int i = 3; i <= 4; i++) { - Vessel actual = addedVessels.get(i - 1); - Assert.assertNotNull(actual); - Assert.assertEquals("#TEMP¿" + actual.getInternationalRegistrationCode(), actual.getId()); - Assert.assertEquals("Temporary scientific vessel name " + i, actual.getName()); - Assert.assertEquals("International registration code S" + i, actual.getInternationalRegistrationCode()); - Assert.assertTrue(actual.isScientificVessel()); - } - - // try to reimport them - try { - service.importTemporaryVessel(file); - Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { - Assert.assertTrue(true); - } - - // TODO test to replace a used vessel - } - - @Test - public void importDuplicateTemporaryVessel() throws Exception { - File file = new File(dataDirectory, "importVessel.csv"); - - Files.createParentDirs(file); - - Files.write(DUPLICATE_VESSEL_FILE_CONTENT, file, Charsets.UTF_8); - - try { - service.importTemporaryVessel(file); - Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { - // good duplicate vessel - } - } - - @Test - public void importTemporaryPerson() throws Exception { - File file = new File(dataDirectory, "importPerson.csv"); - - Files.createParentDirs(file); - - Files.write(PERSON_FILE_CONTENT, file, Charsets.UTF_8); - - // successful import - ReferentialImportResult<Person> result = service.importTemporaryPerson(file); - List<Person> addedPersons = result.getRefAdded(); - - Assert.assertNotNull(result); - Assert.assertEquals(3, addedPersons.size()); - for (int i = 1; i <= 3; i++) { - Person actual = addedPersons.get(i - 1); - Assert.assertNotNull(actual); - Assert.assertEquals("-" + i, actual.getId()); - Assert.assertEquals("First name " + i, actual.getFirstName()); - Assert.assertEquals("Last name " + i, actual.getLastName()); - } - - // TODO test to replace a used person - } - - @Test - public void importNotExistingIdTemporaryPerson() throws Exception { - - File file = new File(dataDirectory, "importPerson.csv"); - - Files.createParentDirs(file); - - // try to import not existing id - Files.write(PERSON_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); - try { - service.importTemporaryPerson(file); - Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { - Assert.assertTrue(true); - } - } - - @Test - public void importTemporaryGear() throws Exception { - File file = new File(dataDirectory, "importGear.csv"); - - Files.createParentDirs(file); - - Files.write(GEAR_FILE_CONTENT, file, Charsets.UTF_8); - - ReferentialImportResult<Gear> result = service.importTemporaryGear(file); - List<Gear> addedGears = result.getRefAdded(); - - Assert.assertNotNull(result); - Assert.assertEquals(4, addedGears.size()); - for (int i = 1; i <= 2; i++) { - Gear actual = addedGears.get(i - 1); - Assert.assertNotNull(actual); - Assert.assertTrue(actual.getId().startsWith("-")); - Assert.assertEquals("Gear fishing name " + i, actual.getName()); - Assert.assertEquals("Gear fishing label " + i, actual.getLabel()); - Assert.assertFalse(actual.isScientificGear()); - } - for (int i = 3; i <= 4; i++) { - Gear actual = addedGears.get(i - 1); - Assert.assertNotNull(actual); - Assert.assertTrue(actual.getId().startsWith("-")); - Assert.assertEquals("Gear scientific name " + i, actual.getName()); - Assert.assertEquals("Gear scientific label " + i, actual.getLabel()); - Assert.assertTrue(actual.isScientificGear()); - } - - // TODO test to replace a used gear - } - - @Test - public void importNotExistingIdTemporaryGear() throws Exception { - - File file = new File(dataDirectory, "importGear.csv"); - - Files.createParentDirs(file); - - // try to import not existing id - Files.write(GEAR_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); - try { - service.importTemporaryGear(file); - Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { - Assert.assertTrue(true); - } - } - - @Test - public void importBlankNameTemporaryGear() throws Exception { - - File file = new File(dataDirectory, "importGear.csv"); - - Files.createParentDirs(file); - // try to import blank name - Files.write(GEAR_BLANK_NAME_FILE_CONTENT, file, Charsets.UTF_8); - try { - service.importTemporaryGear(file); - Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { - Assert.assertTrue(true); - } - } - - @Test - public void importDuplicateTemporaryGear() throws Exception { - - File file = new File(dataDirectory, "importGear.csv"); - - Files.createParentDirs(file); - - // try to import duplicate names - Files.write(GEAR_DUPLICATE_NAME_FILE_CONTENT, file, Charsets.UTF_8); - try { - service.importTemporaryGear(file); - Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { - Assert.assertTrue(true); - } - } - -} diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryExportServiceTest.java similarity index 79% rename from tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java rename to tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryExportServiceTest.java index 4861779..62b65ca 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialExportServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryExportServiceTest.java @@ -37,42 +37,40 @@ import java.io.File; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class ReferentialExportServiceTest { +public class ReferentialTemporaryExportServiceTest { @ClassRule public static final ServiceDbResource dbResource = - ServiceDbResource.writeDb("dbCGFS"); + ServiceDbResource.readDb("dbCGFS"); protected File dataDirectory; - private static final String SPECIES_FILE_CONTENT = + private static final String SPECIES_FILE_CONTENT = "id;name;toDelete\n" + ";Temporary Species name 1;\n" + ";Temporary Species name 2;\n" + ";Temporary Species name 3;"; - private static final String GEAR_FILE_CONTENT = + private static final String GEAR_FILE_CONTENT = "id;name;label;scientificGear;toDelete\n" + ";Gear fishing name 1;Gear fishing label 1;N;\n" + ";Gear fishing name 2;Gear fishing label 2;N;\n" + ";Gear scientific name 3;Gear scientific label 3;Y;\n" + ";Gear scientific name 4;Gear scientific label 4;Y;"; - private static final String PERSON_FILE_CONTENT = + private static final String PERSON_FILE_CONTENT = "id;firstName;lastName;toDelete\n" + ";First name 1;Last name 1;\n" + ";First name 2;Last name 2;\n" + ";First name 3;Last name 3;"; - private static final String VESSEL_FILE_CONTENT = + private static final String VESSEL_FILE_CONTENT = "id;name;internationalRegistrationCode;scientificVessel;toDelete\n" + ";Temporary fishing vessel name 1;International registration code F1;N;\n" + ";Temporary fishing vessel name 2;International registration code F2;N;\n" + ";Temporary scientific vessel name 3;International registration code S3;Y;\n" + ";Temporary scientific vessel name 4;International registration code S4;Y;"; - protected ReferentialImportService service; - @Before public void setUp() throws Exception { @@ -81,33 +79,25 @@ public class ReferentialExportServiceTest { TuttiServiceContext serviceContext = dbResource.getServiceContext(); serviceContext.getConfig().setCsvSeparator(';'); - - service = serviceContext.getService(ReferentialImportService.class); } + @Test - public void exportTemporarySpeciesExample() throws Exception { + public void exportTemporaryGearExample() throws Exception { - File file = new File(dataDirectory, "exportSpecies.csv"); + File file = new File(dataDirectory, "exportGear.csv"); Assert.assertFalse(file.exists()); - service.exportTemporarySpeciesExample(file); - Assert.assertTrue(file.exists()); - String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); - Assert.assertEquals(SPECIES_FILE_CONTENT, exportFileToString); - } + TuttiServiceContext serviceContext = dbResource.getServiceContext(); + ReferentialTemporaryGearService service = serviceContext.getService(ReferentialTemporaryGearService.class); - @Test - public void exportTemporaryVesselExample() throws Exception { - File file = new File(dataDirectory, "exportVessel.csv"); + service.exportTemporaryGearExample(file); - Assert.assertFalse(file.exists()); - service.exportTemporaryVesselExample(file); Assert.assertTrue(file.exists()); String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); - Assert.assertEquals(VESSEL_FILE_CONTENT, exportFileToString); + Assert.assertEquals(GEAR_FILE_CONTENT, exportFileToString); } @Test @@ -116,7 +106,12 @@ public class ReferentialExportServiceTest { File file = new File(dataDirectory, "exportPerson.csv"); Assert.assertFalse(file.exists()); + + TuttiServiceContext serviceContext = dbResource.getServiceContext(); + ReferentialTemporaryPersonService service = serviceContext.getService(ReferentialTemporaryPersonService.class); + service.exportTemporaryPersonExample(file); + Assert.assertTrue(file.exists()); String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); @@ -124,16 +119,38 @@ public class ReferentialExportServiceTest { } @Test - public void exportTemporaryGearExample() throws Exception { + public void exportTemporarySpeciesExample() throws Exception { - File file = new File(dataDirectory, "exportGear.csv"); + File file = new File(dataDirectory, "exportSpecies.csv"); Assert.assertFalse(file.exists()); - service.exportTemporaryGearExample(file); + + TuttiServiceContext serviceContext = dbResource.getServiceContext(); + ReferentialTemporarySpeciesService service = serviceContext.getService(ReferentialTemporarySpeciesService.class); + + service.exportTemporarySpeciesExample(file); + Assert.assertTrue(file.exists()); String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); - Assert.assertEquals(GEAR_FILE_CONTENT, exportFileToString); + Assert.assertEquals(SPECIES_FILE_CONTENT, exportFileToString); + } + + @Test + public void exportTemporaryVesselExample() throws Exception { + File file = new File(dataDirectory, "exportVessel.csv"); + + Assert.assertFalse(file.exists()); + + TuttiServiceContext serviceContext = dbResource.getServiceContext(); + ReferentialTemporaryVesselService service = serviceContext.getService(ReferentialTemporaryVesselService.class); + + service.exportTemporaryVesselExample(file); + + Assert.assertTrue(file.exists()); + + String exportFileToString = Files.toString(file, Charsets.UTF_8).trim(); + Assert.assertEquals(VESSEL_FILE_CONTENT, exportFileToString); } } diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryGearServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryGearServiceTest.java new file mode 100644 index 0000000..7084ceb --- /dev/null +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryGearServiceTest.java @@ -0,0 +1,148 @@ +package fr.ifremer.tutti.service.referential; + +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.service.ServiceDbResource; +import fr.ifremer.tutti.service.TuttiServiceContext; +import org.junit.Assert; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.File; +import java.util.List; + +public class ReferentialTemporaryGearServiceTest { + + @ClassRule + public static final ServiceDbResource dbResource = ServiceDbResource.writeDb("dbCGFS"); + + protected File dataDirectory; + + protected ReferentialTemporaryGearService service; + + private static final String GEAR_FILE_CONTENT = + "id;name;label;scientificGear;toDelete\n" + + ";Gear fishing name 1;Gear fishing label 1;N;\n" + + ";Gear fishing name 2;Gear fishing label 2;N;\n" + + ";Gear scientific name 3;Gear scientific label 3;Y;\n" + + ";Gear scientific name 4;Gear scientific label 4;Y;"; + + private static final String GEAR_DUPLICATE_NAME_FILE_CONTENT = + "id;name;label;scientificGear;toDelete\n" + + ";Temporary Gear name 1;;;\n" + + ";Temporary Gear name 1;;;"; + + private static final String GEAR_BLANK_NAME_FILE_CONTENT = + "id;name;label;scientificGear;toDelete\n" + + "; ;;;"; + + private static final String GEAR_UPDATE_FILE_CONTENT = + "id;name;label;scientificGear;toDelete\n" + + "-1;Temporary Gear name 11;;N;N\n" + + "-2;Temporary Gear name 2;;;Y"; + + private static final String GEAR_DELETE_USED_FILE_CONTENT = + "id;name;label;scientificGear;toDelete\n" + + "-1;Temporary Gear name 11;;;Y"; + + + @Before + public void setUp() throws Exception { + + dataDirectory = dbResource.getConfig().getDataDirectory(); + + TuttiServiceContext serviceContext = dbResource.getServiceContext(); + + serviceContext.getConfig().setCsvSeparator(';'); + + service = serviceContext.getService(ReferentialTemporaryGearService.class); + + } + + @Test + public void importTemporaryGear() throws Exception { + File file = new File(dataDirectory, "importGear.csv"); + + Files.createParentDirs(file); + + Files.write(GEAR_FILE_CONTENT, file, Charsets.UTF_8); + + ReferentialImportResult<Gear> result = service.importTemporaryGear(file); + List<Gear> addedGears = result.getRefAdded(); + + Assert.assertNotNull(result); + Assert.assertEquals(4, addedGears.size()); + for (int i = 1; i <= 2; i++) { + Gear actual = addedGears.get(i - 1); + Assert.assertNotNull(actual); + Assert.assertTrue(actual.getId().startsWith("-")); + Assert.assertEquals("Gear fishing name " + i, actual.getName()); + Assert.assertEquals("Gear fishing label " + i, actual.getLabel()); + Assert.assertFalse(actual.isScientificGear()); + } + for (int i = 3; i <= 4; i++) { + Gear actual = addedGears.get(i - 1); + Assert.assertNotNull(actual); + Assert.assertTrue(actual.getId().startsWith("-")); + Assert.assertEquals("Gear scientific name " + i, actual.getName()); + Assert.assertEquals("Gear scientific label " + i, actual.getLabel()); + Assert.assertTrue(actual.isScientificGear()); + } + + // TODO test to replace a used gear + } + + @Test + public void importNotExistingIdTemporaryGear() throws Exception { + + File file = new File(dataDirectory, "importGear.csv"); + + Files.createParentDirs(file); + + // try to import not existing id + Files.write(GEAR_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporaryGear(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + } + + @Test + public void importBlankNameTemporaryGear() throws Exception { + + File file = new File(dataDirectory, "importGear.csv"); + + Files.createParentDirs(file); + // try to import blank name + Files.write(GEAR_BLANK_NAME_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporaryGear(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + } + + @Test + public void importDuplicateTemporaryGear() throws Exception { + + File file = new File(dataDirectory, "importGear.csv"); + + Files.createParentDirs(file); + + // try to import duplicate names + Files.write(GEAR_DUPLICATE_NAME_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporaryGear(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + } + +} \ No newline at end of file diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryPersonServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryPersonServiceTest.java new file mode 100644 index 0000000..fd56385 --- /dev/null +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryPersonServiceTest.java @@ -0,0 +1,98 @@ +package fr.ifremer.tutti.service.referential; + +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import fr.ifremer.tutti.persistence.entities.referential.Person; +import fr.ifremer.tutti.service.ServiceDbResource; +import fr.ifremer.tutti.service.TuttiServiceContext; +import org.junit.Assert; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.File; +import java.util.List; + +public class ReferentialTemporaryPersonServiceTest { + + @ClassRule + public static final ServiceDbResource dbResource = ServiceDbResource.writeDb("dbCGFS"); + + protected File dataDirectory; + + protected ReferentialTemporaryPersonService service; + + private static final String PERSON_FILE_CONTENT = + "id;firstName;lastName;toDelete\n" + + ";First name 1;Last name 1;\n" + + ";First name 2;Last name 2;\n" + + ";First name 3;Last name 3;"; + + private static final String PERSON_UPDATE_FILE_CONTENT = + "id;firstName;lastName;toDelete\n" + + "-1;First name 11;Last name 11;N\n" + + "-2;;;Y"; + + private static final String PERSON_DELETE_USED_FILE_CONTENT = + "id;firstName;lastName;toDelete\n" + + "-1;First name 11;Last name 11;Y"; + + + @Before + public void setUp() throws Exception { + + dataDirectory = dbResource.getConfig().getDataDirectory(); + + TuttiServiceContext serviceContext = dbResource.getServiceContext(); + + serviceContext.getConfig().setCsvSeparator(';'); + + service = serviceContext.getService(ReferentialTemporaryPersonService.class); + + } + + @Test + public void importTemporaryPerson() throws Exception { + File file = new File(dataDirectory, "importPerson.csv"); + + Files.createParentDirs(file); + + Files.write(PERSON_FILE_CONTENT, file, Charsets.UTF_8); + + // successful import + ReferentialImportResult<Person> result = service.importTemporaryPerson(file); + List<Person> addedPersons = result.getRefAdded(); + + Assert.assertNotNull(result); + Assert.assertEquals(3, addedPersons.size()); + for (int i = 1; i <= 3; i++) { + Person actual = addedPersons.get(i - 1); + Assert.assertNotNull(actual); + Assert.assertEquals("-" + i, actual.getId()); + Assert.assertEquals("First name " + i, actual.getFirstName()); + Assert.assertEquals("Last name " + i, actual.getLastName()); + } + + // TODO test to replace a used person + } + + @Test + public void importNotExistingIdTemporaryPerson() throws Exception { + + File file = new File(dataDirectory, "importPerson.csv"); + + Files.createParentDirs(file); + + // try to import not existing id + Files.write(PERSON_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporaryPerson(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + } + + +} \ No newline at end of file diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporarySpeciesServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporarySpeciesServiceTest.java new file mode 100644 index 0000000..4a244ef --- /dev/null +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporarySpeciesServiceTest.java @@ -0,0 +1,183 @@ +package fr.ifremer.tutti.service.referential; + +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.ServiceDbResource; +import fr.ifremer.tutti.service.TuttiServiceContext; +import org.junit.Assert; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.File; +import java.util.List; + +public class ReferentialTemporarySpeciesServiceTest { + + private static final String SPECIES_FILE_CONTENT = + "id;name;toDelete\n" + + ";Temporary Species name 1;\n" + + ";Temporary Species name 2;\n" + + ";Temporary Species name 3;"; + + private static final String SPECIES_DUPLICATE_NAME_FILE_CONTENT = + "id;name;toDelete\n" + + ";Temporary Species name 1;\n" + + ";Temporary Species name 1;"; + + private static final String SPECIES_BLANK_NAME_FILE_CONTENT = + "id;name;toDelete\n" + + "; ;"; + + private static final String SPECIES_UPDATE_FILE_CONTENT = + "id;name;toDelete\n" + + "-1;Temporary Species name 11;N\n" + + "-2;Temporary Species name 2;Y"; + + private static final String SPECIES_DELETE_USED_FILE_CONTENT = + "id;name;toDelete\n" + + "-1;Temporary Species name 11;Y"; + + @ClassRule + public static final ServiceDbResource dbResource = ServiceDbResource.writeDb("dbCGFS"); + + protected File dataDirectory; + + + protected ReferentialTemporarySpeciesService service; + + protected PersistenceService persistenceService; + + public static final String OPERATION_1_ID = "100108"; + + @Before + public void setUp() throws Exception { + + dataDirectory = dbResource.getConfig().getDataDirectory(); + + TuttiServiceContext serviceContext = dbResource.getServiceContext(); + + serviceContext.getConfig().setCsvSeparator(';'); + + service = serviceContext.getService(ReferentialTemporarySpeciesService.class); + + persistenceService = serviceContext.getService(PersistenceService.class); + + } + + @Test + public void importTemporarySpecies() throws Exception { + + File file = new File(dataDirectory, "importSpecies.csv"); + + Files.createParentDirs(file); + + // successful import + Files.write(SPECIES_FILE_CONTENT, file, Charsets.UTF_8); + + ReferentialImportResult<Species> result = service.importTemporarySpecies(file); + List<Species> addedSpecies = result.getRefAdded(); + + Assert.assertNotNull(result); + Assert.assertEquals(3, addedSpecies.size()); + for (int i = 1; i <= 3; i++) { + Species actual = addedSpecies.get(i - 1); + Assert.assertNotNull(actual); + Assert.assertEquals("-" + i, actual.getId()); + Assert.assertEquals("Temporary Species name " + i, actual.getName()); + } + // try to reimport them + try { + service.importTemporarySpecies(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + + // try to update species with id -1 and remove id -2 + Assert.assertNotNull(persistenceService.getSpeciesByReferenceTaxonId(-1)); + Assert.assertNotNull(persistenceService.getSpeciesByReferenceTaxonId(-2)); + + Files.write(SPECIES_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); + result = service.importTemporarySpecies(file); + List<Species> updatedSpecies = result.getRefUpdated(); + Assert.assertNotNull(result); + Assert.assertEquals(1, updatedSpecies.size()); + Species actual = updatedSpecies.get(0); + Assert.assertNotNull(actual); + Assert.assertEquals("-1", actual.getId()); + Assert.assertEquals("Temporary Species name 11", actual.getName()); + + Assert.assertNull(persistenceService.getSpeciesByReferenceTaxonId(-2)); + + // try to delete used species + SpeciesBatch batch = persistenceService.getRootSpeciesBatch(OPERATION_1_ID, false).getChildren().get(0); + batch.setFishingOperation(persistenceService.getFishingOperation(OPERATION_1_ID)); + batch.setSpecies(persistenceService.getSpeciesByReferenceTaxonId(-1)); + persistenceService.saveSpeciesBatch(batch); + + Files.write(SPECIES_DELETE_USED_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporarySpecies(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + + } + + @Test + public void importNotExistingIdTemporarySpecies() throws Exception { + + File file = new File(dataDirectory, "importSpecies.csv"); + + Files.createParentDirs(file); + + // try to import not existing id + Files.write(SPECIES_UPDATE_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporarySpecies(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + } + + @Test + public void importBlankNameTemporarySpecies() throws Exception { + + File file = new File(dataDirectory, "importSpecies.csv"); + + Files.createParentDirs(file); + // try to import blank name + Files.write(SPECIES_BLANK_NAME_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporarySpecies(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + } + + @Test + public void importDuplicateTemporarySpecies() throws Exception { + + File file = new File(dataDirectory, "importSpecies.csv"); + + Files.createParentDirs(file); + + // try to import duplicate names + Files.write(SPECIES_DUPLICATE_NAME_FILE_CONTENT, file, Charsets.UTF_8); + try { + service.importTemporarySpecies(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + } + +} \ No newline at end of file diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryVesselServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryVesselServiceTest.java new file mode 100644 index 0000000..91da354 --- /dev/null +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryVesselServiceTest.java @@ -0,0 +1,113 @@ +package fr.ifremer.tutti.service.referential; + +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.service.ServiceDbResource; +import fr.ifremer.tutti.service.TuttiServiceContext; +import org.junit.Assert; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.File; +import java.util.List; + +public class ReferentialTemporaryVesselServiceTest { + + @ClassRule + public static final ServiceDbResource dbResource = ServiceDbResource.writeDb("dbCGFS"); + + protected File dataDirectory; + + protected ReferentialTemporaryVesselService service; + + private static final String VESSEL_FILE_CONTENT = + "id;name;internationalRegistrationCode;scientificVessel;toDelete\n" + + ";Temporary fishing vessel name 1;International registration code F1;N;\n" + + ";Temporary fishing vessel name 2;International registration code F2;N;\n" + + ";Temporary scientific vessel name 3;International registration code S3;Y;\n" + + ";Temporary scientific vessel name 4;International registration code S4;Y;"; + + private static final String DUPLICATE_VESSEL_FILE_CONTENT = + "id;name;internationalRegistrationCode;scientificVessel;toDelete\n" + + ";Temporary fishing vessel name 1;International registration code F1;N;\n" + + ";Temporary fishing vessel name 1;International registration code F1;N;\n" + + ";Temporary fishing vessel name 2;International registration code F2;N;\n" + + ";Temporary scientific vessel name 3;International registration code S3;Y;\n" + + ";Temporary scientific vessel name 4;International registration code S4;Y;"; + + + @Before + public void setUp() throws Exception { + + dataDirectory = dbResource.getConfig().getDataDirectory(); + + TuttiServiceContext serviceContext = dbResource.getServiceContext(); + + serviceContext.getConfig().setCsvSeparator(';'); + + service = serviceContext.getService(ReferentialTemporaryVesselService.class); + + } + + @Test + public void importTemporaryVessel() throws Exception { + File file = new File(dataDirectory, "importVessel.csv"); + + Files.createParentDirs(file); + + Files.write(VESSEL_FILE_CONTENT, file, Charsets.UTF_8); + + ReferentialImportResult<Vessel> result = service.importTemporaryVessel(file); + List<Vessel> addedVessels = result.getRefAdded(); + + Assert.assertNotNull(result); + Assert.assertEquals(4, addedVessels.size()); + for (int i = 1; i <= 2; i++) { + Vessel actual = addedVessels.get(i - 1); + Assert.assertNotNull(actual); + Assert.assertEquals("#TEMP¿" + actual.getInternationalRegistrationCode(), actual.getId()); + Assert.assertEquals("Temporary fishing vessel name " + i, actual.getName()); + Assert.assertEquals("International registration code F" + i, actual.getInternationalRegistrationCode()); + Assert.assertFalse(actual.isScientificVessel()); + } + for (int i = 3; i <= 4; i++) { + Vessel actual = addedVessels.get(i - 1); + Assert.assertNotNull(actual); + Assert.assertEquals("#TEMP¿" + actual.getInternationalRegistrationCode(), actual.getId()); + Assert.assertEquals("Temporary scientific vessel name " + i, actual.getName()); + Assert.assertEquals("International registration code S" + i, actual.getInternationalRegistrationCode()); + Assert.assertTrue(actual.isScientificVessel()); + } + + // try to reimport them + try { + service.importTemporaryVessel(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + Assert.assertTrue(true); + } + + // TODO test to replace a used vessel + } + + @Test + public void importDuplicateTemporaryVessel() throws Exception { + File file = new File(dataDirectory, "importVessel.csv"); + + Files.createParentDirs(file); + + Files.write(DUPLICATE_VESSEL_FILE_CONTENT, file, Charsets.UTF_8); + + try { + service.importTemporaryVessel(file); + Assert.fail(); + } catch (IllegalArgumentException | ApplicationTechnicalException e) { + // good duplicate vessel + } + } + + +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java index b2309b7..3a0e46b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java @@ -45,8 +45,10 @@ import fr.ifremer.tutti.service.export.sumatra.CatchesSumatraExportService; import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; import fr.ifremer.tutti.service.psionimport.PsionImportService; import fr.ifremer.tutti.service.pupitri.PupitriImportExportService; -import fr.ifremer.tutti.service.referential.ReferentialExportService; -import fr.ifremer.tutti.service.referential.ReferentialImportService; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryGearService; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryPersonService; +import fr.ifremer.tutti.service.referential.ReferentialTemporarySpeciesService; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryVesselService; import fr.ifremer.tutti.service.referential.TuttiReferentialSynchronizeService; import fr.ifremer.tutti.service.report.ReportService; import fr.ifremer.tutti.ui.swing.content.MainUI; @@ -677,12 +679,20 @@ public class TuttiUIContext extends AbstractBean implements Closeable, UIMessage return serviceContext.getService(BigfinImportService.class); } - public ReferentialImportService getTuttiReferentialImportService() { - return serviceContext.getService(ReferentialImportService.class); + public ReferentialTemporaryGearService getReferentialTemporaryGearService() { + return serviceContext.getService(ReferentialTemporaryGearService.class); } - public ReferentialExportService getTuttiReferentialExportService() { - return serviceContext.getService(ReferentialExportService.class); + public ReferentialTemporaryPersonService getReferentialTemporaryPersonService() { + return serviceContext.getService(ReferentialTemporaryPersonService.class); + } + + public ReferentialTemporarySpeciesService getReferentialTemporarySpeciesService() { + return serviceContext.getService(ReferentialTemporarySpeciesService.class); + } + + public ReferentialTemporaryVesselService getReferentialTemporaryVesselService() { + return serviceContext.getService(ReferentialTemporaryVesselService.class); } public WeightComputingService getWeightComputingService() { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java index b6dedec..b7294ef 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryGearAction.java @@ -23,8 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialExportService; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryGearService; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIModel; @@ -87,7 +86,7 @@ public class ExportExistingTemporaryGearAction extends AbstractTuttiAction<Manag "referential to file: " + file); } - ReferentialExportService service = getContext().getTuttiReferentialExportService(); + ReferentialTemporaryGearService service = getContext().getReferentialTemporaryGearService(); service.exportExistingTemporaryGear(file); getHandler().resetExportGearsAction(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java index 48fc2d9..eb0a26f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryPersonAction.java @@ -23,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialExportService; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryPersonService; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIModel; @@ -87,7 +87,7 @@ public class ExportExistingTemporaryPersonAction extends AbstractTuttiAction<Man "referential to file: " + file); } - ReferentialExportService service = getContext().getTuttiReferentialExportService(); + ReferentialTemporaryPersonService service = getContext().getReferentialTemporaryPersonService(); service.exportExistingTemporaryPerson(file); getHandler().resetExportPersonAction(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java index bd307fb..5894d87 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporarySpeciesAction.java @@ -23,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialExportService; +import fr.ifremer.tutti.service.referential.ReferentialTemporarySpeciesService; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIModel; @@ -86,7 +86,7 @@ public class ExportExistingTemporarySpeciesAction extends AbstractTuttiAction<Ma "referential to file: " + file); } - ReferentialExportService service = getContext().getTuttiReferentialExportService(); + ReferentialTemporarySpeciesService service = getContext().getReferentialTemporarySpeciesService(); service.exportExistingTemporarySpecies(file); getHandler().resetExportSpeciesAction(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryVesselAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryVesselAction.java index b0d58dc..9b8184c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryVesselAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportExistingTemporaryVesselAction.java @@ -23,7 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialExportService; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryVesselService; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIModel; @@ -86,7 +86,7 @@ public class ExportExistingTemporaryVesselAction extends AbstractTuttiAction<Man "referential to file: " + file); } - ReferentialExportService service = getContext().getTuttiReferentialExportService(); + ReferentialTemporaryVesselService service = getContext().getReferentialTemporaryVesselService(); service.exportExistingTemporaryVessel(file); getHandler().resetExportVesselsAction(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryGearExampleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryGearExampleAction.java index 7b3c5ff..4a094cd 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryGearExampleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryGearExampleAction.java @@ -23,8 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialExportService; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryGearService; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIModel; @@ -87,7 +86,7 @@ public class ExportTemporaryGearExampleAction extends AbstractTuttiAction<Manage "referential to file: " + file); } - ReferentialExportService service = getContext().getTuttiReferentialExportService(); + ReferentialTemporaryGearService service = getContext().getReferentialTemporaryGearService(); service.exportTemporaryGearExample(file); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryPersonExampleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryPersonExampleAction.java index f3d8ad3..b65f11a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryPersonExampleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryPersonExampleAction.java @@ -23,8 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialExportService; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryPersonService; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIModel; @@ -88,7 +87,7 @@ public class ExportTemporaryPersonExampleAction extends AbstractTuttiAction<Mana "referential to file: " + file); } - ReferentialExportService service = getContext().getTuttiReferentialExportService(); + ReferentialTemporaryPersonService service = getContext().getReferentialTemporaryPersonService(); service.exportTemporaryPersonExample(file); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporarySpeciesExampleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporarySpeciesExampleAction.java index 0f54d44..c56eb4b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporarySpeciesExampleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporarySpeciesExampleAction.java @@ -23,8 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialExportService; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.service.referential.ReferentialTemporarySpeciesService; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIModel; @@ -87,7 +86,7 @@ public class ExportTemporarySpeciesExampleAction extends AbstractTuttiAction<Man "referential to file: " + file); } - ReferentialExportService service = getContext().getTuttiReferentialExportService(); + ReferentialTemporarySpeciesService service = getContext().getReferentialTemporarySpeciesService(); service.exportTemporarySpeciesExample(file); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryVesselExampleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryVesselExampleAction.java index ada1dc4..8a32639 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryVesselExampleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ExportTemporaryVesselExampleAction.java @@ -23,8 +23,7 @@ package fr.ifremer.tutti.ui.swing.action; */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.referential.ReferentialExportService; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryVesselService; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIModel; @@ -87,7 +86,7 @@ public class ExportTemporaryVesselExampleAction extends AbstractTuttiAction<Mana "referential to file: " + file); } - ReferentialExportService service = getContext().getTuttiReferentialExportService(); + ReferentialTemporaryVesselService service = getContext().getReferentialTemporaryVesselService(); service.exportTemporaryVesselExample(file); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryGearAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryGearAction.java index f832ad3..5a6422e 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryGearAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryGearAction.java @@ -26,6 +26,7 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.service.referential.ReferentialImportResult; import fr.ifremer.tutti.service.referential.ReferentialImportService; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryGearService; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIModel; @@ -88,8 +89,9 @@ public class ImportTemporaryGearAction extends AbstractTuttiAction<ManageTempora "referential from file: " + file); } - ReferentialImportService service = getContext().getTuttiReferentialImportService(); + ReferentialTemporaryGearService service = getContext().getReferentialTemporaryGearService(); result = service.importTemporaryGear(file); + int nbRef = getModel().getNbTemporaryGears(); getModel().setNbTemporaryGears(nbRef + result.getNbRefAdded() - result.getNbRefDeleted()); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryPersonAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryPersonAction.java index 24530c5..1f0196f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryPersonAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryPersonAction.java @@ -26,6 +26,7 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.service.referential.ReferentialImportResult; import fr.ifremer.tutti.service.referential.ReferentialImportService; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryPersonService; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIModel; @@ -88,8 +89,7 @@ public class ImportTemporaryPersonAction extends AbstractTuttiAction<ManageTempo "referential from file: " + file); } - ReferentialImportService service = - getContext().getTuttiReferentialImportService(); + ReferentialTemporaryPersonService service = getContext().getReferentialTemporaryPersonService(); result = service.importTemporaryPerson(file); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporarySpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporarySpeciesAction.java index 0322b8a..10a4d7c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporarySpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporarySpeciesAction.java @@ -25,7 +25,7 @@ package fr.ifremer.tutti.ui.swing.action; import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.referential.ReferentialImportResult; -import fr.ifremer.tutti.service.referential.ReferentialImportService; +import fr.ifremer.tutti.service.referential.ReferentialTemporarySpeciesService; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIModel; @@ -87,9 +87,7 @@ public class ImportTemporarySpeciesAction extends AbstractTuttiAction<ManageTemp "referential from file: " + file); } - ReferentialImportService service = - getContext().getTuttiReferentialImportService(); - + ReferentialTemporarySpeciesService service = getContext().getReferentialTemporarySpeciesService(); result = service.importTemporarySpecies(file); int nbRef = getModel().getNbTemporarySpecies(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryVesselAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryVesselAction.java index 74c310e..d08c32d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryVesselAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportTemporaryVesselAction.java @@ -25,7 +25,7 @@ package fr.ifremer.tutti.ui.swing.action; import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.service.referential.ReferentialImportResult; -import fr.ifremer.tutti.service.referential.ReferentialImportService; +import fr.ifremer.tutti.service.referential.ReferentialTemporaryVesselService; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIModel; @@ -87,9 +87,7 @@ public class ImportTemporaryVesselAction extends AbstractTuttiAction<ManageTempo "referential from file: " + file); } - ReferentialImportService service = - getContext().getTuttiReferentialImportService(); - + ReferentialTemporaryVesselService service = getContext().getReferentialTemporaryVesselService(); result = service.importTemporaryVessel(file); int nbRef = getModel().getNbTemporaryVessels(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporarySpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporarySpeciesAction.java index cf8c07d..2034105 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporarySpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ReplaceTemporarySpeciesAction.java @@ -60,6 +60,7 @@ public class ReplaceTemporarySpeciesAction extends AbstractReplaceTemporaryUIAct protected void replaceReferentialEntity(PersistenceService persistenceService, Species source, Species target, boolean delete) { persistenceService.replaceSpecies(source, target, delete); + } } \ No newline at end of file -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.