Author: rdonkin
Date: Mon Nov 19 13:00:51 2007
New Revision: 596445

URL: http://svn.apache.org/viewvc?rev=596445&view=rev
Log:
Initialise number cache lazily.

Modified:
    
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java
    
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapperTest.java

Modified: 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java?rev=596445&r1=596444&r2=596445&view=diff
==============================================================================
--- 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java
 (original)
+++ 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java
 Mon Nov 19 13:00:51 2007
@@ -52,6 +52,8 @@
 
     private MailboxEventDispatcher eventDispatcher = new 
MailboxEventDispatcher();
     
+    private boolean startingNumberCache = false;
+    
     
     public NumberStableSessionWrapper() {
     }
@@ -67,18 +69,22 @@
 
     public void init() throws MailboxManagerException {
         mailbox.addListener(eventDispatcher);
-        getNumberCache();
         eventDispatcher.addMailboxListener(this);        
     }
 
     protected UidToMsnBidiMap getNumberCache() throws MailboxManagerException {
-        if (numberCache == null) {
+        if (numberCache == null && mailbox != null) {
+            startingNumberCache = true;
+            try {
             MessageResult[] mr = mailbox.getMessages(GeneralMessageSetImpl
                     .all(), MessageResult.UID);
             numberCache = new UidToMsnBidiMap();
             for (int i = 0; i < mr.length; i++) {
                 numberCache.add(mr[i].getUid());
             }
+            } finally {
+                startingNumberCache = false;
+            }
         }
         return numberCache;
     }
@@ -112,6 +118,8 @@
 
     protected MessageResult addMsnResult(MessageResult mr, int result)
             throws MailboxManagerException {
+        // added events dispatched before the cache has been started
+        // should be ignored
         if (mr != null) {
             if ((result & MessageResult.MSN) > 0) {
                 // TODO copy the MessageResult because it could be another 
class
@@ -162,7 +170,12 @@
 
     public void added(MessageResult result) {
         try {
-            getNumberCache().add(result.getUid());
+            // added events dispatched before the cache has been started
+            // should be ignored
+            if (!startingNumberCache && numberCache != null) 
+            {
+                getNumberCache().add(result.getUid());
+            }
         } catch (MailboxManagerException e) {
             getLog().error("This should not happen",e);
         }

Modified: 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapperTest.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapperTest.java?rev=596445&r1=596444&r2=596445&view=diff
==============================================================================
--- 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapperTest.java
 (original)
+++ 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapperTest.java
 Mon Nov 19 13:00:51 2007
@@ -19,16 +19,11 @@
 
 package org.apache.james.mailboxmanager.wrapper;
 
-import org.apache.james.mailboxmanager.GeneralMessageSet;
 import org.apache.james.mailboxmanager.MailboxListener;
 import org.apache.james.mailboxmanager.MailboxManagerException;
-import org.apache.james.mailboxmanager.MessageResult;
-import org.apache.james.mailboxmanager.impl.MessageResultImpl;
 import org.apache.james.mailboxmanager.mailbox.GeneralMailbox;
 import org.jmock.Mock;
 import org.jmock.MockObjectTestCase;
-import org.jmock.core.Constraint;
-import org.jmock.core.constraint.IsInstanceOf;
 
 public class SessionMailboxWrapperTest extends MockObjectTestCase {
 
@@ -40,13 +35,7 @@
 
         final MailboxListener listenerObject = 
sessionMailboxWrapper.getListenerObject();
         
generalMailboxMock.expects(once()).method("addListener").with(same(listenerObject));
-        
-        Constraint[] getMessagesArgs={new 
IsInstanceOf(GeneralMessageSet.class),new IsInstanceOf(Integer.class)};
-        
-        MessageResult[] result={new MessageResultImpl()};
-        
-        
generalMailboxMock.expects(once()).method("getMessages").with(getMessagesArgs).after("addListener").will(returnValue(result));
-        
generalMailboxMock.expects(once()).method("removeListener").with(same(listenerObject)).after("getMessages");
+        
generalMailboxMock.expects(once()).method("removeListener").with(same(listenerObject));
         
         sessionMailboxWrapper.setMailbox((GeneralMailbox) generalMailboxMock
                 .proxy());



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to