Author: rdonkin
Date: Wed Nov 21 01:20:26 2007
New Revision: 597001

URL: http://svn.apache.org/viewvc?rev=597001&view=rev
Log:
Switch Dispatcher and tracker away from MessageResults.

Modified:
    
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/MailboxEventDispatcher.java
    
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/MessageFlags.java
    
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidChangeTracker.java
    
james/server/trunk/core-library/src/test/java/org/apache/james/mailboxmanager/impl/MailboxEventDispatcherFlagsTest.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/impl/MailboxEventDispatcher.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/MailboxEventDispatcher.java?rev=597001&r1=597000&r2=597001&view=diff
==============================================================================
--- 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/MailboxEventDispatcher.java
 (original)
+++ 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/MailboxEventDispatcher.java
 Wed Nov 21 01:20:26 2007
@@ -27,8 +27,6 @@
 import javax.mail.Flags.Flag;
 
 import org.apache.james.mailboxmanager.MailboxListener;
-import org.apache.james.mailboxmanager.MessageResult;
-import org.apache.james.mailboxmanager.MessageResultUtils;
 
 import EDU.oswego.cs.dl.util.concurrent.CopyOnWriteArraySet;
 
@@ -44,37 +42,29 @@
         listeners.remove(mailboxListener);
     }
 
