branch develop updated (2379fdd -> 159153c)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository wao. See http://git.codelutin.com/wao.git from 2379fdd POM en 4.3-SNAPSHOT new 368edb5 On permet de mettre l'utilisateur dans un laboratoire et non plus seulement dans une société new 8a9d440 Liste des laboratoires, création, modification et suppression d'un laboratoire new f7a23fa Ajout de la notion de laboratoire Ifremer (fixes #2262) new 759d2d0 Pour les tests, ajout d'un fichier d'exemple new 4fc2981 Ajout d'un service d'import des espèces new 0715813 Ajout de l'interface utilisateur d'import du référentiel des espèces new 296e68e Ajout d'un référentiel d'espèces cibles (refs #5973) new 368202f Tri bundle new 159153c Correction d'un bogue suscité par l'utilisation de instanceof sur des entités Hibernate The 9 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 159153cd5a22762d30dce0564dc828478230ec63 Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Dec 4 15:24:09 2014 +0100 Correction d'un bogue suscité par l'utilisation de instanceof sur des entités Hibernate commit 368202f343177e4b963838adfc5b3357e6815d17 Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Dec 4 15:23:58 2014 +0100 Tri bundle commit 296e68e04635a8f8f9de9412098b6e6ff9688b7a Merge: f7a23fa 0715813 Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Dec 4 15:09:13 2014 +0100 Ajout d'un référentiel d'espèces cibles (refs #5973) commit f7a23face43333e21c40740a0b100f93c7e5425b Merge: 2379fdd 8a9d440 Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Dec 4 15:08:06 2014 +0100 Ajout de la notion de laboratoire Ifremer (fixes #2262) commit 8a9d440f78fb7eaad409410c2140396b437b68ec Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Dec 4 15:05:11 2014 +0100 Liste des laboratoires, création, modification et suppression d'un laboratoire commit 368edb58da440be4e7425fc224006e754cded078 Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Dec 4 10:53:24 2014 +0100 On permet de mettre l'utilisateur dans un laboratoire et non plus seulement dans une société commit 0715813fe4309dcefc4d6a8aabd5c4c18c8abcd8 Author: Brendan Le Ny <bleny@codelutin.com> Date: Tue Dec 2 17:59:07 2014 +0100 Ajout de l'interface utilisateur d'import du référentiel des espèces 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 commit 759d2d00c668c55f378c3c3f5a40a76cf3e8ef9a Author: Brendan Le Ny <bleny@codelutin.com> Date: Tue Dec 2 14:08:22 2014 +0100 Pour les tests, ajout d'un fichier d'exemple Summary of changes: .../java/fr/ifremer/wao/AbstractWaoTopiaDao.java | 16 +++++ .../java/fr/ifremer/wao/entity/CompanyImpl.java | 10 +++ .../java/fr/ifremer/wao/entity/LaboratoryImpl.java | 12 ++++ .../java/fr/ifremer/wao/entity/WaoUserImpl.java | 8 +-- .../V4_3__add_species,_add_laboratories.sql | 1 + wao-persistence/src/main/xmi/wao-model.zargo | Bin 61426 -> 61366 bytes .../ifremer/wao/services/AuthenticatedWaoUser.java | 6 +- .../fr/ifremer/wao/services/ObsMerFixtures.java | 4 +- .../wao/services/service/WaoServiceSupport.java | 15 +++++ .../service/administration/CompaniesService.java | 36 ++++------- .../administration/LaboratoriesService.java | 71 +++++++++++++++++++++ ... => OrganisationNameMustBeUniqueException.java} | 2 +- .../administration/OrganisationsService.java | 55 ++++++++++++++++ .../service/administration/ReferentialService.java | 44 ++++++++++++- .../administration/UpdateWaoUserCommand.java | 32 +++++----- .../service/administration/WaoUsersService.java | 28 ++++---- .../services/service/csv/SpeciesImportModel.java | 24 +++++++ .../administration/ReferentialServiceTest.java | 16 +++++ wao-services/src/test/resources/import/especes.csv | 5 ++ .../fr/ifremer/wao/web/WaoJspActionSupport.java | 4 ++ ...panyAction.java => DeleteLaboratoryAction.java} | 25 ++++---- .../action/administration/EditCompanyAction.java | 6 +- ...ompanyAction.java => EditLaboratoryAction.java} | 48 +++++++------- .../action/administration/EditWaoUserAction.java | 16 +++-- .../action/administration/ImportSpeciesAction.java | 18 ++++++ ...ompaniesAction.java => LaboratoriesAction.java} | 18 +++--- .../web/action/administration/WaoUsersAction.java | 14 ++-- .../main/resources/i18n/wao-web_en_GB.properties | 13 +++- .../main/resources/i18n/wao-web_fr_FR.properties | 13 +++- .../content/administration/edit-laboratory.jsp | 67 +++++++++++++++++++ .../content/administration/edit-wao-user.jsp | 16 ++--- .../{companies.jsp => laboratories.jsp} | 34 +++++----- .../administration/referential-management.jsp | 18 ++++++ .../src/main/webapp/WEB-INF/decorators/layout.jsp | 8 +++ 34 files changed, 548 insertions(+), 155 deletions(-) create mode 100644 wao-persistence/src/main/java/fr/ifremer/wao/AbstractWaoTopiaDao.java create mode 100644 wao-persistence/src/main/java/fr/ifremer/wao/entity/LaboratoryImpl.java create mode 100644 wao-services/src/main/java/fr/ifremer/wao/services/service/administration/LaboratoriesService.java rename wao-services/src/main/java/fr/ifremer/wao/services/service/administration/{CompanyNameMustBeUniqueException.java => OrganisationNameMustBeUniqueException.java} (92%) create mode 100644 wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationsService.java create mode 100644 wao-services/src/main/java/fr/ifremer/wao/services/service/csv/SpeciesImportModel.java create mode 100644 wao-services/src/test/resources/import/especes.csv copy wao-web/src/main/java/fr/ifremer/wao/web/action/administration/{DeleteCompanyAction.java => DeleteLaboratoryAction.java} (68%) copy wao-web/src/main/java/fr/ifremer/wao/web/action/administration/{EditCompanyAction.java => EditLaboratoryAction.java} (55%) create mode 100644 wao-web/src/main/java/fr/ifremer/wao/web/action/administration/ImportSpeciesAction.java copy wao-web/src/main/java/fr/ifremer/wao/web/action/administration/{CompaniesAction.java => LaboratoriesAction.java} (69%) create mode 100644 wao-web/src/main/webapp/WEB-INF/content/administration/edit-laboratory.jsp copy wao-web/src/main/webapp/WEB-INF/content/administration/{companies.jsp => laboratories.jsp} (71%) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository wao. See http://git.codelutin.com/wao.git commit 759d2d00c668c55f378c3c3f5a40a76cf3e8ef9a Author: Brendan Le Ny <bleny@codelutin.com> Date: Tue Dec 2 14:08:22 2014 +0100 Pour les tests, ajout d'un fichier d'exemple --- wao-services/src/test/resources/import/especes.csv | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/wao-services/src/test/resources/import/especes.csv b/wao-services/src/test/resources/import/especes.csv new file mode 100644 index 0000000..85b3bf9 --- /dev/null +++ b/wao-services/src/test/resources/import/especes.csv @@ -0,0 +1,5 @@ +NOM_SCIENTIFIQUE;NOM_COMMUN;APHIA_ID;CODE_PERMANENT +Engraulis encrasicolus;Anchois;126426;1362 +Dicentrarchus labrax;Bar européen;126975;1644 +Merluccius merluccius;Merlu européen;126484;1540 +Gadus morhua;Morue de l'Atlantique;126436;1543 -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop 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>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository wao. See http://git.codelutin.com/wao.git commit 0715813fe4309dcefc4d6a8aabd5c4c18c8abcd8 Author: Brendan Le Ny <bleny@codelutin.com> Date: Tue Dec 2 17:59:07 2014 +0100 Ajout de l'interface utilisateur d'import du référentiel des espèces --- .../service/administration/ReferentialService.java | 4 +++- .../java/fr/ifremer/wao/web/WaoJspActionSupport.java | 4 ++++ .../web/action/administration/ImportSpeciesAction.java | 18 ++++++++++++++++++ .../src/main/resources/i18n/wao-web_en_GB.properties | 2 ++ .../src/main/resources/i18n/wao-web_fr_FR.properties | 2 ++ .../content/administration/referential-management.jsp | 18 ++++++++++++++++++ 6 files changed, 47 insertions(+), 1 deletion(-) 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 0e22420..9843992 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 @@ -124,7 +124,9 @@ public class ReferentialService extends WaoServiceSupport { TerrestrialLocation.class.getName(), Boat.class.getName())); - // TODO brendan 02/12/14 Species + perProgramReferential.put(ObsProgram.SCLEROCHRONOLOGY, Arrays.asList( + FishingZone.class.getName(), + Species.class.getName())); PER_PROGRAM_REFERENTIAL = Collections.unmodifiableMap(perProgramReferential); } diff --git a/wao-web/src/main/java/fr/ifremer/wao/web/WaoJspActionSupport.java b/wao-web/src/main/java/fr/ifremer/wao/web/WaoJspActionSupport.java index 118f6a0..24e41a4 100644 --- a/wao-web/src/main/java/fr/ifremer/wao/web/WaoJspActionSupport.java +++ b/wao-web/src/main/java/fr/ifremer/wao/web/WaoJspActionSupport.java @@ -59,6 +59,10 @@ public class WaoJspActionSupport extends WaoActionSupport { return getObsProgram().isObsVente(); } + public boolean isSclerochronology() { + return getObsProgram().isSclerochronology(); + } + public String getText(Enum<?> enumeration) { return getText(enumeration.getClass().getSimpleName() + "." + enumeration.name()); } diff --git a/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/ImportSpeciesAction.java b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/ImportSpeciesAction.java new file mode 100644 index 0000000..88f2b4c --- /dev/null +++ b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/ImportSpeciesAction.java @@ -0,0 +1,18 @@ +package fr.ifremer.wao.web.action.administration; + +import fr.ifremer.wao.services.service.ImportErrorException; + +import java.io.InputStream; + +public class ImportSpeciesAction extends AbstractImportReferentialAction { + + @Override + protected void importCsv(InputStream csvInputStream) throws ImportErrorException { + service.importSpecies(csvInputStream); + } + + @Override + protected String getSuccessMessage() { + return t("wao.import.species.success"); + } +} diff --git a/wao-web/src/main/resources/i18n/wao-web_en_GB.properties b/wao-web/src/main/resources/i18n/wao-web_en_GB.properties index e1020e5..bafdcd9 100644 --- a/wao-web/src/main/resources/i18n/wao-web_en_GB.properties +++ b/wao-web/src/main/resources/i18n/wao-web_en_GB.properties @@ -14,6 +14,8 @@ wao.import.contactStateMotives.success=Import contact state motives successful wao.import.fishingZones.prompt=Import fishing zones wao.import.fishingZones.success=Import fishing zones successful wao.import.sampleRow.failure.wrongSampleRowCodeFormat=The sample row code must follow pattern YYYY_P1234 (YYYY is the year with 4 digits, P the program and 1234 the line number) +wao.import.species.prompt=Import species +wao.import.species.success=Species import successful wao.import.terrestrialDivisions.success= wao.import.terrestrialLocations.prompt=Import terrestrial locations wao.import.terrestrialLocations.success=Import terrestrial locations successful diff --git a/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties b/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties index ff1b2cc..2d02f42 100644 --- a/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties +++ b/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties @@ -14,6 +14,8 @@ wao.import.contactStateMotives.success=Import des motifs de refus réalisé avec wao.import.fishingZones.prompt=Import des zones de pêches wao.import.fishingZones.success=Import des zones de pêches réalisé avec succès wao.import.sampleRow.failure.wrongSampleRowCodeFormat=Le code de la ligne doit être de la forme AAAA_P1234 (AAAA représentant l'année sur quatre chiffres, P le code du programme (M, V, ou D) et 1234 le numéro de la ligne sur quatre chiffres) +wao.import.species.prompt=Import des espèces +wao.import.species.succès=Import des espèces réalisé avec succès wao.import.terrestrialDivisions.prompt=Import des unités d'observation wao.import.terrestrialDivisions.success=Import des unités d'observation réalisé avec succès wao.import.terrestrialLocations.prompt=Import des lieux terrestres diff --git a/wao-web/src/main/webapp/WEB-INF/content/administration/referential-management.jsp b/wao-web/src/main/webapp/WEB-INF/content/administration/referential-management.jsp index 88899f0..b3d6b83 100644 --- a/wao-web/src/main/webapp/WEB-INF/content/administration/referential-management.jsp +++ b/wao-web/src/main/webapp/WEB-INF/content/administration/referential-management.jsp @@ -101,6 +101,24 @@ </s:form> </s:if> + <s:if test="sclerochronology"> + <s:form action="import-species" method="POST" enctype="multipart/form-data"> + + <fieldset> + <legend> + <s:text name="wao.import.species.prompt" /> + </legend> + + <s:file name="csvFile" cssClass="float-left" /> + + <s:submit type="button"> + <i class="icon-upload"></i> <s:text name="wao.ui.action.csvImport" /> + </s:submit> + </fieldset> + + </s:form> + </s:if> + <table class="table table-bordered"> <tr> <th> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository wao. See http://git.codelutin.com/wao.git commit 368edb58da440be4e7425fc224006e754cded078 Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Dec 4 10:53:24 2014 +0100 On permet de mettre l'utilisateur dans un laboratoire et non plus seulement dans une société --- .../java/fr/ifremer/wao/entity/CompanyImpl.java | 5 ++++ .../java/fr/ifremer/wao/entity/LaboratoryImpl.java | 12 ++++++++ .../java/fr/ifremer/wao/entity/WaoUserImpl.java | 16 +++++++---- .../V4_3__add_species,_add_laboratories.sql | 1 + wao-persistence/src/main/xmi/wao-model.zargo | Bin 61426 -> 61324 bytes .../ifremer/wao/services/AuthenticatedWaoUser.java | 2 +- .../fr/ifremer/wao/services/ObsMerFixtures.java | 4 +-- .../wao/services/service/WaoServiceSupport.java | 5 ++++ .../administration/OrganisationsService.java | 21 ++++++++++++++ .../administration/UpdateWaoUserCommand.java | 32 ++++++++++----------- .../service/administration/WaoUsersService.java | 11 +++---- .../action/administration/EditWaoUserAction.java | 2 +- .../main/resources/i18n/wao-web_en_GB.properties | 1 + .../main/resources/i18n/wao-web_fr_FR.properties | 1 + .../content/administration/edit-wao-user.jsp | 16 +++++------ 15 files changed, 90 insertions(+), 39 deletions(-) diff --git a/wao-persistence/src/main/java/fr/ifremer/wao/entity/CompanyImpl.java b/wao-persistence/src/main/java/fr/ifremer/wao/entity/CompanyImpl.java index 7ef1890..10fa93e 100644 --- a/wao-persistence/src/main/java/fr/ifremer/wao/entity/CompanyImpl.java +++ b/wao-persistence/src/main/java/fr/ifremer/wao/entity/CompanyImpl.java @@ -36,6 +36,11 @@ public class CompanyImpl extends CompanyAbstract { private static final long serialVersionUID = 1L; @Override + public String getFullName() { + return getName(); + } + + @Override public String toString() { return "CompanyImpl{name=" + getName() + "}"; } diff --git a/wao-persistence/src/main/java/fr/ifremer/wao/entity/LaboratoryImpl.java b/wao-persistence/src/main/java/fr/ifremer/wao/entity/LaboratoryImpl.java new file mode 100644 index 0000000..5afe788 --- /dev/null +++ b/wao-persistence/src/main/java/fr/ifremer/wao/entity/LaboratoryImpl.java @@ -0,0 +1,12 @@ +package fr.ifremer.wao.entity; + + +public class LaboratoryImpl extends LaboratoryAbstract { + + private static final long serialVersionUID = 3472901365946410034L; + + @Override + public String getFullName() { + return String.format("%s (%s)", getName(), getCompany().getName()); + } +} diff --git a/wao-persistence/src/main/java/fr/ifremer/wao/entity/WaoUserImpl.java b/wao-persistence/src/main/java/fr/ifremer/wao/entity/WaoUserImpl.java index 51a95a5..62b4fad 100644 --- a/wao-persistence/src/main/java/fr/ifremer/wao/entity/WaoUserImpl.java +++ b/wao-persistence/src/main/java/fr/ifremer/wao/entity/WaoUserImpl.java @@ -95,12 +95,16 @@ public class WaoUserImpl extends WaoUserAbstract { @Override public Company getCompany() { - return (Company) getOrganisation(); - } - - @Override - public void setCompany(Company company) { - setOrganisation(company); + Organisation organisation = getOrganisation(); + Company company; + if (organisation instanceof Laboratory) { + company = ((Laboratory) organisation).getCompany(); + } else if (organisation instanceof Company) { + company = (Company) organisation; + } else { + throw new IllegalStateException(organisation.toString()); + } + return company; } @Override diff --git a/wao-persistence/src/main/resources/db/migration/V4_3__add_species,_add_laboratories.sql b/wao-persistence/src/main/resources/db/migration/V4_3__add_species,_add_laboratories.sql index 459d5f8..d53308d 100644 --- a/wao-persistence/src/main/resources/db/migration/V4_3__add_species,_add_laboratories.sql +++ b/wao-persistence/src/main/resources/db/migration/V4_3__add_species,_add_laboratories.sql @@ -42,6 +42,7 @@ create table laboratory ( topiaCreateDate timestamp without time zone, name text, company character varying(255) not null, + active boolean, constraint laboratory_pkey primary key (topiaId), constraint laboratory_name_unique unique (name), diff --git a/wao-persistence/src/main/xmi/wao-model.zargo b/wao-persistence/src/main/xmi/wao-model.zargo index 80e3039..c9ea2f3 100644 Binary files a/wao-persistence/src/main/xmi/wao-model.zargo and b/wao-persistence/src/main/xmi/wao-model.zargo differ diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java b/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java index 2b133fd..669dc7f 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java @@ -116,7 +116,7 @@ public class AuthenticatedWaoUser implements Serializable{ return (userProfile.isAdmin() || userProfile.isCoordinator()) && isCanWrite(); } - public boolean isAuthorizedToChangeUserCompany() { + public boolean isAuthorizedToChangeUserOrganisation() { return userProfile.isAdmin() && isCanWrite(); } diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/ObsMerFixtures.java b/wao-services/src/main/java/fr/ifremer/wao/services/ObsMerFixtures.java index dcfa132..6b42b3c 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/ObsMerFixtures.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/ObsMerFixtures.java @@ -107,14 +107,14 @@ public class ObsMerFixtures { switch (login) { case "admin": waoUser = new WaoUserImpl(); - waoUser.setCompany(ifremer()); + waoUser.setOrganisation(ifremer()); waoUser.setLogin(login); waoUser.setActive(true); waoUser.addUserProfile(getUserProfile("admin")); break; case "jmichmuche": waoUser = new WaoUserImpl(); - waoUser.setCompany(ifremer()); + waoUser.setOrganisation(ifremer()); waoUser.setLogin(login); waoUser.setActive(true); waoUser.addUserProfile(getUserProfile("jmichmuche")); 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..71d83d3 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 @@ -47,6 +47,7 @@ import fr.ifremer.wao.services.WaoService; import fr.ifremer.wao.services.WaoServiceContext; import fr.ifremer.wao.services.WaoWebApplicationContext; import fr.ifremer.wao.services.service.administration.CompaniesService; +import fr.ifremer.wao.services.service.administration.OrganisationsService; import fr.ifremer.wao.services.service.administration.ReferentialService; import fr.ifremer.wao.services.service.administration.WaoUsersService; import fr.ifremer.wao.services.service.mail.EmailService; @@ -186,4 +187,8 @@ public abstract class WaoServiceSupport implements WaoService { protected WaoUserTopiaDao getWaoUserDao() { return getPersistenceContext().getWaoUserDao(); } + + protected OrganisationsService getOrganisationsService() { + return newService(OrganisationsService.class); + } } diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationsService.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationsService.java new file mode 100644 index 0000000..cdce39f --- /dev/null +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationsService.java @@ -0,0 +1,21 @@ +package fr.ifremer.wao.services.service.administration; + +import fr.ifremer.wao.entity.Company; +import fr.ifremer.wao.entity.Organisation; +import fr.ifremer.wao.entity.OrganisationTopiaDao; +import fr.ifremer.wao.services.service.WaoServiceSupport; + +import java.util.List; + +public class OrganisationsService extends WaoServiceSupport { + + public List<Organisation> getAllOrganisations() { + + OrganisationTopiaDao dao = getPersistenceContext().getOrganisationDao(); + + List<Organisation> organisations = dao.newQueryBuilder().setOrderByArguments(Company.PROPERTY_ACTIVE + " desc", Organisation.PROPERTY_NAME).findAll(); + + return organisations; + + } +} diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/UpdateWaoUserCommand.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/UpdateWaoUserCommand.java index e1d3e68..d40c5dd 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/UpdateWaoUserCommand.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/UpdateWaoUserCommand.java @@ -23,8 +23,8 @@ package fr.ifremer.wao.services.service.administration; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.ObsProgram; +import fr.ifremer.wao.entity.Organisation; import fr.ifremer.wao.entity.UserProfile; import fr.ifremer.wao.entity.UserProfileImpl; import fr.ifremer.wao.entity.UserRole; @@ -47,7 +47,7 @@ public class UpdateWaoUserCommand implements Serializable{ protected UpdateWaoUserCommandPasswordStrategy passwordStrategy; - protected ImmutableMap<String, Company> allCompanies; + protected ImmutableMap<String, Organisation> allOrganisations; /** * Si l'utilisateur est professionnel, on doit savoir à quelle @@ -66,29 +66,29 @@ public class UpdateWaoUserCommand implements Serializable{ this.canReadBoats = canReadBoats; } - public String getCompanyId() { - String companyId = null; - if (waoUser.getCompany() != null) { - companyId = waoUser.getCompany().getTopiaId(); + public String getOrganisationId() { + String organisationId = null; + if (waoUser.getOrganisation() != null) { + organisationId = waoUser.getOrganisation().getTopiaId(); } - return companyId; + return organisationId; } - public void setCompanyId(String companyId) { - if (StringUtils.isBlank(companyId)) { - waoUser.setCompany(null); + public void setOrganisationId(String organisationId) { + if (StringUtils.isBlank(organisationId)) { + waoUser.setOrganisation(null); } else { - Company company = allCompanies.get(companyId); - waoUser.setCompany(company); + Organisation organisation = allOrganisations.get(organisationId); + waoUser.setOrganisation(organisation); } } - public ImmutableMap<String, Company> getAllCompanies() { - return allCompanies; + public ImmutableMap<String, Organisation> getAllOrganisations() { + return allOrganisations; } - public void setAllCompanies(ImmutableMap<String, Company> allCompanies) { - this.allCompanies = allCompanies; + public void setAllOrganisations(ImmutableMap<String, Organisation> allOrganisations) { + this.allOrganisations = allOrganisations; } protected UserProfile getUserProfile(UserRole userRole, boolean readOnly) { diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java index faf17fe..771deaa 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java @@ -29,6 +29,7 @@ import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.Boats; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.ObsProgram; +import fr.ifremer.wao.entity.Organisation; import fr.ifremer.wao.entity.UserProfile; import fr.ifremer.wao.entity.UserRole; import fr.ifremer.wao.entity.WaoUser; @@ -112,7 +113,7 @@ public class WaoUsersService extends WaoServiceSupport { Company company = getCompanyDao().forTopiaIdEquals(optionalCompanyId.get()).findUnique(); - newWaoUser.setCompany(company); + newWaoUser.setOrganisation(company); } @@ -126,11 +127,11 @@ public class WaoUsersService extends WaoServiceSupport { updateWaoUserCommand.setObsProgram(obsProgram); - ImmutableMap<String, Company> allCompanies = Maps.uniqueIndex( - getCompaniesService().getAllCompanies(), + ImmutableMap<String, Organisation> allOrganisations = Maps.uniqueIndex( + getOrganisationsService().getAllOrganisations(), TopiaEntities.getTopiaIdFunction()); - updateWaoUserCommand.setAllCompanies(allCompanies); + updateWaoUserCommand.setAllOrganisations(allOrganisations); if (optionalUserId.isPresent()) { @@ -251,7 +252,7 @@ public class WaoUsersService extends WaoServiceSupport { WaoUser waoUser = dao.findByTopiaId(waoUserId); - waoUser.setCompany(null); + waoUser.setOrganisation(null); Map<Class<? extends TopiaEntity>, List<? extends TopiaEntity>> allUsages = dao.findAllUsages(waoUser); diff --git a/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java index 5787d14..3a0feb4 100644 --- a/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java +++ b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java @@ -95,7 +95,7 @@ public class EditWaoUserAction extends WaoJspActionSupport implements Preparable addFieldError("updateWaoUserCommand.waoUser.login", t("wao.ui.form.updateWaoUserCommand.loginMustBeEmail")); } - if (updateWaoUserCommand.getCompanyId() == null) { + if (updateWaoUserCommand.getOrganisationId() == null) { addFieldError("updateWaoUserCommand.companyId", t("wao.ui.form.updateWaoUserCommand.requiredCompany")); } diff --git a/wao-web/src/main/resources/i18n/wao-web_en_GB.properties b/wao-web/src/main/resources/i18n/wao-web_en_GB.properties index e1020e5..d2c52be 100644 --- a/wao-web/src/main/resources/i18n/wao-web_en_GB.properties +++ b/wao-web/src/main/resources/i18n/wao-web_en_GB.properties @@ -161,6 +161,7 @@ wao.ui.entity.Boats=Boats wao.ui.entity.Company=Company wao.ui.entity.Contact=Contact wao.ui.entity.FishingZone=Fishing zones +wao.ui.entity.Organisation=Organisation wao.ui.entity.SampleRow=Sample row wao.ui.entity.SampleRow.day=Day wao.ui.entity.TerrestrialLocation=Place diff --git a/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties b/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties index ff1b2cc..a717858 100644 --- a/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties +++ b/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties @@ -162,6 +162,7 @@ wao.ui.entity.Boats=Navires wao.ui.entity.Company=Société wao.ui.entity.Contact=Contact wao.ui.entity.FishingZone=Zones de pêche +wao.ui.entity.Organisation=Organisation wao.ui.entity.SampleRow=Ligne du plan d'échantillonnage wao.ui.entity.SampleRow.day=Jour wao.ui.entity.TerrestrialLocation=Lieu diff --git a/wao-web/src/main/webapp/WEB-INF/content/administration/edit-wao-user.jsp b/wao-web/src/main/webapp/WEB-INF/content/administration/edit-wao-user.jsp index be95557..9dba910 100644 --- a/wao-web/src/main/webapp/WEB-INF/content/administration/edit-wao-user.jsp +++ b/wao-web/src/main/webapp/WEB-INF/content/administration/edit-wao-user.jsp @@ -91,17 +91,17 @@ <s:textfield name="updateWaoUserCommand.waoUser.lastName" label="%{getText('wao.ui.field.WaoUser.lastName')}" requiredLabel="true" /> <s:textfield name="updateWaoUserCommand.waoUser.phoneNumber" label="%{getText('wao.ui.field.WaoUser.phoneNumber')}" size="14" /> - <s:if test="authenticatedWaoUser.authorizedToChangeUserCompany"> - <s:select name="updateWaoUserCommand.companyId" - label="%{getText('wao.ui.entity.Company')}" - list="updateWaoUserCommand.allCompanies" - listValue="%{value.name}" + <s:if test="authenticatedWaoUser.authorizedToChangeUserOrganisation"> + <s:select name="updateWaoUserCommand.organisationId" + label="%{getText('wao.ui.entity.Organisation')}" + list="updateWaoUserCommand.allOrganisations" + listValue="%{value.fullName}" requiredLabel="true" cssClass="input-xxlarge" /> </s:if> <s:else> - <s:hidden name="updateWaoUserCommand.companyId" - value="%{updateWaoUserCommand.companyId}"/> + <s:hidden name="updateWaoUserCommand.organisationId" + value="%{updateWaoUserCommand.organisationId}"/> </s:else> <s:if test="authenticatedWaoUser.authorizedToActiveUser"> @@ -174,7 +174,7 @@ <div class="form-actions"> <s:if test="authenticatedWaoUser.authorizedToViewCompanyUsers"> <s:url action="wao-users" id="cancelUrl"> - <s:param name="companyId" value="updateWaoUserCommand.companyId" /> + <s:param name="companyId" value="updateWaoUserCommand.waoUser.company.topiaId" /> </s:url> </s:if> <s:else> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository wao. See http://git.codelutin.com/wao.git commit 8a9d440f78fb7eaad409410c2140396b437b68ec Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Dec 4 15:05:11 2014 +0100 Liste des laboratoires, création, modification et suppression d'un laboratoire --- .../java/fr/ifremer/wao/AbstractWaoTopiaDao.java | 16 ++++ .../ifremer/wao/services/AuthenticatedWaoUser.java | 4 + .../wao/services/service/WaoServiceSupport.java | 5 ++ .../service/administration/CompaniesService.java | 36 +++----- .../administration/LaboratoriesService.java | 71 +++++++++++++++ ... => OrganisationNameMustBeUniqueException.java} | 2 +- .../administration/OrganisationsService.java | 34 +++++++ .../service/administration/WaoUsersService.java | 19 ++-- .../administration/DeleteLaboratoryAction.java | 73 +++++++++++++++ .../action/administration/EditCompanyAction.java | 6 +- ...ompanyAction.java => EditLaboratoryAction.java} | 48 +++++----- .../action/administration/EditWaoUserAction.java | 14 +-- .../action/administration/LaboratoriesAction.java | 33 ++++++- .../web/action/administration/WaoUsersAction.java | 14 +-- .../main/resources/i18n/wao-web_en_GB.properties | 10 ++- .../main/resources/i18n/wao-web_fr_FR.properties | 10 ++- .../content/administration/edit-laboratory.jsp | 67 ++++++++++++++ .../content/administration/laboratories.jsp | 100 +++++++++++++++++++++ .../src/main/webapp/WEB-INF/decorators/layout.jsp | 8 ++ 19 files changed, 488 insertions(+), 82 deletions(-) diff --git a/wao-persistence/src/main/java/fr/ifremer/wao/AbstractWaoTopiaDao.java b/wao-persistence/src/main/java/fr/ifremer/wao/AbstractWaoTopiaDao.java new file mode 100644 index 0000000..7989df1 --- /dev/null +++ b/wao-persistence/src/main/java/fr/ifremer/wao/AbstractWaoTopiaDao.java @@ -0,0 +1,16 @@ +package fr.ifremer.wao; + +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.internal.AbstractTopiaDao; + +public abstract class AbstractWaoTopiaDao<E extends TopiaEntity> extends AbstractTopiaDao<E> { + + public void save(E entity) { + if (entity.isPersisted()) { + update(entity); + } else { + create(entity); + } + } + +} diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java b/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java index 669dc7f..a3fab0b 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/AuthenticatedWaoUser.java @@ -154,6 +154,10 @@ public class AuthenticatedWaoUser implements Serializable{ return userProfile.isAdmin(); } + public boolean isAuthorizedToViewLaboratories() { + return userProfile.isAdmin(); + } + public boolean isAuthorizedToViewCompanyUsers() { return userProfile.isAdmin() || userProfile.isCoordinator(); } 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 71d83d3..8d67d4d 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 @@ -33,6 +33,7 @@ import fr.ifremer.wao.entity.ElligibleBoatTopiaDao; import fr.ifremer.wao.entity.FishingGearDcfTopiaDao; import fr.ifremer.wao.entity.FishingZoneTopiaDao; import fr.ifremer.wao.entity.NewsTopiaDao; +import fr.ifremer.wao.entity.OrganisationTopiaDao; import fr.ifremer.wao.entity.ProfessionTopiaDao; import fr.ifremer.wao.entity.ReferentialMetaTopiaDao; import fr.ifremer.wao.entity.SampleMonthTopiaDao; @@ -191,4 +192,8 @@ public abstract class WaoServiceSupport implements WaoService { protected OrganisationsService getOrganisationsService() { return newService(OrganisationsService.class); } + + protected OrganisationTopiaDao getOrganisationDao() { + return getPersistenceContext().getOrganisationDao(); + } } diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompaniesService.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompaniesService.java index 4a5b520..adac21b 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompaniesService.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompaniesService.java @@ -21,16 +21,13 @@ package fr.ifremer.wao.services.service.administration; * #L% */ -import com.google.common.collect.Iterables; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.CompanyImpl; import fr.ifremer.wao.entity.CompanyTopiaDao; import fr.ifremer.wao.services.service.IllegalDeletionException; import fr.ifremer.wao.services.service.WaoServiceSupport; -import org.nuiton.topia.persistence.TopiaEntity; import java.util.List; -import java.util.Map; public class CompaniesService extends WaoServiceSupport { @@ -68,11 +65,7 @@ public class CompaniesService extends WaoServiceSupport { CompanyTopiaDao dao = getPersistenceContext().getCompanyDao(); - if (company.isPersisted()) { - dao.update(company); - } else { - dao.create(company); - } + dao.save(company); commit(); @@ -80,31 +73,24 @@ public class CompaniesService extends WaoServiceSupport { public void deleteCompany(String companyId) throws IllegalDeletionException { - CompanyTopiaDao dao = getPersistenceContext().getCompanyDao(); - - Company company = dao.findByTopiaId(companyId); + getOrganisationsService().deleteOrganisation(companyId); - Map<Class<? extends TopiaEntity>,List<? extends TopiaEntity>> allUsages = dao.findAllUsages(company); + } - if (allUsages.isEmpty()) { - dao.delete(company); - } else { - throw new IllegalDeletionException(allUsages); - } + public void preValidate(Company company) throws OrganisationNameMustBeUniqueException { - commit(); + getOrganisationsService().preValidate(company); } - public void preValidate(Company company) throws CompanyNameMustBeUniqueException { + public Company getIfremer() { CompanyTopiaDao dao = getCompanyDao(); - List<Company> existingCompaniesForTheSameName = dao.forNameEquals(company.getName()).findAll(); - if (existingCompaniesForTheSameName.size() > 1) { - throw new CompanyNameMustBeUniqueException(); - } else if (existingCompaniesForTheSameName.size() == 1 && ! Iterables.getOnlyElement(existingCompaniesForTheSameName).equals(company)) { - throw new CompanyNameMustBeUniqueException(); - } + + Company ifremer = dao.forNameEquals("IFREMER").findUnique(); + + return ifremer; } + } diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/LaboratoriesService.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/LaboratoriesService.java new file mode 100644 index 0000000..eb7f639 --- /dev/null +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/LaboratoriesService.java @@ -0,0 +1,71 @@ +package fr.ifremer.wao.services.service.administration; + +import fr.ifremer.wao.entity.Company; +import fr.ifremer.wao.entity.Laboratory; +import fr.ifremer.wao.entity.LaboratoryImpl; +import fr.ifremer.wao.entity.LaboratoryTopiaDao; +import fr.ifremer.wao.services.service.IllegalDeletionException; +import fr.ifremer.wao.services.service.WaoServiceSupport; + +import java.util.List; + +public class LaboratoriesService extends WaoServiceSupport { + + public List<Laboratory> getAllLaboratories() { + + LaboratoryTopiaDao dao = getPersistenceContext().getLaboratoryDao(); + + List<Laboratory> laboratories = dao.newQueryBuilder().setOrderByArguments(Laboratory.PROPERTY_ACTIVE + " desc", Laboratory.PROPERTY_NAME).findAll(); + + return laboratories; + + } + + public Laboratory newLaboratory() { + + LaboratoryImpl newLaboratory = new LaboratoryImpl(); + + newLaboratory.setActive(true); + + Company ifremer = getCompaniesService().getIfremer(); + newLaboratory.setCompany(ifremer); + + return newLaboratory; + + } + + public Laboratory getLaboratory(String laboratoryId) { + + LaboratoryTopiaDao dao = getPersistenceContext().getLaboratoryDao(); + + Laboratory laboratory = dao.forTopiaIdEquals(laboratoryId).findUnique(); + + return laboratory; + + } + + public void preValidate(Laboratory laboratory) throws OrganisationNameMustBeUniqueException { + + getOrganisationsService().preValidate(laboratory); + + } + + public void save(Laboratory laboratory) { + + Company ifremer = getCompaniesService().getIfremer(); + laboratory.setCompany(ifremer); + + LaboratoryTopiaDao dao = getPersistenceContext().getLaboratoryDao(); + + dao.save(laboratory); + + commit(); + + } + + public void deleteLaboratory(String laboratoryId) throws IllegalDeletionException { + + getOrganisationsService().deleteOrganisation(laboratoryId); + + } +} diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompanyNameMustBeUniqueException.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationNameMustBeUniqueException.java similarity index 92% copy from wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompanyNameMustBeUniqueException.java copy to wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationNameMustBeUniqueException.java index 66e47fc..d7d6522 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompanyNameMustBeUniqueException.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationNameMustBeUniqueException.java @@ -23,7 +23,7 @@ package fr.ifremer.wao.services.service.administration; import fr.ifremer.wao.WaoException; -public class CompanyNameMustBeUniqueException extends WaoException { +public class OrganisationNameMustBeUniqueException extends WaoException { private static final long serialVersionUID = 1L; } diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationsService.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationsService.java index cdce39f..03ea1fd 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationsService.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationsService.java @@ -1,11 +1,15 @@ package fr.ifremer.wao.services.service.administration; +import com.google.common.collect.Iterables; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.Organisation; import fr.ifremer.wao.entity.OrganisationTopiaDao; +import fr.ifremer.wao.services.service.IllegalDeletionException; import fr.ifremer.wao.services.service.WaoServiceSupport; +import org.nuiton.topia.persistence.TopiaEntity; import java.util.List; +import java.util.Map; public class OrganisationsService extends WaoServiceSupport { @@ -18,4 +22,34 @@ public class OrganisationsService extends WaoServiceSupport { return organisations; } + + protected void preValidate(Organisation organisation) throws OrganisationNameMustBeUniqueException { + + OrganisationTopiaDao dao = getOrganisationDao(); + List<Organisation> existingOrganisationsForTheSameName = dao.forNameEquals(organisation.getName()).findAll(); + if (existingOrganisationsForTheSameName.size() > 1) { + throw new OrganisationNameMustBeUniqueException(); + } else if (existingOrganisationsForTheSameName.size() == 1 && ! Iterables.getOnlyElement(existingOrganisationsForTheSameName).equals(organisation)) { + throw new OrganisationNameMustBeUniqueException(); + } + + } + + protected void deleteOrganisation(String organisationId) throws IllegalDeletionException { + + OrganisationTopiaDao dao = getPersistenceContext().getOrganisationDao(); + + Organisation organisation = dao.findByTopiaId(organisationId); + + Map<Class<? extends TopiaEntity>,List<? extends TopiaEntity>> allUsages = dao.findAllUsages(organisation); + + if (allUsages.isEmpty()) { + dao.delete(organisation); + } else { + throw new IllegalDeletionException(allUsages); + } + + commit(); + + } } diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java index 771deaa..5408bfa 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java @@ -27,7 +27,6 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.Boats; -import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.ObsProgram; import fr.ifremer.wao.entity.Organisation; import fr.ifremer.wao.entity.UserProfile; @@ -56,14 +55,14 @@ public class WaoUsersService extends WaoServiceSupport { private static final Log log = LogFactory.getLog(WaoUsersService.class); - public List<WaoUser> getWaoUsers(Optional<String> optionalCompanyId) { + public List<WaoUser> getWaoUsers(Optional<String> optionalOrganisationId) { WaoUserTopiaDao dao = getWaoUserDao(); TopiaQueryBuilderAddCriteriaOrRunQueryStep<WaoUser> query = dao.newQueryBuilder(); - if (optionalCompanyId.isPresent()) { - query.addTopiaIdEquals(WaoUser.PROPERTY_ORGANISATION, optionalCompanyId.get()); + if (optionalOrganisationId.isPresent()) { + query.addTopiaIdEquals(WaoUser.PROPERTY_ORGANISATION, optionalOrganisationId.get()); } query.setOrderByArguments(WaoUser.PROPERTY_LOGIN); @@ -103,17 +102,17 @@ public class WaoUsersService extends WaoServiceSupport { } - public WaoUser newWaoUser(Optional<String> optionalCompanyId) { + public WaoUser newWaoUser(Optional<String> optionalOrganisationId) { WaoUserImpl newWaoUser = new WaoUserImpl(); newWaoUser.setActive(true); - if (optionalCompanyId.isPresent()) { + if (optionalOrganisationId.isPresent()) { - Company company = getCompanyDao().forTopiaIdEquals(optionalCompanyId.get()).findUnique(); + Organisation organisation = getOrganisationDao().forTopiaIdEquals(optionalOrganisationId.get()).findUnique(); - newWaoUser.setOrganisation(company); + newWaoUser.setOrganisation(organisation); } @@ -121,7 +120,7 @@ public class WaoUsersService extends WaoServiceSupport { } - public UpdateWaoUserCommand newUpdateWaoUserCommand(ObsProgram obsProgram, Optional<String> optionalUserId, Optional<String> optionalCompanyId) { + public UpdateWaoUserCommand newUpdateWaoUserCommand(ObsProgram obsProgram, Optional<String> optionalUserId, Optional<String> optionalOrganisationId) { UpdateWaoUserCommand updateWaoUserCommand = new UpdateWaoUserCommand(); @@ -153,7 +152,7 @@ public class WaoUsersService extends WaoServiceSupport { } else { - updateWaoUserCommand.setWaoUser(newWaoUser(optionalCompanyId)); + updateWaoUserCommand.setWaoUser(newWaoUser(optionalOrganisationId)); updateWaoUserCommand.setPasswordStrategy(UpdateWaoUserCommandPasswordStrategy.GENERATE_NEW_PASSWORD); diff --git a/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/DeleteLaboratoryAction.java b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/DeleteLaboratoryAction.java new file mode 100644 index 0000000..89cb04d --- /dev/null +++ b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/DeleteLaboratoryAction.java @@ -0,0 +1,73 @@ +package fr.ifremer.wao.web.action.administration; + +/* + * #%L + * Wao :: Web + * %% + * Copyright (C) 2009 - 2014 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import fr.ifremer.wao.services.service.IllegalDeletionException; +import fr.ifremer.wao.services.service.administration.LaboratoriesService; +import fr.ifremer.wao.web.WaoJspActionSupport; +import org.apache.struts2.convention.annotation.Result; +import org.apache.struts2.convention.annotation.Results; +import org.nuiton.i18n.I18n; + +@Results({ + @Result(name="error", type="redirectAction", params = { "actionName", "laboratories" }), + @Result(name="success", type="redirectAction", params = { "actionName", "laboratories" }) +}) +public class DeleteLaboratoryAction extends WaoJspActionSupport { + + private static final long serialVersionUID = 1L; + + protected transient LaboratoriesService service; + + protected String laboratoryId; + + public void setLaboratoryId(String laboratoryId) { + this.laboratoryId = laboratoryId; + } + + public void setService(LaboratoriesService service) { + this.service = service; + } + + @Override + public String execute() { + + try { + + service.deleteLaboratory(laboratoryId); + + session.addMessage(t(I18n.n("wao.ui.action.deleteLaboratory.success"))); + + return SUCCESS; + + } catch (IllegalDeletionException e) { + + session.addErrorMessages(t(I18n.n("wao.ui.action.deleteLaboratory.failure"))); + session.addErrorMessages(e.getExplanation(getLocale())); + + return ERROR; + + } + + } + +} diff --git a/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditCompanyAction.java b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditCompanyAction.java index 05e5384..fee6ad9 100644 --- a/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditCompanyAction.java +++ b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditCompanyAction.java @@ -24,7 +24,7 @@ package fr.ifremer.wao.web.action.administration; import com.opensymphony.xwork2.Preparable; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.services.service.administration.CompaniesService; -import fr.ifremer.wao.services.service.administration.CompanyNameMustBeUniqueException; +import fr.ifremer.wao.services.service.administration.OrganisationNameMustBeUniqueException; import fr.ifremer.wao.web.WaoJspActionSupport; import org.apache.commons.lang3.StringUtils; import org.apache.struts2.convention.annotation.Result; @@ -69,8 +69,8 @@ public class EditCompanyAction extends WaoJspActionSupport implements Preparable try { service.preValidate(company); - } catch (CompanyNameMustBeUniqueException e) { - addFieldError("company.name", t("wao.ui.form.Company.error.nameMustBeUnique")); + } catch (OrganisationNameMustBeUniqueException e) { + addFieldError("company.name", t("wao.ui.form.Organisation.error.nameMustBeUnique")); } } diff --git a/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditCompanyAction.java b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditLaboratoryAction.java similarity index 55% copy from wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditCompanyAction.java copy to wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditLaboratoryAction.java index 05e5384..e726e57 100644 --- a/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditCompanyAction.java +++ b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditLaboratoryAction.java @@ -22,45 +22,45 @@ package fr.ifremer.wao.web.action.administration; */ import com.opensymphony.xwork2.Preparable; -import fr.ifremer.wao.entity.Company; -import fr.ifremer.wao.services.service.administration.CompaniesService; -import fr.ifremer.wao.services.service.administration.CompanyNameMustBeUniqueException; +import fr.ifremer.wao.entity.Laboratory; +import fr.ifremer.wao.services.service.administration.OrganisationNameMustBeUniqueException; +import fr.ifremer.wao.services.service.administration.LaboratoriesService; import fr.ifremer.wao.web.WaoJspActionSupport; import org.apache.commons.lang3.StringUtils; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; @Results({ - @Result(name="success", type="redirectAction", params = { "actionName", "companies" }) + @Result(name="success", type="redirectAction", params = { "actionName", "laboratories" }) }) -public class EditCompanyAction extends WaoJspActionSupport implements Preparable { +public class EditLaboratoryAction extends WaoJspActionSupport implements Preparable { private static final long serialVersionUID = 1L; - protected transient CompaniesService service; + protected transient LaboratoriesService service; - protected String companyId; + protected String laboratoryId; - protected Company company; + protected Laboratory laboratory; - public void setCompanyId(String companyId) { - this.companyId = companyId; + public void setLaboratoryId(String laboratoryId) { + this.laboratoryId = laboratoryId; } - public void setCompany(Company company) { - this.company = company; + public void setLaboratory(Laboratory laboratory) { + this.laboratory = laboratory; } - public void setService(CompaniesService service) { + public void setService(LaboratoriesService service) { this.service = service; } @Override public void prepare() { - if (StringUtils.isEmpty(companyId)) { - company = service.newCompany(); + if (StringUtils.isEmpty(laboratoryId)) { + laboratory = service.newLaboratory(); } else { - company = service.getCompany(companyId); + laboratory = service.getLaboratory(laboratoryId); } } @@ -68,9 +68,9 @@ public class EditCompanyAction extends WaoJspActionSupport implements Preparable public void validate() { try { - service.preValidate(company); - } catch (CompanyNameMustBeUniqueException e) { - addFieldError("company.name", t("wao.ui.form.Company.error.nameMustBeUnique")); + service.preValidate(laboratory); + } catch (OrganisationNameMustBeUniqueException e) { + addFieldError("company.name", t("wao.ui.form.Organisation.error.nameMustBeUnique")); } } @@ -78,7 +78,7 @@ public class EditCompanyAction extends WaoJspActionSupport implements Preparable @Override public String execute() { - service.save(company); + service.save(laboratory); session.addMessage(t("wao.ui.action.save.success")); @@ -86,12 +86,12 @@ public class EditCompanyAction extends WaoJspActionSupport implements Preparable } - public String getCompanyId() { - return companyId; + public String getLaboratoryId() { + return laboratoryId; } - public Company getCompany() { - return company; + public Laboratory getLaboratory() { + return laboratory; } } diff --git a/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java index 3a0feb4..d231080 100644 --- a/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java +++ b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java @@ -48,10 +48,12 @@ public class EditWaoUserAction extends WaoJspActionSupport implements Preparable protected Optional<String> optionalWaoUserId = Optional.absent(); - protected Optional<String> optionalCompanyId = Optional.absent(); + protected Optional<String> optionalOrganisationId = Optional.absent(); protected UpdateWaoUserCommand updateWaoUserCommand; + protected String companyId; + public void setService(WaoUsersService service) { this.service = service; } @@ -60,14 +62,14 @@ public class EditWaoUserAction extends WaoJspActionSupport implements Preparable this.optionalWaoUserId = Optional.fromNullable(Strings.emptyToNull(waoUserId)); } - public void setCompanyId(String companyId) { - this.optionalCompanyId = Optional.fromNullable(Strings.emptyToNull(companyId)); + public void setOrganisationId(String organisationId) { + this.optionalOrganisationId = Optional.fromNullable(Strings.emptyToNull(organisationId)); } @Override public void prepare() { - updateWaoUserCommand = service.newUpdateWaoUserCommand(getObsProgram(), optionalWaoUserId, optionalCompanyId); + updateWaoUserCommand = service.newUpdateWaoUserCommand(getObsProgram(), optionalWaoUserId, optionalOrganisationId); } @@ -113,7 +115,7 @@ public class EditWaoUserAction extends WaoJspActionSupport implements Preparable session.addMessage(t("wao.ui.form.updateWaoUserCommand.success", updateWaoUserCommand.getWaoUser().getLogin())); // for redirection - setCompanyId(updateWaoUserCommand.getWaoUser().getCompany().getTopiaId()); + setOrganisationId(updateWaoUserCommand.getWaoUser().getCompany().getTopiaId()); String result; if (getAuthenticatedWaoUser().isAuthorizedToViewCompanyUsers()) { @@ -131,7 +133,7 @@ public class EditWaoUserAction extends WaoJspActionSupport implements Preparable } public String getCompanyId() { - return optionalCompanyId.orNull(); + return optionalOrganisationId.orNull(); } public UpdateWaoUserCommand getUpdateWaoUserCommand() { diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompanyNameMustBeUniqueException.java b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/LaboratoriesAction.java similarity index 51% rename from wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompanyNameMustBeUniqueException.java rename to wao-web/src/main/java/fr/ifremer/wao/web/action/administration/LaboratoriesAction.java index 66e47fc..e59ac0a 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompanyNameMustBeUniqueException.java +++ b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/LaboratoriesAction.java @@ -1,8 +1,8 @@ -package fr.ifremer.wao.services.service.administration; +package fr.ifremer.wao.web.action.administration; /* * #%L - * Wao :: Services + * Wao :: Web * %% * Copyright (C) 2009 - 2014 Ifremer * %% @@ -21,9 +21,34 @@ package fr.ifremer.wao.services.service.administration; * #L% */ -import fr.ifremer.wao.WaoException; +import com.opensymphony.xwork2.Preparable; +import fr.ifremer.wao.entity.Laboratory; +import fr.ifremer.wao.services.service.administration.LaboratoriesService; +import fr.ifremer.wao.web.WaoJspActionSupport; -public class CompanyNameMustBeUniqueException extends WaoException { +import java.util.List; + +public class LaboratoriesAction extends WaoJspActionSupport implements Preparable { private static final long serialVersionUID = 1L; + + protected LaboratoriesService service; + + protected List<Laboratory> laboratories; + + public void setService(LaboratoriesService service) { + this.service = service; + } + + @Override + public void prepare() { + + laboratories = service.getAllLaboratories(); + + } + + public List<Laboratory> getLaboratories() { + return laboratories; + } + } diff --git a/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/WaoUsersAction.java b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/WaoUsersAction.java index fa687e7..df8f6b1 100644 --- a/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/WaoUsersAction.java +++ b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/WaoUsersAction.java @@ -37,7 +37,7 @@ public class WaoUsersAction extends WaoJspActionSupport implements Preparable { protected transient WaoUsersService service; - protected Optional<String> optionalCompanyId = Optional.absent(); + protected Optional<String> optionalOrganisationId = Optional.absent(); protected List<WaoUser> waoUsers; @@ -45,12 +45,12 @@ public class WaoUsersAction extends WaoJspActionSupport implements Preparable { this.service = service; } - public void setCompanyId(String companyId) { - this.optionalCompanyId = Optional.fromNullable(Strings.emptyToNull(companyId)); + public void setOrganisationId(String organisationId) { + this.optionalOrganisationId = Optional.fromNullable(Strings.emptyToNull(organisationId)); } - public String getCompanyId() { - return optionalCompanyId.orNull(); + public String getOrganisationId() { + return optionalOrganisationId.orNull(); } @Override @@ -59,10 +59,10 @@ public class WaoUsersAction extends WaoJspActionSupport implements Preparable { Preconditions.checkState(getAuthenticatedWaoUser().isAuthorizedToViewCompanyUsers()); if (getAuthenticatedWaoUser().isCoordinator()) { - optionalCompanyId = Optional.of(getAuthenticatedWaoUser().getCompany().getTopiaId()); + optionalOrganisationId = Optional.of(getAuthenticatedWaoUser().getCompany().getTopiaId()); } - waoUsers = service.getWaoUsers(optionalCompanyId); + waoUsers = service.getWaoUsers(optionalOrganisationId); } diff --git a/wao-web/src/main/resources/i18n/wao-web_en_GB.properties b/wao-web/src/main/resources/i18n/wao-web_en_GB.properties index d2c52be..616e625 100644 --- a/wao-web/src/main/resources/i18n/wao-web_en_GB.properties +++ b/wao-web/src/main/resources/i18n/wao-web_en_GB.properties @@ -28,6 +28,7 @@ wao.ui.action.contactAdmin=Contact an admin wao.ui.action.create=Create wao.ui.action.createAssociatedContact=Create a new contact for this sample row wao.ui.action.createCompany=Create a company +wao.ui.action.createLaboratory=Create a laboratory wao.ui.action.createNews=Create news wao.ui.action.createNews.success=News created wao.ui.action.createSampleRow=Add a sample row to the plan @@ -93,6 +94,7 @@ wao.ui.action.viewCompanyWaoUsers=View users for this company wao.ui.action.viewElligibleBoats=View eligible boats wao.ui.action.viewEstimated=View estimated observation effort wao.ui.action.viewIndicatorsHistory=View indicators historic +wao.ui.action.viewLaboratoryWaoUsers=View laboratory users wao.ui.action.viewReal=View real observation effort wao.ui.action.viewSampleRowLog=View sample row log wao.ui.action.viewShipOwnerBoats=View all boats for this shipowner @@ -230,6 +232,8 @@ wao.ui.field.Contact.validationCompany=Company validation wao.ui.field.Contact.validationProgram=Program validation wao.ui.field.FishingZone.facadeName=Facade wao.ui.field.FishingZone.sectorName=Sector +wao.ui.field.Laboratory.active=Active +wao.ui.field.Laboratory.name=Name wao.ui.field.SampleRow.appliedCoverageRate=Applied coverage rate wao.ui.field.SampleRow.averageObservationsCount=Observations wao.ui.field.SampleRow.averageTideTime=Average tide time @@ -287,7 +291,6 @@ wao.ui.form.Boat.name=Name wao.ui.form.Boat.registrationCode=Registration number wao.ui.form.BoatInfos.success=Modifications successfuly saved wao.ui.form.BoatInfos.validation.invalidPostalCode=This is not a valid postal code -wao.ui.form.Company.error.nameMustBeUnique=Company name must be unique wao.ui.form.Company.title.creation=Create a new company wao.ui.form.Company.title.edition=Edit company %s wao.ui.form.Contact.contactCreatedOn=Contact created on %s @@ -317,6 +320,8 @@ wao.ui.form.Contact.error.observationEndDateBeforeBeginDate=Observation end date wao.ui.form.Contact.error.observedDataControlToCorrectionAsked=Observed data control shows that a correction is asked wao.ui.form.Contact.error.transmissionDateBeforeDataInputDate=Transmission date must be after data input date wao.ui.form.Contact.error.unwantedContactStateMotif=Contact state motif should not be provided +wao.ui.form.Laboratory.title.creation=Create a laboratory +wao.ui.form.Organisation.error.nameMustBeUnique=Company name must be unique wao.ui.form.SampleRow.boatsDescription=This field contains registration numbers of the ships that areeligible for this ligne. You can use any separator to separate numbers (space, dot, line-return, comma) wao.ui.form.SampleRow.error.codeMustBeUnique=Sample row code must be unique wao.ui.form.SampleRow.error.missingDcf5Codes=You must provide at least one DCF5 code @@ -494,6 +499,7 @@ wao.ui.page.SamplingPlan.title=Sampling plan wao.ui.page.Synthesis.title=Synthesis wao.ui.page.UserProfileForm.title=Profile management wao.ui.page.companies.title=Companies +wao.ui.page.laboratories.title=Laboratories wao.ui.page.waoUsers.title=Users wao.ui.page.waoUsers.titleForCompany=Users for company %s wao.ui.periodToMustBeAfterPeriodFrom=The end of the period must be after the beginning @@ -576,3 +582,5 @@ wao.ui.userMustAcceptCgu=You must accept the terms of use wao.ui.validLogin=Valid identifier wao.ui.validation.validation.contacts.failure.not.valid=Could not validate contact\: %s wao.ui.wysihtml5.lang=en +wao.ui.action.deleteLaboratory.success=Labotarory deletion successful +wao.ui.action.deleteLaboratory.failure=Labotarory deletion failure diff --git a/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties b/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties index a717858..c1e1f31 100644 --- a/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties +++ b/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties @@ -29,6 +29,7 @@ wao.ui.action.contactAdmin=Contacter un responsable ObsMer wao.ui.action.create=Créer wao.ui.action.createAssociatedContact=Créer un contact pour cette ligne wao.ui.action.createCompany=Créer une société +wao.ui.action.createLaboratory=Créer un laboratoire wao.ui.action.createNews=Créer une actualité wao.ui.action.createNews.success=Actualité enregistrée avec succès wao.ui.action.createSampleRow=Ajouter une ligne au plan @@ -94,6 +95,7 @@ wao.ui.action.viewCompanyWaoUsers=Voir les utilisateurs associés à cette soci wao.ui.action.viewElligibleBoats=Consulter les navires éligibles wao.ui.action.viewEstimated=Voir l'effort d'observation estimé wao.ui.action.viewIndicatorsHistory=Voir l'historique des modifications des indicateurs +wao.ui.action.viewLaboratoryWaoUsers=Voir les utilisateurs associés à ce laboratoire wao.ui.action.viewReal=Voir l'effort d'observation réalisé wao.ui.action.viewSampleRowLog=Consulter l'historique de cette ligne wao.ui.action.viewShipOwnerBoats=Voir tous les navires de cet armateur @@ -231,6 +233,8 @@ wao.ui.field.Contact.validationCompany=Validation société wao.ui.field.Contact.validationProgram=Validation programme wao.ui.field.FishingZone.facadeName=Façade wao.ui.field.FishingZone.sectorName=Zone +wao.ui.field.Laboratory.active=Actif +wao.ui.field.Laboratory.name=Nom wao.ui.field.SampleRow.appliedCoverageRate=Taux de couverture appliqué wao.ui.field.SampleRow.averageObservationsCount=Nombre d'observations wao.ui.field.SampleRow.averageTideTime=Durée moyenne d'une marée @@ -288,7 +292,6 @@ wao.ui.form.Boat.name=Nom wao.ui.form.Boat.registrationCode=Immatriculation wao.ui.form.BoatInfos.success=Les informations ont bien été enregistrées wao.ui.form.BoatInfos.validation.invalidPostalCode=Ce n'est pas un code postal valide -wao.ui.form.Company.error.nameMustBeUnique=Le nom de la société doit être unique wao.ui.form.Company.title.creation=Création d'une société wao.ui.form.Company.title.edition=Modification de la société %s wao.ui.form.Contact.contactCreatedOn=Contact créé le %s @@ -318,6 +321,8 @@ wao.ui.form.Contact.error.observationEndDateBeforeBeginDate=La date de fin d'obs wao.ui.form.Contact.error.observedDataControlToCorrectionAsked=Un contact ne peut être accepté si le contrôle des données observées indique qu'une correction est demandée wao.ui.form.Contact.error.transmissionDateBeforeDataInputDate=Il faut que la date de transmission de la restitution soit après la date de saisie des données wao.ui.form.Contact.error.unwantedContactStateMotif=Il ne faut pas préciser de motif de refus +wao.ui.form.Laboratory.title.creation=Création d'un laboratoire +wao.ui.form.Organisation.error.nameMustBeUnique=Le nom de la société doit être unique wao.ui.form.SampleRow.boatsDescription=Ce champs correspond aux immatriculations des navires qui sont éligibles pour cette ligne. Vous pouvez utiliser n'importe quel séparateur pour séparer les immatriculations (virgule, point, espace ou saut de ligne) wao.ui.form.SampleRow.error.codeMustBeUnique=Le code de la ligne doit être unique wao.ui.form.SampleRow.error.missingDcf5Codes=Il faut préciser au moins un code DCF5 @@ -495,6 +500,7 @@ wao.ui.page.SamplingPlan.title=Plan d'échantillonnage wao.ui.page.Synthesis.title=Synthèse wao.ui.page.UserProfileForm.title=Gestion du profil wao.ui.page.companies.title=Sociétés +wao.ui.page.laboratories.title=Laboratoires wao.ui.page.waoUsers.title=Utilisateurs wao.ui.page.waoUsers.titleForCompany=Utilisateurs de la société %s wao.ui.periodToMustBeAfterPeriodFrom=La période de temps doit se terminer après avoir commencé @@ -576,3 +582,5 @@ wao.ui.userList=Liste des utilisateurs wao.ui.userMustAcceptCgu=Vous devez accepter les conditions d'utilisation pour utiliser Wao wao.ui.validLogin=Identifiant valide wao.ui.wysihtml5.lang=fr-FR +wao.ui.action.deleteLaboratory.success=Laboratoire supprimé avec succès +wao.ui.action.deleteLaboratory.failure=Erreur lors de la suppression du laboratoire diff --git a/wao-web/src/main/webapp/WEB-INF/content/administration/edit-laboratory.jsp b/wao-web/src/main/webapp/WEB-INF/content/administration/edit-laboratory.jsp new file mode 100644 index 0000000..a6968f1 --- /dev/null +++ b/wao-web/src/main/webapp/WEB-INF/content/administration/edit-laboratory.jsp @@ -0,0 +1,67 @@ +<%-- + #%L + Wao :: Web + %% + Copyright (C) 2009 - 2014 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero 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 Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + #L% + --%> +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@taglib uri="/struts-tags" prefix="s" %> + +<html> + <head> + <title> + <s:if test="laboratoryId == null"> + <s:text name="wao.ui.form.Laboratory.title.creation" /> + </s:if> + <s:else> + <s:property value="%{t('wao.ui.form.Laboratory.title.edition', laboratory.name)}" /> + </s:else> + </title> + <content tag="mainClass">form</content> + </head> + + <s:form> + + <h1> + <s:if test="laboratoryId == null"> + <s:text name="wao.ui.form.Laboratory.title.creation" /> + </s:if> + <s:else> + <s:property value="%{t('wao.ui.form.Laboratory.title.edition', laboratory.name)}" /> + </s:else> + </h1> + + <s:hidden name="laboratoryId" value="%{laboratoryId}" /> + + <s:textfield name="laboratory.name" label="%{getText('wao.ui.field.Laboratory.name')}" requiredLabel="true" cssClass="input-xlarge" /> + + <s:checkbox name="laboratory.active" label="%{getText('wao.ui.field.Laboratory.active')}" /> + + <div class="form-actions"> + <s:url action="laboratories" id="laboratoriesUrl" /> + <s:a href="%{laboratoriesUrl}" cssClass="btn"> + <i class="icon-chevron-left"></i> <s:text name="wao.ui.action.cancel" /> + </s:a> + + <s:submit type="button" cssClass="btn"> + <i class="icon-hdd"></i> <s:text name="wao.ui.action.save" /> + </s:submit> + </div> + + </s:form> + +</html> diff --git a/wao-web/src/main/webapp/WEB-INF/content/administration/laboratories.jsp b/wao-web/src/main/webapp/WEB-INF/content/administration/laboratories.jsp new file mode 100644 index 0000000..cd1e272 --- /dev/null +++ b/wao-web/src/main/webapp/WEB-INF/content/administration/laboratories.jsp @@ -0,0 +1,100 @@ +<%-- + #%L + Wao :: Web + %% + Copyright (C) 2009 - 2014 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero 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 Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + #L% + --%> +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@taglib uri="/struts-tags" prefix="s" %> + +<html> + + <head> + <title><s:text name="wao.ui.page.laboratories.title" /></title> + <content tag="mainClass">form</content> + </head> + + <div class="form-wrapper"> + <h1><s:text name="wao.ui.page.laboratories.title" /></h1> + + <table class="table table-bordered"> + <tr> + <th> + <s:text name="wao.ui.field.Laboratory.name" /> + </th> + <th> + <s:text name="wao.ui.field.Laboratory.active" /> + </th> + <th class="actions"> + <s:text name="wao.ui.actions" /> + </th> + </tr> + <s:iterator value="laboratories"> + <tr> + <td<s:if test=" ! active"> class="inactive"</s:if>> + <s:property value="name" /> + </td> + <td> + <s:if test="active"> + <s:text name="wao.ui.misc.yes" /> + </s:if> + <s:else> + <s:text name="wao.ui.misc.no" /> + </s:else> + </td> + <td class="actions"> + <s:url action="edit-laboratory!input" id="editLaboratoryUrl"> + <s:param name="laboratoryId" value="topiaId" /> + </s:url> + <s:a href="%{editLaboratoryUrl}"> + <i class="icon-edit"></i> <s:text name="wao.ui.action.edit" /> + </s:a> + + <s:url action="delete-laboratory" id="deleteLaboratoryUrl"> + <s:param name="laboratoryId" value="topiaId" /> + </s:url> + <s:a href="%{deleteLaboratoryUrl}"> + <i class="icon-trash"></i> <s:text name="wao.ui.action.delete" /> + </s:a> + + <s:url action="wao-users" id="waoUsersUrl"> + <s:param name="organisationId" value="topiaId" /> + </s:url> + <s:a href="%{waoUsersUrl}"> + <i class="icon-user"></i> <s:text name="wao.ui.action.viewLaboratoryWaoUsers" /> + </s:a> + + <s:url action="edit-wao-user!input" id="createWaoUserUrl"> + <s:param name="organisationId" value="topiaId" /> + </s:url> + <s:a href="%{createWaoUserUrl}"> + <i class="icon-plus"></i> <s:text name="wao.ui.action.createWaoUser" /> + </s:a> + </td> + </tr> + </s:iterator> + </table> + + <div class="form-actions"> + <s:url action="edit-laboratory!input" id="createLaboratoryUrl" /> + <s:a href="%{createLaboratoryUrl}" cssClass="btn float-right"> + <i class="icon-plus"></i> <s:text name="wao.ui.action.createLaboratory" /> + </s:a> + </div> + </div> + +</html> diff --git a/wao-web/src/main/webapp/WEB-INF/decorators/layout.jsp b/wao-web/src/main/webapp/WEB-INF/decorators/layout.jsp index 211341f..2ad1350 100644 --- a/wao-web/src/main/webapp/WEB-INF/decorators/layout.jsp +++ b/wao-web/src/main/webapp/WEB-INF/decorators/layout.jsp @@ -204,6 +204,14 @@ </s:a> </li> </s:if> + <s:if test="authenticatedWaoUser.authorizedToViewLaboratories"> + <li> + <s:url namespace="/administration" action="laboratories" id="laboratoriesUrl" /> + <s:a href="%{laboratoriesUrl}"> + <i class="fa fa-flask"></i> <s:text name="wao.ui.page.laboratories.title" /> + </s:a> + </li> + </s:if> <s:if test="authenticatedWaoUser.authorizedToViewCompanyUsers"> <li> <s:url namespace="/administration" action="wao-users" id="companyUsersUrl"> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository wao. See http://git.codelutin.com/wao.git commit f7a23face43333e21c40740a0b100f93c7e5425b Merge: 2379fdd 8a9d440 Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Dec 4 15:08:06 2014 +0100 Ajout de la notion de laboratoire Ifremer (fixes #2262) .../java/fr/ifremer/wao/AbstractWaoTopiaDao.java | 16 ++++ .../java/fr/ifremer/wao/entity/CompanyImpl.java | 5 ++ .../java/fr/ifremer/wao/entity/LaboratoryImpl.java | 12 +++ .../java/fr/ifremer/wao/entity/WaoUserImpl.java | 16 ++-- .../V4_3__add_species,_add_laboratories.sql | 1 + wao-persistence/src/main/xmi/wao-model.zargo | Bin 61426 -> 61324 bytes .../ifremer/wao/services/AuthenticatedWaoUser.java | 6 +- .../fr/ifremer/wao/services/ObsMerFixtures.java | 4 +- .../wao/services/service/WaoServiceSupport.java | 10 +++ .../service/administration/CompaniesService.java | 36 +++----- .../administration/LaboratoriesService.java | 71 +++++++++++++++ ... => OrganisationNameMustBeUniqueException.java} | 2 +- .../administration/OrganisationsService.java | 55 ++++++++++++ .../administration/UpdateWaoUserCommand.java | 32 +++---- .../service/administration/WaoUsersService.java | 28 +++--- .../administration/DeleteLaboratoryAction.java | 73 +++++++++++++++ .../action/administration/EditCompanyAction.java | 6 +- ...ompanyAction.java => EditLaboratoryAction.java} | 48 +++++----- .../action/administration/EditWaoUserAction.java | 16 ++-- .../action/administration/LaboratoriesAction.java | 33 ++++++- .../web/action/administration/WaoUsersAction.java | 14 +-- .../main/resources/i18n/wao-web_en_GB.properties | 11 ++- .../main/resources/i18n/wao-web_fr_FR.properties | 11 ++- .../content/administration/edit-laboratory.jsp | 67 ++++++++++++++ .../content/administration/edit-wao-user.jsp | 16 ++-- .../content/administration/laboratories.jsp | 100 +++++++++++++++++++++ .../src/main/webapp/WEB-INF/decorators/layout.jsp | 8 ++ 27 files changed, 577 insertions(+), 120 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository wao. See http://git.codelutin.com/wao.git commit 296e68e04635a8f8f9de9412098b6e6ff9688b7a Merge: f7a23fa 0715813 Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Dec 4 15:09:13 2014 +0100 Ajout d'un référentiel d'espèces cibles (refs #5973) .../wao/services/service/WaoServiceSupport.java | 5 +++ .../service/administration/ReferentialService.java | 44 +++++++++++++++++++++- .../services/service/csv/SpeciesImportModel.java | 24 ++++++++++++ .../administration/ReferentialServiceTest.java | 16 ++++++++ wao-services/src/test/resources/import/especes.csv | 5 +++ .../fr/ifremer/wao/web/WaoJspActionSupport.java | 4 ++ .../action/administration/ImportSpeciesAction.java | 18 +++++++++ .../main/resources/i18n/wao-web_en_GB.properties | 2 + .../main/resources/i18n/wao-web_fr_FR.properties | 2 + .../administration/referential-management.jsp | 18 +++++++++ 10 files changed, 137 insertions(+), 1 deletion(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository wao. See http://git.codelutin.com/wao.git commit 368202f343177e4b963838adfc5b3357e6815d17 Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Dec 4 15:23:58 2014 +0100 Tri bundle --- wao-web/src/main/resources/i18n/wao-web_en_GB.properties | 4 ++-- wao-web/src/main/resources/i18n/wao-web_fr_FR.properties | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/wao-web/src/main/resources/i18n/wao-web_en_GB.properties b/wao-web/src/main/resources/i18n/wao-web_en_GB.properties index f2cb7ad..aa20479 100644 --- a/wao-web/src/main/resources/i18n/wao-web_en_GB.properties +++ b/wao-web/src/main/resources/i18n/wao-web_en_GB.properties @@ -46,6 +46,8 @@ wao.ui.action.deleteContact=Delete contact wao.ui.action.deleteContact.confirm=Are you sure you want to delete this contact ? wao.ui.action.deleteContact.failure=The contact cannot be deleted wao.ui.action.deleteContact.success=Contact deleted successfully +wao.ui.action.deleteLaboratory.failure=Labotarory deletion failure +wao.ui.action.deleteLaboratory.success=Labotarory deletion successful wao.ui.action.deleteNews=Delete this news wao.ui.action.deleteNews.confirm=Are you sure you want to delete this news ? wao.ui.action.deleteSampleRow=Delete this sample row @@ -584,5 +586,3 @@ wao.ui.userMustAcceptCgu=You must accept the terms of use wao.ui.validLogin=Valid identifier wao.ui.validation.validation.contacts.failure.not.valid=Could not validate contact\: %s wao.ui.wysihtml5.lang=en -wao.ui.action.deleteLaboratory.success=Labotarory deletion successful -wao.ui.action.deleteLaboratory.failure=Labotarory deletion failure diff --git a/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties b/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties index ffb51d0..b0cd8d3 100644 --- a/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties +++ b/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties @@ -47,6 +47,8 @@ wao.ui.action.deleteContact=Supprimer le contact wao.ui.action.deleteContact.confirm=Êtes-vous sûr de vouloir supprimer définitivement ce contact ? wao.ui.action.deleteContact.failure=La suppression du contact a échoué wao.ui.action.deleteContact.success=Le contact a bien été supprimé +wao.ui.action.deleteLaboratory.failure=Erreur lors de la suppression du laboratoire +wao.ui.action.deleteLaboratory.success=Laboratoire supprimé avec succès wao.ui.action.deleteNews=Supprimer la nouvelle wao.ui.action.deleteNews.confirm=Êtes-vous sûr de vouloir supprimer définitivement cette nouvelle ? wao.ui.action.deleteSampleRow=Supprimer la ligne du plan @@ -584,5 +586,3 @@ wao.ui.userList=Liste des utilisateurs wao.ui.userMustAcceptCgu=Vous devez accepter les conditions d'utilisation pour utiliser Wao wao.ui.validLogin=Identifiant valide wao.ui.wysihtml5.lang=fr-FR -wao.ui.action.deleteLaboratory.success=Laboratoire supprimé avec succès -wao.ui.action.deleteLaboratory.failure=Erreur lors de la suppression du laboratoire -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository wao. See http://git.codelutin.com/wao.git commit 159153cd5a22762d30dce0564dc828478230ec63 Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Dec 4 15:24:09 2014 +0100 Correction d'un bogue suscité par l'utilisation de instanceof sur des entités Hibernate --- .../java/fr/ifremer/wao/entity/CompanyImpl.java | 5 +++++ .../java/fr/ifremer/wao/entity/WaoUserImpl.java | 10 +--------- wao-persistence/src/main/xmi/wao-model.zargo | Bin 61324 -> 61366 bytes 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/wao-persistence/src/main/java/fr/ifremer/wao/entity/CompanyImpl.java b/wao-persistence/src/main/java/fr/ifremer/wao/entity/CompanyImpl.java index 10fa93e..8b79317 100644 --- a/wao-persistence/src/main/java/fr/ifremer/wao/entity/CompanyImpl.java +++ b/wao-persistence/src/main/java/fr/ifremer/wao/entity/CompanyImpl.java @@ -41,6 +41,11 @@ public class CompanyImpl extends CompanyAbstract { } @Override + public Company getCompany() { + return this; + } + + @Override public String toString() { return "CompanyImpl{name=" + getName() + "}"; } diff --git a/wao-persistence/src/main/java/fr/ifremer/wao/entity/WaoUserImpl.java b/wao-persistence/src/main/java/fr/ifremer/wao/entity/WaoUserImpl.java index 62b4fad..7ad38c9 100644 --- a/wao-persistence/src/main/java/fr/ifremer/wao/entity/WaoUserImpl.java +++ b/wao-persistence/src/main/java/fr/ifremer/wao/entity/WaoUserImpl.java @@ -95,15 +95,7 @@ public class WaoUserImpl extends WaoUserAbstract { @Override public Company getCompany() { - Organisation organisation = getOrganisation(); - Company company; - if (organisation instanceof Laboratory) { - company = ((Laboratory) organisation).getCompany(); - } else if (organisation instanceof Company) { - company = (Company) organisation; - } else { - throw new IllegalStateException(organisation.toString()); - } + Company company = getOrganisation().getCompany(); return company; } diff --git a/wao-persistence/src/main/xmi/wao-model.zargo b/wao-persistence/src/main/xmi/wao-model.zargo index c9ea2f3..5f27d3a 100644 Binary files a/wao-persistence/src/main/xmi/wao-model.zargo and b/wao-persistence/src/main/xmi/wao-model.zargo differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm