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]