-    public void added(MessageResult result, long sessionId) {
-        if (MessageResultUtils.isUidIncluded(result)) {
-            final AddedImpl added = new AddedImpl(sessionId, result.getUid());
-            for (Iterator iter = listeners.iterator(); iter.hasNext();) {
-                MailboxListener mailboxListener = (MailboxListener) 
iter.next();
-                mailboxListener.event(added);
-            }
+    public void added(long uid, long sessionId) {
+        final AddedImpl added = new AddedImpl(sessionId, uid);
+        for (Iterator iter = listeners.iterator(); iter.hasNext();) {
+            MailboxListener mailboxListener = (MailboxListener) iter.next();
+            mailboxListener.event(added);
         }
     }
 
-    public void expunged(final MessageResult result, long sessionId) {
-        if (MessageResultUtils.isUidIncluded(result)) {
-            final long uid = result.getUid();
-            final ExpungedImpl expunged = new ExpungedImpl(sessionId, uid);
-            for (Iterator iter = listeners.iterator(); iter.hasNext();) {
-                MailboxListener mailboxListener = (MailboxListener) 
iter.next();
-                mailboxListener.event(expunged);
-            }
+    public void expunged(final long uid, long sessionId) {
+        final ExpungedImpl expunged = new ExpungedImpl(sessionId, uid);
+        for (Iterator iter = listeners.iterator(); iter.hasNext();) {
+            MailboxListener mailboxListener = (MailboxListener) iter.next();
+            mailboxListener.event(expunged);
         }
     }
 
-    public void flagsUpdated(final MessageResult result, long sessionId, final 
Flags original,
+    public void flagsUpdated(final long uid, long sessionId, final Flags 
original,
             final Flags updated) {
-        if (MessageResultUtils.isUidIncluded(result)) {
-            final long uid = result.getUid();
-            final FlagsUpdatedImpl flags = new FlagsUpdatedImpl(sessionId, 
uid, 
-                    original, updated);
-            for (Iterator iter = listeners.iterator(); iter.hasNext();) {
-                MailboxListener mailboxListener = (MailboxListener) 
iter.next();
-                mailboxListener.event(flags);
-            }
+        final FlagsUpdatedImpl flags = new FlagsUpdatedImpl(sessionId, uid, 
+                original, updated);
+        for (Iterator iter = listeners.iterator(); iter.hasNext();) {
+            MailboxListener mailboxListener = (MailboxListener) iter.next();
+            mailboxListener.event(flags);
         }
     }
 

Modified: 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/MessageFlags.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/MessageFlags.java?rev=597001&r1=597000&r2=597001&view=diff
==============================================================================
--- 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/MessageFlags.java
 (original)
+++ 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/MessageFlags.java
 Wed Nov 21 01:20:26 2007
@@ -19,14 +19,41 @@
 
 package org.apache.james.mailboxmanager.impl;
 
+import java.util.Collection;
+import java.util.Iterator;
+
 import javax.mail.Flags;
 
+import org.apache.james.mailboxmanager.MessageResult;
+
 /**
  * Represents the flags for a message.
  */
 public class MessageFlags {
+    
+    
+    /**
+     * Converts given message results into [EMAIL PROTECTED] MessageFlags}.
+     * @param messageResults <code>Collection</code> of [EMAIL PROTECTED] 
MessageResult}, not null
+     * @return <code>MessageFlags</code> array, not null
+     */
+    public static final MessageFlags[] toMessageFlags(Collection 
messageResults) {
+        final int size = messageResults.size();
+        final MessageFlags[] results = new MessageFlags[size];
+        int i=0;
+        for (final Iterator it=messageResults.iterator();it.hasNext();) {
+            final MessageResult result = (MessageResult) it.next();
+            results[i++] = new MessageFlags(result);
+        }
+        return results;
+    }
+    
     private final long uid;
     private Flags flags;
+    
+    public MessageFlags(final MessageResult result) {
+        this(result.getUid(),result.getFlags());
+    }
     
     public MessageFlags(final long uid, Flags flags) {
         this.uid = uid;

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=597001&r1=597000&r2=597001&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
 Wed Nov 21 01:20:26 2007
@@ -22,7 +22,6 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeMap;
@@ -33,11 +32,13 @@
 import org.apache.james.mailboxmanager.Constants;
 import org.apache.james.mailboxmanager.MessageResult;
 import org.apache.james.mailboxmanager.MessageResultUtils;
-import org.apache.james.mailboxmanager.impl.MessageResultImpl;
+import org.apache.james.mailboxmanager.impl.MessageFlags;
 import org.apache.james.mailboxmanager.mailbox.GeneralMailbox;
 
 public class UidChangeTracker extends MailboxTracker implements Constants {
+    
 
+    
     private TreeMap cache = new TreeMap();
 
     private long lastUidAtStart;
@@ -53,13 +54,12 @@
         this.lastUid = lastUid;
     }
 
-    public synchronized void expunged(final List expunged) {
-        for (Iterator it = expunged.iterator();it.hasNext();) {
-            final MessageResult result = (MessageResult) it.next();
-            if (result != null) {
-                cache.remove(new Long(result.getUid()));
-                eventDispatcher.expunged(result, 0);
-            }
+    public synchronized void expunged(final long[] uidsExpunged) {
+        final int length = uidsExpunged.length;
+        for (int i=0;i< length;i++) {
+            final long uid = uidsExpunged[i];
+            cache.remove(new Long(uid));
+            eventDispatcher.expunged(uid, 0);
         }
     }
     
@@ -88,29 +88,34 @@
             final Flags flags = messageResult.getFlags();
             final long uid = messageResult.getUid();
             final Long uidLong = new Long(uid);
-            updatedFlags(messageResult, flags, uidLong, sessionId);
+            updatedFlags(uid, flags, uidLong, sessionId);
         }
     }
     
     public synchronized void found(UidRange range, final Collection 
messageResults) {
+        found(range, MessageFlags.toMessageFlags(messageResults));
+    }
+    
+    public synchronized void found(UidRange range, final MessageFlags[] 
messageFlags) {
         Set expectedSet = getSubSet(range);
-        for (final Iterator it=messageResults.iterator();it.hasNext();) {
-            final MessageResult messageResult = (MessageResult) it.next();
-            if (messageResult != null) {
-                long uid = messageResult.getUid();
+        final int length = messageFlags.length;
+        for (int i=0;i<length;i++) {
+            final MessageFlags message = messageFlags[i];
+            if (message != null) {
+                long uid = message.getUid();
                 if (uid>lastScannedUid) {
                     lastScannedUid=uid;
                 }
-                final Flags flags = messageResult.getFlags();
+                final Flags flags = message.getFlags();
                 final Long uidLong = new Long(uid);
                 if (expectedSet.contains(uidLong)) {
                     expectedSet.remove(uidLong);
-                    updatedFlags(messageResult, flags, uidLong, 
+                    updatedFlags(uid, flags, uidLong, 
                             GeneralMailbox.ANONYMOUS_SESSION);
                 } else {
                     cache.put(uidLong, flags);
                     if (uid > lastUidAtStart) {
-                        eventDispatcher.added(messageResult, 0);
+                        eventDispatcher.added(uid, 0);
                     }
                 }
             }
@@ -126,25 +131,20 @@
             lastScannedUid=range.getToUid();
         }
         
-
-        
         for (Iterator iter = expectedSet.iterator(); iter.hasNext();) {
             long uid = ((Long) iter.next()).longValue();
-
-            MessageResultImpl mr = new MessageResultImpl();
-            mr.setUid(uid);
-            eventDispatcher.expunged(mr, 0);
+            eventDispatcher.expunged(uid, 0);
         }
     }
 
-    private void updatedFlags(final MessageResult messageResult, final Flags 
flags, 
+    private void updatedFlags(final long uid, final Flags flags, 
             final Long uidLong, final long sessionId) {
         if (flags != null) {
             Flags cachedFlags = (Flags) cache.get(uidLong);
             if (cachedFlags == null
                     || !flags.equals(cachedFlags)) {
                 if (cachedFlags != null) {
-                    eventDispatcher.flagsUpdated(messageResult, sessionId,
+                    eventDispatcher.flagsUpdated(uid, sessionId,
                              cachedFlags, flags);
                 }
                 cache.put(uidLong, flags);

Modified: 
james/server/trunk/core-library/src/test/java/org/apache/james/mailboxmanager/impl/MailboxEventDispatcherFlagsTest.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/test/java/org/apache/james/mailboxmanager/impl/MailboxEventDispatcherFlagsTest.java?rev=597001&r1=597000&r2=597001&view=diff
==============================================================================
--- 
james/server/trunk/core-library/src/test/java/org/apache/james/mailboxmanager/impl/MailboxEventDispatcherFlagsTest.java
 (original)
+++ 
james/server/trunk/core-library/src/test/java/org/apache/james/mailboxmanager/impl/MailboxEventDispatcherFlagsTest.java
 Wed Nov 21 01:20:26 2007
@@ -42,7 +42,6 @@
         collector = new EventCollector();
         dispatcher.addMailboxListener(collector);
         mockMessageResult = mock(MessageResult.class);
-        
mockMessageResult.expects(once()).method("getIncludedResults").will(returnValue(MessageResult.FLAGS
 | MessageResult.UID));
         
mockMessageResult.expects(once()).method("getUid").will(returnValue(23L));
         result = (MessageResult) mockMessageResult.proxy();
     }
@@ -52,7 +51,7 @@
     }
 
     public void testShouldReturnNoChangesWhenOriginalNull() throws Exception {
-        dispatcher.flagsUpdated(result, sessionId, null, new 
Flags(Flags.Flag.DELETED));
+        dispatcher.flagsUpdated(result.getUid(), sessionId, null, new 
Flags(Flags.Flag.DELETED));
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);
@@ -62,7 +61,7 @@
     }
     
     public void testShouldReturnNoChangesWhenSystemFlagsUnchanged() {
-        dispatcher.flagsUpdated(result, sessionId, new 
Flags(Flags.Flag.DELETED), new Flags(Flags.Flag.DELETED));
+        dispatcher.flagsUpdated(result.getUid(), sessionId, new 
Flags(Flags.Flag.DELETED), new Flags(Flags.Flag.DELETED));
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);
@@ -72,7 +71,7 @@
     }
     
     public void testShouldShowAnsweredAdded() {
-        dispatcher.flagsUpdated(result, sessionId, new Flags(), new 
Flags(Flags.Flag.ANSWERED));
+        dispatcher.flagsUpdated(result.getUid(), sessionId, new Flags(), new 
Flags(Flags.Flag.ANSWERED));
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);
@@ -84,7 +83,7 @@
     }
     
     public void testShouldShowAnsweredRemoved() {
-        dispatcher.flagsUpdated(result, sessionId, new 
Flags(Flags.Flag.ANSWERED), new Flags());
+        dispatcher.flagsUpdated(result.getUid(), sessionId, new 
Flags(Flags.Flag.ANSWERED), new Flags());
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);
@@ -96,7 +95,7 @@
     }
     
     public void testShouldShowDeletedAdded() {
-        dispatcher.flagsUpdated(result, sessionId, new Flags(), new 
Flags(Flags.Flag.DELETED));
+        dispatcher.flagsUpdated(result.getUid(), sessionId, new Flags(), new 
Flags(Flags.Flag.DELETED));
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);
@@ -108,7 +107,7 @@
     }
     
     public void testShouldShowDeletedRemoved() {
-        dispatcher.flagsUpdated(result, sessionId, new 
Flags(Flags.Flag.DELETED), new Flags());
+        dispatcher.flagsUpdated(result.getUid(), sessionId, new 
Flags(Flags.Flag.DELETED), new Flags());
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);
@@ -120,7 +119,7 @@
     }
     
     public void testShouldShowDraftAdded() {
-        dispatcher.flagsUpdated(result, sessionId, new Flags(), new 
Flags(Flags.Flag.DRAFT));
+        dispatcher.flagsUpdated(result.getUid(), sessionId, new Flags(), new 
Flags(Flags.Flag.DRAFT));
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);
@@ -132,7 +131,7 @@
     }
     
     public void testShouldShowDraftRemoved() {
-        dispatcher.flagsUpdated(result, sessionId, new 
Flags(Flags.Flag.DRAFT), new Flags());
+        dispatcher.flagsUpdated(result.getUid(), sessionId, new 
Flags(Flags.Flag.DRAFT), new Flags());
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);
@@ -144,7 +143,7 @@
     }
     
     public void testShouldShowFlaggedAdded() {
-        dispatcher.flagsUpdated(result, sessionId, new Flags(), new 
Flags(Flags.Flag.FLAGGED));
+        dispatcher.flagsUpdated(result.getUid(), sessionId, new Flags(), new 
Flags(Flags.Flag.FLAGGED));
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);
@@ -156,7 +155,7 @@
     }
     
     public void testShouldShowFlaggedRemoved() {
-        dispatcher.flagsUpdated(result, sessionId, new 
Flags(Flags.Flag.FLAGGED), new Flags());
+        dispatcher.flagsUpdated(result.getUid(), sessionId, new 
Flags(Flags.Flag.FLAGGED), new Flags());
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);
@@ -169,7 +168,7 @@
     
     
     public void testShouldShowRecentAdded() {
-        dispatcher.flagsUpdated(result, sessionId, new Flags(), new 
Flags(Flags.Flag.RECENT));
+        dispatcher.flagsUpdated(result.getUid(), sessionId, new Flags(), new 
Flags(Flags.Flag.RECENT));
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);
@@ -181,7 +180,7 @@
     }
     
     public void testShouldShowRecentRemoved() {
-        dispatcher.flagsUpdated(result, sessionId, new 
Flags(Flags.Flag.RECENT), new Flags());
+        dispatcher.flagsUpdated(result.getUid(), sessionId, new 
Flags(Flags.Flag.RECENT), new Flags());
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);
@@ -194,7 +193,7 @@
     
     
     public void testShouldShowSeenAdded() {
-        dispatcher.flagsUpdated(result, sessionId, new Flags(), new 
Flags(Flags.Flag.SEEN));
+        dispatcher.flagsUpdated(result.getUid(), sessionId, new Flags(), new 
Flags(Flags.Flag.SEEN));
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);
@@ -206,7 +205,7 @@
     }
     
     public void testShouldShowSeenRemoved() {
-        dispatcher.flagsUpdated(result, sessionId, new Flags(Flags.Flag.SEEN), 
new Flags());
+        dispatcher.flagsUpdated(result.getUid(), sessionId, new 
Flags(Flags.Flag.SEEN), new Flags());
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);
@@ -226,7 +225,7 @@
         updated.add(Flags.Flag.DRAFT);
         updated.add(Flags.Flag.SEEN);
         
-        dispatcher.flagsUpdated(result, sessionId, originals, updated);
+        dispatcher.flagsUpdated(result.getUid(), sessionId, originals, 
updated);
         assertEquals(1, collector.events.size());
         assertTrue(collector.events.get(0) instanceof 
MailboxListener.FlagsUpdated);
         MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) 
collector.events.get(0);

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=597001&r1=597000&r2=597001&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
 Wed Nov 21 01:20:26 2007
@@ -23,7 +23,6 @@
 import java.io.InputStream;
 import java.sql.SQLException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
@@ -657,6 +656,7 @@
             c.add(MessageFlagsPeer.DELETED, true);
 
             final List messageRows = getMailboxRow().getMessageRows(c);
+            final long[] uids = uids(messageRows);
             final List messageResults = fillMessageResult(messageRows, result
                     | MessageResult.UID | MessageResult.FLAGS);
 
@@ -667,11 +667,21 @@
                 todelc.add(MessageRowPeer.UID,messageRow.getUid());
                 MessageRowPeer.doDelete(todelc);
             }
-            getUidChangeTracker().expunged(messageResults);
+            getUidChangeTracker().expunged(uids);
             return messageResults.iterator();
         } catch (Exception e) {
             throw new MailboxManagerException(e);
         }
+    }
+
+    private long[] uids(List messageRows) {
+        final int size = messageRows.size();
+        long[] results = new long[size];
+        for (int i=0;i<size;i++) {
+            final MessageRow messageRow = (MessageRow) messageRows.get(i);
+            results[i] = (messageRow).getUid();
+        }
+        return results;
     }
 
     public Iterator setFlags(Flags flags, boolean value, boolean replace,



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

Reply via email to