Modified: 
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StoreProcessor.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StoreProcessor.java?rev=596413&r1=596412&r2=596413&view=diff
==============================================================================
--- 
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StoreProcessor.java
 (original)
+++ 
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StoreProcessor.java
 Mon Nov 19 11:56:53 2007
@@ -36,7 +36,6 @@
 import org.apache.james.imapserver.processor.base.ImapSessionUtils;
 import org.apache.james.imapserver.store.MailboxException;
 import org.apache.james.mailboxmanager.GeneralMessageSet;
-import org.apache.james.mailboxmanager.MailboxListener;
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
 import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession;
@@ -69,7 +68,6 @@
             AuthorizationException, ProtocolException {
 
         ImapMailboxSession mailbox = ImapSessionUtils.getMailbox(session);
-        MailboxListener silentListener = null;
 
         final boolean replace;
         final boolean value;
@@ -84,16 +82,12 @@
             value = true;
         }
         try {
-            if (directive.isSilent()) {
-                silentListener = ImapSessionUtils.getMailbox(session);
-            }
             for (int i = 0; i < idSet.length; i++) {
                 final GeneralMessageSet messageSet = GeneralMessageSetImpl
                         .range(idSet[i].getLowVal(), idSet[i].getHighVal(),
                                 useUids);
 
-                mailbox.setFlags(flags, value, replace, messageSet,
-                        silentListener);
+                mailbox.setFlags(flags, value, replace, messageSet);
             }
         } catch (MailboxManagerException e) {
             throw new MailboxException(e);

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=596413&r1=596412&r2=596413&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
 Mon Nov 19 11:56:53 2007
@@ -20,6 +20,8 @@
 package org.apache.james.imapserver;
 
 
+import java.util.Iterator;
+
 import javax.mail.Flags;
 
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
@@ -65,14 +67,7 @@
         this.clientHostName = clientHostName;
         this.clientAddress = clientAddress;
     }
-
-
-
-    private MailboxManagerProvider getMailboxManagerProvider()
-    {
-        return mailboxManagerProvider;
-    }
-
+    
     public void unsolicitedResponses( ImapResponse request, boolean useUid ) 
throws MailboxException {
         unsolicitedResponses(request, false, useUid);
     }
@@ -88,13 +83,11 @@
                             .getMessageCount());
                     response.recentResponse(selected.getMailbox()
                             .getRecentCount(true));
-                    selected.setSizeChanged(false);
                 }
 
-                // Message updates
-                MessageResult[] flagUpdates = 
selected.getMailbox().getFlagEvents(true);
-               for (int i = 0; i < flagUpdates.length; i++) {
-                    MessageResult mr = flagUpdates[i];
+               // Message updates
+               for (final Iterator it = selected.getFlagUpdates(); 
it.hasNext(); ) {
+                    MessageResult mr = (MessageResult) it.next();
                     int msn = mr.getMsn();
                     Flags updatedFlags = mr.getFlags();
                     StringBuffer out = new StringBuffer("FLAGS ");
@@ -115,6 +108,7 @@
                         response.expungeResponse(mr.getMsn());
                     }
                 }
