Index: topia/src/java/org/codelutin/topia/persistence/AbstractPersistenceHelper.java diff -u topia/src/java/org/codelutin/topia/persistence/AbstractPersistenceHelper.java:1.6 topia/src/java/org/codelutin/topia/persistence/AbstractPersistenceHelper.java:1.7 --- topia/src/java/org/codelutin/topia/persistence/AbstractPersistenceHelper.java:1.6 Tue Jun 14 17:03:10 2005 +++ topia/src/java/org/codelutin/topia/persistence/AbstractPersistenceHelper.java Wed Jun 15 16:52:29 2005 @@ -23,21 +23,19 @@ * Created: Jul 30, 2004 * * @author Cédric Pineau - * @version $Revision: 1.6 $ + * @version $Revision: 1.7 $ * - * Last update : $Date: 2005/06/14 17:03:10 $ + * Last update : $Date: 2005/06/15 16:52:29 $ * by : $Author: thimel $ */ package org.codelutin.topia.persistence; -import java.util.List; import java.util.Properties; import org.codelutin.topia.TopiaContext; import org.codelutin.topia.TopiaEntity; import org.codelutin.topia.TopiaException; -import org.codelutin.topia.TopiaQuery; import org.codelutin.topia.persistence.jdo.AbstractLazyEntity; import org.codelutin.topia.persistence.jdo.Util; Index: topia/src/java/org/codelutin/topia/persistence/TopiaCollectionQueryHelper.java diff -u topia/src/java/org/codelutin/topia/persistence/TopiaCollectionQueryHelper.java:1.1 topia/src/java/org/codelutin/topia/persistence/TopiaCollectionQueryHelper.java:1.2 --- topia/src/java/org/codelutin/topia/persistence/TopiaCollectionQueryHelper.java:1.1 Wed Jun 15 15:14:54 2005 +++ topia/src/java/org/codelutin/topia/persistence/TopiaCollectionQueryHelper.java Wed Jun 15 16:52:29 2005 @@ -24,7 +24,7 @@ * Created: 13 juin 2005 * * @author Arnaud Thimel -* @version $Revision: 1.1 $ +* @version $Revision: 1.2 $ */ @@ -35,7 +35,6 @@ import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; -import java.util.Map; import java.util.logging.Logger; import org.codelutin.queryparser.Constraint; @@ -79,9 +78,7 @@ * @see org.codelutin.queryparser.QueryHelper#execute() */ public Collection execute() throws QueryHelperException { - - //System.out.println("Query : " + query + " - Args : " + args); - + //System.out.println("Query : " + query); if (queryBuilder == null) { //Préparation de la requete pour BSH queryBuilder = new TopiaCollectionQueryBuilder(); getQuery().visit(queryBuilder); @@ -134,7 +131,7 @@ interpreter.set("target", o); result = (Boolean)interpreter.eval(filter); } catch (EvalError e) { - log.info("Erreur, requete BSH incorrecte : " + e.getMessage()); + log.info("Error, invalid BSH request : " + e.getMessage()); return false; } return result.booleanValue(); @@ -177,7 +174,6 @@ } public void visitFromSource(From from, String field, String alias) { - // TODO Arno : Auto-generated method stub this.from = field; } @@ -213,10 +209,9 @@ } public void visitSelectField(Select select, FieldPath field, String alias) { - this.className = field.getField(); - /*//TODO Arno className = field.getField(); - int pos = query.getFrom().startsWithSourceOrAlias(className); + + /*int pos = query.getFrom().startsWithSourceOrAlias(className); if(pos != -1 && pos != className.length()){ fieldName = className.substring(pos+1); className = className.substring(0, pos); @@ -291,6 +286,19 @@ visitOperand(op2); filter += ")"; } + public void visitWhereOr(Constraint constraint, Object op1, Object op2) { + filter += "("; + visitOperand(op1); + filter += " || "; + visitOperand(op2); + filter += ")"; + } + public void visitWhereNot(Constraint constraint, Object op2) { + filter += "(!"; + visitOperand(op2); + filter += ")"; + } + public void visitWhereEqual(Constraint constraint, Object op1, Object op2) { filter += "(equals("; @@ -307,6 +315,7 @@ visitOperand(op2); filter += "))"; } + public void visitWhereGreater(Constraint constraint, Object op1, Object op2) { filter += "("; @@ -323,89 +332,70 @@ visitOperand(op2); filter += ")"; } - public void visitWhereIn(Constraint constraint, Object op1, Object op2) { + public void visitWhereSmaller(Constraint constraint, Object op1, + Object op2) { filter += "("; - visitOperand(op2); - filter += ".contains("; visitOperand(op1); - filter += "))"; - } - public void visitWhereLike(Constraint constraint, Object op1, Object op2) { - //TODO Arno : A verif ! % => .*? (to be used with matches(...)) - if(op2 instanceof String){ - String likeValue = (String)op2; - if(likeValue.startsWith("%")){ - visitOperand(op1); - filter += ".endsWith("; - op2 = likeValue.substring(1); - }else if(likeValue.endsWith("%")){ - visitOperand(op1); - filter += ".startsWith("; - op2 = likeValue.substring(0, likeValue.length() - 1); - } - }else{ - filter += "("; - visitOperand(op1); - filter += "=="; - } + filter += " < "; visitOperand(op2); filter += ")"; } - public void visitWhereNot(Constraint constraint, Object op2) { - filter += "(!"; + public void visitWhereSmallerOrEqual(Constraint constraint, Object op1, + Object op2) { + filter += "("; + visitOperand(op1); + filter += " <= "; visitOperand(op2); filter += ")"; } - public void visitWhereNotIn(Constraint constraint, Object op1, - Object op2) { - filter += "(!"; + + public void visitWhereIn(Constraint constraint, Object op1, Object op2) { + filter += "("; visitOperand(op2); - filter += ".contains("; + filter += ".contains(toObject("; visitOperand(op1); - filter += "))"; + filter += ")))"; } - public void visitWhereNotLike(Constraint constraint, Object op1, + public void visitWhereNotIn(Constraint constraint, Object op1, Object op2) { - //TODO Arno : A verif ! - String likeValue = (String)op2; - if(likeValue.startsWith("%")){ - filter += "!"; - visitOperand(op1); - filter += ".endsWith("; - }else if(likeValue.endsWith("%")){ - filter += "!"; - visitOperand(op1); - filter += ".startsWith("; - }else{ - filter += "("; - visitOperand(op1); - filter += "!="; - } + filter += "(!"; visitOperand(op2); - filter += ")"; - } - public void visitWhereOr(Constraint constraint, Object op1, Object op2) { - filter += "("; + filter += ".contains(toObject("; visitOperand(op1); - filter += " || "; - visitOperand(op2); - filter += ")"; + filter += ")))"; } - public void visitWhereSmaller(Constraint constraint, Object op1, + + public void visitWhereLike(Constraint constraint, Object op1, Object op2) { + if(op2 instanceof String) { + String likeValue = (String)op2; + int index; + while ((index = likeValue.indexOf("%")) != -1) + likeValue = likeValue.substring(0, index) + ".*?" + + likeValue.substring(index + 1); + op2 = likeValue; + } filter += "("; visitOperand(op1); - filter += " < "; + filter += ".matches("; visitOperand(op2); - filter += ")"; + filter += "))"; } - public void visitWhereSmallerOrEqual(Constraint constraint, Object op1, + public void visitWhereNotLike(Constraint constraint, Object op1, Object op2) { - filter += "("; + if(op2 instanceof String) { + String likeValue = (String)op2; + int index; + while ((index = likeValue.indexOf("%")) != -1) + likeValue = likeValue.substring(0, index) + ".*?" + + likeValue.substring(index + 1); + op2 = likeValue; + } + filter += "(!"; visitOperand(op1); - filter += " <= "; + filter += ".matches("; visitOperand(op2); - filter += ")"; + filter += "))"; } } //TopiaCollectionQueryBuilder