Author: rdonkin
Date: Wed Jun  3 07:00:52 2009
New Revision: 781281

URL: http://svn.apache.org/viewvc?rev=781281&view=rev
Log:
IMAP-95 Enumerate all possible MessageRange types. Not sure using an interface 
here is justified given. https://issues.apache.org/jira/browse/IMAP-95

Modified:
    
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java
    
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MessageRange.java
    
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/util/MessageRangeImpl.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
    
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
    
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java

Modified: 
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java?rev=781281&r1=781280&r2=781281&view=diff
==============================================================================
--- 
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java
 (original)
+++ 
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java
 Wed Jun  3 07:00:52 2009
@@ -27,6 +27,7 @@
 import org.apache.james.imap.mailbox.MessageRange;
 import org.apache.james.imap.mailbox.SearchQuery;
 import org.apache.james.imap.mailbox.StorageException;
+import org.apache.james.imap.mailbox.MessageRange.Type;
 import org.apache.james.imap.mailbox.SearchQuery.Criterion;
 import org.apache.james.imap.mailbox.SearchQuery.NumericRange;
 import org.apache.james.imap.store.mail.MessageMapper;
@@ -47,23 +48,23 @@
     public List<MailboxMembership> findInMailbox(MessageRange set) throws 
StorageException {
         try {
             final List<MailboxMembership> results;
-            switch (set.getType()) {
-                case MessageRange.TYPE_UID:
-                    final long from = set.getUidFrom();
-                    final long to = set.getUidTo();
-                    if (from == to) {
-                        results = findMessagesInMailboxWithUID(mailboxId, 
from);
-                    } else if (to > 0) {
-                        results = findMessagesInMailboxBetweenUIDs(mailboxId, 
from, to);
-                    } else {
-                        results = findMessagesInMailboxAfterUID(mailboxId, 
from);
-                    }
-                    break;
+            final long from = set.getUidFrom();
+            final long to = set.getUidTo();
+            final Type type = set.getType();
+            switch (type) {
                 default:
-                    //TODO: Log?
-                case MessageRange.TYPE_ALL:
+                case ALL:
                     results = findMessagesInMailbox(mailboxId);
                     break;
+                case FROM:
+                    results = findMessagesInMailboxAfterUID(mailboxId, from);
+                    break;
+                case ONE:
+                    results = findMessagesInMailboxWithUID(mailboxId, from);
+                    break;
+                case RANGE:
+                    results = findMessagesInMailboxBetweenUIDs(mailboxId, 
from, to);
+                    break;       
             }
             return results;
         } catch (PersistenceException e) {
@@ -104,21 +105,20 @@
     public List<MailboxMembership> findMarkedForDeletionInMailbox(final 
MessageRange set) throws StorageException {
         try {
             final List<MailboxMembership> results;
+            final long from = set.getUidFrom();
+            final long to = set.getUidTo();
             switch (set.getType()) {
-                case MessageRange.TYPE_UID:
-                    final long from = set.getUidFrom();
-                    final long to = set.getUidTo();
-                    if (from == to) {
-                        results = 
findDeletedMessagesInMailboxWithUID(mailboxId, from);
-                    } else if (to > 0) {
-                        results = 
findDeletedMessagesInMailboxBetweenUIDs(mailboxId, from, to);
-                    } else {
-                        results = 
findDeletedMessagesInMailboxAfterUID(mailboxId, from);
-                    }
+                case ONE:
+                    results = findDeletedMessagesInMailboxWithUID(mailboxId, 
from);
+                    break;
+                case RANGE:
+                    results = 
findDeletedMessagesInMailboxBetweenUIDs(mailboxId, from, to);
+                    break;
+                case FROM:
+                    results = findDeletedMessagesInMailboxAfterUID(mailboxId, 
from);
                     break;
                 default:
-                    //TODO: Log?
-                case MessageRange.TYPE_ALL:
+                case ALL:
                     results = findDeletedMessagesInMailbox(mailboxId);
                     break;
             }

Modified: 
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MessageRange.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MessageRange.java?rev=781281&r1=781280&r2=781281&view=diff
==============================================================================
--- 
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MessageRange.java
 (original)
+++ 
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MessageRange.java
 Wed Jun  3 07:00:52 2009
@@ -23,16 +23,21 @@
  * Used to define a range of messages by uid or msn, or a individual message by
  * key or message object.<br />
  * The type of the set should be defined by using an appropriate constructor.
- * 
  */
-
 public interface MessageRange {
+    
+    public enum Type {
+        /** All messages */
+        ALL,
+        /** A sigle message */
+        ONE,
+        /** All messages with a uid equal or higher than */
+        FROM,
+        /** All messagse within the given range of uids (inclusive) */
+        RANGE
+    }
 
-    public static int TYPE_UID = 2;
-
-    public static int TYPE_ALL = 16;
-
-    int getType();
+    Type getType();
 
     long getUidFrom();
 

Modified: 
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/util/MessageRangeImpl.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/util/MessageRangeImpl.java?rev=781281&r1=781280&r2=781281&view=diff
==============================================================================
--- 
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/util/MessageRangeImpl.java
 (original)
+++ 
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/util/MessageRangeImpl.java
 Wed Jun  3 07:00:52 2009
@@ -25,13 +25,13 @@
 
     private static final int NOT_A_UID = -1;
 
-    private final int type;
+    private final Type type;
 
     private final long uidFrom;
 
     private final long uidTo;
 
-    private MessageRangeImpl(final int type, final long uidFrom,
+    private MessageRangeImpl(final Type type, final long uidFrom,
             final long uidTo) {
         super();
         this.type = type;
@@ -39,7 +39,7 @@
         this.uidTo = uidTo;
     }
 
-    public int getType() {
+    public Type getType() {
         return type;
     }
 
@@ -52,21 +52,24 @@
     }
 
     public static MessageRange oneUid(long uid) {
-        MessageRangeImpl result = new MessageRangeImpl(TYPE_UID, uid, uid);
+        MessageRangeImpl result = new MessageRangeImpl(Type.ONE, uid, uid);
         return result;
     }
 
     public static MessageRange all() {
-        MessageRangeImpl result = new MessageRangeImpl(TYPE_ALL, NOT_A_UID,
+        MessageRangeImpl result = new MessageRangeImpl(Type.ALL, NOT_A_UID,
                 NOT_A_UID);
         return result;
     }
 
     public static MessageRange uidRange(long from, long to) {
-        if (to == Long.MAX_VALUE) {
+        MessageRangeImpl result;
+        if (to == Long.MAX_VALUE || to < from) {
             to = NOT_A_UID;
+            result = new MessageRangeImpl(Type.FROM, from, to);
+        } else {
+            result = new MessageRangeImpl(Type.RANGE, from, to);
         }
-        MessageRangeImpl result = new MessageRangeImpl(TYPE_UID, from, to);
         return result;
     }
 

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java?rev=781281&r1=781280&r2=781281&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
 Wed Jun  3 07:00:52 2009
@@ -84,8 +84,7 @@
                     lowVal = session.getSelected().uid(
                             (int) idSet[i].getLowVal());
                 }
-                MessageRange messageSet = MessageRangeImpl.uidRange(lowVal,
-                        highVal);
+                MessageRange messageSet = MessageRangeImpl.uidRange(lowVal, 
highVal);
                 final MailboxSession mailboxSession = ImapSessionUtils
                         .getMailboxSession(session);
                 final Iterator<MessageResult> it = 
mailbox.getMessages(messageSet, resultToFetch, mailboxSession);

Modified: 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java?rev=781281&r1=781280&r2=781281&view=diff
==============================================================================
--- 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
 (original)
+++ 
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
 Wed Jun  3 07:00:52 2009
@@ -262,14 +262,11 @@
         return results;
     }
 
-    private static UidRange uidRangeForMessageSet(MessageRange set)
-    throws MailboxException {
-        if (set.getType() == MessageRange.TYPE_UID) {
-            return new UidRange(set.getUidFrom(), set.getUidTo());
-        } else if (set.getType() == MessageRange.TYPE_ALL) {
+    private static UidRange uidRangeForMessageSet(MessageRange set) throws 
MailboxException {
+        if (set.getType().equals(MessageRange.Type.ALL)) {
             return new UidRange(1, -1);
         } else {
-            throw new UnsupportedOperationException("unsupported MessageSet: " 
+ set.getType());
+            return new UidRange(set.getUidFrom(), set.getUidTo());
         }
     }
 

Modified: 
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java?rev=781281&r1=781280&r2=781281&view=diff
==============================================================================
--- 
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
 (original)
+++ 
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
 Wed Jun  3 07:00:52 2009
@@ -49,7 +49,6 @@
 import org.apache.james.imap.mailbox.MessageRange;
 import org.apache.james.imap.mailbox.MessageResult;
 import org.apache.james.imap.mailbox.SearchQuery;
-import org.apache.james.imap.mailbox.UnsupportedOperationException;
 import org.apache.james.imap.mailbox.MessageResult.FetchGroup;
 import org.apache.james.imap.mailbox.SearchQuery.Criterion;
 import org.apache.james.imap.mailbox.SearchQuery.NumericRange;
@@ -261,13 +260,16 @@
             throws MailboxException {
         Criteria criteria = new Criteria();
         criteria.addAscendingOrderByColumn(MessageRowPeer.UID);
-        if (set.getType() == MessageRange.TYPE_ALL) {
-            // empty Criteria = everything
-        } else if (set.getType() == MessageRange.TYPE_UID) {
-
-            if (set.getUidFrom() == set.getUidTo()) {
+        switch (set.getType()) {
+            default:
+            case ALL:
+//              empty Criteria = everythin
+                break;
+            case ONE:
                 criteria.add(MessageRowPeer.UID, set.getUidFrom());
-            } else {
+                break;
+            case FROM:
+            case RANGE:
                 Criteria.Criterion criterion1 = criteria.getNewCriterion(
                         MessageRowPeer.UID, new Long(set.getUidFrom()),
                         Criteria.GREATER_EQUAL);
@@ -277,10 +279,7 @@
                             Criteria.LESS_EQUAL);
                     criterion1.and(criterion2);
                 }
-                criteria.add(criterion1);
-            }
-        } else {
-            throw new UnsupportedOperationException("Unsupported MessageSet: " 
+ set.getType());
+                criteria.add(criterion1);                
         }
         return criteria;
     }
@@ -334,12 +333,10 @@
 
     private static UidRange uidRangeForMessageSet(MessageRange set)
             throws MailboxException {
-        if (set.getType() == MessageRange.TYPE_UID) {
-            return new UidRange(set.getUidFrom(), set.getUidTo());
-        } else if (set.getType() == MessageRange.TYPE_ALL) {
+        if (set.getType().equals(MessageRange.Type.ALL)) {
             return new UidRange(1, -1);
         } else {
-            throw new UnsupportedOperationException("unsupported MessageSet: " 
+ set.getType());
+            return new UidRange(set.getUidFrom(), set.getUidTo());
         }
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to