[Suiviobsmer-commits] r1267 - in trunk: wao-business/src/main/java/fr/ifremer/wao wao-business/src/main/java/fr/ifremer/wao/service wao-business/src/test/java/fr/ifremer/wao/service wao-business/src/test/resources/import wao-ui/src/main/java/fr/ifremer/wao/ui/pages wao-ui/src/main/webapp
Author: bleny Date: 2011-05-11 13:18:17 +0000 (Wed, 11 May 2011) New Revision: 1267 Log: add port of registry to boats, enabling filtering on sampleRows Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceBoatImpl.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebFixtures.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebTest.java trunk/wao-business/src/test/resources/import/navires.csv trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2011-05-09 14:49:28 UTC (rev 1266) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2011-05-11 13:18:17 UTC (rev 1267) @@ -31,8 +31,10 @@ import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.WaoUser; +import net.fortuna.ical4j.model.Period; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; +import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaQuery; import org.nuiton.util.PeriodDates; import org.slf4j.Logger; @@ -292,17 +294,6 @@ query.addSubQuery(WaoQueryHelper.format( "$1 IN (?)", sampleRowProperty.$alias()), subquery); - // XXX 20101022 bleny it seems that last call don't - // keep params of the sub-query. Thus, the :facadeName is still - // in the query but misses in params of the request. - // the next line is a work-around that copy the params of the - // subquery is the main query. It works but it seems that - // there is a bug in addSubQuery, :facadeName should have been - // replaced in the query and removed from params OR not replaced - // in the query and kept in the params but NOT not replaced in - // the query and removed from params - query.getParams().addAll(subquery.getParams()); - if(logger.isDebugEnabled()) { logger.debug("sampling filter query " + query); } @@ -471,6 +462,12 @@ */ public TopiaQuery applyBoatFilter(BoatFilter filter) { + if (filter.getObsProgram() == ObsProgram.OBSDEB) { + sampleRowProperty = WaoQueryHelper.newSampleRowProperty(); + } else { + sampleRowProperty = elligibleBoatProperty.sampleRowProperty(); + } + //boatProperty = query.getMainAlias(); Company company = filter.getCompany(); @@ -482,25 +479,41 @@ // Sampling filter if (filter.isSamplingFiltered()) { - // Add join for ElligibleBoat -// elligibleBoatProperty = WaoQueryHelper.newElligibleBoatProperty(); - query.addLeftJoin(boatProperty.elligibleBoat(), elligibleBoatProperty.$alias(), false); + if (filter.getObsProgram() == ObsProgram.OBSDEB) { + if (filter.getSampleRow() != null) { + String observationUnitCode = filter.getSampleRow().getObservationUnit().getObservationUnitCode(); - // To be sure to have no doubloons - query.setSelect(boatProperty.$alias()).addDistinct(); + WaoQueryHelper.TerrestrialDivisionProperty subTerrestrialDivisionProperty = + WaoQueryHelper.newTerrestrialDivisionProperty("TD2"); - // Apply filter for sampling -// sampleRowProperty = elligibleBoatProperty.sampleRowProperty(); - applySamplingFilter(filter); + TopiaQuery subquery = WaoQueryHelper.createQuery(subTerrestrialDivisionProperty). + setSelect(subTerrestrialDivisionProperty.portProperty().topiaId()). + addEquals(subTerrestrialDivisionProperty.observationUnitCode(), observationUnitCode); - // Company - if (company != null) { - // Test only valid ElligibleBoat for that company - query.addWhere(WaoQueryHelper.format( - "$1 = :booleanTrue OR ($1 IS NULL AND $2 = :booleanTrue)", - elligibleBoatProperty.companyActive(), - elligibleBoatProperty.globalActive()) - ).addParam("booleanTrue", Boolean.TRUE); + if (logger.isDebugEnabled()) { + logger.debug("subquery to find ports given an observation unit code: " + subquery); + } + + query.addSubQuery(WaoQueryHelper.format( + "$1 IN (?)", boatProperty.portOfRegistryProperty().topiaId()), subquery); + + } + } else { + applySamplingFilter(filter); + // Add join for ElligibleBoat + query.addLeftJoin(boatProperty.elligibleBoat(), elligibleBoatProperty.$alias(), false); + + // To be sure to have no doubloons + query.setSelect(boatProperty.$alias()).addDistinct(); + + if (company != null) { + // Test only valid ElligibleBoat for that company + query.addWhere(WaoQueryHelper.format( + "$1 = :booleanTrue OR ($1 IS NULL AND $2 = :booleanTrue)", + elligibleBoatProperty.companyActive(), + elligibleBoatProperty.globalActive()) + ).addParam("booleanTrue", Boolean.TRUE); + } } } @@ -508,6 +521,10 @@ query.addOrder(boatProperty.$property(orderBy)); } + if (logger.isDebugEnabled()) { + logger.debug("query after applying boat filter:" + query); + } + return query; } 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 2011-05-09 14:49:28 UTC (rev 1266) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceBoatImpl.java 2011-05-11 13:18:17 UTC (rev 1267) @@ -146,6 +146,13 @@ Map<Integer, Boat> results = dao.findAllMappedByQuery(query, Boat.PROPERTY_IMMATRICULATION, Integer.class); + if (filter.getObsProgram() == ObsProgram.OBSDEB) { + // force load + for (Boat boat : results.values()) { + boat.getPortOfRegistry(); + } + } + return results; } @@ -447,6 +454,7 @@ existingBoat.setActive(boat.getActive()); existingBoat.setShipOwner(boat.getShipOwner()); existingBoat.setBoatDistrict(boat.getBoatDistrict()); + existingBoat.setPortOfRegistry(boat.getPortOfRegistry()); boatDAO.update(existingBoat); } @@ -611,16 +619,19 @@ protected BoatFilter executeNewBoatFilter(TopiaContext transaction, ConnectedUser connectedUser) throws Exception { BoatFilter boatFilter = new BoatFilterImpl(); - // Only rows which are not finished nearly one month - boatFilter.setNbMonthFinishedFromToday(-1); boatFilter.setObsProgram(connectedUser.getProfile().getObsProgram()); - // Very very important to do that at beginning + // Very very important to do that at beginning for security purpose // Evo #2227 : Guest user has no default company filter if (connectedUser.isCoordinatorOrObserver()) { boatFilter.setCompany(connectedUser.getCompany()); } + // Only rows which are not finished nearly one month + if (connectedUser.isObsMer() || connectedUser.isObsVente()) { + boatFilter.setNbMonthFinishedFromToday(-1); + } + return boatFilter; } } Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebFixtures.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebFixtures.java 2011-05-09 14:49:28 UTC (rev 1266) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebFixtures.java 2011-05-11 13:18:17 UTC (rev 1267) @@ -61,7 +61,7 @@ return ifremer; } - protected void importBoats() { + public void boats() { if ( ! boatsImported) { ServiceBoat serviceBoat = manager.getServiceBoat(); InputStream input = getClass().getResourceAsStream("/import/navires.csv"); @@ -75,7 +75,7 @@ public Boat samourai() { if (samourai == null) { - importBoats(); + boats(); ServiceBoat serviceBoat = manager.getServiceBoat(); try { samourai = serviceBoat.getBoat(174258); @@ -88,7 +88,7 @@ public Boat moise() { if (moise == null) { - importBoats(); + boats(); ServiceBoat serviceBoat = manager.getServiceBoat(); try { moise = serviceBoat.getBoat(273129); Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebTest.java 2011-05-09 14:49:28 UTC (rev 1266) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebTest.java 2011-05-11 13:18:17 UTC (rev 1267) @@ -25,6 +25,7 @@ import fr.ifremer.wao.AbstractServiceTest; import fr.ifremer.wao.WaoBusinessException; +import fr.ifremer.wao.bean.BoatFilter; import fr.ifremer.wao.bean.ConnectedUser; import fr.ifremer.wao.bean.ContactFilter; import fr.ifremer.wao.bean.ObservationType; @@ -345,10 +346,23 @@ manager.setCurrentDate(DateUtil.createDate(15, 2, 2010)); // the user is supposed to create a contact to tell what he - // has done this day + // has done this day, when i was supposed to observe for this row SampleRow row = serviceSampling.getSampleRowByCode(fixtures.joshAsObserver(), "2011_890"); - Boat boat = serviceBoat.getBoat(fixtures.moise().getImmatriculation()); + fixtures.boats(); // boats must be imported + + // observer can get a list of boats given this sample row. It should give him the boats + // having a portOfRegistry in the observation unit of the sample-row + BoatFilter boatFilter = serviceBoat.newBoatFilter(fixtures.joshAsObserver()); + boatFilter.setSampleRow(row); + Map<Integer, Boat> boatsForRow = serviceBoat.getBoatsByFilter(boatFilter); + if (log.isDebugEnabled()) { + log.debug("boats returned after filtering on sample row:" + boatsForRow.values()); + } + Assert.assertEquals(4, boatsForRow.size()); + + Boat boat = boatsForRow.get(fixtures.moise().getImmatriculation()); + // let's create the contact Contact contact = serviceContact.getNewContact(fixtures.joshAsObserver(), row, boat); Modified: trunk/wao-business/src/test/resources/import/navires.csv =================================================================== --- trunk/wao-business/src/test/resources/import/navires.csv 2011-05-09 14:49:28 UTC (rev 1266) +++ trunk/wao-business/src/test/resources/import/navires.csv 2011-05-11 13:18:17 UTC (rev 1267) @@ -1,7 +1,7 @@ NAVIRE_IMMATRICULATION;NAVIRE_NOM;NAVIRE_LONGUEUR;NAVIRE_ANNEE;QUARTIER_CODE;ARMATEUR_CODE;ARMATEUR_NOM;ARMATEUR_PRENOM;NAVIRE_ACTIF;PORT_CODE -273129;MOISE;7;1992;UX;19771564;BEURRE ;JEAN CLAUDE;Y;XSN -174258;SAMOURAI KING;9;1982;UN;19744130;MARIE ;JEAN PHILIPPE;Y;XSN +273129;MOISE;7;1992;UX;19771564;BEURRE ;JEAN CLAUDE;Y;MP3 +174258;SAMOURAI KING;9;1982;UN;19744130;MARIE ;JEAN PHILIPPE;Y;MP6 177474;MAYFLOWERS;10;1983;UN;19784252;MOSELLE ;ALAIN RENE;N;XSN 174592;FIFITOU;8;1975;UN;18854131;POUTRE ;JEAN PIERRE;Y;XSN -284595;A MA LOUTRE;8;1973;UN; SPR3965;BECANAUD; NA;Y;XSN -978419;BISOUNOURS;11;2002;CI;18854131;POUTRE ;JEAN PIERRE;Y;XSN +284595;A MA LOUTRE;8;1973;UN; SPR3965;BECANAUD; NA;Y;LP3 +978419;BISOUNOURS;11;2002;CI;18854131;POUTRE ;JEAN PIERRE;Y;MP6 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-05-09 14:49:28 UTC (rev 1266) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2011-05-11 13:18:17 UTC (rev 1267) @@ -120,7 +120,9 @@ void setupRender() throws WaoException, WaoBusinessException { - filterComponent.resetFilter(); + // XXX bleny 20110511 resetting on page load may solve an issue when + // creating contact and coming back to Boats. But this may break the page + // filterComponent.resetFilter(); if (boatSelectedImmatriculation != null && getBoatSelected() == null) { layout.addFatal("L'immatriculation " + boatSelectedImmatriculation + @@ -303,7 +305,7 @@ boatSelectedImmatriculation = null; // Suppress persistant boat informations for boat selected companyBoatInfos = null; - return this; + return boatsZone.getBody(); } /*************** RIGHT PANEL ****************/ Modified: trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml =================================================================== --- trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml 2011-05-09 14:49:28 UTC (rev 1266) +++ trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml 2011-05-11 13:18:17 UTC (rev 1267) @@ -151,6 +151,9 @@ <img src="${asset:context:}/img/delete2.png" alt="${message:wao.ui.action.deleteSampleRow}" /> </a> </t:if> + <a t:type="pagelink" t:page="boats" t:context="sampleRow.code"> + <img src="${asset:context:}/img/boat.png" alt="${message:wao.ui.entity.Boats}" /> + </a> </p:actionsCell> </div>
participants (1)
-
bleny@users.labs.libre-entreprise.org