import java.util.*;
import java.text.*;
+/** abstract superclass for mailboxes, which store messages along with their flags */
public abstract class Mailbox extends Target {
public static final String STORAGE_ROOT =
public void move(Query q, Mailbox dest) {
for(Mailbox.Iterator it = iterator(q);it.next();) { dest.add(it.cur()); it.delete(); }
}
+ public static abstract class Iterator implements Mailbox.Iterator {
+ public void addFlags(int flags) {
+ if ((flags & Flag.DELETED) == Flag.DELETED) deleted(true);
+ if ((flags & Flag.SEEN) == Flag.SEEN) seen(true);
+ if ((flags & Flag.FLAGGED) == Flag.FLAGGED) flagged(true);
+ if ((flags & Flag.DRAFT) == Flag.DRAFT) draft(true);
+ if ((flags & Flag.RECENT) == Flag.RECENT) recent(true);
+ }
+ public void removeFlags(int flags) {
+ if ((flags & Flag.DELETED) == Flag.DELETED) deleted(false);
+ if ((flags & Flag.SEEN) == Flag.SEEN) seen(false);
+ if ((flags & Flag.FLAGGED) == Flag.FLAGGED) flagged(false);
+ if ((flags & Flag.DRAFT) == Flag.DRAFT) draft(false);
+ if ((flags & Flag.RECENT) == Flag.RECENT) recent(false);
+ }
+ public void setFlags(int flags) {
+ if ((flags & Flag.DELETED) == Flag.DELETED) deleted(true); else deleted(false);
+ if ((flags & Flag.SEEN) == Flag.SEEN) seen(true); else seen(false);
+ if ((flags & Flag.FLAGGED) == Flag.FLAGGED) flagged(true); else flagged(false);
+ if ((flags & Flag.DRAFT) == Flag.DRAFT) draft(true); else draft(false);
+ if ((flags & Flag.RECENT) == Flag.RECENT) recent(true); else recent(false);
+ }
+ }
}
public abstract void draft(boolean on);
public abstract void answered(boolean on);
public abstract void recent(boolean on);
+ 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 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 {
}
}
+ /** constants for the six IMAP flags */
public static class Flag {
public static final int DELETED = 0x0001;
public static final int SEEN = 0x0002;