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]