add Mailbox.get(JS)
[org.ibex.mail.git] / src / org / ibex / mail / Mailbox.java
index 402e316..3d3f8bb 100644 (file)
@@ -41,14 +41,23 @@ public abstract class Mailbox extends JS.Obj implements Target {
     private int randomUidValidity = new Random().nextInt();
     public  int uidValidity()  { return randomUidValidity; }
 
+    public int maxuid() {
+        int ret = -1;
+        for(Mailbox.Iterator it = iterator(); it.next(); ) ret = Math.max(ret, it.uid());
+        return ret;
+    }
+
     /** default, inefficient implementation of Mailbox; only requires a few methods to be implemented */
-    public static abstract class Default extends Mailbox {
+    public static abstract class Default extends Mailbox /* implements MailTree? */ {
         public Mailbox.Iterator iterator(Query q) { return new Mailbox.Iterator.QueryIterator(q, this); }
         public void copy(Query q, Mailbox dest) { for(Mailbox.Iterator it = iterator(q); it.next();) dest.insert(it.cur(), it.getFlags()); }
         public int count(Query q) { int count = 0; for(Mailbox.Iterator it = iterator(q); it.next();) count++; return count; }
         public MailTree slash(String name, boolean create) { return null; }
         public String[] children() { return new String[] { }; }
         public void post(Message message) { insert(message, Flag.RECENT); }
+        public JS get(JS key) throws JSExn {
+            return (JS)slash(JSU.toString(key), true);
+        }
         public void move(Query q, Mailbox dest) {
             for(Mailbox.Iterator it = iterator(q);it.next();) { dest.insert(it.cur(), it.getFlags()); it.delete(); }
         }
@@ -67,7 +76,11 @@ public abstract class Mailbox extends JS.Obj implements Target {
     public static interface Iterator {
         public abstract Message cur();
         public abstract Headers head();
+
+        // FIXME: change all code to actually use this convention!
+        /** JDBC convention: iterator starts "before the first element" */
         public abstract boolean next();
+
         public abstract void    delete();
 
         /** a unique identifier for this message */