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]

Reply via email to