Can you rule out that you may have incorrectly constructed those
conditions (i.e. not having set the parentheses right)? Large
conditions tend to become difficult to read. For instance, I'm not
going to check all of your code. But in essence, you'll have to be
careful about the following:

A.and(B).or(C) results in
(A and B) or C

A.and(B).or(C).and(D) results in
((A and B) or C) and D

A.and(B.or(C)) results in
A and (B or C)

Now your method returns a Condition. What do you do with that returned
condition?

2012/6/29  <[email protected]>:
> I can do something cheap like
>
>
>     private Condition searchfilter(TreeSet<String> querytags) {
>
>         String[] thetags = querytags.toArray(new String[] {});
>         Condition condition = null;
>         for (int i = 0; i < thetags.length; i++) {
>             String query = thetags[i].trim();
>             Integer querynum = null;
>             try {
>                 querynum = Integer.valueOf(query);
>             } catch (NumberFormatException e) {
>
>             }
>             if (i == 0) {
>
>                 condition =
> Ordermain.ORDERMAIN.HIDDENKEY.equal(Ordermain.ORDERMAIN.HIDDENKEY).and(Ordermain.ORDERMAIN.HIDDENKEY.contains(querynum).or(Ordermain.ORDERMAIN.ORDERTYPE.contains(query)).or(Ordermain.ORDERMAIN.CONTACTNAME.contains(query)).or(Ordermain.ORDERMAIN.ECLIPSEACCOUNTNUMBER.contains(querynum)).or(Ordermain.ORDERMAIN.PHONE.contains(query)).or(Ordermain.ORDERMAIN.COMPANY.contains(query)).or(Ordermain.ORDERMAIN.EMAIL.contains(query)).or(Ordermain.ORDERMAIN.FAX.contains(query)).or(Ordermain.ORDERMAIN.EMPLOYEEID.contains(query)).or(Employees.EMPLOYEES.FIRSTNAME.contains(query)).or(Employees.EMPLOYEES.LASTNAME.contains(query)).or(Employees.EMPLOYEES.EMAIL.contains(query)).or(Ordermain.ORDERMAIN.ORDERNUMBER.contains(query)).or(Ordermain.ORDERMAIN.CUSTOMERPO.contains(query)).or(Ordermain.ORDERMAIN.NEXTACTION.contains(query)).or(Ordermain.ORDERMAIN.SEARCHTAGS.contains(query)).or(Ordermain.ORDERMAIN.ORDERSTATUS.contains(query)));
>
>             } else {
>                 condition =
> condition.and(Ordermain.ORDERMAIN.HIDDENKEY.contains(querynum).or(Ordermain.ORDERMAIN.ORDERTYPE.contains(query)).or(Ordermain.ORDERMAIN.CONTACTNAME.contains(query)).or(Ordermain.ORDERMAIN.ECLIPSEACCOUNTNUMBER.contains(querynum)).or(Ordermain.ORDERMAIN.PHONE.contains(query)).or(Ordermain.ORDERMAIN.COMPANY.contains(query)).or(Ordermain.ORDERMAIN.EMAIL.contains(query)).or(Ordermain.ORDERMAIN.FAX.contains(query)).or(Ordermain.ORDERMAIN.EMPLOYEEID.contains(query)).or(Employees.EMPLOYEES.FIRSTNAME.contains(query)).or(Employees.EMPLOYEES.LASTNAME.contains(query)).or(Employees.EMPLOYEES.EMAIL.contains(query)).or(Ordermain.ORDERMAIN.ORDERNUMBER.contains(query)).or(Ordermain.ORDERMAIN.CUSTOMERPO.contains(query)).or(Ordermain.ORDERMAIN.NEXTACTION.contains(query)).or(Ordermain.ORDERMAIN.SEARCHTAGS.contains(query)).or(Ordermain.ORDERMAIN.ORDERSTATUS.contains(query)));
>             }
>         }
>
>         return condition;
>     }
>
>
> i got a extra
> Ordermain.ORDERMAIN.HIDDENKEY.equal(Ordermain.ORDERMAIN.HIDDENKEY).and
> but that is the only way i can group the rest into one clause

Reply via email to