[Suiviobsmer-commits] r499 - in trunk/wao-business/src: main/java/fr/ifremer/wao main/java/fr/ifremer/wao/bean main/java/fr/ifremer/wao/service main/xmi test/resources
Author: fdesbois Date: 2010-06-08 13:05:22 +0000 (Tue, 08 Jun 2010) New Revision: 499 Log: - Clean filters from TopiaQuery - Use WaoQueryBuilder in synthesis when needed - Refactor queries managment in ServiceSynthesis Removed: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/UserFilterImpl.java Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/BoatFilterImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/CompanyBoatInfosImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactFilterImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactStatus.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/FacadeRowImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSynthesisImpl.java trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-business/src/test/resources/log4j.properties Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2010-06-08 11:19:33 UTC (rev 498) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2010-06-08 13:05:22 UTC (rev 499) @@ -46,9 +46,9 @@ initialize(entityClass); } -// public WaoQueryBuilder(TopiaQuery query) { -// this.query = query; -// } + public WaoQueryBuilder(TopiaQuery query) { + this.query = query; + } private void initialize(Class<?> entityClass) { if (Boat.class.isAssignableFrom(entityClass)) { @@ -85,14 +85,14 @@ // this.query = query; // } // -// public void setSampleRowProperty(String sampleRowProperty) { -// this.sampleRowProperty = sampleRowProperty; -// } + public void setSampleRowProperty(String sampleRowProperty) { + this.sampleRowProperty = sampleRowProperty; + } + + public void setFishingZoneProperty(String fishingZoneProperty) { + this.fishingZoneProperty = fishingZoneProperty; + } // -// public void setFishingZoneProperty(String fishingZoneProperty) { -// this.fishingZoneProperty = fishingZoneProperty; -// } -// // public void setBoatProperty(String boatProperty) { // this.boatProperty = boatProperty; // } @@ -105,9 +105,9 @@ // this.elligibleBoatProperty = elligibleBoatProperty; // } // -// public String getSampleRowProperty() { -// return sampleRowProperty; -// } + public String getSampleRowProperty() { + return sampleRowProperty; + } // // public String getFishingZoneProperty() { // return fishingZoneProperty; @@ -143,6 +143,12 @@ return result; } + public String getFishingZoneDistrictProperty() { + String result = getProperty(fishingZoneProperty, + FishingZone.DISTRICT_CODE); + return result; + } + public String getCodeDCF5Property() { String result = getProperty(sampleRowProperty, SampleRow.PROFESSION, @@ -156,6 +162,12 @@ return result; } + public String getSampleRowCodeProperty() { + String result = getProperty(sampleRowProperty, + SampleRow.CODE); + return result; + } + public String getSampleRowBeginProperty() { String result = getProperty(sampleRowProperty, SampleRow.PERIOD_BEGIN); @@ -174,6 +186,12 @@ return result; } + public String getSampleRowFishingZoneProperty() { + String result = getProperty(sampleRowProperty, + SampleRow.FISHING_ZONE); + return result; + } + public String getBoatImmatriculationProperty() { String result = getProperty(boatProperty, Boat.IMMATRICULATION); Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/BoatFilterImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/BoatFilterImpl.java 2010-06-08 11:19:33 UTC (rev 498) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/BoatFilterImpl.java 2010-06-08 13:05:22 UTC (rev 499) @@ -25,10 +25,7 @@ package fr.ifremer.wao.bean; -import fr.ifremer.wao.entity.Boat; import org.apache.commons.lang.StringUtils; -import org.nuiton.topia.framework.TopiaQuery; -import org.nuiton.topia.framework.TopiaQuery.Op; /** * BoatFilterImpl @@ -39,31 +36,31 @@ */ public class BoatFilterImpl extends BoatFilter { - @Override - public TopiaQuery prepareQueryForBoat(TopiaQuery query, String boat) { +// @Override +// public TopiaQuery prepareQueryForBoat(TopiaQuery query, String boat) { +// +// // Limit +// query = prepareQueryForLimit(query); +// +// if (StringUtils.isNotEmpty(getBoatName())) { +// String nameProperty = TopiaQuery.getProperty(boat, Boat.NAME); +// query.add(nameProperty, Op.LIKE, getBoatName().trim() + "%"); +// } +// +// if (StringUtils.isNotEmpty(getBoatDistrictCode())) { +// String districtCodeProperty = +// TopiaQuery.getProperty(boat, Boat.DISTRICT_CODE); +// query.add(districtCodeProperty, getBoatDistrictCode().trim()); +// } +// +// if (getBoatImmatriculation() != null) { +// String immatriculationProperty = +// TopiaQuery.getProperty(boat, Boat.IMMATRICULATION); +// query.add(immatriculationProperty, getBoatImmatriculation()); +// } +// return query; +// } - // Limit - query = prepareQueryForLimit(query); - - if (StringUtils.isNotEmpty(getBoatName())) { - String nameProperty = TopiaQuery.getProperty(boat, Boat.NAME); - query.add(nameProperty, Op.LIKE, getBoatName().trim() + "%"); - } - - if (StringUtils.isNotEmpty(getBoatDistrictCode())) { - String districtCodeProperty = - TopiaQuery.getProperty(boat, Boat.DISTRICT_CODE); - query.add(districtCodeProperty, getBoatDistrictCode().trim()); - } - - if (getBoatImmatriculation() != null) { - String immatriculationProperty = - TopiaQuery.getProperty(boat, Boat.IMMATRICULATION); - query.add(immatriculationProperty, getBoatImmatriculation()); - } - return query; - } - @Override public boolean isBoatFiltered() { return StringUtils.isNotEmpty(getBoatName()) || Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/CompanyBoatInfosImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/CompanyBoatInfosImpl.java 2010-06-08 11:19:33 UTC (rev 498) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/CompanyBoatInfosImpl.java 2010-06-08 13:05:22 UTC (rev 499) @@ -28,9 +28,10 @@ import fr.ifremer.wao.entity.ElligibleBoat; import fr.ifremer.wao.entity.ElligibleBoatImpl; import fr.ifremer.wao.entity.SampleRow; +import org.apache.commons.lang.StringUtils; + import java.util.Collection; import java.util.Iterator; -import org.apache.commons.lang.StringUtils; /** * ElligibleBoatsCompanyImpl Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactFilterImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactFilterImpl.java 2010-06-08 11:19:33 UTC (rev 498) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactFilterImpl.java 2010-06-08 13:05:22 UTC (rev 499) @@ -25,13 +25,6 @@ package fr.ifremer.wao.bean; -import fr.ifremer.wao.entity.Contact; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import org.nuiton.topia.framework.TopiaQuery; -import org.nuiton.topia.persistence.TopiaEntity; - /** * ContactFilterImpl * Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactStatus.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactStatus.java 2010-06-08 11:19:33 UTC (rev 498) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactStatus.java 2010-06-08 13:05:22 UTC (rev 499) @@ -30,9 +30,6 @@ import fr.ifremer.wao.entity.SampleMonth; import fr.ifremer.wao.entity.SampleMonthDAO; import fr.ifremer.wao.entity.SampleRow; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; import org.apache.commons.lang.BooleanUtils; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; @@ -41,6 +38,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + /** * This class is used to know status changed between an old contact and a new * one (new change to apply). There is three different cases for constructor Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/FacadeRowImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/FacadeRowImpl.java 2010-06-08 11:19:33 UTC (rev 498) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/FacadeRowImpl.java 2010-06-08 13:05:22 UTC (rev 499) @@ -26,6 +26,7 @@ package fr.ifremer.wao.bean; import fr.ifremer.wao.entity.SampleRow; + import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; 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-06-08 11:19:33 UTC (rev 498) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterImpl.java 2010-06-08 13:05:22 UTC (rev 499) @@ -25,15 +25,7 @@ package fr.ifremer.wao.bean; -import fr.ifremer.wao.WaoUtils; -import fr.ifremer.wao.entity.FishingZone; -import fr.ifremer.wao.entity.Profession; -import fr.ifremer.wao.entity.SampleRow; -import java.util.Calendar; -import java.util.GregorianCalendar; import org.apache.commons.lang.StringUtils; -import org.nuiton.topia.framework.TopiaQuery; -import org.nuiton.topia.framework.TopiaQuery.Op; /** * SamplingFilterImpl @@ -43,137 +35,137 @@ * @author fdesbois <fdesbois at codelutin.com> */ public class SamplingFilterImpl extends SamplingFilter { +// +// /** +// * Prepare the {@code query} for fishingZone filters. Need to know the +// * FishingZone {@code main} alias for the query. +// * +// * @param query to prepare with fishingZone filters (facadeName, sectorName) +// * @param sampleRow alias of the fishingZone in the query +// * @return the query with elements added +// * @since 1.1.2 +// */ +// protected TopiaQuery prepareQueryForFishingZone(TopiaQuery query, +// String sampleRow) { +// +// if (StringUtils.isNotEmpty(getSectorName())) { +// String sectorNameProperty = +// TopiaQuery.getProperty(sampleRow, FishingZone.SECTOR_NAME); +// query.add(sectorNameProperty, getSectorName()); +// } else if (StringUtils.isNotEmpty(getFacadeName())) { +// String facadeNameProperty = +// TopiaQuery.getProperty(sampleRow, FishingZone.FACADE_NAME); +// query.add(facadeNameProperty, getFacadeName()); +// } +// +// return query; +// } +// +// /** +// * Prepare the {@code query} with sampleRow filters. Need the {@code main} +// * alias to set SampleRow properties. +// * +// * @param query to prepare with sampleRow filters +// * @param sampleRow alias for sampleRow entity in the query +// * @return the query with filtered elements added +// */ +// @Override +// public TopiaQuery prepareQueryForSampling(TopiaQuery query, String sampleRow) { +// query = prepareQueryForSampling(query, sampleRow, null); +// return query; +// } +// +// /** +// * Prepare the {@code query} with sampleRow filters. Need the {@code main} +// * alias to set SampleRow properties. The zoneAlias can also be used if +// * the query already have the fishingZone. +// * +// * @param query to prepare with sampleRow filters +// * @param sampleRow alias for sampleRow entity in the query +// * @param zoneAlias for fishingZone entity in the query (can be null) +// * @return the query with filtered elements added +// */ +// @Override +// public TopiaQuery prepareQueryForSampling(TopiaQuery query, String sampleRow, +// String zoneAlias) { +// +// // SampleRow filter depends on SampleRow OR sectorName OR facadeName +// // sectorName and facadeName are the two FishingZone filters known +// if (getSampleRow() != null) { +// query.add(sampleRow, getSampleRow()); +// // FishingZone filter (sectorName OR facadeName) +// } else if (StringUtils.isNotEmpty(getSectorName()) || +// StringUtils.isNotEmpty(getFacadeName())) { +// +// // If zoneAlias is set, no need to create a subquery to link +// // with fishingZone +// if (zoneAlias != null) { +// query = prepareQueryForFishingZone(query, zoneAlias); +// } else { +// // Otherwise, create a subquery to retrieve sampleRows +// // corresponding to fishingZone filters +// String fishingZoneProperty = +// TopiaQuery.getProperty("SR", SampleRow.FISHING_ZONE); +// TopiaQuery subquery = new TopiaQuery(SampleRow.class, "SR"). +// addFrom(FishingZone.class, "F"). +// add("F IN elements(" + fishingZoneProperty + ")"); +// +// subquery = prepareQueryForFishingZone(subquery, "F"); +// +// query.add(sampleRow + " IN (" + subquery.fullQuery() + ")"). +// addParams(subquery.getParams()); +// } +// } +// +// // CodeDCF5 filter +// if (getCodeDCF5() != null) { +// String codeDCF5Prop = +// TopiaQuery.getProperty(sampleRow, +// SampleRow.PROFESSION, +// Profession.CODE_DCF5); +// query.add(codeDCF5Prop, Op.LIKE, "%" + getCodeDCF5() + "%"); +// } +// +// // Program filter +// if (getProgramName() != null) { +// String programProperty = +// TopiaQuery.getProperty(sampleRow, SampleRow.PROGRAM_NAME); +// query.add(programProperty, getProgramName()); +// } +// +// String periodEndProperty = +// TopiaQuery.getProperty(sampleRow, SampleRow.PERIOD_END); +// String periodBeginProperty = +// TopiaQuery.getProperty(sampleRow, SampleRow.PERIOD_BEGIN); +// +// // Period filter on sampleRow dates +// if (getPeriod() != null) { +// getPeriod().initDayOfMonthExtremities(); +// query.add(periodBeginProperty, Op.LT, getPeriod().getThruDate()). +// add(periodEndProperty, Op.GT, getPeriod().getFromDate()); +// } else if (getFromDate() != null) { +// query.add(periodEndProperty, Op.GE, getFromDate()); +// } +// +// // Company +// if (getCompany() != null) { +// String companyProperty = +// TopiaQuery.getProperty(sampleRow, SampleRow.COMPANY); +// query.add(companyProperty, getCompany()); +// } +// +// if (getNbMonthFinishedFromToday() != null) { +// // Only rows which are not finished will be kept +// Calendar calendar = new GregorianCalendar(); +// calendar.setTime(WaoUtils.getCurrentDate()); +// calendar.add(Calendar.MONTH, getNbMonthFinishedFromToday()); +// query.add(periodEndProperty, Op.GE, calendar.getTime()); +// } +// +// return query; +// } - /** - * Prepare the {@code query} for fishingZone filters. Need to know the - * FishingZone {@code main} alias for the query. - * - * @param query to prepare with fishingZone filters (facadeName, sectorName) - * @param sampleRow alias of the fishingZone in the query - * @return the query with elements added - * @since 1.1.2 - */ - protected TopiaQuery prepareQueryForFishingZone(TopiaQuery query, - String sampleRow) { - - if (StringUtils.isNotEmpty(getSectorName())) { - String sectorNameProperty = - TopiaQuery.getProperty(sampleRow, FishingZone.SECTOR_NAME); - query.add(sectorNameProperty, getSectorName()); - } else if (StringUtils.isNotEmpty(getFacadeName())) { - String facadeNameProperty = - TopiaQuery.getProperty(sampleRow, FishingZone.FACADE_NAME); - query.add(facadeNameProperty, getFacadeName()); - } - - return query; - } - - /** - * Prepare the {@code query} with sampleRow filters. Need the {@code main} - * alias to set SampleRow properties. - * - * @param query to prepare with sampleRow filters - * @param sampleRow alias for sampleRow entity in the query - * @return the query with filtered elements added - */ @Override - public TopiaQuery prepareQueryForSampling(TopiaQuery query, String sampleRow) { - query = prepareQueryForSampling(query, sampleRow, null); - return query; - } - - /** - * Prepare the {@code query} with sampleRow filters. Need the {@code main} - * alias to set SampleRow properties. The zoneAlias can also be used if - * the query already have the fishingZone. - * - * @param query to prepare with sampleRow filters - * @param sampleRow alias for sampleRow entity in the query - * @param zoneAlias for fishingZone entity in the query (can be null) - * @return the query with filtered elements added - */ - @Override - public TopiaQuery prepareQueryForSampling(TopiaQuery query, String sampleRow, - String zoneAlias) { - - // SampleRow filter depends on SampleRow OR sectorName OR facadeName - // sectorName and facadeName are the two FishingZone filters known - if (getSampleRow() != null) { - query.add(sampleRow, getSampleRow()); - // FishingZone filter (sectorName OR facadeName) - } else if (StringUtils.isNotEmpty(getSectorName()) || - StringUtils.isNotEmpty(getFacadeName())) { - - // If zoneAlias is set, no need to create a subquery to link - // with fishingZone - if (zoneAlias != null) { - query = prepareQueryForFishingZone(query, zoneAlias); - } else { - // Otherwise, create a subquery to retrieve sampleRows - // corresponding to fishingZone filters - String fishingZoneProperty = - TopiaQuery.getProperty("SR", SampleRow.FISHING_ZONE); - TopiaQuery subquery = new TopiaQuery(SampleRow.class, "SR"). - addFrom(FishingZone.class, "F"). - add("F IN elements(" + fishingZoneProperty + ")"); - - subquery = prepareQueryForFishingZone(subquery, "F"); - - query.add(sampleRow + " IN (" + subquery.fullQuery() + ")"). - addParams(subquery.getParams()); - } - } - - // CodeDCF5 filter - if (getCodeDCF5() != null) { - String codeDCF5Prop = - TopiaQuery.getProperty(sampleRow, - SampleRow.PROFESSION, - Profession.CODE_DCF5); - query.add(codeDCF5Prop, Op.LIKE, "%" + getCodeDCF5() + "%"); - } - - // Program filter - if (getProgramName() != null) { - String programProperty = - TopiaQuery.getProperty(sampleRow, SampleRow.PROGRAM_NAME); - query.add(programProperty, getProgramName()); - } - - String periodEndProperty = - TopiaQuery.getProperty(sampleRow, SampleRow.PERIOD_END); - String periodBeginProperty = - TopiaQuery.getProperty(sampleRow, SampleRow.PERIOD_BEGIN); - - // Period filter on sampleRow dates - if (getPeriod() != null) { - getPeriod().initDayOfMonthExtremities(); - query.add(periodBeginProperty, Op.LT, getPeriod().getThruDate()). - add(periodEndProperty, Op.GT, getPeriod().getFromDate()); - } else if (getFromDate() != null) { - query.add(periodEndProperty, Op.GE, getFromDate()); - } - - // Company - if (getCompany() != null) { - String companyProperty = - TopiaQuery.getProperty(sampleRow, SampleRow.COMPANY); - query.add(companyProperty, getCompany()); - } - - if (getNbMonthFinishedFromToday() != null) { - // Only rows which are not finished will be kept - Calendar calendar = new GregorianCalendar(); - calendar.setTime(WaoUtils.getCurrentDate()); - calendar.add(Calendar.MONTH, getNbMonthFinishedFromToday()); - query.add(periodEndProperty, Op.GE, calendar.getTime()); - } - - return query; - } - - @Override public boolean isSamplingFiltered() { // all field except fromDate and nbMonthsFinishedFromToday boolean result = getSampleRow() != null || Deleted: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/UserFilterImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/UserFilterImpl.java 2010-06-08 11:19:33 UTC (rev 498) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/UserFilterImpl.java 2010-06-08 13:05:22 UTC (rev 499) @@ -1,47 +0,0 @@ -/* - * #%L - * Wao :: Business - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2010 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package fr.ifremer.wao.bean; - -import org.nuiton.topia.framework.TopiaQuery; - -/** - * UserFilterImpl - * - * Created: 18 janv. 2010 - * - * @author fdesbois <fdesbois at codelutin.com> - */ -public class UserFilterImpl extends UserFilter { - - @Override - public TopiaQuery prepareQueryForLimit(TopiaQuery query) { - if (getStartIndex() != null && getEndIndex() != null) { - query.setLimit(getStartIndex(), getEndIndex()); - } - return query; - } - -} Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2010-06-08 11:19:33 UTC (rev 498) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2010-06-08 13:05:22 UTC (rev 499) @@ -27,12 +27,9 @@ import com.csvreader.CsvReader; import com.csvreader.CsvWriter; +import fr.ifremer.wao.*; import fr.ifremer.wao.io.ImportHelper; -import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoBusinessException.Type; -import fr.ifremer.wao.WaoContext; -import fr.ifremer.wao.WaoDAOHelper; -import fr.ifremer.wao.WaoException; import fr.ifremer.wao.bean.FacadeRow; import fr.ifremer.wao.bean.FacadeRowImpl; import fr.ifremer.wao.bean.ImportResults; @@ -323,45 +320,53 @@ SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction); - // FishingZone properties - String fishingZoneAlias = "Z"; - String fishingZoneFacadeProperty = - TopiaQuery.getProperty(fishingZoneAlias, FishingZone.FACADE_NAME); - String fishingZoneSectorProperty = - TopiaQuery.getProperty(fishingZoneAlias, FishingZone.SECTOR_NAME); - String fishingZoneDistrictProperty = - TopiaQuery.getProperty(fishingZoneAlias, FishingZone.DISTRICT_CODE); - String fishingZoneSampleRowProperty = - TopiaQuery.getProperty(fishingZoneAlias, FishingZone.SAMPLE_ROW); +// // FishingZone properties +// String fishingZoneAlias = "Z"; +// String fishingZoneFacadeProperty = +// TopiaQuery.getProperty(fishingZoneAlias, FishingZone.FACADE_NAME); +// String fishingZoneSectorProperty = +// TopiaQuery.getProperty(fishingZoneAlias, FishingZone.SECTOR_NAME); +// String fishingZoneDistrictProperty = +// TopiaQuery.getProperty(fishingZoneAlias, FishingZone.DISTRICT_CODE); +// String fishingZoneSampleRowProperty = +// TopiaQuery.getProperty(fishingZoneAlias, FishingZone.SAMPLE_ROW); +// +// // SampleRow properties +// String sampleRowAlias = "S"; +// String sampleRowCodeProperty = +// TopiaQuery.getProperty(sampleRowAlias, SampleRow.CODE); +// +// // Query +// TopiaQuery query = dao.createQuery(sampleRowAlias).addDistinct(). +// addFrom(FishingZone.class, fishingZoneAlias). +// // TODO-fdesbois-2010-06-07 for ToPIA 2.4 : replace this statement by addInElements +// add(sampleRowAlias + " IN elements(" + fishingZoneSampleRowProperty + ")"); +// +// filter.prepareQueryForSampling(query, sampleRowAlias, fishingZoneAlias); - // SampleRow properties - String sampleRowAlias = "S"; - String sampleRowCodeProperty = - TopiaQuery.getProperty(sampleRowAlias, SampleRow.CODE); + String fishingZoneAlias = WaoQueryBuilder.ALIAS_FISHING_ZONE; - // Query - TopiaQuery query = dao.createQuery(sampleRowAlias).addDistinct(). - addFrom(FishingZone.class, fishingZoneAlias). - // TODO-fdesbois-2010-06-07 for ToPIA 2.4 : replace this statement by addInElements - add(sampleRowAlias + " IN elements(" + fishingZoneSampleRowProperty + ")"); + WaoQueryBuilder builder = new WaoQueryBuilder(SampleRow.class); - filter.prepareQueryForSampling(query, sampleRowAlias, fishingZoneAlias); + // Set fishingZoneProperty : we want to control this association + builder.setFishingZoneProperty(fishingZoneAlias); + builder.applySamplingFilter(filter); - // Company is now a part of filter and will be set in previous method -// if (company != null) { -// query.add("S." + SampleRow.COMPANY, company); -// } + // Add join for FishingZone + TopiaQuery query = builder.toQuery(). + addDistinct(). + addLeftJoin(builder.getSampleRowFishingZoneProperty(), + fishingZoneAlias, false). + // Order By facade, sector, districtCode, sampleRowCode + addOrder(builder.getFacadeNameProperty(), + builder.getSectorNameProperty(), + builder.getFishingZoneDistrictProperty(), + builder.getSampleRowCodeProperty()); - // Order By facade, sector, districtCode, sampleRowCode - query.addOrder(fishingZoneFacadeProperty, - fishingZoneSectorProperty, - fishingZoneDistrictProperty, - sampleRowCodeProperty). - // Need fishingZone properties in Select to use them in orderBy - addSelect(fishingZoneFacadeProperty, - fishingZoneSectorProperty, - fishingZoneDistrictProperty); +// addSelect(queryBuilder.getFacadeNameProperty(), +// queryBuilder.getSectorNameProperty(), +// queryBuilder.getFishingZoneDistrictProperty()); if (log.isDebugEnabled()) { log.debug("Query : " + query); @@ -383,14 +388,17 @@ Company company) throws TopiaException { SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction); - TopiaQuery query = dao.createQuery(); + TopiaQuery query = dao.createQuery(). + addDistinct(). + setSelect(SampleRow.PROGRAM_NAME); if (company != null) { - query.add(SampleRow.COMPANY, company); + query.addEquals(SampleRow.COMPANY, company); } - return (List<String>)query.addDistinct(). - setSelect(SampleRow.PROGRAM_NAME).execute(); + List<String> programs = transaction.findByQuery(query); + + return programs; } @Override @@ -400,16 +408,28 @@ SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction); - TopiaQuery query = dao.createQuery("S"). - addDistinct().addOrder("S." + SampleRow.CODE); +// TopiaQuery query = dao.createQuery("S"). +// addDistinct(). +// addOrder("S." + SampleRow.CODE); +// +// query = filter.prepareQueryForSampling(query, "S"); +// +// if (log.isDebugEnabled()) { +// log.debug("Query : " + query); +// } +// +// return dao.findAllByQuery(query); - query = filter.prepareQueryForSampling(query, "S"); + WaoQueryBuilder builder = new WaoQueryBuilder(SampleRow.class). + applySamplingFilter(filter); - if (log.isDebugEnabled()) { - log.debug("Query : " + query); - } + TopiaQuery query = builder.toQuery(). + addDistinct(). + addOrder(builder.getSampleRowCodeProperty()); - return dao.findAllByQuery(query); + List<SampleRow> rows = dao.findAllByQuery(query); + + return rows; } @Override @@ -438,10 +458,10 @@ SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction); TopiaQuery query = dao.createQuery(). - add(SampleRow.CODE, sampleRowCode); + addEquals(SampleRow.CODE, sampleRowCode); if (!user.isAdmin()) { - query.add(SampleRow.COMPANY, user.getCompany()); + query.addEquals(SampleRow.COMPANY, user.getCompany()); } query.addLoad(SampleRow.SAMPLE_ROW_LOG); @@ -483,11 +503,11 @@ int year = begin.get(Calendar.YEAR); SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction); - TopiaQuery query = - dao.createQuery().add(SampleRow.CODE, Op.LIKE, year + "_%"); String maxCode = - query.executeToString("MAX(" + SampleRow.CODE + ")"); + dao.createQuery(). + addWhere(SampleRow.CODE, Op.LIKE, year + "_%"). + executeToString(transaction, "MAX(" + SampleRow.CODE + ")"); if (log.isDebugEnabled()) { log.debug("Max code found : " + maxCode); @@ -576,12 +596,6 @@ FileOutputStream output = new FileOutputStream(file); writer = new CsvWriter(output, ',', context.getCsvCharset()); - // Get min and max dates to have the biggest period -// Date min = (Date)query.executeToObject("MIN(S." + SampleRow.PERIOD_BEGIN + ")"); -// Date max = (Date)query.executeToObject("MAX(S." + SampleRow.PERIOD_END + ")"); - -// PeriodDates periodMax = new PeriodDates(min, max); - PeriodDates period = filter.getPeriod(); period.setPattern(SAMPLING.defaultDatePattern()); List<String> monthHeaders = period.getFormatedMonths(); @@ -591,27 +605,21 @@ export.writeHeaders(); - // Get sampleRows from database filtered by company if needed - // (only for user) and period + // Get sampleRows from database filtered SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction); - String sampleRowAlias = "S"; - String sampleRowCodeProperty = - TopiaQuery.getProperty(sampleRowAlias, SampleRow.CODE); - TopiaQuery query = dao.createQuery(sampleRowAlias); - -// // Evo #2227 : No filter on company for GUEST users, all samplingPlan can be exported -// if (!user.isAdmin() && !user.isGuest()) { -// query.add("S." + SampleRow.COMPANY, user.getCompany()); -// } +// String sampleRowAlias = "S"; +// String sampleRowCodeProperty = +// TopiaQuery.getProperty(sampleRowAlias, SampleRow.CODE); +// TopiaQuery query = dao.createQuery(sampleRowAlias); +// filter.prepareQueryForSampling(query, sampleRowAlias); // -// // Prepare period dates -// period.initDayOfMonthExtremities(); -// query.add("S." + SampleRow.PERIOD_BEGIN, Op.LT, period.getThruDate()). -// add("S." + SampleRow.PERIOD_END, Op.GT, period.getFromDate()); +// query.addOrder(sampleRowCodeProperty); - filter.prepareQueryForSampling(query, sampleRowAlias); + WaoQueryBuilder builder = new WaoQueryBuilder(SampleRow.class). + applySamplingFilter(filter); - query.addOrder(sampleRowCodeProperty); + TopiaQuery query = builder.toQuery(). + addOrder(builder.getSampleRowCodeProperty()); List<SampleRow> rows = dao.findAllByQuery(query); Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSynthesisImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSynthesisImpl.java 2010-06-08 11:19:33 UTC (rev 498) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSynthesisImpl.java 2010-06-08 13:05:22 UTC (rev 499) @@ -28,43 +28,22 @@ import fr.ifremer.wao.WaoContext; import fr.ifremer.wao.WaoDAOHelper; import fr.ifremer.wao.WaoException; -import fr.ifremer.wao.bean.ContactAverageReactivityImpl; -import fr.ifremer.wao.bean.ContactAverageReactivity; -import fr.ifremer.wao.bean.BoardingResult; -import fr.ifremer.wao.bean.BoardingResultImpl; -import fr.ifremer.wao.bean.ContactState; -import fr.ifremer.wao.bean.ContactStateStatistics; -import fr.ifremer.wao.bean.ContactStateStatisticsImpl; -import fr.ifremer.wao.bean.SamplingFilter; -import fr.ifremer.wao.entity.Boat; -import fr.ifremer.wao.entity.Company; -import fr.ifremer.wao.entity.Contact; -import fr.ifremer.wao.entity.ContactDAO; -import fr.ifremer.wao.entity.SampleMonth; -import fr.ifremer.wao.entity.SampleMonthDAO; -import fr.ifremer.wao.entity.SampleRow; -import fr.ifremer.wao.entity.WaoUser; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.SortedMap; -import java.util.TreeMap; +import fr.ifremer.wao.WaoQueryBuilder; +import fr.ifremer.wao.bean.*; +import fr.ifremer.wao.entity.*; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaQuery; import org.nuiton.topia.framework.TopiaQuery.Op; -import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.util.DateUtils; import org.nuiton.util.PeriodDates; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; + /** * ServiceSynthesisImpl * @@ -127,26 +106,31 @@ } SampleMonthDAO dao = WaoDAOHelper.getSampleMonthDAO(transaction); - String periodDate = "M." + SampleMonth.PERIOD_DATE; + String periodDateProperty = "M." + SampleMonth.PERIOD_DATE; String realTidesProperty = filter.getEstimatedTides() ? SampleMonth.ESTIMATED_TIDES_VALUE : SampleMonth.REAL_TIDES_VALUE; TopiaQuery query = dao.createQuery("M"). - setSelect(periodDate). + setSelect(periodDateProperty). addSelect("SUM(M." + realTidesProperty + ")"). addSelect("SUM(M." + SampleMonth.EXPECTED_TIDES_VALUE + ")"). - add(periodDate + " BETWEEN :fromDate AND :thruDate"). - addParam("fromDate", period.getFromDate()). - addParam("thruDate", period.getThruDate()). - addGroup(periodDate).addOrder(periodDate); +// addWhere(periodDate + " BETWEEN :fromDate AND :thruDate"). +// addParam("fromDate", period.getFromDate()). +// addParam("thruDate", period.getThruDate()). + addBetween(periodDateProperty, period.getFromDate(), period.getThruDate()). + addGroup(periodDateProperty).addOrder(periodDateProperty); - query = filter.prepareQueryForSampling(query, - "M." + SampleMonth.SAMPLE_ROW); +// query = filter.prepareQueryForSampling(query, +// "M." + SampleMonth.SAMPLE_ROW); + WaoQueryBuilder builder = new WaoQueryBuilder(query); + builder.setSampleRowProperty("M." + SampleMonth.SAMPLE_ROW); + builder.applySamplingFilter(filter); + if (log.isTraceEnabled()) { log.trace("Exec query : " + query); } - List<Object[]> res = (List<Object[]>)query.execute(); + List<Object[]> res = transaction.findByQuery(query); for (Object[] tab : res) { Date date = (Date)tab[0]; @@ -174,7 +158,7 @@ * @param company the company used to filter results * @param fromDate the since date used to filter contact results * @return a BoardingResult which contains the number of boats for boardings - * from 1 to {@link MAX_BOARDINGS}, the boat with the max boarding and its + * from 1 to {@code MAX_BOARDINGS}, the boat with the max boarding and its * value. * @throws WaoException */ @@ -270,38 +254,55 @@ TopiaQuery query = dao.createQueryDoneContactsFromDate(null, null); - String contact = query.getMainAlias(); - String sampleRow = contact + "." + Contact.SAMPLE_ROW; - String companyProp = sampleRow + "." + SampleRow.COMPANY; - String companyName = companyProp + "." + Company.NAME; + // Prepare properties for query + String contactAlias = query.getMainAlias(); + String sampleRowProperty = + TopiaQuery.getProperty(contactAlias, Contact.SAMPLE_ROW); + String nbObservantsRealProperty = + TopiaQuery.getProperty(contactAlias, Contact.NB_OBSERVANTS); + String sampleRowEndProperty = + TopiaQuery.getProperty(sampleRowProperty, SampleRow.PERIOD_END); + String companyProperty = + TopiaQuery.getProperty(sampleRowProperty, SampleRow.COMPANY); + String nbObservantsExpectedProperty = + TopiaQuery.getProperty(sampleRowProperty, SampleRow.NB_OBSERVANTS); + + String companyNameProperty = + TopiaQuery.getProperty(companyProperty, Company.NAME); + // Only for unfinished sampleRows - Date current = context.getCurrentDate(); - query.add(sampleRow + "." + SampleRow.PERIOD_END, Op.GE, current); + query.addWhere(sampleRowEndProperty, Op.GE, context.getCurrentDate()); if (company != null) { - query.add(companyProp, company); + query.addEquals(companyProperty, company); } // Prepare results - query.setSelect(companyName, "COUNT(*)").addGroup(companyName); + query.setSelect(companyNameProperty, "COUNT(*)"). + addGroup(companyNameProperty); if (log.isDebugEnabled()) { - log.debug("Exec query for total : " + query); + log.debug("Query for total : " + query); } - List<Object[]> totalResults = query.execute(); + List<Object[]> totalResults = transaction.findByQuery(query); // Use the same query and add the constraint of non compliance //i.e. nbObservantsReal (contact) < nbObservantsExpected (sampleRow) - query.add(contact + "." + Contact.NB_OBSERVANTS + " < " + - sampleRow + "." + SampleRow.NB_OBSERVANTS); +// query.addWhere(contact + "." + Contact.NB_OBSERVANTS + " < " + +// sampleRow + "." + SampleRow.NB_OBSERVANTS); + query.addWhere(new StringBuilder(nbObservantsRealProperty). + append(" < "). + append(nbObservantsExpectedProperty). + toString() + ); if (log.isDebugEnabled()) { - log.debug("Exec query for result : " + query); + log.debug("Query for result : " + query); } - List<Object[]> diffResults = query.execute(); + List<Object[]> diffResults = transaction.findByQuery(query); // Use the map to set the number of non compliance results for (Object[] row : diffResults) { @@ -343,44 +344,63 @@ ContactDAO dao = WaoDAOHelper.getContactDAO(transaction); // Only for contacts not refused by the program - String contact = "C"; - String validationProgram = contact + "." + Contact.VALIDATION_PROGRAM; - TopiaQuery query = dao.createQuery(contact). - add(validationProgram + " IS NULL " + - "OR " + validationProgram + " = :booleanTrue"). - addParam("booleanTrue", Boolean.TRUE); + String contactAlias = "C"; + String validationProgramProperty = + TopiaQuery.getProperty(contactAlias, Contact.VALIDATION_PROGRAM); - String companyProp = contact + "." + Contact.OBSERVER + "." + WaoUser.COMPANY; + TopiaQuery query = dao.createQuery(contactAlias). + addWhere(new StringBuilder(validationProgramProperty). + append(" IS NULL OR "). + append(validationProgramProperty). + append(" = :booleanTrue"). + toString() + ).addParam("booleanTrue", Boolean.TRUE); + String companyProperty = + TopiaQuery.getProperty(contactAlias, Contact.OBSERVER, WaoUser.COMPANY); + if (company != null) { - query.add(companyProp, company); + query.addEquals(companyProperty, company); } if (period != null) { // Contacts include in the period - String tideBeginDate = contact + "." + Contact.TIDE_BEGIN_DATE; - String createDate = contact + "." + TopiaEntity.TOPIA_CREATE_DATE; - query.add("(" + tideBeginDate + " IS NOT NULL " + - "AND " + tideBeginDate + " BETWEEN :fromDate AND :thruDate)" + - " OR (" + tideBeginDate + " IS NULL " + - "AND " + createDate + " BETWEEN :fromDate AND :thruDate)"); + period.initDayOfMonthExtremities(); - period.initDayOfMonthExtremities(); - query.addParam("fromDate", period.getFromDate()). - addParam("thruDate", period.getThruDate()); + String tideBeginDateProperty = + TopiaQuery.getProperty(contactAlias, Contact.TIDE_BEGIN_DATE); + String createDateProperty = + TopiaQuery.getProperty(contactAlias, Contact.TOPIA_CREATE_DATE); + + query.addWhere(new StringBuilder("("). + append(tideBeginDateProperty). + append(" IS NOT NULL AND "). + append(tideBeginDateProperty). + append(" BETWEEN :fromDate AND :thruDate)"). + append(" OR ("). + append(tideBeginDateProperty). + append(" IS NULL AND "). + append(createDateProperty). + append(" BETWEEN :fromDate AND :thruDate)"). + toString() + ).addParam("fromDate", period.getFromDate()). + addParam("thruDate", period.getThruDate()); } - String stateProp = contact + "." + Contact.STATE; - String companyName = companyProp + "." + Company.NAME; - query.addGroup(companyName, stateProp). - addOrder(companyName). - setSelect(companyName, stateProp, "COUNT(*)"); + String stateProperty = + TopiaQuery.getProperty(contactAlias, Contact.STATE); + String companyNameProperty = + TopiaQuery.getProperty(companyProperty, Company.NAME); + query.addGroup(companyNameProperty, stateProperty). + addOrder(companyNameProperty). + setSelect(companyNameProperty, stateProperty, "COUNT(*)"); + if (log.isDebugEnabled()) { - log.debug("Exec query : " + query); + log.debug("Query : " + query); } - List<Object[]> res = query.execute(); + List<Object[]> res = transaction.findByQuery(query); for (Object[] row : res) { String rowCompanyName = (String)row[0]; @@ -414,29 +434,32 @@ TopiaQuery query = dao.createQueryDoneContactsFromDate(null, period.getFromDate()); - String contact = query.getMainAlias(); - String companyKey = contact + "." + Contact.OBSERVER + "." + WaoUser.COMPANY; - String companyName = companyKey + "." + Company.NAME; + String contactAlias = query.getMainAlias(); + String companyProperty = + TopiaQuery.getProperty(contactAlias, Contact.OBSERVER, WaoUser.COMPANY); + String companyNameProperty = + TopiaQuery.getProperty(companyProperty, Company.NAME); + String tideBeginDateProperty = + TopiaQuery.getProperty(contactAlias, Contact.TIDE_BEGIN_DATE); + String dataInputProperty = + TopiaQuery.getProperty(contactAlias, Contact.DATA_INPUT_DATE); if (company != null) { - query.add(companyKey, company); + query.addEquals(companyProperty, company); } - - String tideBegin = contact + "." + Contact.TIDE_BEGIN_DATE; //period.initDayOfMonthExtremities(); if (period.getThruDate() != null) { - query.add(tideBegin, Op.LE, period.getThruDate()); + query.addWhere(tideBeginDateProperty, Op.LE, period.getThruDate()); } - String dataInput = contact + "." + Contact.DATA_INPUT_DATE; - query.setSelect(companyName, dataInput, tideBegin); + query.setSelect(companyNameProperty, dataInputProperty, tideBeginDateProperty); if (log.isDebugEnabled()) { - log.debug("Exec query : " + query); + log.debug("Query : " + query); } - List<Object[]> res = query.execute(); + List<Object[]> res = transaction.findByQuery(query); for (Object[] row : res) { String rowCompanyName = (String)row[0]; Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-business/src/test/resources/log4j.properties =================================================================== --- trunk/wao-business/src/test/resources/log4j.properties 2010-06-08 11:19:33 UTC (rev 498) +++ trunk/wao-business/src/test/resources/log4j.properties 2010-06-08 13:05:22 UTC (rev 499) @@ -8,6 +8,6 @@ log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%p] %c{2} %m%n -log4j.logger.fr.ifremer.wao=INFO +log4j.logger.fr.ifremer.wao=DEBUG log4j.logger.org.nuiton.util=INFO log4j.logger.org.nuiton.util.beans.BinderProvider=ERROR
participants (1)
-
fdesbois@users.labs.libre-entreprise.org