From: adam Date: Sat, 1 Mar 2008 05:59:40 +0000 (+0000) Subject: add decent Query.toString() X-Git-Url: http://git.megacz.com/?p=org.ibex.mail.git;a=commitdiff_plain;h=40cc28bd45a41a61c8dd708fae27a49f167cee19 add decent Query.toString() darcs-hash:20080301055940-5007d-a1ff694c52a60b9fef7931e44aeb51f515c90161.gz --- diff --git a/src/org/ibex/mail/Query.java b/src/org/ibex/mail/Query.java index 4fded9d..a260dee 100644 --- a/src/org/ibex/mail/Query.java +++ b/src/org/ibex/mail/Query.java @@ -121,4 +121,56 @@ public class Query { default: throw new Error("this should not happen"); } } + + + // FIXME: normalize multiple-range queries using AND/OR? + + private static String range(int[] set, int min, int max, String name) { + if (set != null && set.length==1) { min = set[0]; max = set[1]; set = null; } + if (set == null) { + if (min==max) return "name=="+min; + return min+"<="+name+"<="+max; + } else { + StringBuffer sb = new StringBuffer(); + for(int i=0; i0) sb.append(" || "); + sb.append(set[i]+"<="+name+"<="+set[i+1]); + } + return sb.toString(); + } + } + + private static String range(Date earliest, Date latest, String name) { + StringBuffer sb = new StringBuffer(); + if (earliest != null) sb.append(earliest + "<="); + sb.append(name); + if (latest != null) sb.append("<="+latest); + return sb.toString(); + } + + public String toString() { + switch(type) { + case ALL: return "ALL"; + case NOT: return "NOT " + q[0]; + case OR: return StringUtil.join(q, " || "); + case AND: return StringUtil.join(q, " && "); + case UID: return range(set, min, max, "uid"); + case IMAPNUM: return range(set, min, max, "imapnum"); + case NNTPNUM: return range(set, min, max, "nntpnum"); + case SENT: return range(earliest, latest, "sent"); + case ARRIVAL: return range(earliest, latest, "arrival"); + case HEADER: return "headers["+key+"]=="+text; + case DELETED: return "deleted"; + case SEEN: return "seen"; + case FLAGGED: return "flagged"; + case DRAFT: return "draft"; + case ANSWERED: return "answered"; + case RECENT: return "recent"; + // FIXME: super inefficient + case BODY: return ""; + case FULL: return ""; + case SIZE: return ""; + default: throw new Error("this should not happen"); + } + } }