Author: bpoussin Date: 2012-09-15 14:39:27 +0200 (Sat, 15 Sep 2012) New Revision: 270 Url: http://chorem.org/repositories/revision/chorem/270 Log: refactoring pour eviter de faire a des endroits different les memes choses sur les requetes Added: trunk/chorem-entities/src/main/java/org/chorem/ChoremQueryHelper.java trunk/chorem-entities/src/main/java/org/chorem/ChoremQueryMaker.java Modified: trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/GenericAction.java Modified: trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java =================================================================== --- trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2012-09-15 12:38:47 UTC (rev 269) +++ trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2012-09-15 12:39:27 UTC (rev 270) @@ -253,7 +253,7 @@ } /** - * Retourne la comparny par defaut pour l'utilisateur loggue, si par d'utilisateur + * Retourne la company par defaut pour l'utilisateur loggue, si pas d'utilisateur * alors on prend la company defini dans la configuration general. S'il n'y * a aucune company, on en cree une nouvelle (non stocke) pour que tout * fonctionne bien. Cette company n'existant pas reellement les recherches Added: trunk/chorem-entities/src/main/java/org/chorem/ChoremQueryHelper.java =================================================================== --- trunk/chorem-entities/src/main/java/org/chorem/ChoremQueryHelper.java (rev 0) +++ trunk/chorem-entities/src/main/java/org/chorem/ChoremQueryHelper.java 2012-09-15 12:39:27 UTC (rev 270) @@ -0,0 +1,48 @@ +package org.chorem; + + +import java.util.Collection; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.wikitty.entities.ElementField; +import org.nuiton.wikitty.entities.WikittyExtension; +import org.nuiton.wikitty.query.WikittyQuery; + +/** + * Classe contenant des methodes permettant d'ajouter des elements a une Query. + * Ceci permet de centraliser les modification de query et de les faire evoluer + * pour toutes les requetes facilement. + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class ChoremQueryHelper { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(ChoremQueryHelper.class); + + /** + * Ajoute les tries comme declarer sur les extensions passer en parametre. + * Si extensions est vide ou null, alors on ajoute les tries de toutes les + * extensions connues + * + * @param client + * @param query + * @param extensions les noms des extensions sur lequel il faut faire les tries + * @return query qui etait en parametre + */ + static public WikittyQuery addSort(ChoremClient client, WikittyQuery query, String ... extensions) { + // on essai de trier les resultats au mieux tout en ne faisant qu'un requete + Collection<WikittyExtension> exts = client.restoreExtensionLastVersion(extensions); + for (WikittyExtension ext : exts) { + query.addSortAscending(ext.getSortAscending().toArray(new ElementField[0])); + query.addSortDescending(ext.getSortDescending().toArray(new ElementField[0])); + } + + return query; + } + +} Added: trunk/chorem-entities/src/main/java/org/chorem/ChoremQueryMaker.java =================================================================== --- trunk/chorem-entities/src/main/java/org/chorem/ChoremQueryMaker.java (rev 0) +++ trunk/chorem-entities/src/main/java/org/chorem/ChoremQueryMaker.java 2012-09-15 12:39:27 UTC (rev 270) @@ -0,0 +1,64 @@ +package org.chorem; + + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.chorem.entities.Employee; +import org.nuiton.wikitty.query.WikittyQuery; +import org.nuiton.wikitty.query.WikittyQueryMakerAbstract; + +/** + * Extension de WikittyQueryMaker pour ajouter de nouvelle methode qui permette + * de centraliser l'ajout de contrainte que l'on fait dans plusieurs requetes. + * Cet objet peut-etre utiliser directement a la place de WikittyQueryMaker. + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class ChoremQueryMaker extends WikittyQueryMakerAbstract<ChoremQueryMaker> { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(ChoremQueryMaker.class); + + public ChoremQueryMaker() { + super(); + } + + public ChoremQueryMaker(WikittyQuery query) { + super(query); + } + + @Override + protected ChoremQueryMaker asM() { + return this; + } + + /** + * Ajoute une contrainte qui filtre sur une company ou un employer de cette + * company + * + * @param client permet de rechercher l'id de la company par defaut pour l'utilisateur courant + * @return maker qui etait en argument + */ + public ChoremQueryMaker filterOnCompanyOrEmployee(ChoremClient client) { + String companyId = client.getDefaultCompany().getWikittyId(); + filterOnCompanyOrEmployee(companyId); + return this; + } + + /** + * Ajoute une contrainte qui filtre sur une company ou un employer de cette + * company + * + * @param companyId + * @return maker qui etait en argument + */ + public ChoremQueryMaker filterOnCompanyOrEmployee(String companyId) { + this.or().ideq(companyId).eq(Employee.FQ_FIELD_EMPLOYEE_COMPANY, companyId).close(); + return this; + } + +} Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java =================================================================== --- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java 2012-09-15 12:38:47 UTC (rev 269) +++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java 2012-09-15 12:39:27 UTC (rev 270) @@ -39,6 +39,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.ChoremClient; +import org.chorem.ChoremQueryHelper; +import org.chorem.ChoremQueryMaker; import org.chorem.entities.Attachment; import org.chorem.entities.Category; import org.chorem.entities.Configuration; @@ -146,23 +148,23 @@ protected WikittyQuery[] getDebtIncomeQuery(Date first, Date last, String companyId) { // toutes les depenses depuis le debut de l'annee - WikittyQuery debtQuery = new WikittyQueryMaker() + WikittyQuery debtQuery = new ChoremQueryMaker() .select(Invoice.FQ_FIELD_INVOICE_AMOUNT, Aggregate.SUM) .and() .exteq(Invoice.EXT_INVOICE) .bw(Invoice.FQ_FIELD_INVOICE_POSTEDDATE, first, last) .containsOne(Invoice.FQ_FIELD_INVOICE_CUSTOMER) - .select(Element.ID).or().ideq(companyId).eq(Employee.FQ_FIELD_EMPLOYEE_COMPANY, companyId).close() + .select(Element.ID).filterOnCompanyOrEmployee(companyId) .end().setLimit(WikittyQuery.MAX); // toutes les factures emises depuis le debut de l'annee - WikittyQuery incomeQuery = new WikittyQueryMaker() + WikittyQuery incomeQuery = new ChoremQueryMaker() .select(Invoice.FQ_FIELD_INVOICE_AMOUNT, Aggregate.SUM) .and() .exteq(Invoice.EXT_INVOICE) .bw(Invoice.FQ_FIELD_INVOICE_POSTEDDATE, first, last) .containsOne(Invoice.FQ_FIELD_INVOICE_SUPPLIER) - .select(Element.ID).or().ideq(companyId).eq(Employee.FQ_FIELD_EMPLOYEE_COMPANY, companyId).close() + .select(Element.ID).filterOnCompanyOrEmployee(companyId) .end().setLimit(WikittyQuery.MAX); WikittyQuery[] result = new WikittyQuery[]{ @@ -231,25 +233,25 @@ WikittyQuery[] pastAnnualDebtIncomeQuery = getDebtIncomeQuery(lastYearFirstDay, lastYearNow, companyId); // les factures que notre societe doit payer au plus tard dans 7 jours - WikittyQuery invoiceDebtQuery = new WikittyQueryMaker() + WikittyQuery invoiceDebtQuery = new ChoremQueryMaker() .select(Invoice.FQ_FIELD_INVOICE_AMOUNT, Aggregate.SUM) .and() .exteq(Invoice.EXT_INVOICE) .lt(Invoice.FQ_FIELD_INVOICE_EXPECTEDDATE, inOneWeek) .isNull(Invoice.FQ_FIELD_INVOICE_PAYMENTDATE) .containsOne(Invoice.FQ_FIELD_INVOICE_CUSTOMER) - .select(Element.ID).or().ideq(companyId).eq(Employee.FQ_FIELD_EMPLOYEE_COMPANY, companyId).close() + .select(Element.ID).filterOnCompanyOrEmployee(companyId) .end().setLimit(WikittyQuery.MAX); // les factures qu'auraient du payer nos clients (ils sont en retard) - WikittyQuery invoiceIncomeQuery = new WikittyQueryMaker() + WikittyQuery invoiceIncomeQuery = new ChoremQueryMaker() .select(Invoice.FQ_FIELD_INVOICE_AMOUNT, Aggregate.SUM) .and() .exteq(Invoice.EXT_INVOICE) .lt(Invoice.FQ_FIELD_INVOICE_EXPECTEDDATE, now) .isNull(Invoice.FQ_FIELD_INVOICE_PAYMENTDATE) .containsOne(Invoice.FQ_FIELD_INVOICE_SUPPLIER) - .select(Element.ID).or().ideq(companyId).eq(Employee.FQ_FIELD_EMPLOYEE_COMPANY, companyId).close() + .select(Element.ID).filterOnCompanyOrEmployee(companyId) .end().setLimit(WikittyQuery.MAX); // les contacts qui doivnet etre pris dans les 7 prochains jours @@ -584,12 +586,8 @@ .bw(Invoice.FQ_FIELD_INVOICE_PAYMENTDATE, start, end) .end().setLimit(WikittyQuery.MAX); - WikittyExtension ext = client.restoreExtensionLastVersion(Invoice.EXT_INVOICE); + ChoremQueryHelper.addSort(client, invoiceQuery, Invoice.EXT_INVOICE); - invoiceQuery.addSortAscending(ext.getSortAscending().toArray(new ElementField[0])); - invoiceQuery.addSortDescending(ext.getSortDescending().toArray(new ElementField[0])); - - WikittyQueryResult<Invoice> invoices = client.findAllByQuery(Invoice.class, invoiceQuery); @@ -676,42 +674,42 @@ end = DateUtil.setLastDayOfMonth(end); // La somme des factures que la company doit payer jusqu'a la date demandee - WikittyQuery debt = new WikittyQueryMaker() + WikittyQuery debt = new ChoremQueryMaker() .select(Invoice.FQ_FIELD_INVOICE_AMOUNT, Aggregate.SUM) .and() .containsOne(Invoice.FQ_FIELD_INVOICE_CUSTOMER) - .select(Element.ID).or().ideq(companyId).eq(Employee.FQ_FIELD_EMPLOYEE_COMPANY, companyId).close() + .select(Element.ID).filterOnCompanyOrEmployee(companyId) .close() .lt(Invoice.FQ_FIELD_INVOICE_EXPECTEDDATE, start) .end() .setLimit(WikittyQuery.MAX); // La somme des factures que la company doit percevoir jusqu'a la date demandee - WikittyQuery income = new WikittyQueryMaker() + WikittyQuery income = new ChoremQueryMaker() .select(Invoice.FQ_FIELD_INVOICE_AMOUNT, Aggregate.SUM) .and() .containsOne(Invoice.FQ_FIELD_INVOICE_SUPPLIER) - .select(Element.ID).or().ideq(companyId).eq(Employee.FQ_FIELD_EMPLOYEE_COMPANY, companyId).close() + .select(Element.ID).filterOnCompanyOrEmployee(companyId) .close() .lt(Invoice.FQ_FIELD_INVOICE_EXPECTEDDATE, start) .end() .setLimit(WikittyQuery.MAX); // La liste des factures entre les deux dates que l'on doit payer - WikittyQuery invoiceDebt = new WikittyQueryMaker().and() + WikittyQuery invoiceDebt = new ChoremQueryMaker().and() .parse(query) .containsOne(Invoice.FQ_FIELD_INVOICE_CUSTOMER) - .select(Element.ID).or().ideq(companyId).eq(Employee.FQ_FIELD_EMPLOYEE_COMPANY, companyId).close() + .select(Element.ID).filterOnCompanyOrEmployee(companyId) .close() .bw(Invoice.FQ_FIELD_INVOICE_EXPECTEDDATE, start, end) .end() .setLimit(WikittyQuery.MAX); // La liste des factures entre les deux dates que l'on doit payer - WikittyQuery invoiceIncome = new WikittyQueryMaker().and() + WikittyQuery invoiceIncome = new ChoremQueryMaker().and() .parse(query) .containsOne(Invoice.FQ_FIELD_INVOICE_SUPPLIER) - .select(Element.ID).or().ideq(companyId).eq(Employee.FQ_FIELD_EMPLOYEE_COMPANY, companyId).close() + .select(Element.ID).filterOnCompanyOrEmployee(companyId) .close() .bw(Invoice.FQ_FIELD_INVOICE_EXPECTEDDATE, start, end) .end() Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/GenericAction.java =================================================================== --- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/GenericAction.java 2012-09-15 12:38:47 UTC (rev 269) +++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/GenericAction.java 2012-09-15 12:39:27 UTC (rev 270) @@ -30,6 +30,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.LinkedList; @@ -46,6 +47,7 @@ import org.apache.commons.logging.LogFactory; import org.chorem.ChoremClient; import org.chorem.ChoremConfigOption; +import org.chorem.ChoremQueryHelper; import org.debux.webmotion.server.WebMotionController; import org.debux.webmotion.server.call.Call; import org.debux.webmotion.server.call.UploadFile; @@ -187,13 +189,8 @@ } // on essai de trier les resultats au mieux tout en ne faisant qu'un requete - Collection<WikittyExtension> exts = client.restoreExtensionLastVersion(extension); - for (WikittyExtension ext : exts) { - q.addSortAscending(ext.getSortAscending().toArray(new ElementField[0])); - q.addSortDescending(ext.getSortDescending().toArray(new ElementField[0])); - } + ChoremQueryHelper.addSort(client, q, extension); - WikittyQueryResult<Wikitty> results = client.findAllByQuery(Wikitty.class, q); @@ -201,19 +198,24 @@ Map<String, List<Wikitty>> map = new MapWithDefault<String, List<Wikitty>>( new TreeMap<String, List<Wikitty>>(), new LinkedList<Wikitty>()); + + Set<String> exts = null; + if (extension != null && extension.length > 0) { + exts = new HashSet<String>(Arrays.asList(extension)); + } + + Set<String> extExcluded = new HashSet<String>(client.getConfig().getOptionAsList( + ChoremConfigOption.CHOREM_EXTENSION_SEARCH_EXCLUSION.key).getOption()); + for (Wikitty w : results) { for (WikittyExtension ext : w.getExtensions()) { - if (exts.contains(ext)) { + // on ne garde que les extensions demandees et qui ne sont pas exclus sauf si demandee explicitement + if ((exts == null && !extExcluded.contains(ext.getName())) + || (exts != null && exts.contains(ext.getName()))) { map.get(ext.getName()).add(w); } } } - - List<String> extExcluded = client.getConfig().getOptionAsList( - ChoremConfigOption.CHOREM_EXTENSION_SEARCH_EXCLUSION.key).getOption(); - for (String ext : extExcluded) { - map.remove(ext); - } if (extension != null) { for (String ext : extension) {