[Suiviobsmer-commits] r717 - in trunk: wao-business/src/main/java/fr/ifremer/wao wao-business/src/main/java/fr/ifremer/wao/bean wao-business/src/main/xmi wao-ui/src/main/java/fr/ifremer/wao/ui/base
Author: bleny Date: 2010-10-28 09:51:54 +0000 (Thu, 28 Oct 2010) New Revision: 717 Log: add multiplicity on field SampleRow in SamplingFilter to allow filtering on multiple row ; back-ward compatibility with existing code maintened Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterImpl.java trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2010-10-27 13:39:34 UTC (rev 716) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2010-10-28 09:51:54 UTC (rev 717) @@ -28,6 +28,7 @@ import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.WaoUser; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.nuiton.topia.framework.TopiaQuery; import org.nuiton.util.PeriodDates; @@ -222,10 +223,24 @@ // SampleRow filter depends on SampleRow OR sectorName OR facadeName // sectorName and facadeName are the two FishingZone filters known - if (sampleRow != null) { - query.addEquals(sampleRowProperty.$alias(), sampleRow); // FishingZone filter (sectorName OR facadeName) + if (CollectionUtils.isNotEmpty(filter.getSampleRows())) { + + query.addEquals(sampleRowProperty.$alias(), + filter.getSampleRows().toArray( + new SampleRow[filter.getSampleRows().size()])); + // another implementation for above line : (not tested) + // List<String> sampleRowsCodes = new ArrayList<String>(sampleRows.size()); + // for (SampleRow row : sampleRows) { + // sampleRowsCodes.add(row.getCode()); + // } + // query.addEquals(SampleRow.CODE, sampleRowsCodes.toArray(new String[sampleRowsCodes.size()])); + + if (logger.isDebugEnabled()) { + logger.debug("query for filtering multiple rows is " + query); + } + } else if (StringUtils.isNotEmpty(filter.getSectorName()) || StringUtils.isNotEmpty(filter.getFacadeName())) { Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterImpl.java 2010-10-27 13:39:34 UTC (rev 716) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterImpl.java 2010-10-28 09:51:54 UTC (rev 717) @@ -24,8 +24,15 @@ package fr.ifremer.wao.bean; +import fr.ifremer.wao.entity.SampleRow; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.util.ArrayList; +import java.util.Collection; + /** * SamplingFilterImpl * @@ -35,10 +42,14 @@ */ public class SamplingFilterImpl extends SamplingFilter { + private static final Logger log = + LoggerFactory.getLogger(SamplingFilterImpl.class); + + @Override public boolean isSamplingFiltered() { // all field except fromDate and nbMonthsFinishedFromToday - boolean result = getSampleRow() != null || + boolean result = getSampleRows() != null || StringUtils.isNotEmpty(getSectorName()) || StringUtils.isNotEmpty(getFacadeName()) || StringUtils.isNotEmpty(getProgramName()) || @@ -50,7 +61,7 @@ @Override public boolean isPeriodFilteredOnly() { boolean periodNotNull = getPeriod() != null; - boolean othersNull = getSampleRow() == null && + boolean othersNull = getSampleRows() == null && StringUtils.isEmpty(getSectorName()) && StringUtils.isEmpty(getFacadeName()) && StringUtils.isEmpty(getProgramName()) && @@ -60,4 +71,33 @@ return periodNotNull && othersNull; } + /** Help method similar to setSampleRows when filtering on a single row. */ + @Override + public void setSampleRow(SampleRow sampleRow) { + if (sampleRow == null) { + setSampleRows(null); + } else { + Collection<SampleRow> tempSampleRows = new ArrayList<SampleRow>(); + tempSampleRows.add(sampleRow); + setSampleRows(tempSampleRows); + } + } + + /** Help method similar to getSampleRows when filtering on a single row. + * Use this method only if you're sure there is a single row filtered. + * It is always safer to user getSampleRows but this method is provided + * to make this bean back-ward compatible with code written when + * sampleRow has no multiplicity and was not a collection. + */ + @Override + public SampleRow getSampleRow() { + SampleRow sampleRow = null; + if (CollectionUtils.isNotEmpty(getSampleRows())) { + sampleRow = getSampleRows(0); + if (getSampleRows().size() > 1) { + log.warn("other sample rows in the filter will be ignored"); + } + } + return sampleRow; + } } Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java 2010-10-27 13:39:34 UTC (rev 716) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java 2010-10-28 09:51:54 UTC (rev 717) @@ -36,6 +36,7 @@ import fr.ifremer.wao.service.ServiceUser; import fr.ifremer.wao.ui.data.FiltersModel; import fr.ifremer.wao.ui.data.GenericSelectModel; +import org.apache.commons.collections.CollectionUtils; import org.apache.tapestry5.OptionModel; import org.apache.tapestry5.SelectModel; import org.apache.tapestry5.annotations.Persist;
participants (1)
-
bleny@users.labs.libre-entreprise.org