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 15694c03dd51d50c41a15c2b7d4149b7d9547d35 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Feb 11 17:23:01 2015 +0100 use CsvConsumer API for referential import + improve then import code --- .../ReferentialTemporaryGearService.java | 52 +++++++++------------- .../ReferentialTemporaryPersonService.java | 50 +++++++++------------ .../ReferentialTemporarySpeciesService.java | 50 +++++++++------------ .../ReferentialTemporaryVesselService.java | 50 +++++++++------------ .../consumer/CsvConsumerForTemporaryGear.java | 21 +++++++++ .../consumer/CsvConsumerForTemporaryPerson.java | 21 +++++++++ .../consumer/CsvConsumerForTemporarySpecies.java | 21 +++++++++ .../consumer/CsvConsumerForTemporaryVessel.java | 21 +++++++++ .../producer/CsvProducerForTemporaryGear.java | 4 +- .../producer/CsvProducerForTemporaryPerson.java | 4 +- .../producer/CsvProducerForTemporarySpecies.java | 6 +-- .../producer/CsvProducerForTemporaryVessel.java | 4 +- .../resources/i18n/tutti-service_fr_FR.properties | 4 ++ .../ReferentialTemporaryExportServiceTest.java | 3 ++ .../ReferentialTemporaryGearServiceTest.java | 8 ++-- .../ReferentialTemporaryPersonServiceTest.java | 4 +- .../ReferentialTemporarySpeciesServiceTest.java | 12 ++--- .../ReferentialTemporaryVesselServiceTest.java | 6 +-- 18 files changed, 200 insertions(+), 141 deletions(-) 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 index 15711ee..27f0417 100644 --- 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 @@ -24,9 +24,7 @@ package fr.ifremer.tutti.service.referential; * #L% */ -import com.google.common.base.Charsets; 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; @@ -34,20 +32,20 @@ import fr.ifremer.tutti.service.AbstractTuttiService; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiServiceContext; -import fr.ifremer.tutti.service.referential.csv.GearModel; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; +import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryGear; import fr.ifremer.tutti.service.referential.csv.GearRow; import fr.ifremer.tutti.service.referential.producer.CsvProducerForTemporaryGear; 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.Import; -import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.csv.ImportRow; +import org.nuiton.jaxx.application.ApplicationBusinessException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.File; import java.io.IOException; -import java.io.Reader; import java.util.Collection; import java.util.List; @@ -174,7 +172,7 @@ public class ReferentialTemporaryGearService extends AbstractTuttiService { public void exportTemporaryGear(File file, List<Gear> toExport) throws IOException { - try (CsvProducerForTemporaryGear producerForTemporarySpecies = new CsvProducerForTemporaryGear(file, getCsvSeparator())) { + try (CsvProducerForTemporaryGear producerForTemporarySpecies = new CsvProducerForTemporaryGear(file.toPath(), getCsvSeparator())) { List<GearRow> dataToExport = producerForTemporarySpecies.getDataToExport(toExport); producerForTemporarySpecies.write(dataToExport); @@ -189,31 +187,25 @@ public class ReferentialTemporaryGearService extends AbstractTuttiService { ImportRequestResult<Gear, Integer> requestResult = new ImportRequestResult<>(existingEntities, TuttiEntities.<Gear>newIdAstIntFunction(), Gears.GET_NAME); - try (Reader reader = Files.newReader(file, Charsets.UTF_8)) { + try (CsvConsumerForTemporaryGear consumer = new CsvConsumerForTemporaryGear(file.toPath(), getCsvSeparator())) { - GearModel csvModel = GearModel.forImport(getCsvSeparator()); - try (Import<GearRow> importer = Import.newImport(csvModel, reader)) { + for (ImportRow<GearRow> bean : consumer) { - for (GearRow bean : importer) { + if (bean.isValid()) { - importGear(bean, requestResult); + importGear(bean.getBean(), requestResult); - } + } else { - } + String message = TuttiCsvUtil.rowErrorsToExceptionMessage(bean); + throw new ApplicationBusinessException(message); - } 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); + } catch (IOException e) { + throw new ApplicationTechnicalException(t("tutti.service.referential.import.gears.error", file), e); } return requestResult; @@ -231,15 +223,15 @@ public class ReferentialTemporaryGearService extends AbstractTuttiService { // Ajout if (delete) { - throw new IllegalArgumentException(t("tutti.service.referential.import.gear.cannotDeleteWithoutId.error")); + throw new ApplicationBusinessException(t("tutti.service.referential.import.gear.cannotDeleteWithoutId.error")); } if (StringUtils.isBlank(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.gear.add.noName.error")); + throw new ApplicationBusinessException(t("tutti.service.referential.import.gear.add.noName.error")); } if (!requestResult.addExistingNaturalId(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.gear.existingName.error", name)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.gear.existingName.error", name)); } requestResult.addEntityToAdd(bean.toEntity()); @@ -251,7 +243,7 @@ public class ReferentialTemporaryGearService extends AbstractTuttiService { Gear gear = requestResult.getExistingEntityById(id); if (gear == null) { - throw new IllegalArgumentException(t("tutti.service.referential.import.gear.notExistingId.error", id)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.gear.notExistingId.error", id)); } if (delete) { @@ -261,7 +253,7 @@ public class ReferentialTemporaryGearService extends AbstractTuttiService { if (persistenceService.isTemporaryGearUsed(id)) { String gearRef = id + " : " + decoratorService.getDecoratorByType(Gear.class).toString(gear); - throw new IllegalArgumentException(t("tutti.service.referential.import.gear.used.error", gearRef)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.gear.used.error", gearRef)); } requestResult.addIdToDelete(id); @@ -272,11 +264,11 @@ public class ReferentialTemporaryGearService extends AbstractTuttiService { // Mise à jour if (StringUtils.isBlank(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.gear.noName.error", id)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.gear.noName.error", id)); } if (!name.equals(gear.getName()) && !requestResult.addExistingNaturalId(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.gear.existingName.error", name)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.gear.existingName.error", name)); } requestResult.addEntityToUpdate(bean.toEntity()); 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 index f6f8813..fc55b45 100644 --- 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 @@ -24,9 +24,7 @@ package fr.ifremer.tutti.service.referential; * #L% */ -import com.google.common.base.Charsets; 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; @@ -34,20 +32,20 @@ import fr.ifremer.tutti.service.AbstractTuttiService; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiServiceContext; -import fr.ifremer.tutti.service.referential.csv.PersonModel; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; +import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryPerson; import fr.ifremer.tutti.service.referential.csv.PersonRow; import fr.ifremer.tutti.service.referential.producer.CsvProducerForTemporaryPerson; 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.Import; -import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.csv.ImportRow; +import org.nuiton.jaxx.application.ApplicationBusinessException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.File; import java.io.IOException; -import java.io.Reader; import java.util.Collection; import java.util.List; @@ -167,7 +165,7 @@ public class ReferentialTemporaryPersonService extends AbstractTuttiService { public void exportTemporaryPerson(File file, List<Person> toExport) throws IOException { - try (CsvProducerForTemporaryPerson producerForTemporarySpecies = new CsvProducerForTemporaryPerson(file, getCsvSeparator())) { + try (CsvProducerForTemporaryPerson producerForTemporarySpecies = new CsvProducerForTemporaryPerson(file.toPath(), getCsvSeparator())) { List<PersonRow> dataToExport = producerForTemporarySpecies.getDataToExport(toExport); producerForTemporarySpecies.write(dataToExport); @@ -182,14 +180,18 @@ public class ReferentialTemporaryPersonService extends AbstractTuttiService { ImportRequestResult<Person, Integer> requestResult = new ImportRequestResult<>(existingEntities, TuttiEntities.<Person>newIdAstIntFunction(), Persons.GET_FULL_NAME); - try (Reader reader = Files.newReader(file, Charsets.UTF_8)) { + try (CsvConsumerForTemporaryPerson consumer = new CsvConsumerForTemporaryPerson(file.toPath(), getCsvSeparator())) { - PersonModel csvModel = PersonModel.forImport(getCsvSeparator()); - try (Import<PersonRow> importer = Import.newImport(csvModel, reader)) { + for (ImportRow<PersonRow> bean : consumer) { - for (PersonRow bean : importer) { + if (bean.isValid()) { - importPerson(bean, requestResult); + importPerson(bean.getBean(), requestResult); + + } else { + + String message = TuttiCsvUtil.rowErrorsToExceptionMessage(bean); + throw new ApplicationBusinessException(message); } @@ -197,16 +199,6 @@ public class ReferentialTemporaryPersonService extends AbstractTuttiService { } 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; @@ -224,15 +216,15 @@ public class ReferentialTemporaryPersonService extends AbstractTuttiService { // Ajout if (delete) { - throw new IllegalArgumentException(t("tutti.service.referential.import.person.cannotDeleteWithoutId.error")); + throw new ApplicationBusinessException(t("tutti.service.referential.import.person.cannotDeleteWithoutId.error")); } if (StringUtils.isBlank(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.person.add.noName.error")); + throw new ApplicationBusinessException(t("tutti.service.referential.import.person.add.noName.error")); } if (!requestResult.addExistingNaturalId(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.person.existingName.error", name)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.person.existingName.error", name)); } requestResult.addEntityToAdd(bean.toEntity()); @@ -244,7 +236,7 @@ public class ReferentialTemporaryPersonService extends AbstractTuttiService { Person person = requestResult.getExistingEntityById(id); if (person == null) { - throw new IllegalArgumentException(t("tutti.service.referential.import.person.notExistingId.error", id)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.person.notExistingId.error", id)); } if (delete) { @@ -254,7 +246,7 @@ public class ReferentialTemporaryPersonService extends AbstractTuttiService { if (persistenceService.isTemporaryPersonUsed(id)) { String personRef = id + " : " + decoratorService.getDecoratorByType(Person.class).toString(person); - throw new IllegalArgumentException(t("tutti.service.referential.import.person.used.error", personRef)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.person.used.error", personRef)); } requestResult.addIdToDelete(id); @@ -265,11 +257,11 @@ public class ReferentialTemporaryPersonService extends AbstractTuttiService { // Mise à jour if (StringUtils.isBlank(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.person.noName.error", id)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.person.noName.error", id)); } if (!name.equals(person.getName()) && !requestResult.addExistingNaturalId(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.person.existingName.error", name)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.person.existingName.error", name)); } requestResult.addEntityToUpdate(bean.toEntity()); 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 index e22439e..92bbd67 100644 --- 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 @@ -24,9 +24,7 @@ package fr.ifremer.tutti.service.referential; * #L% */ -import com.google.common.base.Charsets; 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; @@ -34,20 +32,20 @@ import fr.ifremer.tutti.service.AbstractTuttiService; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiServiceContext; -import fr.ifremer.tutti.service.referential.csv.SpeciesModel; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; +import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporarySpecies; import fr.ifremer.tutti.service.referential.csv.SpeciesRow; import fr.ifremer.tutti.service.referential.producer.CsvProducerForTemporarySpecies; 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.Import; -import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.csv.ImportRow; +import org.nuiton.jaxx.application.ApplicationBusinessException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.File; import java.io.IOException; -import java.io.Reader; import java.util.Collection; import java.util.List; @@ -164,7 +162,7 @@ public class ReferentialTemporarySpeciesService extends AbstractTuttiService { public void exportTemporarySpecies(File file, List<Species> toExport) throws IOException { - try (CsvProducerForTemporarySpecies producerForTemporarySpecies = new CsvProducerForTemporarySpecies(file, getCsvSeparator())) { + try (CsvProducerForTemporarySpecies producerForTemporarySpecies = new CsvProducerForTemporarySpecies(file.toPath(), getCsvSeparator())) { List<SpeciesRow> dataToExport = producerForTemporarySpecies.getDataToExport(toExport); producerForTemporarySpecies.write(dataToExport); @@ -179,14 +177,18 @@ public class ReferentialTemporarySpeciesService extends AbstractTuttiService { ImportRequestResult<Species, Integer> requestResult = new ImportRequestResult<>(existingEntities, TuttiEntities.<Species>newIdAstIntFunction(), Speciess.GET_NAME); - try (Reader reader = Files.newReader(file, Charsets.UTF_8)) { + try (CsvConsumerForTemporarySpecies consumer = new CsvConsumerForTemporarySpecies(file.toPath(), getCsvSeparator())) { - SpeciesModel csvModel = SpeciesModel.forImport(getCsvSeparator()); - try (Import<SpeciesRow> importer = Import.newImport(csvModel, reader)) { + for (ImportRow<SpeciesRow> bean : consumer) { - for (SpeciesRow bean : importer) { + if (bean.isValid()) { - importSpecies(bean, requestResult); + importSpecies(bean.getBean(), requestResult); + + } else { + + String message = TuttiCsvUtil.rowErrorsToExceptionMessage(bean); + throw new ApplicationBusinessException(message); } @@ -194,16 +196,6 @@ public class ReferentialTemporarySpeciesService extends AbstractTuttiService { } 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; @@ -221,15 +213,15 @@ public class ReferentialTemporarySpeciesService extends AbstractTuttiService { // Ajout if (delete) { - throw new IllegalArgumentException(t("tutti.service.referential.import.species.cannotDeleteWithoutId.error")); + throw new ApplicationBusinessException(t("tutti.service.referential.import.species.cannotDeleteWithoutId.error")); } if (StringUtils.isBlank(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.species.add.noName.error")); + throw new ApplicationBusinessException(t("tutti.service.referential.import.species.add.noName.error")); } if (!requestResult.addExistingNaturalId(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.species.existingName.error", name)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.species.existingName.error", name)); } requestResult.addEntityToAdd(bean.toEntity(null)); @@ -241,7 +233,7 @@ public class ReferentialTemporarySpeciesService extends AbstractTuttiService { Species species = requestResult.getExistingEntityById(id); if (species == null) { - throw new IllegalArgumentException(t("tutti.service.referential.import.species.notExistingId.error", id)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.species.notExistingId.error", id)); } Integer referenceTaxonId = species.getReferenceTaxonId(); @@ -253,7 +245,7 @@ public class ReferentialTemporarySpeciesService extends AbstractTuttiService { if (persistenceService.isTemporarySpeciesUsed(referenceTaxonId)) { String speciesRef = id + " : " + decoratorService.getDecoratorByType(Species.class, DecoratorService.WITH_SURVEY_CODE).toString(species); - throw new IllegalArgumentException(t("tutti.service.referential.import.species.used.error", speciesRef)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.species.used.error", speciesRef)); } requestResult.addIdToDelete(referenceTaxonId); @@ -264,11 +256,11 @@ public class ReferentialTemporarySpeciesService extends AbstractTuttiService { // Mise à jour if (StringUtils.isBlank(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.species.noName.error", id)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.species.noName.error", id)); } if (!species.getName().equals(name) && !requestResult.addExistingNaturalId(name)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.species.existingName.error", name)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.species.existingName.error", name)); } requestResult.addEntityToUpdate(bean.toEntity(referenceTaxonId)); 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 index 63e0bf6..0aa386a 100644 --- 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 @@ -24,9 +24,7 @@ package fr.ifremer.tutti.service.referential; * #L% */ -import com.google.common.base.Charsets; 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; @@ -34,20 +32,20 @@ import fr.ifremer.tutti.service.AbstractTuttiService; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiServiceContext; -import fr.ifremer.tutti.service.referential.csv.VesselModel; +import fr.ifremer.tutti.service.csv.TuttiCsvUtil; +import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryVessel; import fr.ifremer.tutti.service.referential.csv.VesselRow; import fr.ifremer.tutti.service.referential.producer.CsvProducerForTemporaryVessel; 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.Import; -import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.csv.ImportRow; +import org.nuiton.jaxx.application.ApplicationBusinessException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.File; import java.io.IOException; -import java.io.Reader; import java.util.Collection; import java.util.List; @@ -182,7 +180,7 @@ public class ReferentialTemporaryVesselService extends AbstractTuttiService { public void exportTemporaryVessel(File file, List<Vessel> toExport) throws IOException { - try (CsvProducerForTemporaryVessel producerForTemporaryVessel = new CsvProducerForTemporaryVessel(file, getCsvSeparator())) { + try (CsvProducerForTemporaryVessel producerForTemporaryVessel = new CsvProducerForTemporaryVessel(file.toPath(), getCsvSeparator())) { List<VesselRow> dataToExport = producerForTemporaryVessel.getDataToExport(toExport); producerForTemporaryVessel.write(dataToExport); @@ -197,14 +195,18 @@ public class ReferentialTemporaryVesselService extends AbstractTuttiService { ImportRequestResult<Vessel, String> requestResult = new ImportRequestResult<>(existingEntities, TuttiEntities.<Vessel>newIdFunction(), Vessels.GET_INTERNAL_REGISTRATION_CODE); - try (Reader reader = Files.newReader(file, Charsets.UTF_8)) { + try (CsvConsumerForTemporaryVessel consumer = new CsvConsumerForTemporaryVessel(file.toPath(), getCsvSeparator())) { - VesselModel csvModel = VesselModel.forImport(getCsvSeparator()); - try (Import<VesselRow> importer = Import.newImport(csvModel, reader)) { + for (ImportRow<VesselRow> bean : consumer) { - for (VesselRow bean : importer) { + if (bean.isValid()) { - importVessel(bean, requestResult); + importVessel(bean.getBean(), requestResult); + + } else { + + String message = TuttiCsvUtil.rowErrorsToExceptionMessage(bean); + throw new ApplicationBusinessException(message); } @@ -212,16 +214,6 @@ public class ReferentialTemporaryVesselService extends AbstractTuttiService { } 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; @@ -239,15 +231,15 @@ public class ReferentialTemporaryVesselService extends AbstractTuttiService { // Ajout if (delete) { - throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.cannotDeleteWithoutId.error")); + throw new ApplicationBusinessException(t("tutti.service.referential.import.vessel.cannotDeleteWithoutId.error")); } if (StringUtils.isBlank(internationalRegistrationCode)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.add.noRegistrationCode.error")); + throw new ApplicationBusinessException(t("tutti.service.referential.import.vessel.add.noRegistrationCode.error")); } if (!requestResult.addExistingNaturalId(internationalRegistrationCode)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.existingRegistrationCode.error", internationalRegistrationCode)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.vessel.existingRegistrationCode.error", internationalRegistrationCode)); } requestResult.addEntityToAdd(bean.toEntity()); @@ -260,7 +252,7 @@ public class ReferentialTemporaryVesselService extends AbstractTuttiService { if (vessel == null) { - throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.notExistingId.error", id)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.vessel.notExistingId.error", id)); } if (delete) { @@ -270,7 +262,7 @@ public class ReferentialTemporaryVesselService extends AbstractTuttiService { if (persistenceService.isTemporaryVesselUsed(id)) { String vesselRef = id + " :" + decoratorService.getDecoratorByType(Vessel.class).toString(vessel); - throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.used.error", vesselRef)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.vessel.used.error", vesselRef)); } requestResult.addIdToDelete(id); @@ -281,11 +273,11 @@ public class ReferentialTemporaryVesselService extends AbstractTuttiService { // Mise à jour if (StringUtils.isBlank(internationalRegistrationCode)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.noRegistrationCode.error", id)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.vessel.noRegistrationCode.error", id)); } if (!internationalRegistrationCode.equals(vessel.getName()) && !requestResult.addExistingNaturalId(internationalRegistrationCode)) { - throw new IllegalArgumentException(t("tutti.service.referential.import.vessel.existingRegistrationCode.error", internationalRegistrationCode)); + throw new ApplicationBusinessException(t("tutti.service.referential.import.vessel.existingRegistrationCode.error", internationalRegistrationCode)); } requestResult.addEntityToUpdate(bean.toEntity()); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryGear.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryGear.java new file mode 100644 index 0000000..78b5786 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryGear.java @@ -0,0 +1,21 @@ +package fr.ifremer.tutti.service.referential.consumer; + +import fr.ifremer.tutti.service.csv.CsvComsumer; +import fr.ifremer.tutti.service.referential.csv.GearModel; +import fr.ifremer.tutti.service.referential.csv.GearRow; + +import java.nio.file.Path; + +/** + * Created on 2/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class CsvConsumerForTemporaryGear extends CsvComsumer<GearRow, GearModel> { + + public CsvConsumerForTemporaryGear(Path file, char separator) { + super(file, GearModel.forImport(separator)); + } + +} \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryPerson.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryPerson.java new file mode 100644 index 0000000..82b03e2 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryPerson.java @@ -0,0 +1,21 @@ +package fr.ifremer.tutti.service.referential.consumer; + +import fr.ifremer.tutti.service.csv.CsvComsumer; +import fr.ifremer.tutti.service.referential.csv.PersonModel; +import fr.ifremer.tutti.service.referential.csv.PersonRow; + +import java.nio.file.Path; + +/** + * Created on 2/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class CsvConsumerForTemporaryPerson extends CsvComsumer<PersonRow, PersonModel> { + + public CsvConsumerForTemporaryPerson(Path file, char separator) { + super(file, PersonModel.forImport(separator)); + } + +} \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporarySpecies.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporarySpecies.java new file mode 100644 index 0000000..b1302b9 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporarySpecies.java @@ -0,0 +1,21 @@ +package fr.ifremer.tutti.service.referential.consumer; + +import fr.ifremer.tutti.service.csv.CsvComsumer; +import fr.ifremer.tutti.service.referential.csv.SpeciesModel; +import fr.ifremer.tutti.service.referential.csv.SpeciesRow; + +import java.nio.file.Path; + +/** + * Created on 2/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class CsvConsumerForTemporarySpecies extends CsvComsumer<SpeciesRow, SpeciesModel> { + + public CsvConsumerForTemporarySpecies(Path file, char separator) { + super(file, SpeciesModel.forImport(separator)); + } + +} \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryVessel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryVessel.java new file mode 100644 index 0000000..7bb7c40 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/consumer/CsvConsumerForTemporaryVessel.java @@ -0,0 +1,21 @@ +package fr.ifremer.tutti.service.referential.consumer; + +import fr.ifremer.tutti.service.csv.CsvComsumer; +import fr.ifremer.tutti.service.referential.csv.VesselModel; +import fr.ifremer.tutti.service.referential.csv.VesselRow; + +import java.nio.file.Path; + +/** + * Created on 2/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class CsvConsumerForTemporaryVessel extends CsvComsumer<VesselRow, VesselModel> { + + public CsvConsumerForTemporaryVessel(Path file, char separator) { + super(file, VesselModel.forImport(separator)); + } + +} \ No newline at end of file diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryGear.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryGear.java index 9789834..bf02c27 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryGear.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryGear.java @@ -7,7 +7,7 @@ import fr.ifremer.tutti.service.csv.CsvProducer; import fr.ifremer.tutti.service.referential.csv.GearModel; import fr.ifremer.tutti.service.referential.csv.GearRow; -import java.io.File; +import java.nio.file.Path; import java.util.List; /** @@ -18,7 +18,7 @@ import java.util.List; */ public class CsvProducerForTemporaryGear extends CsvProducer<GearRow, GearModel> { - public CsvProducerForTemporaryGear(File file, char separator) { + public CsvProducerForTemporaryGear(Path file, char separator) { super(file, GearModel.forImport(separator)); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryPerson.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryPerson.java index 2e1d2fe..a7ef37e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryPerson.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryPerson.java @@ -7,7 +7,7 @@ import fr.ifremer.tutti.service.csv.CsvProducer; import fr.ifremer.tutti.service.referential.csv.PersonModel; import fr.ifremer.tutti.service.referential.csv.PersonRow; -import java.io.File; +import java.nio.file.Path; import java.util.List; /** @@ -18,7 +18,7 @@ import java.util.List; */ public class CsvProducerForTemporaryPerson extends CsvProducer<PersonRow, PersonModel> { - public CsvProducerForTemporaryPerson(File file, char separator) { + public CsvProducerForTemporaryPerson(Path file, char separator) { super(file, PersonModel.forExport(separator)); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporarySpecies.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporarySpecies.java index 1d82559..63417a1 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporarySpecies.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporarySpecies.java @@ -7,7 +7,7 @@ import fr.ifremer.tutti.service.csv.CsvProducer; import fr.ifremer.tutti.service.referential.csv.SpeciesModel; import fr.ifremer.tutti.service.referential.csv.SpeciesRow; -import java.io.File; +import java.nio.file.Path; import java.util.List; /** @@ -18,8 +18,8 @@ import java.util.List; */ public class CsvProducerForTemporarySpecies extends CsvProducer<SpeciesRow, SpeciesModel> { - public CsvProducerForTemporarySpecies(File file, char separator) { - super(file, SpeciesModel .forExport(separator)); + public CsvProducerForTemporarySpecies(Path file, char separator) { + super(file, SpeciesModel.forExport(separator)); } public List<SpeciesRow> getDataToExport(List<Species> toExport) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryVessel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryVessel.java index da9381b..dcca6b2 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryVessel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/producer/CsvProducerForTemporaryVessel.java @@ -7,7 +7,7 @@ import fr.ifremer.tutti.service.csv.CsvProducer; import fr.ifremer.tutti.service.referential.csv.VesselModel; import fr.ifremer.tutti.service.referential.csv.VesselRow; -import java.io.File; +import java.nio.file.Path; import java.util.List; /** @@ -18,7 +18,7 @@ import java.util.List; */ public class CsvProducerForTemporaryVessel extends CsvProducer<VesselRow, VesselModel> { - public CsvProducerForTemporaryVessel(File file, char separator) { + public CsvProducerForTemporaryVessel(Path file, char separator) { super(file, VesselModel.forExport(separator)); } diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index d21dacf..44bf30e 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -9,7 +9,11 @@ tutti.property.attachment=Pièce jointe tutti.property.caracteristic=Caractéristique tutti.property.country=Pays tutti.property.cruise=Campagne +tutti.genericformat.importError.missArchiveFile=Il manque le fichier %s dans l'archive +tutti.genericFormat.importError.archiveNotSane=L'archive ne respecte pas le format de l'import générique :\n%s tutti.property.date=Date +tutti.csv.import.error.on.field=Colonne %s : %s +tutti.csv.import.error.on.row=Des erreurs ont été détectées à la ligne %s : \n%s tutti.property.department=Département tutti.property.firstName=Prénom tutti.property.fishingOperation=Trait diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryExportServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryExportServiceTest.java index 62b65ca..79f1810 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryExportServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/ReferentialTemporaryExportServiceTest.java @@ -29,6 +29,7 @@ import fr.ifremer.tutti.service.TuttiServiceContext; import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Ignore; import org.junit.Test; import java.io.File; @@ -82,6 +83,8 @@ public class ReferentialTemporaryExportServiceTest { } + //FIXME tchemit-2015-02-11 there is no temporary gears in the db + @Ignore @Test public void exportTemporaryGearExample() throws Exception { 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 index c1fa557..a9df8e0 100644 --- 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 @@ -33,7 +33,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; -import org.nuiton.jaxx.application.ApplicationTechnicalException; +import org.nuiton.jaxx.application.ApplicationBusinessException; import java.io.File; import java.util.List; @@ -131,7 +131,7 @@ public class ReferentialTemporaryGearServiceTest { try { service.importTemporaryGear(file); Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { + } catch (ApplicationBusinessException e) { Assert.assertTrue(true); } } @@ -147,7 +147,7 @@ public class ReferentialTemporaryGearServiceTest { try { service.importTemporaryGear(file); Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { + } catch (ApplicationBusinessException e) { Assert.assertTrue(true); } } @@ -164,7 +164,7 @@ public class ReferentialTemporaryGearServiceTest { try { service.importTemporaryGear(file); Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { + } catch (ApplicationBusinessException e) { Assert.assertTrue(true); } } 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 index 6ef62b3..75fc571 100644 --- 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 @@ -33,7 +33,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; -import org.nuiton.jaxx.application.ApplicationTechnicalException; +import org.nuiton.jaxx.application.ApplicationBusinessException; import java.io.File; import java.util.List; @@ -113,7 +113,7 @@ public class ReferentialTemporaryPersonServiceTest { try { service.importTemporaryPerson(file); Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { + } catch (ApplicationBusinessException e) { Assert.assertTrue(true); } } 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 index 7ae100d..16b0c43 100644 --- 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 @@ -35,7 +35,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; -import org.nuiton.jaxx.application.ApplicationTechnicalException; +import org.nuiton.jaxx.application.ApplicationBusinessException; import java.io.File; import java.util.List; @@ -118,7 +118,7 @@ public class ReferentialTemporarySpeciesServiceTest { try { service.importTemporarySpecies(file); Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { + } catch (ApplicationBusinessException e) { Assert.assertTrue(true); } @@ -148,7 +148,7 @@ public class ReferentialTemporarySpeciesServiceTest { try { service.importTemporarySpecies(file); Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { + } catch (ApplicationBusinessException e) { Assert.assertTrue(true); } @@ -166,7 +166,7 @@ public class ReferentialTemporarySpeciesServiceTest { try { service.importTemporarySpecies(file); Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { + } catch (ApplicationBusinessException e) { Assert.assertTrue(true); } } @@ -182,7 +182,7 @@ public class ReferentialTemporarySpeciesServiceTest { try { service.importTemporarySpecies(file); Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { + } catch (ApplicationBusinessException e) { Assert.assertTrue(true); } } @@ -199,7 +199,7 @@ public class ReferentialTemporarySpeciesServiceTest { try { service.importTemporarySpecies(file); Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { + } catch (ApplicationBusinessException e) { Assert.assertTrue(true); } } 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 index e3770c3..0948a64 100644 --- 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 @@ -33,7 +33,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; -import org.nuiton.jaxx.application.ApplicationTechnicalException; +import org.nuiton.jaxx.application.ApplicationBusinessException; import java.io.File; import java.util.List; @@ -110,7 +110,7 @@ public class ReferentialTemporaryVesselServiceTest { try { service.importTemporaryVessel(file); Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { + } catch (ApplicationBusinessException e) { Assert.assertTrue(true); } @@ -128,7 +128,7 @@ public class ReferentialTemporaryVesselServiceTest { try { service.importTemporaryVessel(file); Assert.fail(); - } catch (IllegalArgumentException | ApplicationTechnicalException e) { + } catch (ApplicationBusinessException e) { // good duplicate vessel } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.