+                selected.reset();
             }
         } catch (MailboxManagerException e) {
             throw new MailboxException(e);
@@ -166,7 +160,7 @@
 
     public void setSelected( ImapMailboxSession mailbox, boolean readOnly ) 
throws MailboxManagerException
     {
-        SelectedMailboxSession sessionMailbox = new 
SelectedMailboxSession(mailbox, this);
+        SelectedMailboxSession sessionMailbox = new 
SelectedMailboxSession(mailbox);
         setupLogger(sessionMailbox);
         this.state = ImapSessionState.SELECTED;
         closeMailbox();

Modified: 
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/SelectedMailboxSession.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/SelectedMailboxSession.java?rev=596413&r1=596412&r2=596413&view=diff
==============================================================================
--- 
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/SelectedMailboxSession.java
 (original)
+++ 
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/SelectedMailboxSession.java
 Mon Nov 19 11:56:53 2007
@@ -21,80 +21,66 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import javax.mail.Flags;
 
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
-import org.apache.james.imapserver.store.MailboxException;
-import org.apache.james.mailboxmanager.MailboxListener;
+import org.apache.james.mailboxmanager.GeneralMessageSet;
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.MessageResult;
+import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
 import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession;
+import org.apache.james.mailboxmanager.util.MailboxEventAnalyser;
 
-public class SelectedMailboxSession extends AbstractLogEnabled implements 
MailboxListener {
-
-    private ImapSession _session;
-    private boolean _sizeChanged;
+//TODO: manage mailbox deletion
+public class SelectedMailboxSession extends AbstractLogEnabled {
+    
     private ImapMailboxSession mailbox;
+    
+    private final MailboxEventAnalyser events;
 
-    public SelectedMailboxSession(ImapMailboxSession mailbox, ImapSession 
session) throws MailboxManagerException {
+    public SelectedMailboxSession(ImapMailboxSession mailbox) throws 
MailboxManagerException {
         this.mailbox = mailbox;
-        _session = session;
-        // TODO make this a weak reference (or make sure deselect() is 
*always* called).
-        mailbox.addListener(this,MessageResult.MSN | MessageResult.UID);
+        final long sessionId = mailbox.getSessionId();
+        events = new MailboxEventAnalyser(sessionId);
+        mailbox.addListener(events);
     }
 
     public void deselect() {
-        mailbox.removeListener(this);
+        mailbox.removeListener(events);
         mailbox = null;
     }
 
-
-    public void mailboxDeleted() {
-        try {
-            _session.closeConnection("Mailbox " + mailbox.getName() + " has 
been deleted");
-        } catch (MailboxManagerException e) {
-            getLogger().error("error closing connection", e);
-        }
-    }
-
-
     public boolean isSizeChanged() {
-        return _sizeChanged;
+        return events.isSizeChanged();
     }
 
-    public void setSizeChanged(boolean sizeChanged) {
-        _sizeChanged = sizeChanged;
+    public void reset() {
+        events.reset();
+    }
+    
+    public Iterator getFlagUpdates() throws MailboxManagerException {
+        List results = new ArrayList();
+        for (final Iterator it = events.flagUpdateUids(); it.hasNext();) {
+            Long uid = (Long) it.next();
+            GeneralMessageSet messageSet = 
GeneralMessageSetImpl.oneUid(uid.longValue());
+            final MessageResult[] messages = mailbox.getMessages(messageSet, 
MessageResult.FLAGS | MessageResult.MSN);
+            results.addAll(Arrays.asList(messages));
+        }
+        return results.iterator();
     }
     
-
     public void close() throws MailboxManagerException  {
+        mailbox.removeListener(events);
         mailbox.close();
         mailbox=null;
     }
 
-    public void expunged(MessageResult mr) {
-    }
-
-    public void added(MessageResult mr) {
-       _sizeChanged = true;
-    }
-
-    public void flagsUpdated(MessageResult mr,MailboxListener silentListener) {
-    }
-
     public ImapMailboxSession getMailbox() {
         return mailbox;
     }
 
-    public void mailboxRenamed(String origName, String newName) {
-        // TODO Implementation
+    public void setSilent(boolean silent) {
+        events.setSilentFlagChanges(silent);
     }
-
 }

Modified: 
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/FetchCommand.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/FetchCommand.java?rev=596413&r1=596412&r2=596413&view=diff
==============================================================================
--- 
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/FetchCommand.java
 (original)
+++ 
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/FetchCommand.java
 Mon Nov 19 11:56:53 2007
@@ -114,7 +114,7 @@
             if (fetch.isSetSeen()
                     && !result.getFlags().contains(Flags.Flag.SEEN)) {
                 mailbox.setFlags(new Flags(Flags.Flag.SEEN), true, false,
-                        GeneralMessageSetImpl.oneUid(result.getUid()), null);
+                        GeneralMessageSetImpl.oneUid(result.getUid()));
                 result.getFlags().add(Flags.Flag.SEEN);
                 ensureFlagsResponse = true;
             }

Modified: 
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/StoreCommand.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/StoreCommand.java?rev=596413&r1=596412&r2=596413&view=diff
==============================================================================
--- 
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/StoreCommand.java
 (original)
+++ 
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/StoreCommand.java
 Mon Nov 19 11:56:53 2007
@@ -25,9 +25,9 @@
 import org.apache.james.imapserver.ImapResponse;
 import org.apache.james.imapserver.ImapSession;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.SelectedMailboxSession;
 import org.apache.james.imapserver.store.MailboxException;
 import org.apache.james.mailboxmanager.GeneralMessageSet;
-import org.apache.james.mailboxmanager.MailboxListener;
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
 import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession;
@@ -64,41 +64,46 @@
         Flags flags = parser.flagList( request );
         parser.endLine( request );
 
-        ImapMailboxSession mailbox = session.getSelected().getMailbox();
-        MailboxListener silentListener = null;
-
-        final boolean replace;
-        final boolean value;
-        if (directive.getSign() < 0) {
-            value=false;
-            replace=false;
-        }
-        else if (directive.getSign() > 0) {
-            value=true;
-            replace=false;
-        }
-        else {
-            replace=true;
-            value=true;
-        }
+        final SelectedMailboxSession selected = session.getSelected();
         try {
             if (directive.isSilent()) {
-                silentListener = session.getSelected().getMailbox();
+                selected.setSilent(true);
             }
-            for (int i = 0; i < idSet.length; i++) {
-                final GeneralMessageSet messageSet = GeneralMessageSetImpl
-                        .range(idSet[i].getLowVal(), idSet[i].getHighVal(),
-                                useUids);
+            ImapMailboxSession mailbox = selected.getMailbox();
 
-                mailbox.setFlags(flags, value, replace, messageSet,
-                        silentListener);
+            final boolean replace;
+            final boolean value;
+            if (directive.getSign() < 0) {
+                value=false;
+                replace=false;
             }
-        } catch (MailboxManagerException e) {
-            throw new MailboxException(e);
+            else if (directive.getSign() > 0) {
+                value=true;
+                replace=false;
+            }
+            else {
+                replace=true;
+                value=true;
+            }
+            try {
+                for (int i = 0; i < idSet.length; i++) {
+                    final GeneralMessageSet messageSet = GeneralMessageSetImpl
+                    .range(idSet[i].getLowVal(), idSet[i].getHighVal(),
+                            useUids);
+
+                    mailbox.setFlags(flags, value, replace, messageSet);
+                }
+            } catch (MailboxManagerException e) {
+                throw new MailboxException(e);
+            }
+
+        } finally {
+            selected.setSilent(false);
         }
         boolean omitExpunged = (!useUids);
         session.unsolicitedResponses( response, omitExpunged , useUids);
         response.commandComplete( this );
+        
     }
 
 

Modified: 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/AbstractSessionTest.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/AbstractSessionTest.java?rev=596413&r1=596412&r2=596413&view=diff
==============================================================================
--- 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/AbstractSessionTest.java
 (original)
+++ 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/imapserver/handler/session/AbstractSessionTest.java
 Mon Nov 19 11:56:53 2007
@@ -188,7 +188,7 @@
     
     public void deleteAll(String folder) throws MailboxManagerException {
         ImapMailboxSession mailbox=getImapMailboxSession(folder);
-        mailbox.setFlags(new 
Flags(Flag.DELETED),true,false,GeneralMessageSetImpl.all(),null);
+        mailbox.setFlags(new 
Flags(Flag.DELETED),true,false,GeneralMessageSetImpl.all());
         mailbox.expunge(GeneralMessageSetImpl.all(),MessageResult.NOTHING);
         mailbox.close();
     }
@@ -238,12 +238,12 @@
         Set responseSet=new HashSet(rec);
         responseSet.removeAll(requiredResponseSet);
         requiredResponseSet.removeAll(new HashSet(rec));
-        if (responseSet.size()>0) {
-            System.out.println("Not awaitet responses: "+responseSet);
-        }
-        if (requiredResponseSet.size()>0) {
-            System.out.println("Missed responses: "+requiredResponseSet);
-        }
+//        if (responseSet.size()>0) {
+//            System.out.println("Not awaitet responses: "+responseSet);
+//        }
+//        if (requiredResponseSet.size()>0) {
+//            System.out.println("Missed responses: "+requiredResponseSet);
+//        }
         assertEquals("Missed responses: 
"+requiredResponseSet,0,requiredResponseSet.size());
         assertEquals("Not awaitet responses: 
"+responseSet,0,responseSet.size());
         assertEquals("Status respons differs",counter+" 
"+command.getExpectedStatusResponse(),statusResponse);
@@ -274,7 +274,7 @@
     
     public void setFlags(String mailboxName,long fromUid,long toUid,Flags 
flags, boolean value, boolean replace) throws MailboxManagerException {
         ImapMailboxSession mailbox=getImapMailboxSession(mailboxName);
-        mailbox.setFlags(flags, value, replace, 
GeneralMessageSetImpl.uidRange(fromUid, toUid), null);
+        mailbox.setFlags(flags, value, replace, 
GeneralMessageSetImpl.uidRange(fromUid, toUid));
         mailbox.close();
     }
     private ImapMailboxSession getImapMailboxSession(String mailboxName) 
throws MailboxManagerException {

Modified: 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/AbstractImapMailboxSelfTestCase.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/AbstractImapMailboxSelfTestCase.java?rev=596413&r1=596412&r2=596413&view=diff
==============================================================================
--- 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/AbstractImapMailboxSelfTestCase.java
 (original)
+++ 
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/AbstractImapMailboxSelfTestCase.java
 Mon Nov 19 11:56:53 2007
@@ -47,7 +47,7 @@
         mailboxManager.createMailbox(INBOX);
         mailbox=mailboxManager.getImapMailboxSession(INBOX);
         collector=new MailboxListenerCollector();
-        mailbox.addListener(collector, 0);
+        mailbox.addListener(collector);
         assertNotNull(mailbox);
     }
     
@@ -74,7 +74,7 @@
         assertNotNull(mr);
         assertEquals(6, mr.getUid());
         assertEquals(6, mr.getMsn());
-        mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, 
GeneralMessageSetImpl.uidRange(1,3), null);
+        mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, 
GeneralMessageSetImpl.uidRange(1,3));
         mailbox.expunge(GeneralMessageSetImpl.all(), 0);
         mailbox.getExpungedEvents(true);
         mr=mailbox.getFirstUnseen(MessageResult.UID | MessageResult.MSN);
@@ -89,7 +89,7 @@
             assertEquals(i+1, mr.getUid());
             assertEquals(i+1, mr.getMsn());
         }
-        mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, 
GeneralMessageSetImpl.uidRange(2, 4), null);
+        mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, 
GeneralMessageSetImpl.uidRange(2, 4));
         final MessageResult[] 
expungeResult1=mailbox.expunge(GeneralMessageSetImpl.all(), MessageResult.UID | 
MessageResult.MSN);
         checkMessageResults(new long[] {2,3,4},new int[] 
{2,3,4},expungeResult1);
         
@@ -115,8 +115,8 @@
         final MessageResult[] getResult3 = 
mailbox.getMessages(GeneralMessageSetImpl.all(), MessageResult.UID | 
MessageResult.MSN);
         checkMessageResults(new long[] {1,5,6,7,8,9,10},new int[] 
{1,2,3,4,5,6,7},getResult3);
         
-        mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, 
GeneralMessageSetImpl.msnRange(2,4), null);
-        mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, 
GeneralMessageSetImpl.oneMsn(6), null);
+        mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, 
GeneralMessageSetImpl.msnRange(2,4));
+        mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, 
GeneralMessageSetImpl.oneMsn(6));
         
         final MessageResult[] 
expungeResult2=mailbox.expunge(GeneralMessageSetImpl.all(), MessageResult.UID | 
MessageResult.MSN);
         checkMessageResults(new long[] {5,6,7,9},new int[] 
{2,3,4,6},expungeResult2);

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=596413&r1=596412&r2=596413&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
 Mon Nov 19 11:56:53 2007
@@ -55,32 +55,66 @@
         results=new MessageResultImpl[1];
         
         results[0]=new MessageResultImpl(1000l);
-        tracker.found(new UidRange(1000,1000),results, null);
+        tracker.found(new UidRange(1000,1000),results);
         assertCollectorSizes(0,0,0);
         
         results[0]=new MessageResultImpl(1001l);
-        tracker.found(new UidRange(1001,1001),results, null);
+        tracker.found(new UidRange(1001,1001),results);
         assertCollectorSizes(1,0,0);
         assertEquals(1001,((MessageResult) 
collector.getAddedList(true).get(0)).getUid());
         assertCollectorSizes(0,0,0);
         
         results[0]=new MessageResultImpl(1001l,new Flags(Flags.Flag.FLAGGED));
-        tracker.found(new UidRange(1001,1001),results, null);
+        tracker.found(new UidRange(1001,1001),results);
         assertCollectorSizes(0,0,1);
         result=(MessageResult) collector.getFlaggedList(true).get(0);
         assertEquals(1001,result.getUid());
         assertEquals(new Flags(Flags.Flag.FLAGGED),result.getFlags());
         
         // nothing changed
-        tracker.found(new UidRange(1001,1001),results,null);
+        tracker.found(new UidRange(1001,1001),results);
         assertCollectorSizes(0,0,0);
         
         // 1000 got expunged
-        tracker.found(new UidRange(1000,1001),results,null);
+        tracker.found(new UidRange(1000,1001),results);
         assertCollectorSizes(0,1,0);
         assertEquals(1000,((MessageResult) 
collector.getExpungedList(true).get(0)).getUid());
         
         
     }
 
+    public void testShouldNotIssueFlagsUpdateEventWhenFlagsNotIncluded() {
+        MessageResultImpl[] results = new MessageResultImpl[1];
+        
+        MessageResult result;
+        results[0]=new MessageResultImpl(1000l,new Flags(Flags.Flag.FLAGGED));
+        tracker.found(new UidRange(1000,1000),results);
+        assertCollectorSizes(0,0,0);
+        
+        results[0]=new MessageResultImpl(1000l);
+        tracker.found(new UidRange(1000,1000),results);
+        assertCollectorSizes(0,0,0);
+
+        results[0]=new MessageResultImpl(1000l,new Flags(Flags.Flag.FLAGGED));
+        tracker.found(new UidRange(1000,1000),results);
+
+        results[0]=new MessageResultImpl(1000l,new Flags(Flags.Flag.SEEN));
+        tracker.found(new UidRange(1000,1000),results);
+        assertCollectorSizes(0,0,1);
+        result=(MessageResult) collector.getFlaggedList(true).get(0);
+        assertEquals(1000,result.getUid());
+        assertEquals(new Flags(Flags.Flag.SEEN),result.getFlags());
+        
+        results[0]=new MessageResultImpl(1000l);
+        tracker.found(new UidRange(1000,1000),results);
+        assertCollectorSizes(0,0,0);
+        
+        results[0]=new MessageResultImpl(1000l,new Flags(Flags.Flag.DRAFT));
+        tracker.found(new UidRange(1000,1000),results);
+        assertCollectorSizes(0,0,1);
+        result=(MessageResult) collector.getFlaggedList(true).get(0);
+        assertEquals(1000,result.getUid());
+        assertEquals(new Flags(Flags.Flag.DRAFT),result.getFlags());
+        
+    }
 }

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=596413&r1=596412&r2=596413&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
 Mon Nov 19 11:56:53 2007
