This is an automated email from the git hooks/post-receive script. New commit to branch feature/5973 in repository wao. See http://git.codelutin.com/wao.git commit 4fc29810f4a401498baba3ef8c7e3fb28bea5825 Author: Brendan Le Ny <bleny@codelutin.com> Date: Tue Dec 2 17:22:50 2014 +0100 Ajout d'un service d'import des espèces --- .../wao/services/service/WaoServiceSupport.java | 5 +++ .../service/administration/ReferentialService.java | 42 +++++++++++++++++++++- .../services/service/csv/SpeciesImportModel.java | 24 +++++++++++++ .../administration/ReferentialServiceTest.java | 16 +++++++++ 4 files changed, 86 insertions(+), 1 deletion(-) diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/WaoServiceSupport.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/WaoServiceSupport.java index ffe42a0..1d9cef1 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/WaoServiceSupport.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/WaoServiceSupport.java @@ -39,6 +39,7 @@ import fr.ifremer.wao.entity.SampleMonthTopiaDao; import fr.ifremer.wao.entity.SampleRowLogTopiaDao; import fr.ifremer.wao.entity.SampleRowTopiaDao; import fr.ifremer.wao.entity.ShipOwnerTopiaDao; +import fr.ifremer.wao.entity.SpeciesTopiaDao; import fr.ifremer.wao.entity.TargetSpeciesDcfTopiaDao; import fr.ifremer.wao.entity.TerrestrialLocationTopiaDao; import fr.ifremer.wao.entity.UserProfileTopiaDao; @@ -182,6 +183,10 @@ public abstract class WaoServiceSupport implements WaoService { protected UserProfileTopiaDao getUserProfileDao() { return getPersistenceContext().getUserProfileDao(); } + + protected SpeciesTopiaDao getSpeciesDao() { + return getPersistenceContext().getSpeciesDao(); + } protected WaoUserTopiaDao getWaoUserDao() { return getPersistenceContext().getWaoUserDao(); diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/ReferentialService.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/ReferentialService.java index 9d7533a..0e22420 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/ReferentialService.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/ReferentialService.java @@ -31,7 +31,6 @@ import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; -import com.google.common.collect.Iterables; import fr.ifremer.wao.WaoTechnicalException; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.BoatTopiaDao; @@ -53,6 +52,8 @@ import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.SampleRowTopiaDao; import fr.ifremer.wao.entity.ShipOwner; import fr.ifremer.wao.entity.ShipOwnerTopiaDao; +import fr.ifremer.wao.entity.Species; +import fr.ifremer.wao.entity.SpeciesTopiaDao; import fr.ifremer.wao.entity.TargetSpeciesDcf; import fr.ifremer.wao.entity.TargetSpeciesDcfTopiaDao; import fr.ifremer.wao.entity.TerrestrialLocation; @@ -64,6 +65,7 @@ import fr.ifremer.wao.services.service.WaoServiceSupport; import fr.ifremer.wao.services.service.csv.BoatImportExportModel; import fr.ifremer.wao.services.service.csv.ContactStateMotivesImportModel; import fr.ifremer.wao.services.service.csv.FishingZoneImportModel; +import fr.ifremer.wao.services.service.csv.SpeciesImportModel; import fr.ifremer.wao.services.service.csv.TerrestrialLocationImportModel; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.ArrayUtils; @@ -78,6 +80,7 @@ import org.nuiton.i18n.I18n; import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaNoResultException; +import org.nuiton.topia.persistence.TopiaNonUniqueResultException; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -121,6 +124,8 @@ public class ReferentialService extends WaoServiceSupport { TerrestrialLocation.class.getName(), Boat.class.getName())); + // TODO brendan 02/12/14 Species + PER_PROGRAM_REFERENTIAL = Collections.unmodifiableMap(perProgramReferential); } @@ -819,4 +824,39 @@ public class ReferentialService extends WaoServiceSupport { return allTerrestrialDistricts; } + + public void importSpecies(InputStream csv) throws ImportErrorException { + + SpeciesImportModel model = new SpeciesImportModel(); + + Import<Species> csvImport = Import.newImport(model, csv); + + SpeciesTopiaDao dao = getSpeciesDao(); + + try { + for (Species species : csvImport) { + + String aphiaId = species.getAphiaId(); + + Species existingSpecies = dao.forAphiaIdEquals(aphiaId).findUniqueOrNull(); + + if (existingSpecies == null) { + dao.create(species); + } else { + existingSpecies.setPermanentCode(species.getPermanentCode()); + existingSpecies.setScientificName(species.getScientificName()); + existingSpecies.setVernacularName(species.getVernacularName()); + dao.update(existingSpecies); + } + + } + } catch (TopiaNonUniqueResultException e) { + throw new ImportErrorException(e); + } + + updateReferentialMeta(Species.class.getName()); + + commit(); + + } } diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/SpeciesImportModel.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/SpeciesImportModel.java new file mode 100644 index 0000000..1950450 --- /dev/null +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/SpeciesImportModel.java @@ -0,0 +1,24 @@ +package fr.ifremer.wao.services.service.csv; + +import fr.ifremer.wao.entity.Species; +import fr.ifremer.wao.entity.SpeciesImpl; +import org.nuiton.csv.ext.AbstractImportModel; + +public class SpeciesImportModel extends AbstractImportModel<Species> { + + public SpeciesImportModel() { + super(';'); + + modelBuilder.newMandatoryColumn("NOM_SCIENTIFIQUE", Species.PROPERTY_SCIENTIFIC_NAME); + modelBuilder.newMandatoryColumn("NOM_COMMUN", Species.PROPERTY_VERNACULAR_NAME); + modelBuilder.newMandatoryColumn("APHIA_ID", Species.PROPERTY_APHIA_ID); + modelBuilder.newMandatoryColumn("CODE_PERMANENT", Species.PROPERTY_PERMANENT_CODE); + + } + + @Override + public Species newEmptyInstance() { + return new SpeciesImpl(); + } + +} diff --git a/wao-services/src/test/java/fr/ifremer/wao/services/service/administration/ReferentialServiceTest.java b/wao-services/src/test/java/fr/ifremer/wao/services/service/administration/ReferentialServiceTest.java index 82b3d9c..76d6899 100644 --- a/wao-services/src/test/java/fr/ifremer/wao/services/service/administration/ReferentialServiceTest.java +++ b/wao-services/src/test/java/fr/ifremer/wao/services/service/administration/ReferentialServiceTest.java @@ -129,6 +129,22 @@ public class ReferentialServiceTest extends AbstractWaoServiceTest { } @Test + public void testImportSpecies() { + InputStream input = null; + try { + input = getClass().getResourceAsStream("/import/especes.csv"); + service.importSpecies(input); + } catch (ImportErrorException e) { + if (log.isDebugEnabled()) { + log.debug("unexpected exception raised", e); + } + Assert.fail("exception should not be raised"); + } finally { + IOUtils.closeQuietly(input); + } + } + + @Test public void testGetDcf5Codes() { service.initialDcf5CodesImport(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.