Author: rdonkin
Date: Sun Dec  2 15:11:49 2007
New Revision: 600407

URL: http://svn.apache.org/viewvc?rev=600407&view=rev
Log:
Simplify tracking. UID tracker is now a part of the mailbox.

Removed:
    
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/MailboxCache.java
    
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/MailboxTracker.java
Modified:
    
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidChangeTracker.java
    
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java
    
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java
    
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
    
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java

Modified: 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidChangeTracker.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidChangeTracker.java?rev=600407&r1=600406&r2=600407&view=diff
==============================================================================
--- 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidChangeTracker.java
 (original)
+++ 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidChangeTracker.java
 Sun Dec  2 15:11:49 2007
@@ -31,17 +31,19 @@
 import javax.mail.MessagingException;
 
 import org.apache.james.mailboxmanager.Constants;
+import org.apache.james.mailboxmanager.MailboxListener;
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.MessageResult;
 import org.apache.james.mailboxmanager.MessageResultUtils;
+import org.apache.james.mailboxmanager.impl.MailboxEventDispatcher;
 import org.apache.james.mailboxmanager.impl.MessageFlags;
 import org.apache.james.mailboxmanager.mailbox.GeneralMailbox;
 
-public class UidChangeTracker extends MailboxTracker implements Constants {
+public class UidChangeTracker implements Constants {
     
-
+    private final MailboxEventDispatcher eventDispatcher;
     
-    private TreeMap cache = new TreeMap();
+    private final TreeMap cache;
 
     private long lastUidAtStart;
 
@@ -49,11 +51,11 @@
 
     private long lastScannedUid = 0;
 
-    public UidChangeTracker(MailboxCache mailboxCache, String mailboxName,
-            long lastUid) {
-        super(mailboxCache, mailboxName);
+    public UidChangeTracker(long lastUid) {
         this.lastUidAtStart = lastUid;
         this.lastUid = lastUid;
+        eventDispatcher = new MailboxEventDispatcher();
+        cache = new TreeMap();
     }
 
     public synchronized void expunged(final long[] uidsExpunged) {
@@ -209,6 +211,12 @@
         return lastScannedUid;
     }
 
+    public void addMailboxListener(MailboxListener listener) {
+        eventDispatcher.addMailboxListener(listener);
+    }
 
+    public void removeMailboxListener(MailboxListener listener) {
+        eventDispatcher.removeMailboxListener(listener);
+    }
 
 }

Modified: 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java?rev=600407&r1=600406&r2=600407&view=diff
==============================================================================
--- 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java
 (original)
+++ 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java
 Sun Dec  2 15:11:49 2007
@@ -36,7 +36,7 @@
     protected MailboxListenerCollector collector;
     
     public void setUp() {
-        tracker=new UidChangeTracker(null,"test",1000);
+        tracker=new UidChangeTracker(1000);
         collector=new MailboxListenerCollector();
         tracker.addMailboxListener(collector);
     }

Modified: 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java?rev=600407&r1=600406&r2=600407&view=diff
==============================================================================
--- 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java
 (original)
+++ 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java
 Sun Dec  2 15:11:49 2007
@@ -51,7 +51,7 @@
         MailboxRow mr = new MailboxRow("#users.tuser.INBOX", 100);
         mr.save();
         mr=MailboxRowPeer.retrieveByName("#users.tuser.INBOX");
-        ImapMailbox torqueMailbox = new TorqueMailbox(mr, new 
UidChangeTracker(null,"#users.tuser.INBOX",100),
+        ImapMailbox torqueMailbox = new TorqueMailbox(mr,
                 new WriterPreferenceReadWriteLock(),null, 1);
         torqueMailbox.addListener(new MailboxListenerCollector());
         assertEquals(0,torqueMailbox.getMessageCount());

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=600407&r1=600406&r2=600407&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
 Sun Dec  2 15:11:49 2007
@@ -43,7 +43,6 @@
 import org.apache.james.mailboxmanager.SearchParameters;
 import org.apache.james.mailboxmanager.UnsupportedCriteriaException;
 import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
-import org.apache.james.mailboxmanager.impl.MailboxEventDispatcher;
 import org.apache.james.mailboxmanager.mailbox.AbstractGeneralMailbox;
 import org.apache.james.mailboxmanager.mailbox.ImapMailbox;
 import org.apache.james.mailboxmanager.torque.om.MailboxRow;
@@ -77,22 +76,19 @@
 
     private UidChangeTracker tracker;
 
-    private MailboxEventDispatcher eventDispatcher = new 
MailboxEventDispatcher();
-
     private UidToKeyConverter uidToKeyConverter;
     
     private final ReadWriteLock lock;
     
     private final long sessionId;
-    
-    TorqueMailbox(final MailboxRow mailboxRow, final UidChangeTracker tracker, 
final ReadWriteLock lock, 
+        
+    TorqueMailbox(final MailboxRow mailboxRow, final ReadWriteLock lock, 
             final Log log, final long sessionId) {
         setLog(log);
         this.sessionId = sessionId;
         this.mailboxRow = mailboxRow;
-        this.tracker = tracker;
+        this.tracker = new UidChangeTracker(mailboxRow.getLastUid());
         this.lock = lock;
-        tracker.addMailboxListener(getEventDispatcher());
         getUidToKeyConverter().setUidValidity(mailboxRow.getUidValidity());
     }
     
@@ -113,7 +109,7 @@
 
     public synchronized String getName() throws MailboxManagerException {
         checkAccess();
-        return getUidChangeTracker().getMailboxName();
+        return mailboxRow.getName();
     }
 
     public int getMessageCount() throws MailboxManagerException {
@@ -179,7 +175,6 @@
                 }
             } else {
                 // mailboxRow==null
-                getUidChangeTracker().mailboxNotFound();
                 throw new MailboxManagerException("Mailbox has been deleted");
             }
         } catch (InterruptedException e) {
@@ -583,19 +578,15 @@
     }
 
     public void addListener(MailboxListener listener) throws 
MailboxManagerException {
-        getEventDispatcher().addMailboxListener(listener);
         checkAccess();
+        tracker.addMailboxListener(listener);
     }
 
     public void removeListener(MailboxListener mailboxListener) {
-        if (!open || getEventDispatcher().size() == 0) {
+        if (!open) {
           throw new RuntimeException("mailbox not open");
         }
-        getEventDispatcher().removeMailboxListener(mailboxListener);
-        if (getEventDispatcher().size() == 0) {
-            open = false;
-            getUidChangeTracker().removeMailboxListener(getEventDispatcher());
-        }
+        tracker.removeMailboxListener(mailboxListener);
     }
 
     public long getUidValidity() throws MailboxManagerException {
@@ -627,7 +618,6 @@
                         
getUidChangeTracker().foundLastUid(mailboxRow.getLastUid());
                         return getUidChangeTracker().getLastUid() + 1;
                     } else {
-                        getUidChangeTracker().mailboxNotFound();
                         throw new MailboxManagerException("Mailbox has been 
deleted");
                     }
                 } catch (NoRowsException e) {
@@ -649,19 +639,7 @@
     private void checkAccess() throws MailboxManagerException {
         if (!open) {
             throw new RuntimeException("mailbox is closed");
-        } else if (getEventDispatcher().size() == 0) {
-            throw new RuntimeException("mailbox has not been opened");
-        } else if (getUidChangeTracker().isExisting()) {
-            throw new MailboxManagerException("Mailbox is not existing");
-        }
-    }
-    
-
-    protected MailboxEventDispatcher getEventDispatcher() {
-        if (eventDispatcher == null) {
-            eventDispatcher = new MailboxEventDispatcher();
         }
-        return eventDispatcher;
     }
     
     protected UidChangeTracker getUidChangeTracker() {

Modified: 
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java?rev=600407&r1=600406&r2=600407&view=diff
==============================================================================
--- 
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
 (original)
+++ 
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
 Sun Dec  2 15:11:49 2007
@@ -20,8 +20,10 @@
 package org.apache.james.mailboxmanager.torque;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Random;
 
 import javax.mail.internet.MimeMessage;
@@ -44,8 +46,6 @@
 import org.apache.james.mailboxmanager.manager.MailboxManager;
 import org.apache.james.mailboxmanager.torque.om.MailboxRow;
 import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
-import org.apache.james.mailboxmanager.tracking.MailboxCache;
-import org.apache.james.mailboxmanager.tracking.UidChangeTracker;
 import org.apache.james.mailboxmanager.wrapper.ImapMailboxSessionWrapper;
 import org.apache.james.services.User;
 import org.apache.torque.TorqueException;
@@ -59,15 +59,16 @@
 
     private static final char SQL_WILDCARD_CHAR = '%';
     private final static Random random = new Random();
-    private MailboxCache mailboxCache;
     
     protected Log log = LogFactory.getLog(TorqueMailboxManager.class);
 
     private final ReadWriteLock lock;
     
+    private final Map managers;
+    
     public TorqueMailboxManager() {
         this.lock =  new WriterPreferenceReadWriteLock();
-        mailboxCache = new MailboxCache();
+        managers = new HashMap();
     }
     
     public MailboxSession getMailboxSession(String mailboxName,
@@ -99,34 +100,29 @@
         }
     }
     
-    
-    
     public ImapMailboxSession getImapMailboxSession(String mailboxName)
             throws MailboxManagerException {
 
         try {
-            synchronized (getMailboxCache()) {
+            synchronized (managers) {
                 MailboxRow mailboxRow = MailboxRowPeer
                         .retrieveByName(mailboxName);
 
                 if (mailboxRow != null) {
-                    UidChangeTracker tracker = (UidChangeTracker) 
getMailboxCache()
-                            .getMailboxTracker(mailboxName,
-                                    UidChangeTracker.class);
-                    if (tracker == null) {
-                        tracker = new UidChangeTracker(getMailboxCache(),
-                                mailboxName, mailboxRow.getLastUid());
-                        getMailboxCache().add(mailboxName, tracker);
-                    }
                     getLog().info("created ImapMailboxSession "+mailboxName);
-                    final ImapMailbox torqueMailbox = new TorqueMailbox(
-                                                mailboxRow, tracker, lock, 
getLog(), random.nextLong());
+                    
+                    ImapMailbox torqueMailbox = (ImapMailbox) 
managers.get(mailboxName);
+                    if (torqueMailbox == null) {
+                        torqueMailbox = new TorqueMailbox(
+                                                mailboxRow, lock, getLog(), 
random.nextLong());
+                        managers.put(mailboxName, torqueMailbox);
+                    }
+                    
                     final ImapMailboxSessionWrapper wrapper 
                         = new ImapMailboxSessionWrapper(torqueMailbox);
                     return wrapper;
                 } else {
                     getLog().info("Mailbox '" + mailboxName + "' not found.");
-                    getMailboxCache().notFound(mailboxName);
                     throw new MailboxNotFoundException(mailboxName);
                 }
             }
@@ -135,15 +131,10 @@
         }
     }
     
-    private MailboxCache getMailboxCache() {
-       return mailboxCache;
-    }
-    
-
     public void createMailbox(String namespaceName)
             throws MailboxManagerException {
         getLog().info("createMailbox "+namespaceName);
-        synchronized (getMailboxCache()) {
+        synchronized (managers) {
             MailboxRow mr = new MailboxRow();
             mr.setName(namespaceName);
             mr.setLastUid(0);
@@ -159,7 +150,7 @@
     public void deleteMailbox(String mailboxName)
             throws MailboxManagerException {
         getLog().info("deleteMailbox "+mailboxName);
-        synchronized (getMailboxCache()) {
+        synchronized (managers) {
             try {
                 // TODO put this into a serilizable transaction
                 MailboxRow mr = MailboxRowPeer.retrieveByName(mailboxName);
@@ -167,7 +158,7 @@
                     throw new MailboxManagerException("Mailbox not found");
                 }
                 MailboxRowPeer.doDelete(mr);
-                getMailboxCache().notFound(mailboxName);
+                managers.remove(mailboxName);
             } catch (TorqueException e) {
                 throw new MailboxManagerException(e);
             }
@@ -178,7 +169,7 @@
             throws MailboxManagerException {
         try {
             getLog().info("renameMailbox "+from+" to "+to);
-            synchronized (getMailboxCache()) {
+            synchronized (managers) {
                 // TODO put this into a serilizable transaction
                 MailboxRow mr = MailboxRowPeer.retrieveByName(from);
                 if (mr == null) {
@@ -201,7 +192,6 @@
                     sub.setName(to + sub.getName().substring(from.length()));
                     sub.save();
                     getLog().info("renameMailbox sub-mailbox "+subOrigName+" 
to "+subNewName);
-                    getMailboxCache().renamed(subOrigName,subNewName);
                 }
             }
         } catch (Exception e) {
@@ -269,10 +259,10 @@
         CountHelper countHelper=new CountHelper();
         int count;
         try {
-            synchronized (getMailboxCache()) {
+            synchronized (managers) {
                 count = countHelper.count(c);
                 if (count == 0) {
-                    getMailboxCache().notFound(mailboxName);
+                    managers.remove(mailboxName);
                     return false;
                 } else {
                     if (count == 1) {
@@ -289,13 +279,14 @@
     }
 
     public void close() {
+        managers.clear();
     }
 
     public void deleteEverything() throws MailboxManagerException {
         try {
             MailboxRowPeer.doDelete(new 
Criteria().and(MailboxRowPeer.MAILBOX_ID,
                     new Integer(-1), Criteria.GREATER_THAN));
-            mailboxCache = new MailboxCache();
+            managers.clear();
         } catch (TorqueException e) {
             throw new MailboxManagerException(e);
         }



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

Reply via email to