@@ -29,6 +29,7 @@
 import org.apache.james.mailboxmanager.TestUtil;
 import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
 import org.apache.james.mailboxmanager.impl.MailboxListenerCollector;
+import org.apache.james.mailboxmanager.mailbox.ImapMailbox;
 import org.apache.james.mailboxmanager.torque.om.MailboxRow;
 import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
 import org.apache.james.mailboxmanager.torque.om.MessageRow;
@@ -49,9 +50,9 @@
         MailboxRow mr = new MailboxRow("#users.tuser.INBOX", 100);
         mr.save();
         mr=MailboxRowPeer.retrieveByName("#users.tuser.INBOX");
-        TorqueMailbox torqueMailbox = new TorqueMailbox(mr, new 
UidChangeTracker(null,"#users.tuser.INBOX",100),
-                new WriterPreferenceReadWriteLock(),null);
-        torqueMailbox.addListener(new MailboxListenerCollector(), 
MessageResult.NOTHING);
+        ImapMailbox torqueMailbox = new TorqueMailbox(mr, new 
UidChangeTracker(null,"#users.tuser.INBOX",100),
+                new WriterPreferenceReadWriteLock(),null, 1);
+        torqueMailbox.addListener(new MailboxListenerCollector());
         assertEquals(0,torqueMailbox.getMessageCount());
         
         long time = System.currentTimeMillis();
@@ -85,7 +86,7 @@
         
         Flags f=new Flags();
         f.add(Flags.Flag.DELETED);
