Author: fdesbois Date: 2010-06-08 11:05:20 +0000 (Tue, 08 Jun 2010) New Revision: 497 Log: - Set version to 1.3 - Refactor contactFilter managment using WaoQueryBuilder Modified: trunk/pom.xml trunk/wao-business/pom.xml trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactFilterImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-ui/pom.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-06-08 10:26:34 UTC (rev 496) +++ trunk/pom.xml 2010-06-08 11:05:20 UTC (rev 497) @@ -15,7 +15,7 @@ <groupId>fr.ifremer</groupId> <artifactId>wao</artifactId> - <version>1.2.2-SNAPSHOT</version> + <version>1.3-SNAPSHOT</version> <modules> <module>wao-ui</module> Modified: trunk/wao-business/pom.xml =================================================================== --- trunk/wao-business/pom.xml 2010-06-08 10:26:34 UTC (rev 496) +++ trunk/wao-business/pom.xml 2010-06-08 11:05:20 UTC (rev 497) @@ -10,7 +10,7 @@ <parent> <groupId>fr.ifremer</groupId> <artifactId>wao</artifactId> - <version>1.2.2-SNAPSHOT</version> + <version>1.3-SNAPSHOT</version> </parent> <groupId>fr.ifremer.wao</groupId> 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 10:26:34 UTC (rev 496) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2010-06-08 11:05:20 UTC (rev 497) @@ -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)) { @@ -74,13 +74,13 @@ } public TopiaQuery toQuery() { - return getQuery(); - } - - public TopiaQuery getQuery() { return query; } +// public TopiaQuery getQuery() { +// return query; +// } +// // public void setQuery(TopiaQuery query) { // this.query = query; // } @@ -104,6 +104,26 @@ // public void setElligibleBoatProperty(String elligibleBoatProperty) { // this.elligibleBoatProperty = elligibleBoatProperty; // } +// +// public String getSampleRowProperty() { +// return sampleRowProperty; +// } +// +// public String getFishingZoneProperty() { +// return fishingZoneProperty; +// } +// +// public String getBoatProperty() { +// return boatProperty; +// } +// +// public String getContactProperty() { +// return contactProperty; +// } +// +// public String getElligibleBoatProperty() { +// return elligibleBoatProperty; +// } public String getSectorNameProperty() { String result = getProperty(fishingZoneProperty, @@ -269,7 +289,7 @@ } private String getProperty(String... properties) { - // Add property cache managment + // Add property cache managment ?? return TopiaQuery.getProperty(properties); } @@ -456,6 +476,7 @@ * * @param filter BoatFilter to apply on the query * @return the WaoQueryBuilder + * @since 1.3 */ public WaoQueryBuilder applyBoatFilter(BoatFilter filter) { @@ -508,6 +529,14 @@ return this; } + /** + * Apply {@code filter} on current query. Used to retrieve contacts filtered. + * Need contactProperty to be defined using for example new WaoQueryBuilder(Contact.class) + * + * @param filter ContactFilter to apply on the query + * @return the WaoQueryBuilder + * @since 1.3 + */ public WaoQueryBuilder applyContactFilter(ContactFilter filter) { // need contactProperty @@ -533,8 +562,7 @@ // Company filter is managed by SamplingFilter because the company is // linked with the sampleRow instead of contact user - - // Ano #2327 : Reset fromDate, don't manage it in prepareQueryForSampling + // Ano #2327 : Reset fromDate, don't manage it in applySamplingFilter filter.setFromDate(null); if (filter.isSamplingFiltered() || company != null) { @@ -546,7 +574,6 @@ applySimpleBoatFilter(filter); // MAMMALS_OBSERVATION and MAMMALS_CAPTURE - if (mammalsObservation && mammalsCapture) { query.addWhere(new StringBuilder(getMammalsObservationProperty()). append(" = :mammals OR "). @@ -608,6 +635,10 @@ // Reinitialize fromDate of the filter, don't know if it's really needed filter.setFromDate(fromDate); + + // ORDER_BY + query.addOrderDesc(getContactCreateDateProperty()); + return this; } 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 10:26:34 UTC (rev 496) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactFilterImpl.java 2010-06-08 11:05:20 UTC (rev 497) @@ -40,110 +40,110 @@ * @author fdesbois <fdesbois at codelutin.com> */ public class ContactFilterImpl extends ContactFilter { +// +// @Override +// public TopiaQuery prepareQueryForContact(TopiaQuery query) { +// +// String contactAlias = query.getMainAlias(); +// +// // OBSERVER +// if (getObserver() != null) { +// String observerProperty = +// TopiaQuery.getProperty(contactAlias, Contact.OBSERVER); +// query.add(observerProperty, getObserver()); +// } +// +// // Company filter is managed by SamplingFilter because the company is +// // linked with the sampleRow instead of contact user +// +// Date fromDate = getFromDate(); +// // Ano #2327 : Reset fromDate, don't manage it in prepareQueryForSampling +// this.fromDate = null; +// if (isSamplingFiltered() || getCompany() != null) { +// String sampleRowProperty = +// TopiaQuery.getProperty(contactAlias, Contact.SAMPLE_ROW); +// +// query = prepareQueryForSampling(query, sampleRowProperty); +// } +// +// String boatProperty = TopiaQuery.getProperty(contactAlias, Contact.BOAT); +// query = prepareQueryForBoat(query, boatProperty); +// +// // MAMMALS_OBSERVATION and MAMMALS_CAPTURE +// String mammalsObsProperty = +// TopiaQuery.getProperty(contactAlias, Contact.MAMMALS_OBSERVATION); +// String mammalsCaptProperty = +// TopiaQuery.getProperty(contactAlias, Contact.MAMMALS_CAPTURE); +// +// if (getMammalsObservation() && getMammalsCapture()) { +// query.add(mammalsObsProperty + " = :mammals OR " +// + mammalsCaptProperty + " = :mammals"). +// addParam("mammals", Boolean.TRUE); +// } else if (getMammalsObservation()) { +// query.add(mammalsObsProperty, Boolean.TRUE); +// } else if (getMammalsCapture()) { +// query.add(mammalsCaptProperty, Boolean.TRUE); +// } +// +// // VALIDATION_PROGRAM +// List<Object> programValidValues = new ArrayList<Object>(); +// if (getProgramAccepted()) { +// programValidValues.add(Boolean.TRUE); +// } +// if (getProgramRefused()) { +// programValidValues.add(Boolean.FALSE); +// } +// if (getProgramUndefined()) { +// programValidValues.add(null); +// } +// String programValidProperty = +// TopiaQuery.getProperty(contactAlias, Contact.VALIDATION_PROGRAM); +// query.add(programValidProperty, programValidValues.toArray()); +// +// // VALIDATION_COMPANY +// List<Object> companyValidValues = new ArrayList<Object>(); +// if (getCompanyAccepted()) { +// companyValidValues.add(Boolean.TRUE); +// } +// if (getCompanyRefused()) { +// companyValidValues.add(Boolean.FALSE); +// } +// if (getCompanyUndefined()) { +// companyValidValues.add(null); +// } +// String companyValidProperty = +// TopiaQuery.getProperty(contactAlias, Contact.VALIDATION_COMPANY); +// query.add(companyValidProperty, companyValidValues.toArray()); +// +// // STATE +// if (getState() != null) { +// String stateProperty = +// TopiaQuery.getProperty(contactAlias, Contact.STATE); +// query.add(stateProperty, getState().ordinal()); +// } +// +// // FROM_DATE +// if (fromDate != null) { +// String tideBeginDateProperty = +// TopiaQuery.getProperty(contactAlias, Contact.TIDE_BEGIN_DATE); +// String createDateProperty = +// TopiaQuery.getProperty(contactAlias, TopiaEntity.TOPIA_CREATE_DATE); +//// query.add("(" + tideBeginDateProperty + " IS NOT NULL AND " +//// + tideBeginDateProperty + " >= :fromDate)" + +//// " OR (" + tideBeginDateProperty + " IS NULL AND " +//// + createDateProperty + " >= :fromDate)"); +//// query.addParam("fromDate", getFromDate()); +// +// query.add(createDateProperty, TopiaQuery.Op.GE, fromDate); +// } +// +// // Reinitialize fromDate of the filter, don't know if it's really needed +// this.fromDate = fromDate; +// +// return query; +// } @Override - public TopiaQuery prepareQueryForContact(TopiaQuery query) { - - String contactAlias = query.getMainAlias(); - - // OBSERVER - if (getObserver() != null) { - String observerProperty = - TopiaQuery.getProperty(contactAlias, Contact.OBSERVER); - query.add(observerProperty, getObserver()); - } - - // Company filter is managed by SamplingFilter because the company is - // linked with the sampleRow instead of contact user - - Date fromDate = getFromDate(); - // Ano #2327 : Reset fromDate, don't manage it in prepareQueryForSampling - this.fromDate = null; - if (isSamplingFiltered() || getCompany() != null) { - String sampleRowProperty = - TopiaQuery.getProperty(contactAlias, Contact.SAMPLE_ROW); - - query = prepareQueryForSampling(query, sampleRowProperty); - } - - String boatProperty = TopiaQuery.getProperty(contactAlias, Contact.BOAT); - query = prepareQueryForBoat(query, boatProperty); - - // MAMMALS_OBSERVATION and MAMMALS_CAPTURE - String mammalsObsProperty = - TopiaQuery.getProperty(contactAlias, Contact.MAMMALS_OBSERVATION); - String mammalsCaptProperty = - TopiaQuery.getProperty(contactAlias, Contact.MAMMALS_CAPTURE); - - if (getMammalsObservation() && getMammalsCapture()) { - query.add(mammalsObsProperty + " = :mammals OR " - + mammalsCaptProperty + " = :mammals"). - addParam("mammals", Boolean.TRUE); - } else if (getMammalsObservation()) { - query.add(mammalsObsProperty, Boolean.TRUE); - } else if (getMammalsCapture()) { - query.add(mammalsCaptProperty, Boolean.TRUE); - } - - // VALIDATION_PROGRAM - List<Object> programValidValues = new ArrayList<Object>(); - if (getProgramAccepted()) { - programValidValues.add(Boolean.TRUE); - } - if (getProgramRefused()) { - programValidValues.add(Boolean.FALSE); - } - if (getProgramUndefined()) { - programValidValues.add(null); - } - String programValidProperty = - TopiaQuery.getProperty(contactAlias, Contact.VALIDATION_PROGRAM); - query.add(programValidProperty, programValidValues.toArray()); - - // VALIDATION_COMPANY - List<Object> companyValidValues = new ArrayList<Object>(); - if (getCompanyAccepted()) { - companyValidValues.add(Boolean.TRUE); - } - if (getCompanyRefused()) { - companyValidValues.add(Boolean.FALSE); - } - if (getCompanyUndefined()) { - companyValidValues.add(null); - } - String companyValidProperty = - TopiaQuery.getProperty(contactAlias, Contact.VALIDATION_COMPANY); - query.add(companyValidProperty, companyValidValues.toArray()); - - // STATE - if (getState() != null) { - String stateProperty = - TopiaQuery.getProperty(contactAlias, Contact.STATE); - query.add(stateProperty, getState().ordinal()); - } - - // FROM_DATE - if (fromDate != null) { - String tideBeginDateProperty = - TopiaQuery.getProperty(contactAlias, Contact.TIDE_BEGIN_DATE); - String createDateProperty = - TopiaQuery.getProperty(contactAlias, TopiaEntity.TOPIA_CREATE_DATE); -// query.add("(" + tideBeginDateProperty + " IS NOT NULL AND " -// + tideBeginDateProperty + " >= :fromDate)" + -// " OR (" + tideBeginDateProperty + " IS NULL AND " -// + createDateProperty + " >= :fromDate)"); -// query.addParam("fromDate", getFromDate()); - - query.add(createDateProperty, TopiaQuery.Op.GE, fromDate); - } - - // Reinitialize fromDate of the filter, don't know if it's really needed - this.fromDate = fromDate; - - return query; - } - - @Override public boolean isFiltered() { return isBoatFiltered() || isSamplingFiltered() || Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2010-06-08 10:26:34 UTC (rev 496) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2010-06-08 11:05:20 UTC (rev 497) @@ -130,19 +130,35 @@ ContactDAO dao = WaoDAOHelper.getContactDAO(transaction); - TopiaQuery query = dao.createQuery("C").addDistinct(); +// TopiaQuery query = dao.createQuery("C").addDistinct(); +// +// query = filter.prepareQueryForContact(query); +// +// query.addOrderDesc("C." + TopiaEntity.TOPIA_CREATE_DATE). +// addLoad(Contact.OBSERVER + "." + WaoUser.COMPANY); +// +// if (log.isDebugEnabled()) { +// log.debug("Query : " + query); +// } +// +// query.addLoad(Contact.SAMPLE_ROW + "." + SampleRow.SAMPLE_MONTH); - query = filter.prepareQueryForContact(query); + // Use QueryBuilder to apply filter + TopiaQuery query = new WaoQueryBuilder(Contact.class). + applyContactFilter(filter). + toQuery(); - query.addOrderDesc("C." + TopiaEntity.TOPIA_CREATE_DATE). - addLoad(Contact.OBSERVER + "." + WaoUser.COMPANY); + // Loading properties + String observerCompanyProperty = + TopiaQuery.getProperty(Contact.OBSERVER, WaoUser.COMPANY); + String sampleMonthProperty = + TopiaQuery.getProperty(Contact.SAMPLE_ROW, SampleRow.SAMPLE_MONTH); - if (log.isDebugEnabled()) { - log.debug("Query : " + query); - } + query.addLoad(observerCompanyProperty, sampleMonthProperty); - query.addLoad(Contact.SAMPLE_ROW + "." + SampleRow.SAMPLE_MONTH); - return dao.findAllMappedByQuery(query); + Map<String, Contact> results = dao.findAllMappedByQuery(query); + + return results; } @Override @@ -150,10 +166,18 @@ ContactFilter filter) throws TopiaException { ContactDAO dao = WaoDAOHelper.getContactDAO(transaction); - TopiaQuery query = dao.createQuery("C"); - query = filter.prepareQueryForContact(query); +// TopiaQuery query = dao.createQuery("C"); +// query = filter.prepareQueryForContact(query); +// +// return query.executeCount(); - return query.executeCount(); + TopiaQuery query = new WaoQueryBuilder(Contact.class). + applyContactFilter(filter). + toQuery(); + + int count = dao.countByQuery(query); + + return count; } @Override @@ -302,14 +326,21 @@ // Get contacts from database ContactDAO dao = WaoDAOHelper.getContactDAO(transaction); - TopiaQuery query = dao.createQuery("C"); - query.addOrderDesc("C." + TopiaEntity.TOPIA_CREATE_DATE); +// TopiaQuery query = dao.createQuery("C"); +// query.addOrderDesc("C." + TopiaEntity.TOPIA_CREATE_DATE); +// +// // No page limit in this case +// query = filter.prepareQueryForContact(query).resetLimit(); + TopiaQuery query = new WaoQueryBuilder(Contact.class). + applyContactFilter(filter). + toQuery(); + // No page limit in this case - query = filter.prepareQueryForContact(query).resetLimit(); + query.resetLimit(); if (log.isDebugEnabled()) { - log.debug("Exec query : " + query); + log.debug("Query : " + query); } List<Contact> contacts = dao.findAllByQuery(query); Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2010-06-08 10:26:34 UTC (rev 496) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2010-06-08 11:05:20 UTC (rev 497) @@ -93,9 +93,9 @@ query = prepareQueryForFishingZoneFilter(query, filter); query.addDistinct(). - setSelect("F." + FishingZone.FACADE_NAME).execute(); + setSelect("F." + FishingZone.FACADE_NAME); - List<String> results = query.execute(); + List<String> results = transaction.findByQuery(query); // WaoQueryBuilder queryBuilder = new WaoQueryBuilder(FishingZone.class). // applyFishingZoneFilter(filter); @@ -119,10 +119,10 @@ query = prepareQueryForFishingZoneFilter(query, filter); if (StringUtils.isNotEmpty(filter.getFacadeName())) { - query.add("F." + FishingZone.FACADE_NAME, filter.getFacadeName()); + query.addEquals("F." + FishingZone.FACADE_NAME, filter.getFacadeName()); } query.addDistinct(). - setSelect("F." + FishingZone.SECTOR_NAME).execute(); + setSelect("F." + FishingZone.SECTOR_NAME); // WaoQueryBuilder queryBuilder = new WaoQueryBuilder(FishingZone.class). // applyFishingZoneFilter(filter); @@ -135,7 +135,7 @@ // query.add(queryBuilder.getFacadeNameProperty(), filter.getFacadeName()); // } - List<String> results = query.execute(); + List<String> results = transaction.findByQuery(query); return results; } Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-ui/pom.xml =================================================================== --- trunk/wao-ui/pom.xml 2010-06-08 10:26:34 UTC (rev 496) +++ trunk/wao-ui/pom.xml 2010-06-08 11:05:20 UTC (rev 497) @@ -10,7 +10,7 @@ <parent> <groupId>fr.ifremer</groupId> <artifactId>wao</artifactId> - <version>1.2.2-SNAPSHOT</version> + <version>1.3-SNAPSHOT</version> </parent> <groupId>fr.ifremer.wao</groupId>