Author: rdonkin
Date: Sat Mar 22 09:26:30 2008
New Revision: 640011
URL: http://svn.apache.org/viewvc?rev=640011&view=rev
Log:
RECENT redesign step 1: recent now returns the UIDs of recent messages.
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/AbstractImapMailbox.java
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/ImapMailbox.java
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/AbstractMailboxSelectionProcessor.java
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StatusProcessor.java
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapSessionImpl.java
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/SelectCommand.java
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/StatusCommand.java
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/AbstractImapMailbox.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/AbstractImapMailbox.java?rev=640011&r1=640010&r2=640011&view=diff
==============================================================================
---
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/AbstractImapMailbox.java
(original)
+++
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/AbstractImapMailbox.java
Sat Mar 22 09:26:30 2008
@@ -33,6 +33,9 @@
import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
import org.apache.james.mailboxmanager.util.AbstractLogFactoryAware;
+/**
+ * TODO: This class is only used for mailbox respository integation; consider
removal
+ */
public abstract class AbstractImapMailbox extends AbstractLogFactoryAware
implements ImapMailbox {
public Collection list(MailboxSession mailboxSession) throws
MailboxManagerException {
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/ImapMailbox.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/ImapMailbox.java?rev=640011&r1=640010&r2=640011&view=diff
==============================================================================
---
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/ImapMailbox.java
(original)
+++
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/ImapMailbox.java
Sat Mar 22 09:26:30 2008
@@ -74,11 +74,10 @@
/**
* @return Flags that can be stored
*/
-
Flags getPermanentFlags();
- int getRecentCount(boolean reset, MailboxSession mailboxSession) throws
MailboxManagerException;
+ long[] recent(boolean reset, MailboxSession mailboxSession) throws
MailboxManagerException;
int getUnseenCount(MailboxSession mailboxSession) throws
MailboxManagerException;
Modified:
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java?rev=640011&r1=640010&r2=640011&view=diff
==============================================================================
---
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java
(original)
+++
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java
Sat Mar 22 09:26:30 2008
@@ -162,7 +162,7 @@
private void addRecentResponses(final List responses, final ImapMailbox
mailbox) {
try {
- final int recentCount = mailbox.getRecentCount(true,
mailboxSession);
+ final int recentCount = mailbox.recent(true,
mailboxSession).length;
// TODO: use factory
RecentResponse response = new RecentResponse(recentCount);
responses.add(response);
Modified:
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/AbstractMailboxSelectionProcessor.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/AbstractMailboxSelectionProcessor.java?rev=640011&r1=640010&r2=640011&view=diff
==============================================================================
---
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/AbstractMailboxSelectionProcessor.java
(original)
+++
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/AbstractMailboxSelectionProcessor.java
Sat Mar 22 09:26:30 2008
@@ -90,7 +90,7 @@
final Flags permanentFlags = mailbox.getPermanentFlags();
final boolean writeable = mailbox.isWriteable() && !isExamine;
final boolean resetRecent = !isExamine;
- final int recentCount = mailbox.getRecentCount(resetRecent,
mailboxSession);
+ final int recentCount = mailbox.recent(resetRecent,
mailboxSession).length;
final long uidValidity = mailbox.getUidValidity(mailboxSession);
final MessageResult firstUnseen =
mailbox.getFirstUnseen(FetchGroupImpl.MINIMAL, mailboxSession);
final int messageCount = mailbox.getMessageCount(mailboxSession);
Modified:
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StatusProcessor.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StatusProcessor.java?rev=640011&r1=640010&r2=640011&view=diff
==============================================================================
---
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StatusProcessor.java
(original)
+++
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StatusProcessor.java
Sat Mar 22 09:26:30 2008
@@ -128,7 +128,7 @@
private Long recent(final StatusDataItems statusDataItems, final
MailboxSession mailboxSession, final ImapMailbox mailbox) throws
MailboxManagerException {
final Long recent;
if (statusDataItems.isRecent()) {
- final int recentCount = mailbox.getRecentCount(false,
mailboxSession);
+ final int recentCount = mailbox.recent(false,
mailboxSession).length;
recent = new Long(recentCount);
} else {
recent = null;
Modified:
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapSessionImpl.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapSessionImpl.java?rev=640011&r1=640010&r2=640011&view=diff
==============================================================================
---
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapSessionImpl.java
(original)
+++
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapSessionImpl.java
Sat Mar 22 09:26:30 2008
@@ -85,7 +85,7 @@
response.existsResponse(selected.getMailbox()
.getMessageCount(getMailboxSession()));
response.recentResponse(selected.getMailbox()
- .getRecentCount(true, getMailboxSession()));
+ .recent(true, getMailboxSession()).length);
}
// Message updates
Modified:
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/SelectCommand.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/SelectCommand.java?rev=640011&r1=640010&r2=640011&view=diff
==============================================================================
---
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/SelectCommand.java
(original)
+++
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/SelectCommand.java
Sat Mar 22 09:26:30 2008
@@ -66,7 +66,7 @@
ImapMailbox mailbox = selected.getMailbox();
response.flagsResponse(mailbox.getPermanentFlags());
final boolean resetRecent = !isExamine;
- response.recentResponse(mailbox.getRecentCount(resetRecent,
session.getMailboxSession()));
+ response.recentResponse(mailbox.recent(resetRecent,
session.getMailboxSession()).length);
response
.okResponse("UIDVALIDITY " +
mailbox.getUidValidity(session.getMailboxSession()), null);
Modified:
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/StatusCommand.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/StatusCommand.java?rev=640011&r1=640010&r2=640011&view=diff
==============================================================================
---
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/StatusCommand.java
(original)
+++
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/StatusCommand.java
Sat Mar 22 09:26:30 2008
@@ -82,7 +82,7 @@
if (statusDataItems.recent) {
buffer.append(RECENT);
buffer.append(SP);
- buffer.append(mailbox.getRecentCount(false,
session.getMailboxSession()));
+ buffer.append(mailbox.recent(false,
session.getMailboxSession()).length);
buffer.append(SP);
}
Modified:
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java?rev=640011&r1=640010&r2=640011&view=diff
==============================================================================
---
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
(original)
+++
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
Sat Mar 22 09:26:30 2008
@@ -329,30 +329,43 @@
return permanentFlags;
}
- public int getRecentCount(boolean reset, MailboxSession mailboxSession)
throws MailboxManagerException {
+ public long[] recent(boolean reset, MailboxSession mailboxSession) throws
MailboxManagerException {
try {
lock.readLock().acquire();
try {
checkAccess();
- Flags flags = new Flags();
- flags.add(Flags.Flag.RECENT);
- try {
- int count = getMailboxRow().countMessages(flags, true);
- if (reset) {
- getMailboxRow().resetRecent();
- }
- return count;
- } catch (TorqueException e) {
- throw new MailboxManagerException(e);
- } catch (DataSetException e) {
- throw new MailboxManagerException(e);
+ final Criteria criterion = queryRecentFlagSet();
+ final List messageRows =
getMailboxRow().getMessageRows(criterion);
+ final long[] results = new long[messageRows.size()];
+ int count = 0;
+ for (Iterator it = messageRows.iterator(); it.hasNext();) {
+ final MessageRow row = (MessageRow) it.next();
+ results[count++] = row.getUid();
}
+
+ if (reset) {
+ getMailboxRow().resetRecent();
+ }
+ return results;
+ } catch (TorqueException e) {
+ throw new MailboxManagerException(e);
} finally {
lock.readLock().release();
}
} catch (InterruptedException e) {
throw new MailboxManagerException(e);
}
+
+ }
+
+ private Criteria queryRecentFlagSet() {
+ final Criteria criterion = new Criteria();
+ criterion.addJoin(MessageFlagsPeer.MAILBOX_ID,
+ MessageRowPeer.MAILBOX_ID);
+ criterion.addJoin(MessageRowPeer.UID, MessageFlagsPeer.UID);
+
+ MessageFlagsPeer.addFlagsToCriteria(new Flags(Flags.Flag.RECENT),
true, criterion);
+ return criterion;
}
public MessageResult getFirstUnseen(FetchGroup fetchGroup, MailboxSession
mailboxSession)
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]