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>.