Index: topia/src/java/org/codelutin/topia/persistence/TopiaCollectionQueryHelper.java diff -u topia/src/java/org/codelutin/topia/persistence/TopiaCollectionQueryHelper.java:1.2 topia/src/java/org/codelutin/topia/persistence/TopiaCollectionQueryHelper.java:1.3 --- topia/src/java/org/codelutin/topia/persistence/TopiaCollectionQueryHelper.java:1.2 Wed Jun 15 16:52:29 2005 +++ topia/src/java/org/codelutin/topia/persistence/TopiaCollectionQueryHelper.java Fri Jun 17 14:15:06 2005 @@ -24,7 +24,7 @@ * Created: 13 juin 2005 * * @author Arnaud Thimel -* @version $Revision: 1.2 $ +* @version $Revision: 1.3 $ */ @@ -32,9 +32,14 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.LinkedList; +import java.util.List; +import java.util.Map; import java.util.logging.Logger; import org.codelutin.queryparser.Constraint; @@ -52,15 +57,23 @@ import bsh.EvalError; import bsh.Interpreter; - +/** + * Cette classe permet d'effectuer des requêtes de type Query sur une + * Collection d'objet par introspection. + * Cependant, pour que cela fonctionne, les attributs sur lesquels portent les + * requêtes doivent etre associés à une méthode get. Si ce n'est pas + * le cas, l'objet sera considéré comme non conforme à la requête et ne sera + * donc pas retourné. + */ public class TopiaCollectionQueryHelper extends QueryHelper { /** to use log facility, just put in your code: log.info("..."); */ - static private Logger log = Logger.getLogger("org.codelutin.topia.TopiaCollectionQueryHelper"); + static private Logger log = + Logger.getLogger("org.codelutin.topia.TopiaCollectionQueryHelper"); protected TopiaCollectionQueryBuilder queryBuilder; protected Collection datas; - protected Interpreter interpreter; + protected Interpreter inter; public TopiaCollectionQueryHelper(Collection datas) { this.datas = datas; @@ -71,7 +84,8 @@ queryBuilder = null; HashMap fields = getQuery().getSelect().getFields(); if(fields.size() != 1) - throw new IllegalArgumentException("Select statement must have one field only. "+fields); + throw new IllegalArgumentException("Select statement must " + + "have one field only. "+fields); } /* (non-Javadoc) @@ -79,57 +93,102 @@ */ public Collection execute() throws QueryHelperException { //System.out.println("Query : " + query); + if (getQuery() == null) + throw new QueryHelperException("Please use setQuery(...) " + + "before execute()"); + if (queryBuilder == null) { //Préparation de la requete pour BSH queryBuilder = new TopiaCollectionQueryBuilder(); getQuery().visit(queryBuilder); - //System.out.println(queryBuilder.getClassName()); - //System.out.println(queryBuilder.getFrom()); - //System.out.println(queryBuilder.getFilter()); - interpreter = new Interpreter(); + inter = new Interpreter(); try { for(int i=0; i