-        torqueMailbox.setFlags(f,true,false, GeneralMessageSetImpl.oneUid(1l), 
null);
+        torqueMailbox.setFlags(f,true,false, GeneralMessageSetImpl.oneUid(1l));
         MessageResult[] 
messageResults=torqueMailbox.expunge(GeneralMessageSetImpl.all(),MessageResult.UID);
         assertEquals(1,messageResults.length);
         assertEquals(1l,messageResults[0].getUid());

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=596413&r1=596412&r2=596413&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 11:56:53 2007
@@ -20,6 +20,7 @@
 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;
@@ -27,9 +28,7 @@
 import org.jmock.Mock;
 import org.jmock.MockObjectTestCase;
 import org.jmock.core.Constraint;
-import org.jmock.core.constraint.IsEqual;
 import org.jmock.core.constraint.IsInstanceOf;
-import org.jmock.core.constraint.IsSame;
 
 public class SessionMailboxWrapperTest extends MockObjectTestCase {
 
@@ -38,16 +37,16 @@
         SessionMailboxWrapper sessionMailboxWrapper = new 
SessionMailboxWrapper();
         
         Mock generalMailboxMock = mock(GeneralMailbox.class);
-        Constraint[] listenerArgs={new 
IsSame(sessionMailboxWrapper.getListenerObject()),new IsEqual(new 
Integer(MessageResult.UID))};
 
-        
generalMailboxMock.expects(once()).method("addListener").with(listenerArgs);
+        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(listenerArgs[0]).after("getMessages");
+        
generalMailboxMock.expects(once()).method("removeListener").with(same(listenerObject)).after("getMessages");
         
         sessionMailboxWrapper.setMailbox((GeneralMailbox) generalMailboxMock
                 .proxy());

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=596413&r1=596412&r2=596413&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
 Mon Nov 19 11:56:53 2007
@@ -84,14 +84,22 @@
     
     private final ReadWriteLock lock;
     
-    TorqueMailbox(final MailboxRow mailboxRow, final UidChangeTracker tracker, 
final ReadWriteLock lock, final Log log) {
+    private final long sessionId;
+    
+    TorqueMailbox(final MailboxRow mailboxRow, final UidChangeTracker tracker, 
final ReadWriteLock lock, 
+            final Log log, final long sessionId) {
         setLog(log);
+        this.sessionId = sessionId;
         this.mailboxRow = mailboxRow;
         this.tracker = tracker;
         this.lock = lock;
         tracker.addMailboxListener(getEventDispatcher());
         getUidToKeyConverter().setUidValidity(mailboxRow.getUidValidity());
     }
+    
+    public long getSessionId() {
+        return sessionId;
+    }
 
     public int getMessageResultTypes() {
         return MessageResult.FLAGS + MessageResult.INTERNAL_DATE
@@ -201,7 +209,7 @@
                         MessageResult messageResult = 
fillMessageResult(messageRow,
                                 result | MessageResult.UID);
                         checkForScanGap(uid);
-                        getUidChangeTracker().found(messageResult, null);
+                        getUidChangeTracker().found(messageResult);
                         return messageResult;
                     } catch (Exception e) {
                         throw new MailboxManagerException(e);
@@ -227,7 +235,7 @@
                 Criteria criteria=criteriaForMessageSet(set);
                 List messageRows=mailboxRow.getMessageRows(criteria);
                 MessageResult[] messageResults=fillMessageResult(messageRows, 
MessageResult.UID);
-                getUidChangeTracker().found(uidRangeForMessageSet(set), 
messageResults, null);
+                getUidChangeTracker().found(uidRangeForMessageSet(set), 
messageResults);
             }
         }
         
@@ -297,7 +305,7 @@
         MessageResult[] messageResults = fillMessageResult(l, result
                 | MessageResult.UID | MessageResult.FLAGS);
         checkForScanGap(range.getFromUid());
-        getUidChangeTracker().found(range, messageResults, null);
+        getUidChangeTracker().found(range, messageResults);
         return messageResults;
     }
 
@@ -571,7 +579,7 @@
                         MessageResult 
