Author: bago
Date: Tue Jul 29 07:59:49 2008
New Revision: 680726

URL: http://svn.apache.org/viewvc?rev=680726&view=rev
Log:
Backport stub "in memory" spool repository used for tests from trunk (leave 
around less garbage, and it more compliant with the interface implemented)

Modified:
    
james/server/branches/v2.3/src/test/org/apache/james/test/mock/james/InMemorySpoolRepository.java

Modified: 
james/server/branches/v2.3/src/test/org/apache/james/test/mock/james/InMemorySpoolRepository.java
URL: 
http://svn.apache.org/viewvc/james/server/branches/v2.3/src/test/org/apache/james/test/mock/james/InMemorySpoolRepository.java?rev=680726&r1=680725&r2=680726&view=diff
==============================================================================
--- 
james/server/branches/v2.3/src/test/org/apache/james/test/mock/james/InMemorySpoolRepository.java
 (original)
+++ 
james/server/branches/v2.3/src/test/org/apache/james/test/mock/james/InMemorySpoolRepository.java
 Tue Jul 29 07:59:49 2008
@@ -19,6 +19,9 @@
 
 package org.apache.james.test.mock.james;
 
+import org.apache.avalon.framework.activity.Disposable;
+import org.apache.avalon.framework.container.ContainerUtil;
+import org.apache.james.core.MailImpl;
 import org.apache.james.services.SpoolRepository;
 import org.apache.james.test.mock.avalon.MockLogger;
 import org.apache.james.util.Lock;
@@ -44,7 +47,7 @@
  * @version 1.0.0, 24/04/1999
  */
 public class InMemorySpoolRepository
-    implements SpoolRepository {
+    implements SpoolRepository, Disposable {
 
     /**
      * Whether 'deep debugging' is turned on.
@@ -136,7 +139,19 @@
                 }
             }
             try {
-                spool.put(key,mc);
+                // Remove any previous copy of this mail
+                if (spool.containsKey(key)) {
+                    // do not use this.remove because this would
+                    // also remove a current lock.
+                    Object o = spool.remove(key);
+                    ContainerUtil.dispose(o);
+                }
+                // Clone the mail (so the caller could modify it).
+                MailImpl m = new MailImpl(mc,mc.getName());
+                m.setState(mc.getState());
+                m.setLastUpdated(mc.getLastUpdated());
+                m.setErrorMessage(mc.getErrorMessage());
+                spool.put(mc.getName(),m);
             } finally {
                 if (!wasLocked) {
                     // If it wasn't locked, we need to unlock now
@@ -157,7 +172,7 @@
             }
 
         } catch (Exception e) {
-            getLogger().error("Exception storing mail: " + e);
+            getLogger().error("Exception storing mail: " + e,e);
             throw new MessagingException("Exception caught while storing 
Message Container: ",e);
         }
     }
@@ -176,7 +191,10 @@
         try {
             Mail mc = null;
             try {
-                mc = (Mail) spool.get(key);
+                mc = new MailImpl((Mail) spool.get(key),key);
+                mc.setState(((Mail) spool.get(key)).getState());
+                mc.setErrorMessage(((Mail) spool.get(key)).getErrorMessage());
+                mc.setLastUpdated(((Mail) spool.get(key)).getLastUpdated());
             } 
             catch (RuntimeException re){
                 StringBuffer exceptionBuffer = new StringBuffer(128);
@@ -230,7 +248,10 @@
     public void remove(String key) throws MessagingException {
         if (lock(key)) {
             try {
-                if (spool != null) spool.remove(key);
+                if (spool != null) {
+                    Object o = spool.remove(key);
+                    ContainerUtil.dispose(o);
+                }
             } finally {
                 unlock(key);
             }
@@ -414,7 +435,30 @@
     }
 
     public void clear() {
-        spool.clear();
+        if (spool != null) {
+            Iterator i = list();
+            while (i.hasNext()) {
+                String key = (String) i.next();
+                try {
+                    remove(key);
+                } catch (MessagingException e) {
+                }
+            }
+        }
+    }
+
+    public void dispose() {
+        clear();
+    }
+
+    public String toString() {
+        StringBuffer result = new StringBuffer();
+        result.append(super.toString());
+        Iterator i = list();
+        while (i.hasNext()) {
+            result.append("\n\t"+i.next());
+        }
+        return result.toString();
     }
     
 }



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

Reply via email to