+ // Iterator Definition //////////////////////////////////////////////////////////////////////////////
+
+ public static interface Iterator {
+ public abstract Message cur();
+ public abstract Headers head();
+ public abstract boolean next();
+ public abstract int uid();
+ public abstract int num();
+ public abstract void delete();
+
+ public abstract void set(String key, String val);
+ public abstract String get(String key);
+
+ public abstract boolean seen();
+ public abstract boolean deleted();
+ public abstract boolean flagged();
+ public abstract boolean draft();
+ public abstract boolean answered();
+ public abstract boolean recent();
+
+ public abstract void seen(boolean on);
+ public abstract void deleted(boolean on);
+ public abstract void flagged(boolean on);
+ public abstract void draft(boolean on);
+ public abstract void answered(boolean on);
+ public abstract void recent(boolean on);
+
+ public abstract int flags();
+ public abstract void addFlags(int flags);
+ public abstract void removeFlags(int flags);
+ public abstract void setFlags(int flags);
+
+ public static class Wrapper implements Iterator {
+ private Iterator it;
+ public Wrapper(Iterator it) { this.it = it; }
+ public Message cur() { return it.cur(); }
+ public Headers head() { return it.head(); }
+ public boolean next() { return it.next(); }
+ public int uid() { return it.uid(); }
+ public int flags() { return it.flags(); }
+ public int num() { return it.num(); }
+ public void set(String key, String val) { it.set(key, val); }
+ public String get(String key) { return it.get(key); }
+ public void delete() { it.delete(); }
+ public boolean seen() { return it.seen(); }
+ public boolean deleted() { return it.deleted(); }
+ public boolean flagged() { return it.flagged(); }
+ public boolean draft() { return it.draft(); }
+ public boolean answered() { return it.answered(); }
+ public boolean recent() { return it.recent(); }
+ public void seen(boolean on) { it.seen(on); }
+ public void deleted(boolean on) { it.deleted(on); }
+ public void flagged(boolean on) { it.flagged(on); }
+ public void draft(boolean on) { it.draft(on); }
+ public void answered(boolean on) { it.answered(on); }
+ public void recent(boolean on) { it.recent(on); }
+ public void addFlags(int flags) { it.addFlags(flags); }
+ public void removeFlags(int flags) { it.removeFlags(flags); }
+ public void setFlags(int flags) { it.setFlags(flags); }
+ }
+
+ class QueryIterator extends Mailbox.Iterator.Wrapper {
+ Query q;
+ public QueryIterator(Query q, Mailbox m) { super(m.iterator()); this.q = q; }
+ public boolean next() {
+ if (q == null) return false;
+ do { if (!super.next()) return false; } while(!q.match(this)); return true; }
+ }
+
+ public static class NullIterator extends Mailbox.Default.Iterator {
+ public NullIterator() { }
+ public Message cur() { return null; }
+ public Headers head() { return null; }
+ public boolean next() { return false; }
+ public int uid() { return 0; }
+ public int flags() { return 0; }
+ public int num() { return 0; }
+ public void set(String key, String val) { }
+ public String get(String key) { return null; }
+ public void delete() { }
+ public boolean seen() { return false; }
+ public boolean deleted() { return false; }
+ public boolean flagged() { return false; }
+ public boolean draft() { return false; }
+ public boolean answered() { return false; }
+ public boolean recent() { return false; }
+ public void seen(boolean on) { }
+ public void deleted(boolean on) { }
+ public void flagged(boolean on) { }
+ public void draft(boolean on) { }
+ public void answered(boolean on) { }
+ public void recent(boolean on) { }