messageResult=fillMessageResult((MessageRow) messageRows.get(0), result | 
MessageResult.UID);
                         if (messageResult!=null) {
                             checkForScanGap(messageResult.getUid());
-                            getUidChangeTracker().found(messageResult,null);
+                            getUidChangeTracker().found(messageResult);
                         }
 
                         return messageResult;
@@ -660,12 +668,12 @@
     }
 
     public void setFlags(Flags flags, boolean value, boolean replace,
-            GeneralMessageSet set, MailboxListener silentListener)
+            GeneralMessageSet set)
             throws MailboxManagerException {
         try {
             lock.writeLock().acquire();
             try {
-                doSetFlags(flags, value, replace, set, silentListener);
+                doSetFlags(flags, value, replace, set);
             } finally {
                 lock.writeLock().release();
             }
@@ -675,7 +683,7 @@
         }
     }
 
-    private void doSetFlags(Flags flags, boolean value, boolean replace, 
GeneralMessageSet set, MailboxListener silentListener) throws 
MailboxManagerException {
+    private void doSetFlags(Flags flags, boolean value, boolean replace, 
GeneralMessageSet set) throws MailboxManagerException {
         checkAccess();
         set=toUidSet(set);  
         if (!set.isValid() || set.getType()==GeneralMessageSet.TYPE_NOTHING) {
@@ -689,7 +697,7 @@
                     MessageResult.UID | MessageResult.FLAGS);
             UidRange uidRange=uidRangeForMessageSet(set);
             checkForScanGap(uidRange.getFromUid());
-            getUidChangeTracker().found(uidRange, beforeResults, null);
+            getUidChangeTracker().found(uidRange, beforeResults);
             for (Iterator iter = messageRows.iterator(); iter.hasNext();) {
                 final MessageRow messageRow = (MessageRow) iter.next();
                 final MessageFlags messageFlags = messageRow.getMessageFlags();
@@ -710,13 +718,14 @@
             }
             final MessageResult[] afterResults = fillMessageResult(messageRows,
                     MessageResult.UID | MessageResult.FLAGS);
-            tracker.found(uidRange, afterResults, silentListener);
+            tracker.flagsUpdated(afterResults, sessionId);
+            tracker.found(uidRange, afterResults);
         } catch (Exception e) {
             throw new MailboxManagerException(e);
         }
     }
 
-    public void addListener(MailboxListener listener, int result) throws 
MailboxManagerException {
+    public void addListener(MailboxListener listener) throws 
MailboxManagerException {
         getEventDispatcher().addMailboxListener(listener);
         checkAccess();
     }
@@ -940,7 +949,7 @@
             lock.writeLock().acquire();
             try {
                 final Flags flags = new Flags(Flags.Flag.DELETED);
-                doSetFlags(flags, true, false, set, null);
+                doSetFlags(flags, true, false, set);
                 doExpunge(set, MessageResult.NOTHING);
             } finally {
                 lock.writeLock().release();

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=596413&r1=596412&r2=596413&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
 Mon Nov 19 11:56:53 2007
@@ -34,6 +34,7 @@
 import org.apache.james.mailboxmanager.impl.ListResultImpl;
 import org.apache.james.mailboxmanager.mailbox.GeneralMailbox;
 import org.apache.james.mailboxmanager.mailbox.GeneralMailboxSession;
+import org.apache.james.mailboxmanager.mailbox.ImapMailbox;
 import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession;
 import org.apache.james.mailboxmanager.mailbox.MailboxSession;
 import org.apache.james.mailboxmanager.manager.MailboxManager;
@@ -115,9 +116,10 @@
                         getMailboxCache().add(mailboxName, tracker);
                     }
                     getLog().info("created ImapMailboxSession "+mailboxName);
-                    final TorqueMailbox torqueMailbox = new TorqueMailbox(
-                                                mailboxRow, tracker, lock, 
getLog());
-                    final ImapMailboxSessionWrapper wrapper = new 
ImapMailboxSessionWrapper(torqueMailbox);
+                    final ImapMailbox torqueMailbox = new TorqueMailbox(
+                                                mailboxRow, tracker, lock, 
getLog(), random.nextLong());
+                    final ImapMailboxSessionWrapper wrapper 
+                        = new ImapMailboxSessionWrapper(torqueMailbox);
                     return wrapper;
                 } else {
                     getLog().info("Mailbox '" + mailboxName + "' not found.");



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

Reply via email to