[Suiviobsmer-commits] r487 - in trunk: wao-business/src/main/java/fr/ifremer/wao/service wao-business/src/main/xmi wao-ui/src/main/java/fr/ifremer/wao/ui/pages wao-ui/src/main/java/fr/ifremer/wao/ui/services
Author: fdesbois Date: 2010-05-31 14:54:17 +0000 (Mon, 31 May 2010) New Revision: 487 Log: Ano #2322 : Add context to display activityCalendar. Manage also authentification filter to keep context on Connexion page. Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceBoatImpl.java trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/BoatActivityCalendar.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/Connexion.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceBoatImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceBoatImpl.java 2010-05-27 15:42:47 UTC (rev 486) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceBoatImpl.java 2010-05-31 14:54:17 UTC (rev 487) @@ -309,11 +309,22 @@ @Override public Boat executeGetBoat(TopiaContext transaction, - String boatId) throws TopiaException { + Integer boatImmatriculation) + throws TopiaException, WaoBusinessException { BoatDAO dao = WaoDAOHelper.getBoatDAO(transaction); - return dao.findByTopiaId(boatId); + Boat result = dao.findByImmatriculation(boatImmatriculation); + + if (result == null) { + throw new WaoBusinessException( + WaoBusinessException.Type.NOT_EXISTS, + ServiceBoat.class, + "Aucun navire correspondant à l'immatriculation " + + boatImmatriculation); + } + + return result; } @Override Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/BoatActivityCalendar.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/BoatActivityCalendar.java 2010-05-27 15:42:47 UTC (rev 486) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/BoatActivityCalendar.java 2010-05-31 14:54:17 UTC (rev 487) @@ -25,6 +25,7 @@ package fr.ifremer.wao.ui.pages; +import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoException; import fr.ifremer.wao.entity.ActivityCalendar; import fr.ifremer.wao.entity.ActivityMonth; @@ -33,11 +34,13 @@ import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.service.ServiceBoat; +import fr.ifremer.wao.ui.components.Layout; import fr.ifremer.wao.ui.data.RequiresAuthentication; import java.util.Collections; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.tapestry5.annotations.IncludeStylesheet; +import org.apache.tapestry5.annotations.InjectComponent; import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.annotations.SessionState; @@ -58,6 +61,9 @@ @Inject private Logger log; + + @InjectComponent + private Layout layout; @Inject private ServiceBoat serviceBoat; @@ -79,33 +85,56 @@ @Property private int zoneIndex; - @Persist private Boat boat; + private Integer boatImmatriculation; + void setupRender() { - + if (boatImmatriculation == null) { + layout.addFatal("Page inaccessible, aucun navire chargé" + + " permettant l'affichage du calendrier d'activité." + + " Veuillez retourner sur la page des navires."); + } else { + try { + getBoat(); + } catch (WaoBusinessException eee) { + layout.addFatal(eee.getMessage()); + } + } } + void onActivate(Integer boatImmatriculation) { + this.boatImmatriculation = boatImmatriculation; + } + + Integer onPassivate() { + return boatImmatriculation; + } + + @Deprecated public void setBoat(Boat boat) { this.boat = boat; } - public Boat getBoat() { - return this.boat; + public Boat getBoat() throws WaoBusinessException { + if (boat == null) { + boat = serviceBoat.getBoat(boatImmatriculation); + } + return boat; } public List<Boat> getBoats() { return Collections.singletonList(boat); } - public ActivityCalendar getActivityCalendar() throws WaoException { + public ActivityCalendar getActivityCalendar() throws WaoBusinessException { if (activityCalendar == null) { this.activityCalendar = serviceBoat.getLastActivityCalendar(user, getBoat()); } return activityCalendar; } - public ActivityMonth getActivityMonth() throws WaoException { + public ActivityMonth getActivityMonth() throws WaoBusinessException { return getActivityCalendar().getActivityMonth(month); } @@ -129,7 +158,7 @@ return getProfessionIndexMax() != -1; } - public ActivityProfession getActivityProfession() throws WaoException { + public ActivityProfession getActivityProfession() throws WaoBusinessException { if (getActivityMonth() == null) { return null; } @@ -139,7 +168,7 @@ return getActivityMonth().getActivityProfession().get(professionIndex); } - public int getZoneIndexMax() throws WaoException { + public int getZoneIndexMax() throws WaoBusinessException { int result = 0; for (ActivityMonth activityMonth : activityCalendar.getActivityMonth()) { month = activityMonth.getMonth(); @@ -166,7 +195,7 @@ // return getZoneIndexMax() != -1; // } - public ActivityZone getActivityZone() throws WaoException { + public ActivityZone getActivityZone() throws WaoBusinessException { ActivityProfession profession = getActivityProfession(); if (profession == null) { return null; @@ -179,7 +208,7 @@ /*************************** RETURN LINK **********************************/ - public Object[] getBoatsPageContext() { + public Object[] getBoatsPageContext() throws WaoBusinessException { return new Object[] {null, getBoat().getImmatriculation()}; } 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 2010-05-27 15:42:47 UTC (rev 486) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2010-05-31 14:54:17 UTC (rev 487) @@ -66,6 +66,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.tapestry5.Block; import org.apache.tapestry5.EventContext; +import org.apache.tapestry5.Link; import org.apache.tapestry5.PersistenceConstants; import org.apache.tapestry5.StreamResponse; import org.apache.tapestry5.annotations.IncludeStylesheet; @@ -79,6 +80,7 @@ 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.PageRenderLinkSource; import org.apache.tapestry5.services.Response; import org.apache.tapestry5.upload.services.UploadedFile; import org.slf4j.Logger; @@ -846,16 +848,23 @@ /**************************** Go to last ActivityCalendar *****************/ - @InjectPage - private BoatActivityCalendar calendarPage; +// @InjectPage +// private BoatActivityCalendar calendarPage; + @Inject + private PageRenderLinkSource renderLink; + public boolean hasActivityCalendar() throws WaoException { return getBoatSelected() != null && getBoatSelected().sizeActivityCalendar() != 0; } - Object onActionFromShowLastActivityCalendar() throws WaoException { - calendarPage.setBoat(getBoatSelected()); - return calendarPage; + Link onActionFromShowLastActivityCalendar() throws WaoException { + Link result = renderLink.createPageRenderLinkWithContext( + BoatActivityCalendar.class, + getBoatSelected().getImmatriculation()); + return result; +// calendarPage.setBoat(getBoatSelected()); +// return calendarPage; } } Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java 2010-05-27 15:42:47 UTC (rev 486) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java 2010-05-31 14:54:17 UTC (rev 487) @@ -7,6 +7,8 @@ import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.service.ServiceUser; import fr.ifremer.wao.ui.components.FeedBack; +import org.apache.tapestry5.EventContext; +import org.apache.tapestry5.Link; import org.apache.tapestry5.PersistenceConstants; import org.apache.tapestry5.annotations.InjectComponent; import org.apache.tapestry5.annotations.Log; @@ -17,6 +19,8 @@ import org.apache.tapestry5.services.PageRenderLinkSource; import org.slf4j.Logger; +import java.util.Arrays; + /** * Login * @@ -45,6 +49,8 @@ @InjectComponent private FeedBack connexionFeedback; + private Object[] activationContext; + private String redirectPage; /** @@ -60,14 +66,35 @@ @Property private String email; - void onActivate(String page) { - this.redirectPage = page; + void onActivate(Object... activationContext) { + if (logger.isDebugEnabled()) { + logger.debug("Activiation context : " + + Arrays.toString(activationContext)); + } + this.activationContext = activationContext; } - String onPassivate() { + Object[] onPassivate() { + return activationContext; + } + + String getRedirectPageName() { + if (redirectPage == null && activationContext.length > 0) { + redirectPage = (String)activationContext[0]; + } return redirectPage; } + Object[] getRedirectPageContext() { + if (activationContext.length > 1) { + Object[] redirectPageContext = + Arrays.copyOfRange(activationContext, 1, + activationContext.length); + return redirectPageContext; + } + return null; + } + void onValidateFormFromConnexionForm() { try { if (logger.isDebugEnabled()) { @@ -98,11 +125,28 @@ if (hasConnexionErrors()) { return this; } - // If redirectPage is defined, return a new Link to this page - if (redirectPage == null) { + // If redirectPage is not defined, the default one is the Index page + if (getRedirectPageName() == null) { redirectPage = "index"; } - return pageRender.createPageRenderLink(redirectPage); + + Object[] redirectPageContext = getRedirectPageContext(); + Link redirectLink = null; + + if (logger.isDebugEnabled()) { + logger.debug("Redirect page '" + redirectPage + "' " + + "context : " + Arrays.toString(redirectPageContext)); + } + + // Check existence of redirectPageContext, the redirectLink depends on + // context + if (redirectPageContext == null) { + redirectLink = pageRender.createPageRenderLink(redirectPage); + } else { + redirectLink = pageRender.createPageRenderLinkWithContext( + redirectPage, redirectPageContext); + } + return redirectLink; } public boolean hasConnexionErrors() { Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java 2010-05-27 15:42:47 UTC (rev 486) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java 2010-05-31 14:54:17 UTC (rev 487) @@ -5,7 +5,11 @@ import fr.ifremer.wao.ui.pages.Connexion; import fr.ifremer.wao.ui.pages.Unavailable; import java.io.IOException; -import org.apache.commons.collections.CollectionUtils; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.apache.tapestry5.EventContext; import org.apache.tapestry5.Link; import org.apache.tapestry5.runtime.Component; import org.apache.tapestry5.services.ComponentEventRequestParameters; @@ -61,7 +65,10 @@ logger.trace("handleComponentEvent"); } - if (dispatchedToLoginPage(parameters.getActivePageName())) { + Object[] context = prepareContext( + parameters.getActivePageName(), + parameters.getPageActivationContext()); + if (dispatchedToLoginPage(context)) { return; } @@ -77,15 +84,37 @@ logger.trace("handlePageRender"); } - if (dispatchedToLoginPage(parameters.getLogicalPageName())) { + Object[] context = prepareContext( + parameters.getLogicalPageName(), + parameters.getActivationContext()); + if (dispatchedToLoginPage(context)) { return; } handler.handlePageRender(parameters); } - private boolean dispatchedToLoginPage(String pageName) throws IOException { + /** + * Prepare the context for redirect page. + * + * @param pageName the pageName to treate + * @param activationContext the EventContext of this page + * @return an array of Object for Context + */ + protected Object[] prepareContext(String pageName, + EventContext activationContext) { + List<Object> list = new ArrayList<Object>(); + list.add(pageName); + for (int i = 0; i < activationContext.getCount(); i++) { + list.add(activationContext.get(Object.class, i)); + } + return list.toArray(new Object[list.size()]); + } + private boolean dispatchedToLoginPage(Object... context) + throws IOException { + + String pageName = (String)context[0]; Component page = componentSource.getPage(pageName); if (logger.isTraceEnabled()) { @@ -95,6 +124,7 @@ page.getClass().isAnnotationPresent(RequiresAuthentication.class)); logger.trace("User in session : " + serviceAuthentication.isUserConnected()); + logger.trace("Activation context : " + Arrays.toString(context)); } if (!page.getClass().isAnnotationPresent(RequiresAuthentication.class)) { @@ -120,7 +150,7 @@ } Link link = pageRender.createPageRenderLinkWithContext(redirectPage, - pageName); + context); if (logger.isTraceEnabled()) { logger.trace("Redirection to " + redirectPage.getSimpleName() +
participants (1)
-
fdesbois@users.labs.libre-entreprise.org