r1727 - in trunk: wao-services/src/main/java/fr/ifremer/wao/services/service wao-services/src/main/java/fr/ifremer/wao/services/service/administration wao-web/src/main/java/fr/ifremer/wao/web/action/administration wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer wao-web/src/main/resources/i18n wao-web/src/main/webapp/WEB-INF/content/administration
Author: bleny Date: 2014-03-19 12:26:36 +0100 (Wed, 19 Mar 2014) New Revision: 1727 Url: http://forge.codelutin.com/projects/wao/repository/revisions/1727 Log: check uniquenesses on Company#name WaoUser#login SampleRow#code Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SampleRowCodeMustBeUniqueException.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompanyNameMustBeUniqueException.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/LoginMustBeUniqueException.java Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanService.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompaniesService.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditCompanyAction.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/WaoUsersAction.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/EditSampleRowAction.java trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties trunk/wao-web/src/main/webapp/WEB-INF/content/administration/companies.jsp trunk/wao-web/src/main/webapp/WEB-INF/content/administration/edit-company.jsp trunk/wao-web/src/main/webapp/WEB-INF/content/administration/edit-wao-user.jsp trunk/wao-web/src/main/webapp/WEB-INF/content/administration/wao-users.jsp Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanService.java 2014-03-18 17:28:59 UTC (rev 1726) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanService.java 2014-03-19 11:26:36 UTC (rev 1727) @@ -3,6 +3,7 @@ import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import fr.ifremer.wao.SampleRowsFilter; @@ -185,7 +186,7 @@ } public void preValidate(AuthenticatedWaoUser authenticatedWaoUser, UpdateSampleRowCommand updateSampleRowCommand) - throws UnknownBoatImmatriculationsException, UnknownFishingGearDcfCodeException, UnknownTargetSpeciesDcfCodeException { + throws UnknownBoatImmatriculationsException, UnknownFishingGearDcfCodeException, UnknownTargetSpeciesDcfCodeException, SampleRowCodeMustBeUniqueException { String elligibleBoatImmatriculations = updateSampleRowCommand.getElligibleBoatImmatriculations(); @@ -269,6 +270,14 @@ sampleMonthDao.delete(sampleMonth); } + SampleRowTopiaDao dao = getSampleRowDao(); + List<SampleRow> existingSampleRowsForTheSameCode = dao.forCodeEquals(sampleRow.getCode()).findAll(); + if (existingSampleRowsForTheSameCode.size() > 1) { + throw new SampleRowCodeMustBeUniqueException(); + } else if (existingSampleRowsForTheSameCode.size() == 1 && ! Iterables.getOnlyElement(existingSampleRowsForTheSameCode).equals(sampleRow)) { + throw new SampleRowCodeMustBeUniqueException(); + } + } public void save(UpdateSampleRowCommand updateSampleRowCommand) { Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SampleRowCodeMustBeUniqueException.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SampleRowCodeMustBeUniqueException.java (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SampleRowCodeMustBeUniqueException.java 2014-03-19 11:26:36 UTC (rev 1727) @@ -0,0 +1,7 @@ +package fr.ifremer.wao.services.service; + +import fr.ifremer.wao.WaoException; + +public class SampleRowCodeMustBeUniqueException extends WaoException { + +} Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompaniesService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompaniesService.java 2014-03-18 17:28:59 UTC (rev 1726) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompaniesService.java 2014-03-19 11:26:36 UTC (rev 1727) @@ -1,5 +1,6 @@ package fr.ifremer.wao.services.service.administration; +import com.google.common.collect.Iterables; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.CompanyImpl; import fr.ifremer.wao.entity.CompanyTopiaDao; @@ -74,4 +75,15 @@ } + public void preValidate(Company company) throws CompanyNameMustBeUniqueException { + + 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(); + } + + } } Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompanyNameMustBeUniqueException.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompanyNameMustBeUniqueException.java (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/CompanyNameMustBeUniqueException.java 2014-03-19 11:26:36 UTC (rev 1727) @@ -0,0 +1,7 @@ +package fr.ifremer.wao.services.service.administration; + +import fr.ifremer.wao.WaoException; + +public class CompanyNameMustBeUniqueException extends WaoException { + +} Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/LoginMustBeUniqueException.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/LoginMustBeUniqueException.java (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/LoginMustBeUniqueException.java 2014-03-19 11:26:36 UTC (rev 1727) @@ -0,0 +1,7 @@ +package fr.ifremer.wao.services.service.administration; + +import fr.ifremer.wao.WaoException; + +public class LoginMustBeUniqueException extends WaoException { + +} Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java 2014-03-18 17:28:59 UTC (rev 1726) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/WaoUsersService.java 2014-03-19 11:26:36 UTC (rev 1727) @@ -2,6 +2,7 @@ import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.Boats; @@ -105,7 +106,7 @@ } - public void preValidate(UpdateWaoUserCommand updateWaoUserCommand) throws UnknownBoatImmatriculationsException { + public void preValidate(UpdateWaoUserCommand updateWaoUserCommand) throws UnknownBoatImmatriculationsException, LoginMustBeUniqueException { ObsProgram obsProgram = updateWaoUserCommand.getObsProgram(); WaoUser waoUser = updateWaoUserCommand.getWaoUser(); @@ -116,6 +117,14 @@ waoUser.setCanReadBoats(boatsFromImmatriculations); } + WaoUserTopiaDao dao = getWaoUserDao(); + List<WaoUser> existingWaoUsersForTheSameLogin = dao.forLoginEquals(waoUser.getLogin()).findAll(); + if (existingWaoUsersForTheSameLogin.size() > 1) { + throw new LoginMustBeUniqueException(); + } else if (existingWaoUsersForTheSameLogin.size() == 1 && ! Iterables.getOnlyElement(existingWaoUsersForTheSameLogin).equals(waoUser)) { + throw new LoginMustBeUniqueException(); + } + } public void save(UpdateWaoUserCommand updateWaoUserCommand) { Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditCompanyAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditCompanyAction.java 2014-03-18 17:28:59 UTC (rev 1726) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditCompanyAction.java 2014-03-19 11:26:36 UTC (rev 1727) @@ -3,6 +3,7 @@ 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.web.WaoJspActionSupport; import org.apache.commons.lang3.StringUtils; import org.apache.struts2.convention.annotation.Result; @@ -41,6 +42,17 @@ } @Override + public void validate() { + + try { + service.preValidate(company); + } catch (CompanyNameMustBeUniqueException e) { + addFieldError("company.name", t("wao.ui.form.Company.error.nameMustBeUnique")); + } + + } + + @Override public String execute() { service.save(company); Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java 2014-03-18 17:28:59 UTC (rev 1726) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/EditWaoUserAction.java 2014-03-19 11:26:36 UTC (rev 1727) @@ -5,6 +5,7 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; import com.opensymphony.xwork2.Preparable; +import fr.ifremer.wao.services.service.administration.LoginMustBeUniqueException; import fr.ifremer.wao.services.service.administration.UnknownBoatImmatriculationsException; import fr.ifremer.wao.services.service.administration.UpdateWaoUserCommand; import fr.ifremer.wao.services.service.administration.UpdateWaoUserCommandPasswordStrategy; @@ -58,6 +59,8 @@ service.preValidate(updateWaoUserCommand); } catch (UnknownBoatImmatriculationsException unknownBoatImmatriculations) { addFieldError("updateWaoUserCommand.canReadBoats", t("wao.ui.unknownBoatImmatriculations", Joiner.on(", ").join(unknownBoatImmatriculations.getImmatriculations()))); + } catch (LoginMustBeUniqueException e) { + addFieldError("updateWaoUserCommand.waoUser.login", t("wao.ui.form.updateWaoUserCommand.error.loginMustBeUnique")); } if (updateWaoUserCommand.getPasswordStrategy().isDefinePassword()) { @@ -77,8 +80,6 @@ addFieldError("updateWaoUserCommand.companyId", t("wao.ui.form.updateWaoUserCommand.requiredCompany")); } - // FIXME brendan 06/03/14 check login uniqueness - } @Override Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/WaoUsersAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/WaoUsersAction.java 2014-03-18 17:28:59 UTC (rev 1726) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/WaoUsersAction.java 2014-03-19 11:26:36 UTC (rev 1727) @@ -26,6 +26,10 @@ this.optionalCompanyId = Optional.fromNullable(Strings.emptyToNull(companyId)); } + public String getCompanyId() { + return optionalCompanyId.orNull(); + } + @Override public void prepare() { Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/EditSampleRowAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/EditSampleRowAction.java 2014-03-18 17:28:59 UTC (rev 1726) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/obsmer/EditSampleRowAction.java 2014-03-19 11:26:36 UTC (rev 1727) @@ -7,6 +7,7 @@ import fr.ifremer.wao.WaoUtils; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.services.service.ObsMerSamplingPlanService; +import fr.ifremer.wao.services.service.SampleRowCodeMustBeUniqueException; import fr.ifremer.wao.services.service.UpdateSampleRowCommand; import fr.ifremer.wao.services.service.administration.UnknownBoatImmatriculationsException; import fr.ifremer.wao.services.service.administration.UnknownFishingGearDcfCodeException; @@ -72,6 +73,8 @@ addFieldError("updateSampleRowCommand.dcf5Codes", t("wao.ui.form.SampleRow.error.unknownFishingGearDcfCode", e.getCode())); } catch (UnknownTargetSpeciesDcfCodeException e) { addFieldError("updateSampleRowCommand.dcf5Codes", t("wao.ui.form.SampleRow.error.unknownTargetSpeciesDcfCode", e.getCode())); + } catch (SampleRowCodeMustBeUniqueException e) { + addFieldError("updateSampleRowCommand.code", t("wao.ui.form.SampleRow.error.codeMustBeUnique")); } if (updateSampleRowCommand.isCreation()) { Modified: trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties =================================================================== --- trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties 2014-03-18 17:28:59 UTC (rev 1726) +++ trunk/wao-web/src/main/resources/i18n/wao-web_en_GB.properties 2014-03-19 11:26:36 UTC (rev 1727) @@ -203,7 +203,11 @@ wao.ui.filters.filters=Search filters wao.ui.filters.refresh=Refresh filters wao.ui.forgotPassword=Forgot password ? +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.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 wao.ui.form.SampleRow.error.missingFishingZones=You must at least provide a fishing zone wao.ui.form.SampleRow.error.missingLogComment=You must add a comment to explain why you modified the line @@ -253,6 +257,7 @@ wao.ui.form.updateWaoUserCommand.canReadBoats=Only able to read boats wao.ui.form.updateWaoUserCommand.coordinator=Coordinator wao.ui.form.updateWaoUserCommand.coordinatorReadOnly=Coordinator (read-only) +wao.ui.form.updateWaoUserCommand.error.loginMustBeUnique=Login must be unique on the system wao.ui.form.updateWaoUserCommand.guest=Guest wao.ui.form.updateWaoUserCommand.guestReadOnly=Guest (read-only) wao.ui.form.updateWaoUserCommand.loginMustBeEmail=The login must be a valid email address @@ -265,6 +270,8 @@ wao.ui.form.updateWaoUserCommand.professionalReadOnly=Professional (read-only) wao.ui.form.updateWaoUserCommand.requiredCompany=The company is required wao.ui.form.updateWaoUserCommand.success=Modifications about %s saved +wao.ui.form.updateWaoUserCommand.title.creation=Create a new user +wao.ui.form.updateWaoUserCommand.title.edition=Edit user %s wao.ui.import.boatDistrictLabel=of the coordinates of boat districts wao.ui.import.boatGroupsLabel=of the boat groups wao.ui.import.boatsLabel=of boats Modified: trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties =================================================================== --- trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties 2014-03-18 17:28:59 UTC (rev 1726) +++ trunk/wao-web/src/main/resources/i18n/wao-web_fr_FR.properties 2014-03-19 11:26:36 UTC (rev 1727) @@ -203,7 +203,11 @@ wao.ui.filters.filters=Filtres de recherche wao.ui.filters.refresh=Rafraîchir les champs du filtre wao.ui.forgotPassword=Mot de passe oublié ? +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.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= wao.ui.form.SampleRow.error.missingDcf5Codes=Il faut préciser au moins un code DCF5 wao.ui.form.SampleRow.error.missingFishingZones=Il faut préciser au moins une zone de pêche wao.ui.form.SampleRow.error.missingLogComment=Vous devez préciser la raison de vos modifications @@ -253,6 +257,7 @@ wao.ui.form.updateWaoUserCommand.canReadBoats=Limiter à la consultation des navires wao.ui.form.updateWaoUserCommand.coordinator=Coordinateur wao.ui.form.updateWaoUserCommand.coordinatorReadOnly=Coordinateur (lecture seule) +wao.ui.form.updateWaoUserCommand.error.loginMustBeUnique=L'identifiant doit être unique au sein du système wao.ui.form.updateWaoUserCommand.guest=Invité wao.ui.form.updateWaoUserCommand.guestReadOnly=Invité (lecture seule) wao.ui.form.updateWaoUserCommand.loginMustBeEmail=Il faut utiliser un email valide comme identifiant @@ -265,6 +270,8 @@ wao.ui.form.updateWaoUserCommand.professionalReadOnly=Professionel (lecture seule) wao.ui.form.updateWaoUserCommand.requiredCompany=Il faut associer l'utilisateur à une société wao.ui.form.updateWaoUserCommand.success=Les modifications concernant l'utilisateur %s ont bien été enregistrées +wao.ui.form.updateWaoUserCommand.title.creation=Création d'un utilisateur +wao.ui.form.updateWaoUserCommand.title.edition=Modification de l'utilisateur %s wao.ui.import.boatDistrictLabel=des coordonnées des quartiers des navires wao.ui.import.boatGroupsLabel=des strates des navires wao.ui.import.boatsLabel=des navires Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/administration/companies.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/administration/companies.jsp 2014-03-18 17:28:59 UTC (rev 1726) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/administration/companies.jsp 2014-03-19 11:26:36 UTC (rev 1727) @@ -4,7 +4,7 @@ <html> <head> - + <title><s:text name="wao.ui.page.companies.title" /></title> </head> <h1><s:text name="wao.ui.page.companies.title" /></h1> @@ -55,6 +55,13 @@ <s:a href="%{waoUsersUrl}"> <i class="icon-user"></i> <s:text name="wao.ui.action.viewCompanyWaoUsers" /> </s:a> + + <s:url action="edit-wao-user!input" id="createWaoUserUrl"> + <s:param name="companyId" 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> Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/administration/edit-company.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/administration/edit-company.jsp 2014-03-18 17:28:59 UTC (rev 1726) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/administration/edit-company.jsp 2014-03-19 11:26:36 UTC (rev 1727) @@ -3,8 +3,25 @@ <html> <head> + <title> + <s:if test="companyId == null"> + <s:text name="wao.ui.form.Company.title.creation" /> + </s:if> + <s:else> + <s:property value="%{t('wao.ui.form.Company.title.edition', company.name)}" /> + </s:else> + </title> </head> + <h1> + <s:if test="companyId == null"> + <s:text name="wao.ui.form.Company.title.creation" /> + </s:if> + <s:else> + <s:property value="%{t('wao.ui.form.Company.title.edition', company.name)}" /> + </s:else> + </h1> + <s:form> <s:hidden name="companyId" value="%{companyId}" /> Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/administration/edit-wao-user.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/administration/edit-wao-user.jsp 2014-03-18 17:28:59 UTC (rev 1726) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/administration/edit-wao-user.jsp 2014-03-19 11:26:36 UTC (rev 1727) @@ -39,8 +39,25 @@ }); </script> + <title> + <s:if test="waoUserId == null"> + <s:text name="wao.ui.form.updateWaoUserCommand.title.creation" /> + </s:if> + <s:else> + <s:property value="%{t('wao.ui.form.updateWaoUserCommand.title.edition', updateWaoUserCommand.waoUser.fullName)}" /> + </s:else> + </title> </head> + <h1> + <s:if test="waoUserId == null"> + <s:text name="wao.ui.form.updateWaoUserCommand.title.creation" /> + </s:if> + <s:else> + <s:property value="%{t('wao.ui.form.updateWaoUserCommand.title.edition', updateWaoUserCommand.waoUser.fullName)}" /> + </s:else> + </h1> + <s:form> <s:hidden name="waoUserId" value="%{waoUserId}" /> Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/administration/wao-users.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/administration/wao-users.jsp 2014-03-18 17:28:59 UTC (rev 1726) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/administration/wao-users.jsp 2014-03-19 11:26:36 UTC (rev 1727) @@ -5,6 +5,8 @@ <head> + <title><s:text name="wao.ui.page.waoUsers.title" /></title> + </head> <h1><s:text name="wao.ui.page.waoUsers.title" /></h1> @@ -59,7 +61,9 @@ </s:iterator> </table> - <s:url action="edit-wao-user!input" id="createWaoUserUrl" /> + <s:url action="edit-wao-user!input" id="createWaoUserUrl"> + <s:param name="companyId" value="%{companyId}" /> + </s:url> <s:a href="%{createWaoUserUrl}"> <i class="icon-plus"></i> <s:text name="wao.ui.action.createWaoUser" /> </s:a>
participants (1)
-
bleny@users.forge.codelutin.com