You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2011/04/14 12:39:40 UTC
svn commit: r1092111 - in /james/mailbox/trunk:
api/src/main/java/org/apache/james/mailbox/
api/src/main/java/org/apache/james/mailbox/util/
api/src/test/java/org/apache/james/mailbox/util/
jcr/src/main/java/org/apache/james/mailbox/jcr/mail/ jpa/src/m...
Author: norman
Date: Thu Apr 14 10:39:39 2011
New Revision: 1092111
URL: http://svn.apache.org/viewvc?rev=1092111&view=rev
Log:
Fire one event per operation which contains all effected uids. See MAILBOX-53
Added:
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/UpdatedFlags.java
- copied, changed from r1090983, james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/UpdatedFlags.java
Removed:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/UpdatedFlags.java
Modified:
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java
james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/util/MailboxEventDispatcherFlagsTest.java
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
Modified: james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java?rev=1092111&r1=1092110&r2=1092111&view=diff
==============================================================================
--- james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java (original)
+++ james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java Thu Apr 14 10:39:39 2011
@@ -20,6 +20,7 @@
package org.apache.james.mailbox;
import java.util.Iterator;
+import java.util.List;
import javax.mail.Flags;
@@ -130,11 +131,11 @@ public interface MailboxListener {
}
/**
- * Gets the message UID for the subject of this event.
+ * Gets the message UIDs for the subject of this event.
*
- * @return message uid
+ * @return message uids
*/
- public abstract long getSubjectUid();
+ public abstract List<Long> getUids();
}
public abstract class Expunged extends MessageEvent {
@@ -153,17 +154,7 @@ public interface MailboxListener {
super(session, path);
}
- /**
- * Gets new flags for this message.
- */
- public abstract Flags getNewFlags();
-
- /**
- * Gets an iterator for the system flags changed.
- *
- * @return <code>Flags.Flag</code> <code>Iterator</code>, not null
- */
- public abstract Iterator<Flags.Flag> flagsIterator();
+ public abstract List<UpdatedFlags> getUpdatedFlags();
}
/**
Copied: james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/UpdatedFlags.java (from r1090983, james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/UpdatedFlags.java)
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/UpdatedFlags.java?p2=james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/UpdatedFlags.java&p1=james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/UpdatedFlags.java&r1=1090983&r2=1092111&rev=1092111&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/UpdatedFlags.java (original)
+++ james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/UpdatedFlags.java Thu Apr 14 10:39:39 2011
@@ -17,27 +17,50 @@
* under the License. *
****************************************************************/
-package org.apache.james.mailbox.store.mail.model;
+package org.apache.james.mailbox;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.lang.UnsupportedOperationException;
import javax.mail.Flags;
+import javax.mail.Flags.Flag;
/**
* Represent a Flag update for a message
*
*
*/
-public class UpdatedFlags {
+public class UpdatedFlags implements Iterable<Flags.Flag>{
private final long uid;
private final Flags oldFlags;
private final Flags newFlags;
+ private final boolean[] modifiedFlags;
public UpdatedFlags(long uid, Flags oldFlags, Flags newFlags) {
this.uid = uid;
this.oldFlags = oldFlags;
this.newFlags = newFlags;
+ this.modifiedFlags = new boolean[NUMBER_OF_SYSTEM_FLAGS];
+ this.modifiedFlags[0] = isChanged(oldFlags, newFlags, Flags.Flag.ANSWERED);
+ this.modifiedFlags[1] = isChanged(oldFlags, newFlags, Flags.Flag.DELETED);
+ this.modifiedFlags[2] = isChanged(oldFlags, newFlags, Flags.Flag.DRAFT);
+ this.modifiedFlags[3] = isChanged(oldFlags, newFlags, Flags.Flag.FLAGGED);
+ this.modifiedFlags[4] = isChanged(oldFlags, newFlags, Flags.Flag.RECENT);
+ this.modifiedFlags[5] = isChanged(oldFlags, newFlags, Flags.Flag.SEEN);
}
+
+ private static boolean isChanged(final Flags original, final Flags updated, Flags.Flag flag) {
+ return original != null && updated != null && (original.contains(flag) ^ updated.contains(flag));
+ }
+
+ private static final Flags.Flag[] FLAGS = { Flags.Flag.ANSWERED, Flags.Flag.DELETED, Flags.Flag.DRAFT, Flags.Flag.FLAGGED, Flags.Flag.RECENT, Flags.Flag.SEEN };
+
+ private static final int NUMBER_OF_SYSTEM_FLAGS = 6;
+
+
/**
* Return the old {@link Flags} for the message
*
@@ -64,4 +87,62 @@ public class UpdatedFlags {
public long getUid() {
return uid;
}
+
+ private class FlagsIterator implements Iterator<Flag> {
+ private int position;
+
+ public FlagsIterator() {
+ position = 0;
+ nextPosition();
+ }
+
+ private void nextPosition() {
+ if ((position < NUMBER_OF_SYSTEM_FLAGS) && (!modifiedFlags[position])) {
+ position++;
+ nextPosition();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.Iterator#hasNext()
+ */
+ public boolean hasNext() {
+ return position < NUMBER_OF_SYSTEM_FLAGS;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.Iterator#next()
+ */
+ public Flag next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ final Flag result = FLAGS[position++];
+ nextPosition();
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.Iterator#remove()
+ */
+ public void remove() {
+ throw new UnsupportedOperationException("Read only");
+ }
+ }
+
+ /**
+ * Gets an iterator for the system flags changed.
+ *
+ * @return <code>Flags.Flag</code> <code>Iterator</code>, not null
+ */
+
+ public Iterator<Flags.Flag> iterator() {
+ return new FlagsIterator();
+ }
}
Modified: james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java?rev=1092111&r1=1092110&r2=1092111&view=diff
==============================================================================
--- james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java (original)
+++ james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java Thu Apr 14 10:39:39 2011
@@ -23,16 +23,13 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
-import java.util.NoSuchElementException;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
-import javax.mail.Flags;
-import javax.mail.Flags.Flag;
-
import org.apache.james.mailbox.MailboxListener;
import org.apache.james.mailbox.MailboxPath;
import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.UpdatedFlags;
/**
* Helper class to dispatch {@link Event}'s to registerend MailboxListener
@@ -70,13 +67,13 @@ public class MailboxEventDispatcher impl
* Should get called when a new message was added to a Mailbox. All
* registered MailboxListener will get triggered then
*
- * @param uid
+ * @param uids
* @param sessionId
* @param path
*/
- public void added(MailboxSession session, long uid, MailboxPath path) {
+ public void added(MailboxSession session, List<Long> uids, MailboxPath path) {
pruneClosed();
- final AddedImpl added = new AddedImpl(session, path, uid);
+ final AddedImpl added = new AddedImpl(session, path, uids);
event(added);
}
@@ -85,11 +82,11 @@ public class MailboxEventDispatcher impl
* registered MailboxListener will get triggered then
*
* @param session
- * @param uid
+ * @param uids
* @param path
*/
- public void expunged(final MailboxSession session, final long uid, MailboxPath path) {
- final ExpungedImpl expunged = new ExpungedImpl(session, path, uid);
+ public void expunged(final MailboxSession session, final List<Long> uids, MailboxPath path) {
+ final ExpungedImpl expunged = new ExpungedImpl(session, path, uids);
event(expunged);
}
@@ -98,13 +95,13 @@ public class MailboxEventDispatcher impl
* registered MailboxListener will get triggered then
*
* @param session
- * @param uid
+ * @param uids
* @param path
* @param original
* @param updated
*/
- public void flagsUpdated(MailboxSession session, final long uid, final MailboxPath path, final Flags original, final Flags updated) {
- final FlagsUpdatedImpl flags = new FlagsUpdatedImpl(session, path, uid, original, updated);
+ public void flagsUpdated(MailboxSession session, final List<Long> uids, final MailboxPath path, final List<UpdatedFlags> uflags) {
+ final FlagsUpdatedImpl flags = new FlagsUpdatedImpl(session, path, uids, uflags);
event(flags);
}
@@ -152,149 +149,69 @@ public class MailboxEventDispatcher impl
private final static class AddedImpl extends MailboxListener.Added {
- private final long subjectUid;
+ private final List<Long> uids;
- public AddedImpl(final MailboxSession session, final MailboxPath path, final long subjectUid) {
+ public AddedImpl(final MailboxSession session, final MailboxPath path, final List<Long> uids) {
super(session, path);
- this.subjectUid = subjectUid;
+ this.uids = uids;
}
/*
* (non-Javadoc)
- *
- * @see
- * org.apache.james.mailbox.MailboxListener.MessageEvent#getSubjectUid()
+ * @see org.apache.james.mailbox.MailboxListener.MessageEvent#getUids()
*/
- public long getSubjectUid() {
- return subjectUid;
+ public List<Long> getUids() {
+ return uids;
}
}
private final static class ExpungedImpl extends MailboxListener.Expunged {
- private final long subjectUid;
+ private final List<Long> uids;
- public ExpungedImpl(MailboxSession session, final MailboxPath path, final long subjectUid) {
+ public ExpungedImpl(MailboxSession session, final MailboxPath path, final List<Long> uids) {
super(session, path);
- this.subjectUid = subjectUid;
+ this.uids = uids;
}
-
- public long getSubjectUid() {
- return subjectUid;
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.mailbox.MailboxListener.MessageEvent#getUids()
+ */
+ public List<Long> getUids() {
+ return uids;
}
}
private final static class FlagsUpdatedImpl extends MailboxListener.FlagsUpdated {
- private static boolean isChanged(final Flags original, final Flags updated, Flags.Flag flag) {
- return original != null && updated != null && (original.contains(flag) ^ updated.contains(flag));
- }
-
- private static final Flags.Flag[] FLAGS = { Flags.Flag.ANSWERED, Flags.Flag.DELETED, Flags.Flag.DRAFT, Flags.Flag.FLAGGED, Flags.Flag.RECENT, Flags.Flag.SEEN };
+ private final List<Long> uids;
- private static final int NUMBER_OF_SYSTEM_FLAGS = 6;
- private final long subjectUid;
+ private final List<UpdatedFlags> uFlags;
- private final boolean[] modifiedFlags;
-
- private final Flags newFlags;
-
- public FlagsUpdatedImpl(MailboxSession session, final MailboxPath path, final long subjectUid, final Flags original, final Flags updated) {
- this(session, path, subjectUid, updated, isChanged(original, updated, Flags.Flag.ANSWERED), isChanged(original, updated, Flags.Flag.DELETED), isChanged(original, updated, Flags.Flag.DRAFT), isChanged(original, updated, Flags.Flag.FLAGGED),
- isChanged(original, updated, Flags.Flag.RECENT), isChanged(original, updated, Flags.Flag.SEEN));
- }
-
- public FlagsUpdatedImpl(MailboxSession session, final MailboxPath path, final long subjectUid, final Flags newFlags, boolean answeredUpdated, boolean deletedUpdated, boolean draftUpdated, boolean flaggedUpdated, boolean recentUpdated, boolean seenUpdated) {
+ public FlagsUpdatedImpl(MailboxSession session, final MailboxPath path, final List<Long> uids, final List<UpdatedFlags> uFlags) {
super(session, path);
- this.subjectUid = subjectUid;
- this.modifiedFlags = new boolean[NUMBER_OF_SYSTEM_FLAGS];
- this.modifiedFlags[0] = answeredUpdated;
- this.modifiedFlags[1] = deletedUpdated;
- this.modifiedFlags[2] = draftUpdated;
- this.modifiedFlags[3] = flaggedUpdated;
- this.modifiedFlags[4] = recentUpdated;
- this.modifiedFlags[5] = seenUpdated;
- this.newFlags = newFlags;
- }
+ this.uids = uids;
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.james.mailbox.MailboxListener.MessageEvent#getSubjectUid()
- */
- public long getSubjectUid() {
- return subjectUid;
+ this.uFlags = uFlags;
}
/*
* (non-Javadoc)
- *
- * @see
- * org.apache.james.mailbox.MailboxListener.FlagsUpdated#flagsIterator()
+ * @see org.apache.james.mailbox.MailboxListener.MessageEvent#getUids()
*/
- public Iterator<Flag> flagsIterator() {
- return new FlagsIterator();
+ public List<Long> getUids() {
+ return uids;
}
/*
* (non-Javadoc)
- *
- * @see
- * org.apache.james.mailbox.MailboxListener.FlagsUpdated#getNewFlags()
+ * @see org.apache.james.mailbox.MailboxListener.FlagsUpdated#getUpdatedFlags()
*/
- public Flags getNewFlags() {
- return newFlags;
+ public List<UpdatedFlags> getUpdatedFlags() {
+ return uFlags;
}
- private class FlagsIterator implements Iterator<Flag> {
- private int position;
-
- public FlagsIterator() {
- position = 0;
- nextPosition();
- }
-
- private void nextPosition() {
- if ((position < NUMBER_OF_SYSTEM_FLAGS) && (!modifiedFlags[position])) {
- position++;
- nextPosition();
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see java.util.Iterator#hasNext()
- */
- public boolean hasNext() {
- return position < NUMBER_OF_SYSTEM_FLAGS;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see java.util.Iterator#next()
- */
- public Flag next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- final Flag result = FLAGS[position++];
- nextPosition();
- return result;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see java.util.Iterator#remove()
- */
- public void remove() {
- throw new UnsupportedOperationException("Read only");
- }
- }
}
/**
Modified: james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/util/MailboxEventDispatcherFlagsTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/util/MailboxEventDispatcherFlagsTest.java?rev=1092111&r1=1092110&r2=1092111&view=diff
==============================================================================
--- james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/util/MailboxEventDispatcherFlagsTest.java (original)
+++ james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/util/MailboxEventDispatcherFlagsTest.java Thu Apr 14 10:39:39 2011
@@ -21,6 +21,7 @@ package org.apache.james.mailbox.util;
import static org.junit.Assert.*;
+import java.util.Arrays;
import java.util.Iterator;
import javax.mail.Flags;
@@ -29,6 +30,7 @@ import org.apache.james.mailbox.MailboxL
import org.apache.james.mailbox.MailboxPath;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageResult;
+import org.apache.james.mailbox.UpdatedFlags;
import org.apache.james.mailbox.mock.MockMailboxSession;
import org.apache.james.mailbox.util.MailboxEventDispatcher;
import org.jmock.Expectations;
@@ -68,46 +70,33 @@ public class MailboxEventDispatcherFlags
dispatcher.addMailboxListener(collector);
result = mockery.mock(MessageResult.class);
mockery.checking(new Expectations() {{
- oneOf (result).getUid();will(returnValue(23L));
+ allowing(result).getUid();will(returnValue(23L));
}});
}
-
- @Test
- public void testShouldReturnNoChangesWhenOriginalNull() throws Exception {
- dispatcher.flagsUpdated(session, result.getUid(), path, 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);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
- assertNotNull(iterator);
- assertFalse(iterator.hasNext());
- }
@Test
public void testShouldReturnNoChangesWhenSystemFlagsUnchanged() {
- dispatcher.flagsUpdated(session, result.getUid(), path, new Flags(
- Flags.Flag.DELETED), new Flags(Flags.Flag.DELETED));
+ dispatcher.flagsUpdated(session, Arrays.asList(result.getUid()), path, Arrays.asList(new UpdatedFlags(result.getUid(), 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);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
+ Iterator<Flags.Flag> iterator = event.getUpdatedFlags().get(0).iterator();
assertNotNull(iterator);
assertFalse(iterator.hasNext());
}
@Test
public void testShouldShowAnsweredAdded() {
- dispatcher.flagsUpdated(session, result.getUid(), path, new Flags(),
- new Flags(Flags.Flag.ANSWERED));
+ dispatcher.flagsUpdated(session, Arrays.asList(result.getUid()), path, Arrays.asList(new UpdatedFlags(result.getUid(), 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);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
+ Iterator<Flags.Flag> iterator = event.getUpdatedFlags().get(0).iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals(Flags.Flag.ANSWERED, iterator.next());
@@ -116,13 +105,13 @@ public class MailboxEventDispatcherFlags
@Test
public void testShouldShowAnsweredRemoved() {
- dispatcher.flagsUpdated(session, result.getUid(), path, new Flags(
- Flags.Flag.ANSWERED), new Flags());
+ dispatcher.flagsUpdated(session, Arrays.asList(result.getUid()), path, Arrays.asList(new UpdatedFlags(result.getUid(), 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);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
+ Iterator<Flags.Flag> iterator = event.getUpdatedFlags().get(0).iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals(Flags.Flag.ANSWERED, iterator.next());
@@ -131,13 +120,13 @@ public class MailboxEventDispatcherFlags
@Test
public void testShouldShowDeletedAdded() {
- dispatcher.flagsUpdated(session, result.getUid(), path, new Flags(),
- new Flags(Flags.Flag.DELETED));
+ dispatcher.flagsUpdated(session, Arrays.asList(result.getUid()), path, Arrays.asList(new UpdatedFlags(result.getUid(), 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);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
+ Iterator<Flags.Flag> iterator = event.getUpdatedFlags().get(0).iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals(Flags.Flag.DELETED, iterator.next());
@@ -146,13 +135,13 @@ public class MailboxEventDispatcherFlags
@Test
public void testShouldShowDeletedRemoved() {
- dispatcher.flagsUpdated(session, result.getUid(), path, new Flags(
- Flags.Flag.DELETED), new Flags());
+ dispatcher.flagsUpdated(session, Arrays.asList(result.getUid()), path, Arrays.asList(new UpdatedFlags(result.getUid(), 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);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
+ Iterator<Flags.Flag> iterator = event.getUpdatedFlags().get(0).iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals(Flags.Flag.DELETED, iterator.next());
@@ -161,13 +150,13 @@ public class MailboxEventDispatcherFlags
@Test
public void testShouldShowDraftAdded() {
- dispatcher.flagsUpdated(session, result.getUid(), path, new Flags(),
- new Flags(Flags.Flag.DRAFT));
+ dispatcher.flagsUpdated(session, Arrays.asList(result.getUid()), path, Arrays.asList(new UpdatedFlags(result.getUid(), 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);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
+ Iterator<Flags.Flag> iterator = event.getUpdatedFlags().get(0).iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals(Flags.Flag.DRAFT, iterator.next());
@@ -176,13 +165,13 @@ public class MailboxEventDispatcherFlags
@Test
public void testShouldShowDraftRemoved() {
- dispatcher.flagsUpdated(session, result.getUid(), path, new Flags(
- Flags.Flag.DRAFT), new Flags());
+ dispatcher.flagsUpdated(session,Arrays.asList(result.getUid()), path, Arrays.asList(new UpdatedFlags(result.getUid(), 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);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
+ Iterator<Flags.Flag> iterator = event.getUpdatedFlags().get(0).iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals(Flags.Flag.DRAFT, iterator.next());
@@ -191,13 +180,13 @@ public class MailboxEventDispatcherFlags
@Test
public void testShouldShowFlaggedAdded() {
- dispatcher.flagsUpdated(session, result.getUid(), path, new Flags(),
- new Flags(Flags.Flag.FLAGGED));
+ dispatcher.flagsUpdated(session, Arrays.asList(result.getUid()), path, Arrays.asList(new UpdatedFlags(result.getUid(), 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);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
+ Iterator<Flags.Flag> iterator = event.getUpdatedFlags().get(0).iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals(Flags.Flag.FLAGGED, iterator.next());
@@ -206,13 +195,13 @@ public class MailboxEventDispatcherFlags
@Test
public void testShouldShowFlaggedRemoved() {
- dispatcher.flagsUpdated(session, result.getUid(), path, new Flags(
- Flags.Flag.FLAGGED), new Flags());
+ dispatcher.flagsUpdated(session, Arrays.asList(result.getUid()), path, Arrays.asList(new UpdatedFlags(result.getUid(), 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);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
+ Iterator<Flags.Flag> iterator = event.getUpdatedFlags().get(0).iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals(Flags.Flag.FLAGGED, iterator.next());
@@ -221,13 +210,13 @@ public class MailboxEventDispatcherFlags
@Test
public void testShouldShowRecentAdded() {
- dispatcher.flagsUpdated(session, result.getUid(), path, new Flags(),
- new Flags(Flags.Flag.RECENT));
+ dispatcher.flagsUpdated(session, Arrays.asList(result.getUid()), path, Arrays.asList(new UpdatedFlags(result.getUid(), 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);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
+ Iterator<Flags.Flag> iterator = event.getUpdatedFlags().get(0).iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals(Flags.Flag.RECENT, iterator.next());
@@ -236,13 +225,13 @@ public class MailboxEventDispatcherFlags
@Test
public void testShouldShowRecentRemoved() {
- dispatcher.flagsUpdated(session, result.getUid(), path, new Flags(
- Flags.Flag.RECENT), new Flags());
+ dispatcher.flagsUpdated(session, Arrays.asList(result.getUid()), path, Arrays.asList(new UpdatedFlags(result.getUid(), 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);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
+ Iterator<Flags.Flag> iterator = event.getUpdatedFlags().get(0).iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals(Flags.Flag.RECENT, iterator.next());
@@ -251,13 +240,13 @@ public class MailboxEventDispatcherFlags
@Test
public void testShouldShowSeenAdded() {
- dispatcher.flagsUpdated(session, result.getUid(), path, new Flags(),
- new Flags(Flags.Flag.SEEN));
+ dispatcher.flagsUpdated(session, Arrays.asList(result.getUid()), path, Arrays.asList(new UpdatedFlags(result.getUid(), 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);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
+ Iterator<Flags.Flag> iterator = event.getUpdatedFlags().get(0).iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals(Flags.Flag.SEEN, iterator.next());
@@ -266,13 +255,13 @@ public class MailboxEventDispatcherFlags
@Test
public void testShouldShowSeenRemoved() {
- dispatcher.flagsUpdated(session, result.getUid(), path, new Flags(
- Flags.Flag.SEEN), new Flags());
+ dispatcher.flagsUpdated(session, Arrays.asList(result.getUid()), path, Arrays.asList(new UpdatedFlags(result.getUid(), 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);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
+ Iterator<Flags.Flag> iterator = event.getUpdatedFlags().get(0).iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals(Flags.Flag.SEEN, iterator.next());
@@ -289,12 +278,12 @@ public class MailboxEventDispatcherFlags
updated.add(Flags.Flag.DRAFT);
updated.add(Flags.Flag.SEEN);
- dispatcher.flagsUpdated(session, result.getUid(), path, originals, updated);
+ dispatcher.flagsUpdated(session, Arrays.asList(result.getUid()), path, Arrays.asList(new UpdatedFlags(result.getUid(), originals, updated)));
assertEquals(1, collector.events.size());
assertTrue(collector.events.get(0) instanceof MailboxListener.FlagsUpdated);
MailboxListener.FlagsUpdated event = (MailboxListener.FlagsUpdated) collector.events
.get(0);
- Iterator<Flags.Flag> iterator = event.flagsIterator();
+ Iterator<Flags.Flag> iterator = event.getUpdatedFlags().get(0).iterator();
assertNotNull(iterator);
assertTrue(iterator.hasNext());
assertEquals(Flags.Flag.ANSWERED, iterator.next());
Modified: james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java?rev=1092111&r1=1092110&r2=1092111&view=diff
==============================================================================
--- james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java (original)
+++ james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java Thu Apr 14 10:39:39 2011
@@ -40,6 +40,7 @@ import org.apache.james.mailbox.MailboxE
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageRange;
import org.apache.james.mailbox.SearchQuery;
+import org.apache.james.mailbox.UpdatedFlags;
import org.apache.james.mailbox.MessageRange.Type;
import org.apache.james.mailbox.SearchQuery.Criterion;
import org.apache.james.mailbox.SearchQuery.NumericRange;
@@ -50,7 +51,6 @@ import org.apache.james.mailbox.store.Se
import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMembership;
-import org.apache.james.mailbox.store.mail.model.UpdatedFlags;
import org.slf4j.Logger;
/**
Modified: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java?rev=1092111&r1=1092110&r2=1092111&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java (original)
+++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java Thu Apr 14 10:39:39 2011
@@ -30,6 +30,7 @@ import javax.persistence.Query;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MessageRange;
import org.apache.james.mailbox.SearchQuery;
+import org.apache.james.mailbox.UpdatedFlags;
import org.apache.james.mailbox.MessageRange.Type;
import org.apache.james.mailbox.SearchQuery.Criterion;
import org.apache.james.mailbox.SearchQuery.NumericRange;
@@ -42,7 +43,6 @@ import org.apache.james.mailbox.store.Se
import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMembership;
-import org.apache.james.mailbox.store.mail.model.UpdatedFlags;
import org.apache.openjpa.persistence.ArgumentException;
/**
Modified: james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java?rev=1092111&r1=1092110&r2=1092111&view=diff
==============================================================================
--- james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java (original)
+++ james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java Thu Apr 14 10:39:39 2011
@@ -36,6 +36,7 @@ import org.apache.commons.io.FileUtils;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MessageRange;
import org.apache.james.mailbox.SearchQuery;
+import org.apache.james.mailbox.UpdatedFlags;
import org.apache.james.mailbox.MessageRange.Type;
import org.apache.james.mailbox.SearchQuery.Criterion;
import org.apache.james.mailbox.SearchQuery.NumericRange;
@@ -50,7 +51,6 @@ import org.apache.james.mailbox.store.Se
import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMembership;
-import org.apache.james.mailbox.store.mail.model.UpdatedFlags;
import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
public class MaildirMessageMapper extends NonTransactionalMapper implements MessageMapper<Integer> {
Modified: james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java?rev=1092111&r1=1092110&r2=1092111&view=diff
==============================================================================
--- james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java (original)
+++ james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java Thu Apr 14 10:39:39 2011
@@ -31,13 +31,13 @@ import javax.mail.Flags;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MessageRange;
import org.apache.james.mailbox.SearchQuery;
+import org.apache.james.mailbox.UpdatedFlags;
import org.apache.james.mailbox.inmemory.mail.model.SimpleMailboxMembership;
import org.apache.james.mailbox.store.SearchQueryIterator;
import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMembership;
import org.apache.james.mailbox.store.mail.model.MailboxMembershipComparator;
-import org.apache.james.mailbox.store.mail.model.UpdatedFlags;
import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
public class InMemoryMessageMapper extends NonTransactionalMapper implements MessageMapper<Long> {
Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java?rev=1092111&r1=1092110&r2=1092111&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java Thu Apr 14 10:39:39 2011
@@ -25,6 +25,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.PushbackInputStream;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@@ -42,6 +43,7 @@ import org.apache.james.mailbox.MailboxS
import org.apache.james.mailbox.MessageRange;
import org.apache.james.mailbox.MessageResult;
import org.apache.james.mailbox.SearchQuery;
+import org.apache.james.mailbox.UpdatedFlags;
import org.apache.james.mailbox.MessageResult.FetchGroup;
import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.MessageMapperFactory;
@@ -50,7 +52,6 @@ import org.apache.james.mailbox.store.ma
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMembership;
import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
-import org.apache.james.mailbox.store.mail.model.UpdatedFlags;
import org.apache.james.mailbox.store.streaming.ConfigurableMimeTokenStream;
import org.apache.james.mailbox.store.streaming.CountingInputStream;
import org.apache.james.mailbox.store.transaction.Mapper;
@@ -132,9 +133,9 @@ public abstract class StoreMessageManage
Iterator<Long> uidIt = deleteMarkedInMailbox(set, mailboxSession);
while(uidIt.hasNext()) {
long uid = uidIt.next();
- dispatcher.expunged(mailboxSession, uid, new StoreMailboxPath<Id>(getMailboxEntity()));
uids.add(uid);
}
+ dispatcher.expunged(mailboxSession, uids, new StoreMailboxPath<Id>(getMailboxEntity()));
return uids.iterator();
}
@@ -261,7 +262,7 @@ public abstract class StoreMessageManage
final MailboxMembership<Id> message = createMessage(nextUid, internalDate, size, bodyStartOctet, tmpMsgIn.newStream(0, -1), flags, headers, propertyBuilder);
long uid = appendMessageToStore(message, mailboxSession);
- dispatcher.added(mailboxSession, uid, new StoreMailboxPath<Id>(getMailboxEntity()));
+ dispatcher.added(mailboxSession, Arrays.asList(uid), new StoreMailboxPath<Id>(getMailboxEntity()));
return uid;
} catch (IOException e) {
throw new MailboxException("Unable to parse message", e);
@@ -413,12 +414,16 @@ public abstract class StoreMessageManage
}
});
-
+ final SortedMap<Long, UpdatedFlags> uFlags = new TreeMap<Long, UpdatedFlags>();
+
while (it.hasNext()) {
UpdatedFlags flag = it.next();
- dispatcher.flagsUpdated(mailboxSession, flag.getUid(), new StoreMailboxPath<Id>(getMailboxEntity()), flag.getOldFlags(), flag.getNewFlags());
newFlagsByUid.put(flag.getUid(), flag.getNewFlags());
+ uFlags.put(flag.getUid(), flag);
}
+
+ dispatcher.flagsUpdated(mailboxSession, new ArrayList<Long>(uFlags.keySet()), new StoreMailboxPath<Id>(getMailboxEntity()), new ArrayList<UpdatedFlags>(uFlags.values()));
+
return newFlagsByUid;
}
@@ -436,11 +441,14 @@ public abstract class StoreMessageManage
try {
List<MessageRange> result=new ArrayList<MessageRange>();
Iterator<Long> copiedUids = copy(set, toMailbox, session);
+ List<Long> uids = new ArrayList<Long>();
while(copiedUids.hasNext()) {
long uid = copiedUids.next();
result.add(MessageRange.one(uid));
- dispatcher.added(session, uid, new StoreMailboxPath<Id>(toMailbox.getMailboxEntity()));
+ uids.add(uid);
}
+ dispatcher.added(session, uids, new StoreMailboxPath<Id>(toMailbox.getMailboxEntity()));
+
return result;
} catch (MailboxException e) {
throw new MailboxException("Unable to parse message", e);
Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java?rev=1092111&r1=1092110&r2=1092111&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java Thu Apr 14 10:39:39 2011
@@ -26,10 +26,10 @@ import javax.mail.Flags;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MessageRange;
import org.apache.james.mailbox.SearchQuery;
+import org.apache.james.mailbox.UpdatedFlags;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMembership;
import org.apache.james.mailbox.store.mail.model.Message;
-import org.apache.james.mailbox.store.mail.model.UpdatedFlags;
import org.apache.james.mailbox.store.transaction.Mapper;
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org