Author: bleny Date: 2014-04-07 12:33:52 +0200 (Mon, 07 Apr 2014) New Revision: 1849 Url: http://forge.codelutin.com/projects/wao/repository/revisions/1849 Log: review filters (obsProgram) criteria, introduce isFilled and abstract classes for Filter and FilterValues Added: trunk/wao-persistence/src/main/java/fr/ifremer/wao/AbstractWaoFilter.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/AbstractFilterValues.java Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/BoatsFilter.java trunk/wao-persistence/src/main/java/fr/ifremer/wao/ContactsFilter.java trunk/wao-persistence/src/main/java/fr/ifremer/wao/SampleRowsFilter.java trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/BoatTopiaDao.java trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValues.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValues.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerContactsService.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanBuilder.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanService.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SampleRowsFilterValues.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoInterceptor.java trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp Added: trunk/wao-persistence/src/main/java/fr/ifremer/wao/AbstractWaoFilter.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/AbstractWaoFilter.java (rev 0) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/AbstractWaoFilter.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -0,0 +1,28 @@ +package fr.ifremer.wao; + +import fr.ifremer.wao.entity.ObsProgram; +import org.apache.commons.lang3.builder.ReflectionToStringBuilder; + +import java.io.Serializable; + +public abstract class AbstractWaoFilter implements Serializable { + + protected ObsProgram obsProgram; + + public AbstractWaoFilter(ObsProgram obsProgram) { + this.obsProgram = obsProgram; + } + + public ObsProgram getObsProgram() { + return obsProgram; + } + + /** Predicate to tell if user actually gave a criteria to filter entities. */ + public abstract boolean isFilled(); + + @Override + public String toString() { + return ReflectionToStringBuilder.reflectionToString(this); + } + +} Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/BoatsFilter.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/BoatsFilter.java 2014-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/BoatsFilter.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -21,9 +21,10 @@ * #L% */ -import org.apache.commons.lang3.builder.ReflectionToStringBuilder; +import fr.ifremer.wao.entity.ObsProgram; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; -import java.io.Serializable; import java.util.Objects; import java.util.Set; @@ -33,14 +34,14 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 4.0 */ -public class BoatsFilter implements Serializable { +public class BoatsFilter extends AbstractWaoFilter { private static final long serialVersionUID = 1L; /** * SampleRows filter on facade, zone, linecode. */ - protected SampleRowsFilter elligibleBoatsFilter; + protected SampleRowsFilter elligibleForSampleRowsFilter; /** * Filter on boat name. @@ -77,16 +78,17 @@ */ protected Set<String> fleetIds; - public BoatsFilter() { - elligibleBoatsFilter = new SampleRowsFilter(); + public BoatsFilter(ObsProgram obsProgram) { + super(obsProgram); + elligibleForSampleRowsFilter = new SampleRowsFilter(obsProgram); } - public SampleRowsFilter getElligibleBoatsFilter() { - return elligibleBoatsFilter; + public SampleRowsFilter getElligibleForSampleRowsFilter() { + return elligibleForSampleRowsFilter; } - public void setElligibleBoatsFilter(SampleRowsFilter elligibleBoatsFilter) { - this.elligibleBoatsFilter = elligibleBoatsFilter; + public void setElligibleForSampleRowsFilter(SampleRowsFilter elligibleForSampleRowsFilter) { + this.elligibleForSampleRowsFilter = elligibleForSampleRowsFilter; } public String getBoatName() { @@ -153,7 +155,7 @@ BoatsFilter that = (BoatsFilter) o; - boolean equals = elligibleBoatsFilter.equals(that.elligibleBoatsFilter) + boolean equals = elligibleForSampleRowsFilter.equals(that.elligibleForSampleRowsFilter) && Objects.equals(boatName, that.boatName) && Objects.equals(registrationCode, that.registrationCode) && WaoUtils.isEqualCollection(boatIds, that.boatIds) @@ -166,7 +168,7 @@ @Override public int hashCode() { - int hashCode = elligibleBoatsFilter.hashCode(); + int hashCode = elligibleForSampleRowsFilter.hashCode(); hashCode = 31 * hashCode + Objects.hashCode(boatName); hashCode = 31 * hashCode + Objects.hashCode(registrationCode); hashCode = 31 * hashCode + WaoUtils.collectionHashcode(boatIds); @@ -178,7 +180,16 @@ } @Override - public String toString() { - return ReflectionToStringBuilder.reflectionToString(this); + public boolean isFilled() { + boolean filled = StringUtils.isNoneBlank(boatName) + || StringUtils.isNoneBlank(registrationCode) + || CollectionUtils.isNotEmpty(boatIds) + || CollectionUtils.isNotEmpty(shipOwnerIds) + || CollectionUtils.isNotEmpty(districtIds) + || CollectionUtils.isNotEmpty(portOfRegistryIds) + || CollectionUtils.isNotEmpty(fleetIds) + || elligibleForSampleRowsFilter.isFilled(); + return filled; } + } Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/ContactsFilter.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/ContactsFilter.java 2014-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/ContactsFilter.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -23,17 +23,17 @@ import fr.ifremer.wao.entity.ContactState; import fr.ifremer.wao.entity.DataReliability; +import fr.ifremer.wao.entity.ObsProgram; import fr.ifremer.wao.entity.ObservationType; import fr.ifremer.wao.entity.ObservedDataControl; import fr.ifremer.wao.entity.SamplingStrategy; -import org.apache.commons.lang3.builder.ReflectionToStringBuilder; +import org.apache.commons.collections.CollectionUtils; -import java.io.Serializable; import java.util.Date; import java.util.Objects; import java.util.Set; -public class ContactsFilter implements Serializable { +public class ContactsFilter extends AbstractWaoFilter { private static final long serialVersionUID = 1L; @@ -93,9 +93,10 @@ protected boolean sortedByBoardingDate; - public ContactsFilter() { - sampleRowFilter = new SampleRowsFilter(); - boatFilter = new BoatsFilter(); + public ContactsFilter(ObsProgram obsProgram) { + super(obsProgram); + sampleRowFilter = new SampleRowsFilter(obsProgram); + boatFilter = new BoatsFilter(obsProgram); } public SampleRowsFilter getSampleRowFilter() { @@ -283,6 +284,32 @@ } @Override + public boolean isFilled() { + boolean filled = periodFrom != null + || periodTo != null + || CollectionUtils.isNotEmpty(contactIds) + || CollectionUtils.isNotEmpty(contactStates) + || CollectionUtils.isNotEmpty(dataReliabilities) + || CollectionUtils.isNotEmpty(actualSamplingStrategies) + || CollectionUtils.isNotEmpty(observationTypes) + || CollectionUtils.isNotEmpty(observedDataControls) + || CollectionUtils.isNotEmpty(observerIds) + || CollectionUtils.isNotEmpty(terrestrialLocationIds) + || CollectionUtils.isNotEmpty(contactStateMotiveIds) + || CollectionUtils.isNotEmpty(companyAcceptations) + || CollectionUtils.isNotEmpty(programAcceptations) + || CollectionUtils.isNotEmpty(completeSamplings) + || mammalsCaptureOnly + || mammalsObservationOnly + || commentDefinedOnly + || commentAdminDefinedOnly + || commentCompanyDefinedOnly + || boatFilter.isFilled() + || sampleRowFilter.isFilled(); + return filled; + } + + @Override public boolean equals(Object o) { if (this == o) return true; @@ -344,9 +371,4 @@ return hashCode; } - @Override - public String toString() { - return ReflectionToStringBuilder.reflectionToString(this); - } - } Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/SampleRowsFilter.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/SampleRowsFilter.java 2014-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/SampleRowsFilter.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -23,19 +23,16 @@ import fr.ifremer.wao.entity.ObsProgram; import fr.ifremer.wao.entity.SamplingStrategy; -import org.apache.commons.lang3.builder.ReflectionToStringBuilder; +import org.apache.commons.collections4.CollectionUtils; -import java.io.Serializable; import java.util.Date; import java.util.Objects; import java.util.Set; -public class SampleRowsFilter implements Serializable { +public class SampleRowsFilter extends AbstractWaoFilter { private static final long serialVersionUID = 1L; - protected ObsProgram obsProgram; - protected Set<String> sampleRowIds; /** Filter sample rows on sample month. @@ -70,14 +67,10 @@ protected Set<String> orderByArguments; - public ObsProgram getObsProgram() { - return obsProgram; + public SampleRowsFilter(ObsProgram obsProgram) { + super(obsProgram); } - public void setObsProgram(ObsProgram obsProgram) { - this.obsProgram = obsProgram; - } - public Date getPeriodFrom() { return periodFrom; } @@ -182,9 +175,24 @@ this.sampleRowIds = sampleRowIds; } + @Override public boolean isFilled() { - return false; + // volontairement, on ne considère pas ObsProgram car ce n'est pas un critère de sélection en lui-même + boolean filled = periodFrom != null + || periodTo != null + || CollectionUtils.isNotEmpty(sampleRowIds) + || CollectionUtils.isNotEmpty(fishingZoneFacadeNames) + || CollectionUtils.isNotEmpty(fishingZoneSectorNames) + || CollectionUtils.isNotEmpty(sampleRowCodes) + || CollectionUtils.isNotEmpty(programNames) + || CollectionUtils.isNotEmpty(fishingGearDcfIds) + || CollectionUtils.isNotEmpty(targetSpeciesDcfIds) + || CollectionUtils.isNotEmpty(samplingStrategies) + || CollectionUtils.isNotEmpty(terrestrialDistrictIds) + || CollectionUtils.isNotEmpty(companyIds); + return filled; } + @Override public boolean equals(Object o) { @@ -228,9 +236,4 @@ return hashCode; } - @Override - public String toString() { - return ReflectionToStringBuilder.reflectionToString(this); - } - } Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/BoatTopiaDao.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/BoatTopiaDao.java 2014-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/BoatTopiaDao.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -46,7 +46,7 @@ String sortProperty, boolean sortAscendant) { - HqlAndParametersBuilder<Boat> query = toSampleRowHqlAndParametersBuilder(filter); + HqlAndParametersBuilder<Boat> query = toBoatHqlAndParametersBuilder(filter); TopiaPagerBean pager = newPager(query.getHql(), query.getHqlParameters(), pageSize); pager.setPageIndex(pageIndex); @@ -58,34 +58,38 @@ public List<Boat> findAll(BoatsFilter filter) { - HqlAndParametersBuilder<Boat> query = toSampleRowHqlAndParametersBuilder(filter); + HqlAndParametersBuilder<Boat> query = toBoatHqlAndParametersBuilder(filter); List<Boat> boats = findAll(query.getHql(), query.getHqlParameters()); + return boats; } public List<Boat> find(BoatsFilter filter, TopiaPagerBean pager) { - HqlAndParametersBuilder<Boat> query = toSampleRowHqlAndParametersBuilder(filter); + HqlAndParametersBuilder<Boat> query = toBoatHqlAndParametersBuilder(filter); List<Boat> boats = find(query.getHql(), query.getHqlParameters(), pager); + return boats; } - protected HqlAndParametersBuilder<Boat> toSampleRowHqlAndParametersBuilder(BoatsFilter filter) { + protected HqlAndParametersBuilder<Boat> toBoatHqlAndParametersBuilder(BoatsFilter filter) { HqlAndParametersBuilder<Boat> query = newHqlAndParametersBuilder(); query.setAlias("b"); - SampleRowTopiaDao sampleRowTopiaDao = - topiaDaoSupplier.getDao(SampleRow.class, SampleRowTopiaDao.class); - HqlAndParametersBuilder<SampleRow> sampleRowsQuery = - sampleRowTopiaDao.toSampleRowHqlAndParametersBuilder( - filter.getElligibleBoatsFilter() - ); - query.addWhereClause("b.topiaId IN (SELECT eb.boat.topiaId FROM fr.ifremer.wao.entity.ElligibleBoatImpl eb WHERE eb.sampleRow.topiaId IN ( select sr.topiaId " + sampleRowsQuery.getHql() + " ))", - sampleRowsQuery.getHqlParameters()); + if (filter.getElligibleForSampleRowsFilter().isFilled()) { + SampleRowTopiaDao sampleRowTopiaDao = + topiaDaoSupplier.getDao(SampleRow.class, SampleRowTopiaDao.class); + HqlAndParametersBuilder<SampleRow> sampleRowsQuery = + sampleRowTopiaDao.toSampleRowHqlAndParametersBuilder( + filter.getElligibleForSampleRowsFilter() + ); + query.addWhereClause("b.topiaId IN (SELECT eb.boat.topiaId FROM fr.ifremer.wao.entity.ElligibleBoatImpl eb WHERE eb.sampleRow.topiaId IN ( select sr.topiaId " + sampleRowsQuery.getHql() + " ))", + sampleRowsQuery.getHqlParameters()); + } if (CollectionUtils.isNotEmpty(filter.getBoatIds())) { query.addIn(TopiaEntity.PROPERTY_TOPIA_ID, filter.getBoatIds()); @@ -124,7 +128,7 @@ } if (log.isTraceEnabled()) { - log.trace("query to filter sample rows for " + filter + " is " + query.getHql() + " " + query.getHqlParameters()); + log.trace("query to filter boats for " + filter + " is " + query.getHql() + " " + query.getHqlParameters()); } return query; Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java 2014-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -87,16 +87,30 @@ query.setAlias("c"); - SampleRowTopiaDao sampleRowTopiaDao = - topiaDaoSupplier.getDao(SampleRow.class, SampleRowTopiaDao.class); - HqlAndParametersBuilder<SampleRow> sampleRowsQuery = - sampleRowTopiaDao.toSampleRowHqlAndParametersBuilder( - filter.getSampleRowFilter() - ); - query.addWhereClause( - "c.sampleRow.topiaId in (select sr.topiaId " + sampleRowsQuery.getHql() + ")", - sampleRowsQuery.getHqlParameters()); + if (filter.getSampleRowFilter().isFilled()) { + SampleRowTopiaDao sampleRowTopiaDao = + topiaDaoSupplier.getDao(SampleRow.class, SampleRowTopiaDao.class); + HqlAndParametersBuilder<SampleRow> sampleRowsQuery = + sampleRowTopiaDao.toSampleRowHqlAndParametersBuilder( + filter.getSampleRowFilter() + ); + query.addWhereClause( + "c.sampleRow.topiaId in (select sr.topiaId " + sampleRowsQuery.getHql() + ")", + sampleRowsQuery.getHqlParameters()); + } + if (filter.getBoatFilter().isFilled()) { + BoatTopiaDao boatTopiaDao = + topiaDaoSupplier.getDao(Boat.class, BoatTopiaDao.class); + HqlAndParametersBuilder<Boat> boatsQuery = + boatTopiaDao.toBoatHqlAndParametersBuilder( + filter.getBoatFilter() + ); + query.addWhereClause( + "c.boat.topiaId in (select b.topiaId " + boatsQuery.getHql() + ")", + boatsQuery.getHqlParameters()); + } + String periodProperty; if (filter.isFilterOnObservationBeginDate()) { periodProperty = Contact.PROPERTY_OBSERVATION_BEGIN_DATE; Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/AbstractFilterValues.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/AbstractFilterValues.java (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/AbstractFilterValues.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -0,0 +1,26 @@ +package fr.ifremer.wao.services.service; + +import fr.ifremer.wao.entity.ObsProgram; + +import java.io.Serializable; +import java.util.Locale; + +public abstract class AbstractFilterValues implements Serializable { + + protected Locale locale; + + protected ObsProgram obsProgram; + + public AbstractFilterValues(Locale locale, ObsProgram obsProgram) { + this.locale = locale; + this.obsProgram = obsProgram; + } + + public ObsProgram getObsProgram() { + return obsProgram; + } + + public Locale getLocale() { + return locale; + } +} Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValues.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValues.java 2014-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValues.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -25,11 +25,11 @@ import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.ElligibleBoat; import fr.ifremer.wao.entity.Fleet; +import fr.ifremer.wao.entity.ObsProgram; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.ShipOwner; import fr.ifremer.wao.entity.TerrestrialLocation; -import java.io.Serializable; import java.util.Locale; import java.util.SortedSet; import java.util.TreeSet; @@ -41,14 +41,12 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 4.0 */ -public class BoatsFilterValues implements Serializable { +public class BoatsFilterValues extends AbstractFilterValues { private static final long serialVersionUID = 1L; - protected Locale locale; + protected SampleRowsFilterValues elligibleForSampleRowsFilterValues; - protected SampleRowsFilterValues elligibleBoatsFilterValues; - protected SortedSet<FilterOption> shipOwners = new TreeSet<>(); protected SortedSet<FilterOption> districts = new TreeSet<>(); @@ -57,15 +55,11 @@ protected SortedSet<FilterOption> fleets = new TreeSet<>(); - public BoatsFilterValues(Locale locale) { - this(locale, new SampleRowsFilterValues(locale)); + public BoatsFilterValues(Locale locale, ObsProgram obsProgram) { + super(locale, obsProgram); + this.elligibleForSampleRowsFilterValues = new SampleRowsFilterValues(locale, obsProgram); } - public BoatsFilterValues(Locale locale, SampleRowsFilterValues elligibleBoatsFilterValues) { - this.locale = locale; - this.elligibleBoatsFilterValues = elligibleBoatsFilterValues; - } - public void addBoat(Boat boat) { ShipOwner shipOwner = boat.getShipOwner(); @@ -97,12 +91,14 @@ for (ElligibleBoat elligibleBoat : boat.getElligibleBoat()) { SampleRow sampleRow = elligibleBoat.getSampleRow(); - elligibleBoatsFilterValues.addSampleRow(sampleRow); + if (obsProgram.equals(sampleRow.getObsProgram())) { + elligibleForSampleRowsFilterValues.addSampleRow(sampleRow); + } } } - public SampleRowsFilterValues getElligibleBoatsFilterValues() { - return elligibleBoatsFilterValues; + public SampleRowsFilterValues getElligibleForSampleRowsFilterValues() { + return elligibleForSampleRowsFilterValues; } public SortedSet<FilterOption> getShipOwners() { Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValues.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValues.java 2014-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValues.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -26,6 +26,7 @@ import fr.ifremer.wao.entity.ContactState; import fr.ifremer.wao.entity.ContactStateMotif; import fr.ifremer.wao.entity.DataReliability; +import fr.ifremer.wao.entity.ObsProgram; import fr.ifremer.wao.entity.ObservationType; import fr.ifremer.wao.entity.ObservedDataControl; import fr.ifremer.wao.entity.SampleRow; @@ -34,7 +35,6 @@ import fr.ifremer.wao.entity.WaoUser; import org.apache.commons.collections4.CollectionUtils; -import java.io.Serializable; import java.util.List; import java.util.Locale; import java.util.SortedSet; @@ -48,12 +48,10 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 4.0 */ -public class ContactsFilterValues implements Serializable { +public class ContactsFilterValues extends AbstractFilterValues { private static final long serialVersionUID = 1L; - protected Locale locale; - protected BoatsFilterValues boatsFilterValues; protected SampleRowsFilterValues sampleRowsFilterValues; @@ -85,10 +83,10 @@ //FIXME What to do with this ? protected SortedSet<FilterOption> completeSamplings = new TreeSet<>(); - public ContactsFilterValues(Locale locale) { - this.locale = locale; - this.boatsFilterValues = new BoatsFilterValues(locale); - this.sampleRowsFilterValues = new SampleRowsFilterValues(locale); + public ContactsFilterValues(Locale locale, ObsProgram obsProgram) { + super(locale, obsProgram); + this.boatsFilterValues = new BoatsFilterValues(locale, obsProgram); + this.sampleRowsFilterValues = new SampleRowsFilterValues(locale, obsProgram); } public void addContact(Contact contact) { Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java 2014-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerBoatsService.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -23,9 +23,7 @@ import com.google.common.base.Charsets; import com.google.common.base.Optional; -import com.google.common.collect.Sets; import fr.ifremer.wao.BoatsFilter; -import fr.ifremer.wao.SampleRowsFilter; import fr.ifremer.wao.WaoTechnicalException; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.BoatInfos; @@ -65,9 +63,10 @@ BoatTopiaDao dao = getBoatDao(); List<Boat> boats = dao.findAll(filter); - BoatsFilterValues boatsFilterValues = new BoatsFilterValues(serviceContext.getLocale()); + BoatsFilterValues boatsFilterValues = new BoatsFilterValues(serviceContext.getLocale(), filter.getObsProgram()); for (Boat boat : boats) { + // TODO brendan 07/04/14 ne pas inclure les lignes qui ne sont pas associées à un autre société que celle du coordinateur boatsFilterValues.addBoat(boat); } @@ -109,12 +108,8 @@ public BoatsFilter newBoatsFilter(AuthenticatedWaoUser authenticatedWaoUser) { - SampleRowsFilter sampleRowsFilter = new SampleRowsFilter(); + BoatsFilter boatsFilter = new BoatsFilter(authenticatedWaoUser.getObsProgram()); - BoatsFilter boatsFilter = new BoatsFilter(); - - sampleRowsFilter.setObsProgram(authenticatedWaoUser.getObsProgram()); - if (authenticatedWaoUser.isProfessional()) { // Pour le profesionnel, on restreint d'office à la liste des bateaux qu'il peut voir Collection<String> canReadBoatsTopiaIds = authenticatedWaoUser.getWaoUser().getCanReadBoatsTopiaIds(); @@ -127,13 +122,8 @@ } } - if (authenticatedWaoUser.isCoordinatorOrObserver()) { - - sampleRowsFilter.setCompanyIds(Sets.newHashSet(authenticatedWaoUser.getCompany().getTopiaId())); - } - - boatsFilter.setElligibleBoatsFilter(sampleRowsFilter); return boatsFilter; + } public InputStream exportBoats(BoatsFilter filter) { Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerContactsService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerContactsService.java 2014-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerContactsService.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -82,7 +82,7 @@ ContactTopiaDao dao = getContactDao(); List<Contact> contacts = dao.findAll(filter); - ContactsFilterValues contactsFilterValues = new ContactsFilterValues(serviceContext.getLocale()); + ContactsFilterValues contactsFilterValues = new ContactsFilterValues(serviceContext.getLocale(), filter.getObsProgram()); for (Contact contact : contacts) { contactsFilterValues.addContact(contact); @@ -124,10 +124,8 @@ public ContactsFilter newContactFilter(AuthenticatedWaoUser authenticatedWaoUser) { - ContactsFilter newContactsFilter = new ContactsFilter(); + ContactsFilter newContactsFilter = new ContactsFilter(authenticatedWaoUser.getObsProgram()); - newContactsFilter.getSampleRowFilter().setObsProgram(authenticatedWaoUser.getObsProgram()); - // DO NOT REMOVE THIS if (authenticatedWaoUser.isCoordinatorOrObserver()) { String authenticatedWaoUserCompanyTopiaId = authenticatedWaoUser.getWaoUser().getCompany().getTopiaId(); Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanBuilder.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanBuilder.java 2014-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanBuilder.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -136,7 +136,7 @@ public ObsMerSamplingPlanBuilder(Locale locale, SampleRowsFilter sampleRowsFilter) { this.sampleRowsFilter = sampleRowsFilter; - this.sampleRowsFilterValues = new SampleRowsFilterValues(locale); + this.sampleRowsFilterValues = new SampleRowsFilterValues(locale, sampleRowsFilter.getObsProgram()); this.facadeMap = new TreeMap<>(); this.observationTimesInDaysTotalExpected = new MutableDouble(); this.observationTimesInDaysTotalReal = new MutableLong(); 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-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanService.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -401,8 +401,7 @@ sampleRow); // calcul effort réalisé et estimé - SampleRowsFilter sampleRowsFilter1 = new SampleRowsFilter(); - sampleRowsFilter1.setObsProgram(sampleRowsFilter.getObsProgram()); + SampleRowsFilter sampleRowsFilter1 = new SampleRowsFilter(sampleRowsFilter.getObsProgram()); sampleRowsFilter1.setPeriodFrom(periodFrom); sampleRowsFilter1.setPeriodTo(periodTo); sampleRowsFilter1.setSampleRowIds(ImmutableSet.of(sampleRow.getTopiaId())); @@ -426,67 +425,37 @@ public SampleRowsFilter newSampleRowsFilter(AuthenticatedWaoUser authenticatedWaoUser) { - SampleRowsFilter newFilter = new SampleRowsFilter(); - // all users can see only rows for the program they are logged for - ObsProgram obsProgram = authenticatedWaoUser.getObsProgram(); - newFilter.setObsProgram(obsProgram); + SampleRowsFilter newFilter = new SampleRowsFilter(authenticatedWaoUser.getObsProgram()); // We don't want to see all rows but the ones important for today Date fromDate = serviceContext.getNow(); Date toDate = fromDate; - if (obsProgram.isObsDeb()) { + // Dans ObsMer et ObsVente, le plan est mensualisé + fromDate = DateUtils.truncate(fromDate, Calendar.MONTH); - if (authenticatedWaoUser.isObserver()) { + // la période initiale doit toujours aller d'avril à mars (contractuel). + // on prend la période dans laquelle on se trouve actuellement - // observer only need to see what he has to do in the next weeks - fromDate = DateUtils.addMonths(fromDate, -1); // needed for phone sampling plan - toDate = DateUtils.addMonths(toDate, 1); + // si on est avant le premier avril de l'année courante + boolean beforePeriodChangeInCurrentYear = DateUtil.getMonth(fromDate) < 3; - } else { - - // in the firsts months of a new year go from now to 6 months before - // in the rest of the year, just start at the beginning of the current year - if (DateUtil.getMonth(fromDate) < 3) { - fromDate = DateUtils.addMonths(fromDate, -6); - toDate = DateUtils.addMonths(toDate, 6); - } else { - fromDate = DateUtil.setFirstDayOfYear(fromDate); - toDate = DateUtil.setLastDayOfYear(toDate); - } - } - - fromDate = DateUtil.setMinTimeOfDay(fromDate); - toDate = DateUtil.setMaxTimeOfDay(toDate); - + if (beforePeriodChangeInCurrentYear) { + // on prend la période qui a commencé l'année dernière et qui finit + // cette année + fromDate = DateUtils.setMonths(fromDate, 3); + fromDate = DateUtils.addYears(fromDate, -1); } else { - - // Dans ObsMer et ObsVente, le plan est mensualisé - fromDate = DateUtils.truncate(fromDate, Calendar.MONTH); - - // la période initiale doit toujours aller d'avril à mars (contractuel). - // on prend la période dans laquelle on se trouve actuellement - - // si on est avant le premier avril de l'année courante - boolean beforePeriodChangeInCurrentYear = DateUtil.getMonth(fromDate) < 3; - - if (beforePeriodChangeInCurrentYear) { - // on prend la période qui a commencé l'année dernière et qui finit - // cette année - fromDate = DateUtils.setMonths(fromDate, 3); - fromDate = DateUtils.addYears(fromDate, -1); - } else { - // on prend la période qui commence cette année et se termine - // l'année prochaine - fromDate = DateUtils.setMonths(fromDate, 3); - } - - // on a fromDate sur le premier avril de la bonne année, on va - // jusqu'au mois de mars suivant - toDate = DateUtils.addMonths(fromDate, 11); + // on prend la période qui commence cette année et se termine + // l'année prochaine + fromDate = DateUtils.setMonths(fromDate, 3); } + // on a fromDate sur le premier avril de la bonne année, on va + // jusqu'au mois de mars suivant + toDate = DateUtils.addMonths(fromDate, 11); + newFilter.setPeriodFrom(fromDate); newFilter.setPeriodTo(toDate); @@ -649,7 +618,7 @@ // D'abord, on a besoin de récupérer toutes les observations réalisées // pour cette ligne du plan - ContactsFilter contactFilter = new ContactsFilter(); + ContactsFilter contactFilter = new ContactsFilter(sampleRowsFilter.getObsProgram()); contactFilter.setFilterOnObservationBeginDate(true); contactFilter.setPeriodFrom(sampleRowsFilter.getPeriodFrom()); Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SampleRowsFilterValues.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SampleRowsFilterValues.java 2014-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SampleRowsFilterValues.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -21,15 +21,16 @@ * #L% */ +import com.google.common.base.Preconditions; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.DCF5Code; import fr.ifremer.wao.entity.FishingGearDCF; import fr.ifremer.wao.entity.FishingZone; +import fr.ifremer.wao.entity.ObsProgram; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.TargetSpeciesDCF; import fr.ifremer.wao.entity.TerrestrialLocation; -import java.io.Serializable; import java.util.Locale; import java.util.SortedSet; import java.util.TreeSet; @@ -39,15 +40,10 @@ /** * Bean to hold all values that user can select to fill {@link fr.ifremer.wao.SampleRowsFilter}. */ -public class SampleRowsFilterValues implements Serializable { +public class SampleRowsFilterValues extends AbstractFilterValues { private static final long serialVersionUID = 1L; - /** - * Locale used by this sampling plan. Need to be here as part of future cache index. - */ - protected Locale locale; - protected SortedSet<FilterOption> fishingZoneFacadeNames = new TreeSet<>(); protected SortedSet<FilterOption> fishingZoneSectorNames = new TreeSet<>(); @@ -68,11 +64,12 @@ /** Values are the code and the label i18n key. */ protected SortedSet<FilterOption> targetSpeciesDcfs = new TreeSet<>(); - public SampleRowsFilterValues(Locale locale) { - this.locale=locale; + public SampleRowsFilterValues(Locale locale, ObsProgram obsProgram) { + super(locale, obsProgram); } public void addSampleRow(SampleRow sampleRow) { + Preconditions.checkArgument(obsProgram.equals(sampleRow.getObsProgram())); for (FishingZone fishingZone : sampleRow.getFishingZone()) { fishingZoneFacadeNames.add(FilterOption.forString(fishingZone.getFacadeName())); fishingZoneSectorNames.add(FilterOption.forString(fishingZone.getSectorName())); @@ -148,7 +145,4 @@ return targetSpeciesDcfs; } - public Locale getLocale() { - return locale; - } } Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoInterceptor.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoInterceptor.java 2014-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/WaoInterceptor.java 2014-04-07 10:33:52 UTC (rev 1849) @@ -88,7 +88,7 @@ admin.sizeCanReadBoats(); admin.getCompany().getTopiaId(); UserProfile userProfile = new UserProfileImpl(); - userProfile.setUserRole(UserRole.ADMIN); + userProfile.setUserRole(UserRole.COORDINATOR); userProfile.setObsProgram(ObsProgram.OBSMER); userProfile.setCanWrite(true); AuthenticatedWaoUser authenticatedWaoUser = new AuthenticatedWaoUser(admin, userProfile); Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp 2014-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/boats.jsp 2014-04-07 10:33:52 UTC (rev 1849) @@ -64,29 +64,29 @@ <div> <s:form method="GET" id="boats-filters-form" cssClass="filters-form"> - <s:select name="filter.elligibleBoatsFilter.fishingZoneFacadeNames" + <s:select name="filter.elligibleForSampleRowsFilter.fishingZoneFacadeNames" label="%{getText('wao.ui.field.FishingZone.facadeName')}" - list="filterValues.elligibleBoatsFilterValues.fishingZoneFacadeNames" + list="filterValues.elligibleForSampleRowsFilterValues.fishingZoneFacadeNames" listKey="value" listValue="label" multiple="true" - dataBinding="elligibleBoatsFilterValues.fishingZoneFacadeNames"/> + dataBinding="elligibleForSampleRowsFilterValues.fishingZoneFacadeNames"/> - <s:select name="filter.elligibleBoatsFilter.fishingZoneSectorNames" + <s:select name="filter.elligibleForSampleRowsFilter.fishingZoneSectorNames" label="%{getText('wao.ui.field.FishingZone.sectorName')}" - list="filterValues.elligibleBoatsFilterValues.fishingZoneSectorNames" + list="filterValues.elligibleForSampleRowsFilterValues.fishingZoneSectorNames" listKey="value" listValue="label" multiple="true" - dataBinding="elligibleBoatsFilterValues.fishingZoneSectorNames"/> + dataBinding="elligibleForSampleRowsFilterValues.fishingZoneSectorNames"/> - <s:select name="filter.elligibleBoatsFilter.sampleRowCodes" + <s:select name="filter.elligibleForSampleRowsFilter.sampleRowCodes" label="%{getText('wao.ui.field.SampleRow.code')}" - list="filterValues.elligibleBoatsFilterValues.sampleRowCodes" + list="filterValues.elligibleForSampleRowsFilterValues.sampleRowCodes" listKey="value" listValue="label" multiple="true" - dataBinding="elligibleBoatsFilterValues.sampleRowCodes"/> + dataBinding="elligibleForSampleRowsFilterValues.sampleRowCodes"/> <s:textfield name="filter.boatName" label="%{getText('wao.ui.form.Boat.name')}" Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp 2014-04-07 09:17:13 UTC (rev 1848) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/sampling-plan.jsp 2014-04-07 10:33:52 UTC (rev 1849) @@ -474,7 +474,7 @@ <s:if test="elligibleBoatsProvided"> <li> <s:url action="boats" id="viewElligibleBoatsUrl"> - <s:param name="filter.elligibleBoatsFilter.sampleRowCodes" value="code" /> + <s:param name="filter.elligibleForSampleRowsFilter.sampleRowCodes" value="code" /> </s:url> <s:a href="%{viewElligibleBoatsUrl}"> <s:text name="wao.ui.action.viewElligibleBoats" />