Author: bleny Date: 2011-02-07 15:48:21 +0000 (Mon, 07 Feb 2011) New Revision: 993 Log: add 'professional' user profile Modified: trunk/wao-business/src/main/filters/Wao.properties trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/UserRole.java trunk/wao-business/src/main/java/fr/ifremer/wao/entity/UserProfileImpl.java trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/RequiresAuthentication.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java trunk/wao-ui/src/main/webapp/Boats.tml trunk/wao-ui/src/main/webapp/Synthesis.tml Modified: trunk/wao-business/src/main/filters/Wao.properties =================================================================== --- trunk/wao-business/src/main/filters/Wao.properties 2011-02-07 14:39:59 UTC (rev 992) +++ trunk/wao-business/src/main/filters/Wao.properties 2011-02-07 15:48:21 UTC (rev 993) @@ -60,5 +60,5 @@ ###### Since 1.6 # By default make indicators not visible -wao.indicators.show=false +wao.indicators.show=true Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java 2011-02-07 14:39:59 UTC (rev 992) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java 2011-02-07 15:48:21 UTC (rev 993) @@ -58,6 +58,11 @@ } @Override + public boolean isProfessional() { + return getProfile().isProfessional(); + } + + @Override public boolean isReadOnly() { return getProfile().isReadOnly(); } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/UserRole.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/UserRole.java 2011-02-07 14:39:59 UTC (rev 992) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/UserRole.java 2011-02-07 15:48:21 UTC (rev 993) @@ -27,6 +27,9 @@ import fr.ifremer.wao.WaoUtils; import fr.ifremer.wao.entity.WaoUser; +import java.util.ArrayList; +import java.util.List; + import static org.nuiton.i18n.I18n.n_; /** @@ -47,7 +50,9 @@ /** Coordinator role **/ COORDINATOR(n_("UserRole.COORDINATOR")), /** Guest role **/ - GUEST(n_("UserRole.GUEST")); + GUEST(n_("UserRole.GUEST")), + /** Professional role **/ + PROFESSIONAL(n_("UserRole.PROFESSIONAL")); protected String i18nKey; @@ -72,4 +77,24 @@ return WaoUtils.translate(i18nKey); } + /** for a given program, return the roles that can be assigned by someone + * who own the role <code>userRole</code> + * @param obsProgram available roles depends on the program + * @param userRole role of the user who want to grant rights + * @return roles that the user can affect + */ + public static UserRole[] getAllowedRoles(ObsProgram obsProgram, UserRole userRole) { + List<UserRole> allowedRoles = new ArrayList<UserRole>(); + allowedRoles.add(UserRole.COORDINATOR); + allowedRoles.add(UserRole.OBSERVER); + if (userRole.equals(UserRole.ADMIN)) { + allowedRoles.add(UserRole.ADMIN); + allowedRoles.add(UserRole.GUEST); + if (obsProgram.equals(ObsProgram.OBSMER)) { + allowedRoles.add(UserRole.PROFESSIONAL); + } + } + UserRole[] result = allowedRoles.toArray(new UserRole[allowedRoles.size()]); + return result; + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/UserProfileImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/UserProfileImpl.java 2011-02-07 14:39:59 UTC (rev 992) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/UserProfileImpl.java 2011-02-07 15:48:21 UTC (rev 993) @@ -77,6 +77,11 @@ } @Override + public boolean isProfessional() { + return getUserRole() == UserRole.PROFESSIONAL; + } + + @Override public boolean isGuest() { return getUserRole() == UserRole.GUEST; } Modified: trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-02-07 14:39:59 UTC (rev 992) +++ trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-02-07 15:48:21 UTC (rev 993) @@ -36,6 +36,7 @@ UserRole.COORDINATOR=Coordinator UserRole.GUEST=Guest UserRole.OBSERVER=Observer +UserRole.PROFESSIONAL=Professional fr.ifremer.wao.entity.FishingGearDCF.=Not specified fr.ifremer.wao.entity.FishingGearDCF.DRB=Boat dredges fr.ifremer.wao.entity.FishingGearDCF.DRH=Hand dredges Modified: trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-02-07 14:39:59 UTC (rev 992) +++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-02-07 15:48:21 UTC (rev 993) @@ -36,6 +36,7 @@ UserRole.COORDINATOR=Coordinateur UserRole.GUEST=Invit\u00E9 UserRole.OBSERVER=Observateur +UserRole.PROFESSIONAL=Professionnel fr.ifremer.wao.entity.FishingGearDCF.=Non sp\u00E9cifi\u00E9 fr.ifremer.wao.entity.FishingGearDCF.DRB=Dragues remorqu\u00E9es par bateau fr.ifremer.wao.entity.FishingGearDCF.DRH=Dragues \u00E0 main Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/RequiresAuthentication.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/RequiresAuthentication.java 2011-02-07 14:39:59 UTC (rev 992) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/RequiresAuthentication.java 2011-02-07 15:48:21 UTC (rev 993) @@ -46,7 +46,7 @@ // By default everybody can access UserRole[] allowedRoles() default - {UserRole.OBSERVER, UserRole.ADMIN, UserRole.COORDINATOR, UserRole.GUEST}; + {UserRole.OBSERVER, UserRole.ADMIN, UserRole.COORDINATOR, UserRole.GUEST, UserRole.PROFESSIONAL}; ObsProgram[] allowedPrograms() default {ObsProgram.OBSMER, ObsProgram.OBSVENTE}; Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2011-02-07 14:39:59 UTC (rev 992) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2011-02-07 15:48:21 UTC (rev 993) @@ -78,6 +78,7 @@ import org.apache.tapestry5.ioc.services.PropertyAccess; import org.apache.tapestry5.ioc.services.TypeCoercer; import org.apache.tapestry5.services.BeanModelSource; +import org.apache.tapestry5.util.EnumSelectModel; import org.slf4j.Logger; import java.io.FileNotFoundException; @@ -602,15 +603,10 @@ @Log public SelectModel getUserRoleSelectModel() { if (userRoleSelectModel == null) { - List<OptionModel> options = new ArrayList<OptionModel>(); - options.add(newUserRoleOption(UserRole.OBSERVER)); - options.add(newUserRoleOption(UserRole.COORDINATOR)); - // Only admin can set ADMIN and GUEST role - if (currentUser.isAdmin()) { - options.add(newUserRoleOption(UserRole.ADMIN)); - options.add(newUserRoleOption(UserRole.GUEST)); - } - userRoleSelectModel = new SelectModelImpl(null, options); + UserRole[] allowedRoles = UserRole.getAllowedRoles( + currentUser.getProfile().getObsProgram(), + currentUser.getProfile().getUserRole()); + return new EnumSelectModel(UserRole.class, messages, allowedRoles); } return userRoleSelectModel; } Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2011-02-07 14:39:59 UTC (rev 992) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2011-02-07 15:48:21 UTC (rev 993) @@ -87,7 +87,7 @@ * * @author fdesbois <fdesbois at codelutin.com> */ - at RequiresAuthentication(allowedRoles = {UserRole.ADMIN, UserRole.COORDINATOR, UserRole.OBSERVER}) + at RequiresAuthentication(allowedRoles = {UserRole.ADMIN, UserRole.COORDINATOR, UserRole.OBSERVER, UserRole.PROFESSIONAL}) @Import(stylesheet = "context:css/boats.css") public class Boats extends AbstractFilteredPage { @@ -532,7 +532,7 @@ } public boolean canCreateNewContactFromList() throws WaoException { - if (!user.isAdmin() && !user.isReadOnly() && isSampleRowExists()) { + if (!user.isAdmin() && !user.isProfessional() && !user.isReadOnly() && isSampleRowExists()) { return boat.canCreateContact(user.getProfile().getObsProgram(), user.getCompany()); } return false; Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java 2011-02-07 14:39:59 UTC (rev 992) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java 2011-02-07 15:48:21 UTC (rev 993) @@ -38,12 +38,10 @@ import fr.ifremer.wao.ui.data.GenericSelectModel; import fr.ifremer.wao.ui.data.RequiresAuthentication; import fr.ifremer.wao.ui.services.WaoManager; -import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.StringUtils; import org.apache.tapestry5.Block; import org.apache.tapestry5.EventContext; -import org.apache.tapestry5.RenderSupport; import org.apache.tapestry5.SelectModel; import org.apache.tapestry5.annotations.Component; import org.apache.tapestry5.annotations.Environmental; @@ -59,9 +57,9 @@ import org.apache.tapestry5.ioc.Messages; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.ioc.services.PropertyAccess; +import org.apache.tapestry5.services.javascript.JavaScriptSupport; import org.apache.tapestry5.util.EnumSelectModel; import org.chenillekit.tapestry.core.components.DateTimeField; -import org.nuiton.util.CollectionUtil; import org.slf4j.Logger; import java.text.DateFormat; @@ -103,7 +101,7 @@ private ServiceUser serviceUser; @Environmental - private RenderSupport renderSupport; + private JavaScriptSupport javascriptSupport; @InjectComponent private Zone globalZone; @@ -154,12 +152,12 @@ "saisir les données ?"; // TODO-fdesbois-2010-07-27 : manage array of states in JavaScript - renderSupport.addScript("new ContactSendEmail('%s', '%s');", + javascriptSupport.addScript("new ContactSendEmail('%s', '%s');", confirmMessage, // Check state OBSERVATION_DONE ContactState.OBSERVATION_DONE.name()); - renderSupport.addScript("new ContactSendEmail('%s', '%s');", + javascriptSupport.addScript("new ContactSendEmail('%s', '%s');", confirmMessage, // Check state BOARDING_EXPECTED ContactState.OBSERVATION_EXPECTED.name()); Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java 2011-02-07 14:39:59 UTC (rev 992) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java 2011-02-07 15:48:21 UTC (rev 993) @@ -51,7 +51,6 @@ import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.StringUtils; import org.apache.tapestry5.ComponentResources; -import org.apache.tapestry5.RenderSupport; import org.apache.tapestry5.StreamResponse; import org.apache.tapestry5.annotations.Environmental; import org.apache.tapestry5.annotations.Import; @@ -66,6 +65,7 @@ import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.ioc.services.PropertyAccess; import org.apache.tapestry5.services.BeanModelSource; +import org.apache.tapestry5.services.javascript.JavaScriptSupport; import org.apache.tapestry5.upload.services.UploadedFile; import org.slf4j.Logger; @@ -105,7 +105,7 @@ private ServiceContact serviceContact; @Environmental - private RenderSupport renderSupport; + private JavaScriptSupport javascriptSupport; @Inject private WaoManager manager; Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java 2011-02-07 14:39:59 UTC (rev 992) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java 2011-02-07 15:48:21 UTC (rev 993) @@ -85,7 +85,7 @@ * * @author fdesbois <fdesbois at codelutin.com> */ - at RequiresAuthentication(allowedRoles = {UserRole.ADMIN, UserRole.COORDINATOR, UserRole.OBSERVER}) + at RequiresAuthentication(allowedRoles = {UserRole.ADMIN, UserRole.COORDINATOR, UserRole.OBSERVER, UserRole.PROFESSIONAL}) @Import(stylesheet = "context:css/synthesis.css") public class Synthesis extends AbstractFilteredPage { Modified: trunk/wao-ui/src/main/webapp/Boats.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Boats.tml 2011-02-07 14:39:59 UTC (rev 992) +++ trunk/wao-ui/src/main/webapp/Boats.tml 2011-02-07 15:48:21 UTC (rev 993) @@ -103,7 +103,12 @@ <img src="${asset:context:}/img/contact-22px.png" title="${message:wao.ui.action.addNewContactFromBoat}"/> </a> </t:if> - <a t:type="actionlink" t:id="showBoatInfos" t:context="boat.immatriculation" t:zone="boatsZone">${boat.name}</a> ${boatInactive} + <t:unless test="user.professional"> + <a t:type="actionlink" t:id="showBoatInfos" t:context="boat.immatriculation" t:zone="boatsZone">${boat.name}</a> ${boatInactive} + <p:else> + ${boat.name} ${boatInactive} + </p:else> + </t:unless> </p:nameCell> <p:boatLengthCell> ${boat.boatLength} m Modified: trunk/wao-ui/src/main/webapp/Synthesis.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Synthesis.tml 2011-02-07 14:39:59 UTC (rev 992) +++ trunk/wao-ui/src/main/webapp/Synthesis.tml 2011-02-07 15:48:21 UTC (rev 993) @@ -120,42 +120,44 @@ title="Graphique des sollicitations des navires" /> </a> </li> - <t:if test="showObsMer()"> + <t:unless test="user.professional"> + <t:if test="showObsMer()"> + <li> + <a t:type="actionlink" t:context="[actionSynthesisId,'IND_COMPLIANCE_BOARDING']" t:zone="so-synthesis-main"> + <img src="${asset:context:}/img/synthesis-ind-non-compliance-boarding.png" alt="Indicateur de non respect du nombre d'observateurs embarqués" + title="Indicateur de non respect du nombre d'observateurs embarqués" /> + </a> + </li> + </t:if> <li> - <a t:type="actionlink" t:context="[actionSynthesisId,'IND_COMPLIANCE_BOARDING']" t:zone="so-synthesis-main"> - <img src="${asset:context:}/img/synthesis-ind-non-compliance-boarding.png" alt="Indicateur de non respect du nombre d'observateurs embarqués" - title="Indicateur de non respect du nombre d'observateurs embarqués" /> + <a t:type="actionlink" t:context="[actionSynthesisId,'IND_ALLEGRO_REACTIVITY']" t:zone="so-synthesis-main"> + <img src="${asset:context:}/img/synthesis-ind-allegro-reactivity.png" alt="Indicateur de réactivité sur la saisie des données dans Allegro" + title="Indicateur de réactivité sur la saisie des données dans Allegro" /> </a> </li> - </t:if> - <li> - <a t:type="actionlink" t:context="[actionSynthesisId,'IND_ALLEGRO_REACTIVITY']" t:zone="so-synthesis-main"> - <img src="${asset:context:}/img/synthesis-ind-allegro-reactivity.png" alt="Indicateur de réactivité sur la saisie des données dans Allegro" - title="Indicateur de réactivité sur la saisie des données dans Allegro" /> - </a> - </li> - <t:if test="showObsMer()"> + <t:if test="showObsMer()"> + <li> + <a t:type="actionlink" t:context="[actionSynthesisId,'IND_DATA_RELIABILITY']" t:zone="so-synthesis-main"> + <img src="${asset:context:}/img/synthesis-ind-data-reliability.png" alt="Indicateur de la qualité des données" + title="Indicateur de la qualité des données" /> + </a> + </li> + </t:if> + <t:if test="user.indicatorsViewer"> + <li> + <a t:type="actionlink" t:context="[actionShowGlobalSynthesis,'']" t:zone="so-synthesis-main"> + <img src="${asset:context:}/img/synthesis-global-synthesis.png" alt="Synthèse globale des indicateurs" + title="Synthèse globale des indicateurs" /> + </a> + </li> + </t:if> <li> - <a t:type="actionlink" t:context="[actionSynthesisId,'IND_DATA_RELIABILITY']" t:zone="so-synthesis-main"> - <img src="${asset:context:}/img/synthesis-ind-data-reliability.png" alt="Indicateur de la qualité des données" - title="Indicateur de la qualité des données" /> + <a t:type="actionlink" t:context="[actionSynthesisId,'IND_CONTACT_STATE']" t:zone="so-synthesis-main"> + <img src="${asset:context:}/img/synthesis-ind-contact-states.png" alt="Indicateur sur les états des contacts" + title="Indicateur sur les états des contacts" /> </a> </li> - </t:if> - <t:if test="user.indicatorsViewer"> - <li> - <a t:type="actionlink" t:context="[actionShowGlobalSynthesis,'']" t:zone="so-synthesis-main"> - <img src="${asset:context:}/img/synthesis-global-synthesis.png" alt="Synthèse globale des indicateurs" - title="Synthèse globale des indicateurs" /> - </a> - </li> - </t:if> - <li> - <a t:type="actionlink" t:context="[actionSynthesisId,'IND_CONTACT_STATE']" t:zone="so-synthesis-main"> - <img src="${asset:context:}/img/synthesis-ind-contact-states.png" alt="Indicateur sur les états des contacts" - title="Indicateur sur les états des contacts" /> - </a> - </li> + </t:unless> </ul> </div> <div t:type="zone" t:id="delegator" class="fleft" t:update="show" id="so-synthesis-main">